gulpTasks-librariesES6.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. // Gulp Tools
  2. var gulp = require("gulp");
  3. var path = require("path");
  4. var fs = require("fs-extra");
  5. var shelljs = require("shelljs");
  6. var concat = require('gulp-concat');
  7. // Gulp Helpers
  8. var rmDir = require("../../NodeHelpers/rmDir");
  9. var processImports = require("../helpers/gulp-processImportsToEs6");
  10. var processLooseDeclaration = require("../helpers/gulp-processLooseDeclarationEs6");
  11. // Import Build Config
  12. var config = require("../../Config/config.js");
  13. /**
  14. * Clean folders.
  15. */
  16. var clean = function(settings, cb) {
  17. rmDir(settings.computed.sourceES6Directory);
  18. rmDir(settings.computed.distES6Directory);
  19. cb();
  20. }
  21. /**
  22. * Copy Sources.
  23. */
  24. var source = function(settings) {
  25. return gulp.src(settings.computed.mainDirectory + "/**/*")
  26. .pipe(gulp.dest(settings.computed.sourceES6Directory));
  27. }
  28. /**
  29. * Copy dependencies.
  30. */
  31. var dep = function(settings) {
  32. const copyPaths = []
  33. // Add tsconfig rules.
  34. copyPaths.push(path.join(config.computed.rootFolder, "tsconfigRules.json"));
  35. const tsconfig = require(settings.computed.tsConfigPath);
  36. for (let pathName in tsconfig.compilerOptions.paths) {
  37. var paths = tsconfig.compilerOptions.paths[pathName];
  38. for (let dep of paths) {
  39. const fullPath = path.resolve(settings.computed.mainDirectory,
  40. tsconfig.compilerOptions.baseUrl,
  41. dep);
  42. copyPaths.push(fullPath);
  43. }
  44. }
  45. return gulp.src(copyPaths, { base: config.computed.rootFolder })
  46. .pipe(gulp.dest(config.computed.sourceES6FolderName));
  47. }
  48. /**
  49. * TSC Build.
  50. */
  51. var build = function(settings, cb) {
  52. // Launch TSC.
  53. const options = {
  54. cwd: settings.computed.sourceES6Directory,
  55. verbose: true
  56. };
  57. let command = `tsc --inlineSources --sourceMap true -t es5 -m esNext --outDir "${settings.computed.distES6Directory}"`;
  58. shelljs.exec(command, options, function(code, stdout, stderr) {
  59. if (stderr) {
  60. console.log(stderr);
  61. }
  62. if (stdout) {
  63. console.log(stdout);
  64. }
  65. if (code !== 0) {
  66. cb("TSC Failed.")
  67. }
  68. else {
  69. cb();
  70. }
  71. });
  72. }
  73. /**
  74. * Adapt Sources import paths.
  75. */
  76. var modifySources = function(settings) {
  77. const tsconfig = require(settings.computed.tsConfigPath);
  78. var replacements = [];
  79. for (let pathName in tsconfig.compilerOptions.paths) {
  80. if (pathName.endsWith("/*")) {
  81. pathName = pathName.replace("/*", "");
  82. }
  83. for (var moduleName of config.modules) {
  84. var module = config[moduleName];
  85. if (module.build.umd.packageName === pathName) {
  86. if (module.build.es6.packageName) {
  87. var packageName = pathName;
  88. var newPackageName = module.build.es6.packageName;
  89. replacements.push({
  90. packageName,
  91. newPackageName
  92. });
  93. break;
  94. }
  95. }
  96. }
  97. }
  98. return gulp.src([settings.computed.sourceES6Directory + "/**/*.ts",
  99. settings.computed.sourceES6Directory + "/**/*.tsx"])
  100. .pipe(processImports(replacements));
  101. }
  102. /**
  103. * Adapt TS Config Paths.
  104. */
  105. var modifyTsConfig = function(settings, cb) {
  106. const tsconfig = require(settings.computed.tsConfigPath);
  107. var newPaths = { };
  108. for (let pathName in tsconfig.compilerOptions.paths) {
  109. var newPathName = pathName;
  110. var originalPath = pathName;
  111. if (pathName.endsWith("/*")) {
  112. pathName = pathName.replace("/*", "");
  113. }
  114. var mapped = false;
  115. for (var moduleName of config.modules) {
  116. var module = config[moduleName];
  117. if (module.build.umd.packageName === pathName) {
  118. if (module.build.es6.packageName) {
  119. newPathName = module.build.es6.packageName + "*";
  120. newPaths[newPathName] = [ module.computed.distES6Directory.replace(/\\/g, "/") ];
  121. mapped = true;
  122. break;
  123. }
  124. }
  125. }
  126. if (!mapped) {
  127. newPaths[newPathName] = tsconfig.compilerOptions.paths[originalPath];
  128. }
  129. }
  130. tsconfig.compilerOptions.paths = newPaths;
  131. const destTsConfig = path.join(settings.computed.sourceES6Directory, "tsconfig.json");
  132. fs.writeJSONSync(destTsConfig, tsconfig);
  133. cb();
  134. }
  135. /**
  136. * Append Lose DTS Files allowing isolated Modules build
  137. */
  138. var appendLoseDTSFiles = function(settings) {
  139. if (settings.build.loseDTSFiles) {
  140. const indexDTS = path.join(settings.computed.distES6Directory, "index.d.ts");
  141. return gulp.src([indexDTS, path.join(settings.computed.srcDirectory, settings.build.loseDTSFiles)])
  142. .pipe(concat("index.d.ts"))
  143. .pipe(processLooseDeclaration())
  144. .pipe(gulp.dest(settings.computed.distES6Directory));
  145. }
  146. return Promise.resolve();
  147. }
  148. /**
  149. * Dynamic es 6 module creation.
  150. */
  151. function buildES6Library(settings) {
  152. // Creates the required tasks.
  153. var tasks = [];
  154. var cleanup = function(cb) { return clean(settings, cb); };
  155. var copySource = function() { return source(settings); };
  156. var dependencies = function() { return dep(settings); };
  157. var adaptSourceImportPaths = function() { return modifySources(settings); };
  158. var adaptTsConfigImportPaths = function(cb) { return modifyTsConfig(settings, cb); };
  159. var buildes6 = function(cb) { return build(settings, cb) };
  160. var appendLoseDTS = function() { return appendLoseDTSFiles(settings) };
  161. tasks.push(cleanup, copySource, dependencies, adaptSourceImportPaths, adaptTsConfigImportPaths, buildes6, appendLoseDTS);
  162. return gulp.series.apply(this, tasks);
  163. }
  164. /**
  165. * Dynamic es 6 module creation.
  166. */
  167. config.modulesES6.map(function(module) {
  168. const settings = config[module];
  169. gulp.task(module + "-es6", buildES6Library(settings));
  170. });