@angular/core 8.1.0-next.3 → 8.1.2

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 (89) hide show
  1. package/bundles/core-testing.umd.js +1 -1
  2. package/bundles/core-testing.umd.min.js +1 -1
  3. package/bundles/core-testing.umd.min.js.map +1 -1
  4. package/bundles/core.umd.js +282 -234
  5. package/bundles/core.umd.js.map +1 -1
  6. package/bundles/core.umd.min.js +61 -61
  7. package/bundles/core.umd.min.js.map +1 -1
  8. package/core.d.ts +218 -233
  9. package/core.metadata.json +1 -1
  10. package/esm2015/index.js +2 -2
  11. package/esm2015/public_api.js +2 -2
  12. package/esm2015/src/change_detection/pipe_transform.js +4 -6
  13. package/esm2015/src/core.js +2 -2
  14. package/esm2015/src/core_render3_private_export.js +2 -2
  15. package/esm2015/src/di/index.js +1 -1
  16. package/esm2015/src/di/injectable.js +1 -1
  17. package/esm2015/src/di/interface/provider.js +1 -1
  18. package/esm2015/src/di/metadata.js +1 -1
  19. package/esm2015/src/event_emitter.js +3 -10
  20. package/esm2015/src/linker/component_factory.js +9 -3
  21. package/esm2015/src/linker/component_factory_resolver.js +9 -2
  22. package/esm2015/src/metadata/di.js +1 -1
  23. package/esm2015/src/metadata/directives.js +4 -3
  24. package/esm2015/src/reflection/reflection_capabilities.js +2 -2
  25. package/esm2015/src/render3/component.js +6 -2
  26. package/esm2015/src/render3/component_ref.js +6 -2
  27. package/esm2015/src/render3/i18n.js +15 -10
  28. package/esm2015/src/render3/index.js +2 -2
  29. package/esm2015/src/render3/instructions/all.js +2 -2
  30. package/esm2015/src/render3/instructions/attribute.js +5 -4
  31. package/esm2015/src/render3/instructions/embedded_view.js +5 -2
  32. package/esm2015/src/render3/instructions/property.js +9 -8
  33. package/esm2015/src/render3/instructions/shared.js +18 -5
  34. package/esm2015/src/render3/instructions/text.js +3 -3
  35. package/esm2015/src/render3/interfaces/container.js +6 -2
  36. package/esm2015/src/render3/interfaces/i18n.js +1 -17
  37. package/esm2015/src/render3/interfaces/node.js +2 -2
  38. package/esm2015/src/render3/interfaces/view.js +2 -2
  39. package/esm2015/src/render3/jit/environment.js +1 -2
  40. package/esm2015/src/render3/node_manipulation.js +212 -191
  41. package/esm2015/src/render3/state.js +6 -3
  42. package/esm2015/src/render3/util/view_traversal_utils.js +7 -2
  43. package/esm2015/src/render3/view_engine_compatibility.js +39 -12
  44. package/esm2015/src/util/assert.js +3 -2
  45. package/esm2015/src/util/decorators.js +1 -1
  46. package/esm2015/src/version.js +1 -1
  47. package/esm5/src/change_detection/pipe_transform.js +1 -1
  48. package/esm5/src/core_render3_private_export.js +2 -2
  49. package/esm5/src/di/index.js +1 -1
  50. package/esm5/src/di/injectable.js +1 -1
  51. package/esm5/src/di/interface/provider.js +1 -1
  52. package/esm5/src/di/metadata.js +1 -1
  53. package/esm5/src/event_emitter.js +3 -10
  54. package/esm5/src/linker/component_factory.js +7 -1
  55. package/esm5/src/linker/component_factory_resolver.js +7 -1
  56. package/esm5/src/metadata/di.js +1 -1
  57. package/esm5/src/metadata/directives.js +4 -3
  58. package/esm5/src/reflection/reflection_capabilities.js +2 -2
  59. package/esm5/src/render3/component.js +5 -2
  60. package/esm5/src/render3/component_ref.js +5 -2
  61. package/esm5/src/render3/i18n.js +11 -7
  62. package/esm5/src/render3/index.js +2 -2
  63. package/esm5/src/render3/instructions/attribute.js +5 -4
  64. package/esm5/src/render3/instructions/embedded_view.js +5 -2
  65. package/esm5/src/render3/instructions/property.js +7 -7
  66. package/esm5/src/render3/instructions/shared.js +15 -5
  67. package/esm5/src/render3/instructions/text.js +3 -3
  68. package/esm5/src/render3/interfaces/container.js +3 -2
  69. package/esm5/src/render3/interfaces/i18n.js +1 -1
  70. package/esm5/src/render3/interfaces/node.js +1 -1
  71. package/esm5/src/render3/interfaces/view.js +1 -1
  72. package/esm5/src/render3/jit/environment.js +1 -2
  73. package/esm5/src/render3/node_manipulation.js +179 -187
  74. package/esm5/src/render3/state.js +6 -3
  75. package/esm5/src/render3/util/view_traversal_utils.js +7 -2
  76. package/esm5/src/render3/view_engine_compatibility.js +32 -12
  77. package/esm5/src/util/assert.js +3 -2
  78. package/esm5/src/util/decorators.js +1 -1
  79. package/esm5/src/version.js +1 -1
  80. package/fesm2015/core.js +335 -242
  81. package/fesm2015/core.js.map +1 -1
  82. package/fesm2015/testing.js +1 -1
  83. package/fesm5/core.js +283 -234
  84. package/fesm5/core.js.map +1 -1
  85. package/fesm5/testing.js +1 -1
  86. package/package.json +1 -1
  87. package/src/r3_symbols.d.ts +73 -90
  88. package/testing/testing.d.ts +1 -1
  89. package/testing.d.ts +1 -1
package/fesm2015/core.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v8.1.0-next.3
2
+ * @license Angular v8.1.2
3
3
  * (c) 2010-2019 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -929,7 +929,7 @@ class ReflectionCapabilities {
929
929
  if (typeof paramTypes === 'undefined') {
930
930
  result[i] = [];
931
931
  }
932
- else if (paramTypes[i] != Object) {
932
+ else if (paramTypes[i] && paramTypes[i] != Object) {
933
933
  result[i] = [paramTypes[i]];
934
934
  }
935
935
  else {
@@ -4893,7 +4893,7 @@ function throwError(msg) {
4893
4893
  function assertDomNode(node) {
4894
4894
  // If we're in a worker, `Node` will not be defined.
4895
4895
  assertEqual((typeof Node !== 'undefined' && node instanceof Node) ||
4896
- (typeof node === 'object' && node.constructor.name === 'WebWorkerRenderNode'), true, 'The provided value must be an instance of a DOM Node');
4896
+ (typeof node === 'object' && node.constructor.name === 'WebWorkerRenderNode'), true, `The provided value must be an instance of a DOM Node but got ${stringify(node)}`);
4897
4897
  }
4898
4898
  function assertDataInRange(arr, index) {
4899
4899
  const maxLen = arr ? arr.length : 0;
@@ -4922,6 +4922,8 @@ const ACTIVE_INDEX = 2;
4922
4922
  // As we already have these constants in LView, we don't need to re-create them.
4923
4923
  /** @type {?} */
4924
4924
  const NATIVE = 7;
4925
+ /** @type {?} */
4926
+ const VIEW_REFS = 8;
4925
4927
  /**
4926
4928
  * Size of LContainer's header. Represents the index after which all views in the
4927
4929
  * container will be inserted. We need to keep a record of current views so we know
@@ -4929,7 +4931,7 @@ const NATIVE = 7;
4929
4931
  * remove views from the DOM when they are no longer required.
4930
4932
  * @type {?}
4931
4933
  */
4932
- const CONTAINER_HEADER_OFFSET = 8;
4934
+ const CONTAINER_HEADER_OFFSET = 9;
4933
4935
 
4934
4936
  /**
4935
4937
  * @fileoverview added by tsickle
@@ -5998,9 +6000,12 @@ function resetComponentState() {
5998
6000
  * the direction of traversal (up or down the view tree) a bit clearer.
5999
6001
  *
6000
6002
  * @param {?} newView New state to become active
6003
+ * @param {?} safeToRunHooks Whether the runtime is in a state where running lifecycle hooks is valid.
6004
+ * This is not always the case (for example, the application may have crashed and `leaveView` is
6005
+ * being executed while unwinding the call stack).
6001
6006
  * @return {?}
6002
6007
  */
6003
- function leaveView(newView) {
6008
+ function leaveView(newView, safeToRunHooks) {
6004
6009
  /** @type {?} */
6005
6010
  const tView = lView[TVIEW];
6006
6011
  if (isCreationMode(lView)) {
@@ -6009,7 +6014,7 @@ function leaveView(newView) {
6009
6014
  else {
6010
6015
  try {
6011
6016
  resetPreOrderHookFlags(lView);
6012
- executeHooks(lView, tView.viewHooks, tView.viewCheckHooks, checkNoChangesMode, 2 /* AfterViewInitHooksToBeRun */, undefined);
6017
+ safeToRunHooks && executeHooks(lView, tView.viewHooks, tView.viewCheckHooks, checkNoChangesMode, 2 /* AfterViewInitHooksToBeRun */, undefined);
6013
6018
  }
6014
6019
  finally {
6015
6020
  // Views are clean and in update mode after being checked, so these bits are cleared
@@ -8306,7 +8311,12 @@ function getRootView(componentOrLView) {
8306
8311
  return lView;
8307
8312
  }
8308
8313
  /**
8309
- * Given a current view, finds the nearest component's host (LElement).
8314
+ * Given an `LView`, find the closest declaration view which is not an embedded view.
8315
+ *
8316
+ * This method searches for the `LView` associated with the component which declared the `LView`.
8317
+ *
8318
+ * This function may return itself if the `LView` passed in is not an embedded `LView`. Otherwise
8319
+ * it walks the declaration parents until it finds a component view (non-embedded-view.)
8310
8320
  *
8311
8321
  * @param {?} lView LView for which we want a host element node
8312
8322
  * @return {?} The host node
@@ -14437,6 +14447,9 @@ function renderEmbeddedTemplate(viewToRender, tView, context) {
14437
14447
  tickRootContext(getRootContext(viewToRender));
14438
14448
  }
14439
14449
  else {
14450
+ // Will become true if the `try` block executes with no errors.
14451
+ /** @type {?} */
14452
+ let safeToRunHooks = false;
14440
14453
  try {
14441
14454
  setPreviousOrParentTNode((/** @type {?} */ (null)), true);
14442
14455
  oldView = enterView(viewToRender, viewToRender[T_HOST]);
@@ -14448,9 +14461,10 @@ function renderEmbeddedTemplate(viewToRender, tView, context) {
14448
14461
  // matching, etc again and again.
14449
14462
  viewToRender[TVIEW].firstTemplatePass = false;
14450
14463
  refreshDescendantViews(viewToRender);
14464
+ safeToRunHooks = true;
14451
14465
  }
14452
14466
  finally {
14453
- leaveView((/** @type {?} */ (oldView)));
14467
+ leaveView((/** @type {?} */ (oldView)), safeToRunHooks);
14454
14468
  setPreviousOrParentTNode(_previousOrParentTNode, _isParent);
14455
14469
  }
14456
14470
  }
@@ -14471,6 +14485,9 @@ function renderComponentOrTemplate(hostView, context, templateFn) {
14471
14485
  const normalExecutionPath = !getCheckNoChangesMode();
14472
14486
  /** @type {?} */
14473
14487
  const creationModeIsActive = isCreationMode(hostView);
14488
+ // Will become true if the `try` block executes with no errors.
14489
+ /** @type {?} */
14490
+ let safeToRunHooks = false;
14474
14491
  try {
14475
14492
  if (normalExecutionPath && !creationModeIsActive && rendererFactory.begin) {
14476
14493
  rendererFactory.begin();
@@ -14485,12 +14502,13 @@ function renderComponentOrTemplate(hostView, context, templateFn) {
14485
14502
  resetPreOrderHookFlags(hostView);
14486
14503
  templateFn && executeTemplate(hostView, templateFn, 2 /* Update */, context);
14487
14504
  refreshDescendantViews(hostView);
14505
+ safeToRunHooks = true;
14488
14506
  }
14489
14507
  finally {
14490
14508
  if (normalExecutionPath && !creationModeIsActive && rendererFactory.end) {
14491
14509
  rendererFactory.end();
14492
14510
  }
14493
- leaveView(oldView);
14511
+ leaveView(oldView, safeToRunHooks);
14494
14512
  }
14495
14513
  }
14496
14514
  /**
@@ -15646,7 +15664,8 @@ function createLContainer(hostNative, currentView, native, tNode, isForViewConta
15646
15664
  null, // next
15647
15665
  null, // queries
15648
15666
  tNode, // t_host
15649
- native);
15667
+ native, // native,
15668
+ null);
15650
15669
  ngDevMode && attachLContainerDebug(lContainer);
15651
15670
  return lContainer;
15652
15671
  }
@@ -15929,6 +15948,9 @@ function checkView(hostView, component) {
15929
15948
  const templateFn = (/** @type {?} */ (hostTView.template));
15930
15949
  /** @type {?} */
15931
15950
  const creationMode = isCreationMode(hostView);
15951
+ // Will become true if the `try` block executes with no errors.
15952
+ /** @type {?} */
15953
+ let safeToRunHooks = false;
15932
15954
  try {
15933
15955
  resetPreOrderHookFlags(hostView);
15934
15956
  creationMode && executeViewQueryFn(1 /* Create */, hostTView, component);
@@ -15938,9 +15960,10 @@ function checkView(hostView, component) {
15938
15960
  if (!creationMode || hostTView.staticViewQueries) {
15939
15961
  executeViewQueryFn(2 /* Update */, hostTView, component);
15940
15962
  }
15963
+ safeToRunHooks = true;
15941
15964
  }
15942
15965
  finally {
15943
- leaveView(oldView);
15966
+ leaveView(oldView, safeToRunHooks);
15944
15967
  }
15945
15968
  }
15946
15969
  /**
@@ -16539,7 +16562,9 @@ function ɵɵproperty(propName, value, sanitizer, nativeOnly) {
16539
16562
  const index = getSelectedIndex();
16540
16563
  ngDevMode && assertNotEqual(index, -1, 'selected index cannot be -1');
16541
16564
  /** @type {?} */
16542
- const bindReconciledValue = ɵɵbind(value);
16565
+ const lView = getLView();
16566
+ /** @type {?} */
16567
+ const bindReconciledValue = bind(lView, value);
16543
16568
  if (bindReconciledValue !== NO_CHANGE) {
16544
16569
  elementPropertyInternal(index, propName, bindReconciledValue, sanitizer, nativeOnly);
16545
16570
  }
@@ -16548,15 +16573,12 @@ function ɵɵproperty(propName, value, sanitizer, nativeOnly) {
16548
16573
  /**
16549
16574
  * Creates a single value binding.
16550
16575
  *
16551
- * \@codeGenApi
16552
16576
  * @template T
16577
+ * @param {?} lView Current view
16553
16578
  * @param {?} value Value to diff
16554
- *
16555
16579
  * @return {?}
16556
16580
  */
16557
- function ɵɵbind(value) {
16558
- /** @type {?} */
16559
- const lView = getLView();
16581
+ function bind(lView, value) {
16560
16582
  /** @type {?} */
16561
16583
  const bindingIndex = lView[BINDING_INDEX]++;
16562
16584
  storeBindingMetadata(lView);
@@ -16589,9 +16611,11 @@ function ɵɵbind(value) {
16589
16611
  function ɵɵupdateSyntheticHostBinding(propName, value, sanitizer, nativeOnly) {
16590
16612
  /** @type {?} */
16591
16613
  const index = getSelectedIndex();
16614
+ /** @type {?} */
16615
+ const lView = getLView();
16592
16616
  // TODO(benlesh): remove bind call here.
16593
16617
  /** @type {?} */
16594
- const bound = ɵɵbind(value);
16618
+ const bound = bind(lView, value);
16595
16619
  if (bound !== NO_CHANGE) {
16596
16620
  elementPropertyInternal(index, propName, bound, sanitizer, nativeOnly, loadComponentRenderer);
16597
16621
  }
@@ -16622,10 +16646,11 @@ function ɵɵattribute(name, value, sanitizer, namespace) {
16622
16646
  const lView = getLView();
16623
16647
  // TODO(FW-1340): Refactor to remove the use of other instructions here.
16624
16648
  /** @type {?} */
16625
- const bound = ɵɵbind(value);
16649
+ const bound = bind(lView, value);
16626
16650
  if (bound !== NO_CHANGE) {
16627
- return elementAttributeInternal(index, name, bound, lView, sanitizer, namespace);
16651
+ elementAttributeInternal(index, name, bound, lView, sanitizer, namespace);
16628
16652
  }
16653
+ return ɵɵattribute;
16629
16654
  }
16630
16655
 
16631
16656
  /**
@@ -17486,191 +17511,48 @@ function getContainerRenderParent(tViewNode, view) {
17486
17511
  const container = getLContainer(tViewNode, view);
17487
17512
  return container ? nativeParentNode(view[RENDERER], container[NATIVE]) : null;
17488
17513
  }
17489
- /**
17490
- * Stack used to keep track of projection nodes in walkTNodeTree.
17491
- *
17492
- * This is deliberately created outside of walkTNodeTree to avoid allocating
17493
- * a new array each time the function is called. Instead the array will be
17494
- * re-used by each invocation. This works because the function is not reentrant.
17495
- * @type {?}
17496
- */
17497
- const projectionNodeStack = [];
17498
- /**
17499
- * Walks a tree of TNodes, applying a transformation on the element nodes, either only on the first
17500
- * one found, or on all of them.
17501
- *
17502
- * @param {?} viewToWalk the view to walk
17503
- * @param {?} action identifies the action to be performed on the elements
17504
- * @param {?} renderer the current renderer.
17505
- * @param {?} renderParent Optional the render parent node to be set in all LContainers found,
17506
- * required for action modes Insert and Destroy.
17507
- * @param {?=} beforeNode Optional the node before which elements should be added, required for action
17508
- * Insert.
17509
- * @return {?}
17510
- */
17511
- function walkTNodeTree(viewToWalk, action, renderer, renderParent, beforeNode) {
17512
- /** @type {?} */
17513
- const rootTNode = (/** @type {?} */ (viewToWalk[TVIEW].node));
17514
- /** @type {?} */
17515
- let projectionNodeIndex = -1;
17516
- /** @type {?} */
17517
- let currentView = viewToWalk;
17518
- /** @type {?} */
17519
- let tNode = (/** @type {?} */ (rootTNode.child));
17520
- while (tNode) {
17521
- /** @type {?} */
17522
- let nextTNode = null;
17523
- if (tNode.type === 3 /* Element */ || tNode.type === 4 /* ElementContainer */) {
17524
- executeNodeAction(action, renderer, renderParent, getNativeByTNode(tNode, currentView), tNode, beforeNode);
17525
- /** @type {?} */
17526
- const nodeOrContainer = currentView[tNode.index];
17527
- if (isLContainer(nodeOrContainer)) {
17528
- // This element has an LContainer, and its comment needs to be handled
17529
- executeNodeAction(action, renderer, renderParent, nodeOrContainer[NATIVE], tNode, beforeNode);
17530
- /** @type {?} */
17531
- const firstView = nodeOrContainer[CONTAINER_HEADER_OFFSET];
17532
- if (firstView) {
17533
- currentView = firstView;
17534
- nextTNode = currentView[TVIEW].node;
17535
- // When the walker enters a container, then the beforeNode has to become the local native
17536
- // comment node.
17537
- beforeNode = nodeOrContainer[NATIVE];
17538
- }
17539
- }
17540
- }
17541
- else if (tNode.type === 0 /* Container */) {
17542
- /** @type {?} */
17543
- const lContainer = (/** @type {?} */ ((/** @type {?} */ (currentView))[tNode.index]));
17544
- executeNodeAction(action, renderer, renderParent, lContainer[NATIVE], tNode, beforeNode);
17545
- /** @type {?} */
17546
- const firstView = lContainer[CONTAINER_HEADER_OFFSET];
17547
- if (firstView) {
17548
- currentView = firstView;
17549
- nextTNode = currentView[TVIEW].node;
17550
- // When the walker enters a container, then the beforeNode has to become the local native
17551
- // comment node.
17552
- beforeNode = lContainer[NATIVE];
17553
- }
17554
- }
17555
- else if (tNode.type === 1 /* Projection */) {
17556
- /** @type {?} */
17557
- const componentView = findComponentView((/** @type {?} */ (currentView)));
17558
- /** @type {?} */
17559
- const componentHost = (/** @type {?} */ (componentView[T_HOST]));
17560
- /** @type {?} */
17561
- const head = ((/** @type {?} */ (componentHost.projection)))[(/** @type {?} */ (tNode.projection))];
17562
- if (Array.isArray(head)) {
17563
- for (let nativeNode of head) {
17564
- executeNodeAction(action, renderer, renderParent, nativeNode, tNode, beforeNode);
17565
- }
17566
- }
17567
- else {
17568
- // Must store both the TNode and the view because this projection node could be nested
17569
- // deeply inside embedded views, and we need to get back down to this particular nested
17570
- // view.
17571
- projectionNodeStack[++projectionNodeIndex] = tNode;
17572
- projectionNodeStack[++projectionNodeIndex] = (/** @type {?} */ (currentView));
17573
- if (head) {
17574
- currentView = (/** @type {?} */ ((/** @type {?} */ (componentView[PARENT]))));
17575
- nextTNode = (/** @type {?} */ (currentView[TVIEW].data[head.index]));
17576
- }
17577
- }
17578
- }
17579
- else {
17580
- // Otherwise, this is a View
17581
- nextTNode = tNode.child;
17582
- }
17583
- if (nextTNode === null) {
17584
- // this last node was projected, we need to get back down to its projection node
17585
- if (tNode.projectionNext === null && (tNode.flags & 2 /* isProjected */)) {
17586
- currentView = (/** @type {?} */ (projectionNodeStack[projectionNodeIndex--]));
17587
- tNode = (/** @type {?} */ (projectionNodeStack[projectionNodeIndex--]));
17588
- }
17589
- if (tNode.flags & 2 /* isProjected */) {
17590
- nextTNode = tNode.projectionNext;
17591
- }
17592
- else if (tNode.type === 4 /* ElementContainer */) {
17593
- nextTNode = tNode.child || tNode.next;
17594
- }
17595
- else {
17596
- nextTNode = tNode.next;
17597
- }
17598
- /**
17599
- * Find the next node in the TNode tree, taking into account the place where a node is
17600
- * projected (in the shadow DOM) rather than where it comes from (in the light DOM).
17601
- *
17602
- * If there is no sibling node, then it goes to the next sibling of the parent node...
17603
- * until it reaches rootNode (at which point null is returned).
17604
- */
17605
- while (!nextTNode) {
17606
- // If parent is null, we're crossing the view boundary, so we should get the host TNode.
17607
- tNode = tNode.parent || currentView[T_HOST];
17608
- if (tNode === null || tNode === rootTNode)
17609
- return;
17610
- // When exiting a container, the beforeNode must be restored to the previous value
17611
- if (tNode.type === 0 /* Container */) {
17612
- currentView = (/** @type {?} */ (getLViewParent(currentView)));
17613
- beforeNode = currentView[tNode.index][NATIVE];
17614
- }
17615
- if (tNode.type === 2 /* View */) {
17616
- /**
17617
- * If current lView doesn't have next pointer, we try to find it by going up parents
17618
- * chain until:
17619
- * - we find an lView with a next pointer
17620
- * - or find a tNode with a parent that has a next pointer
17621
- * - or find a lContainer
17622
- * - or reach root TNode (in which case we exit, since we traversed all nodes)
17623
- */
17624
- while (!currentView[NEXT] && currentView[PARENT] &&
17625
- !(tNode.parent && tNode.parent.next)) {
17626
- if (tNode === rootTNode)
17627
- return;
17628
- currentView = (/** @type {?} */ (currentView[PARENT]));
17629
- if (isLContainer(currentView)) {
17630
- tNode = (/** @type {?} */ (currentView[T_HOST]));
17631
- currentView = currentView[PARENT];
17632
- beforeNode = currentView[tNode.index][NATIVE];
17633
- break;
17634
- }
17635
- tNode = (/** @type {?} */ (currentView[T_HOST]));
17636
- }
17637
- if (currentView[NEXT]) {
17638
- currentView = (/** @type {?} */ (currentView[NEXT]));
17639
- nextTNode = currentView[T_HOST];
17640
- }
17641
- else {
17642
- nextTNode = tNode.type === 4 /* ElementContainer */ && tNode.child || tNode.next;
17643
- }
17644
- }
17645
- else {
17646
- nextTNode = tNode.next;
17647
- }
17648
- }
17649
- }
17650
- tNode = nextTNode;
17651
- }
17652
- }
17653
17514
  /**
17654
17515
  * NOTE: for performance reasons, the possible actions are inlined within the function instead of
17655
17516
  * being passed as an argument.
17656
17517
  * @param {?} action
17657
17518
  * @param {?} renderer
17658
17519
  * @param {?} parent
17659
- * @param {?} node
17660
- * @param {?} tNode
17520
+ * @param {?} lNodeToHandle
17661
17521
  * @param {?=} beforeNode
17662
17522
  * @return {?}
17663
17523
  */
17664
- function executeNodeAction(action, renderer, parent, node, tNode, beforeNode) {
17524
+ function executeActionOnElementOrContainer(action, renderer, parent, lNodeToHandle, beforeNode) {
17525
+ ngDevMode && assertDefined(lNodeToHandle, '\'lNodeToHandle\' is undefined');
17526
+ /** @type {?} */
17527
+ let lContainer;
17528
+ /** @type {?} */
17529
+ let isComponent = false;
17530
+ // We are expecting an RNode, but in the case of a component or LContainer the `RNode` is wrapped
17531
+ // in an array which needs to be unwrapped. We need to know if it is a component and if
17532
+ // it has LContainer so that we can process all of those cases appropriately.
17533
+ if (isLContainer(lNodeToHandle)) {
17534
+ lContainer = lNodeToHandle;
17535
+ }
17536
+ else if (isLView(lNodeToHandle)) {
17537
+ isComponent = true;
17538
+ ngDevMode && assertDefined(lNodeToHandle[HOST], 'HOST must be defined for a component LView');
17539
+ lNodeToHandle = (/** @type {?} */ (lNodeToHandle[HOST]));
17540
+ }
17541
+ /** @type {?} */
17542
+ const rNode = unwrapRNode(lNodeToHandle);
17543
+ ngDevMode && assertDomNode(rNode);
17665
17544
  if (action === 0 /* Insert */) {
17666
- nativeInsertBefore(renderer, (/** @type {?} */ (parent)), node, beforeNode || null);
17545
+ nativeInsertBefore(renderer, (/** @type {?} */ (parent)), rNode, beforeNode || null);
17667
17546
  }
17668
17547
  else if (action === 1 /* Detach */) {
17669
- nativeRemoveNode(renderer, node, isComponent(tNode));
17548
+ nativeRemoveNode(renderer, rNode, isComponent);
17670
17549
  }
17671
17550
  else if (action === 2 /* Destroy */) {
17672
17551
  ngDevMode && ngDevMode.rendererDestroyNode++;
17673
- (/** @type {?} */ (((/** @type {?} */ (renderer))).destroyNode))(node);
17552
+ (/** @type {?} */ (((/** @type {?} */ (renderer))).destroyNode))(rNode);
17553
+ }
17554
+ if (lContainer != null) {
17555
+ executeActionOnContainer(renderer, action, lContainer, parent, beforeNode);
17674
17556
  }
17675
17557
  }
17676
17558
  /**
@@ -17683,19 +17565,21 @@ function createTextNode(value, renderer) {
17683
17565
  renderer.createTextNode(renderStringify(value));
17684
17566
  }
17685
17567
  /**
17686
- * @param {?} viewToWalk
17568
+ * @param {?} lView
17687
17569
  * @param {?} insertMode
17688
17570
  * @param {?=} beforeNode
17689
17571
  * @return {?}
17690
17572
  */
17691
- function addRemoveViewFromContainer(viewToWalk, insertMode, beforeNode) {
17573
+ function addRemoveViewFromContainer(lView, insertMode, beforeNode) {
17692
17574
  /** @type {?} */
17693
- const renderParent = getContainerRenderParent((/** @type {?} */ (viewToWalk[TVIEW].node)), viewToWalk);
17694
- ngDevMode && assertNodeType((/** @type {?} */ (viewToWalk[TVIEW].node)), 2 /* View */);
17575
+ const renderParent = getContainerRenderParent((/** @type {?} */ (lView[TVIEW].node)), lView);
17576
+ ngDevMode && assertNodeType((/** @type {?} */ (lView[TVIEW].node)), 2 /* View */);
17695
17577
  if (renderParent) {
17696
17578
  /** @type {?} */
17697
- const renderer = viewToWalk[RENDERER];
17698
- walkTNodeTree(viewToWalk, insertMode ? 0 /* Insert */ : 1 /* Detach */, renderer, renderParent, beforeNode);
17579
+ const renderer = lView[RENDERER];
17580
+ /** @type {?} */
17581
+ const action = insertMode ? 0 /* Insert */ : 1 /* Detach */;
17582
+ executeActionOnView(renderer, action, lView, renderParent, beforeNode);
17699
17583
  }
17700
17584
  }
17701
17585
  /**
@@ -17705,7 +17589,7 @@ function addRemoveViewFromContainer(viewToWalk, insertMode, beforeNode) {
17705
17589
  * @return {?}
17706
17590
  */
17707
17591
  function renderDetachView(lView) {
17708
- walkTNodeTree(lView, 1 /* Detach */, lView[RENDERER], null);
17592
+ executeActionOnView(lView[RENDERER], 1 /* Detach */, lView, null, null);
17709
17593
  }
17710
17594
  /**
17711
17595
  * Traverses down and up the tree of views and containers to remove listeners and
@@ -17846,17 +17730,17 @@ function removeView(lContainer, removeIndex) {
17846
17730
  * A standalone function which destroys an LView,
17847
17731
  * conducting cleanup (e.g. removing listeners, calling onDestroys).
17848
17732
  *
17849
- * @param {?} view The view to be destroyed.
17733
+ * @param {?} lView The view to be destroyed.
17850
17734
  * @return {?}
17851
17735
  */
17852
- function destroyLView(view) {
17853
- if (!(view[FLAGS] & 256 /* Destroyed */)) {
17736
+ function destroyLView(lView) {
17737
+ if (!(lView[FLAGS] & 256 /* Destroyed */)) {
17854
17738
  /** @type {?} */
17855
- const renderer = view[RENDERER];
17739
+ const renderer = lView[RENDERER];
17856
17740
  if (isProceduralRenderer(renderer) && renderer.destroyNode) {
17857
- walkTNodeTree(view, 2 /* Destroy */, renderer, null);
17741
+ executeActionOnView(renderer, 2 /* Destroy */, lView, null, null);
17858
17742
  }
17859
- destroyViewTree(view);
17743
+ destroyViewTree(lView);
17860
17744
  }
17861
17745
  }
17862
17746
  /**
@@ -17926,8 +17810,8 @@ function cleanUpView(view) {
17926
17810
  */
17927
17811
  function removeListeners(lView) {
17928
17812
  /** @type {?} */
17929
- const tCleanup = (/** @type {?} */ (lView[TVIEW].cleanup));
17930
- if (tCleanup != null) {
17813
+ const tCleanup = lView[TVIEW].cleanup;
17814
+ if (tCleanup !== null) {
17931
17815
  /** @type {?} */
17932
17816
  const lCleanup = (/** @type {?} */ (lView[CLEANUP]));
17933
17817
  for (let i = 0; i < tCleanup.length - 1; i += 2) {
@@ -18123,7 +18007,7 @@ function nativeAppendChild(renderer, parent, child) {
18123
18007
  * @return {?}
18124
18008
  */
18125
18009
  function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode) {
18126
- if (beforeNode) {
18010
+ if (beforeNode !== null) {
18127
18011
  nativeInsertBefore(renderer, parent, child, beforeNode);
18128
18012
  }
18129
18013
  else {
@@ -18239,6 +18123,7 @@ function getBeforeNodeForView(viewIndexInContainer, lContainer) {
18239
18123
  if (nextViewIndex < lContainer.length) {
18240
18124
  /** @type {?} */
18241
18125
  const lView = (/** @type {?} */ (lContainer[nextViewIndex]));
18126
+ ngDevMode && assertDefined(lView[T_HOST], 'Missing Host TNode');
18242
18127
  /** @type {?} */
18243
18128
  const tViewNodeChild = ((/** @type {?} */ (lView[T_HOST]))).child;
18244
18129
  return tViewNodeChild !== null ? getNativeByTNode(tViewNodeChild, lView) : lContainer[NATIVE];
@@ -18267,7 +18152,7 @@ function nativeRemoveNode(renderer, rNode, isHostElement) {
18267
18152
  /**
18268
18153
  * Appends nodes to a target projection place. Nodes to insert were previously re-distribution and
18269
18154
  * stored on a component host level.
18270
- * @param {?} lView A LView where nodes are inserted (target VLview)
18155
+ * @param {?} lView A LView where nodes are inserted (target LView)
18271
18156
  * @param {?} tProjectionNode A projection node where previously re-distribution should be appended
18272
18157
  * (target insertion place)
18273
18158
  * @param {?} selectorIndex A bucket from where nodes to project should be taken
@@ -18362,6 +18247,166 @@ function appendProjectedNode(projectedTNode, tProjectionNode, currentView, proje
18362
18247
  }
18363
18248
  }
18364
18249
  }
18250
+ /**
18251
+ * `executeActionOnView` performs an operation on the view as specified in `action` (insert, detach,
18252
+ * destroy)
18253
+ *
18254
+ * Inserting a view without projection or containers at top level is simple. Just iterate over the
18255
+ * root nodes of the View, and for each node perform the `action`.
18256
+ *
18257
+ * Things get more complicated with containers and projections. That is because coming across:
18258
+ * - Container: implies that we have to insert/remove/destroy the views of that container as well
18259
+ * which in turn can have their own Containers at the View roots.
18260
+ * - Projection: implies that we have to insert/remove/destroy the nodes of the projection. The
18261
+ * complication is that the nodes we are projecting can themselves have Containers
18262
+ * or other Projections.
18263
+ *
18264
+ * As you can see this is a very recursive problem. While the recursive implementation is not the
18265
+ * most efficient one, trying to unroll the nodes non-recursively results in very complex code that
18266
+ * is very hard (to maintain). We are sacrificing a bit of performance for readability using a
18267
+ * recursive implementation.
18268
+ *
18269
+ * @param {?} renderer Renderer to use
18270
+ * @param {?} action action to perform (insert, detach, destroy)
18271
+ * @param {?} lView The LView which needs to be inserted, detached, destroyed.
18272
+ * @param {?} renderParent parent DOM element for insertion/removal.
18273
+ * @param {?} beforeNode Before which node the insertions should happen.
18274
+ * @return {?}
18275
+ */
18276
+ function executeActionOnView(renderer, action, lView, renderParent, beforeNode) {
18277
+ /** @type {?} */
18278
+ const tView = lView[TVIEW];
18279
+ ngDevMode && assertNodeType((/** @type {?} */ (tView.node)), 2 /* View */);
18280
+ /** @type {?} */
18281
+ let viewRootTNode = (/** @type {?} */ (tView.node)).child;
18282
+ while (viewRootTNode !== null) {
18283
+ executeActionOnNode(renderer, action, lView, viewRootTNode, renderParent, beforeNode);
18284
+ viewRootTNode = viewRootTNode.next;
18285
+ }
18286
+ }
18287
+ /**
18288
+ * `executeActionOnProjection` performs an operation on the projection specified by `action`
18289
+ * (insert, detach, destroy).
18290
+ *
18291
+ * Inserting a projection requires us to locate the projected nodes from the parent component. The
18292
+ * complication is that those nodes themselves could be re-projected from their parent component.
18293
+ *
18294
+ * @param {?} renderer Renderer to use
18295
+ * @param {?} action action to perform (insert, detach, destroy)
18296
+ * @param {?} lView The LView which needs to be inserted, detached, destroyed.
18297
+ * @param {?} tProjectionNode
18298
+ * @param {?} renderParent parent DOM element for insertion/removal.
18299
+ * @param {?} beforeNode Before which node the insertions should happen.
18300
+ * @return {?}
18301
+ */
18302
+ function executeActionOnProjection(renderer, action, lView, tProjectionNode, renderParent, beforeNode) {
18303
+ /** @type {?} */
18304
+ const componentLView = findComponentView(lView);
18305
+ /** @type {?} */
18306
+ const componentNode = (/** @type {?} */ (componentLView[T_HOST]));
18307
+ /** @type {?} */
18308
+ const nodeToProject = (/** @type {?} */ ((/** @type {?} */ (componentNode.projection))[tProjectionNode.projection]));
18309
+ if (Array.isArray(nodeToProject)) {
18310
+ for (let i = 0; i < nodeToProject.length; i++) {
18311
+ /** @type {?} */
18312
+ const rNode = nodeToProject[i];
18313
+ ngDevMode && assertDomNode(rNode);
18314
+ executeActionOnElementOrContainer(action, renderer, renderParent, rNode, beforeNode);
18315
+ }
18316
+ }
18317
+ else {
18318
+ /** @type {?} */
18319
+ let projectionTNode = nodeToProject;
18320
+ /** @type {?} */
18321
+ const projectedComponentLView = (/** @type {?} */ (componentLView[PARENT]));
18322
+ while (projectionTNode !== null) {
18323
+ executeActionOnNode(renderer, action, projectedComponentLView, projectionTNode, renderParent, beforeNode);
18324
+ projectionTNode = projectionTNode.projectionNext;
18325
+ }
18326
+ }
18327
+ }
18328
+ /**
18329
+ * `executeActionOnContainer` performs an operation on the container and its views as specified by
18330
+ * `action` (insert, detach, destroy)
18331
+ *
18332
+ * Inserting a Container is complicated by the fact that the container may have Views which
18333
+ * themselves have containers or projections.
18334
+ *
18335
+ * @param {?} renderer Renderer to use
18336
+ * @param {?} action action to perform (insert, detach, destroy)
18337
+ * @param {?} lContainer The LContainer which needs to be inserted, detached, destroyed.
18338
+ * @param {?} renderParent parent DOM element for insertion/removal.
18339
+ * @param {?} beforeNode Before which node the insertions should happen.
18340
+ * @return {?}
18341
+ */
18342
+ function executeActionOnContainer(renderer, action, lContainer, renderParent, beforeNode) {
18343
+ ngDevMode && assertLContainer(lContainer);
18344
+ /** @type {?} */
18345
+ const anchor = lContainer[NATIVE];
18346
+ // LContainer has its own before node.
18347
+ /** @type {?} */
18348
+ const native = unwrapRNode(lContainer);
18349
+ // An LContainer can be created dynamically on any node by injecting ViewContainerRef.
18350
+ // Asking for a ViewContainerRef on an element will result in a creation of a separate anchor node
18351
+ // (comment in the DOM) that will be different from the LContainer's host node. In this particular
18352
+ // case we need to execute action on 2 nodes:
18353
+ // - container's host node (this is done in the executeNodeAction)
18354
+ // - container's host node (this is done here)
18355
+ if (anchor !== native) {
18356
+ executeActionOnElementOrContainer(action, renderer, renderParent, anchor, beforeNode);
18357
+ }
18358
+ for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
18359
+ /** @type {?} */
18360
+ const lView = (/** @type {?} */ (lContainer[i]));
18361
+ executeActionOnView(renderer, action, lView, renderParent, anchor);
18362
+ }
18363
+ }
18364
+ /**
18365
+ * `executeActionOnElementContainer` performs an operation on the ng-container node and its child
18366
+ * nodes as specified by the `action` (insert, detach, destroy).
18367
+ *
18368
+ * @param {?} renderer Renderer to use
18369
+ * @param {?} action action to perform (insert, detach, destroy)
18370
+ * @param {?} lView The LView which needs to be inserted, detached, destroyed.
18371
+ * @param {?} tElementContainerNode The TNode associated with the ElementContainer.
18372
+ * @param {?} renderParent parent DOM element for insertion/removal.
18373
+ * @param {?} beforeNode Before which node the insertions should happen.
18374
+ * @return {?}
18375
+ */
18376
+ function executeActionOnElementContainer(renderer, action, lView, tElementContainerNode, renderParent, beforeNode) {
18377
+ /** @type {?} */
18378
+ const node = lView[tElementContainerNode.index];
18379
+ executeActionOnElementOrContainer(action, renderer, renderParent, node, beforeNode);
18380
+ /** @type {?} */
18381
+ let childTNode = tElementContainerNode.child;
18382
+ while (childTNode) {
18383
+ executeActionOnNode(renderer, action, lView, childTNode, renderParent, beforeNode);
18384
+ childTNode = childTNode.next;
18385
+ }
18386
+ }
18387
+ /**
18388
+ * @param {?} renderer
18389
+ * @param {?} action
18390
+ * @param {?} lView
18391
+ * @param {?} tNode
18392
+ * @param {?} renderParent
18393
+ * @param {?} beforeNode
18394
+ * @return {?}
18395
+ */
18396
+ function executeActionOnNode(renderer, action, lView, tNode, renderParent, beforeNode) {
18397
+ /** @type {?} */
18398
+ const elementContainerRootTNodeType = tNode.type;
18399
+ if (elementContainerRootTNodeType === 4 /* ElementContainer */) {
18400
+ executeActionOnElementContainer(renderer, action, lView, (/** @type {?} */ (tNode)), renderParent, beforeNode);
18401
+ }
18402
+ else if (elementContainerRootTNodeType === 1 /* Projection */) {
18403
+ executeActionOnProjection(renderer, action, lView, (/** @type {?} */ (tNode)), renderParent, beforeNode);
18404
+ }
18405
+ else {
18406
+ ngDevMode && assertNodeOfPossibleTypes(tNode, 3 /* Element */, 0 /* Container */);
18407
+ executeActionOnElementOrContainer(action, renderer, renderParent, lView[tNode.index], beforeNode);
18408
+ }
18409
+ }
18365
18410
 
18366
18411
  /**
18367
18412
  * @fileoverview added by tsickle
@@ -19846,7 +19891,10 @@ function ɵɵembeddedViewEnd() {
19846
19891
  /** @type {?} */
19847
19892
  const lContainer = (/** @type {?} */ (lView[PARENT]));
19848
19893
  ngDevMode && assertLContainerOrUndefined(lContainer);
19849
- leaveView((/** @type {?} */ (lContainer[PARENT])));
19894
+ // It's always safe to run hooks here, as `leaveView` is not called during the 'finally' block
19895
+ // of a try-catch-finally statement, so it can never be reached while unwinding the stack due to
19896
+ // an error being thrown.
19897
+ leaveView((/** @type {?} */ (lContainer[PARENT])), /* safeToRunHooks */ true);
19850
19898
  setPreviousOrParentTNode((/** @type {?} */ (viewHost)), false);
19851
19899
  }
19852
19900
 
@@ -20816,7 +20864,7 @@ function ɵɵtextBinding(value) {
20816
20864
  /** @type {?} */
20817
20865
  const index = getSelectedIndex();
20818
20866
  /** @type {?} */
20819
- const bound = ɵɵbind(value);
20867
+ const bound = bind(lView, value);
20820
20868
  if (bound !== NO_CHANGE) {
20821
20869
  textBindingInternal(lView, index, renderStringify(bound));
20822
20870
  }
@@ -21735,6 +21783,9 @@ function renderComponent(componentType /* Type as workaround for: Microsoft/Type
21735
21783
  const oldView = enterView(rootView, null);
21736
21784
  /** @type {?} */
21737
21785
  let component;
21786
+ // Will become true if the `try` block executes with no errors.
21787
+ /** @type {?} */
21788
+ let safeToRunHooks = false;
21738
21789
  try {
21739
21790
  if (rendererFactory.begin)
21740
21791
  rendererFactory.begin();
@@ -21746,9 +21797,10 @@ function renderComponent(componentType /* Type as workaround for: Microsoft/Type
21746
21797
  rootView[FLAGS] &= ~4 /* CreationMode */;
21747
21798
  resetPreOrderHookFlags(rootView);
21748
21799
  refreshDescendantViews(rootView); // update mode pass
21800
+ safeToRunHooks = true;
21749
21801
  }
21750
21802
  finally {
21751
- leaveView(oldView);
21803
+ leaveView(oldView, safeToRunHooks);
21752
21804
  if (rendererFactory.end)
21753
21805
  rendererFactory.end();
21754
21806
  }
@@ -22625,6 +22677,12 @@ function ɵɵProvidersFeature(providers, viewProviders = []) {
22625
22677
  class ComponentRef {
22626
22678
  }
22627
22679
  /**
22680
+ * Base class for a factory that can create a component dynamically.
22681
+ * Instantiate a factory for a given type of component with `resolveComponentFactory()`.
22682
+ * Use the resulting `ComponentFactory.create()` method to create a component of that type.
22683
+ *
22684
+ * @see [Dynamic Components](guide/dynamic-component-loader)
22685
+ *
22628
22686
  * \@publicApi
22629
22687
  * @abstract
22630
22688
  * @template C
@@ -22659,6 +22717,12 @@ class _NullComponentFactoryResolver {
22659
22717
  }
22660
22718
  }
22661
22719
  /**
22720
+ * A simple registry that maps `Components` to generated `ComponentFactory` classes
22721
+ * that can be used to create instances of components.
22722
+ * Use to obtain the factory for a given component type,
22723
+ * then use the factory's `create()` method to create a component of that type.
22724
+ *
22725
+ * @see [Dynamic Components](guide/dynamic-component-loader)
22662
22726
  * \@publicApi
22663
22727
  * @abstract
22664
22728
  */
@@ -23247,7 +23311,6 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
23247
23311
  this._lContainer = _lContainer;
23248
23312
  this._hostTNode = _hostTNode;
23249
23313
  this._hostView = _hostView;
23250
- this._viewRefs = [];
23251
23314
  }
23252
23315
  /**
23253
23316
  * @return {?}
@@ -23286,7 +23349,9 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
23286
23349
  * @param {?} index
23287
23350
  * @return {?}
23288
23351
  */
23289
- get(index) { return this._viewRefs[index] || null; }
23352
+ get(index) {
23353
+ return this._lContainer[VIEW_REFS] !== null && (/** @type {?} */ (this._lContainer[VIEW_REFS]))[index] || null;
23354
+ }
23290
23355
  /**
23291
23356
  * @return {?}
23292
23357
  */
@@ -23305,13 +23370,14 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
23305
23370
  * @return {?}
23306
23371
  */
23307
23372
  createEmbeddedView(templateRef, context, index) {
23373
+ this.allocateContainerIfNeeded();
23308
23374
  /** @type {?} */
23309
23375
  const adjustedIdx = this._adjustIndex(index);
23310
23376
  /** @type {?} */
23311
23377
  const viewRef = ((/** @type {?} */ (templateRef)))
23312
23378
  .createEmbeddedView(context || (/** @type {?} */ ({})), this._lContainer, adjustedIdx);
23313
23379
  ((/** @type {?} */ (viewRef))).attachToViewContainerRef(this);
23314
- this._viewRefs.splice(adjustedIdx, 0, viewRef);
23380
+ (/** @type {?} */ (this._lContainer[VIEW_REFS])).splice(adjustedIdx, 0, viewRef);
23315
23381
  return viewRef;
23316
23382
  }
23317
23383
  /**
@@ -23343,6 +23409,7 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
23343
23409
  if (viewRef.destroyed) {
23344
23410
  throw new Error('Cannot insert a destroyed View in a ViewContainer!');
23345
23411
  }
23412
+ this.allocateContainerIfNeeded();
23346
23413
  /** @type {?} */
23347
23414
  const lView = (/** @type {?} */ (((/** @type {?} */ (viewRef)))._lView));
23348
23415
  /** @type {?} */
@@ -23357,7 +23424,7 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
23357
23424
  const beforeNode = getBeforeNodeForView(adjustedIdx, this._lContainer);
23358
23425
  addRemoveViewFromContainer(lView, true, beforeNode);
23359
23426
  ((/** @type {?} */ (viewRef))).attachToViewContainerRef(this);
23360
- this._viewRefs.splice(adjustedIdx, 0, viewRef);
23427
+ (/** @type {?} */ (this._lContainer[VIEW_REFS])).splice(adjustedIdx, 0, viewRef);
23361
23428
  return viewRef;
23362
23429
  }
23363
23430
  /**
@@ -23380,28 +23447,34 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
23380
23447
  * @param {?} viewRef
23381
23448
  * @return {?}
23382
23449
  */
23383
- indexOf(viewRef) { return this._viewRefs.indexOf(viewRef); }
23450
+ indexOf(viewRef) {
23451
+ return this._lContainer[VIEW_REFS] !== null ?
23452
+ (/** @type {?} */ (this._lContainer[VIEW_REFS])).indexOf(viewRef) :
23453
+ 0;
23454
+ }
23384
23455
  /**
23385
23456
  * @param {?=} index
23386
23457
  * @return {?}
23387
23458
  */
23388
23459
  remove(index) {
23460
+ this.allocateContainerIfNeeded();
23389
23461
  /** @type {?} */
23390
23462
  const adjustedIdx = this._adjustIndex(index, -1);
23391
23463
  removeView(this._lContainer, adjustedIdx);
23392
- this._viewRefs.splice(adjustedIdx, 1);
23464
+ (/** @type {?} */ (this._lContainer[VIEW_REFS])).splice(adjustedIdx, 1);
23393
23465
  }
23394
23466
  /**
23395
23467
  * @param {?=} index
23396
23468
  * @return {?}
23397
23469
  */
23398
23470
  detach(index) {
23471
+ this.allocateContainerIfNeeded();
23399
23472
  /** @type {?} */
23400
23473
  const adjustedIdx = this._adjustIndex(index, -1);
23401
23474
  /** @type {?} */
23402
23475
  const view = detachView(this._lContainer, adjustedIdx);
23403
23476
  /** @type {?} */
23404
- const wasDetached = view && this._viewRefs.splice(adjustedIdx, 1)[0] != null;
23477
+ const wasDetached = view && (/** @type {?} */ (this._lContainer[VIEW_REFS])).splice(adjustedIdx, 1)[0] != null;
23405
23478
  return wasDetached ? new ViewRef((/** @type {?} */ (view)), (/** @type {?} */ (view))[CONTEXT], -1) : null;
23406
23479
  }
23407
23480
  /**
@@ -23421,6 +23494,15 @@ function createContainerRef(ViewContainerRefToken, ElementRefToken, hostTNode, h
23421
23494
  }
23422
23495
  return index;
23423
23496
  }
23497
+ /**
23498
+ * @private
23499
+ * @return {?}
23500
+ */
23501
+ allocateContainerIfNeeded() {
23502
+ if (this._lContainer[VIEW_REFS] === null) {
23503
+ this._lContainer[VIEW_REFS] = [];
23504
+ }
23505
+ }
23424
23506
  };
23425
23507
  }
23426
23508
  ngDevMode && assertNodeOfPossibleTypes(hostTNode, 0 /* Container */, 3 /* Element */, 4 /* ElementContainer */);
@@ -23499,6 +23581,7 @@ function createViewRef(hostTNode, hostView, context) {
23499
23581
  return (/** @type {?} */ (null));
23500
23582
  }
23501
23583
  /**
23584
+ * Returns a Renderer2 (or throws when application was bootstrapped with Renderer3)
23502
23585
  * @param {?} view
23503
23586
  * @return {?}
23504
23587
  */
@@ -23513,11 +23596,19 @@ function getOrCreateRenderer2(view) {
23513
23596
  }
23514
23597
  }
23515
23598
  /**
23516
- * Returns a Renderer2 (or throws when application was bootstrapped with Renderer3)
23599
+ * Injects a Renderer2 for the current component.
23517
23600
  * @return {?}
23518
23601
  */
23519
23602
  function injectRenderer2() {
23520
- return getOrCreateRenderer2(getLView());
23603
+ // We need the Renderer to be based on the component that it's being injected into, however since
23604
+ // DI happens before we've entered its view, `getLView` will return the parent view instead.
23605
+ /** @type {?} */
23606
+ const lView = getLView();
23607
+ /** @type {?} */
23608
+ const tNode = getPreviousOrParentTNode();
23609
+ /** @type {?} */
23610
+ const nodeAtIndex = getComponentViewByIndex(tNode.index, lView);
23611
+ return getOrCreateRenderer2(isLView(nodeAtIndex) ? nodeAtIndex : lView);
23521
23612
  }
23522
23613
 
23523
23614
  /**
@@ -23716,7 +23807,7 @@ class Version {
23716
23807
  * \@publicApi
23717
23808
  * @type {?}
23718
23809
  */
23719
- const VERSION = new Version('8.1.0-next.3');
23810
+ const VERSION = new Version('8.1.2');
23720
23811
 
23721
23812
  /**
23722
23813
  * @fileoverview added by tsickle
@@ -28296,6 +28387,9 @@ class ComponentFactory$1 extends ComponentFactory {
28296
28387
  let component;
28297
28388
  /** @type {?} */
28298
28389
  let tElementNode;
28390
+ // Will become true if the `try` block executes with no errors.
28391
+ /** @type {?} */
28392
+ let safeToRunHooks = false;
28299
28393
  try {
28300
28394
  /** @type {?} */
28301
28395
  const componentView = createRootComponentView(hostRNode, this.componentDef, rootLView, rendererFactory, renderer);
@@ -28317,9 +28411,10 @@ class ComponentFactory$1 extends ComponentFactory {
28317
28411
  component = createRootComponent(componentView, this.componentDef, rootLView, rootContext, [LifecycleHooksFeature]);
28318
28412
  addToViewTree(rootLView, componentView);
28319
28413
  refreshDescendantViews(rootLView);
28414
+ safeToRunHooks = true;
28320
28415
  }
28321
28416
  finally {
28322
- leaveView(oldLView);
28417
+ leaveView(oldLView, safeToRunHooks);
28323
28418
  }
28324
28419
  /** @type {?} */
28325
28420
  const componentRef = new ComponentRef$1(this.componentType, component, createElementRef(ElementRef, tElementNode, rootLView), rootLView, tElementNode);
@@ -29728,16 +29823,20 @@ let shiftsCounter = 0;
29728
29823
  * \@codeGenApi
29729
29824
  * @template T
29730
29825
  * @param {?} value The binding's value
29826
+ * @return {?} This function returns itself so that it may be chained
29827
+ * (e.g. `i18nExp(ctx.name)(ctx.title)`)
29731
29828
  *
29732
- * @return {?}
29733
29829
  */
29734
29830
  function ɵɵi18nExp(value) {
29735
29831
  /** @type {?} */
29736
- const expression = ɵɵbind(value);
29832
+ const lView = getLView();
29833
+ /** @type {?} */
29834
+ const expression = bind(lView, value);
29737
29835
  if (expression !== NO_CHANGE) {
29738
29836
  changeMask = changeMask | (1 << shiftsCounter);
29739
29837
  }
29740
29838
  shiftsCounter++;
29839
+ return ɵɵi18nExp;
29741
29840
  }
29742
29841
  /**
29743
29842
  * Updates a translation block or an i18n attribute when the bindings have changed.
@@ -30049,18 +30148,19 @@ const LOCALIZE_PH_REGEXP = /\{\$(.*?)\}/g;
30049
30148
  * @param {?=} placeholders
30050
30149
  * @return {?}
30051
30150
  */
30052
- function ɵɵi18nLocalize(input, placeholders = {}) {
30151
+ function ɵɵi18nLocalize(input, placeholders) {
30053
30152
  if (typeof TRANSLATIONS[input] !== 'undefined') { // to account for empty string
30054
30153
  input = TRANSLATIONS[input];
30055
30154
  }
30056
- return Object.keys(placeholders).length ?
30057
- input.replace(LOCALIZE_PH_REGEXP, (/**
30058
- * @param {?} match
30155
+ if (placeholders !== undefined && Object.keys(placeholders).length) {
30156
+ return input.replace(LOCALIZE_PH_REGEXP, (/**
30157
+ * @param {?} _
30059
30158
  * @param {?} key
30060
30159
  * @return {?}
30061
30160
  */
30062
- (match, key) => placeholders[key] || '')) :
30063
- input;
30161
+ (_, key) => placeholders[key] || ''));
30162
+ }
30163
+ return input;
30064
30164
  }
30065
30165
  /**
30066
30166
  * The locale id that the application is currently using (for translations and ICU expressions).
@@ -30856,7 +30956,7 @@ function unwrapValue$1(newValue) {
30856
30956
  * that create event emitters. When the title is clicked, the emitter
30857
30957
  * emits an open or close event to toggle the current visibility state.
30858
30958
  *
30859
- * ```
30959
+ * ```html
30860
30960
  * \@Component({
30861
30961
  * selector: 'zippy',
30862
30962
  * template: `
@@ -30885,17 +30985,10 @@ function unwrapValue$1(newValue) {
30885
30985
  * Access the event object with the `$event` argument passed to the output event
30886
30986
  * handler:
30887
30987
  *
30888
- * ```
30988
+ * ```html
30889
30989
  * <zippy (open)="onOpen($event)" (close)="onClose($event)"></zippy>
30890
30990
  * ```
30891
30991
  *
30892
- * ### Notes
30893
- *
30894
- * Uses Rx.Observable but provides an adapter to make it work as specified here:
30895
- * https://github.com/jhusain/observable-spec
30896
- *
30897
- * Once a reference implementation of the spec is available, switch to it.
30898
- *
30899
30992
  * \@publicApi
30900
30993
  * @template T
30901
30994
  */
@@ -31852,7 +31945,6 @@ const ɵ0$9 = /**
31852
31945
  'ɵɵNgOnChangesFeature': ɵɵNgOnChangesFeature,
31853
31946
  'ɵɵProvidersFeature': ɵɵProvidersFeature,
31854
31947
  'ɵɵInheritDefinitionFeature': ɵɵInheritDefinitionFeature,
31855
- 'ɵɵbind': ɵɵbind,
31856
31948
  'ɵɵcontainer': ɵɵcontainer,
31857
31949
  'ɵɵnextContext': ɵɵnextContext,
31858
31950
  'ɵɵcontainerRefreshStart': ɵɵcontainerRefreshStart,
@@ -33084,9 +33176,10 @@ const ɵ9 = /**
33084
33176
  */
33085
33177
  (eventName, args) => ({ eventName, args });
33086
33178
  /**
33087
- * Binds a CSS event to a host listener and supplies configuration metadata.
33179
+ * Decorator that binds a DOM event to a host listener and supplies configuration metadata.
33088
33180
  * Angular invokes the supplied handler method when the host element emits the specified event,
33089
33181
  * and updates the bound element with the result.
33182
+ *
33090
33183
  * If the handler method returns false, applies `preventDefault` on the bound element.
33091
33184
  *
33092
33185
  * \@usageNotes
@@ -33094,7 +33187,7 @@ const ɵ9 = /**
33094
33187
  * The following example declares a directive
33095
33188
  * that attaches a click listener to a button and counts clicks.
33096
33189
  *
33097
- * ```
33190
+ * ```ts
33098
33191
  * \@Directive({selector: 'button[counting]'})
33099
33192
  * class CountClicks {
33100
33193
  * numberOfClicks = 0;
@@ -40088,5 +40181,5 @@ class NgModuleFactory_ extends NgModuleFactory {
40088
40181
  * Generated bundle index. Do not edit.
40089
40182
  */
40090
40183
 
40091
- 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, 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 };
40184
+ 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, 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 };
40092
40185
  //# sourceMappingURL=core.js.map