@angular/core 4.4.3 → 4.4.7

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.
package/@angular/core.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v4.4.3
2
+ * @license Angular v4.4.7
3
3
  * (c) 2010-2017 Google, Inc. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -755,7 +755,7 @@ class Version {
755
755
  /**
756
756
  * \@stable
757
757
  */
758
- const VERSION = new Version('4.4.3');
758
+ const VERSION = new Version('4.4.7');
759
759
 
760
760
  /**
761
761
  * @license
@@ -5974,7 +5974,6 @@ class EventListener {
5974
5974
  this.name = name;
5975
5975
  this.callback = callback;
5976
5976
  }
5977
- ;
5978
5977
  }
5979
5978
  /**
5980
5979
  * \@experimental All debugging apis are currently experimental.
@@ -7935,7 +7934,6 @@ class Sanitizer {
7935
7934
  * Use of this source code is governed by an MIT-style license that can be
7936
7935
  * found in the LICENSE file at https://angular.io/license
7937
7936
  */
7938
-
7939
7937
  /**
7940
7938
  * Node instance data.
7941
7939
  *
@@ -8259,7 +8257,7 @@ function checkAndUpdateBinding(view, def, bindingIdx, value) {
8259
8257
  function checkBindingNoChanges(view, def, bindingIdx, value) {
8260
8258
  const /** @type {?} */ oldValue = view.oldValues[def.bindingIndex + bindingIdx];
8261
8259
  if ((view.state & 1 /* BeforeFirstCheck */) || !devModeEqual(oldValue, value)) {
8262
- throw expressionChangedAfterItHasBeenCheckedError(Services.createDebugContext(view, def.index), oldValue, value, (view.state & 1 /* BeforeFirstCheck */) !== 0);
8260
+ throw expressionChangedAfterItHasBeenCheckedError(Services.createDebugContext(view, def.nodeIndex), oldValue, value, (view.state & 1 /* BeforeFirstCheck */) !== 0);
8263
8261
  }
8264
8262
  }
8265
8263
  /**
@@ -8307,7 +8305,7 @@ function dispatchEvent(view, nodeIndex, eventName, event) {
8307
8305
  function declaredViewContainer(view) {
8308
8306
  if (view.parent) {
8309
8307
  const /** @type {?} */ parentView = view.parent;
8310
- return asElementData(parentView, /** @type {?} */ ((view.parentNodeDef)).index);
8308
+ return asElementData(parentView, /** @type {?} */ ((view.parentNodeDef)).nodeIndex);
8311
8309
  }
8312
8310
  return null;
8313
8311
  }
@@ -8335,9 +8333,9 @@ function viewParentEl(view) {
8335
8333
  function renderNode(view, def) {
8336
8334
  switch (def.flags & 201347067 /* Types */) {
8337
8335
  case 1 /* TypeElement */:
8338
- return asElementData(view, def.index).renderElement;
8336
+ return asElementData(view, def.nodeIndex).renderElement;
8339
8337
  case 2 /* TypeText */:
8340
- return asTextData(view, def.index).renderText;
8338
+ return asTextData(view, def.nodeIndex).renderText;
8341
8339
  }
8342
8340
  }
8343
8341
  /**
@@ -8423,7 +8421,7 @@ function getParentRenderElement(view, renderHost, def) {
8423
8421
  ViewEncapsulation.Native)) {
8424
8422
  // only children of non components, or children of components with native encapsulation should
8425
8423
  // be attached.
8426
- return asElementData(view, /** @type {?} */ ((def.renderParent)).index).renderElement;
8424
+ return asElementData(view, /** @type {?} */ ((def.renderParent)).nodeIndex).renderElement;
8427
8425
  }
8428
8426
  }
8429
8427
  else {
@@ -8505,8 +8503,8 @@ function visitProjectedRenderNodes(view, ngContentIndex, action, parentNode, nex
8505
8503
  }
8506
8504
  const /** @type {?} */ hostView = ((compView)).parent;
8507
8505
  const /** @type {?} */ hostElDef = viewParentEl(/** @type {?} */ ((compView)));
8508
- const /** @type {?} */ startIndex = ((hostElDef)).index + 1;
8509
- const /** @type {?} */ endIndex = ((hostElDef)).index + ((hostElDef)).childCount;
8506
+ const /** @type {?} */ startIndex = ((hostElDef)).nodeIndex + 1;
8507
+ const /** @type {?} */ endIndex = ((hostElDef)).nodeIndex + ((hostElDef)).childCount;
8510
8508
  for (let /** @type {?} */ i = startIndex; i <= endIndex; i++) {
8511
8509
  const /** @type {?} */ nodeDef = ((hostView)).def.nodes[i];
8512
8510
  if (nodeDef.ngContentIndex === ngContentIndex) {
@@ -8547,7 +8545,7 @@ function visitRenderNode(view, nodeDef, action, parentNode, nextSibling, target)
8547
8545
  execRenderNodeAction(view, rn, action, parentNode, nextSibling, target);
8548
8546
  }
8549
8547
  if (nodeDef.bindingFlags & (32 /* SyntheticHostProperty */)) {
8550
- const /** @type {?} */ compView = asElementData(view, nodeDef.index).componentView;
8548
+ const /** @type {?} */ compView = asElementData(view, nodeDef.nodeIndex).componentView;
8551
8549
  execRenderNodeAction(compView, rn, action, parentNode, nextSibling, target);
8552
8550
  }
8553
8551
  }
@@ -8555,13 +8553,13 @@ function visitRenderNode(view, nodeDef, action, parentNode, nextSibling, target)
8555
8553
  execRenderNodeAction(view, rn, action, parentNode, nextSibling, target);
8556
8554
  }
8557
8555
  if (nodeDef.flags & 16777216 /* EmbeddedViews */) {
8558
- const /** @type {?} */ embeddedViews = ((asElementData(view, nodeDef.index).viewContainer))._embeddedViews;
8556
+ const /** @type {?} */ embeddedViews = ((asElementData(view, nodeDef.nodeIndex).viewContainer))._embeddedViews;
8559
8557
  for (let /** @type {?} */ k = 0; k < embeddedViews.length; k++) {
8560
8558
  visitRootRenderNodes(embeddedViews[k], action, parentNode, nextSibling, target);
8561
8559
  }
8562
8560
  }
8563
8561
  if (nodeDef.flags & 1 /* TypeElement */ && !((nodeDef.element)).name) {
8564
- visitSiblingRenderNodes(view, action, nodeDef.index + 1, nodeDef.index + nodeDef.childCount, parentNode, nextSibling, target);
8562
+ visitSiblingRenderNodes(view, action, nodeDef.nodeIndex + 1, nodeDef.nodeIndex + nodeDef.childCount, parentNode, nextSibling, target);
8565
8563
  }
8566
8564
  }
8567
8565
  }
@@ -8715,13 +8713,14 @@ function anchorDef(flags, matchedQueriesDsl, ngContentIndex, childCount, handleE
8715
8713
  const /** @type {?} */ template = templateFactory ? resolveDefinition(templateFactory) : null;
8716
8714
  return {
8717
8715
  // will bet set by the view definition
8718
- index: -1,
8716
+ nodeIndex: -1,
8719
8717
  parent: null,
8720
8718
  renderParent: null,
8721
8719
  bindingIndex: -1,
8722
8720
  outputIndex: -1,
8723
8721
  // regular values
8724
8722
  flags,
8723
+ checkIndex: -1,
8725
8724
  childFlags: 0,
8726
8725
  directChildFlags: 0,
8727
8726
  childMatchedQueries: 0, matchedQueries, matchedQueryIds, references, ngContentIndex, childCount,
@@ -8746,6 +8745,7 @@ function anchorDef(flags, matchedQueriesDsl, ngContentIndex, childCount, handleE
8746
8745
  };
8747
8746
  }
8748
8747
  /**
8748
+ * @param {?} checkIndex
8749
8749
  * @param {?} flags
8750
8750
  * @param {?} matchedQueriesDsl
8751
8751
  * @param {?} ngContentIndex
@@ -8759,7 +8759,7 @@ function anchorDef(flags, matchedQueriesDsl, ngContentIndex, childCount, handleE
8759
8759
  * @param {?=} componentRendererType
8760
8760
  * @return {?}
8761
8761
  */
8762
- function elementDef(flags, matchedQueriesDsl, ngContentIndex, childCount, namespaceAndName, fixedAttrs = [], bindings, outputs, handleEvent, componentView, componentRendererType) {
8762
+ function elementDef(checkIndex, flags, matchedQueriesDsl, ngContentIndex, childCount, namespaceAndName, fixedAttrs = [], bindings, outputs, handleEvent, componentView, componentRendererType) {
8763
8763
  if (!handleEvent) {
8764
8764
  handleEvent = NOOP;
8765
8765
  }
@@ -8810,12 +8810,13 @@ function elementDef(flags, matchedQueriesDsl, ngContentIndex, childCount, namesp
8810
8810
  flags |= 1 /* TypeElement */;
8811
8811
  return {
8812
8812
  // will bet set by the view definition
8813
- index: -1,
8813
+ nodeIndex: -1,
8814
8814
  parent: null,
8815
8815
  renderParent: null,
8816
8816
  bindingIndex: -1,
8817
8817
  outputIndex: -1,
8818
8818
  // regular values
8819
+ checkIndex,
8819
8820
  flags,
8820
8821
  childFlags: 0,
8821
8822
  directChildFlags: 0,
@@ -8886,7 +8887,7 @@ function createElement(view, renderHost, def) {
8886
8887
  function listenToElementOutputs(view, compView, def, el) {
8887
8888
  for (let /** @type {?} */ i = 0; i < def.outputs.length; i++) {
8888
8889
  const /** @type {?} */ output = def.outputs[i];
8889
- const /** @type {?} */ handleEventClosure = renderEventHandlerClosure(view, def.index, elementEventFullName(output.target, output.eventName));
8890
+ const /** @type {?} */ handleEventClosure = renderEventHandlerClosure(view, def.nodeIndex, elementEventFullName(output.target, output.eventName));
8890
8891
  let /** @type {?} */ listenTarget = output.target;
8891
8892
  let /** @type {?} */ listenerView = view;
8892
8893
  if (output.target === 'component') {
@@ -8980,7 +8981,7 @@ function checkAndUpdateElementValue(view, def, bindingIdx, value) {
8980
8981
  return false;
8981
8982
  }
8982
8983
  const /** @type {?} */ binding = def.bindings[bindingIdx];
8983
- const /** @type {?} */ elData = asElementData(view, def.index);
8984
+ const /** @type {?} */ elData = asElementData(view, def.nodeIndex);
8984
8985
  const /** @type {?} */ renderNode$$1 = elData.renderElement;
8985
8986
  const /** @type {?} */ name = ((binding.name));
8986
8987
  switch (binding.flags & 15 /* Types */) {
@@ -9089,7 +9090,7 @@ function setElementProperty(view, binding, renderNode$$1, name, value) {
9089
9090
  * Use of this source code is governed by an MIT-style license that can be
9090
9091
  * found in the LICENSE file at https://angular.io/license
9091
9092
  */
9092
- const NOT_CREATED$1 = new Object();
9093
+ const UNDEFINED_VALUE = new Object();
9093
9094
  const InjectorRefTokenKey$1 = tokenKey(Injector);
9094
9095
  const NgModuleRefTokenKey = tokenKey(NgModuleRef);
9095
9096
  /**
@@ -9134,8 +9135,9 @@ function initNgModule(data) {
9134
9135
  const /** @type {?} */ providers = data._providers = new Array(def.providers.length);
9135
9136
  for (let /** @type {?} */ i = 0; i < def.providers.length; i++) {
9136
9137
  const /** @type {?} */ provDef = def.providers[i];
9137
- providers[i] = provDef.flags & 4096 /* LazyProvider */ ? NOT_CREATED$1 :
9138
- _createProviderInstance$1(data, provDef);
9138
+ if (!(provDef.flags & 4096 /* LazyProvider */)) {
9139
+ providers[i] = _createProviderInstance$1(data, provDef);
9140
+ }
9139
9141
  }
9140
9142
  }
9141
9143
  /**
@@ -9163,11 +9165,11 @@ function resolveNgModuleDep(data, depDef, notFoundValue = Injector.THROW_IF_NOT_
9163
9165
  const /** @type {?} */ providerDef = data._def.providersByKey[tokenKey$$1];
9164
9166
  if (providerDef) {
9165
9167
  let /** @type {?} */ providerInstance = data._providers[providerDef.index];
9166
- if (providerInstance === NOT_CREATED$1) {
9168
+ if (providerInstance === undefined) {
9167
9169
  providerInstance = data._providers[providerDef.index] =
9168
9170
  _createProviderInstance$1(data, providerDef);
9169
9171
  }
9170
- return providerInstance;
9172
+ return providerInstance === UNDEFINED_VALUE ? undefined : providerInstance;
9171
9173
  }
9172
9174
  return data._parent.get(depDef.token, notFoundValue);
9173
9175
  }
@@ -9192,7 +9194,7 @@ function _createProviderInstance$1(ngModule, providerDef) {
9192
9194
  injectable = providerDef.value;
9193
9195
  break;
9194
9196
  }
9195
- return injectable;
9197
+ return injectable === undefined ? UNDEFINED_VALUE : injectable;
9196
9198
  }
9197
9199
  /**
9198
9200
  * @param {?} ngModule
@@ -9202,29 +9204,22 @@ function _createProviderInstance$1(ngModule, providerDef) {
9202
9204
  */
9203
9205
  function _createClass(ngModule, ctor, deps) {
9204
9206
  const /** @type {?} */ len = deps.length;
9205
- let /** @type {?} */ injectable;
9206
9207
  switch (len) {
9207
9208
  case 0:
9208
- injectable = new ctor();
9209
- break;
9209
+ return new ctor();
9210
9210
  case 1:
9211
- injectable = new ctor(resolveNgModuleDep(ngModule, deps[0]));
9212
- break;
9211
+ return new ctor(resolveNgModuleDep(ngModule, deps[0]));
9213
9212
  case 2:
9214
- injectable =
9215
- new ctor(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]));
9216
- break;
9213
+ return new ctor(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]));
9217
9214
  case 3:
9218
- injectable = new ctor(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]), resolveNgModuleDep(ngModule, deps[2]));
9219
- break;
9215
+ return new ctor(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]), resolveNgModuleDep(ngModule, deps[2]));
9220
9216
  default:
9221
9217
  const /** @type {?} */ depValues = new Array(len);
9222
9218
  for (let /** @type {?} */ i = 0; i < len; i++) {
9223
9219
  depValues[i] = resolveNgModuleDep(ngModule, deps[i]);
9224
9220
  }
9225
- injectable = new ctor(...depValues);
9221
+ return new ctor(...depValues);
9226
9222
  }
9227
- return injectable;
9228
9223
  }
9229
9224
  /**
9230
9225
  * @param {?} ngModule
@@ -9234,29 +9229,22 @@ function _createClass(ngModule, ctor, deps) {
9234
9229
  */
9235
9230
  function _callFactory(ngModule, factory, deps) {
9236
9231
  const /** @type {?} */ len = deps.length;
9237
- let /** @type {?} */ injectable;
9238
9232
  switch (len) {
9239
9233
  case 0:
9240
- injectable = factory();
9241
- break;
9234
+ return factory();
9242
9235
  case 1:
9243
- injectable = factory(resolveNgModuleDep(ngModule, deps[0]));
9244
- break;
9236
+ return factory(resolveNgModuleDep(ngModule, deps[0]));
9245
9237
  case 2:
9246
- injectable =
9247
- factory(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]));
9248
- break;
9238
+ return factory(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]));
9249
9239
  case 3:
9250
- injectable = factory(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]), resolveNgModuleDep(ngModule, deps[2]));
9251
- break;
9240
+ return factory(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]), resolveNgModuleDep(ngModule, deps[2]));
9252
9241
  default:
9253
9242
  const /** @type {?} */ depValues = Array(len);
9254
9243
  for (let /** @type {?} */ i = 0; i < len; i++) {
9255
9244
  depValues[i] = resolveNgModuleDep(ngModule, deps[i]);
9256
9245
  }
9257
- injectable = factory(...depValues);
9246
+ return factory(...depValues);
9258
9247
  }
9259
- return injectable;
9260
9248
  }
9261
9249
  /**
9262
9250
  * @param {?} ngModule
@@ -9269,7 +9257,7 @@ function callNgModuleLifecycle(ngModule, lifecycles) {
9269
9257
  const /** @type {?} */ provDef = def.providers[i];
9270
9258
  if (provDef.flags & 131072 /* OnDestroy */) {
9271
9259
  const /** @type {?} */ instance = ngModule._providers[i];
9272
- if (instance && instance !== NOT_CREATED$1) {
9260
+ if (instance && instance !== UNDEFINED_VALUE) {
9273
9261
  instance.ngOnDestroy();
9274
9262
  }
9275
9263
  }
@@ -9542,7 +9530,7 @@ class ComponentFactory_ extends ComponentFactory {
9542
9530
  throw new Error('ngModule should be provided');
9543
9531
  }
9544
9532
  const /** @type {?} */ viewDef = resolveDefinition(this.viewDefFactory);
9545
- const /** @type {?} */ componentNodeIndex = ((((viewDef.nodes[0].element)).componentProvider)).index;
9533
+ const /** @type {?} */ componentNodeIndex = ((((viewDef.nodes[0].element)).componentProvider)).nodeIndex;
9546
9534
  const /** @type {?} */ view = Services.createRootView(injector, projectableNodes || [], rootSelectorOrNode, viewDef, ngModule, EMPTY_CONTEXT);
9547
9535
  const /** @type {?} */ component = asProviderData(view, componentNodeIndex).instance;
9548
9536
  if (rootSelectorOrNode) {
@@ -9568,7 +9556,7 @@ class ComponentRef_ extends ComponentRef {
9568
9556
  * @return {?}
9569
9557
  */
9570
9558
  get location() {
9571
- return new ElementRef(asElementData(this._view, this._elDef.index).renderElement);
9559
+ return new ElementRef(asElementData(this._view, this._elDef.nodeIndex).renderElement);
9572
9560
  }
9573
9561
  /**
9574
9562
  * @return {?}
@@ -9578,17 +9566,14 @@ class ComponentRef_ extends ComponentRef {
9578
9566
  * @return {?}
9579
9567
  */
9580
9568
  get instance() { return this._component; }
9581
- ;
9582
9569
  /**
9583
9570
  * @return {?}
9584
9571
  */
9585
9572
  get hostView() { return this._viewRef; }
9586
- ;
9587
9573
  /**
9588
9574
  * @return {?}
9589
9575
  */
9590
9576
  get changeDetectorRef() { return this._viewRef; }
9591
- ;
9592
9577
  /**
9593
9578
  * @return {?}
9594
9579
  */
@@ -9674,7 +9659,6 @@ class ViewContainerRef_ {
9674
9659
  * @return {?}
9675
9660
  */
9676
9661
  get length() { return this._embeddedViews.length; }
9677
- ;
9678
9662
  /**
9679
9663
  * @template C
9680
9664
  * @param {?} templateRef
@@ -9896,7 +9880,7 @@ class TemplateRef_ extends TemplateRef {
9896
9880
  * @return {?}
9897
9881
  */
9898
9882
  get elementRef() {
9899
- return new ElementRef(asElementData(this._parentView, this._def.index).renderElement);
9883
+ return new ElementRef(asElementData(this._parentView, this._def.nodeIndex).renderElement);
9900
9884
  }
9901
9885
  }
9902
9886
  /**
@@ -9934,14 +9918,14 @@ class Injector_ {
9934
9918
  function nodeValue(view, index) {
9935
9919
  const /** @type {?} */ def = view.def.nodes[index];
9936
9920
  if (def.flags & 1 /* TypeElement */) {
9937
- const /** @type {?} */ elData = asElementData(view, def.index);
9921
+ const /** @type {?} */ elData = asElementData(view, def.nodeIndex);
9938
9922
  return ((def.element)).template ? elData.template : elData.renderElement;
9939
9923
  }
9940
9924
  else if (def.flags & 2 /* TypeText */) {
9941
- return asTextData(view, def.index).renderText;
9925
+ return asTextData(view, def.nodeIndex).renderText;
9942
9926
  }
9943
9927
  else if (def.flags & (20224 /* CatProvider */ | 16 /* TypePipe */)) {
9944
- return asProviderData(view, def.index).instance;
9928
+ return asProviderData(view, def.nodeIndex).instance;
9945
9929
  }
9946
9930
  throw new Error(`Illegal state: read nodeValue for node index ${index}`);
9947
9931
  }
@@ -10225,8 +10209,8 @@ const ViewContainerRefTokenKey = tokenKey(ViewContainerRef);
10225
10209
  const TemplateRefTokenKey = tokenKey(TemplateRef);
10226
10210
  const ChangeDetectorRefTokenKey = tokenKey(ChangeDetectorRef);
10227
10211
  const InjectorRefTokenKey = tokenKey(Injector);
10228
- const NOT_CREATED = new Object();
10229
10212
  /**
10213
+ * @param {?} checkIndex
10230
10214
  * @param {?} flags
10231
10215
  * @param {?} matchedQueries
10232
10216
  * @param {?} childCount
@@ -10236,7 +10220,7 @@ const NOT_CREATED = new Object();
10236
10220
  * @param {?=} outputs
10237
10221
  * @return {?}
10238
10222
  */
10239
- function directiveDef(flags, matchedQueries, childCount, ctor, deps, props, outputs) {
10223
+ function directiveDef(checkIndex, flags, matchedQueries, childCount, ctor, deps, props, outputs) {
10240
10224
  const /** @type {?} */ bindings = [];
10241
10225
  if (props) {
10242
10226
  for (let /** @type {?} */ prop in props) {
@@ -10257,7 +10241,7 @@ function directiveDef(flags, matchedQueries, childCount, ctor, deps, props, outp
10257
10241
  }
10258
10242
  }
10259
10243
  flags |= 16384 /* TypeDirective */;
10260
- return _def(flags, matchedQueries, childCount, ctor, ctor, deps, bindings, outputDefs);
10244
+ return _def(checkIndex, flags, matchedQueries, childCount, ctor, ctor, deps, bindings, outputDefs);
10261
10245
  }
10262
10246
  /**
10263
10247
  * @param {?} flags
@@ -10267,7 +10251,7 @@ function directiveDef(flags, matchedQueries, childCount, ctor, deps, props, outp
10267
10251
  */
10268
10252
  function pipeDef(flags, ctor, deps) {
10269
10253
  flags |= 16 /* TypePipe */;
10270
- return _def(flags, null, 0, ctor, ctor, deps);
10254
+ return _def(-1, flags, null, 0, ctor, ctor, deps);
10271
10255
  }
10272
10256
  /**
10273
10257
  * @param {?} flags
@@ -10278,9 +10262,10 @@ function pipeDef(flags, ctor, deps) {
10278
10262
  * @return {?}
10279
10263
  */
10280
10264
  function providerDef(flags, matchedQueries, token, value, deps) {
10281
- return _def(flags, matchedQueries, 0, token, value, deps);
10265
+ return _def(-1, flags, matchedQueries, 0, token, value, deps);
10282
10266
  }
10283
10267
  /**
10268
+ * @param {?} checkIndex
10284
10269
  * @param {?} flags
10285
10270
  * @param {?} matchedQueriesDsl
10286
10271
  * @param {?} childCount
@@ -10291,7 +10276,7 @@ function providerDef(flags, matchedQueries, token, value, deps) {
10291
10276
  * @param {?=} outputs
10292
10277
  * @return {?}
10293
10278
  */
10294
- function _def(flags, matchedQueriesDsl, childCount, token, value, deps, bindings, outputs) {
10279
+ function _def(checkIndex, flags, matchedQueriesDsl, childCount, token, value, deps, bindings, outputs) {
10295
10280
  const { matchedQueries, references, matchedQueryIds } = splitMatchedQueriesDsl(matchedQueriesDsl);
10296
10281
  if (!outputs) {
10297
10282
  outputs = [];
@@ -10302,12 +10287,13 @@ function _def(flags, matchedQueriesDsl, childCount, token, value, deps, bindings
10302
10287
  const /** @type {?} */ depDefs = splitDepsDsl(deps);
10303
10288
  return {
10304
10289
  // will bet set by the view definition
10305
- index: -1,
10290
+ nodeIndex: -1,
10306
10291
  parent: null,
10307
10292
  renderParent: null,
10308
10293
  bindingIndex: -1,
10309
10294
  outputIndex: -1,
10310
10295
  // regular values
10296
+ checkIndex,
10311
10297
  flags,
10312
10298
  childFlags: 0,
10313
10299
  directChildFlags: 0,
@@ -10327,7 +10313,7 @@ function _def(flags, matchedQueriesDsl, childCount, token, value, deps, bindings
10327
10313
  * @return {?}
10328
10314
  */
10329
10315
  function createProviderInstance(view, def) {
10330
- return def.flags & 4096 /* LazyProvider */ ? NOT_CREATED : _createProviderInstance(view, def);
10316
+ return _createProviderInstance(view, def);
10331
10317
  }
10332
10318
  /**
10333
10319
  * @param {?} view
@@ -10358,7 +10344,7 @@ function createDirectiveInstance(view, def) {
10358
10344
  if (def.outputs.length) {
10359
10345
  for (let /** @type {?} */ i = 0; i < def.outputs.length; i++) {
10360
10346
  const /** @type {?} */ output = def.outputs[i];
10361
- const /** @type {?} */ subscription = instance[((output.propName))].subscribe(eventHandlerClosure(view, /** @type {?} */ ((def.parent)).index, output.eventName)); /** @type {?} */
10347
+ const /** @type {?} */ subscription = instance[((output.propName))].subscribe(eventHandlerClosure(view, /** @type {?} */ ((def.parent)).nodeIndex, output.eventName)); /** @type {?} */
10362
10348
  ((view.disposables))[def.outputIndex + i] = subscription.unsubscribe.bind(subscription);
10363
10349
  }
10364
10350
  }
@@ -10397,7 +10383,7 @@ function eventHandlerClosure(view, index, eventName) {
10397
10383
  * @return {?}
10398
10384
  */
10399
10385
  function checkAndUpdateDirectiveInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
10400
- const /** @type {?} */ providerData = asProviderData(view, def.index);
10386
+ const /** @type {?} */ providerData = asProviderData(view, def.nodeIndex);
10401
10387
  const /** @type {?} */ directive = providerData.instance;
10402
10388
  let /** @type {?} */ changed = false;
10403
10389
  let /** @type {?} */ changes = ((undefined));
@@ -10460,7 +10446,7 @@ function checkAndUpdateDirectiveInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7
10460
10446
  * @return {?}
10461
10447
  */
10462
10448
  function checkAndUpdateDirectiveDynamic(view, def, values) {
10463
- const /** @type {?} */ providerData = asProviderData(view, def.index);
10449
+ const /** @type {?} */ providerData = asProviderData(view, def.nodeIndex);
10464
10450
  const /** @type {?} */ directive = providerData.instance;
10465
10451
  let /** @type {?} */ changed = false;
10466
10452
  let /** @type {?} */ changes = ((undefined));
@@ -10490,22 +10476,16 @@ function _createProviderInstance(view, def) {
10490
10476
  // private services can see other private services
10491
10477
  const /** @type {?} */ allowPrivateServices = (def.flags & 8192 /* PrivateProvider */) > 0;
10492
10478
  const /** @type {?} */ providerDef = def.provider;
10493
- let /** @type {?} */ injectable;
10494
10479
  switch (def.flags & 201347067 /* Types */) {
10495
10480
  case 512 /* TypeClassProvider */:
10496
- injectable = createClass(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((providerDef)).value, /** @type {?} */ ((providerDef)).deps);
10497
- break;
10481
+ return createClass(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((providerDef)).value, /** @type {?} */ ((providerDef)).deps);
10498
10482
  case 1024 /* TypeFactoryProvider */:
10499
- injectable = callFactory(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((providerDef)).value, /** @type {?} */ ((providerDef)).deps);
10500
- break;
10483
+ return callFactory(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((providerDef)).value, /** @type {?} */ ((providerDef)).deps);
10501
10484
  case 2048 /* TypeUseExistingProvider */:
10502
- injectable = resolveDep(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((providerDef)).deps[0]);
10503
- break;
10485
+ return resolveDep(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((providerDef)).deps[0]);
10504
10486
  case 256 /* TypeValueProvider */:
10505
- injectable = ((providerDef)).value;
10506
- break;
10487
+ return ((providerDef)).value;
10507
10488
  }
10508
- return injectable;
10509
10489
  }
10510
10490
  /**
10511
10491
  * @param {?} view
@@ -10517,28 +10497,22 @@ function _createProviderInstance(view, def) {
10517
10497
  */
10518
10498
  function createClass(view, elDef, allowPrivateServices, ctor, deps) {
10519
10499
  const /** @type {?} */ len = deps.length;
10520
- let /** @type {?} */ injectable;
10521
10500
  switch (len) {
10522
10501
  case 0:
10523
- injectable = new ctor();
10524
- break;
10502
+ return new ctor();
10525
10503
  case 1:
10526
- injectable = new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]));
10527
- break;
10504
+ return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]));
10528
10505
  case 2:
10529
- injectable = new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]));
10530
- break;
10506
+ return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]));
10531
10507
  case 3:
10532
- injectable = new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]), resolveDep(view, elDef, allowPrivateServices, deps[2]));
10533
- break;
10508
+ return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]), resolveDep(view, elDef, allowPrivateServices, deps[2]));
10534
10509
  default:
10535
10510
  const /** @type {?} */ depValues = new Array(len);
10536
10511
  for (let /** @type {?} */ i = 0; i < len; i++) {
10537
10512
  depValues[i] = resolveDep(view, elDef, allowPrivateServices, deps[i]);
10538
10513
  }
10539
- injectable = new ctor(...depValues);
10514
+ return new ctor(...depValues);
10540
10515
  }
10541
- return injectable;
10542
10516
  }
10543
10517
  /**
10544
10518
  * @param {?} view
@@ -10550,28 +10524,22 @@ function createClass(view, elDef, allowPrivateServices, ctor, deps) {
10550
10524
  */
10551
10525
  function callFactory(view, elDef, allowPrivateServices, factory, deps) {
10552
10526
  const /** @type {?} */ len = deps.length;
10553
- let /** @type {?} */ injectable;
10554
10527
  switch (len) {
10555
10528
  case 0:
10556
- injectable = factory();
10557
- break;
10529
+ return factory();
10558
10530
  case 1:
10559
- injectable = factory(resolveDep(view, elDef, allowPrivateServices, deps[0]));
10560
- break;
10531
+ return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]));
10561
10532
  case 2:
10562
- injectable = factory(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]));
10563
- break;
10533
+ return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]));
10564
10534
  case 3:
10565
- injectable = factory(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]), resolveDep(view, elDef, allowPrivateServices, deps[2]));
10566
- break;
10535
+ return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]), resolveDep(view, elDef, allowPrivateServices, deps[2]));
10567
10536
  default:
10568
10537
  const /** @type {?} */ depValues = Array(len);
10569
10538
  for (let /** @type {?} */ i = 0; i < len; i++) {
10570
10539
  depValues[i] = resolveDep(view, elDef, allowPrivateServices, deps[i]);
10571
10540
  }
10572
- injectable = factory(...depValues);
10541
+ return factory(...depValues);
10573
10542
  }
10574
- return injectable;
10575
10543
  }
10576
10544
  // This default value is when checking the hierarchy for a token.
10577
10545
  //
@@ -10629,12 +10597,12 @@ function resolveDep(view, elDef, allowPrivateServices, depDef, notFoundValue = I
10629
10597
  return compView.renderer;
10630
10598
  }
10631
10599
  case ElementRefTokenKey:
10632
- return new ElementRef(asElementData(view, elDef.index).renderElement);
10600
+ return new ElementRef(asElementData(view, elDef.nodeIndex).renderElement);
10633
10601
  case ViewContainerRefTokenKey:
10634
- return asElementData(view, elDef.index).viewContainer;
10602
+ return asElementData(view, elDef.nodeIndex).viewContainer;
10635
10603
  case TemplateRefTokenKey: {
10636
10604
  if (((elDef.element)).template) {
10637
- return asElementData(view, elDef.index).template;
10605
+ return asElementData(view, elDef.nodeIndex).template;
10638
10606
  }
10639
10607
  break;
10640
10608
  }
@@ -10647,9 +10615,10 @@ function resolveDep(view, elDef, allowPrivateServices, depDef, notFoundValue = I
10647
10615
  default:
10648
10616
  const /** @type {?} */ providerDef = (((allowPrivateServices ? ((elDef.element)).allProviders : ((elDef.element)).publicProviders)))[tokenKey$$1];
10649
10617
  if (providerDef) {
10650
- const /** @type {?} */ providerData = asProviderData(view, providerDef.index);
10651
- if (providerData.instance === NOT_CREATED) {
10652
- providerData.instance = _createProviderInstance(view, providerDef);
10618
+ let /** @type {?} */ providerData = asProviderData(view, providerDef.nodeIndex);
10619
+ if (!providerData) {
10620
+ providerData = { instance: _createProviderInstance(view, providerDef) };
10621
+ view.nodes[providerDef.nodeIndex] = (providerData);
10653
10622
  }
10654
10623
  return providerData.instance;
10655
10624
  }
@@ -10680,7 +10649,7 @@ function resolveDep(view, elDef, allowPrivateServices, depDef, notFoundValue = I
10680
10649
  function findCompView(view, elDef, allowPrivateServices) {
10681
10650
  let /** @type {?} */ compView;
10682
10651
  if (allowPrivateServices) {
10683
- compView = asElementData(view, elDef.index).componentView;
10652
+ compView = asElementData(view, elDef.nodeIndex).componentView;
10684
10653
  }
10685
10654
  else {
10686
10655
  compView = view;
@@ -10701,7 +10670,7 @@ function findCompView(view, elDef, allowPrivateServices) {
10701
10670
  */
10702
10671
  function updateProp(view, providerData, def, bindingIdx, value, changes) {
10703
10672
  if (def.flags & 32768 /* Component */) {
10704
- const /** @type {?} */ compView = asElementData(view, /** @type {?} */ ((def.parent)).index).componentView;
10673
+ const /** @type {?} */ compView = asElementData(view, /** @type {?} */ ((def.parent)).nodeIndex).componentView;
10705
10674
  if (compView.def.flags & 2 /* OnPush */) {
10706
10675
  compView.state |= 8 /* ChecksEnabled */;
10707
10676
  }
@@ -10747,7 +10716,7 @@ function callLifecycleHooksChildrenFirst(view, lifecycles) {
10747
10716
  i += nodeDef.childCount;
10748
10717
  }
10749
10718
  while (parent && (parent.flags & 1 /* TypeElement */) &&
10750
- i === parent.index + parent.childCount) {
10719
+ i === parent.nodeIndex + parent.childCount) {
10751
10720
  // last child of an element
10752
10721
  if (parent.directChildFlags & lifecycles) {
10753
10722
  callElementProvidersLifecycles(view, parent, lifecycles);
@@ -10763,7 +10732,7 @@ function callLifecycleHooksChildrenFirst(view, lifecycles) {
10763
10732
  * @return {?}
10764
10733
  */
10765
10734
  function callElementProvidersLifecycles(view, elDef, lifecycles) {
10766
- for (let /** @type {?} */ i = elDef.index + 1; i <= elDef.index + elDef.childCount; i++) {
10735
+ for (let /** @type {?} */ i = elDef.nodeIndex + 1; i <= elDef.nodeIndex + elDef.childCount; i++) {
10767
10736
  const /** @type {?} */ nodeDef = view.def.nodes[i];
10768
10737
  if (nodeDef.flags & lifecycles) {
10769
10738
  callProviderLifecycles(view, i, nodeDef.flags & lifecycles);
@@ -10779,8 +10748,12 @@ function callElementProvidersLifecycles(view, elDef, lifecycles) {
10779
10748
  * @return {?}
10780
10749
  */
10781
10750
  function callProviderLifecycles(view, index, lifecycles) {
10782
- const /** @type {?} */ provider = asProviderData(view, index).instance;
10783
- if (provider === NOT_CREATED) {
10751
+ const /** @type {?} */ providerData = asProviderData(view, index);
10752
+ if (!providerData) {
10753
+ return;
10754
+ }
10755
+ const /** @type {?} */ provider = providerData.instance;
10756
+ if (!provider) {
10784
10757
  return;
10785
10758
  }
10786
10759
  Services.setCurrentNode(view, index);
@@ -10822,13 +10795,14 @@ function queryDef(flags, id, bindings) {
10822
10795
  }
10823
10796
  return {
10824
10797
  // will bet set by the view definition
10825
- index: -1,
10798
+ nodeIndex: -1,
10826
10799
  parent: null,
10827
10800
  renderParent: null,
10828
10801
  bindingIndex: -1,
10829
10802
  outputIndex: -1,
10830
10803
  // regular values
10831
- flags,
10804
+ // TODO(vicb): check
10805
+ checkIndex: -1, flags,
10832
10806
  childFlags: 0,
10833
10807
  directChildFlags: 0,
10834
10808
  childMatchedQueries: 0,
@@ -10863,7 +10837,7 @@ function dirtyParentQueries(view) {
10863
10837
  let /** @type {?} */ tplDef = ((view.parentNodeDef));
10864
10838
  view = view.parent;
10865
10839
  // content queries
10866
- const /** @type {?} */ end = tplDef.index + tplDef.childCount;
10840
+ const /** @type {?} */ end = tplDef.nodeIndex + tplDef.childCount;
10867
10841
  for (let /** @type {?} */ i = 0; i <= end; i++) {
10868
10842
  const /** @type {?} */ nodeDef = view.def.nodes[i];
10869
10843
  if ((nodeDef.flags & 67108864 /* TypeContentQuery */) &&
@@ -10871,7 +10845,7 @@ function dirtyParentQueries(view) {
10871
10845
  (((nodeDef.query)).filterId & queryIds) === ((nodeDef.query)).filterId) {
10872
10846
  asQueryList(view, i).setDirty();
10873
10847
  }
10874
- if ((nodeDef.flags & 1 /* TypeElement */ && i + nodeDef.childCount < tplDef.index) ||
10848
+ if ((nodeDef.flags & 1 /* TypeElement */ && i + nodeDef.childCount < tplDef.nodeIndex) ||
10875
10849
  !(nodeDef.childFlags & 67108864 /* TypeContentQuery */) ||
10876
10850
  !(nodeDef.childFlags & 536870912 /* DynamicQuery */)) {
10877
10851
  // skip elements that don't contain the template element or no query.
@@ -10897,7 +10871,7 @@ function dirtyParentQueries(view) {
10897
10871
  * @return {?}
10898
10872
  */
10899
10873
  function checkAndUpdateQuery(view, nodeDef) {
10900
- const /** @type {?} */ queryList = asQueryList(view, nodeDef.index);
10874
+ const /** @type {?} */ queryList = asQueryList(view, nodeDef.nodeIndex);
10901
10875
  if (!queryList.dirty) {
10902
10876
  return;
10903
10877
  }
@@ -10905,8 +10879,8 @@ function checkAndUpdateQuery(view, nodeDef) {
10905
10879
  let /** @type {?} */ newValues = ((undefined));
10906
10880
  if (nodeDef.flags & 67108864 /* TypeContentQuery */) {
10907
10881
  const /** @type {?} */ elementDef = ((((nodeDef.parent)).parent));
10908
- newValues = calcQueryValues(view, elementDef.index, elementDef.index + elementDef.childCount, /** @type {?} */ ((nodeDef.query)), []);
10909
- directiveInstance = asProviderData(view, /** @type {?} */ ((nodeDef.parent)).index).instance;
10882
+ newValues = calcQueryValues(view, elementDef.nodeIndex, elementDef.nodeIndex + elementDef.childCount, /** @type {?} */ ((nodeDef.query)), []);
10883
+ directiveInstance = asProviderData(view, /** @type {?} */ ((nodeDef.parent)).nodeIndex).instance;
10910
10884
  }
10911
10885
  else if (nodeDef.flags & 134217728 /* TypeViewQuery */) {
10912
10886
  newValues = calcQueryValues(view, 0, view.def.nodes.length - 1, /** @type {?} */ ((nodeDef.query)), []);
@@ -10992,25 +10966,18 @@ function calcQueryValues(view, startIndex, endIndex, queryDef, values) {
10992
10966
  function getQueryValue(view, nodeDef, queryValueType) {
10993
10967
  if (queryValueType != null) {
10994
10968
  // a match
10995
- let /** @type {?} */ value;
10996
10969
  switch (queryValueType) {
10997
10970
  case 1 /* RenderElement */:
10998
- value = asElementData(view, nodeDef.index).renderElement;
10999
- break;
10971
+ return asElementData(view, nodeDef.nodeIndex).renderElement;
11000
10972
  case 0 /* ElementRef */:
11001
- value = new ElementRef(asElementData(view, nodeDef.index).renderElement);
11002
- break;
10973
+ return new ElementRef(asElementData(view, nodeDef.nodeIndex).renderElement);
11003
10974
  case 2 /* TemplateRef */:
11004
- value = asElementData(view, nodeDef.index).template;
11005
- break;
10975
+ return asElementData(view, nodeDef.nodeIndex).template;
11006
10976
  case 3 /* ViewContainerRef */:
11007
- value = asElementData(view, nodeDef.index).viewContainer;
11008
- break;
10977
+ return asElementData(view, nodeDef.nodeIndex).viewContainer;
11009
10978
  case 4 /* Provider */:
11010
- value = asProviderData(view, nodeDef.index).instance;
11011
- break;
10979
+ return asProviderData(view, nodeDef.nodeIndex).instance;
11012
10980
  }
11013
- return value;
11014
10981
  }
11015
10982
  }
11016
10983
 
@@ -11029,12 +10996,13 @@ function getQueryValue(view, nodeDef, queryValueType) {
11029
10996
  function ngContentDef(ngContentIndex, index) {
11030
10997
  return {
11031
10998
  // will bet set by the view definition
11032
- index: -1,
10999
+ nodeIndex: -1,
11033
11000
  parent: null,
11034
11001
  renderParent: null,
11035
11002
  bindingIndex: -1,
11036
11003
  outputIndex: -1,
11037
11004
  // regular values
11005
+ checkIndex: -1,
11038
11006
  flags: 8 /* TypeNgContent */,
11039
11007
  childFlags: 0,
11040
11008
  directChildFlags: 0,
@@ -11077,25 +11045,28 @@ function appendNgContent(view, renderHost, def) {
11077
11045
  * found in the LICENSE file at https://angular.io/license
11078
11046
  */
11079
11047
  /**
11048
+ * @param {?} checkIndex
11080
11049
  * @param {?} argCount
11081
11050
  * @return {?}
11082
11051
  */
11083
- function purePipeDef(argCount) {
11052
+ function purePipeDef(checkIndex, argCount) {
11084
11053
  // argCount + 1 to include the pipe as first arg
11085
- return _pureExpressionDef(128 /* TypePurePipe */, new Array(argCount + 1));
11054
+ return _pureExpressionDef(128 /* TypePurePipe */, checkIndex, new Array(argCount + 1));
11086
11055
  }
11087
11056
  /**
11057
+ * @param {?} checkIndex
11088
11058
  * @param {?} argCount
11089
11059
  * @return {?}
11090
11060
  */
11091
- function pureArrayDef(argCount) {
11092
- return _pureExpressionDef(32 /* TypePureArray */, new Array(argCount));
11061
+ function pureArrayDef(checkIndex, argCount) {
11062
+ return _pureExpressionDef(32 /* TypePureArray */, checkIndex, new Array(argCount));
11093
11063
  }
11094
11064
  /**
11065
+ * @param {?} checkIndex
11095
11066
  * @param {?} propToIndex
11096
11067
  * @return {?}
11097
11068
  */
11098
- function pureObjectDef(propToIndex) {
11069
+ function pureObjectDef(checkIndex, propToIndex) {
11099
11070
  const /** @type {?} */ keys = Object.keys(propToIndex);
11100
11071
  const /** @type {?} */ nbKeys = keys.length;
11101
11072
  const /** @type {?} */ propertyNames = new Array(nbKeys);
@@ -11104,14 +11075,15 @@ function pureObjectDef(propToIndex) {
11104
11075
  const /** @type {?} */ index = propToIndex[key];
11105
11076
  propertyNames[index] = key;
11106
11077
  }
11107
- return _pureExpressionDef(64 /* TypePureObject */, propertyNames);
11078
+ return _pureExpressionDef(64 /* TypePureObject */, checkIndex, propertyNames);
11108
11079
  }
11109
11080
  /**
11110
11081
  * @param {?} flags
11082
+ * @param {?} checkIndex
11111
11083
  * @param {?} propertyNames
11112
11084
  * @return {?}
11113
11085
  */
11114
- function _pureExpressionDef(flags, propertyNames) {
11086
+ function _pureExpressionDef(flags, checkIndex, propertyNames) {
11115
11087
  const /** @type {?} */ bindings = new Array(propertyNames.length);
11116
11088
  for (let /** @type {?} */ i = 0; i < propertyNames.length; i++) {
11117
11089
  const /** @type {?} */ prop = propertyNames[i];
@@ -11126,12 +11098,13 @@ function _pureExpressionDef(flags, propertyNames) {
11126
11098
  }
11127
11099
  return {
11128
11100
  // will bet set by the view definition
11129
- index: -1,
11101
+ nodeIndex: -1,
11130
11102
  parent: null,
11131
11103
  renderParent: null,
11132
11104
  bindingIndex: -1,
11133
11105
  outputIndex: -1,
11134
11106
  // regular values
11107
+ checkIndex,
11135
11108
  flags,
11136
11109
  childFlags: 0,
11137
11110
  directChildFlags: 0,
@@ -11198,7 +11171,7 @@ function checkAndUpdatePureExpressionInline(view, def, v0, v1, v2, v3, v4, v5, v
11198
11171
  if (bindLen > 9 && checkAndUpdateBinding(view, def, 9, v9))
11199
11172
  changed = true;
11200
11173
  if (changed) {
11201
- const /** @type {?} */ data = asPureExpressionData(view, def.index);
11174
+ const /** @type {?} */ data = asPureExpressionData(view, def.nodeIndex);
11202
11175
  let /** @type {?} */ value;
11203
11176
  switch (def.flags & 201347067 /* Types */) {
11204
11177
  case 32 /* TypePureArray */:
@@ -11304,7 +11277,7 @@ function checkAndUpdatePureExpressionDynamic(view, def, values) {
11304
11277
  }
11305
11278
  }
11306
11279
  if (changed) {
11307
- const /** @type {?} */ data = asPureExpressionData(view, def.index);
11280
+ const /** @type {?} */ data = asPureExpressionData(view, def.nodeIndex);
11308
11281
  let /** @type {?} */ value;
11309
11282
  switch (def.flags & 201347067 /* Types */) {
11310
11283
  case 32 /* TypePureArray */:
@@ -11335,32 +11308,33 @@ function checkAndUpdatePureExpressionDynamic(view, def, values) {
11335
11308
  * found in the LICENSE file at https://angular.io/license
11336
11309
  */
11337
11310
  /**
11311
+ * @param {?} checkIndex
11338
11312
  * @param {?} ngContentIndex
11339
- * @param {?} constants
11313
+ * @param {?} staticText
11340
11314
  * @return {?}
11341
11315
  */
11342
- function textDef(ngContentIndex, constants) {
11343
- const /** @type {?} */ bindings = new Array(constants.length - 1);
11344
- for (let /** @type {?} */ i = 1; i < constants.length; i++) {
11316
+ function textDef(checkIndex, ngContentIndex, staticText) {
11317
+ const /** @type {?} */ bindings = new Array(staticText.length - 1);
11318
+ for (let /** @type {?} */ i = 1; i < staticText.length; i++) {
11345
11319
  bindings[i - 1] = {
11346
11320
  flags: 8 /* TypeProperty */,
11347
11321
  name: null,
11348
11322
  ns: null,
11349
11323
  nonMinifiedName: null,
11350
11324
  securityContext: null,
11351
- suffix: constants[i]
11325
+ suffix: staticText[i],
11352
11326
  };
11353
11327
  }
11354
- const /** @type {?} */ flags = 2;
11355
11328
  return {
11356
11329
  // will bet set by the view definition
11357
- index: -1,
11330
+ nodeIndex: -1,
11358
11331
  parent: null,
11359
11332
  renderParent: null,
11360
11333
  bindingIndex: -1,
11361
11334
  outputIndex: -1,
11362
11335
  // regular values
11363
- flags,
11336
+ checkIndex,
11337
+ flags: 2 /* TypeText */,
11364
11338
  childFlags: 0,
11365
11339
  directChildFlags: 0,
11366
11340
  childMatchedQueries: 0,
@@ -11368,13 +11342,13 @@ function textDef(ngContentIndex, constants) {
11368
11342
  matchedQueryIds: 0,
11369
11343
  references: {}, ngContentIndex,
11370
11344
  childCount: 0, bindings,
11371
- bindingFlags: calcBindingFlags(bindings),
11345
+ bindingFlags: 8 /* TypeProperty */,
11372
11346
  outputs: [],
11373
11347
  element: null,
11374
11348
  provider: null,
11375
- text: { prefix: constants[0] },
11349
+ text: { prefix: staticText[0] },
11376
11350
  query: null,
11377
- ngContent: null
11351
+ ngContent: null,
11378
11352
  };
11379
11353
  }
11380
11354
  /**
@@ -11454,7 +11428,7 @@ function checkAndUpdateTextInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8,
11454
11428
  value += _addInterpolationPart(v8, bindings[8]);
11455
11429
  if (bindLen > 9)
11456
11430
  value += _addInterpolationPart(v9, bindings[9]);
11457
- const /** @type {?} */ renderNode$$1 = asTextData(view, def.index).renderText;
11431
+ const /** @type {?} */ renderNode$$1 = asTextData(view, def.nodeIndex).renderText;
11458
11432
  view.renderer.setValue(renderNode$$1, value);
11459
11433
  }
11460
11434
  return changed;
@@ -11481,7 +11455,7 @@ function checkAndUpdateTextDynamic(view, def, values) {
11481
11455
  value = value + _addInterpolationPart(values[i], bindings[i]);
11482
11456
  }
11483
11457
  value = ((def.text)).prefix + value;
11484
- const /** @type {?} */ renderNode$$1 = asTextData(view, def.index).renderText;
11458
+ const /** @type {?} */ renderNode$$1 = asTextData(view, def.nodeIndex).renderText;
11485
11459
  view.renderer.setValue(renderNode$$1, value);
11486
11460
  }
11487
11461
  return changed;
@@ -11518,33 +11492,19 @@ function viewDef(flags, nodes, updateDirectives, updateRenderer) {
11518
11492
  let /** @type {?} */ viewRootNodeFlags = 0;
11519
11493
  let /** @type {?} */ viewMatchedQueries = 0;
11520
11494
  let /** @type {?} */ currentParent = null;
11495
+ let /** @type {?} */ currentRenderParent = null;
11521
11496
  let /** @type {?} */ currentElementHasPublicProviders = false;
11522
11497
  let /** @type {?} */ currentElementHasPrivateProviders = false;
11523
11498
  let /** @type {?} */ lastRenderRootNode = null;
11524
11499
  for (let /** @type {?} */ i = 0; i < nodes.length; i++) {
11525
- while (currentParent && i > currentParent.index + currentParent.childCount) {
11526
- const /** @type {?} */ newParent = currentParent.parent;
11527
- if (newParent) {
11528
- newParent.childFlags |= ((currentParent.childFlags));
11529
- newParent.childMatchedQueries |= currentParent.childMatchedQueries;
11530
- }
11531
- currentParent = newParent;
11532
- }
11533
11500
  const /** @type {?} */ node = nodes[i];
11534
- node.index = i;
11501
+ node.nodeIndex = i;
11535
11502
  node.parent = currentParent;
11536
11503
  node.bindingIndex = viewBindingCount;
11537
11504
  node.outputIndex = viewDisposableCount;
11538
- // renderParent needs to account for ng-container!
11539
- let /** @type {?} */ currentRenderParent;
11540
- if (currentParent && currentParent.flags & 1 /* TypeElement */ &&
11541
- !((currentParent.element)).name) {
11542
- currentRenderParent = currentParent.renderParent;
11543
- }
11544
- else {
11545
- currentRenderParent = currentParent;
11546
- }
11547
11505
  node.renderParent = currentRenderParent;
11506
+ viewNodeFlags |= node.flags;
11507
+ viewMatchedQueries |= node.matchedQueryIds;
11548
11508
  if (node.element) {
11549
11509
  const /** @type {?} */ elDef = node.element;
11550
11510
  elDef.publicProviders =
@@ -11553,24 +11513,11 @@ function viewDef(flags, nodes, updateDirectives, updateRenderer) {
11553
11513
  // Note: We assume that all providers of an element are before any child element!
11554
11514
  currentElementHasPublicProviders = false;
11555
11515
  currentElementHasPrivateProviders = false;
11556
- }
11557
- validateNode(currentParent, node, nodes.length);
11558
- viewNodeFlags |= node.flags;
11559
- viewMatchedQueries |= node.matchedQueryIds;
11560
- if (node.element && node.element.template) {
11561
- viewMatchedQueries |= node.element.template.nodeMatchedQueries;
11562
- }
11563
- if (currentParent) {
11564
- currentParent.childFlags |= node.flags;
11565
- currentParent.directChildFlags |= node.flags;
11566
- currentParent.childMatchedQueries |= node.matchedQueryIds;
11567
- if (node.element && node.element.template) {
11568
- currentParent.childMatchedQueries |= node.element.template.nodeMatchedQueries;
11516
+ if (node.element.template) {
11517
+ viewMatchedQueries |= node.element.template.nodeMatchedQueries;
11569
11518
  }
11570
11519
  }
11571
- else {
11572
- viewRootNodeFlags |= node.flags;
11573
- }
11520
+ validateNode(currentParent, node, nodes.length);
11574
11521
  viewBindingCount += node.bindings.length;
11575
11522
  viewDisposableCount += node.outputs.length;
11576
11523
  if (!currentRenderParent && (node.flags & 3 /* CatRenderNode */)) {
@@ -11594,7 +11541,7 @@ function viewDef(flags, nodes, updateDirectives, updateRenderer) {
11594
11541
  if (!currentElementHasPrivateProviders) {
11595
11542
  currentElementHasPrivateProviders = true; /** @type {?} */
11596
11543
  ((((
11597
- // Use protoyypical inheritance to not get O(n^2) complexity...
11544
+ // Use prototypical inheritance to not get O(n^2) complexity...
11598
11545
  currentParent)).element)).allProviders =
11599
11546
  Object.create(/** @type {?} */ ((((currentParent)).element)).publicProviders);
11600
11547
  } /** @type {?} */
@@ -11604,17 +11551,45 @@ function viewDef(flags, nodes, updateDirectives, updateRenderer) {
11604
11551
  ((((currentParent)).element)).componentProvider = node;
11605
11552
  }
11606
11553
  }
11607
- if (node.childCount) {
11554
+ if (currentParent) {
11555
+ currentParent.childFlags |= node.flags;
11556
+ currentParent.directChildFlags |= node.flags;
11557
+ currentParent.childMatchedQueries |= node.matchedQueryIds;
11558
+ if (node.element && node.element.template) {
11559
+ currentParent.childMatchedQueries |= node.element.template.nodeMatchedQueries;
11560
+ }
11561
+ }
11562
+ else {
11563
+ viewRootNodeFlags |= node.flags;
11564
+ }
11565
+ if (node.childCount > 0) {
11608
11566
  currentParent = node;
11567
+ if (!isNgContainer(node)) {
11568
+ currentRenderParent = node;
11569
+ }
11609
11570
  }
11610
- }
11611
- while (currentParent) {
11612
- const /** @type {?} */ newParent = currentParent.parent;
11613
- if (newParent) {
11614
- newParent.childFlags |= currentParent.childFlags;
11615
- newParent.childMatchedQueries |= currentParent.childMatchedQueries;
11571
+ else {
11572
+ // When the current node has no children, check if it is the last children of its parent.
11573
+ // When it is, propagate the flags up.
11574
+ // The loop is required because an element could be the last transitive children of several
11575
+ // elements. We loop to either the root or the highest opened element (= with remaining
11576
+ // children)
11577
+ while (currentParent && i === currentParent.nodeIndex + currentParent.childCount) {
11578
+ const /** @type {?} */ newParent = currentParent.parent;
11579
+ if (newParent) {
11580
+ newParent.childFlags |= currentParent.childFlags;
11581
+ newParent.childMatchedQueries |= currentParent.childMatchedQueries;
11582
+ }
11583
+ currentParent = newParent;
11584
+ // We also need to update the render parent & account for ng-container
11585
+ if (currentParent && isNgContainer(currentParent)) {
11586
+ currentRenderParent = currentParent.renderParent;
11587
+ }
11588
+ else {
11589
+ currentRenderParent = currentParent;
11590
+ }
11591
+ }
11616
11592
  }
11617
- currentParent = newParent;
11618
11593
  }
11619
11594
  const /** @type {?} */ handleEvent = (view, nodeIndex, eventName, event) => ((((nodes[nodeIndex].element)).handleEvent))(view, eventName, event);
11620
11595
  return {
@@ -11625,12 +11600,18 @@ function viewDef(flags, nodes, updateDirectives, updateRenderer) {
11625
11600
  nodeMatchedQueries: viewMatchedQueries, flags,
11626
11601
  nodes: nodes,
11627
11602
  updateDirectives: updateDirectives || NOOP,
11628
- updateRenderer: updateRenderer || NOOP,
11629
- handleEvent: handleEvent || NOOP,
11603
+ updateRenderer: updateRenderer || NOOP, handleEvent,
11630
11604
  bindingCount: viewBindingCount,
11631
11605
  outputCount: viewDisposableCount, lastRenderRootNode
11632
11606
  };
11633
11607
  }
11608
+ /**
11609
+ * @param {?} node
11610
+ * @return {?}
11611
+ */
11612
+ function isNgContainer(node) {
11613
+ return (node.flags & 1 /* TypeElement */) !== 0 && ((node.element)).name === null;
11614
+ }
11634
11615
  /**
11635
11616
  * @param {?} parent
11636
11617
  * @param {?} node
@@ -11645,28 +11626,28 @@ function validateNode(parent, node, nodeCount) {
11645
11626
  }
11646
11627
  if (template.lastRenderRootNode &&
11647
11628
  template.lastRenderRootNode.flags & 16777216 /* EmbeddedViews */) {
11648
- throw new Error(`Illegal State: Last root node of a template can't have embedded views, at index ${node.index}!`);
11629
+ throw new Error(`Illegal State: Last root node of a template can't have embedded views, at index ${node.nodeIndex}!`);
11649
11630
  }
11650
11631
  }
11651
11632
  if (node.flags & 20224 /* CatProvider */) {
11652
11633
  const /** @type {?} */ parentFlags = parent ? parent.flags : 0;
11653
11634
  if ((parentFlags & 1 /* TypeElement */) === 0) {
11654
- throw new Error(`Illegal State: Provider/Directive nodes need to be children of elements or anchors, at index ${node.index}!`);
11635
+ throw new Error(`Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index ${node.nodeIndex}!`);
11655
11636
  }
11656
11637
  }
11657
11638
  if (node.query) {
11658
11639
  if (node.flags & 67108864 /* TypeContentQuery */ &&
11659
11640
  (!parent || (parent.flags & 16384 /* TypeDirective */) === 0)) {
11660
- throw new Error(`Illegal State: Content Query nodes need to be children of directives, at index ${node.index}!`);
11641
+ throw new Error(`Illegal State: Content Query nodes need to be children of directives, at index ${node.nodeIndex}!`);
11661
11642
  }
11662
11643
  if (node.flags & 134217728 /* TypeViewQuery */ && parent) {
11663
- throw new Error(`Illegal State: View Query nodes have to be top level nodes, at index ${node.index}!`);
11644
+ throw new Error(`Illegal State: View Query nodes have to be top level nodes, at index ${node.nodeIndex}!`);
11664
11645
  }
11665
11646
  }
11666
11647
  if (node.childCount) {
11667
- const /** @type {?} */ parentEnd = parent ? parent.index + parent.childCount : nodeCount - 1;
11668
- if (node.index <= parentEnd && node.index + node.childCount > parentEnd) {
11669
- throw new Error(`Illegal State: childCount of node leads outside of parent, at index ${node.index}!`);
11648
+ const /** @type {?} */ parentEnd = parent ? parent.nodeIndex + parent.childCount : nodeCount - 1;
11649
+ if (node.nodeIndex <= parentEnd && node.nodeIndex + node.childCount > parentEnd) {
11650
+ throw new Error(`Illegal State: childCount of node leads outside of parent, at index ${node.nodeIndex}!`);
11670
11651
  }
11671
11652
  }
11672
11653
  }
@@ -11755,7 +11736,7 @@ function createViewNodes(view) {
11755
11736
  let /** @type {?} */ renderHost;
11756
11737
  if (isComponentView(view)) {
11757
11738
  const /** @type {?} */ hostDef = view.parentNodeDef;
11758
- renderHost = asElementData(/** @type {?} */ ((view.parent)), /** @type {?} */ ((((hostDef)).parent)).index).renderElement;
11739
+ renderHost = asElementData(/** @type {?} */ ((view.parent)), /** @type {?} */ ((((hostDef)).parent)).nodeIndex).renderElement;
11759
11740
  }
11760
11741
  const /** @type {?} */ def = view.def;
11761
11742
  const /** @type {?} */ nodes = view.nodes;
@@ -11789,8 +11770,11 @@ function createViewNodes(view) {
11789
11770
  case 1024 /* TypeFactoryProvider */:
11790
11771
  case 2048 /* TypeUseExistingProvider */:
11791
11772
  case 256 /* TypeValueProvider */: {
11792
- const /** @type {?} */ instance = createProviderInstance(view, nodeDef);
11793
- nodeData = ({ instance });
11773
+ nodeData = nodes[i];
11774
+ if (!nodeData && !(nodeDef.flags & 4096 /* LazyProvider */)) {
11775
+ const /** @type {?} */ instance = createProviderInstance(view, nodeDef);
11776
+ nodeData = ({ instance });
11777
+ }
11794
11778
  break;
11795
11779
  }
11796
11780
  case 16 /* TypePipe */: {
@@ -11799,11 +11783,14 @@ function createViewNodes(view) {
11799
11783
  break;
11800
11784
  }
11801
11785
  case 16384 /* TypeDirective */: {
11802
- const /** @type {?} */ instance = createDirectiveInstance(view, nodeDef);
11803
- nodeData = ({ instance });
11786
+ nodeData = nodes[i];
11787
+ if (!nodeData) {
11788
+ const /** @type {?} */ instance = createDirectiveInstance(view, nodeDef);
11789
+ nodeData = ({ instance });
11790
+ }
11804
11791
  if (nodeDef.flags & 32768 /* Component */) {
11805
- const /** @type {?} */ compView = asElementData(view, /** @type {?} */ ((nodeDef.parent)).index).componentView;
11806
- initView(compView, instance, instance);
11792
+ const /** @type {?} */ compView = asElementData(view, /** @type {?} */ ((nodeDef.parent)).nodeIndex).componentView;
11793
+ initView(compView, nodeData.instance, nodeData.instance);
11807
11794
  }
11808
11795
  break;
11809
11796
  }
@@ -11941,26 +11928,20 @@ function markProjectedViewsForCheck(view) {
11941
11928
  * @return {?}
11942
11929
  */
11943
11930
  function checkAndUpdateNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
11944
- let /** @type {?} */ changed = false;
11945
11931
  switch (nodeDef.flags & 201347067 /* Types */) {
11946
11932
  case 1 /* TypeElement */:
11947
- changed = checkAndUpdateElementInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
11948
- break;
11933
+ return checkAndUpdateElementInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
11949
11934
  case 2 /* TypeText */:
11950
- changed = checkAndUpdateTextInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
11951
- break;
11935
+ return checkAndUpdateTextInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
11952
11936
  case 16384 /* TypeDirective */:
11953
- changed =
11954
- checkAndUpdateDirectiveInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
11955
- break;
11937
+ return checkAndUpdateDirectiveInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
11956
11938
  case 32 /* TypePureArray */:
11957
11939
  case 64 /* TypePureObject */:
11958
11940
  case 128 /* TypePurePipe */:
11959
- changed =
11960
- checkAndUpdatePureExpressionInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
11961
- break;
11941
+ return checkAndUpdatePureExpressionInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
11942
+ default:
11943
+ throw 'unreachable';
11962
11944
  }
11963
- return changed;
11964
11945
  }
11965
11946
  /**
11966
11947
  * @param {?} view
@@ -11969,34 +11950,20 @@ function checkAndUpdateNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7,
11969
11950
  * @return {?}
11970
11951
  */
11971
11952
  function checkAndUpdateNodeDynamic(view, nodeDef, values) {
11972
- let /** @type {?} */ changed = false;
11973
11953
  switch (nodeDef.flags & 201347067 /* Types */) {
11974
11954
  case 1 /* TypeElement */:
11975
- changed = checkAndUpdateElementDynamic(view, nodeDef, values);
11976
- break;
11955
+ return checkAndUpdateElementDynamic(view, nodeDef, values);
11977
11956
  case 2 /* TypeText */:
11978
- changed = checkAndUpdateTextDynamic(view, nodeDef, values);
11979
- break;
11957
+ return checkAndUpdateTextDynamic(view, nodeDef, values);
11980
11958
  case 16384 /* TypeDirective */:
11981
- changed = checkAndUpdateDirectiveDynamic(view, nodeDef, values);
11982
- break;
11959
+ return checkAndUpdateDirectiveDynamic(view, nodeDef, values);
11983
11960
  case 32 /* TypePureArray */:
11984
11961
  case 64 /* TypePureObject */:
11985
11962
  case 128 /* TypePurePipe */:
11986
- changed = checkAndUpdatePureExpressionDynamic(view, nodeDef, values);
11987
- break;
11988
- }
11989
- if (changed) {
11990
- // Update oldValues after all bindings have been updated,
11991
- // as a setter for a property might update other properties.
11992
- const /** @type {?} */ bindLen = nodeDef.bindings.length;
11993
- const /** @type {?} */ bindingStart = nodeDef.bindingIndex;
11994
- const /** @type {?} */ oldValues = view.oldValues;
11995
- for (let /** @type {?} */ i = 0; i < bindLen; i++) {
11996
- oldValues[bindingStart + i] = values[i];
11997
- }
11963
+ return checkAndUpdatePureExpressionDynamic(view, nodeDef, values);
11964
+ default:
11965
+ throw 'unreachable';
11998
11966
  }
11999
- return changed;
12000
11967
  }
12001
11968
  /**
12002
11969
  * @param {?} view
@@ -12081,9 +12048,9 @@ function checkNoChangesNodeDynamic(view, nodeDef, values) {
12081
12048
  * @return {?}
12082
12049
  */
12083
12050
  function checkNoChangesQuery(view, nodeDef) {
12084
- const /** @type {?} */ queryList = asQueryList(view, nodeDef.index);
12051
+ const /** @type {?} */ queryList = asQueryList(view, nodeDef.nodeIndex);
12085
12052
  if (queryList.dirty) {
12086
- throw expressionChangedAfterItHasBeenCheckedError(Services.createDebugContext(view, nodeDef.index), `Query ${ /** @type {?} */((nodeDef.query)).id} not dirty`, `Query ${ /** @type {?} */((nodeDef.query)).id} dirty`, (view.state & 1 /* BeforeFirstCheck */) !== 0);
12053
+ throw expressionChangedAfterItHasBeenCheckedError(Services.createDebugContext(view, nodeDef.nodeIndex), `Query ${ /** @type {?} */((nodeDef.query)).id} not dirty`, `Query ${ /** @type {?} */((nodeDef.query)).id} dirty`, (view.state & 1 /* BeforeFirstCheck */) !== 0);
12087
12054
  }
12088
12055
  }
12089
12056
  /**
@@ -12276,7 +12243,7 @@ function execQueriesAction(view, queryFlags, staticDynamicQueryFlag, checkType)
12276
12243
  for (let /** @type {?} */ i = 0; i < nodeCount; i++) {
12277
12244
  const /** @type {?} */ nodeDef = view.def.nodes[i];
12278
12245
  if ((nodeDef.flags & queryFlags) && (nodeDef.flags & staticDynamicQueryFlag)) {
12279
- Services.setCurrentNode(view, nodeDef.index);
12246
+ Services.setCurrentNode(view, nodeDef.nodeIndex);
12280
12247
  switch (checkType) {
12281
12248
  case 0 /* CheckAndUpdate */:
12282
12249
  checkAndUpdateQuery(view, nodeDef);
@@ -12498,7 +12465,7 @@ function applyProviderOverridesToView(def) {
12498
12465
  }
12499
12466
  if (lastElementDef && nodeDef.flags & 3840 /* CatProviderNoDirective */ &&
12500
12467
  providerOverrides.has(/** @type {?} */ ((nodeDef.provider)).token)) {
12501
- elIndicesWithOverwrittenProviders.push(/** @type {?} */ ((lastElementDef)).index);
12468
+ elIndicesWithOverwrittenProviders.push(/** @type {?} */ ((lastElementDef)).nodeIndex);
12502
12469
  lastElementDef = null;
12503
12470
  }
12504
12471
  }
@@ -12517,9 +12484,6 @@ function applyProviderOverridesToView(def) {
12517
12484
  return;
12518
12485
  }
12519
12486
  if (nodeDef.flags & 3840 /* CatProviderNoDirective */) {
12520
- // Make all providers lazy, so that we don't get into trouble
12521
- // with ordering problems of providers on the same element
12522
- nodeDef.flags |= 4096 /* LazyProvider */;
12523
12487
  const /** @type {?} */ provider = ((nodeDef.provider));
12524
12488
  const /** @type {?} */ override = providerOverrides.get(provider.token);
12525
12489
  if (override) {
@@ -12536,7 +12500,8 @@ function applyProviderOverridesToView(def) {
12536
12500
  * @return {?}
12537
12501
  */
12538
12502
  function applyProviderOverridesToNgModule(def) {
12539
- if (providerOverrides.size === 0 || !hasOverrrides(def)) {
12503
+ const { hasOverrides, hasDeprecatedOverrides } = calcHasOverrides(def);
12504
+ if (!hasOverrides) {
12540
12505
  return def;
12541
12506
  }
12542
12507
  // clone the whole view definition,
@@ -12548,8 +12513,20 @@ function applyProviderOverridesToNgModule(def) {
12548
12513
  * @param {?} def
12549
12514
  * @return {?}
12550
12515
  */
12551
- function hasOverrrides(def) {
12552
- return def.providers.some(node => !!(node.flags & 3840 /* CatProviderNoDirective */) && providerOverrides.has(node.token));
12516
+ function calcHasOverrides(def) {
12517
+ let /** @type {?} */ hasOverrides = false;
12518
+ let /** @type {?} */ hasDeprecatedOverrides = false;
12519
+ if (providerOverrides.size === 0) {
12520
+ return { hasOverrides, hasDeprecatedOverrides };
12521
+ }
12522
+ def.providers.forEach(node => {
12523
+ const /** @type {?} */ override = providerOverrides.get(node.token);
12524
+ if ((node.flags & 3840 /* CatProviderNoDirective */) && override) {
12525
+ hasOverrides = true;
12526
+ hasDeprecatedOverrides = hasDeprecatedOverrides || override.deprecatedBehavior;
12527
+ }
12528
+ });
12529
+ return { hasOverrides, hasDeprecatedOverrides };
12553
12530
  }
12554
12531
  /**
12555
12532
  * @param {?} def
@@ -12558,9 +12535,12 @@ function applyProviderOverridesToNgModule(def) {
12558
12535
  function applyProviderOverrides(def) {
12559
12536
  for (let /** @type {?} */ i = 0; i < def.providers.length; i++) {
12560
12537
  const /** @type {?} */ provider = def.providers[i];
12561
- // Make all providers lazy, so that we don't get into trouble
12562
- // with ordering problems of providers on the same element
12563
- provider.flags |= 4096 /* LazyProvider */;
12538
+ if (hasDeprecatedOverrides) {
12539
+ // We had a bug where me made
12540
+ // all providers lazy. Keep this logic behind a flag
12541
+ // for migrating existing users.
12542
+ provider.flags |= 4096 /* LazyProvider */;
12543
+ }
12564
12544
  const /** @type {?} */ override = providerOverrides.get(provider.token);
12565
12545
  if (override) {
12566
12546
  provider.flags = (provider.flags & ~3840 /* CatProviderNoDirective */) | override.flags;
@@ -12572,7 +12552,7 @@ function applyProviderOverridesToNgModule(def) {
12572
12552
  }
12573
12553
  /**
12574
12554
  * @param {?} view
12575
- * @param {?} nodeIndex
12555
+ * @param {?} checkIndex
12576
12556
  * @param {?} argStyle
12577
12557
  * @param {?=} v0
12578
12558
  * @param {?=} v1
@@ -12586,16 +12566,16 @@ function applyProviderOverridesToNgModule(def) {
12586
12566
  * @param {?=} v9
12587
12567
  * @return {?}
12588
12568
  */
12589
- function prodCheckAndUpdateNode(view, nodeIndex, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
12590
- const /** @type {?} */ nodeDef = view.def.nodes[nodeIndex];
12569
+ function prodCheckAndUpdateNode(view, checkIndex, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
12570
+ const /** @type {?} */ nodeDef = view.def.nodes[checkIndex];
12591
12571
  checkAndUpdateNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
12592
12572
  return (nodeDef.flags & 224 /* CatPureExpression */) ?
12593
- asPureExpressionData(view, nodeIndex).value :
12573
+ asPureExpressionData(view, checkIndex).value :
12594
12574
  undefined;
12595
12575
  }
12596
12576
  /**
12597
12577
  * @param {?} view
12598
- * @param {?} nodeIndex
12578
+ * @param {?} checkIndex
12599
12579
  * @param {?} argStyle
12600
12580
  * @param {?=} v0
12601
12581
  * @param {?=} v1
@@ -12609,11 +12589,11 @@ function prodCheckAndUpdateNode(view, nodeIndex, argStyle, v0, v1, v2, v3, v4, v
12609
12589
  * @param {?=} v9
12610
12590
  * @return {?}
12611
12591
  */
12612
- function prodCheckNoChangesNode(view, nodeIndex, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
12613
- const /** @type {?} */ nodeDef = view.def.nodes[nodeIndex];
12592
+ function prodCheckNoChangesNode(view, checkIndex, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
12593
+ const /** @type {?} */ nodeDef = view.def.nodes[checkIndex];
12614
12594
  checkNoChangesNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
12615
12595
  return (nodeDef.flags & 224 /* CatPureExpression */) ?
12616
- asPureExpressionData(view, nodeIndex).value :
12596
+ asPureExpressionData(view, checkIndex).value :
12617
12597
  undefined;
12618
12598
  }
12619
12599
  /**
@@ -12701,7 +12681,7 @@ function debugUpdateDirectives(view, checkType) {
12701
12681
  debugSetCurrentNode(view, nextDirectiveWithBinding(view, nodeIndex));
12702
12682
  }
12703
12683
  return (nodeDef.flags & 224 /* CatPureExpression */) ?
12704
- asPureExpressionData(view, nodeDef.index).value :
12684
+ asPureExpressionData(view, nodeDef.nodeIndex).value :
12705
12685
  undefined;
12706
12686
  }
12707
12687
  }
@@ -12735,7 +12715,7 @@ function debugUpdateRenderer(view, checkType) {
12735
12715
  debugSetCurrentNode(view, nextRenderNodeWithBinding(view, nodeIndex));
12736
12716
  }
12737
12717
  return (nodeDef.flags & 224 /* CatPureExpression */) ?
12738
- asPureExpressionData(view, nodeDef.index).value :
12718
+ asPureExpressionData(view, nodeDef.nodeIndex).value :
12739
12719
  undefined;
12740
12720
  }
12741
12721
  }
@@ -12761,7 +12741,7 @@ function debugCheckAndUpdateNode(view, nodeDef, argStyle, givenValues) {
12761
12741
  }
12762
12742
  }
12763
12743
  const /** @type {?} */ elDef = ((nodeDef.parent));
12764
- const /** @type {?} */ el = asElementData(view, elDef.index).renderElement;
12744
+ const /** @type {?} */ el = asElementData(view, elDef.nodeIndex).renderElement;
12765
12745
  if (!((elDef.element)).name) {
12766
12746
  // a comment.
12767
12747
  view.renderer.setValue(el, `bindings=${JSON.stringify(bindingValues, null, 2)}`);
@@ -12880,7 +12860,7 @@ class DebugContext_ {
12880
12860
  */
12881
12861
  get elOrCompView() {
12882
12862
  // Has to be done lazily as we use the DebugContext also during creation of elements...
12883
- return asElementData(this.elView, this.elDef.index).componentView || this.view;
12863
+ return asElementData(this.elView, this.elDef.nodeIndex).componentView || this.view;
12884
12864
  }
12885
12865
  /**
12886
12866
  * @return {?}
@@ -12900,7 +12880,7 @@ class DebugContext_ {
12900
12880
  get providerTokens() {
12901
12881
  const /** @type {?} */ tokens = [];
12902
12882
  if (this.elDef) {
12903
- for (let /** @type {?} */ i = this.elDef.index + 1; i <= this.elDef.index + this.elDef.childCount; i++) {
12883
+ for (let /** @type {?} */ i = this.elDef.nodeIndex + 1; i <= this.elDef.nodeIndex + this.elDef.childCount; i++) {
12904
12884
  const /** @type {?} */ childDef = this.elView.def.nodes[i];
12905
12885
  if (childDef.flags & 20224 /* CatProvider */) {
12906
12886
  tokens.push(/** @type {?} */ ((childDef.provider)).token);
@@ -12917,7 +12897,7 @@ class DebugContext_ {
12917
12897
  const /** @type {?} */ references = {};
12918
12898
  if (this.elDef) {
12919
12899
  collectReferences(this.elView, this.elDef, references);
12920
- for (let /** @type {?} */ i = this.elDef.index + 1; i <= this.elDef.index + this.elDef.childCount; i++) {
12900
+ for (let /** @type {?} */ i = this.elDef.nodeIndex + 1; i <= this.elDef.nodeIndex + this.elDef.childCount; i++) {
12921
12901
  const /** @type {?} */ childDef = this.elView.def.nodes[i];
12922
12902
  if (childDef.flags & 20224 /* CatProvider */) {
12923
12903
  collectReferences(this.elView, childDef, references);
@@ -12951,11 +12931,11 @@ class DebugContext_ {
12951
12931
  let /** @type {?} */ logNodeIndex;
12952
12932
  if (this.nodeDef.flags & 2 /* TypeText */) {
12953
12933
  logViewDef = this.view.def;
12954
- logNodeIndex = this.nodeDef.index;
12934
+ logNodeIndex = this.nodeDef.nodeIndex;
12955
12935
  }
12956
12936
  else {
12957
12937
  logViewDef = this.elView.def;
12958
- logNodeIndex = this.elDef.index;
12938
+ logNodeIndex = this.elDef.nodeIndex;
12959
12939
  }
12960
12940
  // Note: we only generate a log function for text and element nodes
12961
12941
  // to make the generated code as small as possible.
@@ -13001,7 +12981,7 @@ function findHostElement(view) {
13001
12981
  view = ((view.parent));
13002
12982
  }
13003
12983
  if (view.parent) {
13004
- return asElementData(view.parent, /** @type {?} */ ((viewParentEl(view))).index);
12984
+ return asElementData(view.parent, /** @type {?} */ ((viewParentEl(view))).nodeIndex);
13005
12985
  }
13006
12986
  return null;
13007
12987
  }
@@ -13432,6 +13412,11 @@ class NgModuleFactory_ extends NgModuleFactory {
13432
13412
  * the
13433
13413
  * trigger is bound to (in the form of `[\@triggerName]="expression"`.
13434
13414
  *
13415
+ * Animation trigger bindings strigify values and then match the previous and current values against
13416
+ * any linked transitions. If a boolean value is provided into the trigger binding then it will both
13417
+ * be represented as `1` or `true` and `0` or `false` for a true and false boolean values
13418
+ * respectively.
13419
+ *
13435
13420
  * ### Usage
13436
13421
  *
13437
13422
  * `trigger` will create an animation trigger reference based on the provided `name` value. The
@@ -13914,6 +13899,21 @@ function keyframes$1(steps) {
13914
13899
  * ])
13915
13900
  * ```
13916
13901
  *
13902
+ * ### Boolean values
13903
+ * if a trigger binding value is a boolean value then it can be matched using a transition
13904
+ * expression that compares `true` and `false` or `1` and `0`.
13905
+ *
13906
+ * ```
13907
+ * // in the template
13908
+ * <div [\@openClose]="open ? true : false">...</div>
13909
+ *
13910
+ * // in the component metadata
13911
+ * trigger('openClose', [
13912
+ * state('true', style({ height: '*' })),
13913
+ * state('false', style({ height: '0px' })),
13914
+ * transition('false <=> true', animate(500))
13915
+ * ])
13916
+ * ```
13917
13917
  * {\@example core/animation/ts/dsl/animation_example.ts region='Component'}
13918
13918
  *
13919
13919
  * \@experimental Animation support is experimental.
@@ -13937,7 +13937,7 @@ function transition$1(stateChangeExpr, steps, options = null) {
13937
13937
  * var fadeAnimation = animation([
13938
13938
  * style({ opacity: '{{ start }}' }),
13939
13939
  * animate('{{ time }}',
13940
- * style({ opacity: '{{ end }}'))
13940
+ * style({ opacity: '{{ end }}'}))
13941
13941
  * ], { params: { time: '1000ms', start: 0, end: 1 }});
13942
13942
  * ```
13943
13943
  *