@angular/core 6.0.0-rc.3 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/bundles/core-testing.umd.js +95 -19
  2. package/bundles/core-testing.umd.js.map +1 -1
  3. package/bundles/core-testing.umd.min.js +10 -11
  4. package/bundles/core-testing.umd.min.js.map +1 -1
  5. package/bundles/core.umd.js +555 -389
  6. package/bundles/core.umd.js.map +1 -1
  7. package/bundles/core.umd.min.js +77 -77
  8. package/bundles/core.umd.min.js.map +1 -1
  9. package/core.metadata.json +1 -1
  10. package/esm2015/index.js +2 -2
  11. package/esm2015/public_api.js +2 -2
  12. package/esm2015/src/application_ref.js +6 -6
  13. package/esm2015/src/change_detection/change_detection_util.js +3 -3
  14. package/esm2015/src/change_detection/change_detector_ref.js +2 -2
  15. package/esm2015/src/change_detection/constants.js +1 -1
  16. package/esm2015/src/change_detection/differs/default_iterable_differ.js +15 -15
  17. package/esm2015/src/change_detection/differs/default_keyvalue_differ.js +2 -2
  18. package/esm2015/src/change_detection/differs/iterable_differs.js +15 -7
  19. package/esm2015/src/change_detection/differs/keyvalue_differs.js +6 -6
  20. package/esm2015/src/change_detection/pipe_transform.js +2 -2
  21. package/esm2015/src/core.js +4 -4
  22. package/esm2015/src/core_private_export.js +2 -2
  23. package/esm2015/src/core_render3_private_export.js +2 -2
  24. package/esm2015/src/di/defs.js +36 -19
  25. package/esm2015/src/di/injectable.js +3 -3
  26. package/esm2015/src/di/injection_token.js +2 -2
  27. package/esm2015/src/di/injector.js +35 -14
  28. package/esm2015/src/di/metadata.js +11 -11
  29. package/esm2015/src/di/provider.js +9 -9
  30. package/esm2015/src/di/r3_injector.js +12 -12
  31. package/esm2015/src/di/reflective_errors.js +3 -3
  32. package/esm2015/src/di.js +1 -1
  33. package/esm2015/src/error_handler.js +2 -2
  34. package/esm2015/src/event_emitter.js +2 -2
  35. package/esm2015/src/linker/compiler.js +2 -2
  36. package/esm2015/src/linker/component_factory.js +3 -3
  37. package/esm2015/src/linker/component_factory_resolver.js +2 -2
  38. package/esm2015/src/linker/element_ref.js +3 -3
  39. package/esm2015/src/linker/ng_module_factory.js +2 -2
  40. package/esm2015/src/linker/ng_module_factory_loader.js +2 -2
  41. package/esm2015/src/linker/query_list.js +2 -2
  42. package/esm2015/src/linker/template_ref.js +2 -2
  43. package/esm2015/src/linker/view_container_ref.js +2 -2
  44. package/esm2015/src/linker/view_ref.js +2 -2
  45. package/esm2015/src/metadata/di.js +12 -12
  46. package/esm2015/src/metadata/directives.js +15 -15
  47. package/esm2015/src/metadata/lifecycle_hooks.js +10 -10
  48. package/esm2015/src/metadata/ng_module.js +5 -5
  49. package/esm2015/src/metadata/view.js +1 -1
  50. package/esm2015/src/render3/assert.js +13 -1
  51. package/esm2015/src/render3/component.js +2 -1
  52. package/esm2015/src/render3/definition.js +4 -4
  53. package/esm2015/src/render3/di.js +61 -89
  54. package/esm2015/src/render3/hooks.js +7 -7
  55. package/esm2015/src/render3/index.js +1 -1
  56. package/esm2015/src/render3/instructions.js +128 -79
  57. package/esm2015/src/render3/interfaces/definition.js +9 -1
  58. package/esm2015/src/render3/interfaces/injector.js +1 -3
  59. package/esm2015/src/render3/interfaces/node.js +7 -11
  60. package/esm2015/src/render3/interfaces/view.js +17 -3
  61. package/esm2015/src/render3/node_manipulation.js +23 -3
  62. package/esm2015/src/render3/query.js +9 -7
  63. package/esm2015/src/sanitization/security.js +2 -2
  64. package/esm2015/src/type.js +2 -2
  65. package/esm2015/src/util/decorators.js +2 -2
  66. package/esm2015/src/util/lang.js +2 -2
  67. package/esm2015/src/version.js +4 -4
  68. package/esm2015/src/view/ng_module.js +5 -2
  69. package/esm2015/src/view/refs.js +1 -1
  70. package/esm2015/testing/src/async.js +2 -2
  71. package/esm2015/testing/src/async_fallback.js +2 -2
  72. package/esm2015/testing/src/component_fixture.js +2 -2
  73. package/esm2015/testing/src/test_bed.js +3 -3
  74. package/esm5/src/application_ref.js +7 -7
  75. package/esm5/src/change_detection/change_detection_util.js +7 -7
  76. package/esm5/src/change_detection/change_detector_ref.js +4 -4
  77. package/esm5/src/change_detection/constants.js +4 -4
  78. package/esm5/src/change_detection/differs/default_iterable_differ.js +18 -18
  79. package/esm5/src/change_detection/differs/default_keyvalue_differ.js +3 -3
  80. package/esm5/src/change_detection/differs/iterable_differs.js +9 -11
  81. package/esm5/src/change_detection/differs/keyvalue_differs.js +4 -4
  82. package/esm5/src/change_detection/pipe_transform.js +1 -1
  83. package/esm5/src/core_private_export.js +2 -2
  84. package/esm5/src/core_render3_private_export.js +2 -2
  85. package/esm5/src/di/defs.js +3 -6
  86. package/esm5/src/di/injectable.js +2 -2
  87. package/esm5/src/di/injection_token.js +4 -4
  88. package/esm5/src/di/injector.js +26 -11
  89. package/esm5/src/di/metadata.js +6 -6
  90. package/esm5/src/di/provider.js +1 -1
  91. package/esm5/src/di/r3_injector.js +12 -12
  92. package/esm5/src/di/reflective_errors.js +3 -3
  93. package/esm5/src/di.js +2 -2
  94. package/esm5/src/error_handler.js +4 -4
  95. package/esm5/src/event_emitter.js +4 -4
  96. package/esm5/src/linker/compiler.js +2 -2
  97. package/esm5/src/linker/component_factory.js +7 -7
  98. package/esm5/src/linker/component_factory_resolver.js +2 -2
  99. package/esm5/src/linker/element_ref.js +4 -4
  100. package/esm5/src/linker/ng_module_factory.js +4 -4
  101. package/esm5/src/linker/ng_module_factory_loader.js +4 -4
  102. package/esm5/src/linker/query_list.js +4 -4
  103. package/esm5/src/linker/template_ref.js +4 -4
  104. package/esm5/src/linker/view_container_ref.js +4 -4
  105. package/esm5/src/linker/view_ref.js +4 -4
  106. package/esm5/src/metadata/di.js +9 -9
  107. package/esm5/src/metadata/directives.js +8 -8
  108. package/esm5/src/metadata/lifecycle_hooks.js +1 -1
  109. package/esm5/src/metadata/ng_module.js +3 -3
  110. package/esm5/src/metadata/view.js +4 -4
  111. package/esm5/src/render3/assert.js +6 -1
  112. package/esm5/src/render3/component.js +2 -1
  113. package/esm5/src/render3/definition.js +1 -1
  114. package/esm5/src/render3/di.js +51 -74
  115. package/esm5/src/render3/hooks.js +6 -6
  116. package/esm5/src/render3/index.js +1 -1
  117. package/esm5/src/render3/instructions.js +123 -76
  118. package/esm5/src/render3/interfaces/definition.js +1 -1
  119. package/esm5/src/render3/interfaces/injector.js +1 -1
  120. package/esm5/src/render3/interfaces/node.js +1 -1
  121. package/esm5/src/render3/interfaces/view.js +1 -1
  122. package/esm5/src/render3/node_manipulation.js +20 -2
  123. package/esm5/src/render3/query.js +9 -7
  124. package/esm5/src/sanitization/security.js +7 -7
  125. package/esm5/src/type.js +2 -2
  126. package/esm5/src/util/decorators.js +1 -1
  127. package/esm5/src/util/lang.js +2 -2
  128. package/esm5/src/version.js +6 -6
  129. package/esm5/src/view/ng_module.js +5 -2
  130. package/esm5/src/view/refs.js +1 -1
  131. package/esm5/testing/src/async.js +2 -2
  132. package/esm5/testing/src/async_fallback.js +2 -2
  133. package/esm5/testing/src/component_fixture.js +4 -4
  134. package/esm5/testing/src/test_bed.js +5 -5
  135. package/fesm2015/core.js +468 -372
  136. package/fesm2015/core.js.map +1 -1
  137. package/fesm2015/testing.js +6 -6
  138. package/fesm2015/testing.js.map +1 -1
  139. package/fesm5/core.js +403 -321
  140. package/fesm5/core.js.map +1 -1
  141. package/fesm5/testing.js +6 -6
  142. package/fesm5/testing.js.map +1 -1
  143. package/package.json +5 -4
  144. package/src/application_ref.d.ts +5 -5
  145. package/src/change_detection/change_detection_util.d.ts +2 -2
  146. package/src/change_detection/change_detector_ref.d.ts +1 -1
  147. package/src/change_detection/constants.d.ts +1 -1
  148. package/src/change_detection/differs/default_iterable_differ.d.ts +1 -1
  149. package/src/change_detection/differs/iterable_differs.d.ts +8 -7
  150. package/src/change_detection/differs/keyvalue_differs.d.ts +5 -5
  151. package/src/change_detection/pipe_transform.d.ts +1 -1
  152. package/src/core_private_export.d.ts +1 -1
  153. package/src/core_render3_private_export.d.ts +1 -1
  154. package/src/di/defs.d.ts +29 -10
  155. package/src/di/injectable.d.ts +3 -3
  156. package/src/di/injection_token.d.ts +3 -4
  157. package/src/di/injector.d.ts +14 -11
  158. package/src/di/metadata.d.ts +20 -20
  159. package/src/di/provider.d.ts +10 -10
  160. package/src/di/r3_injector.d.ts +3 -3
  161. package/src/di/reflective_errors.d.ts +2 -2
  162. package/src/di.d.ts +1 -1
  163. package/src/error_handler.d.ts +1 -1
  164. package/src/event_emitter.d.ts +1 -1
  165. package/src/linker/compiler.d.ts +1 -1
  166. package/src/linker/component_factory.d.ts +2 -2
  167. package/src/linker/component_factory_resolver.d.ts +1 -1
  168. package/src/linker/element_ref.d.ts +2 -2
  169. package/src/linker/ng_module_factory.d.ts +1 -1
  170. package/src/linker/ng_module_factory_loader.d.ts +1 -1
  171. package/src/linker/query_list.d.ts +1 -1
  172. package/src/linker/template_ref.d.ts +1 -1
  173. package/src/linker/view_container_ref.d.ts +1 -1
  174. package/src/linker/view_ref.d.ts +1 -1
  175. package/src/metadata/di.d.ts +21 -21
  176. package/src/metadata/directives.d.ts +28 -28
  177. package/src/metadata/lifecycle_hooks.d.ts +9 -9
  178. package/src/metadata/ng_module.d.ts +5 -5
  179. package/src/metadata/view.d.ts +1 -1
  180. package/src/render3/assert.d.ts +1 -0
  181. package/src/render3/definition.d.ts +3 -3
  182. package/src/render3/di.d.ts +4 -14
  183. package/src/render3/index.d.ts +2 -1
  184. package/src/render3/instructions.d.ts +3 -3
  185. package/src/render3/interfaces/definition.d.ts +23 -4
  186. package/src/render3/interfaces/injector.d.ts +0 -2
  187. package/src/render3/interfaces/node.d.ts +7 -13
  188. package/src/render3/interfaces/view.d.ts +16 -3
  189. package/src/render3/node_manipulation.d.ts +3 -2
  190. package/src/sanitization/security.d.ts +2 -2
  191. package/src/type.d.ts +1 -1
  192. package/src/util/decorators.d.ts +1 -1
  193. package/src/version.d.ts +2 -2
  194. package/testing/src/async.d.ts +1 -1
  195. package/testing/src/async_fallback.d.ts +1 -1
  196. package/testing/src/component_fixture.d.ts +1 -1
  197. package/testing/src/test_bed.d.ts +2 -2
  198. package/testing.d.ts +1 -1
package/fesm2015/core.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v6.0.0-rc.3
2
+ * @license Angular v6.0.0
3
3
  * (c) 2010-2018 Google, Inc. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -28,9 +28,7 @@ import { share } from 'rxjs/operators';
28
28
  * `InjectorDef`, `NgModule`, or a special scope (e.g. `'root'`). A value of `null` indicates
29
29
  * that the injectable does not belong to any scope.
30
30
  *
31
- * This type is typically generated by the Angular compiler, but can be hand-written if needed.
32
- *
33
- * \@experimental
31
+ * NOTE: This is a private type and should not be exported
34
32
  * @record
35
33
  * @template T
36
34
  */
@@ -43,7 +41,7 @@ import { share } from 'rxjs/operators';
43
41
  * structure of providers with a defined priority (identically to how `NgModule`s also have
44
42
  * an import/dependency structure).
45
43
  *
46
- * \@experimental
44
+ * NOTE: This is a private type and should not be exported
47
45
  * @record
48
46
  * @template T
49
47
  */
@@ -75,7 +73,7 @@ import { share } from 'rxjs/operators';
75
73
  *
76
74
  * Objects of this type can be listed in the imports section of an `InjectorDef`.
77
75
  *
78
- * \@experimental
76
+ * NOTE: This is a private type and should not be exported
79
77
  * @record
80
78
  * @template T
81
79
  */
@@ -100,10 +98,9 @@ import { share } from 'rxjs/operators';
100
98
  * @return {?}
101
99
  */
102
100
  function defineInjectable(opts) {
103
- return {
104
- providedIn: (/** @type {?} */ (opts.providedIn)) || null,
105
- factory: opts.factory,
106
- };
101
+ return /** @type {?} */ ((/** @type {?} */ ({
102
+ providedIn: /** @type {?} */ (opts.providedIn) || null, factory: opts.factory, value: undefined,
103
+ })));
107
104
  }
108
105
  /**
109
106
  * Construct an `InjectorDef` which configures an injector.
@@ -128,11 +125,9 @@ function defineInjectable(opts) {
128
125
  * @return {?}
129
126
  */
130
127
  function defineInjector(options) {
131
- return {
132
- factory: options.factory,
133
- providers: options.providers || [],
134
- imports: options.imports || [],
135
- };
128
+ return /** @type {?} */ ((/** @type {?} */ ({
129
+ factory: options.factory, providers: options.providers || [], imports: options.imports || [],
130
+ })));
136
131
  }
137
132
 
138
133
  /**
@@ -182,7 +177,7 @@ function defineInjector(options) {
182
177
  *
183
178
  * {\@example core/di/ts/injector_spec.ts region='InjectionToken'}
184
179
  *
185
- * \@stable
180
+ *
186
181
  * @template T
187
182
  */
188
183
  class InjectionToken {
@@ -238,7 +233,7 @@ class InjectionToken {
238
233
  * \@ng.Component({...})
239
234
  * class MyClass {...}
240
235
  * ```
241
- * \@stable
236
+ *
242
237
  * @record
243
238
  */
244
239
 
@@ -435,14 +430,14 @@ const ANALYZE_FOR_ENTRY_COMPONENTS = new InjectionToken('AnalyzeForEntryComponen
435
430
  /**
436
431
  * Type of the Attribute decorator / constructor function.
437
432
  *
438
- * \@stable
433
+ *
439
434
  * @record
440
435
  */
441
436
 
442
437
  /**
443
438
  * Attribute decorator and metadata.
444
439
  *
445
- * \@stable
440
+ *
446
441
  * \@Annotation
447
442
  */
448
443
  const Attribute = makeParamDecorator('Attribute', (attributeName) => ({ attributeName }));
@@ -452,7 +447,7 @@ const Attribute = makeParamDecorator('Attribute', (attributeName) => ({ attribut
452
447
  * See {\@link ContentChildren}, {\@link ContentChild}, {\@link ViewChildren}, {\@link ViewChild} for
453
448
  * more information.
454
449
  *
455
- * \@stable
450
+ *
456
451
  * @abstract
457
452
  */
458
453
  class Query {
@@ -462,14 +457,14 @@ class Query {
462
457
  *
463
458
  * See {\@link ContentChildren}.
464
459
  *
465
- * \@stable
460
+ *
466
461
  * @record
467
462
  */
468
463
 
469
464
  /**
470
465
  * ContentChildren decorator and metadata.
471
466
  *
472
- * \@stable
467
+ *
473
468
  * \@Annotation
474
469
  */
475
470
  const ContentChildren = makePropDecorator('ContentChildren', (selector, data = {}) => (Object.assign({ selector, first: false, isViewQuery: false, descendants: false }, data)), Query);
@@ -477,14 +472,14 @@ const ContentChildren = makePropDecorator('ContentChildren', (selector, data = {
477
472
  * Type of the ContentChild decorator / constructor function.
478
473
  *
479
474
  *
480
- * \@stable
475
+ *
481
476
  * @record
482
477
  */
483
478
 
484
479
  /**
485
480
  * ContentChild decorator and metadata.
486
481
  *
487
- * \@stable
482
+ *
488
483
  * \@Annotation
489
484
  */
490
485
  const ContentChild = makePropDecorator('ContentChild', (selector, data = {}) => (Object.assign({ selector, first: true, isViewQuery: false, descendants: true }, data)), Query);
@@ -493,14 +488,14 @@ const ContentChild = makePropDecorator('ContentChild', (selector, data = {}) =>
493
488
  *
494
489
  * See {\@link ViewChildren}.
495
490
  *
496
- * \@stable
491
+ *
497
492
  * @record
498
493
  */
499
494
 
500
495
  /**
501
496
  * ViewChildren decorator and metadata.
502
497
  *
503
- * \@stable
498
+ *
504
499
  * \@Annotation
505
500
  */
506
501
  const ViewChildren = makePropDecorator('ViewChildren', (selector, data = {}) => (Object.assign({ selector, first: false, isViewQuery: true, descendants: true }, data)), Query);
@@ -509,14 +504,14 @@ const ViewChildren = makePropDecorator('ViewChildren', (selector, data = {}) =>
509
504
  *
510
505
  * See {\@link ViewChild}
511
506
  *
512
- * \@stable
507
+ *
513
508
  * @record
514
509
  */
515
510
 
516
511
  /**
517
512
  * ViewChild decorator and metadata.
518
513
  *
519
- * \@stable
514
+ *
520
515
  * \@Annotation
521
516
  */
522
517
  const ViewChild = makePropDecorator('ViewChild', (selector, data) => (Object.assign({ selector, first: true, isViewQuery: true, descendants: true }, data)), Query);
@@ -607,35 +602,35 @@ function isDefaultChangeDetectionStrategy(changeDetectionStrategy) {
607
602
  /**
608
603
  * Type of the Directive decorator / constructor function.
609
604
  *
610
- * \@stable
605
+ *
611
606
  * @record
612
607
  */
613
608
 
614
609
  /**
615
610
  * Directive decorator and metadata.
616
611
  *
617
- * \@stable
612
+ *
618
613
  * \@Annotation
619
614
  */
620
615
  const Directive = makeDecorator('Directive', (dir = {}) => dir);
621
616
  /**
622
617
  * Type of the Component decorator / constructor function.
623
618
  *
624
- * \@stable
619
+ *
625
620
  * @record
626
621
  */
627
622
 
628
623
  /**
629
624
  * Component decorator and metadata.
630
625
  *
631
- * \@stable
626
+ *
632
627
  * \@Annotation
633
628
  */
634
629
  const Component = makeDecorator('Component', (c = {}) => (Object.assign({ changeDetection: ChangeDetectionStrategy.Default }, c)), Directive);
635
630
  /**
636
631
  * Type of the Pipe decorator / constructor function.
637
632
  *
638
- * \@stable
633
+ *
639
634
  * @record
640
635
  */
641
636
 
@@ -648,63 +643,63 @@ const Component = makeDecorator('Component', (c = {}) => (Object.assign({ change
648
643
  * To use the pipe include a reference to the pipe class in
649
644
  * {\@link NgModule#declarations}.
650
645
  *
651
- * \@stable
646
+ *
652
647
  * \@Annotation
653
648
  */
654
649
  const Pipe = makeDecorator('Pipe', (p) => (Object.assign({ pure: true }, p)));
655
650
  /**
656
651
  * Type of the Input decorator / constructor function.
657
652
  *
658
- * \@stable
653
+ *
659
654
  * @record
660
655
  */
661
656
 
662
657
  /**
663
658
  * Input decorator and metadata.
664
659
  *
665
- * \@stable
660
+ *
666
661
  * \@Annotation
667
662
  */
668
663
  const Input = makePropDecorator('Input', (bindingPropertyName) => ({ bindingPropertyName }));
669
664
  /**
670
665
  * Type of the Output decorator / constructor function.
671
666
  *
672
- * \@stable
667
+ *
673
668
  * @record
674
669
  */
675
670
 
676
671
  /**
677
672
  * Output decorator and metadata.
678
673
  *
679
- * \@stable
674
+ *
680
675
  * \@Annotation
681
676
  */
682
677
  const Output = makePropDecorator('Output', (bindingPropertyName) => ({ bindingPropertyName }));
683
678
  /**
684
679
  * Type of the HostBinding decorator / constructor function.
685
680
  *
686
- * \@stable
681
+ *
687
682
  * @record
688
683
  */
689
684
 
690
685
  /**
691
686
  * HostBinding decorator and metadata.
692
687
  *
693
- * \@stable
688
+ *
694
689
  * \@Annotation
695
690
  */
696
691
  const HostBinding = makePropDecorator('HostBinding', (hostPropertyName) => ({ hostPropertyName }));
697
692
  /**
698
693
  * Type of the HostListener decorator / constructor function.
699
694
  *
700
- * \@stable
695
+ *
701
696
  * @record
702
697
  */
703
698
 
704
699
  /**
705
700
  * HostListener decorator and metadata.
706
701
  *
707
- * \@stable
702
+ *
708
703
  * \@Annotation
709
704
  */
710
705
  const HostListener = makePropDecorator('HostListener', (eventName, args) => ({ eventName, args }));
@@ -728,7 +723,7 @@ const HostListener = makePropDecorator('HostListener', (eventName, args) => ({ e
728
723
  * An example of a `Type` is `MyCustomComponent` class, which in JavaScript is be represented by
729
724
  * the `MyCustomComponent` constructor function.
730
725
  *
731
- * \@stable
726
+ *
732
727
  */
733
728
  const Type = Function;
734
729
  /**
@@ -1252,70 +1247,70 @@ function resolveForwardRef(type) {
1252
1247
  /**
1253
1248
  * Type of the Inject decorator / constructor function.
1254
1249
  *
1255
- * \@stable
1250
+ *
1256
1251
  * @record
1257
1252
  */
1258
1253
 
1259
1254
  /**
1260
1255
  * Inject decorator and metadata.
1261
1256
  *
1262
- * \@stable
1257
+ *
1263
1258
  * \@Annotation
1264
1259
  */
1265
1260
  const Inject = makeParamDecorator('Inject', (token) => ({ token }));
1266
1261
  /**
1267
1262
  * Type of the Optional decorator / constructor function.
1268
1263
  *
1269
- * \@stable
1264
+ *
1270
1265
  * @record
1271
1266
  */
1272
1267
 
1273
1268
  /**
1274
1269
  * Optional decorator and metadata.
1275
1270
  *
1276
- * \@stable
1271
+ *
1277
1272
  * \@Annotation
1278
1273
  */
1279
1274
  const Optional = makeParamDecorator('Optional');
1280
1275
  /**
1281
1276
  * Type of the Self decorator / constructor function.
1282
1277
  *
1283
- * \@stable
1278
+ *
1284
1279
  * @record
1285
1280
  */
1286
1281
 
1287
1282
  /**
1288
1283
  * Self decorator and metadata.
1289
1284
  *
1290
- * \@stable
1285
+ *
1291
1286
  * \@Annotation
1292
1287
  */
1293
1288
  const Self = makeParamDecorator('Self');
1294
1289
  /**
1295
1290
  * Type of the SkipSelf decorator / constructor function.
1296
1291
  *
1297
- * \@stable
1292
+ *
1298
1293
  * @record
1299
1294
  */
1300
1295
 
1301
1296
  /**
1302
1297
  * SkipSelf decorator and metadata.
1303
1298
  *
1304
- * \@stable
1299
+ *
1305
1300
  * \@Annotation
1306
1301
  */
1307
1302
  const SkipSelf = makeParamDecorator('SkipSelf');
1308
1303
  /**
1309
1304
  * Type of the Host decorator / constructor function.
1310
1305
  *
1311
- * \@stable
1306
+ *
1312
1307
  * @record
1313
1308
  */
1314
1309
 
1315
1310
  /**
1316
1311
  * Host decorator and metadata.
1317
1312
  *
1318
- * \@stable
1313
+ *
1319
1314
  * \@Annotation
1320
1315
  */
1321
1316
  const Host = makeParamDecorator('Host');
@@ -1376,7 +1371,7 @@ class NullInjector {
1376
1371
  * `Injector` returns itself when given `Injector` as a token:
1377
1372
  * {\@example core/di/ts/injector_spec.ts region='injectInjector'}
1378
1373
  *
1379
- * \@stable
1374
+ *
1380
1375
  * @abstract
1381
1376
  */
1382
1377
  class Injector {
@@ -1599,7 +1594,7 @@ function tryResolveToken(token, record, records, parent, notFoundValue, flags) {
1599
1594
  */
1600
1595
  function resolveToken(token, record, records, parent, notFoundValue, flags) {
1601
1596
  let /** @type {?} */ value;
1602
- if (record && !(flags & 1 /* SkipSelf */)) {
1597
+ if (record && !(flags & 4 /* SkipSelf */)) {
1603
1598
  // If we don't have a record, this implies that we don't own the provider hence don't know how
1604
1599
  // to resolve it.
1605
1600
  value = record.value;
@@ -1725,7 +1720,13 @@ function getClosureSafeProperty$1(objWithPropertyToExtract) {
1725
1720
  }
1726
1721
  throw Error('!prop');
1727
1722
  }
1728
- let _currentInjector = null;
1723
+ /**
1724
+ * Current injector value used by `inject`.
1725
+ * - `undefined`: it is an error to call `inject`
1726
+ * - `null`: `inject` can be called but there is no injector (limp-mode).
1727
+ * - Injector instance: Use the injector for resolution.
1728
+ */
1729
+ let _currentInjector = undefined;
1729
1730
  /**
1730
1731
  * @param {?} injector
1731
1732
  * @return {?}
@@ -1738,15 +1739,24 @@ function setCurrentInjector(injector) {
1738
1739
  /**
1739
1740
  * @template T
1740
1741
  * @param {?} token
1741
- * @param {?=} notFoundValue
1742
1742
  * @param {?=} flags
1743
1743
  * @return {?}
1744
1744
  */
1745
- function inject(token, notFoundValue, flags = 0 /* Default */) {
1746
- if (_currentInjector === null) {
1745
+ function inject(token, flags = 0 /* Default */) {
1746
+ if (_currentInjector === undefined) {
1747
1747
  throw new Error(`inject() must be called from an injection context`);
1748
1748
  }
1749
- return _currentInjector.get(token, notFoundValue, flags);
1749
+ else if (_currentInjector === null) {
1750
+ const /** @type {?} */ injectableDef = (/** @type {?} */ (token)).ngInjectableDef;
1751
+ if (injectableDef && injectableDef.providedIn == 'root') {
1752
+ return injectableDef.value === undefined ? injectableDef.value = injectableDef.factory() :
1753
+ injectableDef.value;
1754
+ }
1755
+ throw new Error(`Injector: NOT_FOUND [${stringify(token)}]`);
1756
+ }
1757
+ else {
1758
+ return _currentInjector.get(token, flags & 8 /* Optional */ ? null : undefined, flags);
1759
+ }
1750
1760
  }
1751
1761
  /**
1752
1762
  * @param {?} types
@@ -1761,17 +1771,17 @@ function injectArgs(types) {
1761
1771
  throw new Error('Arguments array must have arguments.');
1762
1772
  }
1763
1773
  let /** @type {?} */ type = undefined;
1764
- let /** @type {?} */ defaultValue = undefined;
1774
+ let /** @type {?} */ flags = 0;
1765
1775
  for (let /** @type {?} */ j = 0; j < arg.length; j++) {
1766
1776
  const /** @type {?} */ meta = arg[j];
1767
1777
  if (meta instanceof Optional || meta.__proto__.ngMetadataName === 'Optional') {
1768
- defaultValue = null;
1778
+ flags |= 8 /* Optional */;
1769
1779
  }
1770
1780
  else if (meta instanceof SkipSelf || meta.__proto__.ngMetadataName === 'SkipSelf') {
1771
-
1781
+ flags |= 4 /* SkipSelf */;
1772
1782
  }
1773
1783
  else if (meta instanceof Self || meta.__proto__.ngMetadataName === 'Self') {
1774
-
1784
+ flags |= 2 /* Self */;
1775
1785
  }
1776
1786
  else if (meta instanceof Inject) {
1777
1787
  type = meta.token;
@@ -1780,7 +1790,7 @@ function injectArgs(types) {
1780
1790
  type = meta;
1781
1791
  }
1782
1792
  }
1783
- args.push(inject(/** @type {?} */ ((type)), defaultValue, 0 /* Default */));
1793
+ args.push(inject(/** @type {?} */ ((type)), flags));
1784
1794
  }
1785
1795
  else {
1786
1796
  args.push(inject(arg));
@@ -1806,7 +1816,7 @@ const USE_VALUE = getClosureSafeProperty({ provide: String, useValue: ɵ0 }, GET
1806
1816
  /**
1807
1817
  * Type of the Injectable decorator / constructor function.
1808
1818
  *
1809
- * \@stable
1819
+ *
1810
1820
  * @record
1811
1821
  */
1812
1822
 
@@ -1856,7 +1866,7 @@ function convertInjectableProviderToFactory(type, provider) {
1856
1866
  /**
1857
1867
  * Injectable decorator and metadata.
1858
1868
  *
1859
- * \@stable
1869
+ *
1860
1870
  * \@Annotation
1861
1871
  */
1862
1872
  const Injectable = makeDecorator('Injectable', undefined, undefined, undefined, (injectableType, options) => {
@@ -1890,7 +1900,7 @@ const Injectable = makeDecorator('Injectable', undefined, undefined, undefined,
1890
1900
  /**
1891
1901
  * A wrapper around a module that also includes the providers.
1892
1902
  *
1893
- * \@stable
1903
+ *
1894
1904
  * @record
1895
1905
  */
1896
1906
 
@@ -1907,7 +1917,7 @@ const Injectable = makeDecorator('Injectable', undefined, undefined, undefined,
1907
1917
  * - any properties on elements with a `-` in their name which is the common rule for custom
1908
1918
  * elements.
1909
1919
  *
1910
- * \@stable
1920
+ *
1911
1921
  */
1912
1922
  const CUSTOM_ELEMENTS_SCHEMA = {
1913
1923
  name: 'custom-elements'
@@ -1923,14 +1933,14 @@ const NO_ERRORS_SCHEMA = {
1923
1933
  /**
1924
1934
  * Type of the NgModule decorator / constructor function.
1925
1935
  *
1926
- * \@stable
1936
+ *
1927
1937
  * @record
1928
1938
  */
1929
1939
 
1930
1940
  /**
1931
1941
  * NgModule decorator and metadata.
1932
1942
  *
1933
- * \@stable
1943
+ *
1934
1944
  * \@Annotation
1935
1945
  */
1936
1946
  const NgModule = makeDecorator('NgModule', (ngModule) => ngModule, undefined, undefined, (moduleType, metadata) => {
@@ -2009,7 +2019,7 @@ ViewEncapsulation[ViewEncapsulation.None] = "None";
2009
2019
  /**
2010
2020
  * \@description Represents the version of Angular
2011
2021
  *
2012
- * \@stable
2022
+ *
2013
2023
  */
2014
2024
  class Version {
2015
2025
  /**
@@ -2023,9 +2033,9 @@ class Version {
2023
2033
  }
2024
2034
  }
2025
2035
  /**
2026
- * \@stable
2036
+ *
2027
2037
  */
2028
- const VERSION = new Version('6.0.0-rc.3');
2038
+ const VERSION = new Version('6.0.0');
2029
2039
 
2030
2040
  /**
2031
2041
  * @fileoverview added by tsickle
@@ -2112,7 +2122,7 @@ function defaultErrorLogger(console, ...values) {
2112
2122
  * class MyModule {}
2113
2123
  * ```
2114
2124
  *
2115
- * \@stable
2125
+ *
2116
2126
  */
2117
2127
  class ErrorHandler {
2118
2128
  constructor() {
@@ -2373,7 +2383,7 @@ function invalidProviderError(provider) {
2373
2383
  *
2374
2384
  * expect(() => Injector.resolveAndCreate([A,B])).toThrowError();
2375
2385
  * ```
2376
- * \@stable
2386
+ *
2377
2387
  * @param {?} typeOrFunc
2378
2388
  * @param {?} params
2379
2389
  * @return {?}
@@ -2406,7 +2416,7 @@ function noAnnotationError(typeOrFunc, params) {
2406
2416
  *
2407
2417
  * expect(() => injector.getAt(100)).toThrowError();
2408
2418
  * ```
2409
- * \@stable
2419
+ *
2410
2420
  * @param {?} index
2411
2421
  * @return {?}
2412
2422
  */
@@ -3362,7 +3372,7 @@ function getNullInjector() {
3362
3372
  return NULL_INJECTOR$1;
3363
3373
  }
3364
3374
  /**
3365
- * Create a new `Injector` which is configured using `InjectorDefType`s.
3375
+ * Create a new `Injector` which is configured using `InjectorType`s.
3366
3376
  *
3367
3377
  * \@experimental
3368
3378
  * @param {?} defType
@@ -3385,7 +3395,7 @@ class R3Injector {
3385
3395
  */
3386
3396
  this.records = new Map();
3387
3397
  /**
3388
- * The transitive set of `InjectorDefType`s which define this injector.
3398
+ * The transitive set of `InjectorType`s which define this injector.
3389
3399
  */
3390
3400
  this.injectorDefTypes = new Set();
3391
3401
  /**
@@ -3396,7 +3406,7 @@ class R3Injector {
3396
3406
  * Flag indicating that this injector was previously destroyed.
3397
3407
  */
3398
3408
  this.destroyed = false;
3399
- // Start off by creating Records for every provider declared in every InjectorDefType
3409
+ // Start off by creating Records for every provider declared in every InjectorType
3400
3410
  // included transitively in `def`.
3401
3411
  deepForEach([def], injectorDef => this.processInjectorType(injectorDef, new Set()));
3402
3412
  // Make sure the INJECTOR token provides this injector.
@@ -3404,7 +3414,7 @@ class R3Injector {
3404
3414
  // Detect whether this injector has the APP_ROOT_SCOPE token and thus should provide
3405
3415
  // any injectable scoped to APP_ROOT_SCOPE.
3406
3416
  this.isRootInjector = this.records.has(APP_ROOT);
3407
- // Eagerly instantiate the InjectorDefType classes themselves.
3417
+ // Eagerly instantiate the InjectorType classes themselves.
3408
3418
  this.injectorDefTypes.forEach(defType => this.get(defType));
3409
3419
  }
3410
3420
  /**
@@ -3442,7 +3452,7 @@ class R3Injector {
3442
3452
  const /** @type {?} */ previousInjector = setCurrentInjector(this);
3443
3453
  try {
3444
3454
  // Check for the SkipSelf flag.
3445
- if (!(flags & 1 /* SkipSelf */)) {
3455
+ if (!(flags & 4 /* SkipSelf */)) {
3446
3456
  // SkipSelf isn't set, check if the record belongs to this injector.
3447
3457
  let /** @type {?} */ record = this.records.get(token);
3448
3458
  if (record === undefined) {
@@ -3482,7 +3492,7 @@ class R3Injector {
3482
3492
  }
3483
3493
  }
3484
3494
  /**
3485
- * Add an `InjectorDefType` or `InjectorDefTypeWithProviders` and all of its transitive providers
3495
+ * Add an `InjectorType` or `InjectorDefTypeWithProviders` and all of its transitive providers
3486
3496
  * to this injector.
3487
3497
  * @param {?} defOrWrappedDef
3488
3498
  * @param {?} parents
@@ -3490,14 +3500,14 @@ class R3Injector {
3490
3500
  */
3491
3501
  processInjectorType(defOrWrappedDef, parents) {
3492
3502
  defOrWrappedDef = resolveForwardRef(defOrWrappedDef);
3493
- // Either the defOrWrappedDef is an InjectorDefType (with ngInjectorDef) or an
3503
+ // Either the defOrWrappedDef is an InjectorType (with ngInjectorDef) or an
3494
3504
  // InjectorDefTypeWithProviders (aka ModuleWithProviders). Detecting either is a megamorphic
3495
3505
  // read, so care is taken to only do the read once.
3496
3506
  // First attempt to read the ngInjectorDef.
3497
3507
  let /** @type {?} */ def = /** @type {?} */ ((/** @type {?} */ (defOrWrappedDef)).ngInjectorDef);
3498
3508
  // If that's not present, then attempt to read ngModule from the InjectorDefTypeWithProviders.
3499
3509
  const /** @type {?} */ ngModule = (def == null) && (/** @type {?} */ (defOrWrappedDef)).ngModule || undefined;
3500
- // Determine the InjectorDefType. In the case where `defOrWrappedDef` is an `InjectorDefType`,
3510
+ // Determine the InjectorType. In the case where `defOrWrappedDef` is an `InjectorType`,
3501
3511
  // then this is easy. In the case of an InjectorDefTypeWithProviders, then the definition type
3502
3512
  // is the `ngModule`.
3503
3513
  const /** @type {?} */ defType = (ngModule === undefined) ? (/** @type {?} */ (defOrWrappedDef)) : ngModule;
@@ -3518,7 +3528,7 @@ class R3Injector {
3518
3528
  if (parents.has(defType)) {
3519
3529
  throw new Error(`Circular dependency: type ${stringify(defType)} ends up importing itself.`);
3520
3530
  }
3521
- // Track the InjectorDefType and add a provider for it.
3531
+ // Track the InjectorType and add a provider for it.
3522
3532
  this.injectorDefTypes.add(defType);
3523
3533
  this.records.set(defType, makeRecord(def.factory));
3524
3534
  // Add providers in the same way that @NgModule resolution did:
@@ -3619,7 +3629,7 @@ class R3Injector {
3619
3629
  * @return {?}
3620
3630
  */
3621
3631
  function injectableDefRecord(token) {
3622
- const /** @type {?} */ def = (/** @type {?} */ (token)).ngInjectableDef;
3632
+ const /** @type {?} */ def = /** @type {?} */ ((/** @type {?} */ (token)).ngInjectableDef);
3623
3633
  if (def === undefined) {
3624
3634
  throw new Error(`Type ${stringify(token)} is missing an ngInjectableDef definition.`);
3625
3635
  }
@@ -3778,7 +3788,7 @@ function isPromise(obj) {
3778
3788
  * @return {?}
3779
3789
  */
3780
3790
  function isObservable(obj) {
3781
- // TODO use Symbol.observable when https://github.com/ReactiveX/rxjs/issues/2415 will be resolved
3791
+ // TODO: use Symbol.observable when https://github.com/ReactiveX/rxjs/issues/2415 will be resolved
3782
3792
  return !!obj && typeof obj.subscribe === 'function';
3783
3793
  }
3784
3794
 
@@ -3996,7 +4006,7 @@ function _throwError() {
3996
4006
  * Each `\@NgModule` provides an own `Compiler` to its injector,
3997
4007
  * that will use the directives/pipes of the ng module for compilation
3998
4008
  * of components.
3999
- * \@stable
4009
+ *
4000
4010
  */
4001
4011
  class Compiler {
4002
4012
  /**
@@ -4081,14 +4091,14 @@ class CompilerFactory {
4081
4091
  * `ComponentRef` provides access to the Component Instance as well other objects related to this
4082
4092
  * Component Instance and allows you to destroy the Component Instance via the {\@link #destroy}
4083
4093
  * method.
4084
- * \@stable
4094
+ *
4085
4095
  * @abstract
4086
4096
  * @template C
4087
4097
  */
4088
4098
  class ComponentRef {
4089
4099
  }
4090
4100
  /**
4091
- * \@stable
4101
+ *
4092
4102
  * @abstract
4093
4103
  * @template C
4094
4104
  */
@@ -4132,7 +4142,7 @@ class _NullComponentFactoryResolver {
4132
4142
  }
4133
4143
  }
4134
4144
  /**
4135
- * \@stable
4145
+ *
4136
4146
  * @abstract
4137
4147
  */
4138
4148
  class ComponentFactoryResolver {
@@ -4216,7 +4226,7 @@ class ComponentFactoryBoundToModule extends ComponentFactory {
4216
4226
  * `NgModuleRef` provides access to the NgModule Instance as well other objects related to this
4217
4227
  * NgModule Instance.
4218
4228
  *
4219
- * \@stable
4229
+ *
4220
4230
  * @abstract
4221
4231
  * @template T
4222
4232
  */
@@ -4453,7 +4463,7 @@ const wtfEndTimeRange = wtfEnabled ? endTimeRange : (r) => null;
4453
4463
  * https://github.com/jhusain/observable-spec
4454
4464
  *
4455
4465
  * Once a reference implementation of the spec is available, switch to it.
4456
- * \@stable
4466
+ *
4457
4467
  * @template T
4458
4468
  */
4459
4469
  class EventEmitter extends Subject {
@@ -5207,7 +5217,7 @@ const ALLOW_MULTIPLE_PLATFORMS = new InjectionToken('AllowMultipleToken');
5207
5217
  * does not result in additional changes to any bindings (also known as
5208
5218
  * unidirectional data flow).
5209
5219
  *
5210
- * \@stable
5220
+ *
5211
5221
  * @return {?}
5212
5222
  */
5213
5223
  function enableProdMode() {
@@ -5329,7 +5339,7 @@ function getPlatform() {
5329
5339
  /**
5330
5340
  * Provides additional options to the bootstraping process.
5331
5341
  *
5332
- * \@stable
5342
+ *
5333
5343
  * @record
5334
5344
  */
5335
5345
 
@@ -5341,7 +5351,7 @@ function getPlatform() {
5341
5351
  * A page's platform is initialized implicitly when a platform is created via a platform factory
5342
5352
  * (e.g. {\@link platformBrowser}), or explicitly by calling the {\@link createPlatform} function.
5343
5353
  *
5344
- * \@stable
5354
+ *
5345
5355
  */
5346
5356
  class PlatformRef {
5347
5357
  /**
@@ -5423,7 +5433,7 @@ class PlatformRef {
5423
5433
  *
5424
5434
  * let moduleRef = platformBrowser().bootstrapModule(MyModule);
5425
5435
  * ```
5426
- * \@stable
5436
+ *
5427
5437
  * @template M
5428
5438
  * @param {?} moduleType
5429
5439
  * @param {?=} compilerOptions
@@ -5547,7 +5557,7 @@ function optionsReducer(dst, objs) {
5547
5557
  /**
5548
5558
  * A reference to an Angular application running on a page.
5549
5559
  *
5550
- * \@stable
5560
+ *
5551
5561
  */
5552
5562
  class ApplicationRef {
5553
5563
  /**
@@ -5927,7 +5937,7 @@ class Renderer2 {
5927
5937
  * XSS attacks. Carefully review any use of `ElementRef` in your code. For more detail, see the
5928
5938
  * [Security Guide](http://g.co/ng/security).
5929
5939
  *
5930
- * \@stable
5940
+ *
5931
5941
  * @template T
5932
5942
  */
5933
5943
  class ElementRef {
@@ -5950,7 +5960,7 @@ class ElementRef {
5950
5960
  */
5951
5961
  /**
5952
5962
  * Used to load ng module factories.
5953
- * \@stable
5963
+ *
5954
5964
  * @abstract
5955
5965
  */
5956
5966
  class NgModuleFactoryLoader {
@@ -6022,7 +6032,7 @@ function getModuleFactory(id) {
6022
6032
  * \@ViewChildren(Item) items:QueryList<Item>;
6023
6033
  * }
6024
6034
  * ```
6025
- * \@stable
6035
+ *
6026
6036
  * @template T
6027
6037
  */
6028
6038
  class QueryList {
@@ -6257,7 +6267,7 @@ function checkNotEmpty(value, modulePath, exportName) {
6257
6267
  *
6258
6268
  * To instantiate Embedded Views based on a Template, use {\@link ViewContainerRef#
6259
6269
  * createEmbeddedView}, which will create the View and attach it to the View Container.
6260
- * \@stable
6270
+ *
6261
6271
  * @abstract
6262
6272
  * @template C
6263
6273
  */
@@ -6291,7 +6301,7 @@ class TemplateRef {
6291
6301
  *
6292
6302
  * To access a `ViewContainerRef` of an Element, you can either place a {\@link Directive} injected
6293
6303
  * with `ViewContainerRef` on the Element, or you obtain it via a {\@link ViewChild} query.
6294
- * \@stable
6304
+ *
6295
6305
  * @abstract
6296
6306
  */
6297
6307
  class ViewContainerRef {
@@ -6309,7 +6319,7 @@ class ViewContainerRef {
6309
6319
  * found in the LICENSE file at https://angular.io/license
6310
6320
  */
6311
6321
  /**
6312
- * \@stable
6322
+ *
6313
6323
  * @abstract
6314
6324
  */
6315
6325
  class ChangeDetectorRef {
@@ -6327,7 +6337,7 @@ class ChangeDetectorRef {
6327
6337
  * found in the LICENSE file at https://angular.io/license
6328
6338
  */
6329
6339
  /**
6330
- * \@stable
6340
+ *
6331
6341
  * @abstract
6332
6342
  */
6333
6343
  class ViewRef extends ChangeDetectorRef {
@@ -6716,7 +6726,7 @@ function devModeEqual(a, b) {
6716
6726
  * return WrappedValue.wrap(this._latestValue); // this will force update
6717
6727
  * }
6718
6728
  * ```
6719
- * \@stable
6729
+ *
6720
6730
  */
6721
6731
  class WrappedValue {
6722
6732
  /**
@@ -6746,7 +6756,7 @@ class WrappedValue {
6746
6756
  }
6747
6757
  /**
6748
6758
  * Represents a basic change from a previous to a new value.
6749
- * \@stable
6759
+ *
6750
6760
  */
6751
6761
  class SimpleChange {
6752
6762
  /**
@@ -7100,7 +7110,7 @@ class DefaultIterableDiffer {
7100
7110
  this._movesHead = this._movesTail = null;
7101
7111
  this._removalsHead = this._removalsTail = null;
7102
7112
  this._identityChangesHead = this._identityChangesTail = null;
7103
- // todo(vicb) when assert gets supported
7113
+ // TODO(vicb): when assert gets supported
7104
7114
  // assert(!this.isDirty);
7105
7115
  }
7106
7116
  }
@@ -7287,12 +7297,12 @@ class DefaultIterableDiffer {
7287
7297
  _addAfter(record, prevRecord, index) {
7288
7298
  this._insertAfter(record, prevRecord, index);
7289
7299
  if (this._additionsTail === null) {
7290
- // todo(vicb)
7300
+ // TODO(vicb):
7291
7301
  // assert(this._additionsHead === null);
7292
7302
  this._additionsTail = this._additionsHead = record;
7293
7303
  }
7294
7304
  else {
7295
- // todo(vicb)
7305
+ // TODO(vicb):
7296
7306
  // assert(_additionsTail._nextAdded === null);
7297
7307
  // assert(record._nextAdded === null);
7298
7308
  this._additionsTail = this._additionsTail._nextAdded = record;
@@ -7307,12 +7317,12 @@ class DefaultIterableDiffer {
7307
7317
  * @return {?}
7308
7318
  */
7309
7319
  _insertAfter(record, prevRecord, index) {
7310
- // todo(vicb)
7320
+ // TODO(vicb):
7311
7321
  // assert(record != prevRecord);
7312
7322
  // assert(record._next === null);
7313
7323
  // assert(record._prev === null);
7314
7324
  const /** @type {?} */ next = prevRecord === null ? this._itHead : prevRecord._next;
7315
- // todo(vicb)
7325
+ // TODO(vicb):
7316
7326
  // assert(next != record);
7317
7327
  // assert(prevRecord != record);
7318
7328
  record._next = next;
@@ -7355,7 +7365,7 @@ class DefaultIterableDiffer {
7355
7365
  }
7356
7366
  const /** @type {?} */ prev = record._prev;
7357
7367
  const /** @type {?} */ next = record._next;
7358
- // todo(vicb)
7368
+ // TODO(vicb):
7359
7369
  // assert((record._prev = null) === null);
7360
7370
  // assert((record._next = null) === null);
7361
7371
  if (prev === null) {
@@ -7379,18 +7389,18 @@ class DefaultIterableDiffer {
7379
7389
  * @return {?}
7380
7390
  */
7381
7391
  _addToMoves(record, toIndex) {
7382
- // todo(vicb)
7392
+ // TODO(vicb):
7383
7393
  // assert(record._nextMoved === null);
7384
7394
  if (record.previousIndex === toIndex) {
7385
7395
  return record;
7386
7396
  }
7387
7397
  if (this._movesTail === null) {
7388
- // todo(vicb)
7398
+ // TODO(vicb):
7389
7399
  // assert(_movesHead === null);
7390
7400
  this._movesTail = this._movesHead = record;
7391
7401
  }
7392
7402
  else {
7393
- // todo(vicb)
7403
+ // TODO(vicb):
7394
7404
  // assert(_movesTail._nextMoved === null);
7395
7405
  this._movesTail = this._movesTail._nextMoved = record;
7396
7406
  }
@@ -7408,13 +7418,13 @@ class DefaultIterableDiffer {
7408
7418
  record.currentIndex = null;
7409
7419
  record._nextRemoved = null;
7410
7420
  if (this._removalsTail === null) {
7411
- // todo(vicb)
7421
+ // TODO(vicb):
7412
7422
  // assert(_removalsHead === null);
7413
7423
  this._removalsTail = this._removalsHead = record;
7414
7424
  record._prevRemoved = null;
7415
7425
  }
7416
7426
  else {
7417
- // todo(vicb)
7427
+ // TODO(vicb):
7418
7428
  // assert(_removalsTail._nextRemoved === null);
7419
7429
  // assert(record._nextRemoved === null);
7420
7430
  record._prevRemoved = this._removalsTail;
@@ -7440,7 +7450,7 @@ class DefaultIterableDiffer {
7440
7450
  }
7441
7451
  }
7442
7452
  /**
7443
- * \@stable
7453
+ *
7444
7454
  * @template V
7445
7455
  */
7446
7456
  class IterableChangeRecord_ {
@@ -7524,7 +7534,7 @@ class _DuplicateItemRecordList {
7524
7534
  }
7525
7535
  else {
7526
7536
  /** @type {?} */ ((
7527
- // todo(vicb)
7537
+ // TODO(vicb):
7528
7538
  // assert(record.item == _head.item ||
7529
7539
  // record.item is num && record.item.isNaN && _head.item is num && _head.item.isNaN);
7530
7540
  this._tail))._nextDup = record;
@@ -7556,7 +7566,7 @@ class _DuplicateItemRecordList {
7556
7566
  * @return {?}
7557
7567
  */
7558
7568
  remove(record) {
7559
- // todo(vicb)
7569
+ // TODO(vicb):
7560
7570
  // assert(() {
7561
7571
  // // verify that the record being removed is in the list.
7562
7572
  // for (IterableChangeRecord_ cursor = _head; cursor != null; cursor = cursor._nextDup) {
@@ -7964,7 +7974,7 @@ class DefaultKeyValueDiffer {
7964
7974
  }
7965
7975
  }
7966
7976
  /**
7967
- * \@stable
7977
+ *
7968
7978
  * @template K, V
7969
7979
  */
7970
7980
  class KeyValueChangeRecord_ {
@@ -8017,7 +8027,7 @@ class KeyValueChangeRecord_ {
8017
8027
  * A strategy for tracking changes over time to an iterable. Used by {\@link NgForOf} to
8018
8028
  * respond to changes in an iterable by effecting equivalent changes in the DOM.
8019
8029
  *
8020
- * \@stable
8030
+ *
8021
8031
  * @record
8022
8032
  * @template V
8023
8033
  */
@@ -8026,7 +8036,7 @@ class KeyValueChangeRecord_ {
8026
8036
  * An object describing the changes in the `Iterable` collection since last time
8027
8037
  * `IterableDiffer#diff()` was invoked.
8028
8038
  *
8029
- * \@stable
8039
+ *
8030
8040
  * @record
8031
8041
  * @template V
8032
8042
  */
@@ -8034,7 +8044,7 @@ class KeyValueChangeRecord_ {
8034
8044
  /**
8035
8045
  * Record representing the item change information.
8036
8046
  *
8037
- * \@stable
8047
+ *
8038
8048
  * @record
8039
8049
  * @template V
8040
8050
  */
@@ -8049,7 +8059,7 @@ class KeyValueChangeRecord_ {
8049
8059
  * An optional function passed into {\@link NgForOf} that defines how to track
8050
8060
  * items in an iterable (e.g. fby index or id)
8051
8061
  *
8052
- * \@stable
8062
+ *
8053
8063
  * @record
8054
8064
  * @template T
8055
8065
  */
@@ -8057,13 +8067,13 @@ class KeyValueChangeRecord_ {
8057
8067
  /**
8058
8068
  * Provides a factory for {\@link IterableDiffer}.
8059
8069
  *
8060
- * \@stable
8070
+ *
8061
8071
  * @record
8062
8072
  */
8063
8073
 
8064
8074
  /**
8065
8075
  * A repository of different iterable diffing strategies used by NgFor, NgClass, and others.
8066
- * \@stable
8076
+ *
8067
8077
  */
8068
8078
  class IterableDiffers {
8069
8079
  /**
@@ -8133,6 +8143,10 @@ class IterableDiffers {
8133
8143
  }
8134
8144
  }
8135
8145
  }
8146
+ /** @nocollapse */ IterableDiffers.ngInjectableDef = defineInjectable({
8147
+ providedIn: 'root',
8148
+ factory: () => new IterableDiffers([new DefaultIterableDifferFactory()])
8149
+ });
8136
8150
  /**
8137
8151
  * @param {?} type
8138
8152
  * @return {?}
@@ -8155,7 +8169,7 @@ function getTypeNameForDebugging(type) {
8155
8169
  /**
8156
8170
  * A differ that tracks changes made to an object over time.
8157
8171
  *
8158
- * \@stable
8172
+ *
8159
8173
  * @record
8160
8174
  * @template K, V
8161
8175
  */
@@ -8164,7 +8178,7 @@ function getTypeNameForDebugging(type) {
8164
8178
  * An object describing the changes in the `Map` or `{[k:string]: string}` since last time
8165
8179
  * `KeyValueDiffer#diff()` was invoked.
8166
8180
  *
8167
- * \@stable
8181
+ *
8168
8182
  * @record
8169
8183
  * @template K, V
8170
8184
  */
@@ -8172,7 +8186,7 @@ function getTypeNameForDebugging(type) {
8172
8186
  /**
8173
8187
  * Record representing the item change information.
8174
8188
  *
8175
- * \@stable
8189
+ *
8176
8190
  * @record
8177
8191
  * @template K, V
8178
8192
  */
@@ -8180,13 +8194,13 @@ function getTypeNameForDebugging(type) {
8180
8194
  /**
8181
8195
  * Provides a factory for {\@link KeyValueDiffer}.
8182
8196
  *
8183
- * \@stable
8197
+ *
8184
8198
  * @record
8185
8199
  */
8186
8200
 
8187
8201
  /**
8188
8202
  * A repository of different Map diffing strategies used by NgClass, NgStyle, and others.
8189
- * \@stable
8203
+ *
8190
8204
  */
8191
8205
  class KeyValueDiffers {
8192
8206
  /**
@@ -9100,7 +9114,7 @@ SecurityContext[SecurityContext.RESOURCE_URL] = "RESOURCE_URL";
9100
9114
  /**
9101
9115
  * Sanitizer is used by the views to sanitize potentially dangerous values.
9102
9116
  *
9103
- * \@stable
9117
+ *
9104
9118
  * @abstract
9105
9119
  */
9106
9120
  class Sanitizer {
@@ -10499,7 +10513,10 @@ function initNgModule(data) {
10499
10513
  for (let /** @type {?} */ i = 0; i < def.providers.length; i++) {
10500
10514
  const /** @type {?} */ provDef = def.providers[i];
10501
10515
  if (!(provDef.flags & 4096 /* LazyProvider */)) {
10502
- providers[i] = _createProviderInstance$1(data, provDef);
10516
+ // Make sure the provider has not been already initialized outside this loop.
10517
+ if (providers[i] === undefined) {
10518
+ providers[i] = _createProviderInstance$1(data, provDef);
10519
+ }
10503
10520
  }
10504
10521
  }
10505
10522
  }
@@ -11569,7 +11586,7 @@ class NgModuleRef_ {
11569
11586
  */
11570
11587
  get(token, notFoundValue = Injector.THROW_IF_NOT_FOUND, injectFlags = 0 /* Default */) {
11571
11588
  let /** @type {?} */ flags = 0;
11572
- if (injectFlags & 1 /* SkipSelf */) {
11589
+ if (injectFlags & 4 /* SkipSelf */) {
11573
11590
  flags |= 1 /* SkipSelf */;
11574
11591
  }
11575
11592
  else if (injectFlags & 2 /* Self */) {
@@ -14965,6 +14982,18 @@ function assertLessThan(actual, expected, msg) {
14965
14982
  throwError(msg);
14966
14983
  }
14967
14984
  }
14985
+ /**
14986
+ * @template T
14987
+ * @param {?} actual
14988
+ * @param {?} expected
14989
+ * @param {?} msg
14990
+ * @return {?}
14991
+ */
14992
+ function assertGreaterThan(actual, expected, msg) {
14993
+ if (actual <= expected) {
14994
+ throwError(msg);
14995
+ }
14996
+ }
14968
14997
  /**
14969
14998
  * @template T
14970
14999
  * @param {?} actual
@@ -15053,13 +15082,13 @@ function queueLifecycleHooks(flags, currentView) {
15053
15082
  const /** @type {?} */ tView = currentView.tView;
15054
15083
  if (tView.firstTemplatePass === true) {
15055
15084
  const /** @type {?} */ start = flags >> 13;
15056
- const /** @type {?} */ size = (flags & 8190 /* SIZE_MASK */) >> 1;
15057
- const /** @type {?} */ end = start + size;
15085
+ const /** @type {?} */ count = flags & 4095;
15086
+ const /** @type {?} */ end = start + count;
15058
15087
  // It's necessary to loop through the directives at elementEnd() (rather than processing in
15059
15088
  // directiveCreate) so we can preserve the current hook order. Content, view, and destroy
15060
15089
  // hooks for projected components and directives must be called *before* their hosts.
15061
15090
  for (let /** @type {?} */ i = start; i < end; i++) {
15062
- const /** @type {?} */ def = (/** @type {?} */ (((tView.directives))[i]));
15091
+ const /** @type {?} */ def = /** @type {?} */ ((tView.directives))[i];
15063
15092
  queueContentHooks(def, tView, i);
15064
15093
  queueViewHooks(def, tView, i);
15065
15094
  queueDestroyHooks(def, tView, i);
@@ -15119,9 +15148,9 @@ function queueDestroyHooks(def, tView, i) {
15119
15148
  * @return {?}
15120
15149
  */
15121
15150
  function executeInitHooks(currentView, tView, creationMode) {
15122
- if (currentView.lifecycleStage === 1 /* INIT */) {
15151
+ if (currentView.lifecycleStage === 1 /* Init */) {
15123
15152
  executeHooks(/** @type {?} */ ((currentView.directives)), tView.initHooks, tView.checkHooks, creationMode);
15124
- currentView.lifecycleStage = 2 /* AFTER_INIT */;
15153
+ currentView.lifecycleStage = 2 /* AfterInit */;
15125
15154
  }
15126
15155
  }
15127
15156
  /**
@@ -15461,6 +15490,77 @@ const domRendererFactory3 = {
15461
15490
  // Note: This hack is necessary so we don't erroneously get a circular dependency
15462
15491
  // failure based on types.
15463
15492
 
15493
+ /**
15494
+ * @fileoverview added by tsickle
15495
+ * @suppress {checkTypes} checked by tsc
15496
+ */
15497
+ /**
15498
+ * @license
15499
+ * Copyright Google Inc. All Rights Reserved.
15500
+ *
15501
+ * Use of this source code is governed by an MIT-style license that can be
15502
+ * found in the LICENSE file at https://angular.io/license
15503
+ */
15504
+ /**
15505
+ * Must use this method for CD (instead of === ) since NaN !== NaN
15506
+ * @param {?} a
15507
+ * @param {?} b
15508
+ * @return {?}
15509
+ */
15510
+ function isDifferent(a, b) {
15511
+ // NaN is the only value that is not equal to itself so the first
15512
+ // test checks if both a and b are not NaN
15513
+ return !(a !== a && b !== b) && a !== b;
15514
+ }
15515
+ /**
15516
+ * @param {?} value
15517
+ * @return {?}
15518
+ */
15519
+ function stringify$1(value) {
15520
+ if (typeof value == 'function')
15521
+ return value.name || value;
15522
+ if (typeof value == 'string')
15523
+ return value;
15524
+ if (value == null)
15525
+ return '';
15526
+ return '' + value;
15527
+ }
15528
+ /**
15529
+ * Function that throws a "not implemented" error so it's clear certain
15530
+ * behaviors/methods aren't yet ready.
15531
+ *
15532
+ * @return {?} Not implemented error
15533
+ */
15534
+ function notImplemented() {
15535
+ return new Error('NotImplemented');
15536
+ }
15537
+ /**
15538
+ * Flattens an array in non-recursive way. Input arrays are not modified.
15539
+ * @param {?} list
15540
+ * @return {?}
15541
+ */
15542
+ function flatten$1(list) {
15543
+ const /** @type {?} */ result = [];
15544
+ let /** @type {?} */ i = 0;
15545
+ while (i < list.length) {
15546
+ const /** @type {?} */ item = list[i];
15547
+ if (Array.isArray(item)) {
15548
+ if (item.length > 0) {
15549
+ list = item.concat(list.slice(i + 1));
15550
+ i = 0;
15551
+ }
15552
+ else {
15553
+ i++;
15554
+ }
15555
+ }
15556
+ else {
15557
+ result.push(item);
15558
+ i++;
15559
+ }
15560
+ }
15561
+ return result;
15562
+ }
15563
+
15464
15564
  /**
15465
15565
  * @fileoverview added by tsickle
15466
15566
  * @suppress {checkTypes} checked by tsc
@@ -15595,6 +15695,15 @@ function findFirstRNode(rootNode) {
15595
15695
  }
15596
15696
  return null;
15597
15697
  }
15698
+ /**
15699
+ * @param {?} value
15700
+ * @param {?} renderer
15701
+ * @return {?}
15702
+ */
15703
+ function createTextNode(value, renderer) {
15704
+ return isProceduralRenderer(renderer) ? renderer.createText(stringify$1(value)) :
15705
+ renderer.createTextNode(stringify$1(value));
15706
+ }
15598
15707
  /**
15599
15708
  * @param {?} container
15600
15709
  * @param {?} rootNode
@@ -15614,6 +15723,12 @@ function addRemoveViewFromContainer(container, rootNode, insertMode, beforeNode)
15614
15723
  const /** @type {?} */ renderer = container.view.renderer;
15615
15724
  if (node.type === 3 /* Element */) {
15616
15725
  if (insertMode) {
15726
+ if (!node.native) {
15727
+ // If the native element doesn't exist, this is a bound text node that hasn't yet been
15728
+ // created because update mode has not run (occurs when a bound text node is a root
15729
+ // node of a dynamically created view). See textBinding() in instructions for ctx.
15730
+ (/** @type {?} */ (node)).native = createTextNode('', renderer);
15731
+ }
15617
15732
  isProceduralRenderer(renderer) ?
15618
15733
  renderer.insertBefore(parent, /** @type {?} */ ((node.native)), /** @type {?} */ (beforeNode)) :
15619
15734
  parent.insertBefore(/** @type {?} */ ((node.native)), /** @type {?} */ (beforeNode), true);
@@ -15749,6 +15864,7 @@ function removeView(container, removeIndex) {
15749
15864
  setViewNext(views[removeIndex - 1], viewNode.next);
15750
15865
  }
15751
15866
  views.splice(removeIndex, 1);
15867
+ viewNode.next = null;
15752
15868
  destroyViewTree(viewNode.data);
15753
15869
  addRemoveViewFromContainer(container, viewNode, false);
15754
15870
  // Notify query that view has been removed
@@ -15918,19 +16034,22 @@ function appendProjectedNode(node, currentParent, currentView) {
15918
16034
  if (node.type !== 0 /* Container */) {
15919
16035
  appendChild(currentParent, (/** @type {?} */ (node)).native, currentView);
15920
16036
  }
15921
- else if (canInsertNativeNode(currentParent, currentView)) {
16037
+ else {
15922
16038
  // The node we are adding is a Container and we are adding it to Element which
15923
16039
  // is not a component (no more re-projection).
15924
16040
  // Alternatively a container is projected at the root of a component's template
15925
16041
  // and can't be re-projected (as not content of any component).
15926
16042
  // Assignee the final projection location in those cases.
15927
16043
  const /** @type {?} */ lContainer = (/** @type {?} */ (node)).data;
15928
- lContainer.renderParent = /** @type {?} */ (currentParent);
16044
+ lContainer.renderParent = currentParent;
15929
16045
  const /** @type {?} */ views = lContainer.views;
15930
16046
  for (let /** @type {?} */ i = 0; i < views.length; i++) {
15931
16047
  addRemoveViewFromContainer(/** @type {?} */ (node), views[i], true, null);
15932
16048
  }
15933
16049
  }
16050
+ if (node.dynamicLContainerNode) {
16051
+ node.dynamicLContainerNode.data.renderParent = currentParent;
16052
+ }
15934
16053
  }
15935
16054
 
15936
16055
  /**
@@ -16098,77 +16217,6 @@ function matchingSelectorIndex(tNode, selectors, textSelectors) {
16098
16217
  return 0;
16099
16218
  }
16100
16219
 
16101
- /**
16102
- * @fileoverview added by tsickle
16103
- * @suppress {checkTypes} checked by tsc
16104
- */
16105
- /**
16106
- * @license
16107
- * Copyright Google Inc. All Rights Reserved.
16108
- *
16109
- * Use of this source code is governed by an MIT-style license that can be
16110
- * found in the LICENSE file at https://angular.io/license
16111
- */
16112
- /**
16113
- * Must use this method for CD (instead of === ) since NaN !== NaN
16114
- * @param {?} a
16115
- * @param {?} b
16116
- * @return {?}
16117
- */
16118
- function isDifferent(a, b) {
16119
- // NaN is the only value that is not equal to itself so the first
16120
- // test checks if both a and b are not NaN
16121
- return !(a !== a && b !== b) && a !== b;
16122
- }
16123
- /**
16124
- * @param {?} value
16125
- * @return {?}
16126
- */
16127
- function stringify$1(value) {
16128
- if (typeof value == 'function')
16129
- return value.name || value;
16130
- if (typeof value == 'string')
16131
- return value;
16132
- if (value == null)
16133
- return '';
16134
- return '' + value;
16135
- }
16136
- /**
16137
- * Function that throws a "not implemented" error so it's clear certain
16138
- * behaviors/methods aren't yet ready.
16139
- *
16140
- * @return {?} Not implemented error
16141
- */
16142
- function notImplemented() {
16143
- return new Error('NotImplemented');
16144
- }
16145
- /**
16146
- * Flattens an array in non-recursive way. Input arrays are not modified.
16147
- * @param {?} list
16148
- * @return {?}
16149
- */
16150
- function flatten$1(list) {
16151
- const /** @type {?} */ result = [];
16152
- let /** @type {?} */ i = 0;
16153
- while (i < list.length) {
16154
- const /** @type {?} */ item = list[i];
16155
- if (Array.isArray(item)) {
16156
- if (item.length > 0) {
16157
- list = item.concat(list.slice(i + 1));
16158
- i = 0;
16159
- }
16160
- else {
16161
- i++;
16162
- }
16163
- }
16164
- else {
16165
- result.push(item);
16166
- i++;
16167
- }
16168
- }
16169
- return result;
16170
- }
16171
-
16172
16220
  /**
16173
16221
  * @fileoverview added by tsickle
16174
16222
  * @suppress {checkTypes} checked by tsc
@@ -16337,10 +16385,6 @@ let data;
16337
16385
  * unknown at compile-time and thus space cannot be reserved in data[].
16338
16386
  */
16339
16387
  let directives;
16340
- /**
16341
- * Points to the next binding index to read or write to.
16342
- */
16343
- let bindingIndex;
16344
16388
  /**
16345
16389
  * When a view is destroyed, listeners need to be released and outputs need to be
16346
16390
  * unsubscribed. This cleanup array stores both listener data (in chunks of 4)
@@ -16385,12 +16429,14 @@ function enterView(newView, host) {
16385
16429
  const /** @type {?} */ oldView = currentView;
16386
16430
  data = newView && newView.data;
16387
16431
  directives = newView && newView.directives;
16388
- bindingIndex = newView && newView.bindingStartIndex || 0;
16389
16432
  tData = newView && newView.tView.data;
16390
16433
  creationMode = newView && (newView.flags & 1 /* CreationMode */) === 1 /* CreationMode */;
16391
16434
  firstTemplatePass = newView && newView.tView.firstTemplatePass;
16392
16435
  cleanup = newView && newView.cleanup;
16393
16436
  renderer = newView && newView.renderer;
16437
+ if (newView && newView.bindingIndex < 0) {
16438
+ newView.bindingIndex = newView.bindingStartIndex;
16439
+ }
16394
16440
  if (host != null) {
16395
16441
  previousOrParentNode = host;
16396
16442
  isParent = true;
@@ -16411,7 +16457,8 @@ function leaveView(newView) {
16411
16457
  }
16412
16458
  // Views should be clean and in update mode after being checked, so these bits are cleared
16413
16459
  currentView.flags &= ~(1 /* CreationMode */ | 4 /* Dirty */);
16414
- currentView.lifecycleStage = 1 /* INIT */;
16460
+ currentView.lifecycleStage = 1 /* Init */;
16461
+ currentView.bindingIndex = -1;
16415
16462
  enterView(newView, null);
16416
16463
  }
16417
16464
  /**
@@ -16489,12 +16536,14 @@ function createLView(viewId, renderer, tView, template, context, flags) {
16489
16536
  child: null,
16490
16537
  tail: null,
16491
16538
  next: null,
16492
- bindingStartIndex: null,
16539
+ bindingStartIndex: -1,
16540
+ bindingIndex: -1,
16493
16541
  template: template,
16494
16542
  context: context,
16495
16543
  dynamicViewCount: 0,
16496
- lifecycleStage: 1 /* INIT */,
16544
+ lifecycleStage: 1 /* Init */,
16497
16545
  queries: null,
16546
+ injector: currentView && currentView.injector,
16498
16547
  };
16499
16548
  return newView;
16500
16549
  }
@@ -16609,27 +16658,26 @@ function resetApplicationState() {
16609
16658
  * @param {?} template
16610
16659
  * @param {?} context
16611
16660
  * @param {?} renderer
16661
+ * @param {?=} directives
16662
+ * @param {?=} pipes
16612
16663
  * @return {?}
16613
16664
  */
16614
- function renderEmbeddedTemplate(viewNode, template, context, renderer) {
16665
+ function renderEmbeddedTemplate(viewNode, template, context, renderer, directives, pipes) {
16615
16666
  const /** @type {?} */ _isParent = isParent;
16616
16667
  const /** @type {?} */ _previousOrParentNode = previousOrParentNode;
16617
16668
  let /** @type {?} */ oldView;
16618
16669
  try {
16619
16670
  isParent = true;
16620
16671
  previousOrParentNode = /** @type {?} */ ((null));
16621
- let /** @type {?} */ cm = false;
16672
+ let /** @type {?} */ rf = 2;
16622
16673
  if (viewNode == null) {
16623
- // TODO: revisit setting currentView when re-writing view containers
16624
- const /** @type {?} */ directives = currentView && currentView.tView.directiveRegistry;
16625
- const /** @type {?} */ pipes = currentView && currentView.tView.pipeRegistry;
16626
- const /** @type {?} */ tView = getOrCreateTView(template, directives, pipes);
16674
+ const /** @type {?} */ tView = getOrCreateTView(template, directives || null, pipes || null);
16627
16675
  const /** @type {?} */ lView = createLView(-1, renderer, tView, template, context, 2 /* CheckAlways */);
16628
16676
  viewNode = createLNode(null, 2 /* View */, null, lView);
16629
- cm = true;
16677
+ rf = 1 /* Create */;
16630
16678
  }
16631
16679
  oldView = enterView(viewNode.data, viewNode);
16632
- template(context, cm);
16680
+ template(rf, context);
16633
16681
  refreshDirectives();
16634
16682
  refreshDynamicChildren();
16635
16683
  }
@@ -16655,7 +16703,8 @@ function renderComponentOrTemplate(node, hostView, componentOrContext, template)
16655
16703
  rendererFactory.begin();
16656
16704
  }
16657
16705
  if (template) {
16658
- template(/** @type {?} */ ((componentOrContext)), creationMode);
16706
+ template(getRenderFlags(hostView), /** @type {?} */ ((componentOrContext)));
16707
+ refreshDynamicChildren();
16659
16708
  refreshDirectives();
16660
16709
  }
16661
16710
  else {
@@ -16673,6 +16722,21 @@ function renderComponentOrTemplate(node, hostView, componentOrContext, template)
16673
16722
  leaveView(oldView);
16674
16723
  }
16675
16724
  }
16725
+ /**
16726
+ * This function returns the default configuration of rendering flags depending on when the
16727
+ * template is in creation mode or update mode. By default, the update block is run with the
16728
+ * creation block when the view is in creation mode. Otherwise, the update block is run
16729
+ * alone.
16730
+ *
16731
+ * Dynamically created views do NOT use this configuration (update block and create block are
16732
+ * always run separately).
16733
+ * @param {?} view
16734
+ * @return {?}
16735
+ */
16736
+ function getRenderFlags(view) {
16737
+ return view.flags & 1 /* CreationMode */ ? 1 /* Create */ | 2 /* Update */ :
16738
+ 2 /* Update */;
16739
+ }
16676
16740
  /**
16677
16741
  * Create DOM element. The instruction must later be followed by `elementEnd()` call.
16678
16742
  *
@@ -16688,7 +16752,7 @@ function renderComponentOrTemplate(node, hostView, componentOrContext, template)
16688
16752
  */
16689
16753
  function elementStart(index, name, attrs, localRefs) {
16690
16754
  ngDevMode &&
16691
- assertNull(currentView.bindingStartIndex, 'elements should be created before any bindings');
16755
+ assertEqual(currentView.bindingStartIndex, -1, 'elements should be created before any bindings');
16692
16756
  const /** @type {?} */ native = renderer.createElement(name);
16693
16757
  const /** @type {?} */ node = createLNode(index, 3 /* Element */, /** @type {?} */ ((native)), null);
16694
16758
  if (attrs)
@@ -16727,6 +16791,7 @@ function createDirectivesAndLocals(index, name, attrs, localRefs, containerData)
16727
16791
  * @return {?}
16728
16792
  */
16729
16793
  function cacheMatchingDirectivesForNode(tNode, tView, localRefs) {
16794
+ // Please make sure to have explicit type for `exportsMap`. Inferred type triggers bug in tsickle.
16730
16795
  const /** @type {?} */ exportsMap = localRefs ? { '': -1 } : null;
16731
16796
  const /** @type {?} */ matches = tView.currentMatches = findDirectiveMatches(tNode);
16732
16797
  if (matches) {
@@ -16753,9 +16818,9 @@ function findDirectiveMatches(tNode) {
16753
16818
  const /** @type {?} */ def = registry[i];
16754
16819
  if (isNodeMatchingSelectorList(tNode, /** @type {?} */ ((def.selectors)))) {
16755
16820
  if ((/** @type {?} */ (def)).template) {
16756
- if (tNode.flags & 1 /* Component */)
16821
+ if (tNode.flags & 4096 /* isComponent */)
16757
16822
  throwMultipleComponentError(tNode);
16758
- tNode.flags = 1 /* Component */;
16823
+ tNode.flags = 4096 /* isComponent */;
16759
16824
  }
16760
16825
  if (def.diPublic)
16761
16826
  def.diPublic(def);
@@ -16822,7 +16887,7 @@ function initChangeDetectorIfExisting(injector, instance, view) {
16822
16887
  * @return {?}
16823
16888
  */
16824
16889
  function isComponent(tNode) {
16825
- return (tNode.flags & 1 /* Component */) === 1 /* Component */;
16890
+ return (tNode.flags & 4096 /* isComponent */) === 4096 /* isComponent */;
16826
16891
  }
16827
16892
  /**
16828
16893
  * This function instantiates the given directives.
@@ -16830,12 +16895,13 @@ function isComponent(tNode) {
16830
16895
  */
16831
16896
  function instantiateDirectivesDirectly() {
16832
16897
  const /** @type {?} */ tNode = /** @type {?} */ ((previousOrParentNode.tNode));
16833
- const /** @type {?} */ size = (tNode.flags & 8190 /* SIZE_MASK */) >> 1;
16834
- if (size > 0) {
16835
- const /** @type {?} */ startIndex = tNode.flags >> 13;
16898
+ const /** @type {?} */ count = tNode.flags & 4095;
16899
+ if (count > 0) {
16900
+ const /** @type {?} */ start = tNode.flags >> 13;
16901
+ const /** @type {?} */ end = start + count;
16836
16902
  const /** @type {?} */ tDirectives = /** @type {?} */ ((currentView.tView.directives));
16837
- for (let /** @type {?} */ i = startIndex; i < startIndex + size; i++) {
16838
- const /** @type {?} */ def = /** @type {?} */ (tDirectives[i]);
16903
+ for (let /** @type {?} */ i = start; i < end; i++) {
16904
+ const /** @type {?} */ def = tDirectives[i];
16839
16905
  directiveCreate(i, def.factory(), def);
16840
16906
  }
16841
16907
  }
@@ -16996,7 +17062,7 @@ function hostElement(tag, rNode, def) {
16996
17062
  const /** @type {?} */ node = createLNode(0, 3 /* Element */, rNode, createLView(-1, renderer, getOrCreateTView(def.template, def.directiveDefs, def.pipeDefs), null, null, def.onPush ? 4 /* Dirty */ : 2 /* CheckAlways */));
16997
17063
  if (firstTemplatePass) {
16998
17064
  node.tNode = createTNode(/** @type {?} */ (tag), null, null);
16999
- node.tNode.flags = 1 /* Component */;
17065
+ node.tNode.flags = 4096 /* isComponent */;
17000
17066
  if (def.diPublic)
17001
17067
  def.diPublic(def);
17002
17068
  currentView.tView.directives = [def];
@@ -17181,13 +17247,14 @@ function setInputsForProperty(inputs, value) {
17181
17247
  * @return {?} PropertyAliases|null aggregate of all properties if any, `null` otherwise
17182
17248
  */
17183
17249
  function generatePropertyAliases(tNodeFlags, direction) {
17184
- const /** @type {?} */ size = (tNodeFlags & 8190 /* SIZE_MASK */) >> 1;
17250
+ const /** @type {?} */ count = tNodeFlags & 4095;
17185
17251
  let /** @type {?} */ propStore = null;
17186
- if (size > 0) {
17252
+ if (count > 0) {
17187
17253
  const /** @type {?} */ start = tNodeFlags >> 13;
17254
+ const /** @type {?} */ end = start + count;
17188
17255
  const /** @type {?} */ isInput = direction === 0;
17189
17256
  const /** @type {?} */ defs = /** @type {?} */ ((currentView.tView.directives));
17190
- for (let /** @type {?} */ i = start, /** @type {?} */ ii = start + size; i < ii; i++) {
17257
+ for (let /** @type {?} */ i = start; i < end; i++) {
17191
17258
  const /** @type {?} */ directiveDef = /** @type {?} */ (defs[i]);
17192
17259
  const /** @type {?} */ propertyAliasMap = isInput ? directiveDef.inputs : directiveDef.outputs;
17193
17260
  for (let /** @type {?} */ publicName in propertyAliasMap) {
@@ -17322,11 +17389,8 @@ function elementStyle(index, value) {
17322
17389
  */
17323
17390
  function text(index, value) {
17324
17391
  ngDevMode &&
17325
- assertNull(currentView.bindingStartIndex, 'text nodes should be created before bindings');
17326
- const /** @type {?} */ textNode = value != null ?
17327
- (isProceduralRenderer(renderer) ? renderer.createText(stringify$1(value)) :
17328
- renderer.createTextNode(stringify$1(value))) :
17329
- null;
17392
+ assertEqual(currentView.bindingStartIndex, -1, 'text nodes should be created before bindings');
17393
+ const /** @type {?} */ textNode = value != null ? createTextNode(value, renderer) : null;
17330
17394
  const /** @type {?} */ node = createLNode(index, 3 /* Element */, textNode);
17331
17395
  // Text nodes are self closing.
17332
17396
  isParent = false;
@@ -17353,9 +17417,7 @@ function textBinding(index, value) {
17353
17417
  }
17354
17418
  else {
17355
17419
  // Node was created but DOM node creation was delayed. Create and append now.
17356
- existingNode.native = isProceduralRenderer(renderer) ?
17357
- renderer.createText(stringify$1(value)) :
17358
- renderer.createTextNode(stringify$1(value));
17420
+ existingNode.native = createTextNode(value, renderer);
17359
17421
  insertChild(existingNode, currentView);
17360
17422
  }
17361
17423
  }
@@ -17374,7 +17436,7 @@ function textBinding(index, value) {
17374
17436
  function directiveCreate(index, directive, directiveDef) {
17375
17437
  const /** @type {?} */ instance = baseDirectiveCreate(index, directive, directiveDef);
17376
17438
  ngDevMode && assertNotNull(previousOrParentNode.tNode, 'previousOrParentNode.tNode');
17377
- const /** @type {?} */ tNode = /** @type {?} */ ((previousOrParentNode.tNode));
17439
+ const /** @type {?} */ tNode = previousOrParentNode.tNode;
17378
17440
  const /** @type {?} */ isComponent = (/** @type {?} */ (directiveDef)).template;
17379
17441
  if (isComponent) {
17380
17442
  addComponentLogic(index, directive, /** @type {?} */ (directiveDef));
@@ -17422,7 +17484,7 @@ function addComponentLogic(index, instance, def) {
17422
17484
  */
17423
17485
  function baseDirectiveCreate(index, directive, directiveDef) {
17424
17486
  ngDevMode &&
17425
- assertNull(currentView.bindingStartIndex, 'directives should be created before any bindings');
17487
+ assertEqual(currentView.bindingStartIndex, -1, 'directives should be created before any bindings');
17426
17488
  ngDevMode && assertPreviousIsParent();
17427
17489
  Object.defineProperty(directive, NG_HOST_SYMBOL, { enumerable: false, value: previousOrParentNode });
17428
17490
  if (directives == null)
@@ -17430,10 +17492,19 @@ function baseDirectiveCreate(index, directive, directiveDef) {
17430
17492
  ngDevMode && assertDataNext(index, directives);
17431
17493
  directives[index] = directive;
17432
17494
  if (firstTemplatePass) {
17433
- const /** @type {?} */ flags = /** @type {?} */ ((previousOrParentNode.tNode)).flags; /** @type {?} */
17434
- ((previousOrParentNode.tNode)).flags = (flags & 8190 /* SIZE_MASK */) === 0 ?
17435
- (index << 13 /* INDX_SHIFT */) | 2 /* SIZE_SKIP */ | flags & 1 /* Component */ :
17436
- flags + 2 /* SIZE_SKIP */;
17495
+ const /** @type {?} */ flags = /** @type {?} */ ((previousOrParentNode.tNode)).flags;
17496
+ if ((flags & 4095 /* DirectiveCountMask */) === 0) {
17497
+ /** @type {?} */ ((
17498
+ // When the first directive is created:
17499
+ // - save the index,
17500
+ // - set the number of directives to 1
17501
+ previousOrParentNode.tNode)).flags = index << 13 /* DirectiveStartingIndexShift */ | flags & 4096 /* isComponent */ | 1;
17502
+ }
17503
+ else {
17504
+ // Only need to bump the size when subsequent directives are created
17505
+ ngDevMode && assertNotEqual(flags & 4095 /* DirectiveCountMask */, 4095 /* DirectiveCountMask */, 'Reached the max number of directives'); /** @type {?} */
17506
+ ((previousOrParentNode.tNode)).flags++;
17507
+ }
17437
17508
  }
17438
17509
  else {
17439
17510
  const /** @type {?} */ diPublic = /** @type {?} */ ((directiveDef)).diPublic;
@@ -17531,8 +17602,7 @@ function createLContainer(parentLNode, currentView, template) {
17531
17602
  * @return {?}
17532
17603
  */
17533
17604
  function container(index, template, tagName, attrs, localRefs) {
17534
- ngDevMode &&
17535
- assertNull(currentView.bindingStartIndex, 'container nodes should be created before any bindings');
17605
+ ngDevMode && assertEqual(currentView.bindingStartIndex, -1, 'container nodes should be created before any bindings');
17536
17606
  const /** @type {?} */ currentParent = isParent ? previousOrParentNode : /** @type {?} */ ((previousOrParentNode.parent));
17537
17607
  const /** @type {?} */ lContainer = createLContainer(currentParent, currentView, template);
17538
17608
  const /** @type {?} */ node = createLNode(index, 0 /* Container */, undefined, lContainer);
@@ -17603,6 +17673,7 @@ function refreshDynamicChildren() {
17603
17673
  const /** @type {?} */ container = /** @type {?} */ (current);
17604
17674
  for (let /** @type {?} */ i = 0; i < container.views.length; i++) {
17605
17675
  const /** @type {?} */ view = container.views[i];
17676
+ // The directives and pipes are not needed here as an existing view is only being refreshed.
17606
17677
  renderEmbeddedTemplate(view, /** @type {?} */ ((view.data.template)), /** @type {?} */ ((view.data.context)), renderer);
17607
17678
  }
17608
17679
  }
@@ -17647,12 +17718,12 @@ function embeddedViewStart(viewBlockId) {
17647
17718
  const /** @type {?} */ container = /** @type {?} */ ((isParent ? previousOrParentNode : /** @type {?} */ ((previousOrParentNode.parent))));
17648
17719
  ngDevMode && assertNodeType(container, 0 /* Container */);
17649
17720
  const /** @type {?} */ lContainer = container.data;
17650
- const /** @type {?} */ existingViewNode = scanForView(container, lContainer.nextIndex, viewBlockId);
17651
- if (existingViewNode) {
17652
- previousOrParentNode = existingViewNode;
17721
+ let /** @type {?} */ viewNode = scanForView(container, lContainer.nextIndex, viewBlockId);
17722
+ if (viewNode) {
17723
+ previousOrParentNode = viewNode;
17653
17724
  ngDevMode && assertNodeType(previousOrParentNode, 2 /* View */);
17654
17725
  isParent = true;
17655
- enterView((/** @type {?} */ (existingViewNode)).data, /** @type {?} */ (existingViewNode));
17726
+ enterView(viewNode.data, viewNode);
17656
17727
  }
17657
17728
  else {
17658
17729
  // When we create a new LView, we always reset the state of the instructions.
@@ -17660,9 +17731,9 @@ function embeddedViewStart(viewBlockId) {
17660
17731
  if (lContainer.queries) {
17661
17732
  newView.queries = lContainer.queries.enterView(lContainer.nextIndex);
17662
17733
  }
17663
- enterView(newView, createLNode(null, 2 /* View */, null, newView));
17734
+ enterView(newView, viewNode = createLNode(null, 2 /* View */, null, newView));
17664
17735
  }
17665
- return !existingViewNode;
17736
+ return getRenderFlags(viewNode.data);
17666
17737
  }
17667
17738
  /**
17668
17739
  * Initialize the TView (e.g. static data) for the active embedded view.
@@ -17699,6 +17770,9 @@ function embeddedViewEnd() {
17699
17770
  ngDevMode && assertNodeType(containerNode, 0 /* Container */);
17700
17771
  const /** @type {?} */ lContainer = containerNode.data;
17701
17772
  if (creationMode) {
17773
+ // When projected nodes are going to be inserted, the renderParent of the dynamic container
17774
+ // used by the ViewContainerRef must be set.
17775
+ setRenderParentInProjectedNodes(lContainer.renderParent, viewNode);
17702
17776
  // it is a new view, insert it into collection of views for a given container
17703
17777
  insertView(containerNode, viewNode, lContainer.nextIndex);
17704
17778
  }
@@ -17708,6 +17782,31 @@ function embeddedViewEnd() {
17708
17782
  ngDevMode && assertEqual(isParent, false, 'isParent');
17709
17783
  ngDevMode && assertNodeType(previousOrParentNode, 2 /* View */);
17710
17784
  }
17785
+ /**
17786
+ * For nodes which are projected inside an embedded view, this function sets the renderParent
17787
+ * of their dynamic LContainerNode.
17788
+ * @param {?} renderParent the renderParent of the LContainer which contains the embedded view.
17789
+ * @param {?} viewNode the embedded view.
17790
+ * @return {?}
17791
+ */
17792
+ function setRenderParentInProjectedNodes(renderParent, viewNode) {
17793
+ if (renderParent != null) {
17794
+ let /** @type {?} */ node = viewNode.child;
17795
+ while (node) {
17796
+ if (node.type === 1 /* Projection */) {
17797
+ let /** @type {?} */ nodeToProject = (/** @type {?} */ (node)).data.head;
17798
+ const /** @type {?} */ lastNodeToProject = (/** @type {?} */ (node)).data.tail;
17799
+ while (nodeToProject) {
17800
+ if (nodeToProject.dynamicLContainerNode) {
17801
+ nodeToProject.dynamicLContainerNode.data.renderParent = renderParent;
17802
+ }
17803
+ nodeToProject = nodeToProject === lastNodeToProject ? null : nodeToProject.pNextOrParent;
17804
+ }
17805
+ }
17806
+ node = node.next;
17807
+ }
17808
+ }
17809
+ }
17711
17810
  /**
17712
17811
  * Refreshes components by entering the component view and processing its bindings, queries, etc.
17713
17812
  *
@@ -17841,11 +17940,12 @@ function projection(nodeIndex, localIndex, selectorIndex = 0, attrs) {
17841
17940
  }
17842
17941
  }
17843
17942
  if (canInsertNativeNode(currentParent, currentView)) {
17943
+ ngDevMode && assertNodeType(currentParent, 3 /* Element */);
17844
17944
  // process each node in the list of projected nodes:
17845
17945
  let /** @type {?} */ nodeToProject = node.data.head;
17846
17946
  const /** @type {?} */ lastNodeToProject = node.data.tail;
17847
17947
  while (nodeToProject) {
17848
- appendProjectedNode(/** @type {?} */ (nodeToProject), currentParent, currentView);
17948
+ appendProjectedNode(/** @type {?} */ (nodeToProject), /** @type {?} */ (currentParent), currentView);
17849
17949
  nodeToProject = nodeToProject === lastNodeToProject ? null : nodeToProject.pNextOrParent;
17850
17950
  }
17851
17951
  }
@@ -17915,7 +18015,7 @@ function wrapListenerWithDirtyLogic(view, listenerFn) {
17915
18015
  * @return {?}
17916
18016
  */
17917
18017
  function wrapListenerWithDirtyAndDefault(view, listenerFn) {
17918
- return function (e) {
18018
+ return function wrapListenerIn_markViewDirty(e) {
17919
18019
  markViewDirty(view);
17920
18020
  if (listenerFn(e) === false) {
17921
18021
  e.preventDefault();
@@ -18055,7 +18155,7 @@ function detectChangesInternal(hostView, hostNode, def, component) {
18055
18155
  const /** @type {?} */ oldView = enterView(hostView, hostNode);
18056
18156
  const /** @type {?} */ template = def.template;
18057
18157
  try {
18058
- template(component, creationMode);
18158
+ template(getRenderFlags(hostView), component);
18059
18159
  refreshDirectives();
18060
18160
  refreshDynamicChildren();
18061
18161
  }
@@ -18096,12 +18196,9 @@ const NO_CHANGE = /** @type {?} */ ({});
18096
18196
  * @return {?}
18097
18197
  */
18098
18198
  function initBindings() {
18099
- // `bindingIndex` is initialized when the view is first entered when not in creation mode
18100
- ngDevMode &&
18101
- assertEqual(creationMode, true, 'should only be called in creationMode for performance reasons');
18102
- if (currentView.bindingStartIndex == null) {
18103
- bindingIndex = currentView.bindingStartIndex = data.length;
18104
- }
18199
+ ngDevMode && assertEqual(currentView.bindingStartIndex, -1, 'Binding start index should only be set once, when null');
18200
+ ngDevMode && assertEqual(currentView.bindingIndex, -1, 'Binding index should not yet be set ' + currentView.bindingIndex);
18201
+ currentView.bindingIndex = currentView.bindingStartIndex = data.length;
18105
18202
  }
18106
18203
  /**
18107
18204
  * Creates a single value binding.
@@ -18111,16 +18208,16 @@ function initBindings() {
18111
18208
  * @return {?}
18112
18209
  */
18113
18210
  function bind(value) {
18114
- if (creationMode) {
18211
+ if (currentView.bindingStartIndex < 0) {
18115
18212
  initBindings();
18116
- return data[bindingIndex++] = value;
18213
+ return data[currentView.bindingIndex++] = value;
18117
18214
  }
18118
- const /** @type {?} */ changed = value !== NO_CHANGE && isDifferent(data[bindingIndex], value);
18215
+ const /** @type {?} */ changed = value !== NO_CHANGE && isDifferent(data[currentView.bindingIndex], value);
18119
18216
  if (changed) {
18120
- throwErrorIfNoChangesMode(creationMode, checkNoChangesMode, data[bindingIndex], value);
18121
- data[bindingIndex] = value;
18217
+ throwErrorIfNoChangesMode(creationMode, checkNoChangesMode, data[currentView.bindingIndex], value);
18218
+ data[currentView.bindingIndex] = value;
18122
18219
  }
18123
- bindingIndex++;
18220
+ currentView.bindingIndex++;
18124
18221
  return changed ? value : NO_CHANGE;
18125
18222
  }
18126
18223
  /**
@@ -18363,10 +18460,10 @@ function loadDirective(index) {
18363
18460
  * @return {?}
18364
18461
  */
18365
18462
  function consumeBinding() {
18366
- ngDevMode && assertDataInRange(bindingIndex);
18463
+ ngDevMode && assertDataInRange(currentView.bindingIndex);
18367
18464
  ngDevMode &&
18368
- assertNotEqual(data[bindingIndex], NO_CHANGE, 'Stored value should never be NO_CHANGE.');
18369
- return data[bindingIndex++];
18465
+ assertNotEqual(data[currentView.bindingIndex], NO_CHANGE, 'Stored value should never be NO_CHANGE.');
18466
+ return data[currentView.bindingIndex++];
18370
18467
  }
18371
18468
  /**
18372
18469
  * Updates binding if changed, then returns whether it was updated.
@@ -18375,17 +18472,17 @@ function consumeBinding() {
18375
18472
  */
18376
18473
  function bindingUpdated(value) {
18377
18474
  ngDevMode && assertNotEqual(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');
18378
- if (creationMode) {
18475
+ if (currentView.bindingStartIndex < 0) {
18379
18476
  initBindings();
18380
18477
  }
18381
- else if (isDifferent(data[bindingIndex], value)) {
18382
- throwErrorIfNoChangesMode(creationMode, checkNoChangesMode, data[bindingIndex], value);
18478
+ else if (isDifferent(data[currentView.bindingIndex], value)) {
18479
+ throwErrorIfNoChangesMode(creationMode, checkNoChangesMode, data[currentView.bindingIndex], value);
18383
18480
  }
18384
18481
  else {
18385
- bindingIndex++;
18482
+ currentView.bindingIndex++;
18386
18483
  return false;
18387
18484
  }
18388
- data[bindingIndex++] = value;
18485
+ data[currentView.bindingIndex++] = value;
18389
18486
  return true;
18390
18487
  }
18391
18488
  /**
@@ -18810,6 +18907,7 @@ function renderComponent(componentType /* Type as workaround for: Microsoft/Type
18810
18907
  clean: CLEAN_PROMISE,
18811
18908
  };
18812
18909
  const /** @type {?} */ rootView = createLView(-1, rendererFactory.createRenderer(hostNode, componentDef.rendererType), createTView(null, null), null, rootContext, componentDef.onPush ? 4 /* Dirty */ : 2 /* CheckAlways */);
18910
+ rootView.injector = opts.injector || null;
18813
18911
  const /** @type {?} */ oldView = enterView(rootView, /** @type {?} */ ((null)));
18814
18912
  let /** @type {?} */ elementNode;
18815
18913
  try {
@@ -18849,6 +18947,18 @@ function renderComponent(componentType /* Type as workaround for: Microsoft/Type
18849
18947
  * @return {?}
18850
18948
  */
18851
18949
 
18950
+ /**
18951
+ * Retrieve the root context for any component by walking the parent `LView` until
18952
+ * reaching the root `LView`.
18953
+ *
18954
+ * @param {?} component any component
18955
+ * @return {?}
18956
+ */
18957
+ function getRootContext(component) {
18958
+ const /** @type {?} */ rootContext = /** @type {?} */ (getRootView(component).context);
18959
+ ngDevMode && assertNotNull(rootContext, 'rootContext');
18960
+ return rootContext;
18961
+ }
18852
18962
  /**
18853
18963
  * Retrieve the host element of the component.
18854
18964
  *
@@ -18888,6 +18998,9 @@ function renderComponent(componentType /* Type as workaround for: Microsoft/Type
18888
18998
  * @param {?} component Component to wait upon
18889
18999
  * @return {?} Promise which resolves when the component is rendered.
18890
19000
  */
19001
+ function whenRendered(component) {
19002
+ return getRootContext(component).clean;
19003
+ }
18891
19004
 
18892
19005
  /**
18893
19006
  * @fileoverview added by tsickle
@@ -18990,23 +19103,12 @@ function getOrCreateNodeInjectorForNode(node) {
18990
19103
  cbf5: parentInjector == null ? 0 : parentInjector.cbf5 | parentInjector.bf5,
18991
19104
  cbf6: parentInjector == null ? 0 : parentInjector.cbf6 | parentInjector.bf6,
18992
19105
  cbf7: parentInjector == null ? 0 : parentInjector.cbf7 | parentInjector.bf7,
18993
- injector: null,
18994
19106
  templateRef: null,
18995
19107
  viewContainerRef: null,
18996
19108
  elementRef: null,
18997
19109
  changeDetectorRef: null
18998
19110
  };
18999
19111
  }
19000
- /**
19001
- * Constructs an injection error with the given text and token.
19002
- *
19003
- * @param {?} text The text of the error
19004
- * @param {?} token The token associated with the error
19005
- * @return {?} The error that was created
19006
- */
19007
- function createInjectionError(text$$1, token) {
19008
- return new Error(`ElementInjector: ${text$$1} [${stringify$1(token)}]`);
19009
- }
19010
19112
  /**
19011
19113
  * Makes a directive public to the DI system by adding it to an injector's bloom filter.
19012
19114
  *
@@ -19027,34 +19129,13 @@ function diPublic(def) {
19027
19129
  diPublicInInjector(getOrCreateNodeInjector(), def);
19028
19130
  }
19029
19131
  /**
19030
- * Searches for an instance of the given type up the injector tree and returns
19031
- * that instance if found.
19032
- *
19033
- * If not found, it will propagate up to the next parent injector until the token
19034
- * is found or the top is reached.
19035
- *
19036
- * Usage example (in factory function):
19037
- *
19038
- * class SomeDirective {
19039
- * constructor(directive: DirectiveA) {}
19040
- *
19041
- * static ngDirectiveDef = defineDirective({
19042
- * type: SomeDirective,
19043
- * factory: () => new SomeDirective(directiveInject(DirectiveA))
19044
- * });
19045
- * }
19046
- *
19047
- * NOTE: use `directiveInject` with `\@Directive`, `\@Component`, and `\@Pipe`. For
19048
- * all other injection use `inject` which does not walk the DOM render tree.
19049
- *
19050
19132
  * @template T
19051
- * @param {?} token The directive type to search for
19052
- * @param {?=} flags Injection flags (e.g. CheckParent)
19053
- * @param {?=} defaultValue
19054
- * @return {?} The instance found
19133
+ * @param {?} token
19134
+ * @param {?=} flags
19135
+ * @return {?}
19055
19136
  */
19056
- function directiveInject(token, flags, defaultValue) {
19057
- return getOrCreateInjectable(getOrCreateNodeInjector(), token, flags, defaultValue);
19137
+ function directiveInject(token, flags = 0 /* Default */) {
19138
+ return getOrCreateInjectable(getOrCreateNodeInjector(), token, flags);
19058
19139
  }
19059
19140
  /**
19060
19141
  * Creates an ElementRef and stores it on the injector.
@@ -19169,7 +19250,8 @@ function getOrCreateHostChangeDetector(currentNode) {
19169
19250
  const /** @type {?} */ existingRef = hostInjector && hostInjector.changeDetectorRef;
19170
19251
  return existingRef ?
19171
19252
  existingRef :
19172
- createViewRef(/** @type {?} */ (hostNode.data), /** @type {?} */ ((hostNode.view.directives))[/** @type {?} */ ((hostNode.tNode)).flags >> 13 /* INDX_SHIFT */]);
19253
+ createViewRef(/** @type {?} */ (hostNode.data), /** @type {?} */ ((hostNode.view
19254
+ .directives))[/** @type {?} */ ((hostNode.tNode)).flags >> 13 /* DirectiveStartingIndexShift */]);
19173
19255
  }
19174
19256
  /**
19175
19257
  * If the node is an embedded view, traverses up the view tree to return the closest
@@ -19200,22 +19282,21 @@ function getClosestComponentAncestor(node) {
19200
19282
  * @param {?} di Node injector where the search should start
19201
19283
  * @param {?} token The directive type to search for
19202
19284
  * @param {?=} flags Injection flags (e.g. CheckParent)
19203
- * @param {?=} defaultValue
19204
19285
  * @return {?} The instance found
19205
19286
  */
19206
- function getOrCreateInjectable(di, token, flags, defaultValue) {
19287
+ function getOrCreateInjectable(di, token, flags) {
19207
19288
  const /** @type {?} */ bloomHash = bloomHashBit(token);
19208
19289
  // If the token has a bloom hash, then it is a directive that is public to the injection system
19209
19290
  // (diPublic). If there is no hash, fall back to the module injector.
19210
19291
  if (bloomHash === null) {
19211
- const /** @type {?} */ moduleInjector = di.injector;
19212
- if (!moduleInjector) {
19213
- if (defaultValue != null) {
19214
- return defaultValue;
19215
- }
19216
- throw createInjectionError('NotFound', token);
19292
+ const /** @type {?} */ moduleInjector = getPreviousOrParentNode().view.injector;
19293
+ const /** @type {?} */ formerInjector = setCurrentInjector(moduleInjector);
19294
+ try {
19295
+ return inject(token, flags);
19296
+ }
19297
+ finally {
19298
+ setCurrentInjector(formerInjector);
19217
19299
  }
19218
- moduleInjector.get(token);
19219
19300
  }
19220
19301
  else {
19221
19302
  let /** @type {?} */ injector = di;
@@ -19231,20 +19312,17 @@ function getOrCreateInjectable(di, token, flags, defaultValue) {
19231
19312
  // At this point, we have an injector which *may* contain the token, so we step through the
19232
19313
  // directives associated with the injector's corresponding node to get the directive instance.
19233
19314
  const /** @type {?} */ node = injector.node;
19234
- // The size of the node's directive's list is stored in certain bits of the node's flags,
19235
- // so exact it with a mask and shift it back such that the bits reflect the real value.
19236
19315
  const /** @type {?} */ flags = /** @type {?} */ ((node.tNode)).flags;
19237
- const /** @type {?} */ size = (flags & 8190 /* SIZE_MASK */) >> 1;
19238
- if (size !== 0) {
19239
- // The start index of the directives list is also part of the node's flags, but there is
19240
- // nothing to the "left" of it so it doesn't need a mask.
19316
+ const /** @type {?} */ count = flags & 4095;
19317
+ if (count !== 0) {
19241
19318
  const /** @type {?} */ start = flags >> 13;
19319
+ const /** @type {?} */ end = start + count;
19242
19320
  const /** @type {?} */ defs = /** @type {?} */ ((node.view.tView.directives));
19243
- for (let /** @type {?} */ i = start, /** @type {?} */ ii = start + size; i < ii; i++) {
19321
+ for (let /** @type {?} */ i = start; i < end; i++) {
19244
19322
  // Get the definition for the directive at this index and, if it is injectable (diPublic),
19245
19323
  // and matches the given token, return the directive instance.
19246
19324
  const /** @type {?} */ directiveDef = /** @type {?} */ (defs[i]);
19247
- if (directiveDef.diPublic && directiveDef.type == token) {
19325
+ if (directiveDef.type === token && directiveDef.diPublic) {
19248
19326
  return getDirectiveInstance(/** @type {?} */ ((node.view.directives))[i]);
19249
19327
  }
19250
19328
  }
@@ -19262,7 +19340,7 @@ function getOrCreateInjectable(di, token, flags, defaultValue) {
19262
19340
  }
19263
19341
  // No directive was found for the given token.
19264
19342
  // TODO: implement optional, check-self, and check-parent.
19265
- throw createInjectionError('Not found', token);
19343
+ throw new Error('Implement');
19266
19344
  }
19267
19345
  /**
19268
19346
  * @template T
@@ -19476,7 +19554,7 @@ class ViewContainerRef$1 {
19476
19554
  */
19477
19555
  insert(viewRef, index) {
19478
19556
  const /** @type {?} */ lViewNode = (/** @type {?} */ (viewRef))._lViewNode;
19479
- const /** @type {?} */ adjustedIdx = this._adjustAndAssertIndex(index);
19557
+ const /** @type {?} */ adjustedIdx = this._adjustIndex(index);
19480
19558
  insertView(this._lContainerNode, lViewNode, adjustedIdx);
19481
19559
  // invalidate cache of next sibling RNode (we do similar operation in the containerRefreshEnd
19482
19560
  // instruction)
@@ -19498,42 +19576,52 @@ class ViewContainerRef$1 {
19498
19576
  }
19499
19577
  /**
19500
19578
  * @param {?} viewRef
19501
- * @param {?} currentIndex
19579
+ * @param {?} newIndex
19502
19580
  * @return {?}
19503
19581
  */
19504
- move(viewRef, currentIndex) {
19505
- throw notImplemented();
19582
+ move(viewRef, newIndex) {
19583
+ const /** @type {?} */ index = this.indexOf(viewRef);
19584
+ this.detach(index);
19585
+ this.insert(viewRef, this._adjustIndex(newIndex));
19586
+ return viewRef;
19506
19587
  }
19507
19588
  /**
19508
19589
  * @param {?} viewRef
19509
19590
  * @return {?}
19510
19591
  */
19511
- indexOf(viewRef) { throw notImplemented(); }
19592
+ indexOf(viewRef) { return this._viewRefs.indexOf(viewRef); }
19512
19593
  /**
19513
19594
  * @param {?=} index
19514
19595
  * @return {?}
19515
19596
  */
19516
19597
  remove(index) {
19517
- const /** @type {?} */ adjustedIdx = this._adjustAndAssertIndex(index);
19518
- removeView(this._lContainerNode, adjustedIdx);
19519
- this._viewRefs.splice(adjustedIdx, 1);
19598
+ this.detach(index);
19599
+ // TODO(ml): proper destroy of the ViewRef, i.e. recursively destroy the LviewNode and its
19600
+ // children, delete DOM nodes and QueryList, trigger hooks (onDestroy), destroy the renderer,
19601
+ // detach projected nodes
19520
19602
  }
19521
19603
  /**
19522
19604
  * @param {?=} index
19523
19605
  * @return {?}
19524
19606
  */
19525
- detach(index) { throw notImplemented(); }
19607
+ detach(index) {
19608
+ const /** @type {?} */ adjustedIdx = this._adjustIndex(index, -1);
19609
+ removeView(this._lContainerNode, adjustedIdx);
19610
+ return this._viewRefs.splice(adjustedIdx, 1)[0] || null;
19611
+ }
19526
19612
  /**
19527
19613
  * @param {?=} index
19614
+ * @param {?=} shift
19528
19615
  * @return {?}
19529
19616
  */
19530
- _adjustAndAssertIndex(index) {
19617
+ _adjustIndex(index, shift = 0) {
19531
19618
  if (index == null) {
19532
- index = this._lContainerNode.data.views.length;
19619
+ return this._lContainerNode.data.views.length + shift;
19533
19620
  }
19534
- else {
19621
+ if (ngDevMode) {
19622
+ assertGreaterThan(index, -1, 'index must be positive');
19535
19623
  // +1 because it's legal to insert at the end.
19536
- ngDevMode && assertLessThan(index, this._lContainerNode.data.views.length + 1, 'index');
19624
+ assertLessThan(index, this._lContainerNode.data.views.length + 1 + shift, 'index');
19537
19625
  }
19538
19626
  return index;
19539
19627
  }
@@ -19549,7 +19637,8 @@ class ViewContainerRef$1 {
19549
19637
  function getOrCreateTemplateRef(di) {
19550
19638
  ngDevMode && assertNodeType(di.node, 0 /* Container */);
19551
19639
  const /** @type {?} */ data = (/** @type {?} */ (di.node)).data;
19552
- return di.templateRef || (di.templateRef = new TemplateRef$1(getOrCreateElementRef(di), /** @type {?} */ ((data.template)), getRenderer()));
19640
+ const /** @type {?} */ tView = di.node.view.tView;
19641
+ return di.templateRef || (di.templateRef = new TemplateRef$1(getOrCreateElementRef(di), /** @type {?} */ ((data.template)), getRenderer(), tView.directiveRegistry, tView.pipeRegistry));
19553
19642
  }
19554
19643
  /**
19555
19644
  * @template T
@@ -19559,9 +19648,13 @@ class TemplateRef$1 {
19559
19648
  * @param {?} elementRef
19560
19649
  * @param {?} template
19561
19650
  * @param {?} _renderer
19651
+ * @param {?} _directives
19652
+ * @param {?} _pipes
19562
19653
  */
19563
- constructor(elementRef, template, _renderer) {
19654
+ constructor(elementRef, template, _renderer, _directives, _pipes) {
19564
19655
  this._renderer = _renderer;
19656
+ this._directives = _directives;
19657
+ this._pipes = _pipes;
19565
19658
  this.elementRef = elementRef;
19566
19659
  this._template = template;
19567
19660
  }
@@ -19570,7 +19663,7 @@ class TemplateRef$1 {
19570
19663
  * @return {?}
19571
19664
  */
19572
19665
  createEmbeddedView(context) {
19573
- const /** @type {?} */ viewNode = renderEmbeddedTemplate(null, this._template, context, this._renderer);
19666
+ const /** @type {?} */ viewNode = renderEmbeddedTemplate(null, this._template, context, this._renderer, this._directives, this._pipes);
19574
19667
  return addDestroyable(new EmbeddedViewRef$1(viewNode, this._template, context));
19575
19668
  }
19576
19669
  }
@@ -19638,7 +19731,7 @@ function defineComponent(componentDefinition) {
19638
19731
  });
19639
19732
  const /** @type {?} */ feature = componentDefinition.features;
19640
19733
  feature && feature.forEach((fn) => fn(def));
19641
- return def;
19734
+ return /** @type {?} */ (def);
19642
19735
  }
19643
19736
  /**
19644
19737
  * @param {?} type
@@ -19795,12 +19888,12 @@ const defineDirective = /** @type {?} */ ((defineComponent));
19795
19888
  * @return {?}
19796
19889
  */
19797
19890
  function definePipe(pipeDef) {
19798
- return /** @type {?} */ ({
19891
+ return /** @type {?} */ ((/** @type {?} */ ({
19799
19892
  name: pipeDef.name,
19800
19893
  n: pipeDef.factory,
19801
19894
  pure: pipeDef.pure !== false,
19802
19895
  onDestroy: pipeDef.type.prototype.ngOnDestroy || null
19803
- });
19896
+ })));
19804
19897
  }
19805
19898
 
19806
19899
  /**
@@ -20151,6 +20244,7 @@ function isPure(index) {
20151
20244
  * Use of this source code is governed by an MIT-style license that can be
20152
20245
  * found in the LICENSE file at https://angular.io/license
20153
20246
  */
20247
+ /** @enum {number} */
20154
20248
  /**
20155
20249
  * A subclass of `Type` which has a static `ngComponentDef`:`ComponentDef` field making it
20156
20250
  * consumable for rendering.
@@ -20417,13 +20511,15 @@ function getIdxOfMatchingSelector(tNode, selector) {
20417
20511
  * @param {?} type Type of a directive to look for.
20418
20512
  * @return {?} Index of a found directive or null when none found.
20419
20513
  */
20420
- function geIdxOfMatchingDirective(node, type) {
20514
+ function getIdxOfMatchingDirective(node, type) {
20421
20515
  const /** @type {?} */ defs = /** @type {?} */ ((node.view.tView.directives));
20422
20516
  const /** @type {?} */ flags = /** @type {?} */ ((node.tNode)).flags;
20423
- const /** @type {?} */ size = (flags & 8190 /* SIZE_MASK */) >> 1;
20424
- for (let /** @type {?} */ i = flags >> 13 /* INDX_SHIFT */, /** @type {?} */ ii = i + size; i < ii; i++) {
20517
+ const /** @type {?} */ count = flags & 4095;
20518
+ const /** @type {?} */ start = flags >> 13;
20519
+ const /** @type {?} */ end = start + count;
20520
+ for (let /** @type {?} */ i = start; i < end; i++) {
20425
20521
  const /** @type {?} */ def = /** @type {?} */ (defs[i]);
20426
- if (def.diPublic && def.type === type) {
20522
+ if (def.type === type && def.diPublic) {
20427
20523
  return i;
20428
20524
  }
20429
20525
  }
@@ -20441,7 +20537,7 @@ function readFromNodeInjector(nodeInjector, node, read, directiveIdx) {
20441
20537
  return read.read(nodeInjector, node, directiveIdx);
20442
20538
  }
20443
20539
  else {
20444
- const /** @type {?} */ matchingIdx = geIdxOfMatchingDirective(node, /** @type {?} */ (read));
20540
+ const /** @type {?} */ matchingIdx = getIdxOfMatchingDirective(node, /** @type {?} */ (read));
20445
20541
  if (matchingIdx !== null) {
20446
20542
  return /** @type {?} */ ((node.view.directives))[matchingIdx];
20447
20543
  }
@@ -20459,7 +20555,7 @@ function add(query, node) {
20459
20555
  const /** @type {?} */ predicate = query.predicate;
20460
20556
  const /** @type {?} */ type = predicate.type;
20461
20557
  if (type) {
20462
- const /** @type {?} */ directiveIdx = geIdxOfMatchingDirective(node, type);
20558
+ const /** @type {?} */ directiveIdx = getIdxOfMatchingDirective(node, type);
20463
20559
  if (directiveIdx !== null) {
20464
20560
  // a node is matching a predicate - determine what to read
20465
20561
  // if read token and / or strategy is not specified, use type as read token
@@ -20990,5 +21086,5 @@ function bypassSanitizationTrustString(trustedString, mode) {
20990
21086
  * Generated bundle index. Do not edit.
20991
21087
  */
20992
21088
 
20993
- export { _iterableDiffersFactory as ɵangular_packages_core_core_j, _keyValueDiffersFactory as ɵangular_packages_core_core_k, _localeFactory as ɵangular_packages_core_core_l, _appIdRandomProviderFactory as ɵangular_packages_core_core_f, defaultKeyValueDiffers as ɵangular_packages_core_core_g, DefaultIterableDifferFactory as ɵangular_packages_core_core_h, DefaultKeyValueDifferFactory as ɵangular_packages_core_core_i, ReflectiveInjector_ as ɵangular_packages_core_core_c, ReflectiveDependency as ɵangular_packages_core_core_d, resolveReflectiveProviders as ɵangular_packages_core_core_e, wtfEnabled as ɵangular_packages_core_core_m, createScope as ɵangular_packages_core_core_o, detectWTF as ɵangular_packages_core_core_n, endTimeRange as ɵangular_packages_core_core_r, leave as ɵangular_packages_core_core_p, startTimeRange as ɵangular_packages_core_core_q, getOrCreateChangeDetectorRef as ɵangular_packages_core_core_v, getOrCreateContainerRef as ɵangular_packages_core_core_x, getOrCreateInjectable as ɵangular_packages_core_core_w, getOrCreateNodeInjector as ɵangular_packages_core_core_u, getOrCreateTemplateRef as ɵangular_packages_core_core_y, bindingUpdated as ɵangular_packages_core_core_bb, bindingUpdated2 as ɵangular_packages_core_core_bd, bindingUpdated4 as ɵangular_packages_core_core_be, checkAndUpdateBinding$1 as ɵangular_packages_core_core_bc, consumeBinding as ɵangular_packages_core_core_ba, getCreationMode as ɵangular_packages_core_core_z, makeParamDecorator as ɵangular_packages_core_core_a, makePropDecorator as ɵangular_packages_core_core_b, _def as ɵangular_packages_core_core_s, DebugContext as ɵangular_packages_core_core_t, createPlatform, assertPlatform, destroyPlatform, getPlatform, PlatformRef, ApplicationRef, enableProdMode, isDevMode, createPlatformFactory, NgProbeToken, APP_ID, PACKAGE_ROOT_URL, PLATFORM_INITIALIZER, PLATFORM_ID, APP_BOOTSTRAP_LISTENER, APP_INITIALIZER, ApplicationInitStatus, DebugElement, DebugNode, asNativeElements, getDebugNode, Testability, TestabilityRegistry, setTestabilityGetter, TRANSLATIONS, TRANSLATIONS_FORMAT, LOCALE_ID, MissingTranslationStrategy, ApplicationModule, wtfCreateScope, wtfLeave, wtfStartTimeRange, wtfEndTimeRange, Type, EventEmitter, ErrorHandler, Sanitizer, SecurityContext, ANALYZE_FOR_ENTRY_COMPONENTS, Attribute, ContentChild, ContentChildren, Query, ViewChild, ViewChildren, Component, Directive, HostBinding, HostListener, Input, Output, Pipe, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA, NgModule, ViewEncapsulation, Version, VERSION, forwardRef, resolveForwardRef, Injectable, inject, INJECTOR, Injector, ReflectiveInjector, createInjector, ResolvedReflectiveFactory, ReflectiveKey, InjectionToken, Inject, Optional, Self, SkipSelf, Host, defineInjectable, defineInjector, NgZone, RenderComponentType, Renderer, Renderer2, RendererFactory2, RendererStyleFlags2, RootRenderer, COMPILER_OPTIONS, Compiler, CompilerFactory, ModuleWithComponentFactories, ComponentFactory, ComponentRef, ComponentFactoryResolver, ElementRef, NgModuleFactory, NgModuleRef, NgModuleFactoryLoader, getModuleFactory, QueryList, SystemJsNgModuleLoader, SystemJsNgModuleLoaderConfig, TemplateRef, ViewContainerRef, EmbeddedViewRef, 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, devModeEqual as ɵdevModeEqual, isListLikeIterable as ɵisListLikeIterable, ChangeDetectorStatus as ɵChangeDetectorStatus, isDefaultChangeDetectionStrategy as ɵisDefaultChangeDetectionStrategy, Console as ɵConsole, setCurrentInjector as ɵsetCurrentInjector, APP_ROOT as ɵAPP_ROOT, ComponentFactory as ɵComponentFactory, CodegenComponentFactoryResolver as ɵCodegenComponentFactoryResolver, 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, overrideComponentView as ɵoverrideComponentView, overrideProvider as ɵoverrideProvider, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, defineComponent as ɵdefineComponent, defineDirective as ɵdefineDirective, definePipe as ɵdefinePipe, detectChanges as ɵdetectChanges, renderComponent as ɵrenderComponent, directiveInject as ɵdirectiveInject, injectTemplateRef as ɵinjectTemplateRef, injectViewContainerRef as ɵinjectViewContainerRef, injectChangeDetectorRef as ɵinjectChangeDetectorRef, injectAttribute as ɵinjectAttribute, PublicFeature as ɵPublicFeature, NgOnChangesFeature as ɵNgOnChangesFeature, markDirty as ɵmarkDirty, NO_CHANGE as ɵNC, container as ɵC, elementStart as ɵE, listener as ɵL, text as ɵT, embeddedViewStart as ɵV, query as ɵQ, loadDirective as ɵd, projection as ɵP, bind as ɵb, interpolation1 as ɵi1, interpolation2 as ɵi2, interpolation3 as ɵi3, interpolation4 as ɵi4, interpolation5 as ɵi5, interpolation6 as ɵi6, interpolation7 as ɵi7, interpolation8 as ɵi8, interpolationV as ɵiV, pipeBind1 as ɵpb1, pipeBind2 as ɵpb2, pipeBind3 as ɵpb3, pipeBind4 as ɵpb4, pipeBindV as ɵpbV, pureFunction0 as ɵf0, pureFunction1 as ɵf1, pureFunction2 as ɵf2, pureFunction3 as ɵf3, pureFunction4 as ɵf4, pureFunction5 as ɵf5, pureFunction6 as ɵf6, pureFunction7 as ɵf7, pureFunction8 as ɵf8, pureFunctionV as ɵfV, containerRefreshStart as ɵcR, containerRefreshEnd as ɵcr, queryRefresh as ɵqR, elementEnd as ɵe, elementProperty as ɵp, projectionDef as ɵpD, elementAttribute as ɵa, elementStyle as ɵs, elementStyleNamed as ɵsn, elementClass as ɵk, elementClassNamed as ɵkn, textBinding as ɵt, embeddedViewEnd as ɵv, store as ɵst, load as ɵld, pipe as ɵPp, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, sanitizeHtml as ɵsanitizeHtml, sanitizeStyle as ɵsanitizeStyle, sanitizeUrl as ɵsanitizeUrl, sanitizeResourceUrl as ɵsanitizeResourceUrl, registerModuleFactory as ɵregisterModuleFactory, EMPTY_ARRAY$2 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, elementEventFullName as ɵelementEventFullName, 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 };
21089
+ export { _iterableDiffersFactory as ɵangular_packages_core_core_j, _keyValueDiffersFactory as ɵangular_packages_core_core_k, _localeFactory as ɵangular_packages_core_core_l, _appIdRandomProviderFactory as ɵangular_packages_core_core_f, defaultKeyValueDiffers as ɵangular_packages_core_core_g, DefaultIterableDifferFactory as ɵangular_packages_core_core_h, DefaultKeyValueDifferFactory as ɵangular_packages_core_core_i, ReflectiveInjector_ as ɵangular_packages_core_core_c, ReflectiveDependency as ɵangular_packages_core_core_d, resolveReflectiveProviders as ɵangular_packages_core_core_e, wtfEnabled as ɵangular_packages_core_core_m, createScope as ɵangular_packages_core_core_o, detectWTF as ɵangular_packages_core_core_n, endTimeRange as ɵangular_packages_core_core_r, leave as ɵangular_packages_core_core_p, startTimeRange as ɵangular_packages_core_core_q, getOrCreateChangeDetectorRef as ɵangular_packages_core_core_v, getOrCreateContainerRef as ɵangular_packages_core_core_x, getOrCreateInjectable as ɵangular_packages_core_core_w, getOrCreateNodeInjector as ɵangular_packages_core_core_u, getOrCreateTemplateRef as ɵangular_packages_core_core_y, bindingUpdated as ɵangular_packages_core_core_bb, bindingUpdated2 as ɵangular_packages_core_core_bd, bindingUpdated4 as ɵangular_packages_core_core_be, checkAndUpdateBinding$1 as ɵangular_packages_core_core_bc, consumeBinding as ɵangular_packages_core_core_ba, getCreationMode as ɵangular_packages_core_core_z, makeParamDecorator as ɵangular_packages_core_core_a, makePropDecorator as ɵangular_packages_core_core_b, _def as ɵangular_packages_core_core_s, DebugContext as ɵangular_packages_core_core_t, createPlatform, assertPlatform, destroyPlatform, getPlatform, PlatformRef, ApplicationRef, enableProdMode, isDevMode, createPlatformFactory, NgProbeToken, APP_ID, PACKAGE_ROOT_URL, PLATFORM_INITIALIZER, PLATFORM_ID, APP_BOOTSTRAP_LISTENER, APP_INITIALIZER, ApplicationInitStatus, DebugElement, DebugNode, asNativeElements, getDebugNode, Testability, TestabilityRegistry, setTestabilityGetter, TRANSLATIONS, TRANSLATIONS_FORMAT, LOCALE_ID, MissingTranslationStrategy, ApplicationModule, wtfCreateScope, wtfLeave, wtfStartTimeRange, wtfEndTimeRange, Type, EventEmitter, ErrorHandler, Sanitizer, SecurityContext, ANALYZE_FOR_ENTRY_COMPONENTS, Attribute, ContentChild, ContentChildren, Query, ViewChild, ViewChildren, Component, Directive, HostBinding, HostListener, Input, Output, Pipe, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA, NgModule, ViewEncapsulation, Version, VERSION, defineInjectable, defineInjector, forwardRef, resolveForwardRef, Injectable, inject, INJECTOR, Injector, ReflectiveInjector, createInjector, ResolvedReflectiveFactory, ReflectiveKey, InjectionToken, Inject, Optional, Self, SkipSelf, Host, NgZone, RenderComponentType, Renderer, Renderer2, RendererFactory2, RendererStyleFlags2, RootRenderer, COMPILER_OPTIONS, Compiler, CompilerFactory, ModuleWithComponentFactories, ComponentFactory, ComponentRef, ComponentFactoryResolver, ElementRef, NgModuleFactory, NgModuleRef, NgModuleFactoryLoader, getModuleFactory, QueryList, SystemJsNgModuleLoader, SystemJsNgModuleLoaderConfig, TemplateRef, ViewContainerRef, EmbeddedViewRef, 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, devModeEqual as ɵdevModeEqual, isListLikeIterable as ɵisListLikeIterable, ChangeDetectorStatus as ɵChangeDetectorStatus, isDefaultChangeDetectionStrategy as ɵisDefaultChangeDetectionStrategy, Console as ɵConsole, inject as ɵinject, setCurrentInjector as ɵsetCurrentInjector, APP_ROOT as ɵAPP_ROOT, ComponentFactory as ɵComponentFactory, CodegenComponentFactoryResolver as ɵCodegenComponentFactoryResolver, 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, overrideComponentView as ɵoverrideComponentView, overrideProvider as ɵoverrideProvider, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, defineComponent as ɵdefineComponent, defineDirective as ɵdefineDirective, definePipe as ɵdefinePipe, detectChanges as ɵdetectChanges, renderComponent as ɵrenderComponent, directiveInject as ɵdirectiveInject, injectTemplateRef as ɵinjectTemplateRef, injectViewContainerRef as ɵinjectViewContainerRef, injectChangeDetectorRef as ɵinjectChangeDetectorRef, injectAttribute as ɵinjectAttribute, PublicFeature as ɵPublicFeature, NgOnChangesFeature as ɵNgOnChangesFeature, markDirty as ɵmarkDirty, NO_CHANGE as ɵNC, container as ɵC, elementStart as ɵE, listener as ɵL, text as ɵT, embeddedViewStart as ɵV, query as ɵQ, loadDirective as ɵd, projection as ɵP, bind as ɵb, interpolation1 as ɵi1, interpolation2 as ɵi2, interpolation3 as ɵi3, interpolation4 as ɵi4, interpolation5 as ɵi5, interpolation6 as ɵi6, interpolation7 as ɵi7, interpolation8 as ɵi8, interpolationV as ɵiV, pipeBind1 as ɵpb1, pipeBind2 as ɵpb2, pipeBind3 as ɵpb3, pipeBind4 as ɵpb4, pipeBindV as ɵpbV, pureFunction0 as ɵf0, pureFunction1 as ɵf1, pureFunction2 as ɵf2, pureFunction3 as ɵf3, pureFunction4 as ɵf4, pureFunction5 as ɵf5, pureFunction6 as ɵf6, pureFunction7 as ɵf7, pureFunction8 as ɵf8, pureFunctionV as ɵfV, containerRefreshStart as ɵcR, containerRefreshEnd as ɵcr, queryRefresh as ɵqR, elementEnd as ɵe, elementProperty as ɵp, projectionDef as ɵpD, elementAttribute as ɵa, elementStyle as ɵs, elementStyleNamed as ɵsn, elementClass as ɵk, elementClassNamed as ɵkn, textBinding as ɵt, embeddedViewEnd as ɵv, store as ɵst, load as ɵld, pipe as ɵPp, whenRendered as ɵwhenRendered, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, sanitizeHtml as ɵsanitizeHtml, sanitizeStyle as ɵsanitizeStyle, sanitizeUrl as ɵsanitizeUrl, sanitizeResourceUrl as ɵsanitizeResourceUrl, registerModuleFactory as ɵregisterModuleFactory, EMPTY_ARRAY$2 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, elementEventFullName as ɵelementEventFullName, 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 };
20994
21090
  //# sourceMappingURL=core.js.map