gulp-calculateDependencies.js 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. var gutil = require('gulp-util');
  2. var through = require('through2');
  3. var path = require('path');
  4. module.exports = function (moduleName, perFile, declared, depTree) {
  5. return through.obj(function (file, enc, cb) {
  6. let basename = (path.basename(file.path, ".ts"));
  7. depTree[basename] = depTree[basename] || [];
  8. // detect dependencies
  9. let depReg1 = /[:,][ ]{0,1}([A-Z]\w*)/g;
  10. let depReg2 = /<([A-Z]\w*)(\[\]){0,1}>/g;
  11. let depReg3 = /[\s(]([A-Z]\w*)\./g;
  12. let depReg4 = /[extends|implements] ([A-Z]\w*)/g;
  13. let depReg5 = /new ([A-Z]\w*)/g;
  14. let dependencies = [];
  15. fileContent = file.contents.toString().replace(/(\/\*([\s\S]*?)\*\/)|(\/\/(.*)$)/gm, "");
  16. function findWhereDeclared(objectName) {
  17. let fileLocator;
  18. Object.keys(perFile).some((filename => {
  19. filedec = perFile[filename];
  20. if (filedec.declarations.indexOf(objectName) !== -1) {
  21. fileLocator = filename;
  22. return true;
  23. }
  24. return false;
  25. }))
  26. return fileLocator;
  27. }
  28. //if (basename === "babylon.webVRCamera") {
  29. [depReg4, depReg1, depReg5, depReg3, depReg2].forEach((reg, idx) => {
  30. var match = reg.exec(fileContent);
  31. while (match != null) {
  32. if (match[1]) {
  33. let dep = match[1];
  34. if (basename === "babylon.poseEnabledController") {
  35. console.log(dep, idx);
  36. }
  37. //find if it is declared internally
  38. if (perFile[basename].declarations.indexOf(dep) === -1) {
  39. // not internally? maybe it is in core?
  40. //if (declared.core.indexOf(dep) === -1) {
  41. // seems like a legit dependency! was it already added?
  42. if (perFile[basename].dependencies.indexOf(dep) === -1) {
  43. //no! add it.
  44. let whereDeclared = (findWhereDeclared(dep));
  45. if (whereDeclared) {
  46. perFile[basename].dependencies.push(dep);
  47. if (basename === "babylon.poseEnabledController") {
  48. console.log("adding ", dep, idx === 2);
  49. }
  50. depTree[basename].push({
  51. name: dep,
  52. file: whereDeclared,
  53. module: perFile[whereDeclared].module,
  54. main: idx === 0, // is it a main import
  55. newDec: idx === 2 // is it "new"
  56. });
  57. }
  58. }
  59. //}
  60. }
  61. }
  62. match = reg.exec(fileContent);
  63. }
  64. });
  65. //}
  66. try {
  67. this.push(file);
  68. } catch (err) {
  69. this.emit('error', new gutil.PluginError('gulp-calculateDependencies', err, { fileName: file.path }));
  70. }
  71. cb();
  72. });
  73. };