gulp-calculateDependencies.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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-Za-z]\w*)/g;
  10. let depReg2 = /<([A-Z]\w*)(\[\]){0,1}>/g;
  11. let depReg3 = /[\s(]([A-Z]\w*)\./g;
  12. let depReg4 = /[new|extends|implements] ([A-Z]\w*)/g;
  13. let dependencies = [];
  14. fileContent = file.contents.toString();
  15. function findWhereDeclared(objectName) {
  16. let fileLocator;
  17. Object.keys(perFile).some((filename => {
  18. filedec = perFile[filename];
  19. if (filedec.declarations.indexOf(objectName) !== -1) {
  20. fileLocator = filename;
  21. return true;
  22. }
  23. return false;
  24. }))
  25. return fileLocator;
  26. }
  27. //if (basename === "babylon.webVRCamera") {
  28. [depReg1, depReg2, depReg3, depReg4].forEach(reg => {
  29. var match = reg.exec(fileContent);
  30. while (match != null) {
  31. if (match[1]) {
  32. let dep = match[1];
  33. //find if it is declared internally
  34. if (perFile[basename].declarations.indexOf(dep) === -1) {
  35. // not internally? maybe it is in core?
  36. //if (declared.core.indexOf(dep) === -1) {
  37. // seems like a legit dependency! was it already added?
  38. if (perFile[basename].dependencies.indexOf(dep) === -1) {
  39. //no! add it.
  40. let whereDeclared = (findWhereDeclared(dep));
  41. if (whereDeclared) {
  42. perFile[basename].dependencies.push(dep);
  43. depTree[basename].push({
  44. name: dep,
  45. file: whereDeclared,
  46. module: perFile[whereDeclared].module
  47. });
  48. }
  49. }
  50. //}
  51. }
  52. }
  53. match = reg.exec(fileContent);
  54. }
  55. });
  56. //}
  57. try {
  58. this.push(file);
  59. } catch (err) {
  60. this.emit('error', new gutil.PluginError('gulp-calculateDependencies', err, { fileName: file.path }));
  61. }
  62. cb();
  63. });
  64. };