@angular/core 14.2.0 → 14.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/src/render3/component_ref.mjs +15 -17
- package/esm2020/src/render3/di.mjs +3 -3
- package/esm2020/src/render3/i18n/i18n_parse.mjs +3 -6
- package/esm2020/src/render3/instructions/element_validation.mjs +2 -2
- package/esm2020/src/render3/instructions/shared.mjs +16 -69
- package/esm2020/src/render3/interfaces/injector.mjs +1 -1
- package/esm2020/src/render3/interfaces/view.mjs +1 -1
- package/esm2020/src/render3/util/discovery_utils.mjs +2 -2
- package/esm2020/src/render3/util/view_traversal_utils.mjs +5 -5
- package/esm2020/src/render3/view_ref.mjs +10 -4
- package/esm2020/src/sanitization/html_sanitizer.mjs +4 -8
- package/esm2020/src/sanitization/url_sanitizer.mjs +1 -5
- package/esm2020/src/testability/testability.mjs +1 -1
- package/esm2020/src/version.mjs +1 -1
- package/esm2020/testing/src/logger.mjs +3 -3
- package/esm2020/testing/src/ng_zone_mock.mjs +3 -3
- package/fesm2015/core.mjs +43 -103
- package/fesm2015/core.mjs.map +1 -1
- package/fesm2015/testing.mjs +43 -103
- package/fesm2015/testing.mjs.map +1 -1
- package/fesm2020/core.mjs +43 -103
- package/fesm2020/core.mjs.map +1 -1
- package/fesm2020/testing.mjs +43 -103
- package/fesm2020/testing.mjs.map +1 -1
- package/index.d.ts +4 -4
- package/package.json +1 -1
- package/schematics/utils/ng_component_template.js +7 -3
- package/testing/index.d.ts +1 -1
package/fesm2015/testing.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v14.2.
|
|
2
|
+
* @license Angular v14.2.2
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -4892,7 +4892,7 @@ function injectAttributeImpl(tNode, attrNameToInject) {
|
|
|
4892
4892
|
return null;
|
|
4893
4893
|
}
|
|
4894
4894
|
function notFoundValueOrThrow(notFoundValue, token, flags) {
|
|
4895
|
-
if (flags & InjectFlags.Optional) {
|
|
4895
|
+
if ((flags & InjectFlags.Optional) || notFoundValue !== undefined) {
|
|
4896
4896
|
return notFoundValue;
|
|
4897
4897
|
}
|
|
4898
4898
|
else {
|
|
@@ -4909,7 +4909,7 @@ function notFoundValueOrThrow(notFoundValue, token, flags) {
|
|
|
4909
4909
|
* @returns the value from the injector or throws an exception
|
|
4910
4910
|
*/
|
|
4911
4911
|
function lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {
|
|
4912
|
-
if (flags & InjectFlags.Optional && notFoundValue === undefined) {
|
|
4912
|
+
if ((flags & InjectFlags.Optional) && notFoundValue === undefined) {
|
|
4913
4913
|
// This must be set or the NullInjector will throw for optional deps
|
|
4914
4914
|
notFoundValue = null;
|
|
4915
4915
|
}
|
|
@@ -6101,10 +6101,6 @@ function _sanitizeUrl(url) {
|
|
|
6101
6101
|
}
|
|
6102
6102
|
return 'unsafe:' + url;
|
|
6103
6103
|
}
|
|
6104
|
-
function sanitizeSrcset(srcset) {
|
|
6105
|
-
srcset = String(srcset);
|
|
6106
|
-
return srcset.split(',').map((srcset) => _sanitizeUrl(srcset.trim())).join(', ');
|
|
6107
|
-
}
|
|
6108
6104
|
|
|
6109
6105
|
/**
|
|
6110
6106
|
* @license
|
|
@@ -6151,12 +6147,10 @@ const INLINE_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, tagSet('a,abbr,a
|
|
|
6151
6147
|
const VALID_ELEMENTS = merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);
|
|
6152
6148
|
// Attributes that have href and hence need to be sanitized
|
|
6153
6149
|
const URI_ATTRS = tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href');
|
|
6154
|
-
// Attributes that have special href set hence need to be sanitized
|
|
6155
|
-
const SRCSET_ATTRS = tagSet('srcset');
|
|
6156
6150
|
const HTML_ATTRS = tagSet('abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,' +
|
|
6157
6151
|
'compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,' +
|
|
6158
6152
|
'ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,' +
|
|
6159
|
-
'scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,' +
|
|
6153
|
+
'scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,' +
|
|
6160
6154
|
'valign,value,vspace,width');
|
|
6161
6155
|
// Accessibility attributes as per WAI-ARIA 1.1 (W3C Working Draft 14 December 2018)
|
|
6162
6156
|
const ARIA_ATTRS = tagSet('aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,' +
|
|
@@ -6172,7 +6166,7 @@ const ARIA_ATTRS = tagSet('aria-activedescendant,aria-atomic,aria-autocomplete,a
|
|
|
6172
6166
|
// NB: Sanitization does not allow <form> elements or other active elements (<button> etc). Those
|
|
6173
6167
|
// can be sanitized, but they increase security surface area without a legitimate use case, so they
|
|
6174
6168
|
// are left out here.
|
|
6175
|
-
const VALID_ATTRS = merge(URI_ATTRS,
|
|
6169
|
+
const VALID_ATTRS = merge(URI_ATTRS, HTML_ATTRS, ARIA_ATTRS);
|
|
6176
6170
|
// Elements whose content should not be traversed/preserved, if the elements themselves are invalid.
|
|
6177
6171
|
//
|
|
6178
6172
|
// Typically, `<invalid>Some content</invalid>` would traverse (and in this case preserve)
|
|
@@ -6255,8 +6249,6 @@ class SanitizingHtmlSerializer {
|
|
|
6255
6249
|
// TODO(martinprobst): Special case image URIs for data:image/...
|
|
6256
6250
|
if (URI_ATTRS[lower])
|
|
6257
6251
|
value = _sanitizeUrl(value);
|
|
6258
|
-
if (SRCSET_ATTRS[lower])
|
|
6259
|
-
value = sanitizeSrcset(value);
|
|
6260
6252
|
this.buf.push(' ', attrName, '="', encodeEntities(value), '"');
|
|
6261
6253
|
}
|
|
6262
6254
|
this.buf.push('>');
|
|
@@ -7643,7 +7635,7 @@ class Version {
|
|
|
7643
7635
|
/**
|
|
7644
7636
|
* @publicApi
|
|
7645
7637
|
*/
|
|
7646
|
-
const VERSION = new Version('14.2.
|
|
7638
|
+
const VERSION = new Version('14.2.2');
|
|
7647
7639
|
|
|
7648
7640
|
/**
|
|
7649
7641
|
* @license
|
|
@@ -7947,7 +7939,7 @@ function getTemplateLocationDetails(lView) {
|
|
|
7947
7939
|
* that the `CommonModule` should also be included.
|
|
7948
7940
|
*/
|
|
7949
7941
|
const KNOWN_CONTROL_FLOW_DIRECTIVES = new Map([
|
|
7950
|
-
['ngIf', 'NgIf'], ['ngFor', '
|
|
7942
|
+
['ngIf', 'NgIf'], ['ngFor', 'NgFor'], ['ngSwitchCase', 'NgSwitchCase'],
|
|
7951
7943
|
['ngSwitchDefault', 'NgSwitchDefault']
|
|
7952
7944
|
]);
|
|
7953
7945
|
/**
|
|
@@ -8696,16 +8688,16 @@ function getRootView(componentOrLView) {
|
|
|
8696
8688
|
return lView;
|
|
8697
8689
|
}
|
|
8698
8690
|
/**
|
|
8699
|
-
* Returns the
|
|
8700
|
-
*
|
|
8701
|
-
*
|
|
8691
|
+
* Returns the context information associated with the application where the target is situated. It
|
|
8692
|
+
* does this by walking the parent views until it gets to the root view, then getting the context
|
|
8693
|
+
* off of that.
|
|
8702
8694
|
*
|
|
8703
8695
|
* @param viewOrComponent the `LView` or component to get the root context for.
|
|
8704
8696
|
*/
|
|
8705
8697
|
function getRootContext(viewOrComponent) {
|
|
8706
8698
|
const rootView = getRootView(viewOrComponent);
|
|
8707
8699
|
ngDevMode &&
|
|
8708
|
-
assertDefined(rootView[CONTEXT], '
|
|
8700
|
+
assertDefined(rootView[CONTEXT], 'Root view has no context. Perhaps it is disconnected?');
|
|
8709
8701
|
return rootView[CONTEXT];
|
|
8710
8702
|
}
|
|
8711
8703
|
/**
|
|
@@ -12410,28 +12402,6 @@ function refreshView(tView, lView, templateFn, context) {
|
|
|
12410
12402
|
leaveView();
|
|
12411
12403
|
}
|
|
12412
12404
|
}
|
|
12413
|
-
function renderComponentOrTemplate(tView, lView, templateFn, context) {
|
|
12414
|
-
const rendererFactory = lView[RENDERER_FACTORY];
|
|
12415
|
-
// Check no changes mode is a dev only mode used to verify that bindings have not changed
|
|
12416
|
-
// since they were assigned. We do not want to invoke renderer factory functions in that mode
|
|
12417
|
-
// to avoid any possible side-effects.
|
|
12418
|
-
const checkNoChangesMode = !!ngDevMode && isInCheckNoChangesMode();
|
|
12419
|
-
const creationModeIsActive = isCreationMode(lView);
|
|
12420
|
-
try {
|
|
12421
|
-
if (!checkNoChangesMode && !creationModeIsActive && rendererFactory.begin) {
|
|
12422
|
-
rendererFactory.begin();
|
|
12423
|
-
}
|
|
12424
|
-
if (creationModeIsActive) {
|
|
12425
|
-
renderView(tView, lView, context);
|
|
12426
|
-
}
|
|
12427
|
-
refreshView(tView, lView, templateFn, context);
|
|
12428
|
-
}
|
|
12429
|
-
finally {
|
|
12430
|
-
if (!checkNoChangesMode && !creationModeIsActive && rendererFactory.end) {
|
|
12431
|
-
rendererFactory.end();
|
|
12432
|
-
}
|
|
12433
|
-
}
|
|
12434
|
-
}
|
|
12435
12405
|
function executeTemplate(tView, lView, templateFn, rf, context) {
|
|
12436
12406
|
const prevSelectedIndex = getSelectedIndex();
|
|
12437
12407
|
const isUpdatePhase = rf & 2 /* RenderFlags.Update */;
|
|
@@ -12502,7 +12472,7 @@ function saveResolvedLocalsInData(viewData, tNode, localRefExtractor = getNative
|
|
|
12502
12472
|
* @param def ComponentDef
|
|
12503
12473
|
* @returns TView
|
|
12504
12474
|
*/
|
|
12505
|
-
function
|
|
12475
|
+
function getOrCreateComponentTView(def) {
|
|
12506
12476
|
const tView = def.tView;
|
|
12507
12477
|
// Create a TView if there isn't one, or recreate it if the first create pass didn't
|
|
12508
12478
|
// complete successfully since we can't know for sure whether it's in a usable shape.
|
|
@@ -13211,7 +13181,7 @@ function configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {
|
|
|
13211
13181
|
}
|
|
13212
13182
|
function addComponentLogic(lView, hostTNode, def) {
|
|
13213
13183
|
const native = getNativeByTNode(hostTNode, lView);
|
|
13214
|
-
const tView =
|
|
13184
|
+
const tView = getOrCreateComponentTView(def);
|
|
13215
13185
|
// Only component views should be added to the view tree directly. Embedded views are
|
|
13216
13186
|
// accessed through their containers because they may be removed / re-added later.
|
|
13217
13187
|
const rendererFactory = lView[RENDERER_FACTORY];
|
|
@@ -13538,63 +13508,32 @@ function markViewDirty(lView) {
|
|
|
13538
13508
|
}
|
|
13539
13509
|
return null;
|
|
13540
13510
|
}
|
|
13541
|
-
function
|
|
13542
|
-
for (let i = 0; i < rootContext.components.length; i++) {
|
|
13543
|
-
const rootComponent = rootContext.components[i];
|
|
13544
|
-
const lView = readPatchedLView(rootComponent);
|
|
13545
|
-
// We might not have an `LView` if the component was destroyed.
|
|
13546
|
-
if (lView !== null) {
|
|
13547
|
-
const tView = lView[TVIEW];
|
|
13548
|
-
renderComponentOrTemplate(tView, lView, tView.template, rootComponent);
|
|
13549
|
-
}
|
|
13550
|
-
}
|
|
13551
|
-
}
|
|
13552
|
-
function detectChangesInternal(tView, lView, context) {
|
|
13511
|
+
function detectChangesInternal(tView, lView, context, notifyErrorHandler = true) {
|
|
13553
13512
|
const rendererFactory = lView[RENDERER_FACTORY];
|
|
13554
|
-
|
|
13513
|
+
// Check no changes mode is a dev only mode used to verify that bindings have not changed
|
|
13514
|
+
// since they were assigned. We do not want to invoke renderer factory functions in that mode
|
|
13515
|
+
// to avoid any possible side-effects.
|
|
13516
|
+
const checkNoChangesMode = !!ngDevMode && isInCheckNoChangesMode();
|
|
13517
|
+
if (!checkNoChangesMode && rendererFactory.begin)
|
|
13555
13518
|
rendererFactory.begin();
|
|
13556
13519
|
try {
|
|
13557
13520
|
refreshView(tView, lView, tView.template, context);
|
|
13558
13521
|
}
|
|
13559
13522
|
catch (error) {
|
|
13560
|
-
|
|
13523
|
+
if (notifyErrorHandler) {
|
|
13524
|
+
handleError(lView, error);
|
|
13525
|
+
}
|
|
13561
13526
|
throw error;
|
|
13562
13527
|
}
|
|
13563
13528
|
finally {
|
|
13564
|
-
if (rendererFactory.end)
|
|
13529
|
+
if (!checkNoChangesMode && rendererFactory.end)
|
|
13565
13530
|
rendererFactory.end();
|
|
13566
13531
|
}
|
|
13567
13532
|
}
|
|
13568
|
-
|
|
13569
|
-
* Synchronously perform change detection on a root view and its components.
|
|
13570
|
-
*
|
|
13571
|
-
* @param lView The view which the change detection should be performed on.
|
|
13572
|
-
*/
|
|
13573
|
-
function detectChangesInRootView(lView) {
|
|
13574
|
-
tickRootContext(lView[CONTEXT]);
|
|
13575
|
-
}
|
|
13576
|
-
function checkNoChangesInternal(tView, view, context) {
|
|
13577
|
-
setIsInCheckNoChangesMode(true);
|
|
13578
|
-
try {
|
|
13579
|
-
detectChangesInternal(tView, view, context);
|
|
13580
|
-
}
|
|
13581
|
-
finally {
|
|
13582
|
-
setIsInCheckNoChangesMode(false);
|
|
13583
|
-
}
|
|
13584
|
-
}
|
|
13585
|
-
/**
|
|
13586
|
-
* Checks the change detector on a root view and its components, and throws if any changes are
|
|
13587
|
-
* detected.
|
|
13588
|
-
*
|
|
13589
|
-
* This is used in development mode to verify that running change detection doesn't
|
|
13590
|
-
* introduce other changes.
|
|
13591
|
-
*
|
|
13592
|
-
* @param lView The view which the change detection should be checked on.
|
|
13593
|
-
*/
|
|
13594
|
-
function checkNoChangesInRootView(lView) {
|
|
13533
|
+
function checkNoChangesInternal(tView, lView, context, notifyErrorHandler = true) {
|
|
13595
13534
|
setIsInCheckNoChangesMode(true);
|
|
13596
13535
|
try {
|
|
13597
|
-
|
|
13536
|
+
detectChangesInternal(tView, lView, context, notifyErrorHandler);
|
|
13598
13537
|
}
|
|
13599
13538
|
finally {
|
|
13600
13539
|
setIsInCheckNoChangesMode(false);
|
|
@@ -14087,11 +14026,17 @@ class RootViewRef extends ViewRef {
|
|
|
14087
14026
|
this._view = _view;
|
|
14088
14027
|
}
|
|
14089
14028
|
detectChanges() {
|
|
14090
|
-
|
|
14029
|
+
const lView = this._view;
|
|
14030
|
+
const tView = lView[TVIEW];
|
|
14031
|
+
const context = lView[CONTEXT];
|
|
14032
|
+
detectChangesInternal(tView, lView, context, false);
|
|
14091
14033
|
}
|
|
14092
14034
|
checkNoChanges() {
|
|
14093
14035
|
if (ngDevMode) {
|
|
14094
|
-
|
|
14036
|
+
const lView = this._view;
|
|
14037
|
+
const tView = lView[TVIEW];
|
|
14038
|
+
const context = lView[CONTEXT];
|
|
14039
|
+
checkNoChangesInternal(tView, lView, context, false);
|
|
14095
14040
|
}
|
|
14096
14041
|
}
|
|
14097
14042
|
get context() {
|
|
@@ -14158,7 +14103,7 @@ class ChainedInjector {
|
|
|
14158
14103
|
}
|
|
14159
14104
|
}
|
|
14160
14105
|
/**
|
|
14161
|
-
*
|
|
14106
|
+
* ComponentFactory interface implementation.
|
|
14162
14107
|
*/
|
|
14163
14108
|
class ComponentFactory extends ComponentFactory$1 {
|
|
14164
14109
|
/**
|
|
@@ -14208,10 +14153,9 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
14208
14153
|
createElementNode(rendererFactory.createRenderer(null, this.componentDef), elementName, getNamespace(elementName));
|
|
14209
14154
|
const rootFlags = this.componentDef.onPush ? 32 /* LViewFlags.Dirty */ | 256 /* LViewFlags.IsRoot */ :
|
|
14210
14155
|
16 /* LViewFlags.CheckAlways */ | 256 /* LViewFlags.IsRoot */;
|
|
14211
|
-
const rootContext = createRootContext();
|
|
14212
14156
|
// Create the root view. Uses empty TView and ContentTemplate.
|
|
14213
14157
|
const rootTView = createTView(0 /* TViewType.Root */, null, null, 1, 0, null, null, null, null, null);
|
|
14214
|
-
const rootLView = createLView(null, rootTView,
|
|
14158
|
+
const rootLView = createLView(null, rootTView, null, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector, null);
|
|
14215
14159
|
// rootView is the parent when bootstrapping
|
|
14216
14160
|
// TODO(misko): it looks like we are entering view here but we don't really need to as
|
|
14217
14161
|
// `renderView` does that. However as the code is written it is needed because
|
|
@@ -14255,7 +14199,8 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
14255
14199
|
// TODO: should LifecycleHooksFeature and other host features be generated by the compiler and
|
|
14256
14200
|
// executed here?
|
|
14257
14201
|
// Angular 5 reference: https://stackblitz.com/edit/lifecycle-hooks-vcref
|
|
14258
|
-
component =
|
|
14202
|
+
component =
|
|
14203
|
+
createRootComponent(componentView, this.componentDef, rootLView, [LifecycleHooksFeature]);
|
|
14259
14204
|
renderView(rootTView, rootLView, null);
|
|
14260
14205
|
}
|
|
14261
14206
|
finally {
|
|
@@ -14361,7 +14306,7 @@ function createRootComponentView(rNode, def, rootView, rendererFactory, hostRend
|
|
|
14361
14306
|
}
|
|
14362
14307
|
}
|
|
14363
14308
|
const viewRenderer = rendererFactory.createRenderer(rNode, def);
|
|
14364
|
-
const componentView = createLView(rootView,
|
|
14309
|
+
const componentView = createLView(rootView, getOrCreateComponentTView(def), null, def.onPush ? 32 /* LViewFlags.Dirty */ : 16 /* LViewFlags.CheckAlways */, rootView[index], tNode, rendererFactory, viewRenderer, sanitizer || null, null, null);
|
|
14365
14310
|
if (tView.firstCreatePass) {
|
|
14366
14311
|
diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, rootView), tView, def.type);
|
|
14367
14312
|
markAsComponentHost(tView, tNode);
|
|
@@ -14375,12 +14320,13 @@ function createRootComponentView(rNode, def, rootView, rendererFactory, hostRend
|
|
|
14375
14320
|
* Creates a root component and sets it up with features and host bindings.Shared by
|
|
14376
14321
|
* renderComponent() and ViewContainerRef.createComponent().
|
|
14377
14322
|
*/
|
|
14378
|
-
function createRootComponent(componentView, componentDef, rootLView,
|
|
14323
|
+
function createRootComponent(componentView, componentDef, rootLView, hostFeatures) {
|
|
14379
14324
|
const tView = rootLView[TVIEW];
|
|
14380
14325
|
// Create directive instance with factory() and store at next index in viewData
|
|
14381
14326
|
const component = instantiateRootComponent(tView, rootLView, componentDef);
|
|
14382
|
-
|
|
14383
|
-
|
|
14327
|
+
// Root view only contains an instance of this component,
|
|
14328
|
+
// so we use a reference to that component instance as a context.
|
|
14329
|
+
componentView[CONTEXT] = rootLView[CONTEXT] = component;
|
|
14384
14330
|
if (hostFeatures !== null) {
|
|
14385
14331
|
for (const feature of hostFeatures) {
|
|
14386
14332
|
feature(component, componentDef);
|
|
@@ -14404,9 +14350,6 @@ function createRootComponent(componentView, componentDef, rootLView, rootContext
|
|
|
14404
14350
|
}
|
|
14405
14351
|
return component;
|
|
14406
14352
|
}
|
|
14407
|
-
function createRootContext() {
|
|
14408
|
-
return { components: [] };
|
|
14409
|
-
}
|
|
14410
14353
|
/**
|
|
14411
14354
|
* Used to enable lifecycle hooks on the root component.
|
|
14412
14355
|
*
|
|
@@ -21251,9 +21194,6 @@ function walkIcuTree(tView, tIcu, lView, sharedUpdateOpCodes, create, remove, up
|
|
|
21251
21194
|
if (URI_ATTRS[lowerAttrName]) {
|
|
21252
21195
|
generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, _sanitizeUrl);
|
|
21253
21196
|
}
|
|
21254
|
-
else if (SRCSET_ATTRS[lowerAttrName]) {
|
|
21255
|
-
generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, sanitizeSrcset);
|
|
21256
|
-
}
|
|
21257
21197
|
else {
|
|
21258
21198
|
generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, null);
|
|
21259
21199
|
}
|
|
@@ -22222,7 +22162,7 @@ function getOwningComponent(elementOrDir) {
|
|
|
22222
22162
|
*/
|
|
22223
22163
|
function getRootComponents(elementOrDir) {
|
|
22224
22164
|
const lView = readPatchedLView(elementOrDir);
|
|
22225
|
-
return lView !== null ? [
|
|
22165
|
+
return lView !== null ? [getRootContext(lView)] : [];
|
|
22226
22166
|
}
|
|
22227
22167
|
/**
|
|
22228
22168
|
* Retrieves an `Injector` associated with an element, component or directive instance.
|