gulpTasks-librariesES6.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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.intermediateES6PackageDirectory);
  18. rmDir(settings.computed.ES6PackageDirectory);
  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.intermediateES6PackageDirectory));
  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.intermediateES6Package));
  47. }
  48. /**
  49. * TSC Build.
  50. */
  51. var build = function(settings, cb) {
  52. // Launch TSC.
  53. const options = {
  54. cwd: settings.computed.intermediateES6PackageDirectory,
  55. verbose: true
  56. };
  57. let command = `tsc --inlineSources --sourceMap true -t es5 -m esNext --outDir "${settings.computed.ES6PackageDirectory}"`;
  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.intermediateES6PackageDirectory + "/**/*.ts", settings.computed.intermediateES6PackageDirectory + "/**/*.tsx"])
  99. .pipe(processImports(replacements));
  100. }
  101. /**
  102. * Adapt TS Config Paths.
  103. */
  104. var modifyTsConfig = function(settings, cb) {
  105. const tsconfig = require(settings.computed.tsConfigPath);
  106. var newPaths = { };
  107. for (let pathName in tsconfig.compilerOptions.paths) {
  108. var newPathName = pathName;
  109. var originalPath = pathName;
  110. if (pathName.endsWith("/*")) {
  111. pathName = pathName.replace("/*", "");
  112. }
  113. var mapped = false;
  114. for (var moduleName of config.modules) {
  115. var module = config[moduleName];
  116. if (module.build.umd.packageName === pathName) {
  117. if (module.build.es6.packageName) {
  118. newPathName = module.build.es6.packageName + "*";
  119. newPaths[newPathName] = [ module.computed.ES6PackageDirectory.replace(/\\/g, "/") ];
  120. mapped = true;
  121. break;
  122. }
  123. }
  124. }
  125. if (!mapped) {
  126. newPaths[newPathName] = tsconfig.compilerOptions.paths[originalPath];
  127. }
  128. }
  129. tsconfig.compilerOptions.paths = newPaths;
  130. const destTsConfig = path.join(settings.computed.intermediateES6PackageDirectory, "tsconfig.json");
  131. fs.writeJSONSync(destTsConfig, tsconfig);
  132. cb();
  133. }
  134. /**
  135. * Append Lose DTS Files allowing isolated Modules build
  136. */
  137. var appendLoseDTSFiles = function(settings) {
  138. if (settings.build.loseDTSFiles) {
  139. const indexDTS = path.join(settings.computed.ES6PackageDirectory, "index.d.ts");
  140. return gulp.src([indexDTS, path.join(settings.computed.srcDirectory, settings.build.loseDTSFiles)])
  141. .pipe(concat("index.d.ts"))
  142. .pipe(processLooseDeclaration())
  143. .pipe(gulp.dest(settings.computed.ES6PackageDirectory));
  144. }
  145. return Promise.resolve();
  146. }
  147. /**
  148. * Dynamic es 6 module creation.
  149. */
  150. function buildES6Library(settings) {
  151. // Creates the required tasks.
  152. var tasks = [];
  153. var cleanup = function(cb) { return clean(settings, cb); };
  154. var copySource = function() { return source(settings); };
  155. var dependencies = function() { return dep(settings); };
  156. var adaptSourceImportPaths = function() { return modifySources(settings); };
  157. var adaptTsConfigImportPaths = function(cb) { return modifyTsConfig(settings, cb); };
  158. var buildes6 = function(cb) { return build(settings, cb) };
  159. var appendLoseDTS = function() { return appendLoseDTSFiles(settings) };
  160. tasks.push(cleanup, copySource, dependencies, adaptSourceImportPaths, adaptTsConfigImportPaths, buildes6, appendLoseDTS);
  161. return gulp.series.apply(this, tasks);
  162. }
  163. /**
  164. * Dynamic es 6 module creation.
  165. */
  166. config.modules.map(function(module) {
  167. const settings = config[module];
  168. gulp.task(module + "-es6", buildES6Library(settings));
  169. });