@angular/core 13.3.0 → 14.0.0-next.10
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/core.d.ts +116 -42
- package/esm2020/src/application_tokens.mjs +10 -1
- package/esm2020/src/change_detection/change_detection.mjs +2 -3
- package/esm2020/src/compiler/compiler_facade_interface.mjs +1 -1
- package/esm2020/src/core.mjs +2 -2
- package/esm2020/src/core_private_export.mjs +2 -1
- package/esm2020/src/core_render3_private_export.mjs +4 -3
- package/esm2020/src/debug/debug_node.mjs +11 -10
- package/esm2020/src/di/injector_compatibility.mjs +2 -2
- package/esm2020/src/di/reflective_provider.mjs +4 -4
- package/esm2020/src/linker/ng_module_factory_loader.mjs +2 -2
- package/esm2020/src/linker/ng_module_registration.mjs +55 -0
- package/esm2020/src/linker/template_ref.mjs +3 -3
- package/esm2020/src/linker/view_container_ref.mjs +12 -3
- package/esm2020/src/reflection/platform_reflection_capabilities.mjs +1 -1
- package/esm2020/src/reflection/reflection_capabilities.mjs +1 -37
- package/esm2020/src/render3/component.mjs +3 -3
- package/esm2020/src/render3/component_ref.mjs +24 -18
- package/esm2020/src/render3/context_discovery.mjs +34 -30
- package/esm2020/src/render3/definition.mjs +3 -1
- package/esm2020/src/render3/di.mjs +177 -97
- package/esm2020/src/render3/hooks.mjs +3 -3
- package/esm2020/src/render3/i18n/i18n_parse.mjs +3 -3
- package/esm2020/src/render3/index.mjs +2 -2
- package/esm2020/src/render3/instructions/lview_debug.mjs +7 -4
- package/esm2020/src/render3/instructions/shared.mjs +16 -7
- package/esm2020/src/render3/interfaces/context.mjs +35 -2
- package/esm2020/src/render3/interfaces/definition.mjs +1 -1
- package/esm2020/src/render3/interfaces/injector.mjs +1 -1
- package/esm2020/src/render3/interfaces/lview_tracking.mjs +33 -0
- package/esm2020/src/render3/interfaces/renderer_dom.mjs +1 -1
- package/esm2020/src/render3/interfaces/view.mjs +4 -2
- package/esm2020/src/render3/jit/directive.mjs +5 -2
- package/esm2020/src/render3/jit/environment.mjs +4 -1
- package/esm2020/src/render3/jit/module.mjs +7 -1
- package/esm2020/src/render3/jit/module_patch.mjs +11 -0
- package/esm2020/src/render3/jit/pipe.mjs +5 -2
- package/esm2020/src/render3/ng_module_ref.mjs +1 -29
- package/esm2020/src/render3/node_manipulation.mjs +12 -3
- package/esm2020/src/render3/state.mjs +16 -2
- package/esm2020/src/render3/styling/styling_parser.mjs +2 -2
- package/esm2020/src/render3/util/discovery_utils.mjs +33 -22
- package/esm2020/src/util/coercion.mjs +12 -0
- 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/esm2020/testing/src/r3_test_bed.mjs +8 -2
- package/fesm2015/core.mjs +516 -389
- package/fesm2015/core.mjs.map +1 -1
- package/fesm2015/testing.mjs +8 -2
- package/fesm2015/testing.mjs.map +1 -1
- package/fesm2020/core.mjs +516 -389
- package/fesm2020/core.mjs.map +1 -1
- package/fesm2020/testing.mjs +8 -2
- package/fesm2020/testing.mjs.map +1 -1
- package/package.json +2 -2
- package/schematics/migrations/entry-components/util.js +2 -2
- package/schematics/migrations/typed-forms/index.d.ts +1 -5
- package/schematics/migrations/typed-forms/index.js +12 -34
- package/schematics/migrations/typed-forms/util.d.ts +8 -10
- package/schematics/migrations/typed-forms/util.js +99 -52
- package/schematics/migrations.json +6 -16
- package/schematics/utils/import_manager.js +11 -22
- package/schematics/utils/typescript/imports.js +5 -9
- package/testing/testing.d.ts +1 -1
- package/esm2020/src/di/util.mjs +0 -51
- package/esm2020/src/linker/ng_module_factory_registration.mjs +0 -59
- package/esm2020/src/reflection/reflection.mjs +0 -16
- package/esm2020/src/reflection/reflector.mjs +0 -56
- package/esm2020/src/reflection/types.mjs +0 -9
- package/schematics/migrations/router-link-empty-expression/analyze_template.d.ts +0 -11
- package/schematics/migrations/router-link-empty-expression/analyze_template.js +0 -34
- package/schematics/migrations/router-link-empty-expression/angular/html_routerlink_empty_expr_visitor.d.ts +0 -20
- package/schematics/migrations/router-link-empty-expression/angular/html_routerlink_empty_expr_visitor.js +0 -47
- package/schematics/migrations/router-link-empty-expression/index.d.ts +0 -11
- package/schematics/migrations/router-link-empty-expression/index.js +0 -170
- package/schematics/migrations/testbed-teardown/index.d.ts +0 -11
- package/schematics/migrations/testbed-teardown/index.js +0 -92
- package/schematics/migrations/testbed-teardown/util.d.ts +0 -35
- package/schematics/migrations/testbed-teardown/util.js +0 -188
package/fesm2020/core.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular
|
|
2
|
+
* @license Angular v14.0.0-next.10
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -905,6 +905,7 @@ function ɵɵdefineComponent(componentDefinition) {
|
|
|
905
905
|
onPush: componentDefinition.changeDetection === ChangeDetectionStrategy.OnPush,
|
|
906
906
|
directiveDefs: null,
|
|
907
907
|
pipeDefs: null,
|
|
908
|
+
standalone: componentDefinition.standalone === true,
|
|
908
909
|
selectors: componentDefinition.selectors || EMPTY_ARRAY,
|
|
909
910
|
viewQuery: componentDefinition.viewQuery || null,
|
|
910
911
|
features: componentDefinition.features || null,
|
|
@@ -1116,6 +1117,7 @@ function ɵɵdefinePipe(pipeDef) {
|
|
|
1116
1117
|
name: pipeDef.name,
|
|
1117
1118
|
factory: null,
|
|
1118
1119
|
pure: pipeDef.pure !== false,
|
|
1120
|
+
standalone: pipeDef.standalone === true,
|
|
1119
1121
|
onDestroy: pipeDef.type.prototype.ngOnDestroy || null
|
|
1120
1122
|
};
|
|
1121
1123
|
}
|
|
@@ -1172,6 +1174,8 @@ const DECLARATION_COMPONENT_VIEW = 16;
|
|
|
1172
1174
|
const DECLARATION_LCONTAINER = 17;
|
|
1173
1175
|
const PREORDER_HOOK_FLAGS = 18;
|
|
1174
1176
|
const QUERIES = 19;
|
|
1177
|
+
const ID = 20;
|
|
1178
|
+
const EMBEDDED_VIEW_INJECTOR = 21;
|
|
1175
1179
|
/**
|
|
1176
1180
|
* Size of LView's header. Necessary to adjust for it when setting slots.
|
|
1177
1181
|
*
|
|
@@ -1179,7 +1183,7 @@ const QUERIES = 19;
|
|
|
1179
1183
|
* instruction index into `LView` index. All other indexes should be in the `LView` index space and
|
|
1180
1184
|
* there should be no need to refer to `HEADER_OFFSET` anywhere else.
|
|
1181
1185
|
*/
|
|
1182
|
-
const HEADER_OFFSET =
|
|
1186
|
+
const HEADER_OFFSET = 22;
|
|
1183
1187
|
/**
|
|
1184
1188
|
* Converts `TViewType` into human readable text.
|
|
1185
1189
|
* Make sure this matches with `TViewType`
|
|
@@ -1928,6 +1932,7 @@ function getLView() {
|
|
|
1928
1932
|
function getTView() {
|
|
1929
1933
|
return instructionState.lFrame.tView;
|
|
1930
1934
|
}
|
|
1935
|
+
// TODO(crisbeto): revert the @noinline once Closure issue is resolved.
|
|
1931
1936
|
/**
|
|
1932
1937
|
* Restores `contextViewData` to the given OpaqueViewState instance.
|
|
1933
1938
|
*
|
|
@@ -1939,11 +1944,22 @@ function getTView() {
|
|
|
1939
1944
|
* @returns Context of the restored OpaqueViewState instance.
|
|
1940
1945
|
*
|
|
1941
1946
|
* @codeGenApi
|
|
1947
|
+
* @noinline Disable inlining due to issue with Closure in listeners inside embedded views.
|
|
1942
1948
|
*/
|
|
1943
1949
|
function ɵɵrestoreView(viewToRestore) {
|
|
1944
1950
|
instructionState.lFrame.contextLView = viewToRestore;
|
|
1945
1951
|
return viewToRestore[CONTEXT];
|
|
1946
1952
|
}
|
|
1953
|
+
/**
|
|
1954
|
+
* Clears the view set in `ɵɵrestoreView` from memory. Returns the passed in
|
|
1955
|
+
* value so that it can be used as a return value of an instruction.
|
|
1956
|
+
*
|
|
1957
|
+
* @codeGenApi
|
|
1958
|
+
*/
|
|
1959
|
+
function ɵɵresetView(value) {
|
|
1960
|
+
instructionState.lFrame.contextLView = null;
|
|
1961
|
+
return value;
|
|
1962
|
+
}
|
|
1947
1963
|
function getCurrentTNode() {
|
|
1948
1964
|
let currentTNode = getCurrentTNodePlaceholderOk();
|
|
1949
1965
|
while (currentTNode !== null && currentTNode.type === 64 /* Placeholder */) {
|
|
@@ -1975,7 +1991,9 @@ function setCurrentTNodeAsParent() {
|
|
|
1975
1991
|
instructionState.lFrame.isParent = true;
|
|
1976
1992
|
}
|
|
1977
1993
|
function getContextLView() {
|
|
1978
|
-
|
|
1994
|
+
const contextLView = instructionState.lFrame.contextLView;
|
|
1995
|
+
ngDevMode && assertDefined(contextLView, 'contextLView must be defined.');
|
|
1996
|
+
return contextLView;
|
|
1979
1997
|
}
|
|
1980
1998
|
function isInCheckNoChangesMode() {
|
|
1981
1999
|
// TODO(misko): remove this from the LView since it is ngDevMode=true mode only.
|
|
@@ -2474,7 +2492,7 @@ function incrementInitPhaseFlags(lView, initPhase) {
|
|
|
2474
2492
|
assertNotEqual(initPhase, 3 /* InitPhaseCompleted */, 'Init hooks phase should not be incremented after all init hooks have been run.');
|
|
2475
2493
|
let flags = lView[FLAGS];
|
|
2476
2494
|
if ((flags & 3 /* InitPhaseStateMask */) === initPhase) {
|
|
2477
|
-
flags &=
|
|
2495
|
+
flags &= 4095 /* IndexWithinInitPhaseReset */;
|
|
2478
2496
|
flags += 1 /* InitPhaseStateIncrementer */;
|
|
2479
2497
|
lView[FLAGS] = flags;
|
|
2480
2498
|
}
|
|
@@ -2538,12 +2556,12 @@ function callHook(currentView, initPhase, arr, i) {
|
|
|
2538
2556
|
const directiveIndex = isInitHook ? -arr[i] : arr[i];
|
|
2539
2557
|
const directive = currentView[directiveIndex];
|
|
2540
2558
|
if (isInitHook) {
|
|
2541
|
-
const indexWithintInitPhase = currentView[FLAGS] >>
|
|
2559
|
+
const indexWithintInitPhase = currentView[FLAGS] >> 12 /* IndexWithinInitPhaseShift */;
|
|
2542
2560
|
// The init phase state must be always checked here as it may have been recursively updated.
|
|
2543
2561
|
if (indexWithintInitPhase <
|
|
2544
2562
|
(currentView[PREORDER_HOOK_FLAGS] >> 16 /* NumberOfInitHooksCalledShift */) &&
|
|
2545
2563
|
(currentView[FLAGS] & 3 /* InitPhaseStateMask */) === initPhase) {
|
|
2546
|
-
currentView[FLAGS] +=
|
|
2564
|
+
currentView[FLAGS] += 4096 /* IndexWithinInitPhaseIncrementer */;
|
|
2547
2565
|
profiler(4 /* LifecycleHookStart */, directive, hook);
|
|
2548
2566
|
try {
|
|
2549
2567
|
hook.call(directive);
|
|
@@ -3104,6 +3122,8 @@ const BLOOM_MASK = BLOOM_SIZE - 1;
|
|
|
3104
3122
|
const BLOOM_BUCKET_BITS = 5;
|
|
3105
3123
|
/** Counter used to generate unique IDs for directives. */
|
|
3106
3124
|
let nextNgElementId = 0;
|
|
3125
|
+
/** Value used when something wasn't found by an injector. */
|
|
3126
|
+
const NOT_FOUND = {};
|
|
3107
3127
|
/**
|
|
3108
3128
|
* Registers this directive as present in its node's injector by flipping the directive's
|
|
3109
3129
|
* corresponding bit in the injector's bloom filter.
|
|
@@ -3215,23 +3235,7 @@ function getParentInjectorLocation(tNode, lView) {
|
|
|
3215
3235
|
// `LView` hierarchy and look for it. If we walk of the top, that means that there is no parent
|
|
3216
3236
|
// `NodeInjector`.
|
|
3217
3237
|
while (lViewCursor !== null) {
|
|
3218
|
-
|
|
3219
|
-
const tView = lViewCursor[TVIEW];
|
|
3220
|
-
const tViewType = tView.type;
|
|
3221
|
-
if (tViewType === 2 /* Embedded */) {
|
|
3222
|
-
ngDevMode &&
|
|
3223
|
-
assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');
|
|
3224
|
-
parentTNode = tView.declTNode;
|
|
3225
|
-
}
|
|
3226
|
-
else if (tViewType === 1 /* Component */) {
|
|
3227
|
-
// Components don't have `TView.declTNode` because each instance of component could be
|
|
3228
|
-
// inserted in different location, hence `TView.declTNode` is meaningless.
|
|
3229
|
-
parentTNode = lViewCursor[T_HOST];
|
|
3230
|
-
}
|
|
3231
|
-
else {
|
|
3232
|
-
ngDevMode && assertEqual(tView.type, 0 /* Root */, 'Root type expected');
|
|
3233
|
-
parentTNode = null;
|
|
3234
|
-
}
|
|
3238
|
+
parentTNode = getTNodeFromLView(lViewCursor);
|
|
3235
3239
|
if (parentTNode === null) {
|
|
3236
3240
|
// If we have no parent, than we are done.
|
|
3237
3241
|
return NO_PARENT_INJECTOR;
|
|
@@ -3392,93 +3396,116 @@ function lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {
|
|
|
3392
3396
|
*/
|
|
3393
3397
|
function getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default, notFoundValue) {
|
|
3394
3398
|
if (tNode !== null) {
|
|
3395
|
-
|
|
3396
|
-
//
|
|
3397
|
-
|
|
3398
|
-
|
|
3399
|
-
if (
|
|
3400
|
-
|
|
3401
|
-
// flag, the module injector is not searched for that token in Ivy.
|
|
3402
|
-
return (flags & InjectFlags.Host) ?
|
|
3403
|
-
notFoundValueOrThrow(notFoundValue, token, flags) :
|
|
3404
|
-
lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
|
|
3399
|
+
// If the view or any of its ancestors have an embedded
|
|
3400
|
+
// view injector, we have to look it up there first.
|
|
3401
|
+
if (lView[FLAGS] & 2048 /* HasEmbeddedViewInjector */) {
|
|
3402
|
+
const embeddedInjectorValue = lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, NOT_FOUND);
|
|
3403
|
+
if (embeddedInjectorValue !== NOT_FOUND) {
|
|
3404
|
+
return embeddedInjectorValue;
|
|
3405
3405
|
}
|
|
3406
|
-
|
|
3407
|
-
|
|
3408
|
-
|
|
3409
|
-
|
|
3410
|
-
|
|
3411
|
-
|
|
3412
|
-
|
|
3413
|
-
|
|
3406
|
+
}
|
|
3407
|
+
// Otherwise try the node injector.
|
|
3408
|
+
const value = lookupTokenUsingNodeInjector(tNode, lView, token, flags, NOT_FOUND);
|
|
3409
|
+
if (value !== NOT_FOUND) {
|
|
3410
|
+
return value;
|
|
3411
|
+
}
|
|
3412
|
+
}
|
|
3413
|
+
// Finally, fall back to the module injector.
|
|
3414
|
+
return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
|
|
3415
|
+
}
|
|
3416
|
+
/**
|
|
3417
|
+
* Returns the value associated to the given token from the node injector.
|
|
3418
|
+
*
|
|
3419
|
+
* @param tNode The Node where the search for the injector should start
|
|
3420
|
+
* @param lView The `LView` that contains the `tNode`
|
|
3421
|
+
* @param token The token to look for
|
|
3422
|
+
* @param flags Injection flags
|
|
3423
|
+
* @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
|
|
3424
|
+
* @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
|
|
3425
|
+
*/
|
|
3426
|
+
function lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue) {
|
|
3427
|
+
const bloomHash = bloomHashBitOrFactory(token);
|
|
3428
|
+
// If the ID stored here is a function, this is a special object like ElementRef or TemplateRef
|
|
3429
|
+
// so just call the factory function to create it.
|
|
3430
|
+
if (typeof bloomHash === 'function') {
|
|
3431
|
+
if (!enterDI(lView, tNode, flags)) {
|
|
3432
|
+
// Failed to enter DI, try module injector instead. If a token is injected with the @Host
|
|
3433
|
+
// flag, the module injector is not searched for that token in Ivy.
|
|
3434
|
+
return (flags & InjectFlags.Host) ?
|
|
3435
|
+
notFoundValueOrThrow(notFoundValue, token, flags) :
|
|
3436
|
+
lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
|
|
3437
|
+
}
|
|
3438
|
+
try {
|
|
3439
|
+
const value = bloomHash(flags);
|
|
3440
|
+
if (value == null && !(flags & InjectFlags.Optional)) {
|
|
3441
|
+
throwProviderNotFoundError(token);
|
|
3414
3442
|
}
|
|
3415
|
-
|
|
3416
|
-
|
|
3417
|
-
}
|
|
3418
|
-
}
|
|
3419
|
-
else if (typeof bloomHash === 'number') {
|
|
3420
|
-
// A reference to the previous injector TView that was found while climbing the element
|
|
3421
|
-
// injector tree. This is used to know if viewProviders can be accessed on the current
|
|
3422
|
-
// injector.
|
|
3423
|
-
let previousTView = null;
|
|
3424
|
-
let injectorIndex = getInjectorIndex(tNode, lView);
|
|
3425
|
-
let parentLocation = NO_PARENT_INJECTOR;
|
|
3426
|
-
let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
|
|
3427
|
-
// If we should skip this injector, or if there is no injector on this node, start by
|
|
3428
|
-
// searching the parent injector.
|
|
3429
|
-
if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
|
|
3430
|
-
parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) :
|
|
3431
|
-
lView[injectorIndex + 8 /* PARENT */];
|
|
3432
|
-
if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {
|
|
3433
|
-
injectorIndex = -1;
|
|
3434
|
-
}
|
|
3435
|
-
else {
|
|
3436
|
-
previousTView = lView[TVIEW];
|
|
3437
|
-
injectorIndex = getParentInjectorIndex(parentLocation);
|
|
3438
|
-
lView = getParentInjectorView(parentLocation, lView);
|
|
3439
|
-
}
|
|
3443
|
+
else {
|
|
3444
|
+
return value;
|
|
3440
3445
|
}
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
|
|
3445
|
-
|
|
3446
|
-
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3446
|
+
}
|
|
3447
|
+
finally {
|
|
3448
|
+
leaveDI();
|
|
3449
|
+
}
|
|
3450
|
+
}
|
|
3451
|
+
else if (typeof bloomHash === 'number') {
|
|
3452
|
+
// A reference to the previous injector TView that was found while climbing the element
|
|
3453
|
+
// injector tree. This is used to know if viewProviders can be accessed on the current
|
|
3454
|
+
// injector.
|
|
3455
|
+
let previousTView = null;
|
|
3456
|
+
let injectorIndex = getInjectorIndex(tNode, lView);
|
|
3457
|
+
let parentLocation = NO_PARENT_INJECTOR;
|
|
3458
|
+
let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
|
|
3459
|
+
// If we should skip this injector, or if there is no injector on this node, start by
|
|
3460
|
+
// searching the parent injector.
|
|
3461
|
+
if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
|
|
3462
|
+
parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) :
|
|
3463
|
+
lView[injectorIndex + 8 /* PARENT */];
|
|
3464
|
+
if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {
|
|
3465
|
+
injectorIndex = -1;
|
|
3466
|
+
}
|
|
3467
|
+
else {
|
|
3468
|
+
previousTView = lView[TVIEW];
|
|
3469
|
+
injectorIndex = getParentInjectorIndex(parentLocation);
|
|
3470
|
+
lView = getParentInjectorView(parentLocation, lView);
|
|
3471
|
+
}
|
|
3472
|
+
}
|
|
3473
|
+
// Traverse up the injector tree until we find a potential match or until we know there
|
|
3474
|
+
// *isn't* a match.
|
|
3475
|
+
while (injectorIndex !== -1) {
|
|
3476
|
+
ngDevMode && assertNodeInjector(lView, injectorIndex);
|
|
3477
|
+
// Check the current injector. If it matches, see if it contains token.
|
|
3478
|
+
const tView = lView[TVIEW];
|
|
3479
|
+
ngDevMode &&
|
|
3480
|
+
assertTNodeForLView(tView.data[injectorIndex + 8 /* TNODE */], lView);
|
|
3481
|
+
if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {
|
|
3482
|
+
// At this point, we have an injector which *may* contain the token, so we step through
|
|
3483
|
+
// the providers and directives associated with the injector's corresponding node to get
|
|
3484
|
+
// the instance.
|
|
3485
|
+
const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);
|
|
3486
|
+
if (instance !== NOT_FOUND) {
|
|
3487
|
+
return instance;
|
|
3473
3488
|
}
|
|
3474
3489
|
}
|
|
3490
|
+
parentLocation = lView[injectorIndex + 8 /* PARENT */];
|
|
3491
|
+
if (parentLocation !== NO_PARENT_INJECTOR &&
|
|
3492
|
+
shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8 /* TNODE */] === hostTElementNode) &&
|
|
3493
|
+
bloomHasToken(bloomHash, injectorIndex, lView)) {
|
|
3494
|
+
// The def wasn't found anywhere on this node, so it was a false positive.
|
|
3495
|
+
// Traverse up the tree and continue searching.
|
|
3496
|
+
previousTView = tView;
|
|
3497
|
+
injectorIndex = getParentInjectorIndex(parentLocation);
|
|
3498
|
+
lView = getParentInjectorView(parentLocation, lView);
|
|
3499
|
+
}
|
|
3500
|
+
else {
|
|
3501
|
+
// If we should not search parent OR If the ancestor bloom filter value does not have the
|
|
3502
|
+
// bit corresponding to the directive we can give up on traversing up to find the specific
|
|
3503
|
+
// injector.
|
|
3504
|
+
injectorIndex = -1;
|
|
3505
|
+
}
|
|
3475
3506
|
}
|
|
3476
3507
|
}
|
|
3477
|
-
return
|
|
3478
|
-
}
|
|
3479
|
-
const NOT_FOUND = {};
|
|
3480
|
-
function createNodeInjector() {
|
|
3481
|
-
return new NodeInjector(getCurrentTNode(), getLView());
|
|
3508
|
+
return notFoundValue;
|
|
3482
3509
|
}
|
|
3483
3510
|
function searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {
|
|
3484
3511
|
const currentTView = lView[TVIEW];
|
|
@@ -3652,6 +3679,10 @@ class NodeInjector {
|
|
|
3652
3679
|
return getOrCreateInjectable(this._tNode, this._lView, token, flags, notFoundValue);
|
|
3653
3680
|
}
|
|
3654
3681
|
}
|
|
3682
|
+
/** Creates a `NodeInjector` for the current node. */
|
|
3683
|
+
function createNodeInjector() {
|
|
3684
|
+
return new NodeInjector(getCurrentTNode(), getLView());
|
|
3685
|
+
}
|
|
3655
3686
|
/**
|
|
3656
3687
|
* @codeGenApi
|
|
3657
3688
|
*/
|
|
@@ -3690,6 +3721,73 @@ function getFactoryOf(type) {
|
|
|
3690
3721
|
}
|
|
3691
3722
|
return getFactoryDef(type);
|
|
3692
3723
|
}
|
|
3724
|
+
/**
|
|
3725
|
+
* Returns a value from the closest embedded or node injector.
|
|
3726
|
+
*
|
|
3727
|
+
* @param tNode The Node where the search for the injector should start
|
|
3728
|
+
* @param lView The `LView` that contains the `tNode`
|
|
3729
|
+
* @param token The token to look for
|
|
3730
|
+
* @param flags Injection flags
|
|
3731
|
+
* @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
|
|
3732
|
+
* @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
|
|
3733
|
+
*/
|
|
3734
|
+
function lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundValue) {
|
|
3735
|
+
let currentTNode = tNode;
|
|
3736
|
+
let currentLView = lView;
|
|
3737
|
+
// When an LView with an embedded view injector is inserted, it'll likely be interlaced with
|
|
3738
|
+
// nodes who may have injectors (e.g. node injector -> embedded view injector -> node injector).
|
|
3739
|
+
// Since the bloom filters for the node injectors have already been constructed and we don't
|
|
3740
|
+
// have a way of extracting the records from an injector, the only way to maintain the correct
|
|
3741
|
+
// hierarchy when resolving the value is to walk it node-by-node while attempting to resolve
|
|
3742
|
+
// the token at each level.
|
|
3743
|
+
while (currentTNode !== null && currentLView !== null &&
|
|
3744
|
+
(currentLView[FLAGS] & 2048 /* HasEmbeddedViewInjector */) &&
|
|
3745
|
+
!(currentLView[FLAGS] & 512 /* IsRoot */)) {
|
|
3746
|
+
ngDevMode && assertTNodeForLView(currentTNode, currentLView);
|
|
3747
|
+
// Note that this lookup on the node injector is using the `Self` flag, because
|
|
3748
|
+
// we don't want the node injector to look at any parent injectors since we
|
|
3749
|
+
// may hit the embedded view injector first.
|
|
3750
|
+
const nodeInjectorValue = lookupTokenUsingNodeInjector(currentTNode, currentLView, token, flags | InjectFlags.Self, NOT_FOUND);
|
|
3751
|
+
if (nodeInjectorValue !== NOT_FOUND) {
|
|
3752
|
+
return nodeInjectorValue;
|
|
3753
|
+
}
|
|
3754
|
+
// Has an explicit type due to a TS bug: https://github.com/microsoft/TypeScript/issues/33191
|
|
3755
|
+
let parentTNode = currentTNode.parent;
|
|
3756
|
+
// `TNode.parent` includes the parent within the current view only. If it doesn't exist,
|
|
3757
|
+
// it means that we've hit the view boundary and we need to go up to the next view.
|
|
3758
|
+
if (!parentTNode) {
|
|
3759
|
+
// Before we go to the next LView, check if the token exists on the current embedded injector.
|
|
3760
|
+
const embeddedViewInjector = currentLView[EMBEDDED_VIEW_INJECTOR];
|
|
3761
|
+
if (embeddedViewInjector) {
|
|
3762
|
+
const embeddedViewInjectorValue = embeddedViewInjector.get(token, NOT_FOUND, flags);
|
|
3763
|
+
if (embeddedViewInjectorValue !== NOT_FOUND) {
|
|
3764
|
+
return embeddedViewInjectorValue;
|
|
3765
|
+
}
|
|
3766
|
+
}
|
|
3767
|
+
// Otherwise keep going up the tree.
|
|
3768
|
+
parentTNode = getTNodeFromLView(currentLView);
|
|
3769
|
+
currentLView = currentLView[DECLARATION_VIEW];
|
|
3770
|
+
}
|
|
3771
|
+
currentTNode = parentTNode;
|
|
3772
|
+
}
|
|
3773
|
+
return notFoundValue;
|
|
3774
|
+
}
|
|
3775
|
+
/** Gets the TNode associated with an LView inside of the declaration view. */
|
|
3776
|
+
function getTNodeFromLView(lView) {
|
|
3777
|
+
const tView = lView[TVIEW];
|
|
3778
|
+
const tViewType = tView.type;
|
|
3779
|
+
// The parent pointer differs based on `TView.type`.
|
|
3780
|
+
if (tViewType === 2 /* Embedded */) {
|
|
3781
|
+
ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');
|
|
3782
|
+
return tView.declTNode;
|
|
3783
|
+
}
|
|
3784
|
+
else if (tViewType === 1 /* Component */) {
|
|
3785
|
+
// Components don't have `TView.declTNode` because each instance of component could be
|
|
3786
|
+
// inserted in different location, hence `TView.declTNode` is meaningless.
|
|
3787
|
+
return lView[T_HOST];
|
|
3788
|
+
}
|
|
3789
|
+
return null;
|
|
3790
|
+
}
|
|
3693
3791
|
|
|
3694
3792
|
/**
|
|
3695
3793
|
* @license
|
|
@@ -4513,9 +4611,6 @@ class ReflectionCapabilities {
|
|
|
4513
4611
|
constructor(reflect) {
|
|
4514
4612
|
this._reflect = reflect || _global['Reflect'];
|
|
4515
4613
|
}
|
|
4516
|
-
isReflectionEnabled() {
|
|
4517
|
-
return true;
|
|
4518
|
-
}
|
|
4519
4614
|
factory(t) {
|
|
4520
4615
|
return (...args) => new t(...args);
|
|
4521
4616
|
}
|
|
@@ -4687,38 +4782,6 @@ class ReflectionCapabilities {
|
|
|
4687
4782
|
hasLifecycleHook(type, lcProperty) {
|
|
4688
4783
|
return type instanceof Type && lcProperty in type.prototype;
|
|
4689
4784
|
}
|
|
4690
|
-
guards(type) {
|
|
4691
|
-
return {};
|
|
4692
|
-
}
|
|
4693
|
-
getter(name) {
|
|
4694
|
-
return new Function('o', 'return o.' + name + ';');
|
|
4695
|
-
}
|
|
4696
|
-
setter(name) {
|
|
4697
|
-
return new Function('o', 'v', 'return o.' + name + ' = v;');
|
|
4698
|
-
}
|
|
4699
|
-
method(name) {
|
|
4700
|
-
const functionBody = `if (!o.${name}) throw new Error('"${name}" is undefined');
|
|
4701
|
-
return o.${name}.apply(o, args);`;
|
|
4702
|
-
return new Function('o', 'args', functionBody);
|
|
4703
|
-
}
|
|
4704
|
-
// There is not a concept of import uri in Js, but this is useful in developing Dart applications.
|
|
4705
|
-
importUri(type) {
|
|
4706
|
-
// StaticSymbol
|
|
4707
|
-
if (typeof type === 'object' && type['filePath']) {
|
|
4708
|
-
return type['filePath'];
|
|
4709
|
-
}
|
|
4710
|
-
// Runtime type
|
|
4711
|
-
return `./${stringify(type)}`;
|
|
4712
|
-
}
|
|
4713
|
-
resourceUri(type) {
|
|
4714
|
-
return `./${stringify(type)}`;
|
|
4715
|
-
}
|
|
4716
|
-
resolveIdentifier(name, moduleUrl, members, runtime) {
|
|
4717
|
-
return runtime;
|
|
4718
|
-
}
|
|
4719
|
-
resolveEnum(enumIdentifier, name) {
|
|
4720
|
-
return enumIdentifier[name];
|
|
4721
|
-
}
|
|
4722
4785
|
}
|
|
4723
4786
|
function convertTsickleDecoratorIntoMetadata(decoratorInvocations) {
|
|
4724
4787
|
if (!decoratorInvocations) {
|
|
@@ -4906,7 +4969,7 @@ function catchInjectorError(e, token, injectorErrorName, source) {
|
|
|
4906
4969
|
throw e;
|
|
4907
4970
|
}
|
|
4908
4971
|
function formatError(text, obj, injectorErrorName, source = null) {
|
|
4909
|
-
text = text && text.charAt(0) === '\n' && text.charAt(1) == NO_NEW_LINE ? text.
|
|
4972
|
+
text = text && text.charAt(0) === '\n' && text.charAt(1) == NO_NEW_LINE ? text.slice(2) : text;
|
|
4910
4973
|
let context = stringify(obj);
|
|
4911
4974
|
if (Array.isArray(obj)) {
|
|
4912
4975
|
context = obj.map(stringify).join(' -> ');
|
|
@@ -5165,6 +5228,60 @@ function componentDefResolved(type) {
|
|
|
5165
5228
|
componentDefPendingResolution.delete(type);
|
|
5166
5229
|
}
|
|
5167
5230
|
|
|
5231
|
+
/**
|
|
5232
|
+
* @license
|
|
5233
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5234
|
+
*
|
|
5235
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
5236
|
+
* found in the LICENSE file at https://angular.io/license
|
|
5237
|
+
*/
|
|
5238
|
+
/**
|
|
5239
|
+
* Map of module-id to the corresponding NgModule.
|
|
5240
|
+
*/
|
|
5241
|
+
const modules = new Map();
|
|
5242
|
+
/**
|
|
5243
|
+
* Whether to check for duplicate NgModule registrations.
|
|
5244
|
+
*
|
|
5245
|
+
* This can be disabled for testing.
|
|
5246
|
+
*/
|
|
5247
|
+
let checkForDuplicateNgModules = true;
|
|
5248
|
+
function assertSameOrNotExisting(id, type, incoming) {
|
|
5249
|
+
if (type && type !== incoming && checkForDuplicateNgModules) {
|
|
5250
|
+
throw new Error(`Duplicate module registered for ${id} - ${stringify(type)} vs ${stringify(type.name)}`);
|
|
5251
|
+
}
|
|
5252
|
+
}
|
|
5253
|
+
/**
|
|
5254
|
+
* Adds the given NgModule type to Angular's NgModule registry.
|
|
5255
|
+
*
|
|
5256
|
+
* This is generated as a side-effect of NgModule compilation. Note that the `id` is passed in
|
|
5257
|
+
* explicitly and not read from the NgModule definition. This is for two reasons: it avoids a
|
|
5258
|
+
* megamorphic read, and in JIT there's a chicken-and-egg problem where the NgModule may not be
|
|
5259
|
+
* fully resolved when it's registered.
|
|
5260
|
+
*
|
|
5261
|
+
* @codeGenApi
|
|
5262
|
+
*/
|
|
5263
|
+
function registerNgModuleType(ngModuleType, id) {
|
|
5264
|
+
const existing = modules.get(id) || null;
|
|
5265
|
+
assertSameOrNotExisting(id, existing, ngModuleType);
|
|
5266
|
+
modules.set(id, ngModuleType);
|
|
5267
|
+
}
|
|
5268
|
+
function clearModulesForTest() {
|
|
5269
|
+
modules.clear();
|
|
5270
|
+
}
|
|
5271
|
+
function getRegisteredNgModuleType(id) {
|
|
5272
|
+
return modules.get(id);
|
|
5273
|
+
}
|
|
5274
|
+
/**
|
|
5275
|
+
* Control whether the NgModule registration system enforces that each NgModule type registered has
|
|
5276
|
+
* a unique id.
|
|
5277
|
+
*
|
|
5278
|
+
* This is useful for testing as the NgModule registry cannot be properly reset between tests with
|
|
5279
|
+
* Angular's current API.
|
|
5280
|
+
*/
|
|
5281
|
+
function setAllowDuplicateNgModuleIdsForTest(allowDuplicates) {
|
|
5282
|
+
checkForDuplicateNgModules = !allowDuplicates;
|
|
5283
|
+
}
|
|
5284
|
+
|
|
5168
5285
|
/**
|
|
5169
5286
|
* @license
|
|
5170
5287
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -6170,6 +6287,78 @@ function getSanitizer() {
|
|
|
6170
6287
|
return lView && lView[SANITIZER];
|
|
6171
6288
|
}
|
|
6172
6289
|
|
|
6290
|
+
/**
|
|
6291
|
+
* @license
|
|
6292
|
+
* Copyright Google LLC All Rights Reserved.
|
|
6293
|
+
*
|
|
6294
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6295
|
+
* found in the LICENSE file at https://angular.io/license
|
|
6296
|
+
*/
|
|
6297
|
+
// Keeps track of the currently-active LViews.
|
|
6298
|
+
const TRACKED_LVIEWS = new Map();
|
|
6299
|
+
// Used for generating unique IDs for LViews.
|
|
6300
|
+
let uniqueIdCounter = 0;
|
|
6301
|
+
/** Gets a unique ID that can be assigned to an LView. */
|
|
6302
|
+
function getUniqueLViewId() {
|
|
6303
|
+
return uniqueIdCounter++;
|
|
6304
|
+
}
|
|
6305
|
+
/** Starts tracking an LView. */
|
|
6306
|
+
function registerLView(lView) {
|
|
6307
|
+
ngDevMode && assertNumber(lView[ID], 'LView must have an ID in order to be registered');
|
|
6308
|
+
TRACKED_LVIEWS.set(lView[ID], lView);
|
|
6309
|
+
}
|
|
6310
|
+
/** Gets an LView by its unique ID. */
|
|
6311
|
+
function getLViewById(id) {
|
|
6312
|
+
ngDevMode && assertNumber(id, 'ID used for LView lookup must be a number');
|
|
6313
|
+
return TRACKED_LVIEWS.get(id) || null;
|
|
6314
|
+
}
|
|
6315
|
+
/** Stops tracking an LView. */
|
|
6316
|
+
function unregisterLView(lView) {
|
|
6317
|
+
ngDevMode && assertNumber(lView[ID], 'Cannot stop tracking an LView that does not have an ID');
|
|
6318
|
+
TRACKED_LVIEWS.delete(lView[ID]);
|
|
6319
|
+
}
|
|
6320
|
+
|
|
6321
|
+
/**
|
|
6322
|
+
* @license
|
|
6323
|
+
* Copyright Google LLC All Rights Reserved.
|
|
6324
|
+
*
|
|
6325
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6326
|
+
* found in the LICENSE file at https://angular.io/license
|
|
6327
|
+
*/
|
|
6328
|
+
/**
|
|
6329
|
+
* The internal view context which is specific to a given DOM element, directive or
|
|
6330
|
+
* component instance. Each value in here (besides the LView and element node details)
|
|
6331
|
+
* can be present, null or undefined. If undefined then it implies the value has not been
|
|
6332
|
+
* looked up yet, otherwise, if null, then a lookup was executed and nothing was found.
|
|
6333
|
+
*
|
|
6334
|
+
* Each value will get filled when the respective value is examined within the getContext
|
|
6335
|
+
* function. The component, element and each directive instance will share the same instance
|
|
6336
|
+
* of the context.
|
|
6337
|
+
*/
|
|
6338
|
+
class LContext {
|
|
6339
|
+
constructor(
|
|
6340
|
+
/**
|
|
6341
|
+
* ID of the component's parent view data.
|
|
6342
|
+
*/
|
|
6343
|
+
lViewId,
|
|
6344
|
+
/**
|
|
6345
|
+
* The index instance of the node.
|
|
6346
|
+
*/
|
|
6347
|
+
nodeIndex,
|
|
6348
|
+
/**
|
|
6349
|
+
* The instance of the DOM node that is attached to the lNode.
|
|
6350
|
+
*/
|
|
6351
|
+
native) {
|
|
6352
|
+
this.lViewId = lViewId;
|
|
6353
|
+
this.nodeIndex = nodeIndex;
|
|
6354
|
+
this.native = native;
|
|
6355
|
+
}
|
|
6356
|
+
/** Component's parent view data. */
|
|
6357
|
+
get lView() {
|
|
6358
|
+
return getLViewById(this.lViewId);
|
|
6359
|
+
}
|
|
6360
|
+
}
|
|
6361
|
+
|
|
6173
6362
|
/**
|
|
6174
6363
|
* @license
|
|
6175
6364
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -6202,7 +6391,7 @@ function getLContext(target) {
|
|
|
6202
6391
|
if (mpValue) {
|
|
6203
6392
|
// only when it's an array is it considered an LView instance
|
|
6204
6393
|
// ... otherwise it's an already constructed LContext instance
|
|
6205
|
-
if (
|
|
6394
|
+
if (isLView(mpValue)) {
|
|
6206
6395
|
const lView = mpValue;
|
|
6207
6396
|
let nodeIndex;
|
|
6208
6397
|
let component = undefined;
|
|
@@ -6261,13 +6450,7 @@ function getLContext(target) {
|
|
|
6261
6450
|
while (parent = parent.parentNode) {
|
|
6262
6451
|
const parentContext = readPatchedData(parent);
|
|
6263
6452
|
if (parentContext) {
|
|
6264
|
-
|
|
6265
|
-
if (Array.isArray(parentContext)) {
|
|
6266
|
-
lView = parentContext;
|
|
6267
|
-
}
|
|
6268
|
-
else {
|
|
6269
|
-
lView = parentContext.lView;
|
|
6270
|
-
}
|
|
6453
|
+
const lView = Array.isArray(parentContext) ? parentContext : parentContext.lView;
|
|
6271
6454
|
// the edge of the app was also reached here through another means
|
|
6272
6455
|
// (maybe because the DOM was changed manually).
|
|
6273
6456
|
if (!lView) {
|
|
@@ -6290,14 +6473,7 @@ function getLContext(target) {
|
|
|
6290
6473
|
* Creates an empty instance of a `LContext` context
|
|
6291
6474
|
*/
|
|
6292
6475
|
function createLContext(lView, nodeIndex, native) {
|
|
6293
|
-
return
|
|
6294
|
-
lView,
|
|
6295
|
-
nodeIndex,
|
|
6296
|
-
native,
|
|
6297
|
-
component: undefined,
|
|
6298
|
-
directives: undefined,
|
|
6299
|
-
localRefs: undefined,
|
|
6300
|
-
};
|
|
6476
|
+
return new LContext(lView[ID], nodeIndex, native);
|
|
6301
6477
|
}
|
|
6302
6478
|
/**
|
|
6303
6479
|
* Takes a component instance and returns the view for that component.
|
|
@@ -6306,21 +6482,24 @@ function createLContext(lView, nodeIndex, native) {
|
|
|
6306
6482
|
* @returns The component's view
|
|
6307
6483
|
*/
|
|
6308
6484
|
function getComponentViewByInstance(componentInstance) {
|
|
6309
|
-
let
|
|
6310
|
-
let
|
|
6311
|
-
if (
|
|
6312
|
-
const
|
|
6313
|
-
|
|
6314
|
-
|
|
6485
|
+
let patchedData = readPatchedData(componentInstance);
|
|
6486
|
+
let lView;
|
|
6487
|
+
if (isLView(patchedData)) {
|
|
6488
|
+
const contextLView = patchedData;
|
|
6489
|
+
const nodeIndex = findViaComponent(contextLView, componentInstance);
|
|
6490
|
+
lView = getComponentLViewByIndex(nodeIndex, contextLView);
|
|
6491
|
+
const context = createLContext(contextLView, nodeIndex, lView[HOST]);
|
|
6315
6492
|
context.component = componentInstance;
|
|
6316
6493
|
attachPatchData(componentInstance, context);
|
|
6317
6494
|
attachPatchData(context.native, context);
|
|
6318
6495
|
}
|
|
6319
6496
|
else {
|
|
6320
|
-
const context =
|
|
6321
|
-
|
|
6497
|
+
const context = patchedData;
|
|
6498
|
+
const contextLView = context.lView;
|
|
6499
|
+
ngDevMode && assertLView(contextLView);
|
|
6500
|
+
lView = getComponentLViewByIndex(context.nodeIndex, contextLView);
|
|
6322
6501
|
}
|
|
6323
|
-
return
|
|
6502
|
+
return lView;
|
|
6324
6503
|
}
|
|
6325
6504
|
/**
|
|
6326
6505
|
* This property will be monkey-patched on elements, components and directives.
|
|
@@ -6332,7 +6511,16 @@ const MONKEY_PATCH_KEY_NAME = '__ngContext__';
|
|
|
6332
6511
|
*/
|
|
6333
6512
|
function attachPatchData(target, data) {
|
|
6334
6513
|
ngDevMode && assertDefined(target, 'Target expected');
|
|
6335
|
-
|
|
6514
|
+
// Only attach the ID of the view in order to avoid memory leaks (see #41047). We only do this
|
|
6515
|
+
// for `LView`, because we have control over when an `LView` is created and destroyed, whereas
|
|
6516
|
+
// we can't know when to remove an `LContext`.
|
|
6517
|
+
if (isLView(data)) {
|
|
6518
|
+
target[MONKEY_PATCH_KEY_NAME] = data[ID];
|
|
6519
|
+
registerLView(data);
|
|
6520
|
+
}
|
|
6521
|
+
else {
|
|
6522
|
+
target[MONKEY_PATCH_KEY_NAME] = data;
|
|
6523
|
+
}
|
|
6336
6524
|
}
|
|
6337
6525
|
/**
|
|
6338
6526
|
* Returns the monkey-patch value data present on the target (which could be
|
|
@@ -6340,12 +6528,13 @@ function attachPatchData(target, data) {
|
|
|
6340
6528
|
*/
|
|
6341
6529
|
function readPatchedData(target) {
|
|
6342
6530
|
ngDevMode && assertDefined(target, 'Target expected');
|
|
6343
|
-
|
|
6531
|
+
const data = target[MONKEY_PATCH_KEY_NAME];
|
|
6532
|
+
return (typeof data === 'number') ? getLViewById(data) : data || null;
|
|
6344
6533
|
}
|
|
6345
6534
|
function readPatchedLView(target) {
|
|
6346
6535
|
const value = readPatchedData(target);
|
|
6347
6536
|
if (value) {
|
|
6348
|
-
return
|
|
6537
|
+
return isLView(value) ? value : value.lView;
|
|
6349
6538
|
}
|
|
6350
6539
|
return null;
|
|
6351
6540
|
}
|
|
@@ -7292,6 +7481,8 @@ function cleanUpView(tView, lView) {
|
|
|
7292
7481
|
lQueries.detachView(tView);
|
|
7293
7482
|
}
|
|
7294
7483
|
}
|
|
7484
|
+
// Unregister the view once everything else has been cleaned up.
|
|
7485
|
+
unregisterLView(lView);
|
|
7295
7486
|
}
|
|
7296
7487
|
}
|
|
7297
7488
|
/** Removes listeners and unsubscribes from output subscriptions */
|
|
@@ -7459,7 +7650,8 @@ function nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {
|
|
|
7459
7650
|
renderer.insertBefore(parent, child, beforeNode, isMove);
|
|
7460
7651
|
}
|
|
7461
7652
|
else {
|
|
7462
|
-
parent.
|
|
7653
|
+
const targetParent = isTemplateNode(parent) ? parent.content : parent;
|
|
7654
|
+
targetParent.insertBefore(child, beforeNode, isMove);
|
|
7463
7655
|
}
|
|
7464
7656
|
}
|
|
7465
7657
|
function nativeAppendChild(renderer, parent, child) {
|
|
@@ -7469,7 +7661,8 @@ function nativeAppendChild(renderer, parent, child) {
|
|
|
7469
7661
|
renderer.appendChild(parent, child);
|
|
7470
7662
|
}
|
|
7471
7663
|
else {
|
|
7472
|
-
parent.
|
|
7664
|
+
const targetParent = isTemplateNode(parent) ? parent.content : parent;
|
|
7665
|
+
targetParent.appendChild(child);
|
|
7473
7666
|
}
|
|
7474
7667
|
}
|
|
7475
7668
|
function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {
|
|
@@ -7489,6 +7682,10 @@ function nativeRemoveChild(renderer, parent, child, isHostElement) {
|
|
|
7489
7682
|
parent.removeChild(child);
|
|
7490
7683
|
}
|
|
7491
7684
|
}
|
|
7685
|
+
/** Checks if an element is a `<template>` node. */
|
|
7686
|
+
function isTemplateNode(node) {
|
|
7687
|
+
return node.tagName === 'TEMPLATE' && node.content !== undefined;
|
|
7688
|
+
}
|
|
7492
7689
|
/**
|
|
7493
7690
|
* Returns a native parent of a given native node.
|
|
7494
7691
|
*/
|
|
@@ -8658,7 +8855,7 @@ function nameSuffix(text) {
|
|
|
8658
8855
|
if (text == null)
|
|
8659
8856
|
return '';
|
|
8660
8857
|
const index = text.lastIndexOf('_Template');
|
|
8661
|
-
return '_' + (index === -1 ? text : text.
|
|
8858
|
+
return '_' + (index === -1 ? text : text.slice(0, index));
|
|
8662
8859
|
}
|
|
8663
8860
|
/**
|
|
8664
8861
|
* This class is a debug version of Object literal so that we can have constructor name show up
|
|
@@ -9009,7 +9206,7 @@ class LViewDebug {
|
|
|
9009
9206
|
attached: !!(flags & 128 /* Attached */),
|
|
9010
9207
|
destroyed: !!(flags & 256 /* Destroyed */),
|
|
9011
9208
|
isRoot: !!(flags & 512 /* IsRoot */),
|
|
9012
|
-
indexWithinInitPhase: flags >>
|
|
9209
|
+
indexWithinInitPhase: flags >> 12 /* IndexWithinInitPhaseShift */,
|
|
9013
9210
|
};
|
|
9014
9211
|
}
|
|
9015
9212
|
get parent() {
|
|
@@ -9072,6 +9269,9 @@ class LViewDebug {
|
|
|
9072
9269
|
get tHost() {
|
|
9073
9270
|
return this._raw_lView[T_HOST];
|
|
9074
9271
|
}
|
|
9272
|
+
get id() {
|
|
9273
|
+
return this._raw_lView[ID];
|
|
9274
|
+
}
|
|
9075
9275
|
get decls() {
|
|
9076
9276
|
return toLViewRange(this.tView, this._raw_lView, HEADER_OFFSET, this.tView.bindingStartIndex);
|
|
9077
9277
|
}
|
|
@@ -9301,10 +9501,14 @@ function renderChildComponents(hostLView, components) {
|
|
|
9301
9501
|
renderComponent$1(hostLView, components[i]);
|
|
9302
9502
|
}
|
|
9303
9503
|
}
|
|
9304
|
-
function createLView(parentLView, tView, context, flags, host, tHostNode, rendererFactory, renderer, sanitizer, injector) {
|
|
9504
|
+
function createLView(parentLView, tView, context, flags, host, tHostNode, rendererFactory, renderer, sanitizer, injector, embeddedViewInjector) {
|
|
9305
9505
|
const lView = ngDevMode ? cloneToLViewFromTViewBlueprint(tView) : tView.blueprint.slice();
|
|
9306
9506
|
lView[HOST] = host;
|
|
9307
9507
|
lView[FLAGS] = flags | 4 /* CreationMode */ | 128 /* Attached */ | 8 /* FirstLViewPass */;
|
|
9508
|
+
if (embeddedViewInjector !== null ||
|
|
9509
|
+
(parentLView && (parentLView[FLAGS] & 2048 /* HasEmbeddedViewInjector */))) {
|
|
9510
|
+
lView[FLAGS] |= 2048 /* HasEmbeddedViewInjector */;
|
|
9511
|
+
}
|
|
9308
9512
|
resetPreOrderHookFlags(lView);
|
|
9309
9513
|
ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);
|
|
9310
9514
|
lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;
|
|
@@ -9316,6 +9520,8 @@ function createLView(parentLView, tView, context, flags, host, tHostNode, render
|
|
|
9316
9520
|
lView[SANITIZER] = sanitizer || parentLView && parentLView[SANITIZER] || null;
|
|
9317
9521
|
lView[INJECTOR$1] = injector || parentLView && parentLView[INJECTOR$1] || null;
|
|
9318
9522
|
lView[T_HOST] = tHostNode;
|
|
9523
|
+
lView[ID] = getUniqueLViewId();
|
|
9524
|
+
lView[EMBEDDED_VIEW_INJECTOR] = embeddedViewInjector;
|
|
9319
9525
|
ngDevMode &&
|
|
9320
9526
|
assertEqual(tView.type == 2 /* Embedded */ ? parentLView !== null : true, true, 'Embedded views must have parentLView');
|
|
9321
9527
|
lView[DECLARATION_COMPONENT_VIEW] =
|
|
@@ -10324,7 +10530,6 @@ function instantiateAllDirectives(tView, lView, tNode, native) {
|
|
|
10324
10530
|
function invokeDirectivesHostBindings(tView, lView, tNode) {
|
|
10325
10531
|
const start = tNode.directiveStart;
|
|
10326
10532
|
const end = tNode.directiveEnd;
|
|
10327
|
-
const firstCreatePass = tView.firstCreatePass;
|
|
10328
10533
|
const elementIndex = tNode.index;
|
|
10329
10534
|
const currentDirectiveIndex = getCurrentDirectiveIndex();
|
|
10330
10535
|
try {
|
|
@@ -10471,7 +10676,7 @@ function addComponentLogic(lView, hostTNode, def) {
|
|
|
10471
10676
|
// Only component views should be added to the view tree directly. Embedded views are
|
|
10472
10677
|
// accessed through their containers because they may be removed / re-added later.
|
|
10473
10678
|
const rendererFactory = lView[RENDERER_FACTORY];
|
|
10474
|
-
const componentView = addToViewTree(lView, createLView(lView, tView, null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, native, hostTNode, rendererFactory, rendererFactory.createRenderer(native, def), null, null));
|
|
10679
|
+
const componentView = addToViewTree(lView, createLView(lView, tView, null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, native, hostTNode, rendererFactory, rendererFactory.createRenderer(native, def), null, null, null));
|
|
10475
10680
|
// Component view will always be created before any injected LContainers,
|
|
10476
10681
|
// so this is a regular element, wrap it with the component view
|
|
10477
10682
|
lView[hostTNode.index] = componentView;
|
|
@@ -10840,8 +11045,11 @@ function tickRootContext(rootContext) {
|
|
|
10840
11045
|
for (let i = 0; i < rootContext.components.length; i++) {
|
|
10841
11046
|
const rootComponent = rootContext.components[i];
|
|
10842
11047
|
const lView = readPatchedLView(rootComponent);
|
|
10843
|
-
|
|
10844
|
-
|
|
11048
|
+
// We might not have an `LView` if the component was destroyed.
|
|
11049
|
+
if (lView !== null) {
|
|
11050
|
+
const tView = lView[TVIEW];
|
|
11051
|
+
renderComponentOrTemplate(tView, lView, tView.template, rootComponent);
|
|
11052
|
+
}
|
|
10845
11053
|
}
|
|
10846
11054
|
}
|
|
10847
11055
|
function detectChangesInternal(tView, lView, context) {
|
|
@@ -11699,12 +11907,16 @@ Injector.__NG_ELEMENT_ID__ = -1 /* Injector */;
|
|
|
11699
11907
|
* @globalApi ng
|
|
11700
11908
|
*/
|
|
11701
11909
|
function getComponent$1(element) {
|
|
11702
|
-
assertDomElement(element);
|
|
11910
|
+
ngDevMode && assertDomElement(element);
|
|
11703
11911
|
const context = getLContext(element);
|
|
11704
11912
|
if (context === null)
|
|
11705
11913
|
return null;
|
|
11706
11914
|
if (context.component === undefined) {
|
|
11707
|
-
|
|
11915
|
+
const lView = context.lView;
|
|
11916
|
+
if (lView === null) {
|
|
11917
|
+
return null;
|
|
11918
|
+
}
|
|
11919
|
+
context.component = getComponentAtNodeIndex(context.nodeIndex, lView);
|
|
11708
11920
|
}
|
|
11709
11921
|
return context.component;
|
|
11710
11922
|
}
|
|
@@ -11723,7 +11935,8 @@ function getComponent$1(element) {
|
|
|
11723
11935
|
function getContext(element) {
|
|
11724
11936
|
assertDomElement(element);
|
|
11725
11937
|
const context = getLContext(element);
|
|
11726
|
-
|
|
11938
|
+
const lView = context ? context.lView : null;
|
|
11939
|
+
return lView === null ? null : lView[CONTEXT];
|
|
11727
11940
|
}
|
|
11728
11941
|
/**
|
|
11729
11942
|
* Retrieves the component instance whose view contains the DOM element.
|
|
@@ -11742,11 +11955,10 @@ function getContext(element) {
|
|
|
11742
11955
|
*/
|
|
11743
11956
|
function getOwningComponent(elementOrDir) {
|
|
11744
11957
|
const context = getLContext(elementOrDir);
|
|
11745
|
-
|
|
11958
|
+
let lView = context ? context.lView : null;
|
|
11959
|
+
if (lView === null)
|
|
11746
11960
|
return null;
|
|
11747
|
-
let lView = context.lView;
|
|
11748
11961
|
let parent;
|
|
11749
|
-
ngDevMode && assertLView(lView);
|
|
11750
11962
|
while (lView[TVIEW].type === 2 /* Embedded */ && (parent = getLViewParent(lView))) {
|
|
11751
11963
|
lView = parent;
|
|
11752
11964
|
}
|
|
@@ -11764,7 +11976,8 @@ function getOwningComponent(elementOrDir) {
|
|
|
11764
11976
|
* @globalApi ng
|
|
11765
11977
|
*/
|
|
11766
11978
|
function getRootComponents(elementOrDir) {
|
|
11767
|
-
|
|
11979
|
+
const lView = readPatchedLView(elementOrDir);
|
|
11980
|
+
return lView !== null ? [...getRootContext(lView).components] : [];
|
|
11768
11981
|
}
|
|
11769
11982
|
/**
|
|
11770
11983
|
* Retrieves an `Injector` associated with an element, component or directive instance.
|
|
@@ -11778,10 +11991,11 @@ function getRootComponents(elementOrDir) {
|
|
|
11778
11991
|
*/
|
|
11779
11992
|
function getInjector(elementOrDir) {
|
|
11780
11993
|
const context = getLContext(elementOrDir);
|
|
11781
|
-
|
|
11994
|
+
const lView = context ? context.lView : null;
|
|
11995
|
+
if (lView === null)
|
|
11782
11996
|
return Injector.NULL;
|
|
11783
|
-
const tNode =
|
|
11784
|
-
return new NodeInjector(tNode,
|
|
11997
|
+
const tNode = lView[TVIEW].data[context.nodeIndex];
|
|
11998
|
+
return new NodeInjector(tNode, lView);
|
|
11785
11999
|
}
|
|
11786
12000
|
/**
|
|
11787
12001
|
* Retrieve a set of injection tokens at a given DOM node.
|
|
@@ -11790,9 +12004,9 @@ function getInjector(elementOrDir) {
|
|
|
11790
12004
|
*/
|
|
11791
12005
|
function getInjectionTokens(element) {
|
|
11792
12006
|
const context = getLContext(element);
|
|
11793
|
-
|
|
12007
|
+
const lView = context ? context.lView : null;
|
|
12008
|
+
if (lView === null)
|
|
11794
12009
|
return [];
|
|
11795
|
-
const lView = context.lView;
|
|
11796
12010
|
const tView = lView[TVIEW];
|
|
11797
12011
|
const tNode = tView.data[context.nodeIndex];
|
|
11798
12012
|
const providerTokens = [];
|
|
@@ -11842,10 +12056,10 @@ function getDirectives(node) {
|
|
|
11842
12056
|
return [];
|
|
11843
12057
|
}
|
|
11844
12058
|
const context = getLContext(node);
|
|
11845
|
-
|
|
12059
|
+
const lView = context ? context.lView : null;
|
|
12060
|
+
if (lView === null) {
|
|
11846
12061
|
return [];
|
|
11847
12062
|
}
|
|
11848
|
-
const lView = context.lView;
|
|
11849
12063
|
const tView = lView[TVIEW];
|
|
11850
12064
|
const nodeIndex = context.nodeIndex;
|
|
11851
12065
|
if (!tView?.data[nodeIndex]) {
|
|
@@ -11905,7 +12119,11 @@ function getLocalRefs(target) {
|
|
|
11905
12119
|
if (context === null)
|
|
11906
12120
|
return {};
|
|
11907
12121
|
if (context.localRefs === undefined) {
|
|
11908
|
-
|
|
12122
|
+
const lView = context.lView;
|
|
12123
|
+
if (lView === null) {
|
|
12124
|
+
return {};
|
|
12125
|
+
}
|
|
12126
|
+
context.localRefs = discoverLocalRefs(lView, context.nodeIndex);
|
|
11909
12127
|
}
|
|
11910
12128
|
return context.localRefs || {};
|
|
11911
12129
|
}
|
|
@@ -11969,11 +12187,11 @@ function getRenderedText(component) {
|
|
|
11969
12187
|
* @globalApi ng
|
|
11970
12188
|
*/
|
|
11971
12189
|
function getListeners(element) {
|
|
11972
|
-
assertDomElement(element);
|
|
12190
|
+
ngDevMode && assertDomElement(element);
|
|
11973
12191
|
const lContext = getLContext(element);
|
|
11974
|
-
|
|
12192
|
+
const lView = lContext === null ? null : lContext.lView;
|
|
12193
|
+
if (lView === null)
|
|
11975
12194
|
return [];
|
|
11976
|
-
const lView = lContext.lView;
|
|
11977
12195
|
const tView = lView[TVIEW];
|
|
11978
12196
|
const lCleanup = lView[CLEANUP];
|
|
11979
12197
|
const tCleanup = tView.cleanup;
|
|
@@ -12024,10 +12242,10 @@ function getDebugNode$1(element) {
|
|
|
12024
12242
|
throw new Error('Expecting instance of DOM Element');
|
|
12025
12243
|
}
|
|
12026
12244
|
const lContext = getLContext(element);
|
|
12027
|
-
|
|
12245
|
+
const lView = lContext ? lContext.lView : null;
|
|
12246
|
+
if (lView === null) {
|
|
12028
12247
|
return null;
|
|
12029
12248
|
}
|
|
12030
|
-
const lView = lContext.lView;
|
|
12031
12249
|
const nodeIndex = lContext.nodeIndex;
|
|
12032
12250
|
if (nodeIndex !== -1) {
|
|
12033
12251
|
const valueInLView = lView[nodeIndex];
|
|
@@ -12052,6 +12270,7 @@ function getComponentLView(target) {
|
|
|
12052
12270
|
const lContext = getLContext(target);
|
|
12053
12271
|
const nodeIndx = lContext.nodeIndex;
|
|
12054
12272
|
const lView = lContext.lView;
|
|
12273
|
+
ngDevMode && assertLView(lView);
|
|
12055
12274
|
const componentLView = lView[nodeIndx];
|
|
12056
12275
|
ngDevMode && assertLView(componentLView);
|
|
12057
12276
|
return componentLView;
|
|
@@ -12199,7 +12418,7 @@ function renderComponent(componentType /* Type as workaround for: Microsoft/Type
|
|
|
12199
12418
|
const rootContext = createRootContext(opts.scheduler, opts.playerHandler);
|
|
12200
12419
|
const renderer = rendererFactory.createRenderer(hostRNode, componentDef);
|
|
12201
12420
|
const rootTView = createTView(0 /* Root */, null, null, 1, 0, null, null, null, null, null);
|
|
12202
|
-
const rootView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, renderer, null, opts.injector || null);
|
|
12421
|
+
const rootView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, renderer, null, opts.injector || null, null);
|
|
12203
12422
|
enterView(rootView);
|
|
12204
12423
|
let component;
|
|
12205
12424
|
try {
|
|
@@ -12254,7 +12473,7 @@ function createRootComponentView(rNode, def, rootView, rendererFactory, hostRend
|
|
|
12254
12473
|
}
|
|
12255
12474
|
}
|
|
12256
12475
|
const viewRenderer = rendererFactory.createRenderer(rNode, def);
|
|
12257
|
-
const componentView = createLView(rootView, getOrCreateTComponentView(def), null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, rootView[index], tNode, rendererFactory, viewRenderer, sanitizer || null, null);
|
|
12476
|
+
const componentView = createLView(rootView, getOrCreateTComponentView(def), null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, rootView[index], tNode, rendererFactory, viewRenderer, sanitizer || null, null, null);
|
|
12258
12477
|
if (tView.firstCreatePass) {
|
|
12259
12478
|
diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, rootView), tView, def.type);
|
|
12260
12479
|
markAsComponentHost(tView, tNode);
|
|
@@ -13799,75 +14018,6 @@ class KeyRegistry {
|
|
|
13799
14018
|
}
|
|
13800
14019
|
const _globalKeyRegistry = new KeyRegistry();
|
|
13801
14020
|
|
|
13802
|
-
/**
|
|
13803
|
-
* @license
|
|
13804
|
-
* Copyright Google LLC All Rights Reserved.
|
|
13805
|
-
*
|
|
13806
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
13807
|
-
* found in the LICENSE file at https://angular.io/license
|
|
13808
|
-
*/
|
|
13809
|
-
/**
|
|
13810
|
-
* Provides access to reflection data about symbols. Used internally by Angular
|
|
13811
|
-
* to power dependency injection and compilation.
|
|
13812
|
-
*/
|
|
13813
|
-
class Reflector {
|
|
13814
|
-
constructor(reflectionCapabilities) {
|
|
13815
|
-
this.reflectionCapabilities = reflectionCapabilities;
|
|
13816
|
-
}
|
|
13817
|
-
updateCapabilities(caps) {
|
|
13818
|
-
this.reflectionCapabilities = caps;
|
|
13819
|
-
}
|
|
13820
|
-
factory(type) {
|
|
13821
|
-
return this.reflectionCapabilities.factory(type);
|
|
13822
|
-
}
|
|
13823
|
-
parameters(typeOrFunc) {
|
|
13824
|
-
return this.reflectionCapabilities.parameters(typeOrFunc);
|
|
13825
|
-
}
|
|
13826
|
-
annotations(typeOrFunc) {
|
|
13827
|
-
return this.reflectionCapabilities.annotations(typeOrFunc);
|
|
13828
|
-
}
|
|
13829
|
-
propMetadata(typeOrFunc) {
|
|
13830
|
-
return this.reflectionCapabilities.propMetadata(typeOrFunc);
|
|
13831
|
-
}
|
|
13832
|
-
hasLifecycleHook(type, lcProperty) {
|
|
13833
|
-
return this.reflectionCapabilities.hasLifecycleHook(type, lcProperty);
|
|
13834
|
-
}
|
|
13835
|
-
getter(name) {
|
|
13836
|
-
return this.reflectionCapabilities.getter(name);
|
|
13837
|
-
}
|
|
13838
|
-
setter(name) {
|
|
13839
|
-
return this.reflectionCapabilities.setter(name);
|
|
13840
|
-
}
|
|
13841
|
-
method(name) {
|
|
13842
|
-
return this.reflectionCapabilities.method(name);
|
|
13843
|
-
}
|
|
13844
|
-
importUri(type) {
|
|
13845
|
-
return this.reflectionCapabilities.importUri(type);
|
|
13846
|
-
}
|
|
13847
|
-
resourceUri(type) {
|
|
13848
|
-
return this.reflectionCapabilities.resourceUri(type);
|
|
13849
|
-
}
|
|
13850
|
-
resolveIdentifier(name, moduleUrl, members, runtime) {
|
|
13851
|
-
return this.reflectionCapabilities.resolveIdentifier(name, moduleUrl, members, runtime);
|
|
13852
|
-
}
|
|
13853
|
-
resolveEnum(identifier, name) {
|
|
13854
|
-
return this.reflectionCapabilities.resolveEnum(identifier, name);
|
|
13855
|
-
}
|
|
13856
|
-
}
|
|
13857
|
-
|
|
13858
|
-
/**
|
|
13859
|
-
* @license
|
|
13860
|
-
* Copyright Google LLC All Rights Reserved.
|
|
13861
|
-
*
|
|
13862
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
13863
|
-
* found in the LICENSE file at https://angular.io/license
|
|
13864
|
-
*/
|
|
13865
|
-
/**
|
|
13866
|
-
* The {@link Reflector} used internally in Angular to access metadata
|
|
13867
|
-
* about symbols.
|
|
13868
|
-
*/
|
|
13869
|
-
const reflector = new Reflector(new ReflectionCapabilities());
|
|
13870
|
-
|
|
13871
14021
|
/**
|
|
13872
14022
|
* @license
|
|
13873
14023
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -13924,7 +14074,7 @@ function resolveReflectiveFactory(provider) {
|
|
|
13924
14074
|
let resolvedDeps;
|
|
13925
14075
|
if (provider.useClass) {
|
|
13926
14076
|
const useClass = resolveForwardRef(provider.useClass);
|
|
13927
|
-
factoryFn =
|
|
14077
|
+
factoryFn = getReflect().factory(useClass);
|
|
13928
14078
|
resolvedDeps = _dependenciesFor(useClass);
|
|
13929
14079
|
}
|
|
13930
14080
|
else if (provider.useExisting) {
|
|
@@ -14020,7 +14170,7 @@ function constructDependencies(typeOrFunc, dependencies) {
|
|
|
14020
14170
|
}
|
|
14021
14171
|
}
|
|
14022
14172
|
function _dependenciesFor(typeOrFunc) {
|
|
14023
|
-
const params =
|
|
14173
|
+
const params = getReflect().parameters(typeOrFunc);
|
|
14024
14174
|
if (!params)
|
|
14025
14175
|
return [];
|
|
14026
14176
|
if (params.some(p => p == null)) {
|
|
@@ -16320,7 +16470,7 @@ function consumeQuotedText(text, quoteCharCode, startIndex, endIndex) {
|
|
|
16320
16470
|
function malformedStyleError(text, expecting, index) {
|
|
16321
16471
|
ngDevMode && assertEqual(typeof text === 'string', true, 'String expected here');
|
|
16322
16472
|
throw throwError(`Malformed style at location ${index} in string '` + text.substring(0, index) + '[>>' +
|
|
16323
|
-
text.substring(index, index + 1) + '<<]' + text.
|
|
16473
|
+
text.substring(index, index + 1) + '<<]' + text.slice(index + 1) +
|
|
16324
16474
|
`'. Expecting '${expecting}'.`);
|
|
16325
16475
|
}
|
|
16326
16476
|
|
|
@@ -20005,7 +20155,7 @@ function removeInnerTemplateTranslation(message) {
|
|
|
20005
20155
|
}
|
|
20006
20156
|
ngDevMode &&
|
|
20007
20157
|
assertEqual(inTemplate, false, `Tag mismatch: unable to find the end of the sub-template in the translation "${message}"`);
|
|
20008
|
-
res += message.
|
|
20158
|
+
res += message.slice(index);
|
|
20009
20159
|
return res;
|
|
20010
20160
|
}
|
|
20011
20161
|
/**
|
|
@@ -20097,7 +20247,7 @@ function parseICUBlock(pattern) {
|
|
|
20097
20247
|
else {
|
|
20098
20248
|
icuType = 1 /* plural */;
|
|
20099
20249
|
}
|
|
20100
|
-
mainBinding = parseInt(binding.
|
|
20250
|
+
mainBinding = parseInt(binding.slice(1), 10);
|
|
20101
20251
|
return '';
|
|
20102
20252
|
});
|
|
20103
20253
|
const parts = i18nParseTextIntoPartsAndICU(pattern);
|
|
@@ -21102,7 +21252,7 @@ class Version {
|
|
|
21102
21252
|
/**
|
|
21103
21253
|
* @publicApi
|
|
21104
21254
|
*/
|
|
21105
|
-
const VERSION = new Version('
|
|
21255
|
+
const VERSION = new Version('14.0.0-next.10');
|
|
21106
21256
|
|
|
21107
21257
|
/**
|
|
21108
21258
|
* @license
|
|
@@ -21507,22 +21657,28 @@ function getNamespace(elementName) {
|
|
|
21507
21657
|
const name = elementName.toLowerCase();
|
|
21508
21658
|
return name === 'svg' ? SVG_NAMESPACE : (name === 'math' ? MATH_ML_NAMESPACE : null);
|
|
21509
21659
|
}
|
|
21510
|
-
|
|
21511
|
-
|
|
21512
|
-
|
|
21513
|
-
|
|
21514
|
-
|
|
21515
|
-
|
|
21516
|
-
|
|
21517
|
-
|
|
21518
|
-
|
|
21519
|
-
|
|
21520
|
-
|
|
21521
|
-
|
|
21522
|
-
|
|
21523
|
-
|
|
21660
|
+
/**
|
|
21661
|
+
* Injector that looks up a value using a specific injector, before falling back to the module
|
|
21662
|
+
* injector. Used primarily when creating components or embedded views dynamically.
|
|
21663
|
+
*/
|
|
21664
|
+
class ChainedInjector {
|
|
21665
|
+
constructor(injector, parentInjector) {
|
|
21666
|
+
this.injector = injector;
|
|
21667
|
+
this.parentInjector = parentInjector;
|
|
21668
|
+
}
|
|
21669
|
+
get(token, notFoundValue, flags) {
|
|
21670
|
+
const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
|
|
21671
|
+
if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
|
|
21672
|
+
notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
|
|
21673
|
+
// Return the value from the root element injector when
|
|
21674
|
+
// - it provides it
|
|
21675
|
+
// (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
|
|
21676
|
+
// - the module injector should not be checked
|
|
21677
|
+
// (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
|
|
21678
|
+
return value;
|
|
21524
21679
|
}
|
|
21525
|
-
|
|
21680
|
+
return this.parentInjector.get(token, notFoundValue, flags);
|
|
21681
|
+
}
|
|
21526
21682
|
}
|
|
21527
21683
|
/**
|
|
21528
21684
|
* Render3 implementation of {@link viewEngine_ComponentFactory}.
|
|
@@ -21550,7 +21706,7 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
21550
21706
|
}
|
|
21551
21707
|
create(injector, projectableNodes, rootSelectorOrNode, ngModule) {
|
|
21552
21708
|
ngModule = ngModule || this.ngModule;
|
|
21553
|
-
const rootViewInjector = ngModule ?
|
|
21709
|
+
const rootViewInjector = ngModule ? new ChainedInjector(injector, ngModule.injector) : injector;
|
|
21554
21710
|
const rendererFactory = rootViewInjector.get(RendererFactory2, domRendererFactory3);
|
|
21555
21711
|
const sanitizer = rootViewInjector.get(Sanitizer, null);
|
|
21556
21712
|
const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);
|
|
@@ -21565,7 +21721,7 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
21565
21721
|
const rootContext = createRootContext();
|
|
21566
21722
|
// Create the root view. Uses empty TView and ContentTemplate.
|
|
21567
21723
|
const rootTView = createTView(0 /* Root */, null, null, 1, 0, null, null, null, null, null);
|
|
21568
|
-
const rootLView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector);
|
|
21724
|
+
const rootLView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector, null);
|
|
21569
21725
|
// rootView is the parent when bootstrapping
|
|
21570
21726
|
// TODO(misko): it looks like we are entering view here but we don't really need to as
|
|
21571
21727
|
// `renderView` does that. However as the code is written it is needed because
|
|
@@ -21735,62 +21891,6 @@ class NgModuleRef$1 {
|
|
|
21735
21891
|
class NgModuleFactory$1 {
|
|
21736
21892
|
}
|
|
21737
21893
|
|
|
21738
|
-
/**
|
|
21739
|
-
* @license
|
|
21740
|
-
* Copyright Google LLC All Rights Reserved.
|
|
21741
|
-
*
|
|
21742
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
21743
|
-
* found in the LICENSE file at https://angular.io/license
|
|
21744
|
-
*/
|
|
21745
|
-
/**
|
|
21746
|
-
* Map of module-id to the corresponding NgModule.
|
|
21747
|
-
* - In pre Ivy we track NgModuleFactory,
|
|
21748
|
-
* - In post Ivy we track the NgModuleType
|
|
21749
|
-
*/
|
|
21750
|
-
const modules = new Map();
|
|
21751
|
-
/**
|
|
21752
|
-
* Registers a loaded module. Should only be called from generated NgModuleFactory code.
|
|
21753
|
-
* @publicApi
|
|
21754
|
-
*/
|
|
21755
|
-
function registerModuleFactory(id, factory) {
|
|
21756
|
-
const existing = modules.get(id);
|
|
21757
|
-
assertSameOrNotExisting(id, existing && existing.moduleType, factory.moduleType);
|
|
21758
|
-
modules.set(id, factory);
|
|
21759
|
-
}
|
|
21760
|
-
function assertSameOrNotExisting(id, type, incoming) {
|
|
21761
|
-
if (type && type !== incoming) {
|
|
21762
|
-
throw new Error(`Duplicate module registered for ${id} - ${stringify(type)} vs ${stringify(type.name)}`);
|
|
21763
|
-
}
|
|
21764
|
-
}
|
|
21765
|
-
function registerNgModuleType(ngModuleType) {
|
|
21766
|
-
const visited = new Set();
|
|
21767
|
-
recurse(ngModuleType);
|
|
21768
|
-
function recurse(ngModuleType) {
|
|
21769
|
-
// The imports array of an NgModule must refer to other NgModules,
|
|
21770
|
-
// so an error is thrown if no module definition is available.
|
|
21771
|
-
const def = getNgModuleDef(ngModuleType, /* throwNotFound */ true);
|
|
21772
|
-
const id = def.id;
|
|
21773
|
-
if (id !== null) {
|
|
21774
|
-
const existing = modules.get(id);
|
|
21775
|
-
assertSameOrNotExisting(id, existing, ngModuleType);
|
|
21776
|
-
modules.set(id, ngModuleType);
|
|
21777
|
-
}
|
|
21778
|
-
const imports = maybeUnwrapFn(def.imports);
|
|
21779
|
-
for (const i of imports) {
|
|
21780
|
-
if (!visited.has(i)) {
|
|
21781
|
-
visited.add(i);
|
|
21782
|
-
recurse(i);
|
|
21783
|
-
}
|
|
21784
|
-
}
|
|
21785
|
-
}
|
|
21786
|
-
}
|
|
21787
|
-
function clearModulesForTest() {
|
|
21788
|
-
modules.clear();
|
|
21789
|
-
}
|
|
21790
|
-
function getRegisteredNgModuleType(id) {
|
|
21791
|
-
return (modules.get(id) || autoRegisterModuleById[id]);
|
|
21792
|
-
}
|
|
21793
|
-
|
|
21794
21894
|
/**
|
|
21795
21895
|
* @license
|
|
21796
21896
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -21861,33 +21961,6 @@ class NgModuleFactory extends NgModuleFactory$1 {
|
|
|
21861
21961
|
constructor(moduleType) {
|
|
21862
21962
|
super();
|
|
21863
21963
|
this.moduleType = moduleType;
|
|
21864
|
-
const ngModuleDef = getNgModuleDef(moduleType);
|
|
21865
|
-
if (ngModuleDef !== null) {
|
|
21866
|
-
// Register the NgModule with Angular's module registry. The location (and hence timing) of
|
|
21867
|
-
// this call is critical to ensure this works correctly (modules get registered when expected)
|
|
21868
|
-
// without bloating bundles (modules are registered when otherwise not referenced).
|
|
21869
|
-
//
|
|
21870
|
-
// In View Engine, registration occurs in the .ngfactory.js file as a side effect. This has
|
|
21871
|
-
// several practical consequences:
|
|
21872
|
-
//
|
|
21873
|
-
// - If an .ngfactory file is not imported from, the module won't be registered (and can be
|
|
21874
|
-
// tree shaken).
|
|
21875
|
-
// - If an .ngfactory file is imported from, the module will be registered even if an instance
|
|
21876
|
-
// is not actually created (via `create` below).
|
|
21877
|
-
// - Since an .ngfactory file in View Engine references the .ngfactory files of the NgModule's
|
|
21878
|
-
// imports,
|
|
21879
|
-
//
|
|
21880
|
-
// In Ivy, things are a bit different. .ngfactory files still exist for compatibility, but are
|
|
21881
|
-
// not a required API to use - there are other ways to obtain an NgModuleFactory for a given
|
|
21882
|
-
// NgModule. Thus, relying on a side effect in the .ngfactory file is not sufficient. Instead,
|
|
21883
|
-
// the side effect of registration is added here, in the constructor of NgModuleFactory,
|
|
21884
|
-
// ensuring no matter how a factory is created, the module is registered correctly.
|
|
21885
|
-
//
|
|
21886
|
-
// An alternative would be to include the registration side effect inline following the actual
|
|
21887
|
-
// NgModule definition. This also has the correct timing, but breaks tree-shaking - modules
|
|
21888
|
-
// will be registered and retained even if they're otherwise never referenced.
|
|
21889
|
-
registerNgModuleType(moduleType);
|
|
21890
|
-
}
|
|
21891
21964
|
}
|
|
21892
21965
|
create(parentInjector) {
|
|
21893
21966
|
return new NgModuleRef(this.moduleType, parentInjector);
|
|
@@ -22685,9 +22758,9 @@ const R3TemplateRef = class TemplateRef extends ViewEngineTemplateRef {
|
|
|
22685
22758
|
this._declarationTContainer = _declarationTContainer;
|
|
22686
22759
|
this.elementRef = elementRef;
|
|
22687
22760
|
}
|
|
22688
|
-
createEmbeddedView(context) {
|
|
22761
|
+
createEmbeddedView(context, injector) {
|
|
22689
22762
|
const embeddedTView = this._declarationTContainer.tViews;
|
|
22690
|
-
const embeddedLView = createLView(this._declarationLView, embeddedTView, context, 16 /* CheckAlways */, null, embeddedTView.declTNode, null, null, null, null);
|
|
22763
|
+
const embeddedLView = createLView(this._declarationLView, embeddedTView, context, 16 /* CheckAlways */, null, embeddedTView.declTNode, null, null, null, null, injector || null);
|
|
22691
22764
|
const declarationLContainer = this._declarationLView[this._declarationTContainer.index];
|
|
22692
22765
|
ngDevMode && assertLContainer(declarationLContainer);
|
|
22693
22766
|
embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;
|
|
@@ -22803,8 +22876,17 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
|
|
|
22803
22876
|
get length() {
|
|
22804
22877
|
return this._lContainer.length - CONTAINER_HEADER_OFFSET;
|
|
22805
22878
|
}
|
|
22806
|
-
createEmbeddedView(templateRef, context,
|
|
22807
|
-
|
|
22879
|
+
createEmbeddedView(templateRef, context, indexOrOptions) {
|
|
22880
|
+
let index;
|
|
22881
|
+
let injector;
|
|
22882
|
+
if (typeof indexOrOptions === 'number') {
|
|
22883
|
+
index = indexOrOptions;
|
|
22884
|
+
}
|
|
22885
|
+
else if (indexOrOptions != null) {
|
|
22886
|
+
index = indexOrOptions.index;
|
|
22887
|
+
injector = indexOrOptions.injector;
|
|
22888
|
+
}
|
|
22889
|
+
const viewRef = templateRef.createEmbeddedView(context || {}, injector);
|
|
22808
22890
|
this.insert(viewRef, index);
|
|
22809
22891
|
return viewRef;
|
|
22810
22892
|
}
|
|
@@ -23557,6 +23639,7 @@ const angularCoreEnv = (() => ({
|
|
|
23557
23639
|
'ɵɵinvalidFactory': ɵɵinvalidFactory,
|
|
23558
23640
|
'ɵɵinvalidFactoryDep': ɵɵinvalidFactoryDep,
|
|
23559
23641
|
'ɵɵtemplateRefExtractor': ɵɵtemplateRefExtractor,
|
|
23642
|
+
'ɵɵresetView': ɵɵresetView,
|
|
23560
23643
|
'ɵɵNgOnChangesFeature': ɵɵNgOnChangesFeature,
|
|
23561
23644
|
'ɵɵProvidersFeature': ɵɵProvidersFeature,
|
|
23562
23645
|
'ɵɵCopyDefinitionFeature': ɵɵCopyDefinitionFeature,
|
|
@@ -23669,6 +23752,7 @@ const angularCoreEnv = (() => ({
|
|
|
23669
23752
|
'ɵɵresolveBody': ɵɵresolveBody,
|
|
23670
23753
|
'ɵɵsetComponentScope': ɵɵsetComponentScope,
|
|
23671
23754
|
'ɵɵsetNgModuleScope': ɵɵsetNgModuleScope,
|
|
23755
|
+
'ɵɵregisterNgModuleType': registerNgModuleType,
|
|
23672
23756
|
'ɵɵsanitizeHtml': ɵɵsanitizeHtml,
|
|
23673
23757
|
'ɵɵsanitizeStyle': ɵɵsanitizeStyle,
|
|
23674
23758
|
'ɵɵsanitizeResourceUrl': ɵɵsanitizeResourceUrl,
|
|
@@ -23704,6 +23788,17 @@ function resetJitOptions() {
|
|
|
23704
23788
|
jitOptions = null;
|
|
23705
23789
|
}
|
|
23706
23790
|
|
|
23791
|
+
/**
|
|
23792
|
+
* @license
|
|
23793
|
+
* Copyright Google LLC All Rights Reserved.
|
|
23794
|
+
*
|
|
23795
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
23796
|
+
* found in the LICENSE file at https://angular.io/license
|
|
23797
|
+
*/
|
|
23798
|
+
function patchModuleCompilation() {
|
|
23799
|
+
// Does nothing, but exists as a target for patching.
|
|
23800
|
+
}
|
|
23801
|
+
|
|
23707
23802
|
/**
|
|
23708
23803
|
* @license
|
|
23709
23804
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -23760,7 +23855,11 @@ function isResolvedDeclaration(declaration) {
|
|
|
23760
23855
|
* This function automatically gets called when a class has a `@NgModule` decorator.
|
|
23761
23856
|
*/
|
|
23762
23857
|
function compileNgModule(moduleType, ngModule = {}) {
|
|
23858
|
+
patchModuleCompilation();
|
|
23763
23859
|
compileNgModuleDefs(moduleType, ngModule);
|
|
23860
|
+
if (ngModule.id !== undefined) {
|
|
23861
|
+
registerNgModuleType(moduleType, ngModule.id);
|
|
23862
|
+
}
|
|
23764
23863
|
// Because we don't know if all declarations have resolved yet at the moment the
|
|
23765
23864
|
// NgModule decorator is executing, we're enqueueing the setting of module scope
|
|
23766
23865
|
// on its declarations to be run at a later time when all declarations for the module,
|
|
@@ -24384,7 +24483,10 @@ function directiveMetadata(type, metadata) {
|
|
|
24384
24483
|
usesInheritance: !extendsDirectlyFromObject(type),
|
|
24385
24484
|
exportAs: extractExportAs(metadata.exportAs),
|
|
24386
24485
|
providers: metadata.providers || null,
|
|
24387
|
-
viewQueries: extractQueriesMetadata(type, propMetadata, isViewQuery)
|
|
24486
|
+
viewQueries: extractQueriesMetadata(type, propMetadata, isViewQuery),
|
|
24487
|
+
// TODO(alxhub): pass through the standalone flag from the directive metadata once standalone
|
|
24488
|
+
// functionality is fully rolled out.
|
|
24489
|
+
isStandalone: false,
|
|
24388
24490
|
};
|
|
24389
24491
|
}
|
|
24390
24492
|
/**
|
|
@@ -24528,7 +24630,10 @@ function getPipeMetadata(type, meta) {
|
|
|
24528
24630
|
type: type,
|
|
24529
24631
|
name: type.name,
|
|
24530
24632
|
pipeName: meta.name,
|
|
24531
|
-
pure: meta.pure !== undefined ? meta.pure : true
|
|
24633
|
+
pure: meta.pure !== undefined ? meta.pure : true,
|
|
24634
|
+
// TODO(alxhub): pass through the standalone flag from the pipe metadata once standalone
|
|
24635
|
+
// functionality is fully rolled out.
|
|
24636
|
+
isStandalone: false,
|
|
24532
24637
|
};
|
|
24533
24638
|
}
|
|
24534
24639
|
|
|
@@ -24905,6 +25010,15 @@ const APP_BOOTSTRAP_LISTENER = new InjectionToken('appBootstrapListener');
|
|
|
24905
25010
|
* @publicApi
|
|
24906
25011
|
*/
|
|
24907
25012
|
const PACKAGE_ROOT_URL = new InjectionToken('Application Packages Root URL');
|
|
25013
|
+
// We keep this token here, rather than the animations package, so that modules that only care
|
|
25014
|
+
// about which animations module is loaded (e.g. the CDK) can retrieve it without having to
|
|
25015
|
+
// include extra dependencies. See #44970 for more context.
|
|
25016
|
+
/**
|
|
25017
|
+
* A [DI token](guide/glossary#di-token "DI token definition") that indicates which animations
|
|
25018
|
+
* module has been loaded.
|
|
25019
|
+
* @publicApi
|
|
25020
|
+
*/
|
|
25021
|
+
const ANIMATION_MODULE_TYPE = new InjectionToken('AnimationModuleType');
|
|
24908
25022
|
|
|
24909
25023
|
/**
|
|
24910
25024
|
* @license
|
|
@@ -26971,8 +27085,8 @@ class DebugElement extends DebugNode {
|
|
|
26971
27085
|
*/
|
|
26972
27086
|
get name() {
|
|
26973
27087
|
const context = getLContext(this.nativeNode);
|
|
26974
|
-
|
|
26975
|
-
|
|
27088
|
+
const lView = context ? context.lView : null;
|
|
27089
|
+
if (lView !== null) {
|
|
26976
27090
|
const tData = lView[TVIEW].data;
|
|
26977
27091
|
const tNode = tData[context.nodeIndex];
|
|
26978
27092
|
return tNode.value;
|
|
@@ -26995,10 +27109,10 @@ class DebugElement extends DebugNode {
|
|
|
26995
27109
|
*/
|
|
26996
27110
|
get properties() {
|
|
26997
27111
|
const context = getLContext(this.nativeNode);
|
|
26998
|
-
|
|
27112
|
+
const lView = context ? context.lView : null;
|
|
27113
|
+
if (lView === null) {
|
|
26999
27114
|
return {};
|
|
27000
27115
|
}
|
|
27001
|
-
const lView = context.lView;
|
|
27002
27116
|
const tData = lView[TVIEW].data;
|
|
27003
27117
|
const tNode = tData[context.nodeIndex];
|
|
27004
27118
|
const properties = {};
|
|
@@ -27019,10 +27133,10 @@ class DebugElement extends DebugNode {
|
|
|
27019
27133
|
return attributes;
|
|
27020
27134
|
}
|
|
27021
27135
|
const context = getLContext(element);
|
|
27022
|
-
|
|
27136
|
+
const lView = context ? context.lView : null;
|
|
27137
|
+
if (lView === null) {
|
|
27023
27138
|
return {};
|
|
27024
27139
|
}
|
|
27025
|
-
const lView = context.lView;
|
|
27026
27140
|
const tNodeAttrs = lView[TVIEW].data[context.nodeIndex].attrs;
|
|
27027
27141
|
const lowercaseTNodeAttrs = [];
|
|
27028
27142
|
// For debug nodes we take the element's attribute directly from the DOM since it allows us
|
|
@@ -27216,9 +27330,10 @@ function isPrimitiveValue(value) {
|
|
|
27216
27330
|
}
|
|
27217
27331
|
function _queryAll(parentElement, predicate, matches, elementsOnly) {
|
|
27218
27332
|
const context = getLContext(parentElement.nativeNode);
|
|
27219
|
-
|
|
27220
|
-
|
|
27221
|
-
|
|
27333
|
+
const lView = context ? context.lView : null;
|
|
27334
|
+
if (lView !== null) {
|
|
27335
|
+
const parentTNode = lView[TVIEW].data[context.nodeIndex];
|
|
27336
|
+
_queryNodeChildren(parentTNode, lView, predicate, matches, elementsOnly, parentElement.nativeNode);
|
|
27222
27337
|
}
|
|
27223
27338
|
else {
|
|
27224
27339
|
// If the context is null, then `parentElement` was either created with Renderer2 or native DOM
|
|
@@ -28587,6 +28702,18 @@ ApplicationModule.ɵinj = /*@__PURE__*/ ɵɵdefineInjector({});
|
|
|
28587
28702
|
type: NgModule
|
|
28588
28703
|
}], function () { return [{ type: ApplicationRef }]; }, null); })();
|
|
28589
28704
|
|
|
28705
|
+
/**
|
|
28706
|
+
* @license
|
|
28707
|
+
* Copyright Google LLC All Rights Reserved.
|
|
28708
|
+
*
|
|
28709
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
28710
|
+
* found in the LICENSE file at https://angular.io/license
|
|
28711
|
+
*/
|
|
28712
|
+
/** Coerces a value (typically a string) to a boolean. */
|
|
28713
|
+
function coerceToBoolean(value) {
|
|
28714
|
+
return typeof value === 'boolean' ? value : (value != null && value !== 'false');
|
|
28715
|
+
}
|
|
28716
|
+
|
|
28590
28717
|
/**
|
|
28591
28718
|
* @license
|
|
28592
28719
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -28744,5 +28871,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
|
28744
28871
|
* Generated bundle index. Do not edit.
|
|
28745
28872
|
*/
|
|
28746
28873
|
|
|
28747
|
-
export { ANALYZE_FOR_ENTRY_COMPONENTS, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, Directive, ElementRef, EmbeddedViewRef, ErrorHandler, EventEmitter, Host, HostBinding, HostListener, INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, ReflectiveInjector, ReflectiveKey, Renderer2, RendererFactory2, RendererStyleFlags2, ResolvedReflectiveFactory, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, asNativeElements, assertPlatform, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, inject, isDevMode, platformCore, resolveForwardRef, setTestabilityGetter, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, APP_ID_RANDOM_PROVIDER as ɵAPP_ID_RANDOM_PROVIDER, ChangeDetectorStatus as ɵChangeDetectorStatus, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, ViewRef$1 as ɵViewRef, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, detectChanges as ɵdetectChanges, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, getDebugNode as ɵgetDebugNode, getDebugNodeR2 as ɵgetDebugNodeR2, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getSanitizationBypassType as ɵgetSanitizationBypassType, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, isBoundToModule as ɵisBoundToModule, isDefaultChangeDetectionStrategy as ɵisDefaultChangeDetectionStrategy, isListLikeIterable as ɵisListLikeIterable, isObservable as ɵisObservable, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, ɵivyEnabled, makeDecorator as ɵmakeDecorator, markDirty as ɵmarkDirty, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, publishDefaultGlobalUtils$1 as ɵpublishDefaultGlobalUtils, publishGlobalUtil as ɵpublishGlobalUtil, registerLocaleData as ɵregisterLocaleData,
|
|
28874
|
+
export { ANALYZE_FOR_ENTRY_COMPONENTS, ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, Directive, ElementRef, EmbeddedViewRef, ErrorHandler, EventEmitter, Host, HostBinding, HostListener, INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, ReflectiveInjector, ReflectiveKey, Renderer2, RendererFactory2, RendererStyleFlags2, ResolvedReflectiveFactory, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, asNativeElements, assertPlatform, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, inject, isDevMode, platformCore, resolveForwardRef, setTestabilityGetter, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, APP_ID_RANDOM_PROVIDER as ɵAPP_ID_RANDOM_PROVIDER, ChangeDetectorStatus as ɵChangeDetectorStatus, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, ViewRef$1 as ɵViewRef, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, coerceToBoolean as ɵcoerceToBoolean, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, detectChanges as ɵdetectChanges, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, getDebugNode as ɵgetDebugNode, getDebugNodeR2 as ɵgetDebugNodeR2, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getSanitizationBypassType as ɵgetSanitizationBypassType, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, isBoundToModule as ɵisBoundToModule, isDefaultChangeDetectionStrategy as ɵisDefaultChangeDetectionStrategy, isListLikeIterable as ɵisListLikeIterable, isObservable as ɵisObservable, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, ɵivyEnabled, makeDecorator as ɵmakeDecorator, markDirty as ɵmarkDirty, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, publishDefaultGlobalUtils$1 as ɵpublishDefaultGlobalUtils, publishGlobalUtil as ɵpublishGlobalUtil, registerLocaleData as ɵregisterLocaleData, renderComponent as ɵrenderComponent, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setClassMetadata as ɵsetClassMetadata, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setLocaleId as ɵsetLocaleId, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, whenRendered as ɵwhenRendered, ɵɵCopyDefinitionFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcontentQuery, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryRefresh, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵviewQuery };
|
|
28748
28875
|
//# sourceMappingURL=core.mjs.map
|