Browse Source

Dev Folders

sebavan 6 years ago
parent
commit
62351c7388

+ 13 - 1
Tools/Config/config.js

@@ -9,9 +9,12 @@ const tempFolder = path.resolve(rootFolder, config.build.tempDirectory);
 const outputFolder = path.resolve(configFolder, config.build.outputDirectory);
 const localDevES6Folder = path.join(tempFolder, config.build.localDevES6FolderName);
 const localDevUMDFolder = path.join(tempFolder, config.build.localDevUMDFolderName);
+const packageUMDFolder = path.join(tempFolder, config.build.packageUMDFolderName);
+const packageUMDDevFolder = path.join(tempFolder, config.build.packageUMDDevFolderName);
 const sourceES6Folder = path.join(tempFolder, config.build.sourceES6FolderName);
 const distES6Folder = path.join(tempFolder, config.build.distES6FolderName);
 const packageES6Folder = path.join(tempFolder, config.build.packageES6FolderName);
+const packageES6DevFolder = path.join(tempFolder, config.build.packageES6DevFolderName);
 
 config.computed = {
     rootFolder,
@@ -19,9 +22,12 @@ config.computed = {
     outputFolder,
     localDevES6Folder,
     localDevUMDFolder,
+    packageUMDFolder,
+    packageUMDDevFolder,
     sourceES6Folder,
     distES6Folder,
-    packageES6Folder
+    packageES6Folder,
+    packageES6DevFolder
 }
 
 config.additionalNpmPackages.forEach(package => {
@@ -40,9 +46,12 @@ config.modules.map(function(module) {
     const distDirectory = path.join(outputFolder, distFolder);
     const localDevES6Directory = path.join(localDevES6Folder, module);
     const localDevUMDDirectory = path.join(localDevUMDFolder, distFolder);
+    const packageUMDDirectory = path.join(packageUMDFolder, module);
+    const packageUMDDevDirectory = path.join(packageUMDDevFolder, module);
     const sourceES6Directory = path.join(sourceES6Folder, module);
     const distES6Directory = path.join(distES6Folder, module);
     const packageES6Directory = path.join(packageES6Folder, module);
+    const packageES6DevDirectory = path.join(packageES6DevFolder, module);
 
     const webpackConfigPath = path.join(mainDirectory, "webpack.config.js");
     const tsConfigPath = path.join(mainDirectory, "tsconfig.json");
@@ -55,9 +64,12 @@ config.modules.map(function(module) {
         distDirectory,
         localDevES6Directory,
         localDevUMDDirectory,
+        packageUMDDirectory,
+        packageUMDDevDirectory,
         sourceES6Directory,
         distES6Directory,
         packageES6Directory,
+        packageES6DevDirectory,
         webpackConfigPath,
         tsConfigPath,
         packageJSONPath

+ 21 - 6
Tools/Config/config.json

@@ -4,9 +4,12 @@
         "tempDirectory": "./.temp/",
         "localDevES6FolderName": "localDevES6",
         "localDevUMDFolderName": "localDevUMD",
+        "packageUMDFolderName": "packageUMD",
+        "packageUMDDevFolderName": "packageUMDDev",
         "sourceES6FolderName": "sourceES6",
         "distES6FolderName": "distES6",
         "packageES6FolderName": "packageES6",
+        "packageES6DevFolderName": "packageES6Dev",
         "playgroundDirectory": "../../Playground/",
         "intellisenseFile": "babylon.d.txt",
         "intellisenseSources": [
@@ -92,14 +95,26 @@
                     ],
                     "doNotAppendNamespace": true,
                     "prependToNamespaceText": "declare module 'babylonjs' { export = BABYLON; }"
-                }
+                },
+                "pacakagesFiles": [
+                    "babylon.d.ts",
+                    "babylon.js",
+                    "babylon.max.js",
+                    "babylon.max.js.map",
+                    "Oimo.js",
+                    "readme.md"
+                ],
+                "typings": "babylon.d.ts",
+                "index": "babylon.js",
+                "dependencies": [],
+                "devDependencies": []
             },
             "es6": {
-                "packageName": "@babylonjs/core",
-                "requiredFiles": [
-                    "readme.md"
-                ]
-            }
+                "packageName": "@babylonjs/core"
+            },
+            "requiredFiles": [
+                "readme.md"
+            ]
         }
     },
     "materialsLibrary": {

+ 24 - 5
Tools/Gulp/tasks/gulpTasks-librariesES6.js

@@ -16,6 +16,13 @@ var del = require("del");
 // Import Build Config
 var config = require("../../Config/config.js");
 
+// Constants
+const tempTypingsAMDFileName = "tempTypings.js";
+const tempTypingsFileName = tempTypingsAMDFileName.replace(".js", ".d.ts");
+
+const tempTypingsAMDFile = path.join(config.computed.tempFolder, tempTypingsAMDFileName);
+const tempTypingsFile = path.join(config.computed.tempFolder, tempTypingsFileName);
+
 /**
  * Clean Source And Dist folders.
  */
@@ -152,15 +159,26 @@ var modifyTsConfig = function(settings, cb) {
 }
 
 /**
+ * Concat Lose DTS Files allowing isolated Modules build
+ */
+var concatLoseDTSFiles = function(settings) {
+    if (settings.build.loseDTSFiles) {
+        return gulp.src([path.join(settings.computed.srcDirectory, settings.build.loseDTSFiles.glob)])
+            .pipe(concat(tempTypingsFileName))
+            .pipe(processLooseDeclarations())
+            .pipe(gulp.dest(config.computed.tempFolder));
+    }
+    return Promise.resolve();
+}
+
+/**
  * Append Lose DTS Files allowing isolated Modules build
  */
 var appendLoseDTSFiles = function(settings) {
     if (settings.build.loseDTSFiles) {
-        const mainDeclarationFile = "" || "index.d.ts";
-        const indexDTS = path.join(settings.computed.distES6Directory, mainDeclarationFile);
-        return gulp.src([indexDTS, path.join(settings.computed.srcDirectory, settings.build.loseDTSFiles.glob)])
-            .pipe(concat(settings.build.loseDTSFiles.destFileES6 || "index.d.ts"))
-            .pipe(processLooseDeclarations())
+        const mainDeclarationFile = path.join(settings.computed.distES6Directory, settings.build.loseDTSFiles.destFileES6 || "index.d.ts");
+        return gulp.src([mainDeclarationFile, tempTypingsFile])
+            .pipe(concat(settings.build.loseDTSFiles.destFileES6))
             .pipe(gulp.dest(settings.computed.distES6Directory));
     }
     return Promise.resolve();
@@ -261,6 +279,7 @@ function buildES6Library(settings, module) {
     else {
         buildSteps = [
             function buildes6(cb) { return build(settings, cb) }, 
+            function concatLoseDTS() { return concatLoseDTSFiles(settings) },
             function appendLoseDTS() { return appendLoseDTSFiles(settings) }
         ];
     }

+ 114 - 87
Tools/Publisher/publisher.js

@@ -48,6 +48,18 @@ function updateEngineVersion(newVersion) {
 }
 
 /**
+ * Update the root package.json version
+ */
+function updateRootPackageVersion(newVersion) {
+    colorConsole.log("Updating version in /package.json to: " + newVersion.green);
+    const packageJSONPath = config.core.computed.packageJSONPath;
+    const packageJson = require(packageJSONPath);
+    packageJson.version = newVersion;
+    fs.writeFileSync(packageJSONPath, JSON.stringify(packageJson, null, 4));
+    colorConsole.emptyLine();
+}
+
+/**
  * Get the version from the engine class for Babylon
  */
 function getEngineVersion() {
@@ -116,10 +128,6 @@ function processEs6Packages(version) {
         let module = config[moduleName];
         let es6Config = module.build.es6;
 
-        if (!es6Config) {
-            return;
-        }
-
         colorConsole.log("Process " + "ES6".magenta + " Package: " + moduleName.blue.bold);
 
         let distPath = module.computed.distES6Directory;
@@ -201,8 +209,7 @@ function processEs6Packages(version) {
         let packageJSONPath = path.join(packagePath, "package.json");
         fs.writeFileSync(packageJSONPath, JSON.stringify(legacyPackageJson, null, 4));
 
-        // Do not publish yet.
-        // publish(version, es6Config.packageName, packagePath, true);
+        publish(version, es6Config.packageName, packagePath, true);
         colorConsole.emptyLine();
     });
 }
@@ -234,10 +241,7 @@ function processLegacyPackages(version) {
         let module = config[moduleName];
         colorConsole.log("Process " + "UMD".magenta + " Package: " + moduleName.blue.bold);
 
-        if (moduleName === "core") {
-            processLegacyCore(version);
-        }
-        else if (moduleName === "viewer") {
+        if (moduleName === "viewer") {
             processLegacyViewer(module, version);
         }
         else {
@@ -252,20 +256,74 @@ function processLegacyPackages(version) {
                 });
             }
 
-            let packageJson = require(outputDirectory + '/package.json');
-            packageJson.version = version;
+            // Package version
+            const packageJSONPath = module.computed ?
+                module.computed.packageJSONPath :
+                outputDirectory + '/package.json';
+            let packageJson = require(packageJSONPath);
             colorConsole.log("    Update package version to: " + version.green);
+            packageJson.version = version;
 
-            if (packageJson.dependencies) {
+            // Package dependencies version
+            if (module.build.umd.dependencies) {
+                packageJson.dependencies = module.build.umd.dependencies;
+            }
+            else if (packageJson.dependencies) {
                 Object.keys(packageJson.dependencies).forEach(key => {
                     if (key.indexOf("babylonjs") !== -1) {
                         packageJson.dependencies[key] = version;
                     }
                 });
             }
-            fs.writeFileSync(outputDirectory + '/package.json', JSON.stringify(packageJson, null, 4));
 
-            publish(version, moduleName, outputDirectory);
+            // Package dev dependencies
+            if (module.build.umd.devDependencies) {
+                packageJson.devDependencies = module.build.umd.devDependencies;
+            }
+
+            // Typings
+            if (module.build.umd.typings) {
+                packageJson.typings = module.build.umd.typings;
+            }
+
+            // Main
+            if (module.build.umd.index) {
+                packageJson.main = module.build.umd.index;
+                packageJson.module = module.build.umd.index;
+                packageJson.esnext = module.build.umd.index;
+            }
+
+            // Files
+            if (module.build.umd.pacakagesFiles) {
+                packageJson.files = module.build.umd.pacakagesFiles;
+            }
+
+            // Write to disk output directory
+            fs.writeFileSync(path.join(outputDirectory, 'package.json'), JSON.stringify(packageJson, null, 4));
+
+            if (!module.build.legacyPackageOutputDirectory) {
+                let packageUMDPath = module.computed.packageUMDDirectory;
+                colorConsole.log("    Cleanup " + packageUMDPath.cyan);
+                rmDir(packageUMDPath);
+
+                if (module.build.umd.pacakagesFiles) {
+                    fs.ensureDirSync(packageUMDPath);
+                    for (let file of module.build.umd.pacakagesFiles.concat(["package.json"])) {
+                        let source = path.join(outputDirectory, file);
+                        let destination = path.join(packageUMDPath, path.basename(file));
+                        colorConsole.log("    Copy Package file: ", source.cyan, destination.cyan);
+                        fs.copyFileSync(source, destination);
+                    }
+                }
+                else {
+                    colorConsole.log("    Copy Package folder " + outputDirectory.cyan + " to " + packageUMDPath.cyan);
+                    fs.copySync(outputDirectory, packageUMDPath);
+                }
+                publish(version, moduleName, packageUMDPath);
+            }
+            else {
+                publish(version, moduleName, outputDirectory);
+            }
 
             colorConsole.emptyLine();
         }
@@ -315,87 +373,49 @@ function processLegacyViewer(module, version) {
 }
 
 /**
- * Special treatment for legacy core.
+ * Prepare a UMD Dev folder npm linked for test purpose.
  */
-function processLegacyCore(version) {
-    let package = {
-        "name": "core",
-        "path": "/../../"
-    };
-    let packageJson = require('../../package.json');
-
-    // make a temporary directory
-    fs.ensureDirSync(basePath + '/package/');
-
-    let files = [
-        {
-            path: basePath + "/babylon.d.ts",
-            objectName: "babylon.d.ts"
-        },
-        {
-            path: basePath + "/babylon.js",
-            objectName: "babylon.js"
-        },
-        {
-            path: basePath + "/babylon.max.js",
-            objectName: "babylon.max.js"
-        },
-        {
-            path: basePath + "/babylon.max.js.map",
-            objectName: "babylon.max.js.map"
-        },
-        {
-            path: basePath + "/Oimo.js",
-            objectName: "Oimo.js"
-        },
-        {
-            path: basePath + package.path + "readme.md",
-            objectName: "readme.md"
-        }
-    ];
+function prepareUMDDevPackages() {
+    config.modules.forEach(moduleName => {
+        let module = config[moduleName];
+        let umdConfig = module.build.umd;
 
-    //copy them to the package path
-    files.forEach(file => {
-        fs.copySync(file.path, basePath + '/package/' + file.objectName);
-    });
+        colorConsole.log("Prepare " + "UMDDev".magenta + " Package: " + moduleName.blue.bold);
 
-    // update package.json
-    packageJson.version = version;
-    colorConsole.log("    Generating file list");
-    let packageFiles = ["package.json"];
-    files.forEach(file => {
-        if (!file.isDir) {
-            packageFiles.push(file.objectName);
-        } else {
-            //todo is it better to read the content and add it? leave it like that ATM
-            packageFiles.push(file.objectName + "/index.js", file.objectName + "/index.d.ts", file.objectName + "/es6.js")
-        }
+        let packagePath = module.computed.packageUMDDirectory;
+        let packageDevPath = module.computed.packageUMDDevDirectory;
+
+        colorConsole.log("    Cleanup " + packageDevPath.cyan);
+        rmDir(packageDevPath);
+
+        colorConsole.log("    Copy Package folder " + packagePath.cyan + " to " + packageDevPath.cyan);
+        fs.copySync(packagePath, packageDevPath);
+
+        colorConsole.emptyLine();
     });
-    colorConsole.log("    Updating package.json");
-    packageJson.files = packageFiles;
-    packageJson.main = "babylon.js";
-    packageJson.typings = "babylon.d.ts";
+}
+
+/**
+ * Prepare an es6 Dev folder npm linked for test purpose.
+ */
+function prepareEs6DevPackages() {
+    config.modules.forEach(moduleName => {
+        let module = config[moduleName];
+        let es6Config = module.build.es6;
 
-    fs.writeFileSync(basePath + '/package/' + 'package.json', JSON.stringify(packageJson, null, 4));
+        colorConsole.log("Prepare " + "ES6Dev".magenta + " Package: " + moduleName.blue.bold);
 
-    publish(version, package.name, basePath + '/package/');
+        let packagePath = module.computed.packageES6Directory;
+        let packageDevPath = module.computed.packageES6DevDirectory;
 
-    // remove package directory
-    fs.removeSync(basePath + '/package/');
+        colorConsole.log("    Cleanup " + packageDevPath.cyan);
+        rmDir(packageDevPath);
 
-    // now update the main package.json
-    packageJson.files = packageJson.files.map(file => {
-        if (file !== 'package.json' && file !== 'readme.md') {
-            return 'dist/preview release/' + file;
-        } else {
-            return file;
-        }
-    });
-    packageJson.main = "dist/preview release/babylon.js";
-    packageJson.typings = "dist/preview release/babylon.d.ts";
+        colorConsole.log("    Copy Package folder " + packagePath.cyan + " to " + packageDevPath.cyan);
+        fs.copySync(packagePath, packageDevPath);
 
-    fs.writeFileSync('../../package.json', JSON.stringify(packageJson, null, 4));
-    colorConsole.emptyLine();
+        colorConsole.emptyLine();
+    });
 }
 
 const createVersion = function(version) {
@@ -410,9 +430,15 @@ const createVersion = function(version) {
     // Create the packages and publish if needed.
     processLegacyPackages(version);
 
+    // Prepare es6 Dev Folder.
+    prepareUMDDevPackages();
+
     // Do not publish es6 yet.
     doNotPublish = true;
     processEs6Packages(version);
+
+    // Prepare es6 Dev Folder.
+    prepareEs6DevPackages();
 }
 
 /**
@@ -436,6 +462,7 @@ module.exports = function(noBuild, noPublish, askVersion) {
             }
 
             updateEngineVersion(version);
+            updateRootPackageVersion(version);
             createVersion(version);
 
             // Invite user to tag with the new version.