Jelajahi Sumber

Extract Lib and Viewer Build

sebastien 6 tahun lalu
induk
melakukan
518f440b85

+ 54 - 51
Tools/Gulp/config.json

@@ -1498,7 +1498,9 @@
         "loaders",
         "serializers",
         "gui",
-        "inspector",
+        "inspector"
+    ],
+    "viewerModules": [
         "viewer",
         "viewer-assets"
     ],
@@ -1508,7 +1510,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylonjs.materials.min.js",
-                "webpack": "../../materialsLibrary/webpack.config.js",
+                "webpack": "../../../materialsLibrary/webpack.config.js",
                 "entry": "./src/legacy.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1518,7 +1520,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.cellMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.cell.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.cell.config.js",
                 "entry": "./legacy/legacy-cell.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1528,7 +1530,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.customMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.custom.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.custom.config.js",
                 "entry": "./legacy/legacy-custom.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1538,7 +1540,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.fireMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.fire.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.fire.config.js",
                 "entry": "./legacy/legacy-fire.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1548,7 +1550,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.furMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.fur.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.fur.config.js",
                 "entry": "./legacy/legacy-fur.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1558,7 +1560,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.gradientMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.gradient.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.gradient.config.js",
                 "entry": "./legacy/legacy-gradient.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1568,7 +1570,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.gridMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.grid.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.grid.config.js",
                 "entry": "./legacy/legacy-grid.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1578,7 +1580,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.lavaMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.lava.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.lava.config.js",
                 "entry": "./legacy/legacy-lava.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1588,7 +1590,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.mixMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.mix.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.mix.config.js",
                 "entry": "./legacy/legacy-mix.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1598,7 +1600,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.normalMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.normal.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.normal.config.js",
                 "entry": "./legacy/legacy-normal.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1608,7 +1610,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.shadowOnlyMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.shadowOnly.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.shadowOnly.config.js",
                 "entry": "./legacy/legacy-shadowOnly.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1618,7 +1620,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.simpleMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.simple.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.simple.config.js",
                 "entry": "./legacy/legacy-simple.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1628,7 +1630,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.skyMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.sky.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.sky.config.js",
                 "entry": "./legacy/legacy-sky.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1638,7 +1640,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.terrainMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.terrain.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.terrain.config.js",
                 "entry": "./legacy/legacy-terrain.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1648,7 +1650,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.triPlanarMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.triPlanar.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.triPlanar.config.js",
                 "entry": "./legacy/legacy-triPlanar.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1658,7 +1660,7 @@
             {
                 "noBundleInName": true,
                 "output": "babylon.waterMaterial.min.js",
-                "webpack": "../../materialsLibrary/legacy/webpack.water.config.js",
+                "webpack": "../../../materialsLibrary/legacy/webpack.water.config.js",
                 "entry": "./legacy/legacy-water.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1667,7 +1669,7 @@
             }
         ],
         "build": {
-            "webpack": "../../materialsLibrary/webpack.config.js",
+            "webpack": "../../../materialsLibrary/webpack.config.js",
             "srcOutputDirectory": "../../materialsLibrary/src/",
             "distOutputDirectory": "/materialsLibrary/",
             "dtsBundle": {
@@ -1696,7 +1698,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylonjs.postProcess.min.js",
-                "webpack": "../../postProcessLibrary/webpack.config.js",
+                "webpack": "../../../postProcessLibrary/webpack.config.js",
                 "entry": "./src/legacy.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1707,7 +1709,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.asciiArtPostProcess.min.js",
-                "webpack": "../../postProcessLibrary/legacy/webpack.asciiArt.config.js",
+                "webpack": "../../../postProcessLibrary/legacy/webpack.asciiArt.config.js",
                 "entry": "./legacy/legacy-asciiArt.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1718,7 +1720,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.digitalRainPostProcess.min.js",
-                "webpack": "../../postProcessLibrary/legacy/webpack.digitalRain.config.js",
+                "webpack": "../../../postProcessLibrary/legacy/webpack.digitalRain.config.js",
                 "entry": "./legacy/legacy-digitalRain.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1727,7 +1729,7 @@
             }
         ],
         "build": {
-            "webpack": "../../postProcessLibrary/webpack.config.js",
+            "webpack": "../../../postProcessLibrary/webpack.config.js",
             "srcOutputDirectory": "../../postProcessLibrary/src/",
             "distOutputDirectory": "/postProcessesLibrary/",
             "dtsBundle": {
@@ -1756,7 +1758,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylonjs.proceduralTextures.min.js",
-                "webpack": "../../proceduralTexturesLibrary/webpack.config.js",
+                "webpack": "../../../proceduralTexturesLibrary/webpack.config.js",
                 "entry": "./src/legacy.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1767,7 +1769,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.brickProceduralTexture.min.js",
-                "webpack": "../../proceduralTexturesLibrary/webpack.config.js",
+                "webpack": "../../../proceduralTexturesLibrary/webpack.config.js",
                 "entry": "./legacy/legacy-brick.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1778,7 +1780,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.cloudProceduralTexture.min.js",
-                "webpack": "../../proceduralTexturesLibrary/webpack.config.js",
+                "webpack": "../../../proceduralTexturesLibrary/webpack.config.js",
                 "entry": "./legacy/legacy-cloud.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1789,7 +1791,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.fireProceduralTexture.min.js",
-                "webpack": "../../proceduralTexturesLibrary/webpack.config.js",
+                "webpack": "../../../proceduralTexturesLibrary/webpack.config.js",
                 "entry": "./legacy/legacy-fire.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1800,7 +1802,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.grassProceduralTexture.min.js",
-                "webpack": "../../proceduralTexturesLibrary/webpack.config.js",
+                "webpack": "../../../proceduralTexturesLibrary/webpack.config.js",
                 "entry": "./legacy/legacy-grass.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1811,7 +1813,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.marbleProceduralTexture.min.js",
-                "webpack": "../../proceduralTexturesLibrary/webpack.config.js",
+                "webpack": "../../../proceduralTexturesLibrary/webpack.config.js",
                 "entry": "./legacy/legacy-marble.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1822,7 +1824,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.normalMapProceduralTexture.min.js",
-                "webpack": "../../proceduralTexturesLibrary/webpack.config.js",
+                "webpack": "../../../proceduralTexturesLibrary/webpack.config.js",
                 "entry": "./legacy/legacy-normalMap.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1833,7 +1835,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.perlinNoiseProceduralTexture.min.js",
-                "webpack": "../../proceduralTexturesLibrary/webpack.config.js",
+                "webpack": "../../../proceduralTexturesLibrary/webpack.config.js",
                 "entry": "./legacy/legacy-perlinNoise.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1844,7 +1846,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.roadProceduralTexture.min.js",
-                "webpack": "../../proceduralTexturesLibrary/webpack.config.js",
+                "webpack": "../../../proceduralTexturesLibrary/webpack.config.js",
                 "entry": "./legacy/legacy-road.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1855,7 +1857,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.starfieldProceduralTexture.min.js",
-                "webpack": "../../proceduralTexturesLibrary/webpack.config.js",
+                "webpack": "../../../proceduralTexturesLibrary/webpack.config.js",
                 "entry": "./legacy/legacy-starfield.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1866,7 +1868,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.woodProceduralTexture.min.js",
-                "webpack": "../../proceduralTexturesLibrary/webpack.config.js",
+                "webpack": "../../../proceduralTexturesLibrary/webpack.config.js",
                 "entry": "./legacy/legacy-wood.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1875,7 +1877,7 @@
             }
         ],
         "build": {
-            "webpack": "../../proceduralTexturesLibrary/webpack.config.js",
+            "webpack": "../../../proceduralTexturesLibrary/webpack.config.js",
             "srcOutputDirectory": "../../proceduralTexturesLibrary/src/",
             "distOutputDirectory": "/proceduralTexturesLibrary/",
             "dtsBundle": {
@@ -1904,7 +1906,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylonjs.loaders.min.js",
-                "webpack": "../../loaders/webpack.config.js",
+                "webpack": "../../../loaders/webpack.config.js",
                 "entry": "./src/legacy.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1915,7 +1917,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.objFileLoader.min.js",
-                "webpack": "../../loaders/webpack.config.js",
+                "webpack": "../../../loaders/webpack.config.js",
                 "entry": "./legacy/legacy-objFileLoader.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1926,7 +1928,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.stlFileLoader.min.js",
-                "webpack": "../../loaders/webpack.config.js",
+                "webpack": "../../../loaders/webpack.config.js",
                 "entry": "./legacy/legacy-stlFileLoader.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1937,7 +1939,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.glTF1FileLoader.min.js",
-                "webpack": "../../loaders/webpack.config.js",
+                "webpack": "../../../loaders/webpack.config.js",
                 "entry": "./legacy/legacy-glTF1FileLoader.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1948,7 +1950,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.glTF2FileLoader.min.js",
-                "webpack": "../../loaders/webpack.config.js",
+                "webpack": "../../../loaders/webpack.config.js",
                 "entry": "./legacy/legacy-glTF2FileLoader.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1959,7 +1961,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.glTFFileLoader.min.js",
-                "webpack": "../../loaders/webpack.config.js",
+                "webpack": "../../../loaders/webpack.config.js",
                 "entry": "./legacy/legacy-glTFFileLoader.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -1968,7 +1970,7 @@
             }
         ],
         "build": {
-            "webpack": "../../loaders/webpack.config.js",
+            "webpack": "../../../loaders/webpack.config.js",
             "srcOutputDirectory": "../../loaders/src/",
             "distOutputDirectory": "/loaders/",
             "dtsBundle": {
@@ -1998,7 +2000,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylonjs.serializers.min.js",
-                "webpack": "../../serializers/webpack.config.js",
+                "webpack": "../../../serializers/webpack.config.js",
                 "entry": "./src/legacy.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -2009,7 +2011,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.objSerializer.min.js",
-                "webpack": "../../serializers/webpack.config.js",
+                "webpack": "../../../serializers/webpack.config.js",
                 "entry": "./legacy/legacy-objSerializer.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -2020,7 +2022,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.glTF2Serializer.min.js",
-                "webpack": "../../serializers/webpack.config.js",
+                "webpack": "../../../serializers/webpack.config.js",
                 "entry": "./legacy/legacy-glTF2Serializer.ts",
                 "bundle": "true",
                 "babylonIncluded": false,
@@ -2029,7 +2031,7 @@
             }
         ],
         "build": {
-            "webpack": "../../serializers/webpack.config.js",
+            "webpack": "../../../serializers/webpack.config.js",
             "srcOutputDirectory": "../../serializers/src/",
             "distOutputDirectory": "/serializers/",
             "dtsBundle": {
@@ -2059,7 +2061,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.gui.min.js",
-                "webpack": "../../gui/webpack.config.js",
+                "webpack": "../../../gui/webpack.config.js",
                 "bundle": "true",
                 "babylonIncluded": false,
                 "useOutputForDebugging": true,
@@ -2101,7 +2103,7 @@
                 "files": [],
                 "sassFiles": [],
                 "output": "babylon.inspector.bundle.js",
-                "webpack": "../../inspector/webpack.config.js",
+                "webpack": "../../../inspector/webpack.config.js",
                 "bundle": "true",
                 "extendsRoot": true,
                 "useOutputForDebugging": true,
@@ -2138,7 +2140,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.viewer.js",
-                "webpack": "../../Viewer/webpack.gulp.config.js",
+                "webpack": "../../../Viewer/webpack.gulp.config.js",
                 "bundle": "true",
                 "moduleDeclaration": {
                     "name": "BabylonViewer",
@@ -2156,12 +2158,13 @@
             "dtsBundle": {
                 "name": "babylonjs-viewer",
                 "main": "../../dist/preview release/viewer/build/src/index.d.ts",
-                "out": "../../babylon.viewer.module.d.ts",
-                "prependText": "/// <reference path=\"./babylon.d.ts\"/>\n/// <reference path=\"./babylon.glTF2Interface.d.ts\"/>\n/// <reference path=\"./babylonjs.loaders.d.ts\"/>\ndeclare module \"babylonjs-loaders\"{ export=BABYLON;}\n"
+                "out": "../../babylon.viewer.module.d.ts"
             },
             "processDeclaration": {
                 "packageName": "babylonjs-viewer",
                 "moduleName": "BabylonViewer",
+                "doNotAppendNamespace": true,
+                "prependText": "/// <reference path=\"./babylon.d.ts\"/>\n/// <reference path=\"./babylon.glTF2Interface.d.ts\"/>\n/// <reference path=\"./babylonjs.loaders.d.ts\"/>\ndeclare module \"babylonjs-loaders\"{ export=BABYLON;}\n",
                 "importsToRemove": [
                     "pep",
                     "babylonjs-loaders"
@@ -2211,7 +2214,7 @@
                 "files": [],
                 "noBundleInName": true,
                 "output": "babylon.viewer.assets.js",
-                "webpack": "../../Viewer/webpack.assets.config.js",
+                "webpack": "../../../Viewer/webpack.assets.config.js",
                 "bundle": "true",
                 "moduleDeclaration": {
                     "name": "BabylonViewerAssets",

+ 3 - 174
Tools/Gulp/gulpfile.js

@@ -13,11 +13,6 @@ var expect = require("gulp-expect-file");
 var optimisejs = require("gulp-optimize-js");
 var filter = require('gulp-filter');
 var path = require("path");
-var webpack = require('webpack');
-var webpackStream = require("webpack-stream");
-var fs = require("fs");
-var dtsBundle = require('dts-bundle');
-var through = require('through2');
 
 // Gulp Helpers
 var addDtsExport = require("./helpers/gulp-addDtsExport");
@@ -25,10 +20,10 @@ var addDecorateAndExtends = require("./helpers/gulp-decorateAndExtends");
 var addModuleExports = require("./helpers/gulp-addModuleExports");
 var addES6Exports = require("./helpers/gulp-addES6Exports");
 var uncommentShader = require("./helpers/gulp-removeShaderComments");
-var processDeclaration = require('./helpers/gulp-processTypescriptDeclaration');
-var rmDir = require("./helpers/gulp-rmDir");
 
 // Import Gulp Tasks
+require("./tasks/gulpTasks-libraries");
+require("./tasks/gulpTasks-viewerLibraries");
 require("./tasks/gulpTasks-tsLint");
 require("./tasks/gulpTasks-netlify");
 require("./tasks/gulpTasks-whatsNew");
@@ -284,176 +279,10 @@ gulp.task("typescript-compile", function() {
  */
 gulp.task("typescript", gulp.series("typescript-compile", "buildWorker", "build"));
 
-var buildExternalLibrary = function(library, settings) {
-    var outputDirectory = config.build.outputDirectory + settings.build.distOutputDirectory;
-
-    if (!library.webpack) {
-        throw "Missing Webpack configuration in " + library;
-    }
-
-    const sequence = [];
-    if (settings.build.outputs) {
-        settings.build.outputs.forEach(out => {
-            let wpConfig = require(library.webpack);
-            if (!out.minified) {
-                wpConfig.mode = "development";
-            }
-
-            let wpBuild = webpackStream(wpConfig, require("webpack"));
-
-            //shoud dtsBundle create the declaration?
-            if (settings.build.dtsBundle) {
-                let event = wpBuild
-                    .pipe(through.obj(function(file, enc, cb) {
-                        // only declaration files
-                        const isdts = /\.d\.ts$/.test(file.path);
-                        if (isdts) this.push(file);
-                        cb();
-                    }))
-                    .pipe(gulp.dest(outputDirectory));
-                // dts-bundle does NOT support (gulp) streams, so files have to be saved and reloaded, 
-                // until I fix it
-                event.on("end", function() {
-                    // create the file
-                    dtsBundle.bundle(settings.build.dtsBundle);
-                    // prepend the needed reference
-                    let fileLocation = path.join(path.dirname(settings.build.dtsBundle.main), settings.build.dtsBundle.out);
-                    fs.readFile(fileLocation, function(err, data) {
-                        if (err) throw err;
-                        data = (settings.build.dtsBundle.prependText || "") + '\n' + data.toString();
-                        fs.writeFileSync(fileLocation, data);
-                        if (settings.build.processDeclaration) {
-                            var newData = processDeclaration(data, settings.build.processDeclaration);
-                            fs.writeFileSync(fileLocation.replace('.module', ''), newData);
-                        }
-                    });
-                });
-            }
-
-            let build = wpBuild
-                .pipe(through.obj(function(file, enc, cb) {
-                    // only pipe js files
-                    const isJs = /\.js$/.test(file.path);
-                    if (isJs) this.push(file);
-                    cb();
-                }))
-                .pipe(addModuleExports(library.moduleDeclaration, { subModule: false, extendsRoot: false, externalUsingBabylon: true, noBabylonInit: library.babylonIncluded }));
-
-            function processDestination(dest) {
-                var outputDirectory = config.build.outputDirectory + dest.outputDirectory;
-                build = build
-                    .pipe(rename(dest.filename.replace(".js", library.noBundleInName ? '.js' : ".bundle.js")))
-                    .pipe(gulp.dest(outputDirectory));
-
-                if (library.babylonIncluded && dest.addBabylonDeclaration) {
-                    // include the babylon declaration
-                    if (dest.addBabylonDeclaration === true) {
-                        dest.addBabylonDeclaration = [config.build.declarationFilename];
-                    }
-                    var decsToAdd = dest.addBabylonDeclaration.map(function(dec) {
-                        return config.build.outputDirectory + '/' + dec;
-                    });
-                    sequence.unshift(gulp.src(decsToAdd)
-                        .pipe(rename(function(path) {
-                            path.dirname = '';
-                        }))
-                        .pipe(gulp.dest(outputDirectory)))
-                }
-            }
-
-            out.destinations.forEach(dest => {
-                processDestination(dest);
-            });
-
-            sequence.push(build);
-
-        });
-    } else {
-        var wpConfig;
-        if (library.entry) {
-            wpConfig = require(settings.build.webpack);
-            wpConfig.entry = {
-                'main': path.resolve(wpConfig.context, library.entry),
-            };
-            wpConfig.output.filename = library.output;
-        }
-        else {
-            wpConfig = require(library.webpack);
-        }
-
-        let wpBuildMin = webpackStream(wpConfig, webpack);
-        let buildEventMin = wpBuildMin.pipe(gulp.dest(outputDirectory));
-        sequence.push(buildEventMin);
-
-        // Generate unminified
-        wpConfig.mode = "development";
-        wpConfig.output.filename = wpConfig.output.filename.replace(".min", "");
-
-        let wpBuildMax = webpackStream(wpConfig, webpack);
-        let buildEventMax = wpBuildMax.pipe(gulp.dest(outputDirectory));
-        sequence.push(buildEventMax);
-
-        if (library.isMain) {
-            if (settings.build.dtsBundle || settings.build.processDeclaration) {
-                buildEventMin.on("end", function() {
-                    if (settings.build.dtsBundle) {
-                        dtsBundle.bundle(settings.build.dtsBundle);
-                    }
-
-                    if (settings.build.processDeclaration) {
-                        let fileLocation = path.join(outputDirectory, settings.build.processDeclaration.filename);
-                        fs.readFile(fileLocation, function(err, data) {
-                            if (err) throw err;
-
-                            // For Raanan, litteral import hack TO BETTER INTEGRATE
-                            data = data + "";
-                            data = data.replace('import "../sass/main.scss";', "");
-
-                            var newData = processDeclaration(data, settings.build.processDeclaration);
-                            fs.writeFileSync(fileLocation.replace('.module', ''), newData);
-                            //legacy module support
-                            fs.writeFileSync(fileLocation, data + "\n" + newData);
-                        });
-                    }
-                });
-            }
-        }
-    }
-
-    return merge2(sequence);
-}
-
-/**
- * Dynamic module creation In Serie for WebPack leaks.
- */
-function buildExternalLibraries(settings) {
-    var tasks = settings.libraries.map(function(library) {
-        var build = function(cb) {
-            return buildExternalLibrary(library, settings);
-        }
-        return build;
-    });
-
-    return gulp.series.apply(this, tasks);
-}
-
-/**
- * Dynamic module creation.
- */
-config.modules.map(function(module) {
-    var settings = config[module];
-
-    // Clean up old build files.
-    rmDir(settings.build.dtsBundle.baseDir);
-
-    // Build the libraries.
-    gulp.task(module, buildExternalLibraries(settings));
-});
-
 /**
  * Build all libs.
  */
-gulp.task("typescript-libraries", gulp.series(config.modules));
+gulp.task("typescript-libraries", gulp.series(config.modules, config.viewerModules));
 
 /**
  * Custom build with full path file control; used by profile.html

+ 35 - 1
Tools/Gulp/helpers/gulp-processTypescriptDeclaration.js

@@ -1,4 +1,7 @@
-module.exports = function(data, options) {
+// Gulp Tools
+var fs = require("fs");
+
+var processData = function(data, options) {
     var str = "" + data;
 
     // Start process
@@ -93,4 +96,35 @@ module.exports = function(data, options) {
     }
 
     return str;
+}
+
+module.exports = function(fileLocation, options, cb) {
+    options = options || { };
+
+    fs.readFile(fileLocation, function(err, data) {
+        if (err) throw err;
+
+        data += "";
+        // For Raanan, litteral import hack TO BETTER INTEGRATE
+        data = data.replace('import "../sass/main.scss";', "");
+
+        if (options.prependText) {
+            data = options.prependText + '\n' + data.toString();
+        }
+        
+        var newData = "";
+        if (options) {
+            newData = processData(data, options);
+            fs.writeFileSync(fileLocation.replace('.module', ''), newData);
+        }
+
+        if (options.doNotAppendNamespace) {
+            fs.writeFileSync(fileLocation, data);
+        }
+        else {
+            fs.writeFileSync(fileLocation, data + "\n" + newData);
+        }
+
+        cb && cb();
+    });
 }

+ 85 - 0
Tools/Gulp/tasks/gulpTasks-libraries.js

@@ -0,0 +1,85 @@
+// Gulp Tools
+var gulp = require("gulp");
+var webpack = require('webpack');
+var webpackStream = require("webpack-stream");
+var fs = require("fs");
+var dtsBundle = require('dts-bundle');
+var merge2 = require("merge2");
+var path = require("path");
+
+// Gulp Helpers
+var processDeclaration = require('../helpers/gulp-processTypescriptDeclaration');
+var rmDir = require("../helpers/gulp-rmDir");
+
+// Import Build Config
+var config = require("../config.json");
+
+/**
+ * Build a single library (one of the material of mat lib) from a module (materialsLibrary for instance)
+ */
+var buildExternalLibrary = function(library, settings) {
+    const sequence = [];
+    var outputDirectory = config.build.outputDirectory + settings.build.distOutputDirectory;
+
+    var wpConfig;
+    if (library.entry) {
+        wpConfig = require(settings.build.webpack);
+        wpConfig.entry = {
+            'main': path.resolve(wpConfig.context, library.entry),
+        };
+        wpConfig.output.filename = library.output;
+    }
+    else {
+        wpConfig = require(library.webpack);
+    }
+
+    // Generate minified file.
+    let wpBuildMin = webpackStream(wpConfig, webpack);
+    let buildEventMin = wpBuildMin.pipe(gulp.dest(outputDirectory));
+    sequence.push(buildEventMin);
+
+    // Generate unminified file.
+    wpConfig.mode = "development";
+    wpConfig.output.filename = wpConfig.output.filename.replace(".min", "");
+    let wpBuildMax = webpackStream(wpConfig, webpack);
+    let buildEventMax = wpBuildMax.pipe(gulp.dest(outputDirectory));
+    sequence.push(buildEventMax);
+
+    if (library.isMain) {
+        buildEventMin.on("end", function() {
+            dtsBundle.bundle(settings.build.dtsBundle);
+
+            let fileLocation = path.join(outputDirectory, settings.build.processDeclaration.filename);
+            processDeclaration(fileLocation, settings.build.processDeclaration);
+        });
+    }
+
+    return merge2(sequence);
+}
+
+/**
+ * Dynamic module creation In Serie for WebPack leaks.
+ */
+function buildExternalLibraries(settings) {
+    var tasks = settings.libraries.map(function(library) {
+        var build = function(cb) {
+            return buildExternalLibrary(library, settings);
+        }
+        return build;
+    });
+
+    return gulp.series.apply(this, tasks);
+}
+
+/**
+ * Dynamic module creation.
+ */
+config.modules.map(function(module) {
+    var settings = config[module];
+
+    // Clean up old build files.
+    rmDir(settings.build.dtsBundle.baseDir);
+
+    // Build the libraries.
+    gulp.task(module, buildExternalLibraries(settings));
+});

+ 119 - 0
Tools/Gulp/tasks/gulpTasks-viewerLibraries.js

@@ -0,0 +1,119 @@
+// Gulp Tools
+var gulp = require("gulp");
+var webpackStream = require("webpack-stream");
+var fs = require("fs");
+var dtsBundle = require('dts-bundle');
+var merge2 = require("merge2");
+var through = require('through2');
+var path = require("path");
+var rename = require("gulp-rename");
+
+// Gulp Helpers
+var processDeclaration = require('../helpers/gulp-processTypescriptDeclaration');
+var addModuleExports = require("../helpers/gulp-addModuleExports");
+
+// Import Build Config
+var config = require("../config.json");
+
+/**
+ * Build the viewer
+ */
+var buildViewerLibrary = function(library, settings) {
+    const sequence = [];
+    var outputDirectory = config.build.outputDirectory + settings.build.distOutputDirectory;
+
+    settings.build.outputs.forEach(out => {
+        let wpConfig = require(library.webpack);
+        if (!out.minified) {
+            wpConfig.mode = "development";
+        }
+
+        let wpBuild = webpackStream(wpConfig, require("webpack"));
+
+        //shoud dtsBundle create the declaration?
+        if (settings.build.dtsBundle) {
+            let event = wpBuild
+                .pipe(through.obj(function(file, enc, cb) {
+                    // only declaration files
+                    const isdts = /\.d\.ts$/.test(file.path);
+                    if (isdts) this.push(file);
+                    cb();
+                }))
+                .pipe(gulp.dest(outputDirectory));
+            // dts-bundle does NOT support (gulp) streams, so files have to be saved and reloaded, 
+            // until I fix it
+            event.on("end", function() {
+                // create the file
+                dtsBundle.bundle(settings.build.dtsBundle);
+                // process the declaration
+                let fileLocation = path.join(path.dirname(settings.build.dtsBundle.main), settings.build.dtsBundle.out);
+                processDeclaration(fileLocation, settings.build.processDeclaration);
+            });
+        }
+
+        let build = wpBuild
+            .pipe(through.obj(function(file, enc, cb) {
+                // only pipe js files
+                const isJs = /\.js$/.test(file.path);
+                if (isJs) this.push(file);
+                cb();
+            }))
+            .pipe(addModuleExports(library.moduleDeclaration, { subModule: false, extendsRoot: false, externalUsingBabylon: true, noBabylonInit: library.babylonIncluded }));
+
+        function processDestination(dest) {
+            var outputDirectory = config.build.outputDirectory + dest.outputDirectory;
+            build = build
+                .pipe(rename(dest.filename.replace(".js", library.noBundleInName ? '.js' : ".bundle.js")))
+                .pipe(gulp.dest(outputDirectory));
+
+            if (library.babylonIncluded && dest.addBabylonDeclaration) {
+                // include the babylon declaration
+                if (dest.addBabylonDeclaration === true) {
+                    dest.addBabylonDeclaration = [config.build.declarationFilename];
+                }
+                var decsToAdd = dest.addBabylonDeclaration.map(function(dec) {
+                    return config.build.outputDirectory + '/' + dec;
+                });
+                sequence.unshift(gulp.src(decsToAdd)
+                    .pipe(rename(function(path) {
+                        path.dirname = '';
+                    }))
+                    .pipe(gulp.dest(outputDirectory)))
+            }
+        }
+
+        out.destinations.forEach(dest => {
+            processDestination(dest);
+        });
+
+        sequence.push(build);
+
+    });
+
+    return merge2(sequence);
+}
+
+/**
+ * Dynamic viewer module creation In Serie for WebPack leaks.
+ */
+function buildViewerLibraries(settings) {
+    var tasks = settings.libraries.map(function(library) {
+        var build = function(cb) {
+            return buildViewerLibrary(library, settings);
+        }
+        return build;
+    });
+
+    return gulp.series.apply(this, tasks);
+}
+
+
+/**
+ * Dynamic viewer module creation.
+ */
+config.viewerModules.map(function(module) {
+    var settings = config[module];
+
+    // Build the libraries.
+    gulp.task(module, buildViewerLibraries(settings));
+});