@angular/core 7.2.0-rc.0 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/bundles/core-testing.umd.js +190 -128
  2. package/bundles/core-testing.umd.js.map +1 -1
  3. package/bundles/core-testing.umd.min.js +10 -10
  4. package/bundles/core-testing.umd.min.js.map +1 -1
  5. package/bundles/core.umd.js +1772 -1324
  6. package/bundles/core.umd.js.map +1 -1
  7. package/bundles/core.umd.min.js +110 -124
  8. package/bundles/core.umd.min.js.map +1 -1
  9. package/core.metadata.json +1 -1
  10. package/esm2015/index.js +2 -2
  11. package/esm2015/public_api.js +2 -2
  12. package/esm2015/src/change_detection/constants.js +3 -3
  13. package/esm2015/src/core.js +2 -2
  14. package/esm2015/src/core_render3_private_export.js +2 -2
  15. package/esm2015/src/debug/debug_node.js +6 -6
  16. package/esm2015/src/render3/bindings.js +3 -3
  17. package/esm2015/src/render3/component.js +8 -6
  18. package/esm2015/src/render3/component_ref.js +5 -5
  19. package/esm2015/src/render3/context_discovery.js +2 -2
  20. package/esm2015/src/render3/definition.js +3 -10
  21. package/esm2015/src/render3/di.js +107 -93
  22. package/esm2015/src/render3/discovery_utils.js +5 -5
  23. package/esm2015/src/render3/empty.js +28 -0
  24. package/esm2015/src/render3/features/inherit_definition_feature.js +3 -3
  25. package/esm2015/src/render3/hooks.js +14 -12
  26. package/esm2015/src/render3/i18n.js +3 -3
  27. package/esm2015/src/render3/index.js +2 -2
  28. package/esm2015/src/render3/instructions.js +319 -370
  29. package/esm2015/src/render3/interfaces/container.js +10 -1
  30. package/esm2015/src/render3/interfaces/definition.js +1 -6
  31. package/esm2015/src/render3/interfaces/injector.js +1 -2
  32. package/esm2015/src/render3/interfaces/node.js +37 -2
  33. package/esm2015/src/render3/interfaces/styling.js +304 -113
  34. package/esm2015/src/render3/interfaces/view.js +15 -7
  35. package/esm2015/src/render3/jit/compiler_facade_interface.js +3 -1
  36. package/esm2015/src/render3/jit/directive.js +6 -7
  37. package/esm2015/src/render3/jit/environment.js +3 -1
  38. package/esm2015/src/render3/jit/module.js +11 -9
  39. package/esm2015/src/render3/node_manipulation.js +5 -22
  40. package/esm2015/src/render3/node_selector_matcher.js +2 -2
  41. package/esm2015/src/render3/pipe.js +2 -2
  42. package/esm2015/src/render3/pure_function.js +3 -3
  43. package/esm2015/src/render3/query.js +3 -3
  44. package/esm2015/src/render3/state.js +14 -20
  45. package/esm2015/src/render3/styling/class_and_style_bindings.js +893 -213
  46. package/esm2015/src/render3/styling/util.js +37 -14
  47. package/esm2015/src/render3/util.js +21 -5
  48. package/esm2015/src/render3/view_engine_compatibility.js +5 -6
  49. package/esm2015/src/render3/view_ref.js +6 -16
  50. package/esm2015/src/sanitization/inert_body.js +4 -4
  51. package/esm2015/src/version.js +1 -1
  52. package/esm2015/testing/src/r3_test_bed.js +234 -152
  53. package/esm2015/testing/src/resolvers.js +12 -5
  54. package/esm2015/testing/src/testing_internal.js +2 -2
  55. package/esm5/src/change_detection/constants.js +3 -3
  56. package/esm5/src/core_render3_private_export.js +2 -2
  57. package/esm5/src/debug/debug_node.js +6 -6
  58. package/esm5/src/render3/bindings.js +3 -3
  59. package/esm5/src/render3/component.js +8 -6
  60. package/esm5/src/render3/component_ref.js +5 -5
  61. package/esm5/src/render3/context_discovery.js +2 -2
  62. package/esm5/src/render3/definition.js +3 -8
  63. package/esm5/src/render3/di.js +94 -84
  64. package/esm5/src/render3/discovery_utils.js +5 -5
  65. package/esm5/src/render3/empty.js +22 -0
  66. package/esm5/src/render3/features/inherit_definition_feature.js +3 -3
  67. package/esm5/src/render3/hooks.js +11 -9
  68. package/esm5/src/render3/i18n.js +3 -3
  69. package/esm5/src/render3/index.js +2 -2
  70. package/esm5/src/render3/instructions.js +282 -282
  71. package/esm5/src/render3/interfaces/container.js +9 -1
  72. package/esm5/src/render3/interfaces/definition.js +1 -1
  73. package/esm5/src/render3/interfaces/injector.js +1 -1
  74. package/esm5/src/render3/interfaces/node.js +1 -1
  75. package/esm5/src/render3/interfaces/styling.js +1 -1
  76. package/esm5/src/render3/interfaces/view.js +1 -1
  77. package/esm5/src/render3/jit/compiler_facade_interface.js +1 -1
  78. package/esm5/src/render3/jit/directive.js +6 -6
  79. package/esm5/src/render3/jit/environment.js +3 -1
  80. package/esm5/src/render3/jit/module.js +10 -8
  81. package/esm5/src/render3/node_manipulation.js +5 -21
  82. package/esm5/src/render3/node_selector_matcher.js +2 -2
  83. package/esm5/src/render3/pipe.js +2 -2
  84. package/esm5/src/render3/pure_function.js +3 -3
  85. package/esm5/src/render3/query.js +3 -3
  86. package/esm5/src/render3/state.js +14 -19
  87. package/esm5/src/render3/styling/class_and_style_bindings.js +681 -210
  88. package/esm5/src/render3/styling/util.js +26 -13
  89. package/esm5/src/render3/util.js +20 -5
  90. package/esm5/src/render3/view_engine_compatibility.js +5 -6
  91. package/esm5/src/render3/view_ref.js +6 -15
  92. package/esm5/src/sanitization/inert_body.js +4 -4
  93. package/esm5/src/version.js +1 -1
  94. package/esm5/testing/src/r3_test_bed.js +174 -127
  95. package/esm5/testing/src/resolvers.js +11 -6
  96. package/esm5/testing/src/testing_internal.js +2 -2
  97. package/fesm2015/core.js +2304 -1731
  98. package/fesm2015/core.js.map +1 -1
  99. package/fesm2015/testing.js +223 -150
  100. package/fesm2015/testing.js.map +1 -1
  101. package/fesm5/core.js +1777 -1331
  102. package/fesm5/core.js.map +1 -1
  103. package/fesm5/testing.js +181 -130
  104. package/fesm5/testing.js.map +1 -1
  105. package/package.json +1 -1
  106. package/src/change_detection/constants.d.ts +2 -2
  107. package/src/core_render3_private_export.d.ts +1 -1
  108. package/src/render3/definition.d.ts +2 -4
  109. package/src/render3/di.d.ts +4 -3
  110. package/src/render3/empty.d.ts +16 -0
  111. package/src/render3/hooks.d.ts +3 -3
  112. package/src/render3/index.d.ts +1 -1
  113. package/src/render3/instructions.d.ts +117 -72
  114. package/src/render3/interfaces/container.d.ts +1 -0
  115. package/src/render3/interfaces/definition.d.ts +0 -3
  116. package/src/render3/interfaces/injector.d.ts +0 -1
  117. package/src/render3/interfaces/node.d.ts +37 -2
  118. package/src/render3/interfaces/styling.d.ts +392 -117
  119. package/src/render3/interfaces/view.d.ts +14 -6
  120. package/src/render3/jit/compiler_facade_interface.d.ts +2 -0
  121. package/src/render3/node_manipulation.d.ts +0 -7
  122. package/src/render3/state.d.ts +3 -4
  123. package/src/render3/styling/class_and_style_bindings.d.ts +114 -43
  124. package/src/render3/styling/util.d.ts +5 -2
  125. package/src/render3/util.d.ts +7 -0
  126. package/testing/src/r3_test_bed.d.ts +15 -0
  127. package/testing/testing.metadata.json +1 -1
  128. package/testing.d.ts +1 -1
package/fesm5/testing.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
- * @license Angular v7.2.0-rc.0
2
+ * @license Angular v7.2.0
3
3
  * (c) 2010-2018 Google, Inc. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
- import { RendererFactory2, getDebugNode, ɵstringify, Component, Directive, NgModule, Pipe, ɵReflectionCapabilities, InjectionToken, ApplicationInitStatus, Injector, NgZone, ɵRender3ComponentFactory, ɵRender3NgModuleRef, ɵcompileComponent, ɵcompileDirective, ɵcompileNgModuleDefs, ɵcompilePipe, ɵgetInjectableDef, ɵpatchComponentDefWithScope, ɵresetCompiledComponents, Compiler, Injectable, Optional, SkipSelf, ɵAPP_ROOT, ɵclearOverrides, ɵivyEnabled, ɵoverrideComponentView, ɵoverrideProvider } from '@angular/core';
8
- import { __spread, __values, __decorate, __extends, __read } from 'tslib';
7
+ import { RendererFactory2, getDebugNode, ɵstringify, Component, Directive, NgModule, Pipe, ɵReflectionCapabilities, InjectionToken, ApplicationInitStatus, Injector, NgZone, resolveForwardRef, ɵRender3ComponentFactory, ɵRender3NgModuleRef, ɵcompileComponent, ɵcompileDirective, ɵcompileNgModuleDefs, ɵcompilePipe, ɵgetInjectableDef, ɵpatchComponentDefWithScope, ɵresetCompiledComponents, Compiler, Injectable, Optional, SkipSelf, ɵAPP_ROOT, ɵclearOverrides, ɵivyEnabled, ɵoverrideComponentView, ɵoverrideProvider } from '@angular/core';
8
+ import { __spread, __decorate, __assign, __values, __read, __extends } from 'tslib';
9
9
 
10
10
  /**
11
11
  * @license
@@ -764,7 +764,9 @@ var OverrideResolver = /** @class */ (function () {
764
764
  this.overrides.clear();
765
765
  overrides.forEach(function (_a) {
766
766
  var _b = __read(_a, 2), type = _b[0], override = _b[1];
767
- return _this.overrides.set(type, override);
767
+ var overrides = _this.overrides.get(type) || [];
768
+ overrides.push(override);
769
+ _this.overrides.set(type, overrides);
768
770
  });
769
771
  };
770
772
  OverrideResolver.prototype.getAnnotation = function (type) {
@@ -772,14 +774,17 @@ var OverrideResolver = /** @class */ (function () {
772
774
  return reflection.annotations(type).find(function (a) { return a instanceof _this.type; }) || null;
773
775
  };
774
776
  OverrideResolver.prototype.resolve = function (type) {
777
+ var _this = this;
775
778
  var resolved = this.resolved.get(type) || null;
776
779
  if (!resolved) {
777
780
  resolved = this.getAnnotation(type);
778
781
  if (resolved) {
779
- var override = this.overrides.get(type);
780
- if (override) {
781
- var overrider = new MetadataOverrider();
782
- resolved = overrider.overrideMetadata(this.type, resolved, override);
782
+ var overrides = this.overrides.get(type);
783
+ if (overrides) {
784
+ var overrider_1 = new MetadataOverrider();
785
+ overrides.forEach(function (override) {
786
+ resolved = overrider_1.overrideMetadata(_this.type, resolved, override);
787
+ });
783
788
  }
784
789
  }
785
790
  this.resolved.set(type, resolved);
@@ -872,6 +877,7 @@ var ComponentFixtureNoNgZone = new InjectionToken('ComponentFixtureNoNgZone');
872
877
  * found in the LICENSE file at https://angular.io/license
873
878
  */
874
879
  var _nextRootElementId = 0;
880
+ var EMPTY_ARRAY = [];
875
881
  /**
876
882
  * @description
877
883
  * Configures and initializes environment for unit testing and provides methods for
@@ -894,6 +900,8 @@ var TestBedRender3 = /** @class */ (function () {
894
900
  this._pipeOverrides = [];
895
901
  this._providerOverrides = [];
896
902
  this._rootProviderOverrides = [];
903
+ this._providerOverridesByToken = new Map();
904
+ this._templateOverrides = new Map();
897
905
  // test module configuration
898
906
  this._providers = [];
899
907
  this._declarations = [];
@@ -901,6 +909,7 @@ var TestBedRender3 = /** @class */ (function () {
901
909
  this._schemas = [];
902
910
  this._activeFixtures = [];
903
911
  this._moduleRef = null;
912
+ this._testModuleType = null;
904
913
  this._instantiated = false;
905
914
  }
906
915
  /**
@@ -976,7 +985,10 @@ var TestBedRender3 = /** @class */ (function () {
976
985
  return TestBedRender3;
977
986
  };
978
987
  TestBedRender3.prototype.overrideTemplateUsingTestingModule = function (component, template) {
979
- throw new Error('Render3TestBed.overrideTemplateUsingTestingModule is not implemented yet');
988
+ if (this._instantiated) {
989
+ throw new Error('Cannot override template when the test module has already been instantiated');
990
+ }
991
+ this._templateOverrides.set(component, template);
980
992
  };
981
993
  TestBedRender3.overrideProvider = function (token, provider) {
982
994
  _getTestBedRender3().overrideProvider(token, provider);
@@ -1035,12 +1047,15 @@ var TestBedRender3 = /** @class */ (function () {
1035
1047
  this._pipeOverrides = [];
1036
1048
  this._providerOverrides = [];
1037
1049
  this._rootProviderOverrides = [];
1050
+ this._providerOverridesByToken.clear();
1051
+ this._templateOverrides.clear();
1038
1052
  // reset test module config
1039
1053
  this._providers = [];
1040
1054
  this._declarations = [];
1041
1055
  this._imports = [];
1042
1056
  this._schemas = [];
1043
1057
  this._moduleRef = null;
1058
+ this._testModuleType = null;
1044
1059
  this._instantiated = false;
1045
1060
  this._activeFixtures.forEach(function (fixture) {
1046
1061
  try {
@@ -1119,16 +1134,18 @@ var TestBedRender3 = /** @class */ (function () {
1119
1134
  * Overwrites all providers for the given token with the given provider definition.
1120
1135
  */
1121
1136
  TestBedRender3.prototype.overrideProvider = function (token, provider) {
1137
+ var providerDef = provider.useFactory ?
1138
+ { provide: token, useFactory: provider.useFactory, deps: provider.deps || [] } :
1139
+ { provide: token, useValue: provider.useValue };
1122
1140
  var injectableDef;
1123
1141
  var isRoot = (typeof token !== 'string' && (injectableDef = ɵgetInjectableDef(token)) &&
1124
1142
  injectableDef.providedIn === 'root');
1125
- var overrides = isRoot ? this._rootProviderOverrides : this._providerOverrides;
1126
- if (provider.useFactory) {
1127
- overrides.push({ provide: token, useFactory: provider.useFactory, deps: provider.deps || [] });
1128
- }
1129
- else {
1130
- overrides.push({ provide: token, useValue: provider.useValue });
1131
- }
1143
+ var overridesBucket = isRoot ? this._rootProviderOverrides : this._providerOverrides;
1144
+ overridesBucket.push(providerDef);
1145
+ // keep all overrides grouped by token as well for fast lookups using token
1146
+ var overridesForToken = this._providerOverridesByToken.get(token) || [];
1147
+ overridesForToken.push(providerDef);
1148
+ this._providerOverridesByToken.set(token, overridesForToken);
1132
1149
  };
1133
1150
  TestBedRender3.prototype.deprecatedOverrideProvider = function (token, provider) {
1134
1151
  throw new Error('No implemented in IVY');
@@ -1161,15 +1178,22 @@ var TestBedRender3 = /** @class */ (function () {
1161
1178
  return;
1162
1179
  }
1163
1180
  var resolvers = this._getResolvers();
1164
- var testModuleType = this._createTestModule();
1165
- compileNgModule(testModuleType, resolvers);
1181
+ this._testModuleType = this._createTestModule();
1182
+ this._compileNgModule(this._testModuleType, resolvers);
1166
1183
  var parentInjector = this.platform.injector;
1167
- this._moduleRef = new ɵRender3NgModuleRef(testModuleType, parentInjector);
1184
+ this._moduleRef = new ɵRender3NgModuleRef(this._testModuleType, parentInjector);
1168
1185
  // ApplicationInitStatus.runInitializers() is marked @internal
1169
1186
  // to core. Cast it to any before accessing it.
1170
1187
  this._moduleRef.injector.get(ApplicationInitStatus).runInitializers();
1171
1188
  this._instantiated = true;
1172
1189
  };
1190
+ // get overrides for a specific provider (if any)
1191
+ TestBedRender3.prototype._getProviderOverrides = function (provider) {
1192
+ var token = typeof provider === 'object' && provider.hasOwnProperty('provide') ?
1193
+ provider.provide :
1194
+ provider;
1195
+ return this._providerOverridesByToken.get(token) || [];
1196
+ };
1173
1197
  // creates resolvers taking overrides into account
1174
1198
  TestBedRender3.prototype._getResolvers = function () {
1175
1199
  var module = new NgModuleResolver();
@@ -1216,128 +1240,155 @@ var TestBedRender3 = /** @class */ (function () {
1216
1240
  }());
1217
1241
  return DynamicTestModule;
1218
1242
  };
1243
+ TestBedRender3.prototype._getMetaWithOverrides = function (meta, type) {
1244
+ var _this = this;
1245
+ var overrides = {};
1246
+ if (meta.providers && meta.providers.length) {
1247
+ var providerOverrides = flatten(meta.providers, function (provider) { return _this._getProviderOverrides(provider); });
1248
+ if (providerOverrides.length) {
1249
+ overrides.providers = __spread(meta.providers, providerOverrides);
1250
+ }
1251
+ }
1252
+ var hasTemplateOverride = !!type && this._templateOverrides.has(type);
1253
+ if (hasTemplateOverride) {
1254
+ overrides.template = this._templateOverrides.get(type);
1255
+ }
1256
+ return Object.keys(overrides).length ? __assign({}, meta, overrides) : meta;
1257
+ };
1258
+ TestBedRender3.prototype._compileNgModule = function (moduleType, resolvers) {
1259
+ var _this = this;
1260
+ var ngModule = resolvers.module.resolve(moduleType);
1261
+ if (ngModule === null) {
1262
+ throw new Error(ɵstringify(moduleType) + " has not @NgModule annotation");
1263
+ }
1264
+ var metadata = this._getMetaWithOverrides(ngModule);
1265
+ ɵcompileNgModuleDefs(moduleType, metadata);
1266
+ var declarations = flatten(ngModule.declarations || EMPTY_ARRAY, resolveForwardRef);
1267
+ var compiledComponents = [];
1268
+ // Compile the components, directives and pipes declared by this module
1269
+ declarations.forEach(function (declaration) {
1270
+ var component = resolvers.component.resolve(declaration);
1271
+ if (component) {
1272
+ var metadata_1 = _this._getMetaWithOverrides(component, declaration);
1273
+ ɵcompileComponent(declaration, metadata_1);
1274
+ compiledComponents.push(declaration);
1275
+ return;
1276
+ }
1277
+ var directive = resolvers.directive.resolve(declaration);
1278
+ if (directive) {
1279
+ var metadata_2 = _this._getMetaWithOverrides(directive);
1280
+ ɵcompileDirective(declaration, metadata_2);
1281
+ return;
1282
+ }
1283
+ var pipe = resolvers.pipe.resolve(declaration);
1284
+ if (pipe) {
1285
+ ɵcompilePipe(declaration, pipe);
1286
+ return;
1287
+ }
1288
+ });
1289
+ // Compile transitive modules, components, directives and pipes
1290
+ var transitiveScope = this._transitiveScopesFor(moduleType, resolvers);
1291
+ compiledComponents.forEach(function (cmp) {
1292
+ var scope = _this._templateOverrides.has(cmp) ?
1293
+ // if we have template override via `TestBed.overrideTemplateUsingTestingModule` -
1294
+ // define Component scope as TestingModule scope, instead of the scope of NgModule
1295
+ // where this Component was declared
1296
+ _this._transitiveScopesFor(_this._testModuleType, resolvers) :
1297
+ transitiveScope;
1298
+ ɵpatchComponentDefWithScope(cmp.ngComponentDef, scope);
1299
+ });
1300
+ };
1301
+ /**
1302
+ * Compute the pair of transitive scopes (compilation scope and exported scope) for a given
1303
+ * module.
1304
+ *
1305
+ * This operation is memoized and the result is cached on the module's definition. It can be
1306
+ * called on modules with components that have not fully compiled yet, but the result should not
1307
+ * be used until they have.
1308
+ */
1309
+ TestBedRender3.prototype._transitiveScopesFor = function (moduleType, resolvers) {
1310
+ var _this = this;
1311
+ if (!isNgModule(moduleType)) {
1312
+ throw new Error(moduleType.name + " does not have an ngModuleDef");
1313
+ }
1314
+ var def = moduleType.ngModuleDef;
1315
+ if (def.transitiveCompileScopes !== null) {
1316
+ return def.transitiveCompileScopes;
1317
+ }
1318
+ var scopes = {
1319
+ compilation: {
1320
+ directives: new Set(),
1321
+ pipes: new Set(),
1322
+ },
1323
+ exported: {
1324
+ directives: new Set(),
1325
+ pipes: new Set(),
1326
+ },
1327
+ };
1328
+ def.declarations.forEach(function (declared) {
1329
+ var declaredWithDefs = declared;
1330
+ if (declaredWithDefs.ngPipeDef !== undefined) {
1331
+ scopes.compilation.pipes.add(declared);
1332
+ }
1333
+ else {
1334
+ scopes.compilation.directives.add(declared);
1335
+ }
1336
+ });
1337
+ def.imports.forEach(function (imported) {
1338
+ var ngModule = resolvers.module.resolve(imported);
1339
+ if (ngModule === null) {
1340
+ throw new Error("Importing " + imported.name + " which does not have an @ngModule");
1341
+ }
1342
+ else {
1343
+ _this._compileNgModule(imported, resolvers);
1344
+ }
1345
+ // When this module imports another, the imported module's exported directives and pipes are
1346
+ // added to the compilation scope of this module.
1347
+ var importedScope = _this._transitiveScopesFor(imported, resolvers);
1348
+ importedScope.exported.directives.forEach(function (entry) { return scopes.compilation.directives.add(entry); });
1349
+ importedScope.exported.pipes.forEach(function (entry) { return scopes.compilation.pipes.add(entry); });
1350
+ });
1351
+ def.exports.forEach(function (exported) {
1352
+ var exportedTyped = exported;
1353
+ // Either the type is a module, a pipe, or a component/directive (which may not have an
1354
+ // ngComponentDef as it might be compiled asynchronously).
1355
+ if (isNgModule(exportedTyped)) {
1356
+ // When this module exports another, the exported module's exported directives and pipes are
1357
+ // added to both the compilation and exported scopes of this module.
1358
+ var exportedScope = _this._transitiveScopesFor(exportedTyped, resolvers);
1359
+ exportedScope.exported.directives.forEach(function (entry) {
1360
+ scopes.compilation.directives.add(entry);
1361
+ scopes.exported.directives.add(entry);
1362
+ });
1363
+ exportedScope.exported.pipes.forEach(function (entry) {
1364
+ scopes.compilation.pipes.add(entry);
1365
+ scopes.exported.pipes.add(entry);
1366
+ });
1367
+ }
1368
+ else if (exportedTyped.ngPipeDef !== undefined) {
1369
+ scopes.exported.pipes.add(exportedTyped);
1370
+ }
1371
+ else {
1372
+ scopes.exported.directives.add(exportedTyped);
1373
+ }
1374
+ });
1375
+ def.transitiveCompileScopes = scopes;
1376
+ return scopes;
1377
+ };
1219
1378
  return TestBedRender3;
1220
1379
  }());
1221
1380
  var testBed;
1222
1381
  function _getTestBedRender3() {
1223
1382
  return testBed = testBed || new TestBedRender3();
1224
1383
  }
1225
- // Module compiler
1226
- var EMPTY_ARRAY = [];
1227
- function compileNgModule(moduleType, resolvers) {
1228
- var ngModule = resolvers.module.resolve(moduleType);
1229
- if (ngModule === null) {
1230
- throw new Error(ɵstringify(moduleType) + " has not @NgModule annotation");
1231
- }
1232
- ɵcompileNgModuleDefs(moduleType, ngModule);
1233
- var declarations = flatten(ngModule.declarations || EMPTY_ARRAY);
1234
- var compiledComponents = [];
1235
- // Compile the components, directives and pipes declared by this module
1236
- declarations.forEach(function (declaration) {
1237
- var component = resolvers.component.resolve(declaration);
1238
- if (component) {
1239
- ɵcompileComponent(declaration, component);
1240
- compiledComponents.push(declaration);
1241
- return;
1242
- }
1243
- var directive = resolvers.directive.resolve(declaration);
1244
- if (directive) {
1245
- ɵcompileDirective(declaration, directive);
1246
- return;
1247
- }
1248
- var pipe = resolvers.pipe.resolve(declaration);
1249
- if (pipe) {
1250
- ɵcompilePipe(declaration, pipe);
1251
- return;
1252
- }
1253
- });
1254
- // Compile transitive modules, components, directives and pipes
1255
- var transitiveScope = transitiveScopesFor(moduleType, resolvers);
1256
- compiledComponents.forEach(function (cmp) { return ɵpatchComponentDefWithScope(cmp.ngComponentDef, transitiveScope); });
1257
- }
1258
- /**
1259
- * Compute the pair of transitive scopes (compilation scope and exported scope) for a given module.
1260
- *
1261
- * This operation is memoized and the result is cached on the module's definition. It can be called
1262
- * on modules with components that have not fully compiled yet, but the result should not be used
1263
- * until they have.
1264
- */
1265
- function transitiveScopesFor(moduleType, resolvers) {
1266
- if (!isNgModule(moduleType)) {
1267
- throw new Error(moduleType.name + " does not have an ngModuleDef");
1268
- }
1269
- var def = moduleType.ngModuleDef;
1270
- if (def.transitiveCompileScopes !== null) {
1271
- return def.transitiveCompileScopes;
1272
- }
1273
- var scopes = {
1274
- compilation: {
1275
- directives: new Set(),
1276
- pipes: new Set(),
1277
- },
1278
- exported: {
1279
- directives: new Set(),
1280
- pipes: new Set(),
1281
- },
1282
- };
1283
- def.declarations.forEach(function (declared) {
1284
- var declaredWithDefs = declared;
1285
- if (declaredWithDefs.ngPipeDef !== undefined) {
1286
- scopes.compilation.pipes.add(declared);
1287
- }
1288
- else {
1289
- scopes.compilation.directives.add(declared);
1290
- }
1291
- });
1292
- def.imports.forEach(function (imported) {
1293
- var ngModule = resolvers.module.resolve(imported);
1294
- if (ngModule === null) {
1295
- throw new Error("Importing " + imported.name + " which does not have an @ngModule");
1296
- }
1297
- else {
1298
- compileNgModule(imported, resolvers);
1299
- }
1300
- // When this module imports another, the imported module's exported directives and pipes are
1301
- // added to the compilation scope of this module.
1302
- var importedScope = transitiveScopesFor(imported, resolvers);
1303
- importedScope.exported.directives.forEach(function (entry) { return scopes.compilation.directives.add(entry); });
1304
- importedScope.exported.pipes.forEach(function (entry) { return scopes.compilation.pipes.add(entry); });
1305
- });
1306
- def.exports.forEach(function (exported) {
1307
- var exportedTyped = exported;
1308
- // Either the type is a module, a pipe, or a component/directive (which may not have an
1309
- // ngComponentDef as it might be compiled asynchronously).
1310
- if (isNgModule(exportedTyped)) {
1311
- // When this module exports another, the exported module's exported directives and pipes are
1312
- // added to both the compilation and exported scopes of this module.
1313
- var exportedScope = transitiveScopesFor(exportedTyped, resolvers);
1314
- exportedScope.exported.directives.forEach(function (entry) {
1315
- scopes.compilation.directives.add(entry);
1316
- scopes.exported.directives.add(entry);
1317
- });
1318
- exportedScope.exported.pipes.forEach(function (entry) {
1319
- scopes.compilation.pipes.add(entry);
1320
- scopes.exported.pipes.add(entry);
1321
- });
1322
- }
1323
- else if (exportedTyped.ngPipeDef !== undefined) {
1324
- scopes.exported.pipes.add(exportedTyped);
1325
- }
1326
- else {
1327
- scopes.exported.directives.add(exportedTyped);
1328
- }
1329
- });
1330
- def.transitiveCompileScopes = scopes;
1331
- return scopes;
1332
- }
1333
- function flatten(values) {
1384
+ function flatten(values, mapFn) {
1334
1385
  var out = [];
1335
1386
  values.forEach(function (value) {
1336
1387
  if (Array.isArray(value)) {
1337
- out.push.apply(out, __spread(flatten(value)));
1388
+ out.push.apply(out, __spread(flatten(value, mapFn)));
1338
1389
  }
1339
1390
  else {
1340
- out.push(value);
1391
+ out.push(mapFn ? mapFn(value) : value);
1341
1392
  }
1342
1393
  });
1343
1394
  return out;