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