123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. (function (factory) {
  2. if (typeof module === "object" && typeof module.exports === "object") {
  3. var v = factory(require, exports);
  4. if (v !== undefined) module.exports = v;
  5. }
  6. else if (typeof define === "function" && define.amd) {
  7. define(["require", "exports", "@angular/core", "./ng-module-loader", "./util"], factory);
  8. }
  9. })(function (require, exports) {
  10. "use strict";
  11. Object.defineProperty(exports, "__esModule", { value: true });
  12. var core_1 = require("@angular/core");
  13. var ng_module_loader_1 = require("./ng-module-loader");
  14. var util_1 = require("./util");
  15. exports.LAZY_LOADED_TOKEN = new core_1.InjectionToken('LZYCMP');
  16. /**
  17. * @hidden
  18. */
  19. var ModuleLoader = (function () {
  20. function ModuleLoader(_ngModuleLoader, _injector) {
  21. this._ngModuleLoader = _ngModuleLoader;
  22. this._injector = _injector;
  23. /** @internal */
  24. this._cfrMap = new Map();
  25. this._promiseMap = new Map();
  26. }
  27. ModuleLoader.prototype.load = function (modulePath) {
  28. var _this = this;
  29. (void 0) /* console.time */;
  30. var splitString = modulePath.split(SPLITTER);
  31. var promise = this._promiseMap.get(modulePath);
  32. if (!promise) {
  33. promise = this._ngModuleLoader.load(splitString[0], splitString[1]);
  34. this._promiseMap.set(modulePath, promise);
  35. }
  36. return promise.then(function (loadedModule) {
  37. (void 0) /* console.timeEnd */;
  38. var ref = loadedModule.create(_this._injector);
  39. var component = ref.injector.get(exports.LAZY_LOADED_TOKEN);
  40. _this._cfrMap.set(component, ref.componentFactoryResolver);
  41. return {
  42. componentFactoryResolver: ref.componentFactoryResolver,
  43. component: component
  44. };
  45. });
  46. };
  47. ModuleLoader.prototype.getComponentFactoryResolver = function (component) {
  48. return this._cfrMap.get(component);
  49. };
  50. ModuleLoader.decorators = [
  51. { type: core_1.Injectable },
  52. ];
  53. /** @nocollapse */
  54. ModuleLoader.ctorParameters = function () { return [
  55. { type: ng_module_loader_1.NgModuleLoader, },
  56. { type: core_1.Injector, },
  57. ]; };
  58. return ModuleLoader;
  59. }());
  60. exports.ModuleLoader = ModuleLoader;
  61. var SPLITTER = '#';
  62. /**
  63. * @hidden
  64. */
  65. function provideModuleLoader(ngModuleLoader, injector) {
  66. return new ModuleLoader(ngModuleLoader, injector);
  67. }
  68. exports.provideModuleLoader = provideModuleLoader;
  69. /**
  70. * @hidden
  71. */
  72. function setupPreloadingImplementation(config, deepLinkConfig, moduleLoader) {
  73. if (!deepLinkConfig || !deepLinkConfig.links || !config.getBoolean('preloadModules')) {
  74. return Promise.resolve();
  75. }
  76. var linksToLoad = deepLinkConfig.links.filter(function (link) { return !!link.loadChildren && link.priority !== 'off'; });
  77. // Load the high priority modules first
  78. var highPriorityPromises = linksToLoad
  79. .filter(function (link) { return link.priority === 'high'; })
  80. .map(function (link) { return moduleLoader.load(link.loadChildren); });
  81. return Promise.all(highPriorityPromises).then(function () {
  82. // Load the low priority modules after the high priority are done
  83. var lowPriorityPromises = linksToLoad
  84. .filter(function (link) { return link.priority === 'low'; })
  85. .map(function (link) { return moduleLoader.load(link.loadChildren); });
  86. return Promise.all(lowPriorityPromises);
  87. }).catch(function (err) {
  88. console.error(err.message);
  89. });
  90. }
  91. exports.setupPreloadingImplementation = setupPreloadingImplementation;
  92. /**
  93. * @hidden
  94. */
  95. function setupPreloading(config, deepLinkConfig, moduleLoader, ngZone) {
  96. return function () {
  97. util_1.requestIonicCallback(function () {
  98. ngZone.runOutsideAngular(function () {
  99. setupPreloadingImplementation(config, deepLinkConfig, moduleLoader);
  100. });
  101. });
  102. };
  103. }
  104. exports.setupPreloading = setupPreloading;
  105. });
  106. //# sourceMappingURL=module-loader.js.map