gulpfile.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695
  1. // Gulp Tools
  2. var gulp = require("gulp");
  3. var uglify = require("gulp-uglify");
  4. var typescript = require("gulp-typescript");
  5. var sourcemaps = require("gulp-sourcemaps");
  6. var srcToVariable = require("gulp-content-to-variable");
  7. var merge2 = require("merge2");
  8. var concat = require("gulp-concat");
  9. var rename = require("gulp-rename");
  10. var cleants = require("gulp-clean-ts-extends");
  11. var replace = require("gulp-replace");
  12. var expect = require("gulp-expect-file");
  13. var optimisejs = require("gulp-optimize-js");
  14. var path = require("path");
  15. var webpack = require('webpack');
  16. var webpackStream = require("webpack-stream");
  17. var fs = require("fs");
  18. var dtsBundle = require('dts-bundle');
  19. var through = require('through2');
  20. // Gulp Helpers
  21. var appendSrcToVariable = require("./helpers/gulp-appendSrcToVariable");
  22. var addDtsExport = require("./helpers/gulp-addDtsExport");
  23. var addDecorateAndExtends = require("./helpers/gulp-decorateAndExtends");
  24. var addModuleExports = require("./helpers/gulp-addModuleExports");
  25. var addES6Exports = require("./helpers/gulp-addES6Exports");
  26. var uncommentShader = require("./helpers/gulp-removeShaderComments");
  27. var processDeclaration = require('./helpers/gulp-processTypescriptDeclaration');
  28. // Import Gulp Tasks
  29. require("./tasks/gulpTasks-tsLint");
  30. require("./tasks/gulpTasks-netlify");
  31. require("./tasks/gulpTasks-whatsNew");
  32. require("./tasks/gulpTasks-localRun");
  33. require("./tasks/gulpTasks-watch");
  34. require("./tasks/gulpTasks-typedoc");
  35. require("./tasks/gulpTasks-intellisense");
  36. require("./tasks/gulpTasks-tests");
  37. // Import Build Config
  38. var config = require("./config.json");
  39. var includeShadersStream;
  40. var shadersStream;
  41. var workersStream;
  42. var extendsSearchRegex = /var\s__extends[\s\S]+?\}\)\(\);/g;
  43. var decorateSearchRegex = /var\s__decorate[\s\S]+?\};/g;
  44. var referenceSearchRegex = /\/\/\/ <reference.*/g;
  45. /**
  46. * TS configurations shared in the gulp file.
  47. */
  48. var tsConfig = {
  49. noResolve: true,
  50. target: "ES5",
  51. declarationFiles: true,
  52. typescript: require("typescript"),
  53. experimentalDecorators: true,
  54. isolatedModules: false,
  55. noImplicitAny: true,
  56. noImplicitReturns: true,
  57. noImplicitThis: true,
  58. noUnusedLocals: true,
  59. strictNullChecks: true,
  60. strictFunctionTypes: true,
  61. types: [],
  62. lib: [
  63. "dom",
  64. "es2015.promise",
  65. "es5"
  66. ]
  67. };
  68. var tsProject = typescript.createProject(tsConfig);
  69. var externalTsConfig = {
  70. noResolve: false,
  71. target: "ES5",
  72. declarationFiles: true,
  73. typescript: require("typescript"),
  74. experimentalDecorators: true,
  75. isolatedModules: false,
  76. noImplicitAny: true,
  77. noImplicitReturns: true,
  78. noImplicitThis: true,
  79. noUnusedLocals: true,
  80. strictNullChecks: true,
  81. types: [],
  82. lib: [
  83. "dom",
  84. "es2015.promise",
  85. "es5"
  86. ]
  87. };
  88. function processDependency(kind, dependency, filesToLoad, firstLevelOnly) {
  89. if (!firstLevelOnly && dependency.dependUpon) {
  90. for (var i = 0; i < dependency.dependUpon.length; i++) {
  91. var dependencyName = dependency.dependUpon[i];
  92. var parent = config.workloads[dependencyName];
  93. processDependency(kind, parent, filesToLoad);
  94. }
  95. }
  96. var content = dependency[kind];
  97. if (!content) {
  98. return;
  99. }
  100. for (var i = 0; i < content.length; i++) {
  101. var file = content[i];
  102. if (filesToLoad.indexOf(file) === -1) {
  103. filesToLoad.push(file);
  104. }
  105. }
  106. }
  107. function determineFilesToProcess(kind) {
  108. var currentConfig = config.build.currentConfig;
  109. var buildConfiguration = config.buildConfigurations[currentConfig];
  110. var filesToLoad = [];
  111. for (var index = 0; index < buildConfiguration.length; index++) {
  112. var dependencyName = buildConfiguration[index];
  113. var dependency = config.workloads[dependencyName];
  114. if (kind === "directFiles" && !dependency) {
  115. filesToLoad.push("../../dist/preview release/" + dependencyName);
  116. }
  117. else if (dependency) {
  118. processDependency(kind, dependency, filesToLoad);
  119. }
  120. }
  121. if (kind === "shaderIncludes") {
  122. for (var index = 0; index < filesToLoad.length; index++) {
  123. filesToLoad[index] = "../../src/Shaders/ShadersInclude/" + filesToLoad[index] + ".fx";
  124. }
  125. } else if (kind === "shaders") {
  126. for (var index = 0; index < filesToLoad.length; index++) {
  127. var name = filesToLoad[index];
  128. filesToLoad[index] = "../../src/Shaders/" + filesToLoad[index] + ".fx";
  129. }
  130. }
  131. return filesToLoad;
  132. }
  133. /*
  134. * Shader Management.
  135. */
  136. function shadersName(filename) {
  137. return path.basename(filename)
  138. .replace(".fragment", "Pixel")
  139. .replace(".vertex", "Vertex")
  140. .replace(".fx", "Shader");
  141. }
  142. function includeShadersName(filename) {
  143. return path.basename(filename).replace(".fx", "");
  144. }
  145. /*
  146. * Main necessary files stream Management.
  147. */
  148. gulp.task("includeShaders", function(cb) {
  149. var filesToProcess = determineFilesToProcess("shaderIncludes");
  150. includeShadersStream = gulp.src(filesToProcess).
  151. pipe(expect.real({ errorOnFailure: true }, filesToProcess)).
  152. pipe(uncommentShader()).
  153. pipe(srcToVariable({
  154. variableName: "BABYLON.Effect.IncludesShadersStore", asMap: true, namingCallback: includeShadersName
  155. }));
  156. cb();
  157. });
  158. gulp.task("shaders", gulp.series("includeShaders", function(cb) {
  159. var filesToProcess = determineFilesToProcess("shaders");
  160. shadersStream = gulp.src(filesToProcess).
  161. pipe(expect.real({ errorOnFailure: true }, filesToProcess)).
  162. pipe(uncommentShader()).
  163. pipe(srcToVariable({
  164. variableName: "BABYLON.Effect.ShadersStore", asMap: true, namingCallback: shadersName
  165. }));
  166. cb();
  167. }));
  168. gulp.task("workers", function(cb) {
  169. workersStream = config.workers.map(function(workerDef) {
  170. return gulp.src(workerDef.files).
  171. pipe(expect.real({ errorOnFailure: true }, workerDef.files)).
  172. pipe(uglify()).
  173. pipe(srcToVariable({
  174. variableName: workerDef.variable
  175. }));
  176. });
  177. cb();
  178. });
  179. /**
  180. * Build tasks to concat minify uflify optimise the BJS js in different flavor (workers...).
  181. */
  182. gulp.task("buildWorker", gulp.series(gulp.parallel("workers", "shaders"), function() {
  183. var filesToProcess = determineFilesToProcess("files");
  184. return merge2(
  185. gulp.src(filesToProcess).
  186. pipe(expect.real({ errorOnFailure: true }, filesToProcess)),
  187. shadersStream,
  188. includeShadersStream,
  189. workersStream
  190. )
  191. .pipe(concat(config.build.minWorkerFilename))
  192. .pipe(cleants())
  193. .pipe(replace(extendsSearchRegex, ""))
  194. .pipe(replace(decorateSearchRegex, ""))
  195. .pipe(addDecorateAndExtends())
  196. .pipe(addModuleExports("BABYLON", {
  197. dependencies: config.build.dependencies
  198. }))
  199. .pipe(uglify())
  200. .pipe(optimisejs())
  201. .pipe(gulp.dest(config.build.outputDirectory));
  202. }));
  203. gulp.task("build", gulp.series("shaders", function build() {
  204. var filesToProcess = determineFilesToProcess("files");
  205. var directFilesToProcess = determineFilesToProcess("directFiles");
  206. let mergedStreams = merge2(gulp.src(filesToProcess)
  207. .pipe(expect.real({ errorOnFailure: true }, filesToProcess)),
  208. shadersStream,
  209. includeShadersStream);
  210. if (directFilesToProcess.length) {
  211. mergedStreams.add(gulp.src(directFilesToProcess));
  212. }
  213. return merge2(
  214. mergedStreams
  215. .pipe(concat(config.build.noModuleFilename))
  216. .pipe(cleants())
  217. .pipe(replace(extendsSearchRegex, ""))
  218. .pipe(replace(decorateSearchRegex, ""))
  219. .pipe(addDecorateAndExtends())
  220. .pipe(gulp.dest(config.build.outputDirectory))
  221. .pipe(rename(config.build.filename))
  222. .pipe(addModuleExports("BABYLON", {
  223. dependencies: config.build.dependencies
  224. }))
  225. .pipe(gulp.dest(config.build.outputDirectory))
  226. .pipe(rename(config.build.minFilename))
  227. .pipe(uglify())
  228. .pipe(optimisejs())
  229. .pipe(gulp.dest(config.build.outputDirectory)),
  230. mergedStreams
  231. .pipe(concat("es6.js"))
  232. .pipe(cleants())
  233. .pipe(replace(extendsSearchRegex, ""))
  234. .pipe(replace(decorateSearchRegex, ""))
  235. .pipe(addES6Exports("BABYLON"))
  236. .pipe(gulp.dest(config.build.outputDirectory))
  237. );
  238. }));
  239. /*
  240. * Compiles all typescript files and creating a js and a declaration file.
  241. */
  242. gulp.task("typescript-compile", function() {
  243. var tsResult = gulp.src(config.typescript)
  244. .pipe(sourcemaps.init())
  245. .pipe(tsProject({
  246. summarizeFailureOutput: true
  247. }));
  248. //If this gulp task is running on travis, file the build!
  249. if (process.env.TRAVIS) {
  250. tsResult.once("error", function() {
  251. tsResult.once("finish", function() {
  252. console.log("Typescript compile failed");
  253. process.exit(1);
  254. });
  255. });
  256. }
  257. return merge2([
  258. tsResult.dts
  259. .pipe(concat(config.build.declarationFilename))
  260. .pipe(addDtsExport("BABYLON", "babylonjs"))
  261. .pipe(gulp.dest(config.build.outputDirectory)),
  262. tsResult.js
  263. .pipe(sourcemaps.write("./",
  264. {
  265. includeContent: false,
  266. sourceRoot: (filePath) => {
  267. return "";
  268. }
  269. }))
  270. .pipe(gulp.dest(config.build.srcOutputDirectory))
  271. ])
  272. });
  273. /**
  274. * Build the releasable files.
  275. */
  276. gulp.task("typescript", gulp.series("typescript-compile", "buildWorker", "build"));
  277. /**
  278. * Helper methods to build external library (mat, post processes, ...).
  279. */
  280. var buildExternalLibraries = function(settings) {
  281. var tasks = settings.libraries.map(function(library) {
  282. return buildExternalLibrary(library, settings, false);
  283. });
  284. let mergedTasks = merge2(tasks);
  285. if (settings.build.buildAsModule) {
  286. mergedTasks.on("end", function() {
  287. //generate js file list
  288. let files = settings.libraries.filter(function(lib) {
  289. return !lib.doNotIncludeInBundle;
  290. }).map(function(lib) {
  291. return config.build.outputDirectory + settings.build.distOutputDirectory + lib.output;
  292. });
  293. var outputDirectory = config.build.outputDirectory + settings.build.distOutputDirectory;
  294. let srcTask = gulp.src(files)
  295. .pipe(concat(settings.build.outputFilename + ".js"))
  296. .pipe(replace(extendsSearchRegex, ""))
  297. .pipe(replace(decorateSearchRegex, ""))
  298. .pipe(replace(referenceSearchRegex, ""))
  299. .pipe(addDecorateAndExtends())
  300. .pipe(addModuleExports(settings.build.moduleDeclaration, { subModule: true, extendsRoot: settings.build.extendsRoot }))
  301. .pipe(gulp.dest(outputDirectory))
  302. .pipe(cleants())
  303. .pipe(rename({ extname: ".min.js" }))
  304. .pipe(uglify())
  305. .pipe(optimisejs())
  306. .pipe(gulp.dest(outputDirectory));
  307. let dtsFiles = files.map(function(filename) {
  308. return filename.replace(".js", ".d.ts");
  309. });
  310. let dtsModuleTask = gulp.src(dtsFiles)
  311. .pipe(concat(settings.build.outputFilename + ".module.d.ts"))
  312. .pipe(replace(referenceSearchRegex, ""))
  313. .pipe(addDtsExport(settings.build.moduleDeclaration, settings.build.moduleName, true, settings.build.extendsRoot, settings.build.extraTypesDependencies))
  314. .pipe(gulp.dest(outputDirectory));
  315. let dtsTask = gulp.src(dtsFiles)
  316. .pipe(concat(settings.build.outputFilename + ".d.ts"))
  317. .pipe(replace(referenceSearchRegex, ""))
  318. .pipe(gulp.dest(outputDirectory));
  319. return merge2([srcTask, dtsTask, dtsModuleTask]);
  320. });
  321. }
  322. return mergedTasks;
  323. }
  324. var buildExternalLibrary = function(library, settings, watch) {
  325. var tsProcess;
  326. if (library.files && library.files.length) {
  327. tsProcess = gulp.src(library.files, { base: settings.build.srcOutputDirectory })
  328. .pipe(sourcemaps.init())
  329. .pipe(typescript(externalTsConfig));
  330. }
  331. let tasks = [];
  332. let shaderTask;
  333. let shadersInclueTask;
  334. if (library.shadersIncludeFiles && library.shadersIncludeFiles.length) {
  335. shadersInclueTask = gulp.src(library.shadersIncludeFiles, { base: settings.build.srcOutputDirectory })
  336. .pipe(uncommentShader())
  337. .pipe(appendSrcToVariable("BABYLON.Effect.IncludesShadersStore", includeShadersName, library.output + ".include.fx"))
  338. .pipe(gulp.dest(settings.build.srcOutputDirectory));
  339. tasks.push(shadersInclueTask);
  340. }
  341. if (library.shaderFiles && library.shaderFiles.length) {
  342. shaderTask = gulp.src(library.shaderFiles, { base: settings.build.srcOutputDirectory })
  343. .pipe(uncommentShader())
  344. .pipe(appendSrcToVariable("BABYLON.Effect.ShadersStore", shadersName, library.output + ".fx"))
  345. .pipe(gulp.dest(settings.build.srcOutputDirectory));
  346. tasks.push(shaderTask);
  347. }
  348. var dev;
  349. if (tsProcess) {
  350. dev = tsProcess.js
  351. .pipe(sourcemaps.write("./", {
  352. includeContent: false,
  353. sourceRoot: (filePath) => {
  354. return "";
  355. }
  356. })).pipe(gulp.dest(settings.build.srcOutputDirectory));
  357. tasks.push(dev);
  358. }
  359. var outputDirectory = config.build.outputDirectory + settings.build.distOutputDirectory;
  360. if (watch) {
  361. return merge2(tasks);
  362. }
  363. else {
  364. let currentTasks = [];
  365. if (tsProcess) {
  366. currentTasks.push(tsProcess.js);
  367. }
  368. if (shaderTask) {
  369. currentTasks.push(shaderTask);
  370. }
  371. if (shadersInclueTask) {
  372. currentTasks.push(shadersInclueTask);
  373. }
  374. var code;
  375. if (currentTasks.length) {
  376. code = merge2(currentTasks)
  377. .pipe(concat(library.output));
  378. }
  379. if (library.buildAsModule && code) {
  380. code = code.pipe(replace(extendsSearchRegex, ""))
  381. .pipe(replace(decorateSearchRegex, ""))
  382. .pipe(addDecorateAndExtends())
  383. .pipe(addModuleExports(library.moduleDeclaration, { subModule: true, extendsRoot: library.extendsRoot }))
  384. }
  385. if (code) {
  386. code = code.pipe(gulp.dest(outputDirectory))
  387. .pipe(cleants())
  388. .pipe(rename({ extname: ".min.js" }))
  389. .pipe(uglify())
  390. .pipe(optimisejs())
  391. .pipe(gulp.dest(outputDirectory));
  392. /*}*/
  393. }
  394. var dts;
  395. if (tsProcess) {
  396. dts = tsProcess.dts
  397. .pipe(concat(library.output))
  398. .pipe(replace(referenceSearchRegex, ""))
  399. .pipe(rename({ extname: ".d.ts" }))
  400. .pipe(gulp.dest(outputDirectory));
  401. }
  402. var waitAll;
  403. let waitAllTasks = [];
  404. if (dev) {
  405. waitAllTasks.push(dev);
  406. }
  407. if (code) {
  408. waitAllTasks.push(code);
  409. }
  410. if (dts) {
  411. waitAllTasks.push(dts);
  412. }
  413. if (library.buildAsModule && tsProcess) {
  414. var dts2 = tsProcess.dts
  415. .pipe(concat(library.output))
  416. .pipe(replace(referenceSearchRegex, ""))
  417. .pipe(addDtsExport(library.moduleDeclaration, library.moduleName, true, library.extendsRoot, config.build.extraTypesDependencies))
  418. .pipe(rename({ extname: ".module.d.ts" }))
  419. .pipe(gulp.dest(outputDirectory));
  420. waitAllTasks.push(dts2);
  421. }
  422. if (waitAllTasks.length) {
  423. waitAll = merge2(waitAllTasks);
  424. }
  425. if (library.webpack) {
  426. let sequence = [];
  427. if (waitAll) {
  428. sequence.push(waitAll);
  429. }
  430. if (settings.build.outputs) {
  431. settings.build.outputs.forEach(out => {
  432. let wpConfig = require(library.webpack);
  433. if (!out.minified) {
  434. wpConfig.mode = "development";
  435. }
  436. let wpBuild = webpackStream(wpConfig, require("webpack"));
  437. //shoud dtsBundle create the declaration?
  438. if (settings.build.dtsBundle) {
  439. let event = wpBuild
  440. .pipe(through.obj(function(file, enc, cb) {
  441. // only declaration files
  442. const isdts = /\.d\.ts$/.test(file.path);
  443. if (isdts) this.push(file);
  444. cb();
  445. }))
  446. .pipe(gulp.dest(outputDirectory));
  447. // dts-bundle does NOT support (gulp) streams, so files have to be saved and reloaded,
  448. // until I fix it
  449. event.on("end", function() {
  450. // create the file
  451. dtsBundle.bundle(settings.build.dtsBundle);
  452. // prepend the needed reference
  453. let fileLocation = path.join(path.dirname(settings.build.dtsBundle.main), settings.build.dtsBundle.out);
  454. fs.readFile(fileLocation, function(err, data) {
  455. if (err) throw err;
  456. data = (settings.build.dtsBundle.prependText || "") + '\n' + data.toString();
  457. fs.writeFileSync(fileLocation, data);
  458. if (settings.build.processDeclaration) {
  459. var newData = processDeclaration(data, settings.build.processDeclaration);
  460. fs.writeFileSync(fileLocation.replace('.module', ''), newData);
  461. }
  462. });
  463. });
  464. }
  465. let build = wpBuild
  466. .pipe(through.obj(function(file, enc, cb) {
  467. // only pipe js files
  468. const isJs = /\.js$/.test(file.path);
  469. if (isJs) this.push(file);
  470. cb();
  471. }))
  472. .pipe(addModuleExports(library.moduleDeclaration, { subModule: false, extendsRoot: false, externalUsingBabylon: true, noBabylonInit: library.babylonIncluded }));
  473. function processDestination(dest) {
  474. var outputDirectory = config.build.outputDirectory + dest.outputDirectory;
  475. build = build
  476. .pipe(rename(dest.filename.replace(".js", library.noBundleInName ? '.js' : ".bundle.js")))
  477. .pipe(gulp.dest(outputDirectory));
  478. if (library.babylonIncluded && dest.addBabylonDeclaration) {
  479. // include the babylon declaration
  480. if (dest.addBabylonDeclaration === true) {
  481. dest.addBabylonDeclaration = [config.build.declarationFilename];
  482. }
  483. var decsToAdd = dest.addBabylonDeclaration.map(function(dec) {
  484. return config.build.outputDirectory + '/' + dec;
  485. });
  486. sequence.unshift(gulp.src(decsToAdd)
  487. .pipe(rename(function(path) {
  488. path.dirname = '';
  489. }))
  490. .pipe(gulp.dest(outputDirectory)))
  491. }
  492. }
  493. out.destinations.forEach(dest => {
  494. processDestination(dest);
  495. });
  496. sequence.push(build);
  497. });
  498. } else {
  499. console.log(library.output)
  500. var wpConfig;
  501. if (library.entry) {
  502. wpConfig = require(settings.build.webpack);
  503. wpConfig.entry = {
  504. 'main': path.resolve(wpConfig.context, library.entry),
  505. };
  506. wpConfig.output.filename = library.output;
  507. }
  508. else {
  509. wpConfig = require(library.webpack);
  510. }
  511. let wpBuild = webpackStream(wpConfig, webpack);
  512. let buildEvent = wpBuild.pipe(gulp.dest(outputDirectory));
  513. sequence.push(buildEvent);
  514. // Generate unminified
  515. wpConfig.mode = "development";
  516. wpConfig.output.filename = wpConfig.output.filename.replace(".min", "");
  517. wpBuild = webpackStream(wpConfig, webpack);
  518. let buildEvent2 = wpBuild.pipe(gulp.dest(outputDirectory));
  519. sequence.push(buildEvent2);
  520. if (library.isMain) {
  521. if (settings.build.dtsBundle || settings.build.processDeclaration) {
  522. buildEvent.on("end", function() {
  523. if (settings.build.dtsBundle) {
  524. dtsBundle.bundle(settings.build.dtsBundle);
  525. }
  526. if (settings.build.processDeclaration) {
  527. let fileLocation = path.join(outputDirectory, settings.build.processDeclaration.filename);
  528. fs.readFile(fileLocation, function(err, data) {
  529. if (err) throw err;
  530. // For Raanan, litteral import hack TO BETTER INTEGRATE
  531. data = data + "";
  532. data = data.replace('import "../sass/main.scss";', "");
  533. var newData = processDeclaration(data, settings.build.processDeclaration);
  534. fs.writeFileSync(fileLocation.replace('.module', ''), newData);
  535. //legacy module support
  536. fs.writeFileSync(fileLocation, data + "\n" + newData);
  537. });
  538. }
  539. });
  540. }
  541. }
  542. }
  543. return merge2(sequence);
  544. }
  545. else {
  546. return waitAll || Promise.resolve();
  547. }
  548. }
  549. }
  550. /**
  551. * Dynamic module creation In Serie for WebPack leaks.
  552. */
  553. function buildExternalLibrariesInSeries(settings) {
  554. var tasks = settings.libraries.map(function(library) {
  555. var build = function(cb) {
  556. return buildExternalLibrary(library, settings, false);
  557. }
  558. return build;
  559. });
  560. return gulp.series.apply(this, tasks);
  561. }
  562. /**
  563. * Dynamic module creation.
  564. */
  565. config.modules.map(function(module) {
  566. // New Way
  567. if (!config[module].buildAsModule) {
  568. gulp.task(module, buildExternalLibrariesInSeries(config[module]));
  569. }
  570. // Soon To Be Gone
  571. else {
  572. gulp.task(module, function() {
  573. return buildExternalLibraries(config[module]);
  574. });
  575. }
  576. });
  577. /**
  578. * Build all libs.
  579. */
  580. gulp.task("typescript-libraries", gulp.series(config.modules));
  581. /**
  582. * Custom build with full path file control; used by profile.html
  583. */
  584. gulp.task("build-custom", gulp.series("typescript-compile", "build"));
  585. /**
  586. * Validate compile the code and check the comments and style case convention through typedoc
  587. */
  588. gulp.task("typedoc-check", gulp.series("typescript-compile", "gui", "loaders", "serializers", "typedoc-generate", "typedoc-validate"));
  589. /**
  590. * Combine Webserver and Watch as long as vscode does not handle multi tasks.
  591. */
  592. gulp.task("run", gulp.series("watch", "webserver"));
  593. /**
  594. * Do it all (Build).
  595. */
  596. gulp.task("typescript-all", gulp.series("typescript", "typescript-libraries", "netlify-cleanup"));
  597. /**
  598. * Do it all (tests).
  599. */
  600. gulp.task("tests-all", gulp.series("tests-unit", "tests-modules", "tests-validation-virtualscreen", "tests-validation-browserstack"));
  601. /**
  602. * The default task, concat and min the main BJS files.
  603. */
  604. gulp.task("default", gulp.series("tsLint", "typescript-all", "intellisense", "typedoc-all", "tests-all"));