gulpTasks-dependencies.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // Import Dependencies.
  2. const gulp = require("gulp");
  3. const path = require("path");
  4. const depcruise = require('dependency-cruiser');
  5. const colorConsole = require('../../NodeHelpers/colorConsole');
  6. // Read the full config.
  7. const config = require("../../Config/config.js");
  8. /*
  9. * TsLint all typescript files from the src directory.
  10. */
  11. const dependencies = function(settings, moduleName, cb) {
  12. var cruiseResult = depcruise.cruise(
  13. [path.relative(path.resolve("./"), settings.computed.mainDirectory)],
  14. {
  15. validate: true,
  16. ruleSet: {
  17. forbidden: [{
  18. name: 'no-circular',
  19. comment: 'circular dependencies will make you dizzy',
  20. severity: 'error',
  21. from: {},
  22. to: {
  23. circular: true
  24. }
  25. }],
  26. options: {
  27. doNotFollow: "node_modules",
  28. tsConfig: {
  29. fileName: settings.computed.tsConfigPath
  30. },
  31. webpackConfig: {
  32. fileName: settings.computed.webpackConfigPath
  33. }
  34. }
  35. }
  36. });
  37. if (cruiseResult.output.summary.error > 0) {
  38. var errorCount = cruiseResult.output.summary.error;
  39. if (errorCount > 0) {
  40. colorConsole.error(`New circular dependencies in ${moduleName.cyan}: ${("" + errorCount).red}`);
  41. for (let error of cruiseResult.output.summary.violations) {
  42. colorConsole.error(` From: '${error.from.replace(/\.\.\//g, "").yellow}' To: '${error.to.replace(/\.\.\//g, "").yellow}'`);
  43. }
  44. process.exit(1);
  45. }
  46. }
  47. colorConsole.success("No New circular dependencies.");
  48. cb();
  49. }
  50. /**
  51. * Dynamic module linting for external library (mat, post processes, ...).
  52. */
  53. config.lintModules.map(function(module) {
  54. // Task will be like moduleName-circularDependencies
  55. gulp.task(module + "-circularDependencies", function(cb) {
  56. var settings = config[module];
  57. dependencies(settings, module, cb);
  58. });
  59. });
  60. /**
  61. * Full Librairies tsLint.
  62. */
  63. gulp.task("circularDependencies",
  64. gulp.series(config.lintModules.map((module) => {
  65. return module + "-circularDependencies";
  66. })
  67. ));