@angular/core 8.1.0-next.2 → 8.1.1

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 (104) hide show
  1. package/bundles/core-testing.umd.js +1 -1
  2. package/bundles/core-testing.umd.js.map +1 -1
  3. package/bundles/core-testing.umd.min.js +1 -1
  4. package/bundles/core-testing.umd.min.js.map +1 -1
  5. package/bundles/core.umd.js +394 -279
  6. package/bundles/core.umd.js.map +1 -1
  7. package/bundles/core.umd.min.js +101 -101
  8. package/bundles/core.umd.min.js.map +1 -1
  9. package/core.d.ts +221 -234
  10. package/core.metadata.json +1 -1
  11. package/esm2015/index.js +2 -2
  12. package/esm2015/public_api.js +2 -2
  13. package/esm2015/src/change_detection/pipe_transform.js +4 -6
  14. package/esm2015/src/core.js +2 -2
  15. package/esm2015/src/core_render3_private_export.js +2 -2
  16. package/esm2015/src/di/index.js +1 -1
  17. package/esm2015/src/di/injectable.js +1 -1
  18. package/esm2015/src/di/interface/provider.js +1 -1
  19. package/esm2015/src/di/metadata.js +1 -1
  20. package/esm2015/src/event_emitter.js +3 -10
  21. package/esm2015/src/linker/component_factory.js +9 -3
  22. package/esm2015/src/linker/component_factory_resolver.js +9 -2
  23. package/esm2015/src/metadata/di.js +1 -1
  24. package/esm2015/src/metadata/directives.js +4 -3
  25. package/esm2015/src/reflection/reflection_capabilities.js +2 -2
  26. package/esm2015/src/render3/component.js +6 -2
  27. package/esm2015/src/render3/component_ref.js +18 -13
  28. package/esm2015/src/render3/di.js +4 -6
  29. package/esm2015/src/render3/features/providers_feature.js +6 -3
  30. package/esm2015/src/render3/i18n.js +20 -13
  31. package/esm2015/src/render3/index.js +2 -2
  32. package/esm2015/src/render3/instructions/all.js +2 -2
  33. package/esm2015/src/render3/instructions/attribute.js +5 -4
  34. package/esm2015/src/render3/instructions/embedded_view.js +5 -2
  35. package/esm2015/src/render3/instructions/property.js +9 -8
  36. package/esm2015/src/render3/instructions/shared.js +36 -5
  37. package/esm2015/src/render3/instructions/text.js +15 -20
  38. package/esm2015/src/render3/instructions/text_interpolation.js +67 -12
  39. package/esm2015/src/render3/interfaces/container.js +6 -2
  40. package/esm2015/src/render3/interfaces/i18n.js +1 -17
  41. package/esm2015/src/render3/interfaces/node.js +2 -2
  42. package/esm2015/src/render3/interfaces/view.js +2 -2
  43. package/esm2015/src/render3/jit/environment.js +1 -2
  44. package/esm2015/src/render3/node_manipulation.js +235 -197
  45. package/esm2015/src/render3/query.js +12 -8
  46. package/esm2015/src/render3/state.js +6 -3
  47. package/esm2015/src/render3/util/misc_utils.js +1 -1
  48. package/esm2015/src/render3/util/view_traversal_utils.js +7 -2
  49. package/esm2015/src/render3/view_engine_compatibility.js +39 -12
  50. package/esm2015/src/util/assert.js +3 -2
  51. package/esm2015/src/util/decorators.js +1 -1
  52. package/esm2015/src/version.js +1 -1
  53. package/esm2015/testing/src/test_bed_common.js +5 -2
  54. package/esm5/src/change_detection/pipe_transform.js +1 -1
  55. package/esm5/src/core_render3_private_export.js +2 -2
  56. package/esm5/src/di/index.js +1 -1
  57. package/esm5/src/di/injectable.js +1 -1
  58. package/esm5/src/di/interface/provider.js +1 -1
  59. package/esm5/src/di/metadata.js +1 -1
  60. package/esm5/src/event_emitter.js +3 -10
  61. package/esm5/src/linker/component_factory.js +7 -1
  62. package/esm5/src/linker/component_factory_resolver.js +7 -1
  63. package/esm5/src/metadata/di.js +1 -1
  64. package/esm5/src/metadata/directives.js +4 -3
  65. package/esm5/src/reflection/reflection_capabilities.js +2 -2
  66. package/esm5/src/render3/component.js +5 -2
  67. package/esm5/src/render3/component_ref.js +13 -9
  68. package/esm5/src/render3/di.js +4 -5
  69. package/esm5/src/render3/features/providers_feature.js +6 -3
  70. package/esm5/src/render3/i18n.js +15 -10
  71. package/esm5/src/render3/index.js +2 -2
  72. package/esm5/src/render3/instructions/attribute.js +5 -4
  73. package/esm5/src/render3/instructions/embedded_view.js +5 -2
  74. package/esm5/src/render3/instructions/property.js +7 -7
  75. package/esm5/src/render3/instructions/shared.js +27 -5
  76. package/esm5/src/render3/instructions/text.js +12 -17
  77. package/esm5/src/render3/instructions/text_interpolation.js +49 -12
  78. package/esm5/src/render3/interfaces/container.js +3 -2
  79. package/esm5/src/render3/interfaces/i18n.js +1 -1
  80. package/esm5/src/render3/interfaces/node.js +1 -1
  81. package/esm5/src/render3/interfaces/view.js +1 -1
  82. package/esm5/src/render3/jit/environment.js +1 -2
  83. package/esm5/src/render3/node_manipulation.js +200 -192
  84. package/esm5/src/render3/query.js +10 -8
  85. package/esm5/src/render3/state.js +6 -3
  86. package/esm5/src/render3/util/misc_utils.js +1 -1
  87. package/esm5/src/render3/util/view_traversal_utils.js +7 -2
  88. package/esm5/src/render3/view_engine_compatibility.js +32 -12
  89. package/esm5/src/util/assert.js +3 -2
  90. package/esm5/src/util/decorators.js +1 -1
  91. package/esm5/src/version.js +1 -1
  92. package/esm5/testing/src/test_bed_common.js +1 -1
  93. package/fesm2015/core.js +483 -296
  94. package/fesm2015/core.js.map +1 -1
  95. package/fesm2015/testing.js +1 -1
  96. package/fesm2015/testing.js.map +1 -1
  97. package/fesm5/core.js +395 -279
  98. package/fesm5/core.js.map +1 -1
  99. package/fesm5/testing.js +1 -1
  100. package/fesm5/testing.js.map +1 -1
  101. package/package.json +1 -1
  102. package/src/r3_symbols.d.ts +73 -90
  103. package/testing/testing.d.ts +5 -2
  104. package/testing.d.ts +1 -1
package/fesm5/core.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v8.1.0-next.2
2
+ * @license Angular v8.1.1
3
3
  * (c) 2010-2019 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -862,7 +862,7 @@ var ReflectionCapabilities = /** @class */ (function () {
862
862
  if (typeof paramTypes === 'undefined') {
863
863
  result[i] = [];
864
864
  }
865
- else if (paramTypes[i] != Object) {
865
+ else if (paramTypes[i] && paramTypes[i] != Object) {
866
866
  result[i] = [paramTypes[i]];
867
867
  }
868
868
  else {
@@ -3940,7 +3940,7 @@ function throwError(msg) {
3940
3940
  function assertDomNode(node) {
3941
3941
  // If we're in a worker, `Node` will not be defined.
3942
3942
  assertEqual((typeof Node !== 'undefined' && node instanceof Node) ||
3943
- (typeof node === 'object' && node.constructor.name === 'WebWorkerRenderNode'), true, 'The provided value must be an instance of a DOM Node');
3943
+ (typeof node === 'object' && node.constructor.name === 'WebWorkerRenderNode'), true, "The provided value must be an instance of a DOM Node but got " + stringify(node));
3944
3944
  }
3945
3945
  function assertDataInRange(arr, index) {
3946
3946
  var maxLen = arr ? arr.length : 0;
@@ -3969,13 +3969,14 @@ var ACTIVE_INDEX = 2;
3969
3969
  // PARENT, NEXT, QUERIES and T_HOST are indices 3, 4, 5 and 6.
3970
3970
  // As we already have these constants in LView, we don't need to re-create them.
3971
3971
  var NATIVE = 7;
3972
+ var VIEW_REFS = 8;
3972
3973
  /**
3973
3974
  * Size of LContainer's header. Represents the index after which all views in the
3974
3975
  * container will be inserted. We need to keep a record of current views so we know
3975
3976
  * which views are already in the DOM (and don't need to be re-added) and so we can
3976
3977
  * remove views from the DOM when they are no longer required.
3977
3978
  */
3978
- var CONTAINER_HEADER_OFFSET = 8;
3979
+ var CONTAINER_HEADER_OFFSET = 9;
3979
3980
 
3980
3981
  /**
3981
3982
  * @license
@@ -4828,8 +4829,11 @@ function resetComponentState() {
4828
4829
  * the direction of traversal (up or down the view tree) a bit clearer.
4829
4830
  *
4830
4831
  * @param newView New state to become active
4832
+ * @param safeToRunHooks Whether the runtime is in a state where running lifecycle hooks is valid.
4833
+ * This is not always the case (for example, the application may have crashed and `leaveView` is
4834
+ * being executed while unwinding the call stack).
4831
4835
  */
4832
- function leaveView(newView) {
4836
+ function leaveView(newView, safeToRunHooks) {
4833
4837
  var tView = lView[TVIEW];
4834
4838
  if (isCreationMode(lView)) {
4835
4839
  lView[FLAGS] &= ~4 /* CreationMode */;
@@ -4837,7 +4841,7 @@ function leaveView(newView) {
4837
4841
  else {
4838
4842
  try {
4839
4843
  resetPreOrderHookFlags(lView);
4840
- executeHooks(lView, tView.viewHooks, tView.viewCheckHooks, checkNoChangesMode, 2 /* AfterViewInitHooksToBeRun */, undefined);
4844
+ safeToRunHooks && executeHooks(lView, tView.viewHooks, tView.viewCheckHooks, checkNoChangesMode, 2 /* AfterViewInitHooksToBeRun */, undefined);
4841
4845
  }
4842
4846
  finally {
4843
4847
  // Views are clean and in update mode after being checked, so these bits are cleared
@@ -6724,7 +6728,12 @@ function getRootView(componentOrLView) {
6724
6728
  return lView;
6725
6729
  }
6726
6730
  /**
6727
- * Given a current view, finds the nearest component's host (LElement).
6731
+ * Given an `LView`, find the closest declaration view which is not an embedded view.
6732
+ *
6733
+ * This method searches for the `LView` associated with the component which declared the `LView`.
6734
+ *
6735
+ * This function may return itself if the `LView` passed in is not an embedded `LView`. Otherwise
6736
+ * it walks the declaration parents until it finds a component view (non-embedded-view.)
6728
6737
  *
6729
6738
  * @param lView LView for which we want a host element node
6730
6739
  * @returns The host node
@@ -7175,7 +7184,7 @@ function searchTokensOnInjector(injectorIndex, lView, token, previousTView, flag
7175
7184
  // This special case happens when there is a @host on the inject and when we are searching
7176
7185
  // on the host element node.
7177
7186
  var isHostSpecialCase = (flags & InjectFlags.Host) && hostTElementNode === tNode;
7178
- var injectableIdx = locateDirectiveOrProvider(tNode, lView, token, canAccessViewProviders, isHostSpecialCase);
7187
+ var injectableIdx = locateDirectiveOrProvider(tNode, currentTView, token, canAccessViewProviders, isHostSpecialCase);
7179
7188
  if (injectableIdx !== null) {
7180
7189
  return getNodeInjectable(currentTView.data, lView, injectableIdx, tNode);
7181
7190
  }
@@ -7187,14 +7196,13 @@ function searchTokensOnInjector(injectorIndex, lView, token, previousTView, flag
7187
7196
  * Searches for the given token among the node's directives and providers.
7188
7197
  *
7189
7198
  * @param tNode TNode on which directives are present.
7190
- * @param lView The view we are currently processing
7199
+ * @param tView The tView we are currently processing
7191
7200
  * @param token Provider token or type of a directive to look for.
7192
7201
  * @param canAccessViewProviders Whether view providers should be considered.
7193
7202
  * @param isHostSpecialCase Whether the host special case applies.
7194
7203
  * @returns Index of a found directive or provider, or null when none found.
7195
7204
  */
7196
- function locateDirectiveOrProvider(tNode, lView, token, canAccessViewProviders, isHostSpecialCase) {
7197
- var tView = lView[TVIEW];
7205
+ function locateDirectiveOrProvider(tNode, tView, token, canAccessViewProviders, isHostSpecialCase) {
7198
7206
  var nodeProviderIndexes = tNode.providerIndexes;
7199
7207
  var tInjectables = tView.data;
7200
7208
  var injectablesStart = nodeProviderIndexes & 65535 /* ProvidersStartIndexMask */;
@@ -11407,6 +11415,8 @@ function renderEmbeddedTemplate(viewToRender, tView, context) {
11407
11415
  tickRootContext(getRootContext(viewToRender));
11408
11416
  }
11409
11417
  else {
11418
+ // Will become true if the `try` block executes with no errors.
11419
+ var safeToRunHooks = false;
11410
11420
  try {
11411
11421
  setPreviousOrParentTNode(null, true);
11412
11422
  oldView = enterView(viewToRender, viewToRender[T_HOST]);
@@ -11418,9 +11428,10 @@ function renderEmbeddedTemplate(viewToRender, tView, context) {
11418
11428
  // matching, etc again and again.
11419
11429
  viewToRender[TVIEW].firstTemplatePass = false;
11420
11430
  refreshDescendantViews(viewToRender);
11431
+ safeToRunHooks = true;
11421
11432
  }
11422
11433
  finally {
11423
- leaveView(oldView);
11434
+ leaveView(oldView, safeToRunHooks);
11424
11435
  setPreviousOrParentTNode(_previousOrParentTNode, _isParent);
11425
11436
  }
11426
11437
  }
@@ -11430,6 +11441,8 @@ function renderComponentOrTemplate(hostView, context, templateFn) {
11430
11441
  var oldView = enterView(hostView, hostView[T_HOST]);
11431
11442
  var normalExecutionPath = !getCheckNoChangesMode();
11432
11443
  var creationModeIsActive = isCreationMode(hostView);
11444
+ // Will become true if the `try` block executes with no errors.
11445
+ var safeToRunHooks = false;
11433
11446
  try {
11434
11447
  if (normalExecutionPath && !creationModeIsActive && rendererFactory.begin) {
11435
11448
  rendererFactory.begin();
@@ -11444,12 +11457,13 @@ function renderComponentOrTemplate(hostView, context, templateFn) {
11444
11457
  resetPreOrderHookFlags(hostView);
11445
11458
  templateFn && executeTemplate(hostView, templateFn, 2 /* Update */, context);
11446
11459
  refreshDescendantViews(hostView);
11460
+ safeToRunHooks = true;
11447
11461
  }
11448
11462
  finally {
11449
11463
  if (normalExecutionPath && !creationModeIsActive && rendererFactory.end) {
11450
11464
  rendererFactory.end();
11451
11465
  }
11452
- leaveView(oldView);
11466
+ leaveView(oldView, safeToRunHooks);
11453
11467
  }
11454
11468
  }
11455
11469
  function executeTemplate(lView, templateFn, rf, context) {
@@ -12324,7 +12338,8 @@ function createLContainer(hostNative, currentView, native, tNode, isForViewConta
12324
12338
  null, // next
12325
12339
  null, // queries
12326
12340
  tNode, // t_host
12327
- native);
12341
+ native, // native,
12342
+ null);
12328
12343
  ngDevMode && attachLContainerDebug(lContainer);
12329
12344
  return lContainer;
12330
12345
  }
@@ -12556,6 +12571,8 @@ function checkView(hostView, component) {
12556
12571
  var oldView = enterView(hostView, hostView[T_HOST]);
12557
12572
  var templateFn = hostTView.template;
12558
12573
  var creationMode = isCreationMode(hostView);
12574
+ // Will become true if the `try` block executes with no errors.
12575
+ var safeToRunHooks = false;
12559
12576
  try {
12560
12577
  resetPreOrderHookFlags(hostView);
12561
12578
  creationMode && executeViewQueryFn(1 /* Create */, hostTView, component);
@@ -12565,9 +12582,10 @@ function checkView(hostView, component) {
12565
12582
  if (!creationMode || hostTView.staticViewQueries) {
12566
12583
  executeViewQueryFn(2 /* Update */, hostTView, component);
12567
12584
  }
12585
+ safeToRunHooks = true;
12568
12586
  }
12569
12587
  finally {
12570
- leaveView(oldView);
12588
+ leaveView(oldView, safeToRunHooks);
12571
12589
  }
12572
12590
  }
12573
12591
  function executeViewQueryFn(flags, tView, component) {
@@ -12661,6 +12679,18 @@ function setInputsForProperty(lView, inputs, value) {
12661
12679
  }
12662
12680
  }
12663
12681
  }
12682
+ /**
12683
+ * Updates a text binding at a given index in a given LView.
12684
+ */
12685
+ function textBindingInternal(lView, index, value) {
12686
+ ngDevMode && assertNotSame(value, NO_CHANGE, 'value should not be NO_CHANGE');
12687
+ ngDevMode && assertDataInRange(lView, index + HEADER_OFFSET);
12688
+ var element = getNativeByIndex(index, lView);
12689
+ ngDevMode && assertDefined(element, 'native element should exist');
12690
+ ngDevMode && ngDevMode.rendererSetText++;
12691
+ var renderer = lView[RENDERER];
12692
+ isProceduralRenderer(renderer) ? renderer.setValue(element, value) : element.textContent = value;
12693
+ }
12664
12694
 
12665
12695
  /**
12666
12696
  * @license
@@ -13005,7 +13035,8 @@ function bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {
13005
13035
  function ɵɵproperty(propName, value, sanitizer, nativeOnly) {
13006
13036
  var index = getSelectedIndex();
13007
13037
  ngDevMode && assertNotEqual(index, -1, 'selected index cannot be -1');
13008
- var bindReconciledValue = ɵɵbind(value);
13038
+ var lView = getLView();
13039
+ var bindReconciledValue = bind(lView, value);
13009
13040
  if (bindReconciledValue !== NO_CHANGE) {
13010
13041
  elementPropertyInternal(index, propName, bindReconciledValue, sanitizer, nativeOnly);
13011
13042
  }
@@ -13014,12 +13045,10 @@ function ɵɵproperty(propName, value, sanitizer, nativeOnly) {
13014
13045
  /**
13015
13046
  * Creates a single value binding.
13016
13047
  *
13048
+ * @param lView Current view
13017
13049
  * @param value Value to diff
13018
- *
13019
- * @codeGenApi
13020
13050
  */
13021
- function ɵɵbind(value) {
13022
- var lView = getLView();
13051
+ function bind(lView, value) {
13023
13052
  var bindingIndex = lView[BINDING_INDEX]++;
13024
13053
  storeBindingMetadata(lView);
13025
13054
  return bindingUpdated(lView, bindingIndex, value) ? value : NO_CHANGE;
@@ -13049,8 +13078,9 @@ function ɵɵbind(value) {
13049
13078
  */
13050
13079
  function ɵɵupdateSyntheticHostBinding(propName, value, sanitizer, nativeOnly) {
13051
13080
  var index = getSelectedIndex();
13081
+ var lView = getLView();
13052
13082
  // TODO(benlesh): remove bind call here.
13053
- var bound = ɵɵbind(value);
13083
+ var bound = bind(lView, value);
13054
13084
  if (bound !== NO_CHANGE) {
13055
13085
  elementPropertyInternal(index, propName, bound, sanitizer, nativeOnly, loadComponentRenderer);
13056
13086
  }
@@ -13073,10 +13103,11 @@ function ɵɵattribute(name, value, sanitizer, namespace) {
13073
13103
  var index = getSelectedIndex();
13074
13104
  var lView = getLView();
13075
13105
  // TODO(FW-1340): Refactor to remove the use of other instructions here.
13076
- var bound = ɵɵbind(value);
13106
+ var bound = bind(lView, value);
13077
13107
  if (bound !== NO_CHANGE) {
13078
- return elementAttributeInternal(index, name, bound, lView, sanitizer, namespace);
13108
+ elementAttributeInternal(index, name, bound, lView, sanitizer, namespace);
13079
13109
  }
13110
+ return ɵɵattribute;
13080
13111
  }
13081
13112
 
13082
13113
  /**
@@ -13762,193 +13793,52 @@ function getContainerRenderParent(tViewNode, view) {
13762
13793
  var container = getLContainer(tViewNode, view);
13763
13794
  return container ? nativeParentNode(view[RENDERER], container[NATIVE]) : null;
13764
13795
  }
13765
- /**
13766
- * Stack used to keep track of projection nodes in walkTNodeTree.
13767
- *
13768
- * This is deliberately created outside of walkTNodeTree to avoid allocating
13769
- * a new array each time the function is called. Instead the array will be
13770
- * re-used by each invocation. This works because the function is not reentrant.
13771
- */
13772
- var projectionNodeStack = [];
13773
- /**
13774
- * Walks a tree of TNodes, applying a transformation on the element nodes, either only on the first
13775
- * one found, or on all of them.
13776
- *
13777
- * @param viewToWalk the view to walk
13778
- * @param action identifies the action to be performed on the elements
13779
- * @param renderer the current renderer.
13780
- * @param renderParent Optional the render parent node to be set in all LContainers found,
13781
- * required for action modes Insert and Destroy.
13782
- * @param beforeNode Optional the node before which elements should be added, required for action
13783
- * Insert.
13784
- */
13785
- function walkTNodeTree(viewToWalk, action, renderer, renderParent, beforeNode) {
13786
- var e_1, _a;
13787
- var rootTNode = viewToWalk[TVIEW].node;
13788
- var projectionNodeIndex = -1;
13789
- var currentView = viewToWalk;
13790
- var tNode = rootTNode.child;
13791
- while (tNode) {
13792
- var nextTNode = null;
13793
- if (tNode.type === 3 /* Element */ || tNode.type === 4 /* ElementContainer */) {
13794
- executeNodeAction(action, renderer, renderParent, getNativeByTNode(tNode, currentView), tNode, beforeNode);
13795
- var nodeOrContainer = currentView[tNode.index];
13796
- if (isLContainer(nodeOrContainer)) {
13797
- // This element has an LContainer, and its comment needs to be handled
13798
- executeNodeAction(action, renderer, renderParent, nodeOrContainer[NATIVE], tNode, beforeNode);
13799
- var firstView = nodeOrContainer[CONTAINER_HEADER_OFFSET];
13800
- if (firstView) {
13801
- currentView = firstView;
13802
- nextTNode = currentView[TVIEW].node;
13803
- // When the walker enters a container, then the beforeNode has to become the local native
13804
- // comment node.
13805
- beforeNode = nodeOrContainer[NATIVE];
13806
- }
13807
- }
13808
- }
13809
- else if (tNode.type === 0 /* Container */) {
13810
- var lContainer = currentView[tNode.index];
13811
- executeNodeAction(action, renderer, renderParent, lContainer[NATIVE], tNode, beforeNode);
13812
- var firstView = lContainer[CONTAINER_HEADER_OFFSET];
13813
- if (firstView) {
13814
- currentView = firstView;
13815
- nextTNode = currentView[TVIEW].node;
13816
- // When the walker enters a container, then the beforeNode has to become the local native
13817
- // comment node.
13818
- beforeNode = lContainer[NATIVE];
13819
- }
13820
- }
13821
- else if (tNode.type === 1 /* Projection */) {
13822
- var componentView = findComponentView(currentView);
13823
- var componentHost = componentView[T_HOST];
13824
- var head = componentHost.projection[tNode.projection];
13825
- if (Array.isArray(head)) {
13826
- try {
13827
- for (var head_1 = __values(head), head_1_1 = head_1.next(); !head_1_1.done; head_1_1 = head_1.next()) {
13828
- var nativeNode = head_1_1.value;
13829
- executeNodeAction(action, renderer, renderParent, nativeNode, tNode, beforeNode);
13830
- }
13831
- }
13832
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
13833
- finally {
13834
- try {
13835
- if (head_1_1 && !head_1_1.done && (_a = head_1.return)) _a.call(head_1);
13836
- }
13837
- finally { if (e_1) throw e_1.error; }
13838
- }
13839
- }
13840
- else {
13841
- // Must store both the TNode and the view because this projection node could be nested
13842
- // deeply inside embedded views, and we need to get back down to this particular nested
13843
- // view.
13844
- projectionNodeStack[++projectionNodeIndex] = tNode;
13845
- projectionNodeStack[++projectionNodeIndex] = currentView;
13846
- if (head) {
13847
- currentView = componentView[PARENT];
13848
- nextTNode = currentView[TVIEW].data[head.index];
13849
- }
13850
- }
13851
- }
13852
- else {
13853
- // Otherwise, this is a View
13854
- nextTNode = tNode.child;
13855
- }
13856
- if (nextTNode === null) {
13857
- // this last node was projected, we need to get back down to its projection node
13858
- if (tNode.projectionNext === null && (tNode.flags & 2 /* isProjected */)) {
13859
- currentView = projectionNodeStack[projectionNodeIndex--];
13860
- tNode = projectionNodeStack[projectionNodeIndex--];
13861
- }
13862
- if (tNode.flags & 2 /* isProjected */) {
13863
- nextTNode = tNode.projectionNext;
13864
- }
13865
- else if (tNode.type === 4 /* ElementContainer */) {
13866
- nextTNode = tNode.child || tNode.next;
13867
- }
13868
- else {
13869
- nextTNode = tNode.next;
13870
- }
13871
- /**
13872
- * Find the next node in the TNode tree, taking into account the place where a node is
13873
- * projected (in the shadow DOM) rather than where it comes from (in the light DOM).
13874
- *
13875
- * If there is no sibling node, then it goes to the next sibling of the parent node...
13876
- * until it reaches rootNode (at which point null is returned).
13877
- */
13878
- while (!nextTNode) {
13879
- // If parent is null, we're crossing the view boundary, so we should get the host TNode.
13880
- tNode = tNode.parent || currentView[T_HOST];
13881
- if (tNode === null || tNode === rootTNode)
13882
- return;
13883
- // When exiting a container, the beforeNode must be restored to the previous value
13884
- if (tNode.type === 0 /* Container */) {
13885
- currentView = getLViewParent(currentView);
13886
- beforeNode = currentView[tNode.index][NATIVE];
13887
- }
13888
- if (tNode.type === 2 /* View */) {
13889
- /**
13890
- * If current lView doesn't have next pointer, we try to find it by going up parents
13891
- * chain until:
13892
- * - we find an lView with a next pointer
13893
- * - or find a tNode with a parent that has a next pointer
13894
- * - or find a lContainer
13895
- * - or reach root TNode (in which case we exit, since we traversed all nodes)
13896
- */
13897
- while (!currentView[NEXT] && currentView[PARENT] &&
13898
- !(tNode.parent && tNode.parent.next)) {
13899
- if (tNode === rootTNode)
13900
- return;
13901
- currentView = currentView[PARENT];
13902
- if (isLContainer(currentView)) {
13903
- tNode = currentView[T_HOST];
13904
- currentView = currentView[PARENT];
13905
- beforeNode = currentView[tNode.index][NATIVE];
13906
- break;
13907
- }
13908
- tNode = currentView[T_HOST];
13909
- }
13910
- if (currentView[NEXT]) {
13911
- currentView = currentView[NEXT];
13912
- nextTNode = currentView[T_HOST];
13913
- }
13914
- else {
13915
- nextTNode = tNode.type === 4 /* ElementContainer */ && tNode.child || tNode.next;
13916
- }
13917
- }
13918
- else {
13919
- nextTNode = tNode.next;
13920
- }
13921
- }
13922
- }
13923
- tNode = nextTNode;
13924
- }
13925
- }
13926
13796
  /**
13927
13797
  * NOTE: for performance reasons, the possible actions are inlined within the function instead of
13928
13798
  * being passed as an argument.
13929
13799
  */
13930
- function executeNodeAction(action, renderer, parent, node, tNode, beforeNode) {
13800
+ function executeActionOnElementOrContainer(action, renderer, parent, lNodeToHandle, beforeNode) {
13801
+ ngDevMode && assertDefined(lNodeToHandle, '\'lNodeToHandle\' is undefined');
13802
+ var lContainer;
13803
+ var isComponent = false;
13804
+ // We are expecting an RNode, but in the case of a component or LContainer the `RNode` is wrapped
13805
+ // in an array which needs to be unwrapped. We need to know if it is a component and if
13806
+ // it has LContainer so that we can process all of those cases appropriately.
13807
+ if (isLContainer(lNodeToHandle)) {
13808
+ lContainer = lNodeToHandle;
13809
+ }
13810
+ else if (isLView(lNodeToHandle)) {
13811
+ isComponent = true;
13812
+ ngDevMode && assertDefined(lNodeToHandle[HOST], 'HOST must be defined for a component LView');
13813
+ lNodeToHandle = lNodeToHandle[HOST];
13814
+ }
13815
+ var rNode = unwrapRNode(lNodeToHandle);
13816
+ ngDevMode && assertDomNode(rNode);
13931
13817
  if (action === 0 /* Insert */) {
13932
- nativeInsertBefore(renderer, parent, node, beforeNode || null);
13818
+ nativeInsertBefore(renderer, parent, rNode, beforeNode || null);
13933
13819
  }
13934
13820
  else if (action === 1 /* Detach */) {
13935
- nativeRemoveNode(renderer, node, isComponent(tNode));
13821
+ nativeRemoveNode(renderer, rNode, isComponent);
13936
13822
  }
13937
13823
  else if (action === 2 /* Destroy */) {
13938
13824
  ngDevMode && ngDevMode.rendererDestroyNode++;
13939
- renderer.destroyNode(node);
13825
+ renderer.destroyNode(rNode);
13826
+ }
13827
+ if (lContainer != null) {
13828
+ executeActionOnContainer(renderer, action, lContainer, parent, beforeNode);
13940
13829
  }
13941
13830
  }
13942
13831
  function createTextNode(value, renderer) {
13943
13832
  return isProceduralRenderer(renderer) ? renderer.createText(renderStringify(value)) :
13944
13833
  renderer.createTextNode(renderStringify(value));
13945
13834
  }
13946
- function addRemoveViewFromContainer(viewToWalk, insertMode, beforeNode) {
13947
- var renderParent = getContainerRenderParent(viewToWalk[TVIEW].node, viewToWalk);
13948
- ngDevMode && assertNodeType(viewToWalk[TVIEW].node, 2 /* View */);
13835
+ function addRemoveViewFromContainer(lView, insertMode, beforeNode) {
13836
+ var renderParent = getContainerRenderParent(lView[TVIEW].node, lView);
13837
+ ngDevMode && assertNodeType(lView[TVIEW].node, 2 /* View */);
13949
13838
  if (renderParent) {
13950
- var renderer = viewToWalk[RENDERER];
13951
- walkTNodeTree(viewToWalk, insertMode ? 0 /* Insert */ : 1 /* Detach */, renderer, renderParent, beforeNode);
13839
+ var renderer = lView[RENDERER];
13840
+ var action = insertMode ? 0 /* Insert */ : 1 /* Detach */;
13841
+ executeActionOnView(renderer, action, lView, renderParent, beforeNode);
13952
13842
  }
13953
13843
  }
13954
13844
  /**
@@ -13957,7 +13847,7 @@ function addRemoveViewFromContainer(viewToWalk, insertMode, beforeNode) {
13957
13847
  * @param lView the `LView` to be detached.
13958
13848
  */
13959
13849
  function renderDetachView(lView) {
13960
- walkTNodeTree(lView, 1 /* Detach */, lView[RENDERER], null);
13850
+ executeActionOnView(lView[RENDERER], 1 /* Detach */, lView, null, null);
13961
13851
  }
13962
13852
  /**
13963
13853
  * Traverses down and up the tree of views and containers to remove listeners and
@@ -14087,15 +13977,15 @@ function removeView(lContainer, removeIndex) {
14087
13977
  * A standalone function which destroys an LView,
14088
13978
  * conducting cleanup (e.g. removing listeners, calling onDestroys).
14089
13979
  *
14090
- * @param view The view to be destroyed.
13980
+ * @param lView The view to be destroyed.
14091
13981
  */
14092
- function destroyLView(view) {
14093
- if (!(view[FLAGS] & 256 /* Destroyed */)) {
14094
- var renderer = view[RENDERER];
13982
+ function destroyLView(lView) {
13983
+ if (!(lView[FLAGS] & 256 /* Destroyed */)) {
13984
+ var renderer = lView[RENDERER];
14095
13985
  if (isProceduralRenderer(renderer) && renderer.destroyNode) {
14096
- walkTNodeTree(view, 2 /* Destroy */, renderer, null);
13986
+ executeActionOnView(renderer, 2 /* Destroy */, lView, null, null);
14097
13987
  }
14098
- destroyViewTree(view);
13988
+ destroyViewTree(lView);
14099
13989
  }
14100
13990
  }
14101
13991
  /**
@@ -14158,7 +14048,7 @@ function cleanUpView(view) {
14158
14048
  /** Removes listeners and unsubscribes from output subscriptions */
14159
14049
  function removeListeners(lView) {
14160
14050
  var tCleanup = lView[TVIEW].cleanup;
14161
- if (tCleanup != null) {
14051
+ if (tCleanup !== null) {
14162
14052
  var lCleanup = lView[CLEANUP];
14163
14053
  for (var i = 0; i < tCleanup.length - 1; i += 2) {
14164
14054
  if (typeof tCleanup[i] === 'string') {
@@ -14310,7 +14200,7 @@ function nativeAppendChild(renderer, parent, child) {
14310
14200
  }
14311
14201
  }
14312
14202
  function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode) {
14313
- if (beforeNode) {
14203
+ if (beforeNode !== null) {
14314
14204
  nativeInsertBefore(renderer, parent, child, beforeNode);
14315
14205
  }
14316
14206
  else {
@@ -14367,7 +14257,7 @@ function getNativeAnchorNode(parentTNode, lView) {
14367
14257
  * @returns Whether or not the child was appended
14368
14258
  */
14369
14259
  function appendChild(childEl, childTNode, currentView) {
14370
- var e_2, _a;
14260
+ var e_1, _a;
14371
14261
  var renderParent = getRenderParent(childTNode, currentView);
14372
14262
  if (renderParent != null) {
14373
14263
  var renderer = currentView[RENDERER];
@@ -14380,12 +14270,12 @@ function appendChild(childEl, childTNode, currentView) {
14380
14270
  nativeAppendOrInsertBefore(renderer, renderParent, nativeNode, anchorNode);
14381
14271
  }
14382
14272
  }
14383
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
14273
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
14384
14274
  finally {
14385
14275
  try {
14386
14276
  if (childEl_1_1 && !childEl_1_1.done && (_a = childEl_1.return)) _a.call(childEl_1);
14387
14277
  }
14388
- finally { if (e_2) throw e_2.error; }
14278
+ finally { if (e_1) throw e_1.error; }
14389
14279
  }
14390
14280
  }
14391
14281
  else {
@@ -14410,6 +14300,7 @@ function getBeforeNodeForView(viewIndexInContainer, lContainer) {
14410
14300
  var nextViewIndex = CONTAINER_HEADER_OFFSET + viewIndexInContainer + 1;
14411
14301
  if (nextViewIndex < lContainer.length) {
14412
14302
  var lView = lContainer[nextViewIndex];
14303
+ ngDevMode && assertDefined(lView[T_HOST], 'Missing Host TNode');
14413
14304
  var tViewNodeChild = lView[T_HOST].child;
14414
14305
  return tViewNodeChild !== null ? getNativeByTNode(tViewNodeChild, lView) : lContainer[NATIVE];
14415
14306
  }
@@ -14435,7 +14326,7 @@ function nativeRemoveNode(renderer, rNode, isHostElement) {
14435
14326
  /**
14436
14327
  * Appends nodes to a target projection place. Nodes to insert were previously re-distribution and
14437
14328
  * stored on a component host level.
14438
- * @param lView A LView where nodes are inserted (target VLview)
14329
+ * @param lView A LView where nodes are inserted (target LView)
14439
14330
  * @param tProjectionNode A projection node where previously re-distribution should be appended
14440
14331
  * (target insertion place)
14441
14332
  * @param selectorIndex A bucket from where nodes to project should be taken
@@ -14465,6 +14356,20 @@ function appendProjectedNodes(lView, tProjectionNode, selectorIndex, componentVi
14465
14356
  }
14466
14357
  }
14467
14358
  }
14359
+ /**
14360
+ * Loops over all children of a TNode container and appends them to the DOM
14361
+ *
14362
+ * @param ngContainerChildTNode The first child of the TNode container
14363
+ * @param tProjectionNode The projection (ng-content) TNode
14364
+ * @param currentView Current LView
14365
+ * @param projectionView Projection view (view above current)
14366
+ */
14367
+ function appendProjectedChildren(ngContainerChildTNode, tProjectionNode, currentView, projectionView) {
14368
+ while (ngContainerChildTNode) {
14369
+ appendProjectedNode(ngContainerChildTNode, tProjectionNode, currentView, projectionView);
14370
+ ngContainerChildTNode = ngContainerChildTNode.next;
14371
+ }
14372
+ }
14468
14373
  /**
14469
14374
  * Appends a projected node to the DOM, or in the case of a projected container,
14470
14375
  * appends the nodes from all of the container's active views to the DOM.
@@ -14492,19 +14397,152 @@ function appendProjectedNode(projectedTNode, tProjectionNode, currentView, proje
14492
14397
  addRemoveViewFromContainer(nodeOrContainer[i], true, nodeOrContainer[NATIVE]);
14493
14398
  }
14494
14399
  }
14400
+ else if (projectedTNode.type === 5 /* IcuContainer */) {
14401
+ // The node we are adding is an ICU container which is why we also need to project all the
14402
+ // children nodes that might have been created previously and are linked to this anchor
14403
+ var ngContainerChildTNode = projectedTNode.child;
14404
+ appendProjectedChildren(ngContainerChildTNode, ngContainerChildTNode, projectionView, projectionView);
14405
+ }
14495
14406
  else {
14496
14407
  if (projectedTNode.type === 4 /* ElementContainer */) {
14497
- var ngContainerChildTNode = projectedTNode.child;
14498
- while (ngContainerChildTNode) {
14499
- appendProjectedNode(ngContainerChildTNode, tProjectionNode, currentView, projectionView);
14500
- ngContainerChildTNode = ngContainerChildTNode.next;
14501
- }
14408
+ appendProjectedChildren(projectedTNode.child, tProjectionNode, currentView, projectionView);
14502
14409
  }
14503
14410
  if (isLContainer(nodeOrContainer)) {
14504
14411
  appendChild(nodeOrContainer[NATIVE], tProjectionNode, currentView);
14505
14412
  }
14506
14413
  }
14507
14414
  }
14415
+ /**
14416
+ * `executeActionOnView` performs an operation on the view as specified in `action` (insert, detach,
14417
+ * destroy)
14418
+ *
14419
+ * Inserting a view without projection or containers at top level is simple. Just iterate over the
14420
+ * root nodes of the View, and for each node perform the `action`.
14421
+ *
14422
+ * Things get more complicated with containers and projections. That is because coming across:
14423
+ * - Container: implies that we have to insert/remove/destroy the views of that container as well
14424
+ * which in turn can have their own Containers at the View roots.
14425
+ * - Projection: implies that we have to insert/remove/destroy the nodes of the projection. The
14426
+ * complication is that the nodes we are projecting can themselves have Containers
14427
+ * or other Projections.
14428
+ *
14429
+ * As you can see this is a very recursive problem. While the recursive implementation is not the
14430
+ * most efficient one, trying to unroll the nodes non-recursively results in very complex code that
14431
+ * is very hard (to maintain). We are sacrificing a bit of performance for readability using a
14432
+ * recursive implementation.
14433
+ *
14434
+ * @param renderer Renderer to use
14435
+ * @param action action to perform (insert, detach, destroy)
14436
+ * @param lView The LView which needs to be inserted, detached, destroyed.
14437
+ * @param renderParent parent DOM element for insertion/removal.
14438
+ * @param beforeNode Before which node the insertions should happen.
14439
+ */
14440
+ function executeActionOnView(renderer, action, lView, renderParent, beforeNode) {
14441
+ var tView = lView[TVIEW];
14442
+ ngDevMode && assertNodeType(tView.node, 2 /* View */);
14443
+ var viewRootTNode = tView.node.child;
14444
+ while (viewRootTNode !== null) {
14445
+ executeActionOnNode(renderer, action, lView, viewRootTNode, renderParent, beforeNode);
14446
+ viewRootTNode = viewRootTNode.next;
14447
+ }
14448
+ }
14449
+ /**
14450
+ * `executeActionOnProjection` performs an operation on the projection specified by `action`
14451
+ * (insert, detach, destroy).
14452
+ *
14453
+ * Inserting a projection requires us to locate the projected nodes from the parent component. The
14454
+ * complication is that those nodes themselves could be re-projected from their parent component.
14455
+ *
14456
+ * @param renderer Renderer to use
14457
+ * @param action action to perform (insert, detach, destroy)
14458
+ * @param lView The LView which needs to be inserted, detached, destroyed.
14459
+ * @param renderParent parent DOM element for insertion/removal.
14460
+ * @param beforeNode Before which node the insertions should happen.
14461
+ */
14462
+ function executeActionOnProjection(renderer, action, lView, tProjectionNode, renderParent, beforeNode) {
14463
+ var componentLView = findComponentView(lView);
14464
+ var componentNode = componentLView[T_HOST];
14465
+ var nodeToProject = componentNode.projection[tProjectionNode.projection];
14466
+ if (Array.isArray(nodeToProject)) {
14467
+ for (var i = 0; i < nodeToProject.length; i++) {
14468
+ var rNode = nodeToProject[i];
14469
+ ngDevMode && assertDomNode(rNode);
14470
+ executeActionOnElementOrContainer(action, renderer, renderParent, rNode, beforeNode);
14471
+ }
14472
+ }
14473
+ else {
14474
+ var projectionTNode = nodeToProject;
14475
+ var projectedComponentLView = componentLView[PARENT];
14476
+ while (projectionTNode !== null) {
14477
+ executeActionOnNode(renderer, action, projectedComponentLView, projectionTNode, renderParent, beforeNode);
14478
+ projectionTNode = projectionTNode.projectionNext;
14479
+ }
14480
+ }
14481
+ }
14482
+ /**
14483
+ * `executeActionOnContainer` performs an operation on the container and its views as specified by
14484
+ * `action` (insert, detach, destroy)
14485
+ *
14486
+ * Inserting a Container is complicated by the fact that the container may have Views which
14487
+ * themselves have containers or projections.
14488
+ *
14489
+ * @param renderer Renderer to use
14490
+ * @param action action to perform (insert, detach, destroy)
14491
+ * @param lContainer The LContainer which needs to be inserted, detached, destroyed.
14492
+ * @param renderParent parent DOM element for insertion/removal.
14493
+ * @param beforeNode Before which node the insertions should happen.
14494
+ */
14495
+ function executeActionOnContainer(renderer, action, lContainer, renderParent, beforeNode) {
14496
+ ngDevMode && assertLContainer(lContainer);
14497
+ var anchor = lContainer[NATIVE]; // LContainer has its own before node.
14498
+ var native = unwrapRNode(lContainer);
14499
+ // An LContainer can be created dynamically on any node by injecting ViewContainerRef.
14500
+ // Asking for a ViewContainerRef on an element will result in a creation of a separate anchor node
14501
+ // (comment in the DOM) that will be different from the LContainer's host node. In this particular
14502
+ // case we need to execute action on 2 nodes:
14503
+ // - container's host node (this is done in the executeNodeAction)
14504
+ // - container's host node (this is done here)
14505
+ if (anchor !== native) {
14506
+ executeActionOnElementOrContainer(action, renderer, renderParent, anchor, beforeNode);
14507
+ }
14508
+ for (var i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
14509
+ var lView = lContainer[i];
14510
+ executeActionOnView(renderer, action, lView, renderParent, anchor);
14511
+ }
14512
+ }
14513
+ /**
14514
+ * `executeActionOnElementContainer` performs an operation on the ng-container node and its child
14515
+ * nodes as specified by the `action` (insert, detach, destroy).
14516
+ *
14517
+ * @param renderer Renderer to use
14518
+ * @param action action to perform (insert, detach, destroy)
14519
+ * @param lView The LView which needs to be inserted, detached, destroyed.
14520
+ * @param tElementContainerNode The TNode associated with the ElementContainer.
14521
+ * @param renderParent parent DOM element for insertion/removal.
14522
+ * @param beforeNode Before which node the insertions should happen.
14523
+ */
14524
+ function executeActionOnElementContainer(renderer, action, lView, tElementContainerNode, renderParent, beforeNode) {
14525
+ var node = lView[tElementContainerNode.index];
14526
+ executeActionOnElementOrContainer(action, renderer, renderParent, node, beforeNode);
14527
+ var childTNode = tElementContainerNode.child;
14528
+ while (childTNode) {
14529
+ executeActionOnNode(renderer, action, lView, childTNode, renderParent, beforeNode);
14530
+ childTNode = childTNode.next;
14531
+ }
14532
+ }
14533
+ function executeActionOnNode(renderer, action, lView, tNode, renderParent, beforeNode) {
14534
+ var elementContainerRootTNodeType = tNode.type;
14535
+ if (elementContainerRootTNodeType === 4 /* ElementContainer */) {
14536
+ executeActionOnElementContainer(renderer, action, lView, tNode, renderParent, beforeNode);
14537
+ }
14538
+ else if (elementContainerRootTNodeType === 1 /* Projection */) {
14539
+ executeActionOnProjection(renderer, action, lView, tNode, renderParent, beforeNode);
14540
+ }
14541
+ else {
14542
+ ngDevMode && assertNodeOfPossibleTypes(tNode, 3 /* Element */, 0 /* Container */);
14543
+ executeActionOnElementOrContainer(action, renderer, renderParent, lView[tNode.index], beforeNode);
14544
+ }
14545
+ }
14508
14546
 
14509
14547
  /**
14510
14548
  * @license
@@ -15728,7 +15766,10 @@ function ɵɵembeddedViewEnd() {
15728
15766
  refreshDescendantViews(lView); // update mode pass
15729
15767
  var lContainer = lView[PARENT];
15730
15768
  ngDevMode && assertLContainerOrUndefined(lContainer);
15731
- leaveView(lContainer[PARENT]);
15769
+ // It's always safe to run hooks here, as `leaveView` is not called during the 'finally' block
15770
+ // of a try-catch-finally statement, so it can never be reached while unwinding the stack due to
15771
+ // an error being thrown.
15772
+ leaveView(lContainer[PARENT], /* safeToRunHooks */ true);
15732
15773
  setPreviousOrParentTNode(viewHost, false);
15733
15774
  }
15734
15775
 
@@ -16581,6 +16622,7 @@ function ɵɵtext(index, value) {
16581
16622
  ngDevMode && ngDevMode.rendererCreateTextNode++;
16582
16623
  ngDevMode && assertDataInRange(lView, index + HEADER_OFFSET);
16583
16624
  var textNative = lView[index + HEADER_OFFSET] = createTextNode(value, lView[RENDERER]);
16625
+ ngDevMode && ngDevMode.rendererSetText++;
16584
16626
  var tNode = getOrCreateTNode(lView[TVIEW], lView[T_HOST], index, 3 /* Element */, null, null);
16585
16627
  // Text nodes are self closing.
16586
16628
  setIsNotParent();
@@ -16590,21 +16632,16 @@ function ɵɵtext(index, value) {
16590
16632
  * Create text node with binding
16591
16633
  * Bindings should be handled externally with the proper interpolation(1-8) method
16592
16634
  *
16593
- * @param index Index of the node in the data array.
16594
16635
  * @param value Stringified value to write.
16595
16636
  *
16596
16637
  * @codeGenApi
16597
16638
  */
16598
- function ɵɵtextBinding(index, value) {
16599
- if (value !== NO_CHANGE) {
16600
- var lView = getLView();
16601
- ngDevMode && assertDataInRange(lView, index + HEADER_OFFSET);
16602
- var element = getNativeByIndex(index, lView);
16603
- ngDevMode && assertDefined(element, 'native element should exist');
16604
- ngDevMode && ngDevMode.rendererSetText++;
16605
- var renderer = lView[RENDERER];
16606
- isProceduralRenderer(renderer) ? renderer.setValue(element, renderStringify(value)) :
16607
- element.textContent = renderStringify(value);
16639
+ function ɵɵtextBinding(value) {
16640
+ var lView = getLView();
16641
+ var index = getSelectedIndex();
16642
+ var bound = bind(lView, value);
16643
+ if (bound !== NO_CHANGE) {
16644
+ textBindingInternal(lView, index, renderStringify(bound));
16608
16645
  }
16609
16646
  }
16610
16647
 
@@ -16660,7 +16697,11 @@ function ɵɵtextInterpolate(v0) {
16660
16697
  */
16661
16698
  function ɵɵtextInterpolate1(prefix, v0, suffix) {
16662
16699
  var index = getSelectedIndex();
16663
- ɵɵtextBinding(index, ɵɵinterpolation1(prefix, v0, suffix));
16700
+ var lView = getLView();
16701
+ var interpolated = ɵɵinterpolation1(prefix, v0, suffix);
16702
+ if (interpolated !== NO_CHANGE) {
16703
+ textBindingInternal(lView, index, interpolated);
16704
+ }
16664
16705
  return ɵɵtextInterpolate1;
16665
16706
  }
16666
16707
  /**
@@ -16684,7 +16725,11 @@ function ɵɵtextInterpolate1(prefix, v0, suffix) {
16684
16725
  */
16685
16726
  function ɵɵtextInterpolate2(prefix, v0, i0, v1, suffix) {
16686
16727
  var index = getSelectedIndex();
16687
- ɵɵtextBinding(index, ɵɵinterpolation2(prefix, v0, i0, v1, suffix));
16728
+ var lView = getLView();
16729
+ var interpolated = ɵɵinterpolation2(prefix, v0, i0, v1, suffix);
16730
+ if (interpolated !== NO_CHANGE) {
16731
+ textBindingInternal(lView, index, interpolated);
16732
+ }
16688
16733
  return ɵɵtextInterpolate2;
16689
16734
  }
16690
16735
  /**
@@ -16709,7 +16754,11 @@ function ɵɵtextInterpolate2(prefix, v0, i0, v1, suffix) {
16709
16754
  */
16710
16755
  function ɵɵtextInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
16711
16756
  var index = getSelectedIndex();
16712
- ɵɵtextBinding(index, ɵɵinterpolation3(prefix, v0, i0, v1, i1, v2, suffix));
16757
+ var lView = getLView();
16758
+ var interpolated = ɵɵinterpolation3(prefix, v0, i0, v1, i1, v2, suffix);
16759
+ if (interpolated !== NO_CHANGE) {
16760
+ textBindingInternal(lView, index, interpolated);
16761
+ }
16713
16762
  return ɵɵtextInterpolate3;
16714
16763
  }
16715
16764
  /**
@@ -16734,7 +16783,11 @@ function ɵɵtextInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
16734
16783
  */
16735
16784
  function ɵɵtextInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
16736
16785
  var index = getSelectedIndex();
16737
- ɵɵtextBinding(index, ɵɵinterpolation4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix));
16786
+ var lView = getLView();
16787
+ var interpolated = ɵɵinterpolation4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
16788
+ if (interpolated !== NO_CHANGE) {
16789
+ textBindingInternal(lView, index, interpolated);
16790
+ }
16738
16791
  return ɵɵtextInterpolate4;
16739
16792
  }
16740
16793
  /**
@@ -16759,7 +16812,11 @@ function ɵɵtextInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
16759
16812
  */
16760
16813
  function ɵɵtextInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
16761
16814
  var index = getSelectedIndex();
16762
- ɵɵtextBinding(index, ɵɵinterpolation5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix));
16815
+ var lView = getLView();
16816
+ var interpolated = ɵɵinterpolation5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
16817
+ if (interpolated !== NO_CHANGE) {
16818
+ textBindingInternal(lView, index, interpolated);
16819
+ }
16763
16820
  return ɵɵtextInterpolate5;
16764
16821
  }
16765
16822
  /**
@@ -16786,7 +16843,11 @@ function ɵɵtextInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix
16786
16843
  */
16787
16844
  function ɵɵtextInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
16788
16845
  var index = getSelectedIndex();
16789
- ɵɵtextBinding(index, ɵɵinterpolation6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix));
16846
+ var lView = getLView();
16847
+ var interpolated = ɵɵinterpolation6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
16848
+ if (interpolated !== NO_CHANGE) {
16849
+ textBindingInternal(lView, index, interpolated);
16850
+ }
16790
16851
  return ɵɵtextInterpolate6;
16791
16852
  }
16792
16853
  /**
@@ -16811,7 +16872,11 @@ function ɵɵtextInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5
16811
16872
  */
16812
16873
  function ɵɵtextInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
16813
16874
  var index = getSelectedIndex();
16814
- ɵɵtextBinding(index, ɵɵinterpolation7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix));
16875
+ var lView = getLView();
16876
+ var interpolated = ɵɵinterpolation7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
16877
+ if (interpolated !== NO_CHANGE) {
16878
+ textBindingInternal(lView, index, interpolated);
16879
+ }
16815
16880
  return ɵɵtextInterpolate7;
16816
16881
  }
16817
16882
  /**
@@ -16836,7 +16901,11 @@ function ɵɵtextInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5
16836
16901
  */
16837
16902
  function ɵɵtextInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
16838
16903
  var index = getSelectedIndex();
16839
- ɵɵtextBinding(index, ɵɵinterpolation8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix));
16904
+ var lView = getLView();
16905
+ var interpolated = ɵɵinterpolation8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
16906
+ if (interpolated !== NO_CHANGE) {
16907
+ textBindingInternal(lView, index, interpolated);
16908
+ }
16840
16909
  return ɵɵtextInterpolate8;
16841
16910
  }
16842
16911
  /**
@@ -16865,7 +16934,11 @@ function ɵɵtextInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5
16865
16934
  */
16866
16935
  function ɵɵtextInterpolateV(values) {
16867
16936
  var index = getSelectedIndex();
16868
- ɵɵtextBinding(index, ɵɵinterpolationV(values));
16937
+ var lView = getLView();
16938
+ var interpolated = ɵɵinterpolationV(values);
16939
+ if (interpolated !== NO_CHANGE) {
16940
+ textBindingInternal(lView, index, interpolated);
16941
+ }
16869
16942
  return ɵɵtextInterpolateV;
16870
16943
  }
16871
16944
 
@@ -17311,6 +17384,8 @@ function renderComponent(componentType /* Type as workaround for: Microsoft/Type
17311
17384
  var rootView = createLView(null, createTView(-1, null, 1, 0, null, null, null, null), rootContext, rootFlags, null, null, rendererFactory, renderer, undefined, opts.injector || null);
17312
17385
  var oldView = enterView(rootView, null);
17313
17386
  var component;
17387
+ // Will become true if the `try` block executes with no errors.
17388
+ var safeToRunHooks = false;
17314
17389
  try {
17315
17390
  if (rendererFactory.begin)
17316
17391
  rendererFactory.begin();
@@ -17321,9 +17396,10 @@ function renderComponent(componentType /* Type as workaround for: Microsoft/Type
17321
17396
  rootView[FLAGS] &= ~4 /* CreationMode */;
17322
17397
  resetPreOrderHookFlags(rootView);
17323
17398
  refreshDescendantViews(rootView); // update mode pass
17399
+ safeToRunHooks = true;
17324
17400
  }
17325
17401
  finally {
17326
- leaveView(oldView);
17402
+ leaveView(oldView, safeToRunHooks);
17327
17403
  if (rendererFactory.end)
17328
17404
  rendererFactory.end();
17329
17405
  }
@@ -17952,6 +18028,7 @@ function multiFactory(factoryFn, index, isViewProvider, isComponent, f) {
17952
18028
  * and publish them into the DI system, making it visible to others for injection.
17953
18029
  *
17954
18030
  * For example:
18031
+ * ```ts
17955
18032
  * class ComponentWithProviders {
17956
18033
  * constructor(private greeter: GreeterDE) {}
17957
18034
  *
@@ -17963,15 +18040,17 @@ function multiFactory(factoryFn, index, isViewProvider, isComponent, f) {
17963
18040
  * vars: 1,
17964
18041
  * template: function(fs: RenderFlags, ctx: ComponentWithProviders) {
17965
18042
  * if (fs & RenderFlags.Create) {
17966
- * text(0);
18043
+ * ɵɵtext(0);
17967
18044
  * }
17968
18045
  * if (fs & RenderFlags.Update) {
17969
- * textBinding(0, bind(ctx.greeter.greet()));
18046
+ * ɵɵselect(0);
18047
+ * ɵɵtextBinding(ctx.greeter.greet());
17970
18048
  * }
17971
18049
  * },
17972
18050
  * features: [ProvidersFeature([GreeterDE])]
17973
18051
  * });
17974
18052
  * }
18053
+ * ```
17975
18054
  *
17976
18055
  * @param definition
17977
18056
  *
@@ -18009,6 +18088,12 @@ var ComponentRef = /** @class */ (function () {
18009
18088
  return ComponentRef;
18010
18089
  }());
18011
18090
  /**
18091
+ * Base class for a factory that can create a component dynamically.
18092
+ * Instantiate a factory for a given type of component with `resolveComponentFactory()`.
18093
+ * Use the resulting `ComponentFactory.create()` method to create a component of that type.
18094
+ *
18095
+ * @see [Dynamic Components](guide/dynamic-component-loader)
18096
+ *
18012
18097
  * @publicApi
18013
18098
  */
18014
18099
  var ComponentFactory = /** @class */ (function () {
@@ -18039,6 +18124,12 @@ var _NullComponentFactoryResolver = /** @class */ (function () {
18039
18124
  return _NullComponentFactoryResolver;
18040
18125
  }());
18041
18126
  /**
18127
+ * A simple registry that maps `Components` to generated `ComponentFactory` classes
18128
+ * that can be used to create instances of components.
18129
+ * Use to obtain the factory for a given component type,
18130
+ * then use the factory's `create()` method to create a component of that type.
18131
+ *
18132
+ * @see [Dynamic Components](guide/dynamic-component-loader)
18042
18133
  * @publicApi
18043
18134
  */
18044
18135
  var ComponentFactoryResolver = /** @class */ (function () {
@@ -18536,7 +18627,6 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
18536
18627
  _this._lContainer = _lContainer;
18537
18628
  _this._hostTNode = _hostTNode;
18538
18629
  _this._hostView = _hostView;
18539
- _this._viewRefs = [];
18540
18630
  return _this;
18541
18631
  }
18542
18632
  Object.defineProperty(ViewContainerRef_.prototype, "element", {
@@ -18569,7 +18659,9 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
18569
18659
  this.remove(0);
18570
18660
  }
18571
18661
  };
18572
- ViewContainerRef_.prototype.get = function (index) { return this._viewRefs[index] || null; };
18662
+ ViewContainerRef_.prototype.get = function (index) {
18663
+ return this._lContainer[VIEW_REFS] !== null && this._lContainer[VIEW_REFS][index] || null;
18664
+ };
18573
18665
  Object.defineProperty(ViewContainerRef_.prototype, "length", {
18574
18666
  get: function () {
18575
18667
  // Note that if there are no views, the container
@@ -18581,11 +18673,12 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
18581
18673
  configurable: true
18582
18674
  });
18583
18675
  ViewContainerRef_.prototype.createEmbeddedView = function (templateRef, context, index) {
18676
+ this.allocateContainerIfNeeded();
18584
18677
  var adjustedIdx = this._adjustIndex(index);
18585
18678
  var viewRef = templateRef
18586
18679
  .createEmbeddedView(context || {}, this._lContainer, adjustedIdx);
18587
18680
  viewRef.attachToViewContainerRef(this);
18588
- this._viewRefs.splice(adjustedIdx, 0, viewRef);
18681
+ this._lContainer[VIEW_REFS].splice(adjustedIdx, 0, viewRef);
18589
18682
  return viewRef;
18590
18683
  };
18591
18684
  ViewContainerRef_.prototype.createComponent = function (componentFactory, index, injector, projectableNodes, ngModuleRef) {
@@ -18601,6 +18694,7 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
18601
18694
  if (viewRef.destroyed) {
18602
18695
  throw new Error('Cannot insert a destroyed View in a ViewContainer!');
18603
18696
  }
18697
+ this.allocateContainerIfNeeded();
18604
18698
  var lView = viewRef._lView;
18605
18699
  var adjustedIdx = this._adjustIndex(index);
18606
18700
  if (viewAttachedToContainer(lView)) {
@@ -18612,7 +18706,7 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
18612
18706
  var beforeNode = getBeforeNodeForView(adjustedIdx, this._lContainer);
18613
18707
  addRemoveViewFromContainer(lView, true, beforeNode);
18614
18708
  viewRef.attachToViewContainerRef(this);
18615
- this._viewRefs.splice(adjustedIdx, 0, viewRef);
18709
+ this._lContainer[VIEW_REFS].splice(adjustedIdx, 0, viewRef);
18616
18710
  return viewRef;
18617
18711
  };
18618
18712
  ViewContainerRef_.prototype.move = function (viewRef, newIndex) {
@@ -18625,16 +18719,22 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
18625
18719
  this.insert(viewRef, newIndex);
18626
18720
  return viewRef;
18627
18721
  };
18628
- ViewContainerRef_.prototype.indexOf = function (viewRef) { return this._viewRefs.indexOf(viewRef); };
18722
+ ViewContainerRef_.prototype.indexOf = function (viewRef) {
18723
+ return this._lContainer[VIEW_REFS] !== null ?
18724
+ this._lContainer[VIEW_REFS].indexOf(viewRef) :
18725
+ 0;
18726
+ };
18629
18727
  ViewContainerRef_.prototype.remove = function (index) {
18728
+ this.allocateContainerIfNeeded();
18630
18729
  var adjustedIdx = this._adjustIndex(index, -1);
18631
18730
  removeView(this._lContainer, adjustedIdx);
18632
- this._viewRefs.splice(adjustedIdx, 1);
18731
+ this._lContainer[VIEW_REFS].splice(adjustedIdx, 1);
18633
18732
  };
18634
18733
  ViewContainerRef_.prototype.detach = function (index) {
18734
+ this.allocateContainerIfNeeded();
18635
18735
  var adjustedIdx = this._adjustIndex(index, -1);
18636
18736
  var view = detachView(this._lContainer, adjustedIdx);
18637
- var wasDetached = view && this._viewRefs.splice(adjustedIdx, 1)[0] != null;
18737
+ var wasDetached = view && this._lContainer[VIEW_REFS].splice(adjustedIdx, 1)[0] != null;
18638
18738
  return wasDetached ? new ViewRef(view, view[CONTEXT], -1) : null;
18639
18739
  };
18640
18740
  ViewContainerRef_.prototype._adjustIndex = function (index, shift) {
@@ -18649,6 +18749,11 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
18649
18749
  }
18650
18750
  return index;
18651
18751
  };
18752
+ ViewContainerRef_.prototype.allocateContainerIfNeeded = function () {
18753
+ if (this._lContainer[VIEW_REFS] === null) {
18754
+ this._lContainer[VIEW_REFS] = [];
18755
+ }
18756
+ };
18652
18757
  return ViewContainerRef_;
18653
18758
  }(ViewContainerRefToken));
18654
18759
  }
@@ -18715,6 +18820,7 @@ function createViewRef(hostTNode, hostView, context) {
18715
18820
  }
18716
18821
  return null;
18717
18822
  }
18823
+ /** Returns a Renderer2 (or throws when application was bootstrapped with Renderer3) */
18718
18824
  function getOrCreateRenderer2(view) {
18719
18825
  var renderer = view[RENDERER];
18720
18826
  if (isProceduralRenderer(renderer)) {
@@ -18724,9 +18830,14 @@ function getOrCreateRenderer2(view) {
18724
18830
  throw new Error('Cannot inject Renderer2 when the application uses Renderer3!');
18725
18831
  }
18726
18832
  }
18727
- /** Returns a Renderer2 (or throws when application was bootstrapped with Renderer3) */
18833
+ /** Injects a Renderer2 for the current component. */
18728
18834
  function injectRenderer2() {
18729
- return getOrCreateRenderer2(getLView());
18835
+ // We need the Renderer to be based on the component that it's being injected into, however since
18836
+ // DI happens before we've entered its view, `getLView` will return the parent view instead.
18837
+ var lView = getLView();
18838
+ var tNode = getPreviousOrParentTNode();
18839
+ var nodeAtIndex = getComponentViewByIndex(tNode.index, lView);
18840
+ return getOrCreateRenderer2(isLView(nodeAtIndex) ? nodeAtIndex : lView);
18730
18841
  }
18731
18842
 
18732
18843
  /**
@@ -18919,7 +19030,7 @@ var Version = /** @class */ (function () {
18919
19030
  /**
18920
19031
  * @publicApi
18921
19032
  */
18922
- var VERSION = new Version('8.1.0-next.2');
19033
+ var VERSION = new Version('8.1.1');
18923
19034
 
18924
19035
  /**
18925
19036
  * @license
@@ -22119,6 +22230,8 @@ var ComponentFactory$1 = /** @class */ (function (_super) {
22119
22230
  var oldLView = enterView(rootLView, null);
22120
22231
  var component;
22121
22232
  var tElementNode;
22233
+ // Will become true if the `try` block executes with no errors.
22234
+ var safeToRunHooks = false;
22122
22235
  try {
22123
22236
  var componentView = createRootComponentView(hostRNode, this.componentDef, rootLView, rendererFactory, renderer);
22124
22237
  tElementNode = getTNode(0, rootLView);
@@ -22135,9 +22248,10 @@ var ComponentFactory$1 = /** @class */ (function (_super) {
22135
22248
  component = createRootComponent(componentView, this.componentDef, rootLView, rootContext, [LifecycleHooksFeature]);
22136
22249
  addToViewTree(rootLView, componentView);
22137
22250
  refreshDescendantViews(rootLView);
22251
+ safeToRunHooks = true;
22138
22252
  }
22139
22253
  finally {
22140
- leaveView(oldLView);
22254
+ leaveView(oldLView, safeToRunHooks);
22141
22255
  }
22142
22256
  var componentRef = new ComponentRef$1(this.componentType, component, createElementRef(ElementRef, tElementNode, rootLView), rootLView, tElementNode);
22143
22257
  if (isInternalRootView) {
@@ -22177,14 +22291,16 @@ var ComponentRef$1 = /** @class */ (function (_super) {
22177
22291
  configurable: true
22178
22292
  });
22179
22293
  ComponentRef.prototype.destroy = function () {
22180
- ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');
22181
- this.destroyCbs.forEach(function (fn) { return fn(); });
22182
- this.destroyCbs = null;
22183
- !this.hostView.destroyed && this.hostView.destroy();
22294
+ if (this.destroyCbs) {
22295
+ this.destroyCbs.forEach(function (fn) { return fn(); });
22296
+ this.destroyCbs = null;
22297
+ !this.hostView.destroyed && this.hostView.destroy();
22298
+ }
22184
22299
  };
22185
22300
  ComponentRef.prototype.onDestroy = function (callback) {
22186
- ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');
22187
- this.destroyCbs.push(callback);
22301
+ if (this.destroyCbs) {
22302
+ this.destroyCbs.push(callback);
22303
+ }
22188
22304
  };
22189
22305
  return ComponentRef;
22190
22306
  }(ComponentRef));
@@ -23092,7 +23208,7 @@ function readUpdateOpCodes(updateOpCodes, icus, bindingsStartIndex, changeMask,
23092
23208
  elementPropertyInternal(nodeIndex, propName, value, sanitizeFn);
23093
23209
  break;
23094
23210
  case 0 /* Text */:
23095
- ɵɵtextBinding(nodeIndex, value);
23211
+ textBindingInternal(viewData, nodeIndex, value);
23096
23212
  break;
23097
23213
  case 2 /* IcuSwitch */:
23098
23214
  tIcuIndex = updateOpCodes[++j];
@@ -23251,15 +23367,20 @@ var shiftsCounter = 0;
23251
23367
  * Stores the values of the bindings during each update cycle in order to determine if we need to
23252
23368
  * update the translated nodes.
23253
23369
  *
23254
- * @param expression The binding's new value or NO_CHANGE
23370
+ * @param value The binding's value
23371
+ * @returns This function returns itself so that it may be chained
23372
+ * (e.g. `i18nExp(ctx.name)(ctx.title)`)
23255
23373
  *
23256
23374
  * @codeGenApi
23257
23375
  */
23258
- function ɵɵi18nExp(expression) {
23376
+ function ɵɵi18nExp(value) {
23377
+ var lView = getLView();
23378
+ var expression = bind(lView, value);
23259
23379
  if (expression !== NO_CHANGE) {
23260
23380
  changeMask = changeMask | (1 << shiftsCounter);
23261
23381
  }
23262
23382
  shiftsCounter++;
23383
+ return ɵɵi18nExp;
23263
23384
  }
23264
23385
  /**
23265
23386
  * Updates a translation block or an i18n attribute when the bindings have changed.
@@ -23518,13 +23639,13 @@ var LOCALIZE_PH_REGEXP = /\{\$(.*?)\}/g;
23518
23639
  * @deprecated this method is temporary & should not be used as it will be removed soon
23519
23640
  */
23520
23641
  function ɵɵi18nLocalize(input, placeholders) {
23521
- if (placeholders === void 0) { placeholders = {}; }
23522
23642
  if (typeof TRANSLATIONS[input] !== 'undefined') { // to account for empty string
23523
23643
  input = TRANSLATIONS[input];
23524
23644
  }
23525
- return Object.keys(placeholders).length ?
23526
- input.replace(LOCALIZE_PH_REGEXP, function (match, key) { return placeholders[key] || ''; }) :
23527
- input;
23645
+ if (placeholders !== undefined && Object.keys(placeholders).length) {
23646
+ return input.replace(LOCALIZE_PH_REGEXP, function (_, key) { return placeholders[key] || ''; });
23647
+ }
23648
+ return input;
23528
23649
  }
23529
23650
  /**
23530
23651
  * The locale id that the application is currently using (for translations and ICU expressions).
@@ -24219,7 +24340,7 @@ function unwrapValue$1(newValue) {
24219
24340
  * that create event emitters. When the title is clicked, the emitter
24220
24341
  * emits an open or close event to toggle the current visibility state.
24221
24342
  *
24222
- * ```
24343
+ * ```html
24223
24344
  * @Component({
24224
24345
  * selector: 'zippy',
24225
24346
  * template: `
@@ -24248,17 +24369,10 @@ function unwrapValue$1(newValue) {
24248
24369
  * Access the event object with the `$event` argument passed to the output event
24249
24370
  * handler:
24250
24371
  *
24251
- * ```
24372
+ * ```html
24252
24373
  * <zippy (open)="onOpen($event)" (close)="onClose($event)"></zippy>
24253
24374
  * ```
24254
24375
  *
24255
- * ### Notes
24256
- *
24257
- * Uses Rx.Observable but provides an adapter to make it work as specified here:
24258
- * https://github.com/jhusain/observable-spec
24259
- *
24260
- * Once a reference implementation of the spec is available, switch to it.
24261
- *
24262
24376
  * @publicApi
24263
24377
  */
24264
24378
  var EventEmitter = /** @class */ (function (_super) {
@@ -24632,9 +24746,10 @@ function queryByReadToken(read, tNode, currentView) {
24632
24746
  return factoryFn();
24633
24747
  }
24634
24748
  else {
24635
- var matchingIdx = locateDirectiveOrProvider(tNode, currentView, read, false, false);
24749
+ var tView = currentView[TVIEW];
24750
+ var matchingIdx = locateDirectiveOrProvider(tNode, tView, read, false, false);
24636
24751
  if (matchingIdx !== null) {
24637
- return getNodeInjectable(currentView[TVIEW].data, currentView, matchingIdx, tNode);
24752
+ return getNodeInjectable(tView.data, currentView, matchingIdx, tNode);
24638
24753
  }
24639
24754
  }
24640
24755
  return null;
@@ -24676,19 +24791,20 @@ function queryRead(tNode, currentView, read, matchingIdx) {
24676
24791
  * out of order (e.g. a view was created in a constructor)
24677
24792
  */
24678
24793
  function add(query, tNode, insertBeforeContainer) {
24679
- var currentView = getLView();
24794
+ var lView = getLView();
24795
+ var tView = lView[TVIEW];
24680
24796
  while (query) {
24681
24797
  var predicate = query.predicate;
24682
24798
  var type = predicate.type;
24683
24799
  if (type) {
24684
24800
  var result = null;
24685
24801
  if (type === TemplateRef) {
24686
- result = queryByTemplateRef(type, tNode, currentView, predicate.read);
24802
+ result = queryByTemplateRef(type, tNode, lView, predicate.read);
24687
24803
  }
24688
24804
  else {
24689
- var matchingIdx = locateDirectiveOrProvider(tNode, currentView, type, false, false);
24805
+ var matchingIdx = locateDirectiveOrProvider(tNode, tView, type, false, false);
24690
24806
  if (matchingIdx !== null) {
24691
- result = queryRead(tNode, currentView, predicate.read, matchingIdx);
24807
+ result = queryRead(tNode, lView, predicate.read, matchingIdx);
24692
24808
  }
24693
24809
  }
24694
24810
  if (result !== null) {
@@ -24700,7 +24816,7 @@ function add(query, tNode, insertBeforeContainer) {
24700
24816
  for (var i = 0; i < selector.length; i++) {
24701
24817
  var matchingIdx = getIdxOfMatchingSelector(tNode, selector[i]);
24702
24818
  if (matchingIdx !== null) {
24703
- var result = queryRead(tNode, currentView, predicate.read, matchingIdx);
24819
+ var result = queryRead(tNode, lView, predicate.read, matchingIdx);
24704
24820
  if (result !== null) {
24705
24821
  addMatch(query, result, insertBeforeContainer);
24706
24822
  }
@@ -24950,7 +25066,6 @@ var ɵ0$9 = function () { return ({
24950
25066
  'ɵɵNgOnChangesFeature': ɵɵNgOnChangesFeature,
24951
25067
  'ɵɵProvidersFeature': ɵɵProvidersFeature,
24952
25068
  'ɵɵInheritDefinitionFeature': ɵɵInheritDefinitionFeature,
24953
- 'ɵɵbind': ɵɵbind,
24954
25069
  'ɵɵcontainer': ɵɵcontainer,
24955
25070
  'ɵɵnextContext': ɵɵnextContext,
24956
25071
  'ɵɵcontainerRefreshStart': ɵɵcontainerRefreshStart,
@@ -25821,9 +25936,10 @@ var ɵ8 = function (hostPropertyName) { return ({ hostPropertyName: hostProperty
25821
25936
  var HostBinding = makePropDecorator('HostBinding', ɵ8);
25822
25937
  var ɵ9 = function (eventName, args) { return ({ eventName: eventName, args: args }); };
25823
25938
  /**
25824
- * Binds a CSS event to a host listener and supplies configuration metadata.
25939
+ * Decorator that binds a DOM event to a host listener and supplies configuration metadata.
25825
25940
  * Angular invokes the supplied handler method when the host element emits the specified event,
25826
25941
  * and updates the bound element with the result.
25942
+ *
25827
25943
  * If the handler method returns false, applies `preventDefault` on the bound element.
25828
25944
  *
25829
25945
  * @usageNotes
@@ -25831,7 +25947,7 @@ var ɵ9 = function (eventName, args) { return ({ eventName: eventName, args: arg
25831
25947
  * The following example declares a directive
25832
25948
  * that attaches a click listener to a button and counts clicks.
25833
25949
  *
25834
- * ```
25950
+ * ```ts
25835
25951
  * @Directive({selector: 'button[counting]'})
25836
25952
  * class CountClicks {
25837
25953
  * numberOfClicks = 0;
@@ -30993,5 +31109,5 @@ var NgModuleFactory_ = /** @class */ (function (_super) {
30993
31109
  * Generated bundle index. Do not edit.
30994
31110
  */
30995
31111
 
30996
- export { APPLICATION_MODULE_PROVIDERS as ɵangular_packages_core_core_r, _iterableDiffersFactory as ɵangular_packages_core_core_o, _keyValueDiffersFactory as ɵangular_packages_core_core_p, _localeFactory as ɵangular_packages_core_core_q, zoneSchedulerFactory as ɵangular_packages_core_core_s, _appIdRandomProviderFactory as ɵangular_packages_core_core_f, DefaultIterableDifferFactory as ɵangular_packages_core_core_m, DefaultKeyValueDifferFactory as ɵangular_packages_core_core_n, DebugElement__PRE_R3__ as ɵangular_packages_core_core_l, DebugNode__PRE_R3__ as ɵangular_packages_core_core_k, NullInjector as ɵangular_packages_core_core_b, injectInjectorOnly as ɵangular_packages_core_core_a, ReflectiveInjector_ as ɵangular_packages_core_core_c, ReflectiveDependency as ɵangular_packages_core_core_d, resolveReflectiveProviders as ɵangular_packages_core_core_e, getModuleFactory__PRE_R3__ as ɵangular_packages_core_core_j, wtfEnabled as ɵangular_packages_core_core_t, createScope as ɵangular_packages_core_core_v, detectWTF as ɵangular_packages_core_core_u, endTimeRange as ɵangular_packages_core_core_y, leave as ɵangular_packages_core_core_w, startTimeRange as ɵangular_packages_core_core_x, SCHEDULER as ɵangular_packages_core_core_bb, injectAttributeImpl as ɵangular_packages_core_core_bc, getLView as ɵangular_packages_core_core_bd, getPreviousOrParentTNode as ɵangular_packages_core_core_be, nextContextImpl as ɵangular_packages_core_core_bf, BoundPlayerFactory as ɵangular_packages_core_core_bj, getRootContext as ɵangular_packages_core_core_bp, loadInternal as ɵangular_packages_core_core_bo, createElementRef as ɵangular_packages_core_core_g, createTemplateRef as ɵangular_packages_core_core_h, createViewRef as ɵangular_packages_core_core_i, getUrlSanitizer as ɵangular_packages_core_core_bh, noSideEffects as ɵangular_packages_core_core_bn, makeParamDecorator as ɵangular_packages_core_core_bk, makePropDecorator as ɵangular_packages_core_core_bl, getClosureSafeProperty as ɵangular_packages_core_core_bq, _def as ɵangular_packages_core_core_z, DebugContext as ɵangular_packages_core_core_ba, createPlatform, assertPlatform, destroyPlatform, getPlatform, PlatformRef, ApplicationRef, createPlatformFactory, NgProbeToken, enableProdMode, isDevMode, APP_ID, PACKAGE_ROOT_URL, PLATFORM_INITIALIZER, PLATFORM_ID, APP_BOOTSTRAP_LISTENER, APP_INITIALIZER, ApplicationInitStatus, DebugElement, DebugEventListener, DebugNode, asNativeElements, getDebugNode, Testability, TestabilityRegistry, setTestabilityGetter, TRANSLATIONS$1 as TRANSLATIONS, TRANSLATIONS_FORMAT, LOCALE_ID$1 as LOCALE_ID, MissingTranslationStrategy, ApplicationModule, wtfCreateScope, wtfLeave, wtfStartTimeRange, wtfEndTimeRange, Type, EventEmitter, ErrorHandler, Sanitizer, SecurityContext, Attribute, ANALYZE_FOR_ENTRY_COMPONENTS, ContentChild, ContentChildren, Query, ViewChild, ViewChildren, Component, Directive, HostBinding, HostListener, Input, Output, Pipe, NgModule, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA, ViewEncapsulation, Version, VERSION, InjectFlags, ɵɵdefineInjectable, defineInjectable, ɵɵdefineInjector, forwardRef, resolveForwardRef, Injectable, Injector, ɵɵinject, inject, INJECTOR, ReflectiveInjector, ResolvedReflectiveFactory, ReflectiveKey, InjectionToken, Inject, Optional, Self, SkipSelf, Host, ɵ0, ɵ1, NgZone, NoopNgZone as ɵNoopNgZone, RenderComponentType, Renderer, Renderer2, RendererFactory2, RendererStyleFlags2, RootRenderer, COMPILER_OPTIONS, Compiler, CompilerFactory, ModuleWithComponentFactories, ComponentFactory, ComponentFactory as ɵComponentFactory, ComponentRef, ComponentFactoryResolver, ElementRef, NgModuleFactory, NgModuleRef, NgModuleFactoryLoader, getModuleFactory, QueryList, SystemJsNgModuleLoader, SystemJsNgModuleLoaderConfig, TemplateRef, ViewContainerRef, EmbeddedViewRef, ViewRef$1 as ViewRef, ChangeDetectionStrategy, ChangeDetectorRef, DefaultIterableDiffer, IterableDiffers, KeyValueDiffers, SimpleChange, WrappedValue, platformCore, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, APP_ID_RANDOM_PROVIDER as ɵAPP_ID_RANDOM_PROVIDER, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, devModeEqual as ɵdevModeEqual, isListLikeIterable as ɵisListLikeIterable, ChangeDetectorStatus as ɵChangeDetectorStatus, isDefaultChangeDetectionStrategy as ɵisDefaultChangeDetectionStrategy, Console as ɵConsole, setCurrentInjector as ɵsetCurrentInjector, getInjectableDef as ɵgetInjectableDef, APP_ROOT as ɵAPP_ROOT, ivyEnabled as ɵivyEnabled, CodegenComponentFactoryResolver as ɵCodegenComponentFactoryResolver, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, resolveComponentResources as ɵresolveComponentResources, ReflectionCapabilities as ɵReflectionCapabilities, RenderDebugInfo as ɵRenderDebugInfo, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeStyle as ɵ_sanitizeStyle, _sanitizeUrl as ɵ_sanitizeUrl, _global as ɵglobal, looseIdentical as ɵlooseIdentical, stringify as ɵstringify, makeDecorator as ɵmakeDecorator, isObservable as ɵisObservable, isPromise as ɵisPromise, clearOverrides as ɵclearOverrides, initServicesIfNeeded as ɵinitServicesIfNeeded, overrideComponentView as ɵoverrideComponentView, overrideProvider as ɵoverrideProvider, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, getLocalePluralCase as ɵgetLocalePluralCase, findLocaleData as ɵfindLocaleData, LOCALE_DATA as ɵLOCALE_DATA, LocaleDataIndex as ɵLocaleDataIndex, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵdefineBase, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefinePipe, ɵɵdefineNgModule, detectChanges as ɵdetectChanges, renderComponent as ɵrenderComponent, ComponentFactory$1 as ɵRender3ComponentFactory, ComponentRef$1 as ɵRender3ComponentRef, ɵɵdirectiveInject, ɵɵinjectAttribute, ɵɵgetFactoryOf, ɵɵgetInheritedFactory, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵtemplateRefExtractor, ɵɵProvidersFeature, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, LifecycleHooksFeature as ɵLifecycleHooksFeature, NgModuleRef$1 as ɵRender3NgModuleRef, markDirty as ɵmarkDirty, NgModuleFactory$1 as ɵNgModuleFactory, NO_CHANGE as ɵNO_CHANGE, ɵɵcontainer, ɵɵnextContext, ɵɵelementStart, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵelement, ɵɵlistener, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵembeddedViewStart, ɵɵprojection, ɵɵbind, ɵɵinterpolation1, ɵɵinterpolation2, ɵɵinterpolation3, ɵɵinterpolation4, ɵɵinterpolation5, ɵɵinterpolation6, ɵɵinterpolation7, ɵɵinterpolation8, ɵɵinterpolationV, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵgetCurrentView, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, ɵɵrestoreView, ɵɵcontainerRefreshStart, ɵɵcontainerRefreshEnd, ɵɵqueryRefresh, ɵɵviewQuery, ɵɵstaticViewQuery, ɵɵstaticContentQuery, ɵɵloadViewQuery, ɵɵcontentQuery, ɵɵloadContentQuery, ɵɵelementEnd, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵupdateSyntheticHostBinding, ɵɵcomponentHostSyntheticListener, ɵɵprojectionDef, ɵɵreference, ɵɵenableBindings, ɵɵdisableBindings, ɵɵallocHostVars, ɵɵelementContainerStart, ɵɵelementContainerEnd, ɵɵstyling, ɵɵstyleMap, ɵɵclassMap, ɵɵstyleProp, ɵɵstylingApply, ɵɵclassProp, ɵɵelementHostAttrs, ɵɵselect, ɵɵtextBinding, ɵɵtemplate, ɵɵembeddedViewEnd, store as ɵstore, ɵɵload, ɵɵpipe, whenRendered as ɵwhenRendered, ɵɵi18n, ɵɵi18nAttributes, ɵɵi18nExp, ɵɵi18nStart, ɵɵi18nEnd, ɵɵi18nApply, ɵɵi18nPostprocess, i18nConfigureLocalize as ɵi18nConfigureLocalize, ɵɵi18nLocalize, setLocaleId as ɵsetLocaleId, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, setClassMetadata as ɵsetClassMetadata, ɵɵresolveWindow, ɵɵresolveDocument, ɵɵresolveBody, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, patchComponentDefWithScope as ɵpatchComponentDefWithScope, resetCompiledComponents as ɵresetCompiledComponents, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, transitiveScopesFor as ɵtransitiveScopesFor, compilePipe as ɵcompilePipe, ɵɵsanitizeHtml, ɵɵsanitizeStyle, ɵɵdefaultStyleSanitizer, ɵɵsanitizeScript, ɵɵsanitizeUrl, ɵɵsanitizeResourceUrl, ɵɵsanitizeUrlOrResourceUrl, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, getLContext as ɵgetLContext, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_COMPONENT_DEF as ɵNG_COMPONENT_DEF, NG_DIRECTIVE_DEF as ɵNG_DIRECTIVE_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_MODULE_DEF as ɵNG_MODULE_DEF, NG_BASE_DEF as ɵNG_BASE_DEF, NG_INJECTABLE_DEF as ɵNG_INJECTABLE_DEF, NG_INJECTOR_DEF as ɵNG_INJECTOR_DEF, bindPlayerFactory as ɵbindPlayerFactory, addPlayer as ɵaddPlayer, getPlayers as ɵgetPlayers, compileNgModuleFactory__POST_R3__ as ɵcompileNgModuleFactory__POST_R3__, isBoundToModule__POST_R3__ as ɵisBoundToModule__POST_R3__, SWITCH_COMPILE_COMPONENT__POST_R3__ as ɵSWITCH_COMPILE_COMPONENT__POST_R3__, SWITCH_COMPILE_DIRECTIVE__POST_R3__ as ɵSWITCH_COMPILE_DIRECTIVE__POST_R3__, SWITCH_COMPILE_PIPE__POST_R3__ as ɵSWITCH_COMPILE_PIPE__POST_R3__, SWITCH_COMPILE_NGMODULE__POST_R3__ as ɵSWITCH_COMPILE_NGMODULE__POST_R3__, getDebugNode__POST_R3__ as ɵgetDebugNode__POST_R3__, SWITCH_COMPILE_INJECTABLE__POST_R3__ as ɵSWITCH_COMPILE_INJECTABLE__POST_R3__, SWITCH_IVY_ENABLED__POST_R3__ as ɵSWITCH_IVY_ENABLED__POST_R3__, SWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__ as ɵSWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__, Compiler_compileModuleSync__POST_R3__ as ɵCompiler_compileModuleSync__POST_R3__, Compiler_compileModuleAsync__POST_R3__ as ɵCompiler_compileModuleAsync__POST_R3__, Compiler_compileModuleAndAllComponentsSync__POST_R3__ as ɵCompiler_compileModuleAndAllComponentsSync__POST_R3__, Compiler_compileModuleAndAllComponentsAsync__POST_R3__ as ɵCompiler_compileModuleAndAllComponentsAsync__POST_R3__, SWITCH_ELEMENT_REF_FACTORY__POST_R3__ as ɵSWITCH_ELEMENT_REF_FACTORY__POST_R3__, SWITCH_TEMPLATE_REF_FACTORY__POST_R3__ as ɵSWITCH_TEMPLATE_REF_FACTORY__POST_R3__, SWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__ as ɵSWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__, SWITCH_RENDERER2_FACTORY__POST_R3__ as ɵSWITCH_RENDERER2_FACTORY__POST_R3__, getModuleFactory__POST_R3__ as ɵgetModuleFactory__POST_R3__, registerNgModuleType as ɵregisterNgModuleType, publishGlobalUtil as ɵpublishGlobalUtil, publishDefaultGlobalUtils as ɵpublishDefaultGlobalUtils, createInjector as ɵcreateInjector, INJECTOR_IMPL__POST_R3__ as ɵINJECTOR_IMPL__POST_R3__, registerModuleFactory as ɵregisterModuleFactory, EMPTY_ARRAY$3 as ɵEMPTY_ARRAY, EMPTY_MAP as ɵEMPTY_MAP, anchorDef as ɵand, createComponentFactory as ɵccf, createNgModuleFactory as ɵcmf, createRendererType2 as ɵcrt, directiveDef as ɵdid, elementDef as ɵeld, getComponentViewDefinitionFactory as ɵgetComponentViewDefinitionFactory, inlineInterpolate as ɵinlineInterpolate, interpolate as ɵinterpolate, moduleDef as ɵmod, moduleProvideDef as ɵmpd, ngContentDef as ɵncd, nodeValue as ɵnov, pipeDef as ɵpid, providerDef as ɵprd, pureArrayDef as ɵpad, pureObjectDef as ɵpod, purePipeDef as ɵppd, queryDef as ɵqud, textDef as ɵted, unwrapValue as ɵunv, viewDef as ɵvid };
31112
+ export { APPLICATION_MODULE_PROVIDERS as ɵangular_packages_core_core_r, _iterableDiffersFactory as ɵangular_packages_core_core_o, _keyValueDiffersFactory as ɵangular_packages_core_core_p, _localeFactory as ɵangular_packages_core_core_q, zoneSchedulerFactory as ɵangular_packages_core_core_s, _appIdRandomProviderFactory as ɵangular_packages_core_core_f, DefaultIterableDifferFactory as ɵangular_packages_core_core_m, DefaultKeyValueDifferFactory as ɵangular_packages_core_core_n, DebugElement__PRE_R3__ as ɵangular_packages_core_core_l, DebugNode__PRE_R3__ as ɵangular_packages_core_core_k, NullInjector as ɵangular_packages_core_core_b, injectInjectorOnly as ɵangular_packages_core_core_a, ReflectiveInjector_ as ɵangular_packages_core_core_c, ReflectiveDependency as ɵangular_packages_core_core_d, resolveReflectiveProviders as ɵangular_packages_core_core_e, getModuleFactory__PRE_R3__ as ɵangular_packages_core_core_j, wtfEnabled as ɵangular_packages_core_core_t, createScope as ɵangular_packages_core_core_v, detectWTF as ɵangular_packages_core_core_u, endTimeRange as ɵangular_packages_core_core_y, leave as ɵangular_packages_core_core_w, startTimeRange as ɵangular_packages_core_core_x, SCHEDULER as ɵangular_packages_core_core_bb, injectAttributeImpl as ɵangular_packages_core_core_bc, getLView as ɵangular_packages_core_core_bd, getPreviousOrParentTNode as ɵangular_packages_core_core_be, nextContextImpl as ɵangular_packages_core_core_bf, BoundPlayerFactory as ɵangular_packages_core_core_bj, getRootContext as ɵangular_packages_core_core_bp, loadInternal as ɵangular_packages_core_core_bo, createElementRef as ɵangular_packages_core_core_g, createTemplateRef as ɵangular_packages_core_core_h, createViewRef as ɵangular_packages_core_core_i, getUrlSanitizer as ɵangular_packages_core_core_bh, noSideEffects as ɵangular_packages_core_core_bn, makeParamDecorator as ɵangular_packages_core_core_bk, makePropDecorator as ɵangular_packages_core_core_bl, getClosureSafeProperty as ɵangular_packages_core_core_bq, _def as ɵangular_packages_core_core_z, DebugContext as ɵangular_packages_core_core_ba, createPlatform, assertPlatform, destroyPlatform, getPlatform, PlatformRef, ApplicationRef, createPlatformFactory, NgProbeToken, enableProdMode, isDevMode, APP_ID, PACKAGE_ROOT_URL, PLATFORM_INITIALIZER, PLATFORM_ID, APP_BOOTSTRAP_LISTENER, APP_INITIALIZER, ApplicationInitStatus, DebugElement, DebugEventListener, DebugNode, asNativeElements, getDebugNode, Testability, TestabilityRegistry, setTestabilityGetter, TRANSLATIONS$1 as TRANSLATIONS, TRANSLATIONS_FORMAT, LOCALE_ID$1 as LOCALE_ID, MissingTranslationStrategy, ApplicationModule, wtfCreateScope, wtfLeave, wtfStartTimeRange, wtfEndTimeRange, Type, EventEmitter, ErrorHandler, Sanitizer, SecurityContext, Attribute, ANALYZE_FOR_ENTRY_COMPONENTS, ContentChild, ContentChildren, Query, ViewChild, ViewChildren, Component, Directive, HostBinding, HostListener, Input, Output, Pipe, NgModule, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA, ViewEncapsulation, Version, VERSION, InjectFlags, ɵɵdefineInjectable, defineInjectable, ɵɵdefineInjector, forwardRef, resolveForwardRef, Injectable, Injector, ɵɵinject, inject, INJECTOR, ReflectiveInjector, ResolvedReflectiveFactory, ReflectiveKey, InjectionToken, Inject, Optional, Self, SkipSelf, Host, ɵ0, ɵ1, NgZone, NoopNgZone as ɵNoopNgZone, RenderComponentType, Renderer, Renderer2, RendererFactory2, RendererStyleFlags2, RootRenderer, COMPILER_OPTIONS, Compiler, CompilerFactory, ModuleWithComponentFactories, ComponentFactory, ComponentFactory as ɵComponentFactory, ComponentRef, ComponentFactoryResolver, ElementRef, NgModuleFactory, NgModuleRef, NgModuleFactoryLoader, getModuleFactory, QueryList, SystemJsNgModuleLoader, SystemJsNgModuleLoaderConfig, TemplateRef, ViewContainerRef, EmbeddedViewRef, ViewRef$1 as ViewRef, ChangeDetectionStrategy, ChangeDetectorRef, DefaultIterableDiffer, IterableDiffers, KeyValueDiffers, SimpleChange, WrappedValue, platformCore, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, APP_ID_RANDOM_PROVIDER as ɵAPP_ID_RANDOM_PROVIDER, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, devModeEqual as ɵdevModeEqual, isListLikeIterable as ɵisListLikeIterable, ChangeDetectorStatus as ɵChangeDetectorStatus, isDefaultChangeDetectionStrategy as ɵisDefaultChangeDetectionStrategy, Console as ɵConsole, setCurrentInjector as ɵsetCurrentInjector, getInjectableDef as ɵgetInjectableDef, APP_ROOT as ɵAPP_ROOT, ivyEnabled as ɵivyEnabled, CodegenComponentFactoryResolver as ɵCodegenComponentFactoryResolver, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, resolveComponentResources as ɵresolveComponentResources, ReflectionCapabilities as ɵReflectionCapabilities, RenderDebugInfo as ɵRenderDebugInfo, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeStyle as ɵ_sanitizeStyle, _sanitizeUrl as ɵ_sanitizeUrl, _global as ɵglobal, looseIdentical as ɵlooseIdentical, stringify as ɵstringify, makeDecorator as ɵmakeDecorator, isObservable as ɵisObservable, isPromise as ɵisPromise, clearOverrides as ɵclearOverrides, initServicesIfNeeded as ɵinitServicesIfNeeded, overrideComponentView as ɵoverrideComponentView, overrideProvider as ɵoverrideProvider, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, getLocalePluralCase as ɵgetLocalePluralCase, findLocaleData as ɵfindLocaleData, LOCALE_DATA as ɵLOCALE_DATA, LocaleDataIndex as ɵLocaleDataIndex, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵdefineBase, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefinePipe, ɵɵdefineNgModule, detectChanges as ɵdetectChanges, renderComponent as ɵrenderComponent, ComponentFactory$1 as ɵRender3ComponentFactory, ComponentRef$1 as ɵRender3ComponentRef, ɵɵdirectiveInject, ɵɵinjectAttribute, ɵɵgetFactoryOf, ɵɵgetInheritedFactory, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵtemplateRefExtractor, ɵɵProvidersFeature, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, LifecycleHooksFeature as ɵLifecycleHooksFeature, NgModuleRef$1 as ɵRender3NgModuleRef, markDirty as ɵmarkDirty, NgModuleFactory$1 as ɵNgModuleFactory, NO_CHANGE as ɵNO_CHANGE, ɵɵcontainer, ɵɵnextContext, ɵɵelementStart, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵelement, ɵɵlistener, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵembeddedViewStart, ɵɵprojection, ɵɵinterpolation1, ɵɵinterpolation2, ɵɵinterpolation3, ɵɵinterpolation4, ɵɵinterpolation5, ɵɵinterpolation6, ɵɵinterpolation7, ɵɵinterpolation8, ɵɵinterpolationV, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵgetCurrentView, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, ɵɵrestoreView, ɵɵcontainerRefreshStart, ɵɵcontainerRefreshEnd, ɵɵqueryRefresh, ɵɵviewQuery, ɵɵstaticViewQuery, ɵɵstaticContentQuery, ɵɵloadViewQuery, ɵɵcontentQuery, ɵɵloadContentQuery, ɵɵelementEnd, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵupdateSyntheticHostBinding, ɵɵcomponentHostSyntheticListener, ɵɵprojectionDef, ɵɵreference, ɵɵenableBindings, ɵɵdisableBindings, ɵɵallocHostVars, ɵɵelementContainerStart, ɵɵelementContainerEnd, ɵɵstyling, ɵɵstyleMap, ɵɵclassMap, ɵɵstyleProp, ɵɵstylingApply, ɵɵclassProp, ɵɵelementHostAttrs, ɵɵselect, ɵɵtextBinding, ɵɵtemplate, ɵɵembeddedViewEnd, store as ɵstore, ɵɵload, ɵɵpipe, whenRendered as ɵwhenRendered, ɵɵi18n, ɵɵi18nAttributes, ɵɵi18nExp, ɵɵi18nStart, ɵɵi18nEnd, ɵɵi18nApply, ɵɵi18nPostprocess, i18nConfigureLocalize as ɵi18nConfigureLocalize, ɵɵi18nLocalize, setLocaleId as ɵsetLocaleId, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, setClassMetadata as ɵsetClassMetadata, ɵɵresolveWindow, ɵɵresolveDocument, ɵɵresolveBody, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, patchComponentDefWithScope as ɵpatchComponentDefWithScope, resetCompiledComponents as ɵresetCompiledComponents, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, transitiveScopesFor as ɵtransitiveScopesFor, compilePipe as ɵcompilePipe, ɵɵsanitizeHtml, ɵɵsanitizeStyle, ɵɵdefaultStyleSanitizer, ɵɵsanitizeScript, ɵɵsanitizeUrl, ɵɵsanitizeResourceUrl, ɵɵsanitizeUrlOrResourceUrl, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, getLContext as ɵgetLContext, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_COMPONENT_DEF as ɵNG_COMPONENT_DEF, NG_DIRECTIVE_DEF as ɵNG_DIRECTIVE_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_MODULE_DEF as ɵNG_MODULE_DEF, NG_BASE_DEF as ɵNG_BASE_DEF, NG_INJECTABLE_DEF as ɵNG_INJECTABLE_DEF, NG_INJECTOR_DEF as ɵNG_INJECTOR_DEF, bindPlayerFactory as ɵbindPlayerFactory, addPlayer as ɵaddPlayer, getPlayers as ɵgetPlayers, compileNgModuleFactory__POST_R3__ as ɵcompileNgModuleFactory__POST_R3__, isBoundToModule__POST_R3__ as ɵisBoundToModule__POST_R3__, SWITCH_COMPILE_COMPONENT__POST_R3__ as ɵSWITCH_COMPILE_COMPONENT__POST_R3__, SWITCH_COMPILE_DIRECTIVE__POST_R3__ as ɵSWITCH_COMPILE_DIRECTIVE__POST_R3__, SWITCH_COMPILE_PIPE__POST_R3__ as ɵSWITCH_COMPILE_PIPE__POST_R3__, SWITCH_COMPILE_NGMODULE__POST_R3__ as ɵSWITCH_COMPILE_NGMODULE__POST_R3__, getDebugNode__POST_R3__ as ɵgetDebugNode__POST_R3__, SWITCH_COMPILE_INJECTABLE__POST_R3__ as ɵSWITCH_COMPILE_INJECTABLE__POST_R3__, SWITCH_IVY_ENABLED__POST_R3__ as ɵSWITCH_IVY_ENABLED__POST_R3__, SWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__ as ɵSWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__, Compiler_compileModuleSync__POST_R3__ as ɵCompiler_compileModuleSync__POST_R3__, Compiler_compileModuleAsync__POST_R3__ as ɵCompiler_compileModuleAsync__POST_R3__, Compiler_compileModuleAndAllComponentsSync__POST_R3__ as ɵCompiler_compileModuleAndAllComponentsSync__POST_R3__, Compiler_compileModuleAndAllComponentsAsync__POST_R3__ as ɵCompiler_compileModuleAndAllComponentsAsync__POST_R3__, SWITCH_ELEMENT_REF_FACTORY__POST_R3__ as ɵSWITCH_ELEMENT_REF_FACTORY__POST_R3__, SWITCH_TEMPLATE_REF_FACTORY__POST_R3__ as ɵSWITCH_TEMPLATE_REF_FACTORY__POST_R3__, SWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__ as ɵSWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__, SWITCH_RENDERER2_FACTORY__POST_R3__ as ɵSWITCH_RENDERER2_FACTORY__POST_R3__, getModuleFactory__POST_R3__ as ɵgetModuleFactory__POST_R3__, registerNgModuleType as ɵregisterNgModuleType, publishGlobalUtil as ɵpublishGlobalUtil, publishDefaultGlobalUtils as ɵpublishDefaultGlobalUtils, createInjector as ɵcreateInjector, INJECTOR_IMPL__POST_R3__ as ɵINJECTOR_IMPL__POST_R3__, registerModuleFactory as ɵregisterModuleFactory, EMPTY_ARRAY$3 as ɵEMPTY_ARRAY, EMPTY_MAP as ɵEMPTY_MAP, anchorDef as ɵand, createComponentFactory as ɵccf, createNgModuleFactory as ɵcmf, createRendererType2 as ɵcrt, directiveDef as ɵdid, elementDef as ɵeld, getComponentViewDefinitionFactory as ɵgetComponentViewDefinitionFactory, inlineInterpolate as ɵinlineInterpolate, interpolate as ɵinterpolate, moduleDef as ɵmod, moduleProvideDef as ɵmpd, ngContentDef as ɵncd, nodeValue as ɵnov, pipeDef as ɵpid, providerDef as ɵprd, pureArrayDef as ɵpad, pureObjectDef as ɵpod, purePipeDef as ɵppd, queryDef as ɵqud, textDef as ɵted, unwrapValue as ɵunv, viewDef as ɵvid };
30997
31113
  //# sourceMappingURL=core.js.map