Ver código fonte

d.ts files importing all others

Raanan Weber 7 anos atrás
pai
commit
8ad5263b0e
2 arquivos alterados com 73 adições e 2 exclusões
  1. 53 0
      Tools/Gulp/gulp-dtsModuleSupport.js
  2. 20 2
      Tools/Gulp/gulpfile.js

+ 53 - 0
Tools/Gulp/gulp-dtsModuleSupport.js

@@ -0,0 +1,53 @@
+var gutil = require('gulp-util');
+var through = require('through2');
+
+// inject - if set to true, it will add all declarations as imports.
+module.exports = function (moduleName, inject, declarations) {
+    return through.obj(function (file, enc, cb) {
+
+        let fileContent = file.contents.toString();
+        let importsString = '';
+
+        if (!inject) {
+            declarations[moduleName] = declarations[moduleName] || [];
+            let regexp = /    (class|interface|type|const|enum) ([\w]*)/g;
+
+            var match = regexp.exec(fileContent);
+            while (match != null) {
+                if (match[2]) {
+                    declarations[moduleName].push(match[2])
+                }
+                match = regexp.exec(fileContent);
+            }
+        } else {
+            let declared = [];
+            Object.keys(declarations).forEach(name => {
+                if (name === moduleName) return;
+                let imports = declarations[name].filter(obj => declared.indexOf(obj) === -1);
+                imports.forEach(imp => declared.push(imp));
+                importsString += `import {${imports.join(',')}} from 'babylonjs/${name}';
+`;
+            });
+        }
+
+        if (file.isNull()) {
+            cb(null, file);
+            return;
+        }
+
+        if (file.isStream()) {
+            //streams not supported, no need for now.
+            return;
+        }
+
+        try {
+            file.contents = new Buffer(String(file.contents) + '\n' + importsString);
+            this.push(file);
+
+        } catch (err) {
+            this.emit('error', new gutil.PluginError('gulp-add-module-exports', err, { fileName: file.path }));
+        }
+        cb();
+    });
+};
+

+ 20 - 2
Tools/Gulp/gulpfile.js

@@ -7,6 +7,7 @@ var appendSrcToVariable = require("./gulp-appendSrcToVariable");
 var addDtsExport = require("./gulp-addDtsExport");
 var addModuleExports = require("./gulp-addModuleExports");
 var babylonModuleExports = require("./gulp-babylonModule");
+var dtsModuleSupport = require("./gulp-dtsModuleSupport");
 var merge2 = require("merge2");
 var concat = require("gulp-concat");
 var rename = require("gulp-rename");
@@ -612,9 +613,25 @@ gulp.task("modules-compile", function () {
                 }))
             .pipe(gulp.dest(config.build.srcOutputDirectory))
     ]);
+});
+
+// this holds the declared objects in each module
+let declared = {}
+
+gulp.task('prepare-for-modules', ["modules-compile"], function () {
+    let tasks = [];
+    Object.keys(config.workloads).forEach((moduleName) => {
+        let dtsFiles = config.workloads[moduleName].files.map(f => f.replace(".js", ".d.ts"))
+        let dtsTask = gulp.src(dtsFiles)
+            .pipe(dtsModuleSupport(moduleName, false, declared));
+
+        tasks.push(dtsTask);
+    });
+
+    return merge2(tasks);
 })
 
-gulp.task("modules", ["modules-compile"], function () {
+gulp.task("modules", ["prepare-for-modules"], function () {
     let tasks = [];
 
     Object.keys(config.workloads)
@@ -658,7 +675,8 @@ gulp.task("modules", ["modules-compile"], function () {
             let dtsTask = gulp.src(dtsFiles)
                 .pipe(concat(moduleName + ".d.ts"))
                 //.pipe(addDtsExport("BABYLON", "babylonjs/es6/" + moduleName))
-                .pipe(addDtsExport("BABYLON", "babylonjs/" + moduleName, false, moduleName !== "core", config.workloads[moduleName].dependUpon))
+                .pipe(replace(/declare module BABYLON {/g, `declare module 'babylonjs/${moduleName}' {`))
+                .pipe(dtsModuleSupport(moduleName, true, declared))
                 .pipe(gulp.dest(config.build.outputDirectory + '/commonjs/'));
 
             tasks.push(jsTask, dtsTask);