gulp-babylonModule.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. var gutil = require('gulp-util');
  2. var through = require('through2');
  3. var path = require('path');
  4. module.exports = function (moduleName, dependencyTree, generateIndex, perFile, shaders, shaderIncludes) {
  5. return through.obj(function (file, enc, cb) {
  6. let basename = (path.basename(file.path, ".js"));
  7. //console.log("Compiling module: " + moduleName + "/" + basename.replace("babylon.", ""));
  8. var extendsAddition =
  9. `var __extends=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,o){t.__proto__=o}||function(t,o){for(var n in o)o.hasOwnProperty(n)&&(t[n]=o[n])};return function(o,n){function r(){this.constructor=o}t(o,n),o.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();
  10. `;
  11. var decorateAddition =
  12. 'var __decorate=this&&this.__decorate||function(e,t,r,c){var o,f=arguments.length,n=f<3?t:null===c?c=Object.getOwnPropertyDescriptor(t,r):c;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,r,c);else for(var l=e.length-1;l>=0;l--)(o=e[l])&&(n=(f<3?o(n):f>3?o(t,r,n):o(t,r))||n);return f>3&&n&&Object.defineProperty(t,r,n),n};\n';
  13. let content = file.contents.toString();
  14. if (content.indexOf('__extends') === -1 && !dependencyTree.length) {
  15. extendsAddition = '';
  16. }
  17. if (content.indexOf('__decorate') === -1) {
  18. decorateAddition = '';
  19. }
  20. let dependenciesText = `${extendsAddition}
  21. ${decorateAddition}
  22. if(typeof require !== 'undefined'){
  23. var globalObject = (typeof global !== 'undefined') ? global : ((typeof window !== 'undefined') ? window : this);
  24. var BABYLON = globalObject["BABYLON"] || {};
  25. var EXPORTS = {};
  26. `;
  27. let exportsText = '';
  28. if (!generateIndex) {
  29. let loadedFiles = [];
  30. dependencyTree[basename].forEach(function (d, idx) {
  31. if (d.module.indexOf("core") !== -1) return;
  32. let name = d.file.split(".").pop();
  33. if (loadedFiles.indexOf(name) === -1) {
  34. if (d.main)
  35. dependenciesText += `var ${name}Module = require('babylonjs/${d.module[0]}/${name}');
  36. `;
  37. else
  38. exportsText += `var ${name}Module = require('babylonjs/${d.module[0]}/${name}');
  39. `;
  40. loadedFiles.push(name);
  41. }
  42. dependenciesText += `BABYLON["${d.name}"] = ${name}Module["${d.name}"];
  43. `;
  44. //dependenciesText += `if(BABYLON !== BABYLON${idx}) __extends(BABYLON, BABYLON${idx});
  45. });
  46. perFile[basename].declarations.forEach(dec => {
  47. exportsText += `EXPORTS['${dec}'] = BABYLON["${dec}"];
  48. `;
  49. });
  50. if (shaders) {
  51. dependenciesText += `require("babylonjs/${moduleName}/shaders");
  52. `;
  53. }
  54. if (shaderIncludes) {
  55. dependenciesText += `require("babylonjs/${moduleName}/shaderIncludes");
  56. `;
  57. }
  58. } else {
  59. content = '';
  60. let basenames = Object.keys(perFile).filter(basefilename => {
  61. return perFile[basefilename].module.indexOf(moduleName) !== -1;
  62. });
  63. basenames.forEach(bname => {
  64. let name = bname.split(".").pop();
  65. dependenciesText += `var ${name} = require("babylonjs/${moduleName}/${name}");
  66. `;
  67. // now add the internal dependencies to EXPORTS
  68. perFile[bname].declarations.forEach(dec => {
  69. dependenciesText += `EXPORTS['${dec}'] = BABYLON["${dec}"] = ${name}["${dec}"];
  70. `;
  71. });
  72. })
  73. }
  74. exportsText += `(function() {
  75. globalObject["BABYLON"] = globalObject["BABYLON"] || BABYLON;
  76. module.exports = EXPORTS;
  77. })();
  78. }`;
  79. /*let exportRegex = /BABYLON.([0-9A-Za-z-_]*) = .*;\n/g
  80. var match = exportRegex.exec(content);
  81. let exportsArray = [];
  82. while (match != null) {
  83. if (match[1]) {
  84. exportsArray.push(match[1])
  85. }
  86. match = exportRegex.exec(content);
  87. }*/
  88. /*if (moduleName === "core") {
  89. exportsText = `(function() {
  90. globalObject["BABYLON"] = globalObject["BABYLON"] || BABYLON;
  91. module.exports = BABYLON;
  92. })();
  93. }`
  94. }*/
  95. if (file.isNull()) {
  96. cb(null, file);
  97. return;
  98. }
  99. if (file.isStream()) {
  100. //streams not supported, no need for now.
  101. return;
  102. }
  103. try {
  104. file.contents = new Buffer(dependenciesText.concat(new Buffer(String(content).concat(exportsText))));
  105. this.push(file);
  106. } catch (err) {
  107. this.emit('error', new gutil.PluginError('gulp-add-babylon-module', err, { fileName: file.path }));
  108. }
  109. cb();
  110. });
  111. }