gulpTasks-viewerLibraries.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. // Gulp Tools
  2. var gulp = require("gulp");
  3. var webpackStream = require("webpack-stream");
  4. var dtsBundle = require('dts-bundle');
  5. var merge2 = require("merge2");
  6. var through = require('through2');
  7. var path = require("path");
  8. var rename = require("gulp-rename");
  9. // Gulp Helpers
  10. var processDeclaration = require('../helpers/gulp-processModuleDeclarationToNamespace');
  11. var addModuleExports = require("../helpers/gulp-addModuleExports");
  12. // Import Build Config
  13. var config = require("../../Config/config.json");
  14. const webpack = require("webpack");
  15. /**
  16. * Build the viewer
  17. */
  18. var buildViewerLibrary = function (library, settings, out) {
  19. const sequence = [];
  20. var outputDirectory = config.build.outputDirectory + settings.build.distOutputDirectory;
  21. let wpConfig = require(settings.build.webpack);
  22. if (!out.minified) {
  23. wpConfig.mode = "development";
  24. }
  25. let wpBuild = webpackStream(wpConfig, webpack);
  26. //shoud dtsBundle create the declaration?
  27. if (settings.build.dtsBundle) {
  28. let event = wpBuild
  29. .pipe(through.obj(function (file, enc, cb) {
  30. // only declaration files
  31. const isdts = /\.d\.ts$/.test(file.path);
  32. if (isdts) this.push(file);
  33. cb();
  34. }))
  35. .pipe(gulp.dest(outputDirectory));
  36. // dts-bundle does NOT support (gulp) streams, so files have to be saved and reloaded,
  37. // until I fix it
  38. event.on("end", function () {
  39. // create the file
  40. dtsBundle.bundle(settings.build.dtsBundle);
  41. // process the declaration
  42. let fileLocation = path.join(path.dirname(settings.build.dtsBundle.main), settings.build.dtsBundle.out);
  43. processDeclaration(fileLocation, settings.build.umd.packageName, settings.build.umd.processDeclaration);
  44. });
  45. }
  46. let build = wpBuild
  47. .pipe(through.obj(function (file, enc, cb) {
  48. // only pipe js files
  49. const isJs = /\.js$/.test(file.path);
  50. if (isJs) this.push(file);
  51. cb();
  52. }))
  53. .pipe(addModuleExports(library.moduleDeclaration, {
  54. subModule: false,
  55. extendsRoot: false,
  56. externalUsingBabylon: true,
  57. noBabylonInit: true
  58. }));
  59. function processDestination(dest) {
  60. var outputDirectory = config.build.outputDirectory + dest.outputDirectory;
  61. build = build
  62. .pipe(rename(dest.filename))
  63. .pipe(gulp.dest(outputDirectory));
  64. if (dest.addBabylonDeclaration) {
  65. // include the babylon declaration
  66. if (dest.addBabylonDeclaration === true) {
  67. dest.addBabylonDeclaration = ["babylon.module.d.ts"];
  68. }
  69. var decsToAdd = dest.addBabylonDeclaration.map(function (dec) {
  70. return config.build.outputDirectory + '/' + dec;
  71. });
  72. sequence.unshift(gulp.src(decsToAdd)
  73. .pipe(rename(function (path) {
  74. path.dirname = '';
  75. }))
  76. .pipe(gulp.dest(outputDirectory)))
  77. }
  78. }
  79. out.destinations.forEach(dest => {
  80. processDestination(dest);
  81. });
  82. sequence.push(build);
  83. // });
  84. return merge2(sequence);
  85. }
  86. function buildViewerOutputs(settings, library) {
  87. var outputBuilds = settings.build.outputs.map(out => {
  88. var buildOutput = function () {
  89. return buildViewerLibrary(library, settings, out);
  90. }
  91. return buildOutput;
  92. });
  93. return (outputBuilds);
  94. }
  95. /**
  96. * Dynamic viewer module creation In Serie for WebPack leaks.
  97. */
  98. function buildViewerLibraries(settings) {
  99. var tasks = settings.libraries.map(function (library) {
  100. return buildViewerOutputs(settings, library);
  101. });
  102. return gulp.series.apply(this, tasks);
  103. }
  104. /**
  105. * Dynamic viewer module creation.
  106. */
  107. config.viewerModules.map(function (module) {
  108. var settings = config[module];
  109. // Build the libraries.
  110. gulp.task(module, buildViewerLibraries(settings));
  111. });