@angular/core 14.0.0-next.1 → 14.0.0-next.12
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 +172 -126
- package/esm2020/src/application_init.mjs +4 -3
- package/esm2020/src/application_module.mjs +5 -104
- package/esm2020/src/application_ref.mjs +6 -24
- package/esm2020/src/application_tokens.mjs +14 -2
- 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 +137 -53
- package/esm2020/src/di/injector_compatibility.mjs +2 -2
- package/esm2020/src/di/reflective_provider.mjs +4 -4
- package/esm2020/src/i18n/tokens.mjs +39 -3
- package/esm2020/src/linker/compiler.mjs +4 -3
- 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 +35 -8
- 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 +22 -26
- 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/element.mjs +28 -7
- package/esm2020/src/render3/instructions/element_container.mjs +7 -1
- package/esm2020/src/render3/instructions/lview_debug.mjs +7 -4
- package/esm2020/src/render3/instructions/shared.mjs +50 -21
- 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/fake_async.mjs +3 -2
- 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 +784 -591
- package/fesm2015/core.mjs.map +1 -1
- package/fesm2015/testing.mjs +10 -3
- package/fesm2015/testing.mjs.map +1 -1
- package/fesm2020/core.mjs +784 -584
- package/fesm2020/core.mjs.map +1 -1
- package/fesm2020/testing.mjs +10 -3
- package/fesm2020/testing.mjs.map +1 -1
- package/package.json +2 -2
- package/schematics/migrations/entry-components/util.js +2 -2
- package/schematics/migrations/path-match-type/index.d.ts +11 -0
- package/schematics/migrations/path-match-type/index.js +95 -0
- package/schematics/migrations/path-match-type/transform.d.ts +19 -0
- package/schematics/migrations/path-match-type/transform.js +48 -0
- package/schematics/migrations/path-match-type/update_recorder.d.ts +18 -0
- package/schematics/migrations/path-match-type/update_recorder.js +20 -0
- package/schematics/migrations/path-match-type/util.d.ts +11 -0
- package/schematics/migrations/path-match-type/util.js +106 -0
- 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 -47
- package/schematics/migrations.json +8 -3
- package/schematics/utils/import_manager.js +11 -22
- package/schematics/utils/typescript/imports.js +5 -9
- package/schematics/utils/typescript/parse_tsconfig.js +6 -2
- package/schematics/utils/typescript/symbol.js +4 -3
- package/testing/testing.d.ts +3 -2
- 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/fesm2015/core.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v14.0.0-next.
|
|
2
|
+
* @license Angular v14.0.0-next.12
|
|
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
|
}
|
|
@@ -1210,6 +1212,8 @@ const DECLARATION_COMPONENT_VIEW = 16;
|
|
|
1210
1212
|
const DECLARATION_LCONTAINER = 17;
|
|
1211
1213
|
const PREORDER_HOOK_FLAGS = 18;
|
|
1212
1214
|
const QUERIES = 19;
|
|
1215
|
+
const ID = 20;
|
|
1216
|
+
const EMBEDDED_VIEW_INJECTOR = 21;
|
|
1213
1217
|
/**
|
|
1214
1218
|
* Size of LView's header. Necessary to adjust for it when setting slots.
|
|
1215
1219
|
*
|
|
@@ -1217,7 +1221,7 @@ const QUERIES = 19;
|
|
|
1217
1221
|
* instruction index into `LView` index. All other indexes should be in the `LView` index space and
|
|
1218
1222
|
* there should be no need to refer to `HEADER_OFFSET` anywhere else.
|
|
1219
1223
|
*/
|
|
1220
|
-
const HEADER_OFFSET =
|
|
1224
|
+
const HEADER_OFFSET = 22;
|
|
1221
1225
|
/**
|
|
1222
1226
|
* Converts `TViewType` into human readable text.
|
|
1223
1227
|
* Make sure this matches with `TViewType`
|
|
@@ -1921,6 +1925,7 @@ function getLView() {
|
|
|
1921
1925
|
function getTView() {
|
|
1922
1926
|
return instructionState.lFrame.tView;
|
|
1923
1927
|
}
|
|
1928
|
+
// TODO(crisbeto): revert the @noinline once Closure issue is resolved.
|
|
1924
1929
|
/**
|
|
1925
1930
|
* Restores `contextViewData` to the given OpaqueViewState instance.
|
|
1926
1931
|
*
|
|
@@ -1932,11 +1937,22 @@ function getTView() {
|
|
|
1932
1937
|
* @returns Context of the restored OpaqueViewState instance.
|
|
1933
1938
|
*
|
|
1934
1939
|
* @codeGenApi
|
|
1940
|
+
* @noinline Disable inlining due to issue with Closure in listeners inside embedded views.
|
|
1935
1941
|
*/
|
|
1936
1942
|
function ɵɵrestoreView(viewToRestore) {
|
|
1937
1943
|
instructionState.lFrame.contextLView = viewToRestore;
|
|
1938
1944
|
return viewToRestore[CONTEXT];
|
|
1939
1945
|
}
|
|
1946
|
+
/**
|
|
1947
|
+
* Clears the view set in `ɵɵrestoreView` from memory. Returns the passed in
|
|
1948
|
+
* value so that it can be used as a return value of an instruction.
|
|
1949
|
+
*
|
|
1950
|
+
* @codeGenApi
|
|
1951
|
+
*/
|
|
1952
|
+
function ɵɵresetView(value) {
|
|
1953
|
+
instructionState.lFrame.contextLView = null;
|
|
1954
|
+
return value;
|
|
1955
|
+
}
|
|
1940
1956
|
function getCurrentTNode() {
|
|
1941
1957
|
let currentTNode = getCurrentTNodePlaceholderOk();
|
|
1942
1958
|
while (currentTNode !== null && currentTNode.type === 64 /* Placeholder */) {
|
|
@@ -1968,7 +1984,9 @@ function setCurrentTNodeAsParent() {
|
|
|
1968
1984
|
instructionState.lFrame.isParent = true;
|
|
1969
1985
|
}
|
|
1970
1986
|
function getContextLView() {
|
|
1971
|
-
|
|
1987
|
+
const contextLView = instructionState.lFrame.contextLView;
|
|
1988
|
+
ngDevMode && assertDefined(contextLView, 'contextLView must be defined.');
|
|
1989
|
+
return contextLView;
|
|
1972
1990
|
}
|
|
1973
1991
|
function isInCheckNoChangesMode() {
|
|
1974
1992
|
// TODO(misko): remove this from the LView since it is ngDevMode=true mode only.
|
|
@@ -2467,7 +2485,7 @@ function incrementInitPhaseFlags(lView, initPhase) {
|
|
|
2467
2485
|
assertNotEqual(initPhase, 3 /* InitPhaseCompleted */, 'Init hooks phase should not be incremented after all init hooks have been run.');
|
|
2468
2486
|
let flags = lView[FLAGS];
|
|
2469
2487
|
if ((flags & 3 /* InitPhaseStateMask */) === initPhase) {
|
|
2470
|
-
flags &=
|
|
2488
|
+
flags &= 4095 /* IndexWithinInitPhaseReset */;
|
|
2471
2489
|
flags += 1 /* InitPhaseStateIncrementer */;
|
|
2472
2490
|
lView[FLAGS] = flags;
|
|
2473
2491
|
}
|
|
@@ -2531,12 +2549,12 @@ function callHook(currentView, initPhase, arr, i) {
|
|
|
2531
2549
|
const directiveIndex = isInitHook ? -arr[i] : arr[i];
|
|
2532
2550
|
const directive = currentView[directiveIndex];
|
|
2533
2551
|
if (isInitHook) {
|
|
2534
|
-
const indexWithintInitPhase = currentView[FLAGS] >>
|
|
2552
|
+
const indexWithintInitPhase = currentView[FLAGS] >> 12 /* IndexWithinInitPhaseShift */;
|
|
2535
2553
|
// The init phase state must be always checked here as it may have been recursively updated.
|
|
2536
2554
|
if (indexWithintInitPhase <
|
|
2537
2555
|
(currentView[PREORDER_HOOK_FLAGS] >> 16 /* NumberOfInitHooksCalledShift */) &&
|
|
2538
2556
|
(currentView[FLAGS] & 3 /* InitPhaseStateMask */) === initPhase) {
|
|
2539
|
-
currentView[FLAGS] +=
|
|
2557
|
+
currentView[FLAGS] += 4096 /* IndexWithinInitPhaseIncrementer */;
|
|
2540
2558
|
profiler(4 /* LifecycleHookStart */, directive, hook);
|
|
2541
2559
|
try {
|
|
2542
2560
|
hook.call(directive);
|
|
@@ -3097,6 +3115,8 @@ const BLOOM_MASK = BLOOM_SIZE - 1;
|
|
|
3097
3115
|
const BLOOM_BUCKET_BITS = 5;
|
|
3098
3116
|
/** Counter used to generate unique IDs for directives. */
|
|
3099
3117
|
let nextNgElementId = 0;
|
|
3118
|
+
/** Value used when something wasn't found by an injector. */
|
|
3119
|
+
const NOT_FOUND = {};
|
|
3100
3120
|
/**
|
|
3101
3121
|
* Registers this directive as present in its node's injector by flipping the directive's
|
|
3102
3122
|
* corresponding bit in the injector's bloom filter.
|
|
@@ -3208,23 +3228,7 @@ function getParentInjectorLocation(tNode, lView) {
|
|
|
3208
3228
|
// `LView` hierarchy and look for it. If we walk of the top, that means that there is no parent
|
|
3209
3229
|
// `NodeInjector`.
|
|
3210
3230
|
while (lViewCursor !== null) {
|
|
3211
|
-
|
|
3212
|
-
const tView = lViewCursor[TVIEW];
|
|
3213
|
-
const tViewType = tView.type;
|
|
3214
|
-
if (tViewType === 2 /* Embedded */) {
|
|
3215
|
-
ngDevMode &&
|
|
3216
|
-
assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');
|
|
3217
|
-
parentTNode = tView.declTNode;
|
|
3218
|
-
}
|
|
3219
|
-
else if (tViewType === 1 /* Component */) {
|
|
3220
|
-
// Components don't have `TView.declTNode` because each instance of component could be
|
|
3221
|
-
// inserted in different location, hence `TView.declTNode` is meaningless.
|
|
3222
|
-
parentTNode = lViewCursor[T_HOST];
|
|
3223
|
-
}
|
|
3224
|
-
else {
|
|
3225
|
-
ngDevMode && assertEqual(tView.type, 0 /* Root */, 'Root type expected');
|
|
3226
|
-
parentTNode = null;
|
|
3227
|
-
}
|
|
3231
|
+
parentTNode = getTNodeFromLView(lViewCursor);
|
|
3228
3232
|
if (parentTNode === null) {
|
|
3229
3233
|
// If we have no parent, than we are done.
|
|
3230
3234
|
return NO_PARENT_INJECTOR;
|
|
@@ -3385,93 +3389,116 @@ function lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {
|
|
|
3385
3389
|
*/
|
|
3386
3390
|
function getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default, notFoundValue) {
|
|
3387
3391
|
if (tNode !== null) {
|
|
3388
|
-
|
|
3389
|
-
//
|
|
3390
|
-
|
|
3391
|
-
|
|
3392
|
-
if (
|
|
3393
|
-
|
|
3394
|
-
// flag, the module injector is not searched for that token in Ivy.
|
|
3395
|
-
return (flags & InjectFlags.Host) ?
|
|
3396
|
-
notFoundValueOrThrow(notFoundValue, token, flags) :
|
|
3397
|
-
lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
|
|
3392
|
+
// If the view or any of its ancestors have an embedded
|
|
3393
|
+
// view injector, we have to look it up there first.
|
|
3394
|
+
if (lView[FLAGS] & 2048 /* HasEmbeddedViewInjector */) {
|
|
3395
|
+
const embeddedInjectorValue = lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, NOT_FOUND);
|
|
3396
|
+
if (embeddedInjectorValue !== NOT_FOUND) {
|
|
3397
|
+
return embeddedInjectorValue;
|
|
3398
3398
|
}
|
|
3399
|
-
|
|
3400
|
-
|
|
3401
|
-
|
|
3402
|
-
|
|
3403
|
-
|
|
3404
|
-
|
|
3405
|
-
|
|
3406
|
-
|
|
3399
|
+
}
|
|
3400
|
+
// Otherwise try the node injector.
|
|
3401
|
+
const value = lookupTokenUsingNodeInjector(tNode, lView, token, flags, NOT_FOUND);
|
|
3402
|
+
if (value !== NOT_FOUND) {
|
|
3403
|
+
return value;
|
|
3404
|
+
}
|
|
3405
|
+
}
|
|
3406
|
+
// Finally, fall back to the module injector.
|
|
3407
|
+
return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
|
|
3408
|
+
}
|
|
3409
|
+
/**
|
|
3410
|
+
* Returns the value associated to the given token from the node injector.
|
|
3411
|
+
*
|
|
3412
|
+
* @param tNode The Node where the search for the injector should start
|
|
3413
|
+
* @param lView The `LView` that contains the `tNode`
|
|
3414
|
+
* @param token The token to look for
|
|
3415
|
+
* @param flags Injection flags
|
|
3416
|
+
* @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
|
|
3417
|
+
* @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
|
|
3418
|
+
*/
|
|
3419
|
+
function lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue) {
|
|
3420
|
+
const bloomHash = bloomHashBitOrFactory(token);
|
|
3421
|
+
// If the ID stored here is a function, this is a special object like ElementRef or TemplateRef
|
|
3422
|
+
// so just call the factory function to create it.
|
|
3423
|
+
if (typeof bloomHash === 'function') {
|
|
3424
|
+
if (!enterDI(lView, tNode, flags)) {
|
|
3425
|
+
// Failed to enter DI, try module injector instead. If a token is injected with the @Host
|
|
3426
|
+
// flag, the module injector is not searched for that token in Ivy.
|
|
3427
|
+
return (flags & InjectFlags.Host) ?
|
|
3428
|
+
notFoundValueOrThrow(notFoundValue, token, flags) :
|
|
3429
|
+
lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
|
|
3430
|
+
}
|
|
3431
|
+
try {
|
|
3432
|
+
const value = bloomHash(flags);
|
|
3433
|
+
if (value == null && !(flags & InjectFlags.Optional)) {
|
|
3434
|
+
throwProviderNotFoundError(token);
|
|
3407
3435
|
}
|
|
3408
|
-
|
|
3409
|
-
|
|
3410
|
-
}
|
|
3411
|
-
}
|
|
3412
|
-
else if (typeof bloomHash === 'number') {
|
|
3413
|
-
// A reference to the previous injector TView that was found while climbing the element
|
|
3414
|
-
// injector tree. This is used to know if viewProviders can be accessed on the current
|
|
3415
|
-
// injector.
|
|
3416
|
-
let previousTView = null;
|
|
3417
|
-
let injectorIndex = getInjectorIndex(tNode, lView);
|
|
3418
|
-
let parentLocation = NO_PARENT_INJECTOR;
|
|
3419
|
-
let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
|
|
3420
|
-
// If we should skip this injector, or if there is no injector on this node, start by
|
|
3421
|
-
// searching the parent injector.
|
|
3422
|
-
if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
|
|
3423
|
-
parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) :
|
|
3424
|
-
lView[injectorIndex + 8 /* PARENT */];
|
|
3425
|
-
if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {
|
|
3426
|
-
injectorIndex = -1;
|
|
3427
|
-
}
|
|
3428
|
-
else {
|
|
3429
|
-
previousTView = lView[TVIEW];
|
|
3430
|
-
injectorIndex = getParentInjectorIndex(parentLocation);
|
|
3431
|
-
lView = getParentInjectorView(parentLocation, lView);
|
|
3432
|
-
}
|
|
3436
|
+
else {
|
|
3437
|
+
return value;
|
|
3433
3438
|
}
|
|
3434
|
-
|
|
3435
|
-
|
|
3436
|
-
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
|
|
3440
|
-
|
|
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
|
-
|
|
3439
|
+
}
|
|
3440
|
+
finally {
|
|
3441
|
+
leaveDI();
|
|
3442
|
+
}
|
|
3443
|
+
}
|
|
3444
|
+
else if (typeof bloomHash === 'number') {
|
|
3445
|
+
// A reference to the previous injector TView that was found while climbing the element
|
|
3446
|
+
// injector tree. This is used to know if viewProviders can be accessed on the current
|
|
3447
|
+
// injector.
|
|
3448
|
+
let previousTView = null;
|
|
3449
|
+
let injectorIndex = getInjectorIndex(tNode, lView);
|
|
3450
|
+
let parentLocation = NO_PARENT_INJECTOR;
|
|
3451
|
+
let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
|
|
3452
|
+
// If we should skip this injector, or if there is no injector on this node, start by
|
|
3453
|
+
// searching the parent injector.
|
|
3454
|
+
if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
|
|
3455
|
+
parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) :
|
|
3456
|
+
lView[injectorIndex + 8 /* PARENT */];
|
|
3457
|
+
if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {
|
|
3458
|
+
injectorIndex = -1;
|
|
3459
|
+
}
|
|
3460
|
+
else {
|
|
3461
|
+
previousTView = lView[TVIEW];
|
|
3462
|
+
injectorIndex = getParentInjectorIndex(parentLocation);
|
|
3463
|
+
lView = getParentInjectorView(parentLocation, lView);
|
|
3464
|
+
}
|
|
3465
|
+
}
|
|
3466
|
+
// Traverse up the injector tree until we find a potential match or until we know there
|
|
3467
|
+
// *isn't* a match.
|
|
3468
|
+
while (injectorIndex !== -1) {
|
|
3469
|
+
ngDevMode && assertNodeInjector(lView, injectorIndex);
|
|
3470
|
+
// Check the current injector. If it matches, see if it contains token.
|
|
3471
|
+
const tView = lView[TVIEW];
|
|
3472
|
+
ngDevMode &&
|
|
3473
|
+
assertTNodeForLView(tView.data[injectorIndex + 8 /* TNODE */], lView);
|
|
3474
|
+
if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {
|
|
3475
|
+
// At this point, we have an injector which *may* contain the token, so we step through
|
|
3476
|
+
// the providers and directives associated with the injector's corresponding node to get
|
|
3477
|
+
// the instance.
|
|
3478
|
+
const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);
|
|
3479
|
+
if (instance !== NOT_FOUND) {
|
|
3480
|
+
return instance;
|
|
3466
3481
|
}
|
|
3467
3482
|
}
|
|
3483
|
+
parentLocation = lView[injectorIndex + 8 /* PARENT */];
|
|
3484
|
+
if (parentLocation !== NO_PARENT_INJECTOR &&
|
|
3485
|
+
shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8 /* TNODE */] === hostTElementNode) &&
|
|
3486
|
+
bloomHasToken(bloomHash, injectorIndex, lView)) {
|
|
3487
|
+
// The def wasn't found anywhere on this node, so it was a false positive.
|
|
3488
|
+
// Traverse up the tree and continue searching.
|
|
3489
|
+
previousTView = tView;
|
|
3490
|
+
injectorIndex = getParentInjectorIndex(parentLocation);
|
|
3491
|
+
lView = getParentInjectorView(parentLocation, lView);
|
|
3492
|
+
}
|
|
3493
|
+
else {
|
|
3494
|
+
// If we should not search parent OR If the ancestor bloom filter value does not have the
|
|
3495
|
+
// bit corresponding to the directive we can give up on traversing up to find the specific
|
|
3496
|
+
// injector.
|
|
3497
|
+
injectorIndex = -1;
|
|
3498
|
+
}
|
|
3468
3499
|
}
|
|
3469
3500
|
}
|
|
3470
|
-
return
|
|
3471
|
-
}
|
|
3472
|
-
const NOT_FOUND = {};
|
|
3473
|
-
function createNodeInjector() {
|
|
3474
|
-
return new NodeInjector(getCurrentTNode(), getLView());
|
|
3501
|
+
return notFoundValue;
|
|
3475
3502
|
}
|
|
3476
3503
|
function searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {
|
|
3477
3504
|
const currentTView = lView[TVIEW];
|
|
@@ -3645,6 +3672,10 @@ class NodeInjector {
|
|
|
3645
3672
|
return getOrCreateInjectable(this._tNode, this._lView, token, flags, notFoundValue);
|
|
3646
3673
|
}
|
|
3647
3674
|
}
|
|
3675
|
+
/** Creates a `NodeInjector` for the current node. */
|
|
3676
|
+
function createNodeInjector() {
|
|
3677
|
+
return new NodeInjector(getCurrentTNode(), getLView());
|
|
3678
|
+
}
|
|
3648
3679
|
/**
|
|
3649
3680
|
* @codeGenApi
|
|
3650
3681
|
*/
|
|
@@ -3683,6 +3714,73 @@ function getFactoryOf(type) {
|
|
|
3683
3714
|
}
|
|
3684
3715
|
return getFactoryDef(type);
|
|
3685
3716
|
}
|
|
3717
|
+
/**
|
|
3718
|
+
* Returns a value from the closest embedded or node injector.
|
|
3719
|
+
*
|
|
3720
|
+
* @param tNode The Node where the search for the injector should start
|
|
3721
|
+
* @param lView The `LView` that contains the `tNode`
|
|
3722
|
+
* @param token The token to look for
|
|
3723
|
+
* @param flags Injection flags
|
|
3724
|
+
* @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
|
|
3725
|
+
* @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
|
|
3726
|
+
*/
|
|
3727
|
+
function lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundValue) {
|
|
3728
|
+
let currentTNode = tNode;
|
|
3729
|
+
let currentLView = lView;
|
|
3730
|
+
// When an LView with an embedded view injector is inserted, it'll likely be interlaced with
|
|
3731
|
+
// nodes who may have injectors (e.g. node injector -> embedded view injector -> node injector).
|
|
3732
|
+
// Since the bloom filters for the node injectors have already been constructed and we don't
|
|
3733
|
+
// have a way of extracting the records from an injector, the only way to maintain the correct
|
|
3734
|
+
// hierarchy when resolving the value is to walk it node-by-node while attempting to resolve
|
|
3735
|
+
// the token at each level.
|
|
3736
|
+
while (currentTNode !== null && currentLView !== null &&
|
|
3737
|
+
(currentLView[FLAGS] & 2048 /* HasEmbeddedViewInjector */) &&
|
|
3738
|
+
!(currentLView[FLAGS] & 512 /* IsRoot */)) {
|
|
3739
|
+
ngDevMode && assertTNodeForLView(currentTNode, currentLView);
|
|
3740
|
+
// Note that this lookup on the node injector is using the `Self` flag, because
|
|
3741
|
+
// we don't want the node injector to look at any parent injectors since we
|
|
3742
|
+
// may hit the embedded view injector first.
|
|
3743
|
+
const nodeInjectorValue = lookupTokenUsingNodeInjector(currentTNode, currentLView, token, flags | InjectFlags.Self, NOT_FOUND);
|
|
3744
|
+
if (nodeInjectorValue !== NOT_FOUND) {
|
|
3745
|
+
return nodeInjectorValue;
|
|
3746
|
+
}
|
|
3747
|
+
// Has an explicit type due to a TS bug: https://github.com/microsoft/TypeScript/issues/33191
|
|
3748
|
+
let parentTNode = currentTNode.parent;
|
|
3749
|
+
// `TNode.parent` includes the parent within the current view only. If it doesn't exist,
|
|
3750
|
+
// it means that we've hit the view boundary and we need to go up to the next view.
|
|
3751
|
+
if (!parentTNode) {
|
|
3752
|
+
// Before we go to the next LView, check if the token exists on the current embedded injector.
|
|
3753
|
+
const embeddedViewInjector = currentLView[EMBEDDED_VIEW_INJECTOR];
|
|
3754
|
+
if (embeddedViewInjector) {
|
|
3755
|
+
const embeddedViewInjectorValue = embeddedViewInjector.get(token, NOT_FOUND, flags);
|
|
3756
|
+
if (embeddedViewInjectorValue !== NOT_FOUND) {
|
|
3757
|
+
return embeddedViewInjectorValue;
|
|
3758
|
+
}
|
|
3759
|
+
}
|
|
3760
|
+
// Otherwise keep going up the tree.
|
|
3761
|
+
parentTNode = getTNodeFromLView(currentLView);
|
|
3762
|
+
currentLView = currentLView[DECLARATION_VIEW];
|
|
3763
|
+
}
|
|
3764
|
+
currentTNode = parentTNode;
|
|
3765
|
+
}
|
|
3766
|
+
return notFoundValue;
|
|
3767
|
+
}
|
|
3768
|
+
/** Gets the TNode associated with an LView inside of the declaration view. */
|
|
3769
|
+
function getTNodeFromLView(lView) {
|
|
3770
|
+
const tView = lView[TVIEW];
|
|
3771
|
+
const tViewType = tView.type;
|
|
3772
|
+
// The parent pointer differs based on `TView.type`.
|
|
3773
|
+
if (tViewType === 2 /* Embedded */) {
|
|
3774
|
+
ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');
|
|
3775
|
+
return tView.declTNode;
|
|
3776
|
+
}
|
|
3777
|
+
else if (tViewType === 1 /* Component */) {
|
|
3778
|
+
// Components don't have `TView.declTNode` because each instance of component could be
|
|
3779
|
+
// inserted in different location, hence `TView.declTNode` is meaningless.
|
|
3780
|
+
return lView[T_HOST];
|
|
3781
|
+
}
|
|
3782
|
+
return null;
|
|
3783
|
+
}
|
|
3686
3784
|
|
|
3687
3785
|
/**
|
|
3688
3786
|
* @license
|
|
@@ -4492,9 +4590,6 @@ class ReflectionCapabilities {
|
|
|
4492
4590
|
constructor(reflect) {
|
|
4493
4591
|
this._reflect = reflect || _global['Reflect'];
|
|
4494
4592
|
}
|
|
4495
|
-
isReflectionEnabled() {
|
|
4496
|
-
return true;
|
|
4497
|
-
}
|
|
4498
4593
|
factory(t) {
|
|
4499
4594
|
return (...args) => new t(...args);
|
|
4500
4595
|
}
|
|
@@ -4666,38 +4761,6 @@ class ReflectionCapabilities {
|
|
|
4666
4761
|
hasLifecycleHook(type, lcProperty) {
|
|
4667
4762
|
return type instanceof Type && lcProperty in type.prototype;
|
|
4668
4763
|
}
|
|
4669
|
-
guards(type) {
|
|
4670
|
-
return {};
|
|
4671
|
-
}
|
|
4672
|
-
getter(name) {
|
|
4673
|
-
return new Function('o', 'return o.' + name + ';');
|
|
4674
|
-
}
|
|
4675
|
-
setter(name) {
|
|
4676
|
-
return new Function('o', 'v', 'return o.' + name + ' = v;');
|
|
4677
|
-
}
|
|
4678
|
-
method(name) {
|
|
4679
|
-
const functionBody = `if (!o.${name}) throw new Error('"${name}" is undefined');
|
|
4680
|
-
return o.${name}.apply(o, args);`;
|
|
4681
|
-
return new Function('o', 'args', functionBody);
|
|
4682
|
-
}
|
|
4683
|
-
// There is not a concept of import uri in Js, but this is useful in developing Dart applications.
|
|
4684
|
-
importUri(type) {
|
|
4685
|
-
// StaticSymbol
|
|
4686
|
-
if (typeof type === 'object' && type['filePath']) {
|
|
4687
|
-
return type['filePath'];
|
|
4688
|
-
}
|
|
4689
|
-
// Runtime type
|
|
4690
|
-
return `./${stringify(type)}`;
|
|
4691
|
-
}
|
|
4692
|
-
resourceUri(type) {
|
|
4693
|
-
return `./${stringify(type)}`;
|
|
4694
|
-
}
|
|
4695
|
-
resolveIdentifier(name, moduleUrl, members, runtime) {
|
|
4696
|
-
return runtime;
|
|
4697
|
-
}
|
|
4698
|
-
resolveEnum(enumIdentifier, name) {
|
|
4699
|
-
return enumIdentifier[name];
|
|
4700
|
-
}
|
|
4701
4764
|
}
|
|
4702
4765
|
function convertTsickleDecoratorIntoMetadata(decoratorInvocations) {
|
|
4703
4766
|
if (!decoratorInvocations) {
|
|
@@ -4885,7 +4948,7 @@ function catchInjectorError(e, token, injectorErrorName, source) {
|
|
|
4885
4948
|
throw e;
|
|
4886
4949
|
}
|
|
4887
4950
|
function formatError(text, obj, injectorErrorName, source = null) {
|
|
4888
|
-
text = text && text.charAt(0) === '\n' && text.charAt(1) == NO_NEW_LINE ? text.
|
|
4951
|
+
text = text && text.charAt(0) === '\n' && text.charAt(1) == NO_NEW_LINE ? text.slice(2) : text;
|
|
4889
4952
|
let context = stringify(obj);
|
|
4890
4953
|
if (Array.isArray(obj)) {
|
|
4891
4954
|
context = obj.map(stringify).join(' -> ');
|
|
@@ -5144,6 +5207,60 @@ function componentDefResolved(type) {
|
|
|
5144
5207
|
componentDefPendingResolution.delete(type);
|
|
5145
5208
|
}
|
|
5146
5209
|
|
|
5210
|
+
/**
|
|
5211
|
+
* @license
|
|
5212
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5213
|
+
*
|
|
5214
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
5215
|
+
* found in the LICENSE file at https://angular.io/license
|
|
5216
|
+
*/
|
|
5217
|
+
/**
|
|
5218
|
+
* Map of module-id to the corresponding NgModule.
|
|
5219
|
+
*/
|
|
5220
|
+
const modules = new Map();
|
|
5221
|
+
/**
|
|
5222
|
+
* Whether to check for duplicate NgModule registrations.
|
|
5223
|
+
*
|
|
5224
|
+
* This can be disabled for testing.
|
|
5225
|
+
*/
|
|
5226
|
+
let checkForDuplicateNgModules = true;
|
|
5227
|
+
function assertSameOrNotExisting(id, type, incoming) {
|
|
5228
|
+
if (type && type !== incoming && checkForDuplicateNgModules) {
|
|
5229
|
+
throw new Error(`Duplicate module registered for ${id} - ${stringify(type)} vs ${stringify(type.name)}`);
|
|
5230
|
+
}
|
|
5231
|
+
}
|
|
5232
|
+
/**
|
|
5233
|
+
* Adds the given NgModule type to Angular's NgModule registry.
|
|
5234
|
+
*
|
|
5235
|
+
* This is generated as a side-effect of NgModule compilation. Note that the `id` is passed in
|
|
5236
|
+
* explicitly and not read from the NgModule definition. This is for two reasons: it avoids a
|
|
5237
|
+
* megamorphic read, and in JIT there's a chicken-and-egg problem where the NgModule may not be
|
|
5238
|
+
* fully resolved when it's registered.
|
|
5239
|
+
*
|
|
5240
|
+
* @codeGenApi
|
|
5241
|
+
*/
|
|
5242
|
+
function registerNgModuleType(ngModuleType, id) {
|
|
5243
|
+
const existing = modules.get(id) || null;
|
|
5244
|
+
assertSameOrNotExisting(id, existing, ngModuleType);
|
|
5245
|
+
modules.set(id, ngModuleType);
|
|
5246
|
+
}
|
|
5247
|
+
function clearModulesForTest() {
|
|
5248
|
+
modules.clear();
|
|
5249
|
+
}
|
|
5250
|
+
function getRegisteredNgModuleType(id) {
|
|
5251
|
+
return modules.get(id);
|
|
5252
|
+
}
|
|
5253
|
+
/**
|
|
5254
|
+
* Control whether the NgModule registration system enforces that each NgModule type registered has
|
|
5255
|
+
* a unique id.
|
|
5256
|
+
*
|
|
5257
|
+
* This is useful for testing as the NgModule registry cannot be properly reset between tests with
|
|
5258
|
+
* Angular's current API.
|
|
5259
|
+
*/
|
|
5260
|
+
function setAllowDuplicateNgModuleIdsForTest(allowDuplicates) {
|
|
5261
|
+
checkForDuplicateNgModules = !allowDuplicates;
|
|
5262
|
+
}
|
|
5263
|
+
|
|
5147
5264
|
/**
|
|
5148
5265
|
* @license
|
|
5149
5266
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -6155,6 +6272,78 @@ function getSanitizer() {
|
|
|
6155
6272
|
return lView && lView[SANITIZER];
|
|
6156
6273
|
}
|
|
6157
6274
|
|
|
6275
|
+
/**
|
|
6276
|
+
* @license
|
|
6277
|
+
* Copyright Google LLC All Rights Reserved.
|
|
6278
|
+
*
|
|
6279
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6280
|
+
* found in the LICENSE file at https://angular.io/license
|
|
6281
|
+
*/
|
|
6282
|
+
// Keeps track of the currently-active LViews.
|
|
6283
|
+
const TRACKED_LVIEWS = new Map();
|
|
6284
|
+
// Used for generating unique IDs for LViews.
|
|
6285
|
+
let uniqueIdCounter = 0;
|
|
6286
|
+
/** Gets a unique ID that can be assigned to an LView. */
|
|
6287
|
+
function getUniqueLViewId() {
|
|
6288
|
+
return uniqueIdCounter++;
|
|
6289
|
+
}
|
|
6290
|
+
/** Starts tracking an LView. */
|
|
6291
|
+
function registerLView(lView) {
|
|
6292
|
+
ngDevMode && assertNumber(lView[ID], 'LView must have an ID in order to be registered');
|
|
6293
|
+
TRACKED_LVIEWS.set(lView[ID], lView);
|
|
6294
|
+
}
|
|
6295
|
+
/** Gets an LView by its unique ID. */
|
|
6296
|
+
function getLViewById(id) {
|
|
6297
|
+
ngDevMode && assertNumber(id, 'ID used for LView lookup must be a number');
|
|
6298
|
+
return TRACKED_LVIEWS.get(id) || null;
|
|
6299
|
+
}
|
|
6300
|
+
/** Stops tracking an LView. */
|
|
6301
|
+
function unregisterLView(lView) {
|
|
6302
|
+
ngDevMode && assertNumber(lView[ID], 'Cannot stop tracking an LView that does not have an ID');
|
|
6303
|
+
TRACKED_LVIEWS.delete(lView[ID]);
|
|
6304
|
+
}
|
|
6305
|
+
|
|
6306
|
+
/**
|
|
6307
|
+
* @license
|
|
6308
|
+
* Copyright Google LLC All Rights Reserved.
|
|
6309
|
+
*
|
|
6310
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6311
|
+
* found in the LICENSE file at https://angular.io/license
|
|
6312
|
+
*/
|
|
6313
|
+
/**
|
|
6314
|
+
* The internal view context which is specific to a given DOM element, directive or
|
|
6315
|
+
* component instance. Each value in here (besides the LView and element node details)
|
|
6316
|
+
* can be present, null or undefined. If undefined then it implies the value has not been
|
|
6317
|
+
* looked up yet, otherwise, if null, then a lookup was executed and nothing was found.
|
|
6318
|
+
*
|
|
6319
|
+
* Each value will get filled when the respective value is examined within the getContext
|
|
6320
|
+
* function. The component, element and each directive instance will share the same instance
|
|
6321
|
+
* of the context.
|
|
6322
|
+
*/
|
|
6323
|
+
class LContext {
|
|
6324
|
+
constructor(
|
|
6325
|
+
/**
|
|
6326
|
+
* ID of the component's parent view data.
|
|
6327
|
+
*/
|
|
6328
|
+
lViewId,
|
|
6329
|
+
/**
|
|
6330
|
+
* The index instance of the node.
|
|
6331
|
+
*/
|
|
6332
|
+
nodeIndex,
|
|
6333
|
+
/**
|
|
6334
|
+
* The instance of the DOM node that is attached to the lNode.
|
|
6335
|
+
*/
|
|
6336
|
+
native) {
|
|
6337
|
+
this.lViewId = lViewId;
|
|
6338
|
+
this.nodeIndex = nodeIndex;
|
|
6339
|
+
this.native = native;
|
|
6340
|
+
}
|
|
6341
|
+
/** Component's parent view data. */
|
|
6342
|
+
get lView() {
|
|
6343
|
+
return getLViewById(this.lViewId);
|
|
6344
|
+
}
|
|
6345
|
+
}
|
|
6346
|
+
|
|
6158
6347
|
/**
|
|
6159
6348
|
* @license
|
|
6160
6349
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -6187,7 +6376,7 @@ function getLContext(target) {
|
|
|
6187
6376
|
if (mpValue) {
|
|
6188
6377
|
// only when it's an array is it considered an LView instance
|
|
6189
6378
|
// ... otherwise it's an already constructed LContext instance
|
|
6190
|
-
if (
|
|
6379
|
+
if (isLView(mpValue)) {
|
|
6191
6380
|
const lView = mpValue;
|
|
6192
6381
|
let nodeIndex;
|
|
6193
6382
|
let component = undefined;
|
|
@@ -6246,13 +6435,7 @@ function getLContext(target) {
|
|
|
6246
6435
|
while (parent = parent.parentNode) {
|
|
6247
6436
|
const parentContext = readPatchedData(parent);
|
|
6248
6437
|
if (parentContext) {
|
|
6249
|
-
|
|
6250
|
-
if (Array.isArray(parentContext)) {
|
|
6251
|
-
lView = parentContext;
|
|
6252
|
-
}
|
|
6253
|
-
else {
|
|
6254
|
-
lView = parentContext.lView;
|
|
6255
|
-
}
|
|
6438
|
+
const lView = Array.isArray(parentContext) ? parentContext : parentContext.lView;
|
|
6256
6439
|
// the edge of the app was also reached here through another means
|
|
6257
6440
|
// (maybe because the DOM was changed manually).
|
|
6258
6441
|
if (!lView) {
|
|
@@ -6275,14 +6458,7 @@ function getLContext(target) {
|
|
|
6275
6458
|
* Creates an empty instance of a `LContext` context
|
|
6276
6459
|
*/
|
|
6277
6460
|
function createLContext(lView, nodeIndex, native) {
|
|
6278
|
-
return
|
|
6279
|
-
lView,
|
|
6280
|
-
nodeIndex,
|
|
6281
|
-
native,
|
|
6282
|
-
component: undefined,
|
|
6283
|
-
directives: undefined,
|
|
6284
|
-
localRefs: undefined,
|
|
6285
|
-
};
|
|
6461
|
+
return new LContext(lView[ID], nodeIndex, native);
|
|
6286
6462
|
}
|
|
6287
6463
|
/**
|
|
6288
6464
|
* Takes a component instance and returns the view for that component.
|
|
@@ -6291,21 +6467,24 @@ function createLContext(lView, nodeIndex, native) {
|
|
|
6291
6467
|
* @returns The component's view
|
|
6292
6468
|
*/
|
|
6293
6469
|
function getComponentViewByInstance(componentInstance) {
|
|
6294
|
-
let
|
|
6295
|
-
let
|
|
6296
|
-
if (
|
|
6297
|
-
const
|
|
6298
|
-
|
|
6299
|
-
|
|
6470
|
+
let patchedData = readPatchedData(componentInstance);
|
|
6471
|
+
let lView;
|
|
6472
|
+
if (isLView(patchedData)) {
|
|
6473
|
+
const contextLView = patchedData;
|
|
6474
|
+
const nodeIndex = findViaComponent(contextLView, componentInstance);
|
|
6475
|
+
lView = getComponentLViewByIndex(nodeIndex, contextLView);
|
|
6476
|
+
const context = createLContext(contextLView, nodeIndex, lView[HOST]);
|
|
6300
6477
|
context.component = componentInstance;
|
|
6301
6478
|
attachPatchData(componentInstance, context);
|
|
6302
6479
|
attachPatchData(context.native, context);
|
|
6303
6480
|
}
|
|
6304
6481
|
else {
|
|
6305
|
-
const context =
|
|
6306
|
-
|
|
6482
|
+
const context = patchedData;
|
|
6483
|
+
const contextLView = context.lView;
|
|
6484
|
+
ngDevMode && assertLView(contextLView);
|
|
6485
|
+
lView = getComponentLViewByIndex(context.nodeIndex, contextLView);
|
|
6307
6486
|
}
|
|
6308
|
-
return
|
|
6487
|
+
return lView;
|
|
6309
6488
|
}
|
|
6310
6489
|
/**
|
|
6311
6490
|
* This property will be monkey-patched on elements, components and directives.
|
|
@@ -6317,7 +6496,16 @@ const MONKEY_PATCH_KEY_NAME = '__ngContext__';
|
|
|
6317
6496
|
*/
|
|
6318
6497
|
function attachPatchData(target, data) {
|
|
6319
6498
|
ngDevMode && assertDefined(target, 'Target expected');
|
|
6320
|
-
|
|
6499
|
+
// Only attach the ID of the view in order to avoid memory leaks (see #41047). We only do this
|
|
6500
|
+
// for `LView`, because we have control over when an `LView` is created and destroyed, whereas
|
|
6501
|
+
// we can't know when to remove an `LContext`.
|
|
6502
|
+
if (isLView(data)) {
|
|
6503
|
+
target[MONKEY_PATCH_KEY_NAME] = data[ID];
|
|
6504
|
+
registerLView(data);
|
|
6505
|
+
}
|
|
6506
|
+
else {
|
|
6507
|
+
target[MONKEY_PATCH_KEY_NAME] = data;
|
|
6508
|
+
}
|
|
6321
6509
|
}
|
|
6322
6510
|
/**
|
|
6323
6511
|
* Returns the monkey-patch value data present on the target (which could be
|
|
@@ -6325,12 +6513,13 @@ function attachPatchData(target, data) {
|
|
|
6325
6513
|
*/
|
|
6326
6514
|
function readPatchedData(target) {
|
|
6327
6515
|
ngDevMode && assertDefined(target, 'Target expected');
|
|
6328
|
-
|
|
6516
|
+
const data = target[MONKEY_PATCH_KEY_NAME];
|
|
6517
|
+
return (typeof data === 'number') ? getLViewById(data) : data || null;
|
|
6329
6518
|
}
|
|
6330
6519
|
function readPatchedLView(target) {
|
|
6331
6520
|
const value = readPatchedData(target);
|
|
6332
6521
|
if (value) {
|
|
6333
|
-
return
|
|
6522
|
+
return isLView(value) ? value : value.lView;
|
|
6334
6523
|
}
|
|
6335
6524
|
return null;
|
|
6336
6525
|
}
|
|
@@ -7277,6 +7466,8 @@ function cleanUpView(tView, lView) {
|
|
|
7277
7466
|
lQueries.detachView(tView);
|
|
7278
7467
|
}
|
|
7279
7468
|
}
|
|
7469
|
+
// Unregister the view once everything else has been cleaned up.
|
|
7470
|
+
unregisterLView(lView);
|
|
7280
7471
|
}
|
|
7281
7472
|
}
|
|
7282
7473
|
/** Removes listeners and unsubscribes from output subscriptions */
|
|
@@ -7444,7 +7635,8 @@ function nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {
|
|
|
7444
7635
|
renderer.insertBefore(parent, child, beforeNode, isMove);
|
|
7445
7636
|
}
|
|
7446
7637
|
else {
|
|
7447
|
-
parent.
|
|
7638
|
+
const targetParent = isTemplateNode(parent) ? parent.content : parent;
|
|
7639
|
+
targetParent.insertBefore(child, beforeNode, isMove);
|
|
7448
7640
|
}
|
|
7449
7641
|
}
|
|
7450
7642
|
function nativeAppendChild(renderer, parent, child) {
|
|
@@ -7454,7 +7646,8 @@ function nativeAppendChild(renderer, parent, child) {
|
|
|
7454
7646
|
renderer.appendChild(parent, child);
|
|
7455
7647
|
}
|
|
7456
7648
|
else {
|
|
7457
|
-
parent.
|
|
7649
|
+
const targetParent = isTemplateNode(parent) ? parent.content : parent;
|
|
7650
|
+
targetParent.appendChild(child);
|
|
7458
7651
|
}
|
|
7459
7652
|
}
|
|
7460
7653
|
function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {
|
|
@@ -7474,6 +7667,10 @@ function nativeRemoveChild(renderer, parent, child, isHostElement) {
|
|
|
7474
7667
|
parent.removeChild(child);
|
|
7475
7668
|
}
|
|
7476
7669
|
}
|
|
7670
|
+
/** Checks if an element is a `<template>` node. */
|
|
7671
|
+
function isTemplateNode(node) {
|
|
7672
|
+
return node.tagName === 'TEMPLATE' && node.content !== undefined;
|
|
7673
|
+
}
|
|
7477
7674
|
/**
|
|
7478
7675
|
* Returns a native parent of a given native node.
|
|
7479
7676
|
*/
|
|
@@ -8643,7 +8840,7 @@ function nameSuffix(text) {
|
|
|
8643
8840
|
if (text == null)
|
|
8644
8841
|
return '';
|
|
8645
8842
|
const index = text.lastIndexOf('_Template');
|
|
8646
|
-
return '_' + (index === -1 ? text : text.
|
|
8843
|
+
return '_' + (index === -1 ? text : text.slice(0, index));
|
|
8647
8844
|
}
|
|
8648
8845
|
/**
|
|
8649
8846
|
* This class is a debug version of Object literal so that we can have constructor name show up
|
|
@@ -8994,7 +9191,7 @@ class LViewDebug {
|
|
|
8994
9191
|
attached: !!(flags & 128 /* Attached */),
|
|
8995
9192
|
destroyed: !!(flags & 256 /* Destroyed */),
|
|
8996
9193
|
isRoot: !!(flags & 512 /* IsRoot */),
|
|
8997
|
-
indexWithinInitPhase: flags >>
|
|
9194
|
+
indexWithinInitPhase: flags >> 12 /* IndexWithinInitPhaseShift */,
|
|
8998
9195
|
};
|
|
8999
9196
|
}
|
|
9000
9197
|
get parent() {
|
|
@@ -9057,6 +9254,9 @@ class LViewDebug {
|
|
|
9057
9254
|
get tHost() {
|
|
9058
9255
|
return this._raw_lView[T_HOST];
|
|
9059
9256
|
}
|
|
9257
|
+
get id() {
|
|
9258
|
+
return this._raw_lView[ID];
|
|
9259
|
+
}
|
|
9060
9260
|
get decls() {
|
|
9061
9261
|
return toLViewRange(this.tView, this._raw_lView, HEADER_OFFSET, this.tView.bindingStartIndex);
|
|
9062
9262
|
}
|
|
@@ -9286,10 +9486,14 @@ function renderChildComponents(hostLView, components) {
|
|
|
9286
9486
|
renderComponent$1(hostLView, components[i]);
|
|
9287
9487
|
}
|
|
9288
9488
|
}
|
|
9289
|
-
function createLView(parentLView, tView, context, flags, host, tHostNode, rendererFactory, renderer, sanitizer, injector) {
|
|
9489
|
+
function createLView(parentLView, tView, context, flags, host, tHostNode, rendererFactory, renderer, sanitizer, injector, embeddedViewInjector) {
|
|
9290
9490
|
const lView = ngDevMode ? cloneToLViewFromTViewBlueprint(tView) : tView.blueprint.slice();
|
|
9291
9491
|
lView[HOST] = host;
|
|
9292
9492
|
lView[FLAGS] = flags | 4 /* CreationMode */ | 128 /* Attached */ | 8 /* FirstLViewPass */;
|
|
9493
|
+
if (embeddedViewInjector !== null ||
|
|
9494
|
+
(parentLView && (parentLView[FLAGS] & 2048 /* HasEmbeddedViewInjector */))) {
|
|
9495
|
+
lView[FLAGS] |= 2048 /* HasEmbeddedViewInjector */;
|
|
9496
|
+
}
|
|
9293
9497
|
resetPreOrderHookFlags(lView);
|
|
9294
9498
|
ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);
|
|
9295
9499
|
lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;
|
|
@@ -9301,6 +9505,8 @@ function createLView(parentLView, tView, context, flags, host, tHostNode, render
|
|
|
9301
9505
|
lView[SANITIZER] = sanitizer || parentLView && parentLView[SANITIZER] || null;
|
|
9302
9506
|
lView[INJECTOR$1] = injector || parentLView && parentLView[INJECTOR$1] || null;
|
|
9303
9507
|
lView[T_HOST] = tHostNode;
|
|
9508
|
+
lView[ID] = getUniqueLViewId();
|
|
9509
|
+
lView[EMBEDDED_VIEW_INJECTOR] = embeddedViewInjector;
|
|
9304
9510
|
ngDevMode &&
|
|
9305
9511
|
assertEqual(tView.type == 2 /* Embedded */ ? parentLView !== null : true, true, 'Embedded views must have parentLView');
|
|
9306
9512
|
lView[DECLARATION_COMPONENT_VIEW] =
|
|
@@ -10031,9 +10237,9 @@ function elementPropertyInternal(tView, tNode, lView, propName, value, renderer,
|
|
|
10031
10237
|
propName = mapPropName(propName);
|
|
10032
10238
|
if (ngDevMode) {
|
|
10033
10239
|
validateAgainstEventProperties(propName);
|
|
10034
|
-
if (!validateProperty(
|
|
10240
|
+
if (!validateProperty(element, tNode.value, propName, tView.schemas)) {
|
|
10035
10241
|
// Return here since we only log warnings for unknown properties.
|
|
10036
|
-
logUnknownPropertyError(propName, tNode);
|
|
10242
|
+
logUnknownPropertyError(propName, tNode.value);
|
|
10037
10243
|
return;
|
|
10038
10244
|
}
|
|
10039
10245
|
ngDevMode.rendererSetProperty++;
|
|
@@ -10052,8 +10258,8 @@ function elementPropertyInternal(tView, tNode, lView, propName, value, renderer,
|
|
|
10052
10258
|
else if (tNode.type & 12 /* AnyContainer */) {
|
|
10053
10259
|
// If the node is a container and the property didn't
|
|
10054
10260
|
// match any of the inputs or schemas we should throw.
|
|
10055
|
-
if (ngDevMode && !matchingSchemas(tView, tNode.value)) {
|
|
10056
|
-
logUnknownPropertyError(propName, tNode);
|
|
10261
|
+
if (ngDevMode && !matchingSchemas(tView.schemas, tNode.value)) {
|
|
10262
|
+
logUnknownPropertyError(propName, tNode.value);
|
|
10057
10263
|
}
|
|
10058
10264
|
}
|
|
10059
10265
|
}
|
|
@@ -10105,24 +10311,44 @@ function setNgReflectProperties(lView, element, type, dataValue, value) {
|
|
|
10105
10311
|
}
|
|
10106
10312
|
}
|
|
10107
10313
|
}
|
|
10108
|
-
|
|
10314
|
+
/**
|
|
10315
|
+
* Validates that the property of the element is known at runtime and returns
|
|
10316
|
+
* false if it's not the case.
|
|
10317
|
+
* This check is relevant for JIT-compiled components (for AOT-compiled
|
|
10318
|
+
* ones this check happens at build time).
|
|
10319
|
+
*
|
|
10320
|
+
* The property is considered known if either:
|
|
10321
|
+
* - it's a known property of the element
|
|
10322
|
+
* - the element is allowed by one of the schemas
|
|
10323
|
+
* - the property is used for animations
|
|
10324
|
+
*
|
|
10325
|
+
* @param element Element to validate
|
|
10326
|
+
* @param tagName Name of the tag to check
|
|
10327
|
+
* @param propName Name of the property to check
|
|
10328
|
+
* @param schemas Array of schemas
|
|
10329
|
+
*/
|
|
10330
|
+
function validateProperty(element, tagName, propName, schemas) {
|
|
10109
10331
|
// If `schemas` is set to `null`, that's an indication that this Component was compiled in AOT
|
|
10110
10332
|
// mode where this check happens at compile time. In JIT mode, `schemas` is always present and
|
|
10111
10333
|
// defined as an array (as an empty array in case `schemas` field is not defined) and we should
|
|
10112
10334
|
// execute the check below.
|
|
10113
|
-
if (
|
|
10335
|
+
if (schemas === null)
|
|
10114
10336
|
return true;
|
|
10115
|
-
// The property is considered valid if the element matches the schema, it exists on the element
|
|
10337
|
+
// The property is considered valid if the element matches the schema, it exists on the element,
|
|
10116
10338
|
// or it is synthetic, and we are in a browser context (web worker nodes should be skipped).
|
|
10117
|
-
if (matchingSchemas(
|
|
10339
|
+
if (matchingSchemas(schemas, tagName) || propName in element || isAnimationProp(propName)) {
|
|
10118
10340
|
return true;
|
|
10119
10341
|
}
|
|
10120
10342
|
// Note: `typeof Node` returns 'function' in most browsers, but on IE it is 'object' so we
|
|
10121
|
-
// need to account for both here, while being careful
|
|
10343
|
+
// need to account for both here, while being careful with `typeof null` also returning 'object'.
|
|
10122
10344
|
return typeof Node === 'undefined' || Node === null || !(element instanceof Node);
|
|
10123
10345
|
}
|
|
10124
|
-
|
|
10125
|
-
|
|
10346
|
+
/**
|
|
10347
|
+
* Returns true if the tag name is allowed by specified schemas.
|
|
10348
|
+
* @param schemas Array of schemas
|
|
10349
|
+
* @param tagName Name of the tag
|
|
10350
|
+
*/
|
|
10351
|
+
function matchingSchemas(schemas, tagName) {
|
|
10126
10352
|
if (schemas !== null) {
|
|
10127
10353
|
for (let i = 0; i < schemas.length; i++) {
|
|
10128
10354
|
const schema = schemas[i];
|
|
@@ -10137,10 +10363,10 @@ function matchingSchemas(tView, tagName) {
|
|
|
10137
10363
|
/**
|
|
10138
10364
|
* Logs an error that a property is not supported on an element.
|
|
10139
10365
|
* @param propName Name of the invalid property.
|
|
10140
|
-
* @param
|
|
10366
|
+
* @param tagName Name of the node on which we encountered the property.
|
|
10141
10367
|
*/
|
|
10142
|
-
function logUnknownPropertyError(propName,
|
|
10143
|
-
|
|
10368
|
+
function logUnknownPropertyError(propName, tagName) {
|
|
10369
|
+
const message = `Can't bind to '${propName}' since it isn't a known property of '${tagName}'.`;
|
|
10144
10370
|
console.error(formatRuntimeError(303 /* UNKNOWN_BINDING */, message));
|
|
10145
10371
|
}
|
|
10146
10372
|
/**
|
|
@@ -10309,7 +10535,6 @@ function instantiateAllDirectives(tView, lView, tNode, native) {
|
|
|
10309
10535
|
function invokeDirectivesHostBindings(tView, lView, tNode) {
|
|
10310
10536
|
const start = tNode.directiveStart;
|
|
10311
10537
|
const end = tNode.directiveEnd;
|
|
10312
|
-
const firstCreatePass = tView.firstCreatePass;
|
|
10313
10538
|
const elementIndex = tNode.index;
|
|
10314
10539
|
const currentDirectiveIndex = getCurrentDirectiveIndex();
|
|
10315
10540
|
try {
|
|
@@ -10456,7 +10681,7 @@ function addComponentLogic(lView, hostTNode, def) {
|
|
|
10456
10681
|
// Only component views should be added to the view tree directly. Embedded views are
|
|
10457
10682
|
// accessed through their containers because they may be removed / re-added later.
|
|
10458
10683
|
const rendererFactory = lView[RENDERER_FACTORY];
|
|
10459
|
-
const componentView = addToViewTree(lView, createLView(lView, tView, null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, native, hostTNode, rendererFactory, rendererFactory.createRenderer(native, def), null, null));
|
|
10684
|
+
const componentView = addToViewTree(lView, createLView(lView, tView, null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, native, hostTNode, rendererFactory, rendererFactory.createRenderer(native, def), null, null, null));
|
|
10460
10685
|
// Component view will always be created before any injected LContainers,
|
|
10461
10686
|
// so this is a regular element, wrap it with the component view
|
|
10462
10687
|
lView[hostTNode.index] = componentView;
|
|
@@ -10825,8 +11050,11 @@ function tickRootContext(rootContext) {
|
|
|
10825
11050
|
for (let i = 0; i < rootContext.components.length; i++) {
|
|
10826
11051
|
const rootComponent = rootContext.components[i];
|
|
10827
11052
|
const lView = readPatchedLView(rootComponent);
|
|
10828
|
-
|
|
10829
|
-
|
|
11053
|
+
// We might not have an `LView` if the component was destroyed.
|
|
11054
|
+
if (lView !== null) {
|
|
11055
|
+
const tView = lView[TVIEW];
|
|
11056
|
+
renderComponentOrTemplate(tView, lView, tView.template, rootComponent);
|
|
11057
|
+
}
|
|
10830
11058
|
}
|
|
10831
11059
|
}
|
|
10832
11060
|
function detectChangesInternal(tView, lView, context) {
|
|
@@ -11685,12 +11913,16 @@ Injector.__NG_ELEMENT_ID__ = -1 /* Injector */;
|
|
|
11685
11913
|
* @globalApi ng
|
|
11686
11914
|
*/
|
|
11687
11915
|
function getComponent$1(element) {
|
|
11688
|
-
assertDomElement(element);
|
|
11916
|
+
ngDevMode && assertDomElement(element);
|
|
11689
11917
|
const context = getLContext(element);
|
|
11690
11918
|
if (context === null)
|
|
11691
11919
|
return null;
|
|
11692
11920
|
if (context.component === undefined) {
|
|
11693
|
-
|
|
11921
|
+
const lView = context.lView;
|
|
11922
|
+
if (lView === null) {
|
|
11923
|
+
return null;
|
|
11924
|
+
}
|
|
11925
|
+
context.component = getComponentAtNodeIndex(context.nodeIndex, lView);
|
|
11694
11926
|
}
|
|
11695
11927
|
return context.component;
|
|
11696
11928
|
}
|
|
@@ -11709,7 +11941,8 @@ function getComponent$1(element) {
|
|
|
11709
11941
|
function getContext(element) {
|
|
11710
11942
|
assertDomElement(element);
|
|
11711
11943
|
const context = getLContext(element);
|
|
11712
|
-
|
|
11944
|
+
const lView = context ? context.lView : null;
|
|
11945
|
+
return lView === null ? null : lView[CONTEXT];
|
|
11713
11946
|
}
|
|
11714
11947
|
/**
|
|
11715
11948
|
* Retrieves the component instance whose view contains the DOM element.
|
|
@@ -11728,11 +11961,10 @@ function getContext(element) {
|
|
|
11728
11961
|
*/
|
|
11729
11962
|
function getOwningComponent(elementOrDir) {
|
|
11730
11963
|
const context = getLContext(elementOrDir);
|
|
11731
|
-
|
|
11964
|
+
let lView = context ? context.lView : null;
|
|
11965
|
+
if (lView === null)
|
|
11732
11966
|
return null;
|
|
11733
|
-
let lView = context.lView;
|
|
11734
11967
|
let parent;
|
|
11735
|
-
ngDevMode && assertLView(lView);
|
|
11736
11968
|
while (lView[TVIEW].type === 2 /* Embedded */ && (parent = getLViewParent(lView))) {
|
|
11737
11969
|
lView = parent;
|
|
11738
11970
|
}
|
|
@@ -11750,7 +11982,8 @@ function getOwningComponent(elementOrDir) {
|
|
|
11750
11982
|
* @globalApi ng
|
|
11751
11983
|
*/
|
|
11752
11984
|
function getRootComponents(elementOrDir) {
|
|
11753
|
-
|
|
11985
|
+
const lView = readPatchedLView(elementOrDir);
|
|
11986
|
+
return lView !== null ? [...getRootContext(lView).components] : [];
|
|
11754
11987
|
}
|
|
11755
11988
|
/**
|
|
11756
11989
|
* Retrieves an `Injector` associated with an element, component or directive instance.
|
|
@@ -11764,10 +11997,11 @@ function getRootComponents(elementOrDir) {
|
|
|
11764
11997
|
*/
|
|
11765
11998
|
function getInjector(elementOrDir) {
|
|
11766
11999
|
const context = getLContext(elementOrDir);
|
|
11767
|
-
|
|
12000
|
+
const lView = context ? context.lView : null;
|
|
12001
|
+
if (lView === null)
|
|
11768
12002
|
return Injector.NULL;
|
|
11769
|
-
const tNode =
|
|
11770
|
-
return new NodeInjector(tNode,
|
|
12003
|
+
const tNode = lView[TVIEW].data[context.nodeIndex];
|
|
12004
|
+
return new NodeInjector(tNode, lView);
|
|
11771
12005
|
}
|
|
11772
12006
|
/**
|
|
11773
12007
|
* Retrieve a set of injection tokens at a given DOM node.
|
|
@@ -11776,9 +12010,9 @@ function getInjector(elementOrDir) {
|
|
|
11776
12010
|
*/
|
|
11777
12011
|
function getInjectionTokens(element) {
|
|
11778
12012
|
const context = getLContext(element);
|
|
11779
|
-
|
|
12013
|
+
const lView = context ? context.lView : null;
|
|
12014
|
+
if (lView === null)
|
|
11780
12015
|
return [];
|
|
11781
|
-
const lView = context.lView;
|
|
11782
12016
|
const tView = lView[TVIEW];
|
|
11783
12017
|
const tNode = tView.data[context.nodeIndex];
|
|
11784
12018
|
const providerTokens = [];
|
|
@@ -11828,10 +12062,10 @@ function getDirectives(node) {
|
|
|
11828
12062
|
return [];
|
|
11829
12063
|
}
|
|
11830
12064
|
const context = getLContext(node);
|
|
11831
|
-
|
|
12065
|
+
const lView = context ? context.lView : null;
|
|
12066
|
+
if (lView === null) {
|
|
11832
12067
|
return [];
|
|
11833
12068
|
}
|
|
11834
|
-
const lView = context.lView;
|
|
11835
12069
|
const tView = lView[TVIEW];
|
|
11836
12070
|
const nodeIndex = context.nodeIndex;
|
|
11837
12071
|
if (!(tView === null || tView === void 0 ? void 0 : tView.data[nodeIndex])) {
|
|
@@ -11891,7 +12125,11 @@ function getLocalRefs(target) {
|
|
|
11891
12125
|
if (context === null)
|
|
11892
12126
|
return {};
|
|
11893
12127
|
if (context.localRefs === undefined) {
|
|
11894
|
-
|
|
12128
|
+
const lView = context.lView;
|
|
12129
|
+
if (lView === null) {
|
|
12130
|
+
return {};
|
|
12131
|
+
}
|
|
12132
|
+
context.localRefs = discoverLocalRefs(lView, context.nodeIndex);
|
|
11895
12133
|
}
|
|
11896
12134
|
return context.localRefs || {};
|
|
11897
12135
|
}
|
|
@@ -11955,11 +12193,11 @@ function getRenderedText(component) {
|
|
|
11955
12193
|
* @globalApi ng
|
|
11956
12194
|
*/
|
|
11957
12195
|
function getListeners(element) {
|
|
11958
|
-
assertDomElement(element);
|
|
12196
|
+
ngDevMode && assertDomElement(element);
|
|
11959
12197
|
const lContext = getLContext(element);
|
|
11960
|
-
|
|
12198
|
+
const lView = lContext === null ? null : lContext.lView;
|
|
12199
|
+
if (lView === null)
|
|
11961
12200
|
return [];
|
|
11962
|
-
const lView = lContext.lView;
|
|
11963
12201
|
const tView = lView[TVIEW];
|
|
11964
12202
|
const lCleanup = lView[CLEANUP];
|
|
11965
12203
|
const tCleanup = tView.cleanup;
|
|
@@ -12010,10 +12248,10 @@ function getDebugNode$1(element) {
|
|
|
12010
12248
|
throw new Error('Expecting instance of DOM Element');
|
|
12011
12249
|
}
|
|
12012
12250
|
const lContext = getLContext(element);
|
|
12013
|
-
|
|
12251
|
+
const lView = lContext ? lContext.lView : null;
|
|
12252
|
+
if (lView === null) {
|
|
12014
12253
|
return null;
|
|
12015
12254
|
}
|
|
12016
|
-
const lView = lContext.lView;
|
|
12017
12255
|
const nodeIndex = lContext.nodeIndex;
|
|
12018
12256
|
if (nodeIndex !== -1) {
|
|
12019
12257
|
const valueInLView = lView[nodeIndex];
|
|
@@ -12038,6 +12276,7 @@ function getComponentLView(target) {
|
|
|
12038
12276
|
const lContext = getLContext(target);
|
|
12039
12277
|
const nodeIndx = lContext.nodeIndex;
|
|
12040
12278
|
const lView = lContext.lView;
|
|
12279
|
+
ngDevMode && assertLView(lView);
|
|
12041
12280
|
const componentLView = lView[nodeIndx];
|
|
12042
12281
|
ngDevMode && assertLView(componentLView);
|
|
12043
12282
|
return componentLView;
|
|
@@ -12185,7 +12424,7 @@ function renderComponent(componentType /* Type as workaround for: Microsoft/Type
|
|
|
12185
12424
|
const rootContext = createRootContext(opts.scheduler, opts.playerHandler);
|
|
12186
12425
|
const renderer = rendererFactory.createRenderer(hostRNode, componentDef);
|
|
12187
12426
|
const rootTView = createTView(0 /* Root */, null, null, 1, 0, null, null, null, null, null);
|
|
12188
|
-
const rootView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, renderer, null, opts.injector || null);
|
|
12427
|
+
const rootView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, renderer, null, opts.injector || null, null);
|
|
12189
12428
|
enterView(rootView);
|
|
12190
12429
|
let component;
|
|
12191
12430
|
try {
|
|
@@ -12240,7 +12479,7 @@ function createRootComponentView(rNode, def, rootView, rendererFactory, hostRend
|
|
|
12240
12479
|
}
|
|
12241
12480
|
}
|
|
12242
12481
|
const viewRenderer = rendererFactory.createRenderer(rNode, def);
|
|
12243
|
-
const componentView = createLView(rootView, getOrCreateTComponentView(def), null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, rootView[index], tNode, rendererFactory, viewRenderer, sanitizer || null, null);
|
|
12482
|
+
const componentView = createLView(rootView, getOrCreateTComponentView(def), null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, rootView[index], tNode, rendererFactory, viewRenderer, sanitizer || null, null, null);
|
|
12244
12483
|
if (tView.firstCreatePass) {
|
|
12245
12484
|
diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, rootView), tView, def.type);
|
|
12246
12485
|
markAsComponentHost(tView, tNode);
|
|
@@ -13785,75 +14024,6 @@ class KeyRegistry {
|
|
|
13785
14024
|
}
|
|
13786
14025
|
const _globalKeyRegistry = new KeyRegistry();
|
|
13787
14026
|
|
|
13788
|
-
/**
|
|
13789
|
-
* @license
|
|
13790
|
-
* Copyright Google LLC All Rights Reserved.
|
|
13791
|
-
*
|
|
13792
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
13793
|
-
* found in the LICENSE file at https://angular.io/license
|
|
13794
|
-
*/
|
|
13795
|
-
/**
|
|
13796
|
-
* Provides access to reflection data about symbols. Used internally by Angular
|
|
13797
|
-
* to power dependency injection and compilation.
|
|
13798
|
-
*/
|
|
13799
|
-
class Reflector {
|
|
13800
|
-
constructor(reflectionCapabilities) {
|
|
13801
|
-
this.reflectionCapabilities = reflectionCapabilities;
|
|
13802
|
-
}
|
|
13803
|
-
updateCapabilities(caps) {
|
|
13804
|
-
this.reflectionCapabilities = caps;
|
|
13805
|
-
}
|
|
13806
|
-
factory(type) {
|
|
13807
|
-
return this.reflectionCapabilities.factory(type);
|
|
13808
|
-
}
|
|
13809
|
-
parameters(typeOrFunc) {
|
|
13810
|
-
return this.reflectionCapabilities.parameters(typeOrFunc);
|
|
13811
|
-
}
|
|
13812
|
-
annotations(typeOrFunc) {
|
|
13813
|
-
return this.reflectionCapabilities.annotations(typeOrFunc);
|
|
13814
|
-
}
|
|
13815
|
-
propMetadata(typeOrFunc) {
|
|
13816
|
-
return this.reflectionCapabilities.propMetadata(typeOrFunc);
|
|
13817
|
-
}
|
|
13818
|
-
hasLifecycleHook(type, lcProperty) {
|
|
13819
|
-
return this.reflectionCapabilities.hasLifecycleHook(type, lcProperty);
|
|
13820
|
-
}
|
|
13821
|
-
getter(name) {
|
|
13822
|
-
return this.reflectionCapabilities.getter(name);
|
|
13823
|
-
}
|
|
13824
|
-
setter(name) {
|
|
13825
|
-
return this.reflectionCapabilities.setter(name);
|
|
13826
|
-
}
|
|
13827
|
-
method(name) {
|
|
13828
|
-
return this.reflectionCapabilities.method(name);
|
|
13829
|
-
}
|
|
13830
|
-
importUri(type) {
|
|
13831
|
-
return this.reflectionCapabilities.importUri(type);
|
|
13832
|
-
}
|
|
13833
|
-
resourceUri(type) {
|
|
13834
|
-
return this.reflectionCapabilities.resourceUri(type);
|
|
13835
|
-
}
|
|
13836
|
-
resolveIdentifier(name, moduleUrl, members, runtime) {
|
|
13837
|
-
return this.reflectionCapabilities.resolveIdentifier(name, moduleUrl, members, runtime);
|
|
13838
|
-
}
|
|
13839
|
-
resolveEnum(identifier, name) {
|
|
13840
|
-
return this.reflectionCapabilities.resolveEnum(identifier, name);
|
|
13841
|
-
}
|
|
13842
|
-
}
|
|
13843
|
-
|
|
13844
|
-
/**
|
|
13845
|
-
* @license
|
|
13846
|
-
* Copyright Google LLC All Rights Reserved.
|
|
13847
|
-
*
|
|
13848
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
13849
|
-
* found in the LICENSE file at https://angular.io/license
|
|
13850
|
-
*/
|
|
13851
|
-
/**
|
|
13852
|
-
* The {@link Reflector} used internally in Angular to access metadata
|
|
13853
|
-
* about symbols.
|
|
13854
|
-
*/
|
|
13855
|
-
const reflector = new Reflector(new ReflectionCapabilities());
|
|
13856
|
-
|
|
13857
14027
|
/**
|
|
13858
14028
|
* @license
|
|
13859
14029
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -13910,7 +14080,7 @@ function resolveReflectiveFactory(provider) {
|
|
|
13910
14080
|
let resolvedDeps;
|
|
13911
14081
|
if (provider.useClass) {
|
|
13912
14082
|
const useClass = resolveForwardRef(provider.useClass);
|
|
13913
|
-
factoryFn =
|
|
14083
|
+
factoryFn = getReflect().factory(useClass);
|
|
13914
14084
|
resolvedDeps = _dependenciesFor(useClass);
|
|
13915
14085
|
}
|
|
13916
14086
|
else if (provider.useExisting) {
|
|
@@ -14006,7 +14176,7 @@ function constructDependencies(typeOrFunc, dependencies) {
|
|
|
14006
14176
|
}
|
|
14007
14177
|
}
|
|
14008
14178
|
function _dependenciesFor(typeOrFunc) {
|
|
14009
|
-
const params =
|
|
14179
|
+
const params = getReflect().parameters(typeOrFunc);
|
|
14010
14180
|
if (!params)
|
|
14011
14181
|
return [];
|
|
14012
14182
|
if (params.some(p => p == null)) {
|
|
@@ -14473,7 +14643,7 @@ function elementStartFirstCreatePass(index, tView, lView, native, name, attrsInd
|
|
|
14473
14643
|
const attrs = getConstant(tViewConsts, attrsIndex);
|
|
14474
14644
|
const tNode = getOrCreateTNode(tView, index, 2 /* Element */, name, attrs);
|
|
14475
14645
|
const hasDirectives = resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));
|
|
14476
|
-
ngDevMode &&
|
|
14646
|
+
ngDevMode && validateElementIsKnown(native, tNode.value, tView.schemas, hasDirectives);
|
|
14477
14647
|
if (tNode.attrs !== null) {
|
|
14478
14648
|
computeStaticStyling(tNode, tNode.attrs, false);
|
|
14479
14649
|
}
|
|
@@ -14492,6 +14662,7 @@ function elementStartFirstCreatePass(index, tView, lView, native, name, attrsInd
|
|
|
14492
14662
|
* @param name Name of the DOM Node
|
|
14493
14663
|
* @param attrsIndex Index of the element's attributes in the `consts` array.
|
|
14494
14664
|
* @param localRefsIndex Index of the element's local references in the `consts` array.
|
|
14665
|
+
* @returns This function returns itself so that it may be chained.
|
|
14495
14666
|
*
|
|
14496
14667
|
* Attributes and localRefs are passed as an array of strings where elements with an even index
|
|
14497
14668
|
* hold an attribute name and elements with an odd index hold an attribute value, ex.:
|
|
@@ -14543,9 +14714,11 @@ function ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {
|
|
|
14543
14714
|
if (localRefsIndex !== null) {
|
|
14544
14715
|
saveResolvedLocalsInData(lView, tNode);
|
|
14545
14716
|
}
|
|
14717
|
+
return ɵɵelementStart;
|
|
14546
14718
|
}
|
|
14547
14719
|
/**
|
|
14548
14720
|
* Mark the end of the element.
|
|
14721
|
+
* @returns This function returns itself so that it may be chained.
|
|
14549
14722
|
*
|
|
14550
14723
|
* @codeGenApi
|
|
14551
14724
|
*/
|
|
@@ -14576,6 +14749,7 @@ function ɵɵelementEnd() {
|
|
|
14576
14749
|
if (tNode.stylesWithoutHost != null && hasStyleInput(tNode)) {
|
|
14577
14750
|
setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.stylesWithoutHost, false);
|
|
14578
14751
|
}
|
|
14752
|
+
return ɵɵelementEnd;
|
|
14579
14753
|
}
|
|
14580
14754
|
/**
|
|
14581
14755
|
* Creates an empty element using {@link elementStart} and {@link elementEnd}
|
|
@@ -14584,25 +14758,42 @@ function ɵɵelementEnd() {
|
|
|
14584
14758
|
* @param name Name of the DOM Node
|
|
14585
14759
|
* @param attrsIndex Index of the element's attributes in the `consts` array.
|
|
14586
14760
|
* @param localRefsIndex Index of the element's local references in the `consts` array.
|
|
14761
|
+
* @returns This function returns itself so that it may be chained.
|
|
14587
14762
|
*
|
|
14588
14763
|
* @codeGenApi
|
|
14589
14764
|
*/
|
|
14590
14765
|
function ɵɵelement(index, name, attrsIndex, localRefsIndex) {
|
|
14591
14766
|
ɵɵelementStart(index, name, attrsIndex, localRefsIndex);
|
|
14592
14767
|
ɵɵelementEnd();
|
|
14768
|
+
return ɵɵelement;
|
|
14593
14769
|
}
|
|
14594
|
-
|
|
14595
|
-
|
|
14770
|
+
/**
|
|
14771
|
+
* Validates that the element is known at runtime and produces
|
|
14772
|
+
* an error if it's not the case.
|
|
14773
|
+
* This check is relevant for JIT-compiled components (for AOT-compiled
|
|
14774
|
+
* ones this check happens at build time).
|
|
14775
|
+
*
|
|
14776
|
+
* The element is considered known if either:
|
|
14777
|
+
* - it's a known HTML element
|
|
14778
|
+
* - it's a known custom element
|
|
14779
|
+
* - the element matches any directive
|
|
14780
|
+
* - the element is allowed by one of the schemas
|
|
14781
|
+
*
|
|
14782
|
+
* @param element Element to validate
|
|
14783
|
+
* @param tagName Name of the tag to check
|
|
14784
|
+
* @param schemas Array of schemas
|
|
14785
|
+
* @param hasDirectives Boolean indicating that the element matches any directive
|
|
14786
|
+
*/
|
|
14787
|
+
function validateElementIsKnown(element, tagName, schemas, hasDirectives) {
|
|
14596
14788
|
// If `schemas` is set to `null`, that's an indication that this Component was compiled in AOT
|
|
14597
14789
|
// mode where this check happens at compile time. In JIT mode, `schemas` is always present and
|
|
14598
14790
|
// defined as an array (as an empty array in case `schemas` field is not defined) and we should
|
|
14599
14791
|
// execute the check below.
|
|
14600
14792
|
if (schemas === null)
|
|
14601
14793
|
return;
|
|
14602
|
-
const tagName = tNode.value;
|
|
14603
14794
|
// If the element matches any directive, it's considered as valid.
|
|
14604
14795
|
if (!hasDirectives && tagName !== null) {
|
|
14605
|
-
// The element is unknown if it's an instance of HTMLUnknownElement or it isn't registered
|
|
14796
|
+
// The element is unknown if it's an instance of HTMLUnknownElement, or it isn't registered
|
|
14606
14797
|
// as a custom element. Note that unknown elements with a dash in their name won't be instances
|
|
14607
14798
|
// of HTMLUnknownElement in browsers that support web components.
|
|
14608
14799
|
const isUnknown =
|
|
@@ -14612,7 +14803,7 @@ function logUnknownElementError(tView, element, tNode, hasDirectives) {
|
|
|
14612
14803
|
element instanceof HTMLUnknownElement) ||
|
|
14613
14804
|
(typeof customElements !== 'undefined' && tagName.indexOf('-') > -1 &&
|
|
14614
14805
|
!customElements.get(tagName));
|
|
14615
|
-
if (isUnknown && !matchingSchemas(
|
|
14806
|
+
if (isUnknown && !matchingSchemas(schemas, tagName)) {
|
|
14616
14807
|
let message = `'${tagName}' is not a known element:\n`;
|
|
14617
14808
|
message += `1. If '${tagName}' is an Angular component, then verify that it is part of this module.\n`;
|
|
14618
14809
|
if (tagName && tagName.indexOf('-') > -1) {
|
|
@@ -14658,6 +14849,7 @@ function elementContainerStartFirstCreatePass(index, tView, lView, attrsIndex, l
|
|
|
14658
14849
|
* @param index Index of the element in the LView array
|
|
14659
14850
|
* @param attrsIndex Index of the container attributes in the `consts` array.
|
|
14660
14851
|
* @param localRefsIndex Index of the container's local references in the `consts` array.
|
|
14852
|
+
* @returns This function returns itself so that it may be chained.
|
|
14661
14853
|
*
|
|
14662
14854
|
* Even if this instruction accepts a set of attributes no actual attribute values are propagated to
|
|
14663
14855
|
* the DOM (as a comment node can't have attributes). Attributes are here only for directive
|
|
@@ -14688,9 +14880,11 @@ function ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {
|
|
|
14688
14880
|
if (localRefsIndex != null) {
|
|
14689
14881
|
saveResolvedLocalsInData(lView, tNode);
|
|
14690
14882
|
}
|
|
14883
|
+
return ɵɵelementContainerStart;
|
|
14691
14884
|
}
|
|
14692
14885
|
/**
|
|
14693
14886
|
* Mark the end of the <ng-container>.
|
|
14887
|
+
* @returns This function returns itself so that it may be chained.
|
|
14694
14888
|
*
|
|
14695
14889
|
* @codeGenApi
|
|
14696
14890
|
*/
|
|
@@ -14712,6 +14906,7 @@ function ɵɵelementContainerEnd() {
|
|
|
14712
14906
|
tView.queries.elementEnd(currentTNode);
|
|
14713
14907
|
}
|
|
14714
14908
|
}
|
|
14909
|
+
return ɵɵelementContainerEnd;
|
|
14715
14910
|
}
|
|
14716
14911
|
/**
|
|
14717
14912
|
* Creates an empty logical container using {@link elementContainerStart}
|
|
@@ -14720,12 +14915,14 @@ function ɵɵelementContainerEnd() {
|
|
|
14720
14915
|
* @param index Index of the element in the LView array
|
|
14721
14916
|
* @param attrsIndex Index of the container attributes in the `consts` array.
|
|
14722
14917
|
* @param localRefsIndex Index of the container's local references in the `consts` array.
|
|
14918
|
+
* @returns This function returns itself so that it may be chained.
|
|
14723
14919
|
*
|
|
14724
14920
|
* @codeGenApi
|
|
14725
14921
|
*/
|
|
14726
14922
|
function ɵɵelementContainer(index, attrsIndex, localRefsIndex) {
|
|
14727
14923
|
ɵɵelementContainerStart(index, attrsIndex, localRefsIndex);
|
|
14728
14924
|
ɵɵelementContainerEnd();
|
|
14925
|
+
return ɵɵelementContainer;
|
|
14729
14926
|
}
|
|
14730
14927
|
|
|
14731
14928
|
/**
|
|
@@ -16294,7 +16491,7 @@ function consumeQuotedText(text, quoteCharCode, startIndex, endIndex) {
|
|
|
16294
16491
|
function malformedStyleError(text, expecting, index) {
|
|
16295
16492
|
ngDevMode && assertEqual(typeof text === 'string', true, 'String expected here');
|
|
16296
16493
|
throw throwError(`Malformed style at location ${index} in string '` + text.substring(0, index) + '[>>' +
|
|
16297
|
-
text.substring(index, index + 1) + '<<]' + text.
|
|
16494
|
+
text.substring(index, index + 1) + '<<]' + text.slice(index + 1) +
|
|
16298
16495
|
`'. Expecting '${expecting}'.`);
|
|
16299
16496
|
}
|
|
16300
16497
|
|
|
@@ -19979,7 +20176,7 @@ function removeInnerTemplateTranslation(message) {
|
|
|
19979
20176
|
}
|
|
19980
20177
|
ngDevMode &&
|
|
19981
20178
|
assertEqual(inTemplate, false, `Tag mismatch: unable to find the end of the sub-template in the translation "${message}"`);
|
|
19982
|
-
res += message.
|
|
20179
|
+
res += message.slice(index);
|
|
19983
20180
|
return res;
|
|
19984
20181
|
}
|
|
19985
20182
|
/**
|
|
@@ -20071,7 +20268,7 @@ function parseICUBlock(pattern) {
|
|
|
20071
20268
|
else {
|
|
20072
20269
|
icuType = 1 /* plural */;
|
|
20073
20270
|
}
|
|
20074
|
-
mainBinding = parseInt(binding.
|
|
20271
|
+
mainBinding = parseInt(binding.slice(1), 10);
|
|
20075
20272
|
return '';
|
|
20076
20273
|
});
|
|
20077
20274
|
const parts = i18nParseTextIntoPartsAndICU(pattern);
|
|
@@ -21076,7 +21273,7 @@ class Version {
|
|
|
21076
21273
|
/**
|
|
21077
21274
|
* @publicApi
|
|
21078
21275
|
*/
|
|
21079
|
-
const VERSION = new Version('14.0.0-next.
|
|
21276
|
+
const VERSION = new Version('14.0.0-next.12');
|
|
21080
21277
|
|
|
21081
21278
|
/**
|
|
21082
21279
|
* @license
|
|
@@ -21482,29 +21679,27 @@ function getNamespace(elementName) {
|
|
|
21482
21679
|
return name === 'svg' ? SVG_NAMESPACE : (name === 'math' ? MATH_ML_NAMESPACE : null);
|
|
21483
21680
|
}
|
|
21484
21681
|
/**
|
|
21485
|
-
*
|
|
21486
|
-
*
|
|
21682
|
+
* Injector that looks up a value using a specific injector, before falling back to the module
|
|
21683
|
+
* injector. Used primarily when creating components or embedded views dynamically.
|
|
21487
21684
|
*/
|
|
21488
|
-
|
|
21489
|
-
|
|
21490
|
-
|
|
21491
|
-
|
|
21492
|
-
|
|
21493
|
-
|
|
21494
|
-
get
|
|
21495
|
-
|
|
21496
|
-
|
|
21497
|
-
|
|
21498
|
-
|
|
21499
|
-
|
|
21500
|
-
|
|
21501
|
-
|
|
21502
|
-
|
|
21503
|
-
return value;
|
|
21504
|
-
}
|
|
21505
|
-
return moduleInjector.get(token, notFoundValue, flags);
|
|
21685
|
+
class ChainedInjector {
|
|
21686
|
+
constructor(injector, parentInjector) {
|
|
21687
|
+
this.injector = injector;
|
|
21688
|
+
this.parentInjector = parentInjector;
|
|
21689
|
+
}
|
|
21690
|
+
get(token, notFoundValue, flags) {
|
|
21691
|
+
const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
|
|
21692
|
+
if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
|
|
21693
|
+
notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
|
|
21694
|
+
// Return the value from the root element injector when
|
|
21695
|
+
// - it provides it
|
|
21696
|
+
// (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
|
|
21697
|
+
// - the module injector should not be checked
|
|
21698
|
+
// (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
|
|
21699
|
+
return value;
|
|
21506
21700
|
}
|
|
21507
|
-
|
|
21701
|
+
return this.parentInjector.get(token, notFoundValue, flags);
|
|
21702
|
+
}
|
|
21508
21703
|
}
|
|
21509
21704
|
/**
|
|
21510
21705
|
* Render3 implementation of {@link viewEngine_ComponentFactory}.
|
|
@@ -21532,7 +21727,7 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
21532
21727
|
}
|
|
21533
21728
|
create(injector, projectableNodes, rootSelectorOrNode, ngModule) {
|
|
21534
21729
|
ngModule = ngModule || this.ngModule;
|
|
21535
|
-
const rootViewInjector = ngModule ?
|
|
21730
|
+
const rootViewInjector = ngModule ? new ChainedInjector(injector, ngModule.injector) : injector;
|
|
21536
21731
|
const rendererFactory = rootViewInjector.get(RendererFactory2, domRendererFactory3);
|
|
21537
21732
|
const sanitizer = rootViewInjector.get(Sanitizer, null);
|
|
21538
21733
|
const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);
|
|
@@ -21547,7 +21742,7 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
21547
21742
|
const rootContext = createRootContext();
|
|
21548
21743
|
// Create the root view. Uses empty TView and ContentTemplate.
|
|
21549
21744
|
const rootTView = createTView(0 /* Root */, null, null, 1, 0, null, null, null, null, null);
|
|
21550
|
-
const rootLView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector);
|
|
21745
|
+
const rootLView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector, null);
|
|
21551
21746
|
// rootView is the parent when bootstrapping
|
|
21552
21747
|
// TODO(misko): it looks like we are entering view here but we don't really need to as
|
|
21553
21748
|
// `renderView` does that. However as the code is written it is needed because
|
|
@@ -21717,62 +21912,6 @@ class NgModuleRef$1 {
|
|
|
21717
21912
|
class NgModuleFactory$1 {
|
|
21718
21913
|
}
|
|
21719
21914
|
|
|
21720
|
-
/**
|
|
21721
|
-
* @license
|
|
21722
|
-
* Copyright Google LLC All Rights Reserved.
|
|
21723
|
-
*
|
|
21724
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
21725
|
-
* found in the LICENSE file at https://angular.io/license
|
|
21726
|
-
*/
|
|
21727
|
-
/**
|
|
21728
|
-
* Map of module-id to the corresponding NgModule.
|
|
21729
|
-
* - In pre Ivy we track NgModuleFactory,
|
|
21730
|
-
* - In post Ivy we track the NgModuleType
|
|
21731
|
-
*/
|
|
21732
|
-
const modules = new Map();
|
|
21733
|
-
/**
|
|
21734
|
-
* Registers a loaded module. Should only be called from generated NgModuleFactory code.
|
|
21735
|
-
* @publicApi
|
|
21736
|
-
*/
|
|
21737
|
-
function registerModuleFactory(id, factory) {
|
|
21738
|
-
const existing = modules.get(id);
|
|
21739
|
-
assertSameOrNotExisting(id, existing && existing.moduleType, factory.moduleType);
|
|
21740
|
-
modules.set(id, factory);
|
|
21741
|
-
}
|
|
21742
|
-
function assertSameOrNotExisting(id, type, incoming) {
|
|
21743
|
-
if (type && type !== incoming) {
|
|
21744
|
-
throw new Error(`Duplicate module registered for ${id} - ${stringify(type)} vs ${stringify(type.name)}`);
|
|
21745
|
-
}
|
|
21746
|
-
}
|
|
21747
|
-
function registerNgModuleType(ngModuleType) {
|
|
21748
|
-
const visited = new Set();
|
|
21749
|
-
recurse(ngModuleType);
|
|
21750
|
-
function recurse(ngModuleType) {
|
|
21751
|
-
// The imports array of an NgModule must refer to other NgModules,
|
|
21752
|
-
// so an error is thrown if no module definition is available.
|
|
21753
|
-
const def = getNgModuleDef(ngModuleType, /* throwNotFound */ true);
|
|
21754
|
-
const id = def.id;
|
|
21755
|
-
if (id !== null) {
|
|
21756
|
-
const existing = modules.get(id);
|
|
21757
|
-
assertSameOrNotExisting(id, existing, ngModuleType);
|
|
21758
|
-
modules.set(id, ngModuleType);
|
|
21759
|
-
}
|
|
21760
|
-
const imports = maybeUnwrapFn(def.imports);
|
|
21761
|
-
for (const i of imports) {
|
|
21762
|
-
if (!visited.has(i)) {
|
|
21763
|
-
visited.add(i);
|
|
21764
|
-
recurse(i);
|
|
21765
|
-
}
|
|
21766
|
-
}
|
|
21767
|
-
}
|
|
21768
|
-
}
|
|
21769
|
-
function clearModulesForTest() {
|
|
21770
|
-
modules.clear();
|
|
21771
|
-
}
|
|
21772
|
-
function getRegisteredNgModuleType(id) {
|
|
21773
|
-
return (modules.get(id) || autoRegisterModuleById[id]);
|
|
21774
|
-
}
|
|
21775
|
-
|
|
21776
21915
|
/**
|
|
21777
21916
|
* @license
|
|
21778
21917
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -21843,33 +21982,6 @@ class NgModuleFactory extends NgModuleFactory$1 {
|
|
|
21843
21982
|
constructor(moduleType) {
|
|
21844
21983
|
super();
|
|
21845
21984
|
this.moduleType = moduleType;
|
|
21846
|
-
const ngModuleDef = getNgModuleDef(moduleType);
|
|
21847
|
-
if (ngModuleDef !== null) {
|
|
21848
|
-
// Register the NgModule with Angular's module registry. The location (and hence timing) of
|
|
21849
|
-
// this call is critical to ensure this works correctly (modules get registered when expected)
|
|
21850
|
-
// without bloating bundles (modules are registered when otherwise not referenced).
|
|
21851
|
-
//
|
|
21852
|
-
// In View Engine, registration occurs in the .ngfactory.js file as a side effect. This has
|
|
21853
|
-
// several practical consequences:
|
|
21854
|
-
//
|
|
21855
|
-
// - If an .ngfactory file is not imported from, the module won't be registered (and can be
|
|
21856
|
-
// tree shaken).
|
|
21857
|
-
// - If an .ngfactory file is imported from, the module will be registered even if an instance
|
|
21858
|
-
// is not actually created (via `create` below).
|
|
21859
|
-
// - Since an .ngfactory file in View Engine references the .ngfactory files of the NgModule's
|
|
21860
|
-
// imports,
|
|
21861
|
-
//
|
|
21862
|
-
// In Ivy, things are a bit different. .ngfactory files still exist for compatibility, but are
|
|
21863
|
-
// not a required API to use - there are other ways to obtain an NgModuleFactory for a given
|
|
21864
|
-
// NgModule. Thus, relying on a side effect in the .ngfactory file is not sufficient. Instead,
|
|
21865
|
-
// the side effect of registration is added here, in the constructor of NgModuleFactory,
|
|
21866
|
-
// ensuring no matter how a factory is created, the module is registered correctly.
|
|
21867
|
-
//
|
|
21868
|
-
// An alternative would be to include the registration side effect inline following the actual
|
|
21869
|
-
// NgModule definition. This also has the correct timing, but breaks tree-shaking - modules
|
|
21870
|
-
// will be registered and retained even if they're otherwise never referenced.
|
|
21871
|
-
registerNgModuleType(moduleType);
|
|
21872
|
-
}
|
|
21873
21985
|
}
|
|
21874
21986
|
create(parentInjector) {
|
|
21875
21987
|
return new NgModuleRef(this.moduleType, parentInjector);
|
|
@@ -22668,9 +22780,9 @@ const R3TemplateRef = class TemplateRef extends ViewEngineTemplateRef {
|
|
|
22668
22780
|
this._declarationTContainer = _declarationTContainer;
|
|
22669
22781
|
this.elementRef = elementRef;
|
|
22670
22782
|
}
|
|
22671
|
-
createEmbeddedView(context) {
|
|
22783
|
+
createEmbeddedView(context, injector) {
|
|
22672
22784
|
const embeddedTView = this._declarationTContainer.tViews;
|
|
22673
|
-
const embeddedLView = createLView(this._declarationLView, embeddedTView, context, 16 /* CheckAlways */, null, embeddedTView.declTNode, null, null, null, null);
|
|
22785
|
+
const embeddedLView = createLView(this._declarationLView, embeddedTView, context, 16 /* CheckAlways */, null, embeddedTView.declTNode, null, null, null, null, injector || null);
|
|
22674
22786
|
const declarationLContainer = this._declarationLView[this._declarationTContainer.index];
|
|
22675
22787
|
ngDevMode && assertLContainer(declarationLContainer);
|
|
22676
22788
|
embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;
|
|
@@ -22786,8 +22898,17 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
|
|
|
22786
22898
|
get length() {
|
|
22787
22899
|
return this._lContainer.length - CONTAINER_HEADER_OFFSET;
|
|
22788
22900
|
}
|
|
22789
|
-
createEmbeddedView(templateRef, context,
|
|
22790
|
-
|
|
22901
|
+
createEmbeddedView(templateRef, context, indexOrOptions) {
|
|
22902
|
+
let index;
|
|
22903
|
+
let injector;
|
|
22904
|
+
if (typeof indexOrOptions === 'number') {
|
|
22905
|
+
index = indexOrOptions;
|
|
22906
|
+
}
|
|
22907
|
+
else if (indexOrOptions != null) {
|
|
22908
|
+
index = indexOrOptions.index;
|
|
22909
|
+
injector = indexOrOptions.injector;
|
|
22910
|
+
}
|
|
22911
|
+
const viewRef = templateRef.createEmbeddedView(context || {}, injector);
|
|
22791
22912
|
this.insert(viewRef, index);
|
|
22792
22913
|
return viewRef;
|
|
22793
22914
|
}
|
|
@@ -22828,11 +22949,29 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
|
|
|
22828
22949
|
componentFactoryOrType :
|
|
22829
22950
|
new ComponentFactory(getComponentDef(componentFactoryOrType));
|
|
22830
22951
|
const contextInjector = injector || this.parentInjector;
|
|
22831
|
-
|
|
22832
|
-
|
|
22833
|
-
//
|
|
22834
|
-
//
|
|
22835
|
-
|
|
22952
|
+
// If an `NgModuleRef` is not provided explicitly, try retrieving it from the DI tree.
|
|
22953
|
+
if (!ngModuleRef && componentFactory.ngModule == null) {
|
|
22954
|
+
// For the `ComponentFactory` case, entering this logic is very unlikely, since we expect that
|
|
22955
|
+
// an instance of a `ComponentFactory`, resolved via `ComponentFactoryResolver` would have an
|
|
22956
|
+
// `ngModule` field. This is possible in some test scenarios and potentially in some JIT-based
|
|
22957
|
+
// use-cases. For the `ComponentFactory` case we preserve backwards-compatibility and try
|
|
22958
|
+
// using a provided injector first, then fall back to the parent injector of this
|
|
22959
|
+
// `ViewContainerRef` instance.
|
|
22960
|
+
//
|
|
22961
|
+
// For the factory-less case, it's critical to establish a connection with the module
|
|
22962
|
+
// injector tree (by retrieving an instance of an `NgModuleRef` and accessing its injector),
|
|
22963
|
+
// so that a component can use DI tokens provided in MgModules. For this reason, we can not
|
|
22964
|
+
// rely on the provided injector, since it might be detached from the DI tree (for example, if
|
|
22965
|
+
// it was created via `Injector.create` without specifying a parent injector, or if an
|
|
22966
|
+
// injector is retrieved from an `NgModuleRef` created via `createNgModuleRef` using an
|
|
22967
|
+
// NgModule outside of a module tree). Instead, we always use `ViewContainerRef`'s parent
|
|
22968
|
+
// injector, which is normally connected to the DI tree, which includes module injector
|
|
22969
|
+
// subtree.
|
|
22970
|
+
const _injector = isComponentFactory ? contextInjector : this.parentInjector;
|
|
22971
|
+
// DO NOT REFACTOR. The code here used to have a `injector.get(NgModuleRef, null) ||
|
|
22972
|
+
// undefined` expression which seems to cause internal google apps to fail. This is documented
|
|
22973
|
+
// in the following internal bug issue: go/b/142967802
|
|
22974
|
+
const result = _injector.get(NgModuleRef$1, null);
|
|
22836
22975
|
if (result) {
|
|
22837
22976
|
ngModuleRef = result;
|
|
22838
22977
|
}
|
|
@@ -23522,6 +23661,7 @@ const angularCoreEnv = (() => ({
|
|
|
23522
23661
|
'ɵɵinvalidFactory': ɵɵinvalidFactory,
|
|
23523
23662
|
'ɵɵinvalidFactoryDep': ɵɵinvalidFactoryDep,
|
|
23524
23663
|
'ɵɵtemplateRefExtractor': ɵɵtemplateRefExtractor,
|
|
23664
|
+
'ɵɵresetView': ɵɵresetView,
|
|
23525
23665
|
'ɵɵNgOnChangesFeature': ɵɵNgOnChangesFeature,
|
|
23526
23666
|
'ɵɵProvidersFeature': ɵɵProvidersFeature,
|
|
23527
23667
|
'ɵɵCopyDefinitionFeature': ɵɵCopyDefinitionFeature,
|
|
@@ -23634,6 +23774,7 @@ const angularCoreEnv = (() => ({
|
|
|
23634
23774
|
'ɵɵresolveBody': ɵɵresolveBody,
|
|
23635
23775
|
'ɵɵsetComponentScope': ɵɵsetComponentScope,
|
|
23636
23776
|
'ɵɵsetNgModuleScope': ɵɵsetNgModuleScope,
|
|
23777
|
+
'ɵɵregisterNgModuleType': registerNgModuleType,
|
|
23637
23778
|
'ɵɵsanitizeHtml': ɵɵsanitizeHtml,
|
|
23638
23779
|
'ɵɵsanitizeStyle': ɵɵsanitizeStyle,
|
|
23639
23780
|
'ɵɵsanitizeResourceUrl': ɵɵsanitizeResourceUrl,
|
|
@@ -23669,6 +23810,17 @@ function resetJitOptions() {
|
|
|
23669
23810
|
jitOptions = null;
|
|
23670
23811
|
}
|
|
23671
23812
|
|
|
23813
|
+
/**
|
|
23814
|
+
* @license
|
|
23815
|
+
* Copyright Google LLC All Rights Reserved.
|
|
23816
|
+
*
|
|
23817
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
23818
|
+
* found in the LICENSE file at https://angular.io/license
|
|
23819
|
+
*/
|
|
23820
|
+
function patchModuleCompilation() {
|
|
23821
|
+
// Does nothing, but exists as a target for patching.
|
|
23822
|
+
}
|
|
23823
|
+
|
|
23672
23824
|
/**
|
|
23673
23825
|
* @license
|
|
23674
23826
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -23725,7 +23877,11 @@ function isResolvedDeclaration(declaration) {
|
|
|
23725
23877
|
* This function automatically gets called when a class has a `@NgModule` decorator.
|
|
23726
23878
|
*/
|
|
23727
23879
|
function compileNgModule(moduleType, ngModule = {}) {
|
|
23880
|
+
patchModuleCompilation();
|
|
23728
23881
|
compileNgModuleDefs(moduleType, ngModule);
|
|
23882
|
+
if (ngModule.id !== undefined) {
|
|
23883
|
+
registerNgModuleType(moduleType, ngModule.id);
|
|
23884
|
+
}
|
|
23729
23885
|
// Because we don't know if all declarations have resolved yet at the moment the
|
|
23730
23886
|
// NgModule decorator is executing, we're enqueueing the setting of module scope
|
|
23731
23887
|
// on its declarations to be run at a later time when all declarations for the module,
|
|
@@ -24336,7 +24492,10 @@ function directiveMetadata(type, metadata) {
|
|
|
24336
24492
|
usesInheritance: !extendsDirectlyFromObject(type),
|
|
24337
24493
|
exportAs: extractExportAs(metadata.exportAs),
|
|
24338
24494
|
providers: metadata.providers || null,
|
|
24339
|
-
viewQueries: extractQueriesMetadata(type, propMetadata, isViewQuery)
|
|
24495
|
+
viewQueries: extractQueriesMetadata(type, propMetadata, isViewQuery),
|
|
24496
|
+
// TODO(alxhub): pass through the standalone flag from the directive metadata once standalone
|
|
24497
|
+
// functionality is fully rolled out.
|
|
24498
|
+
isStandalone: false,
|
|
24340
24499
|
};
|
|
24341
24500
|
}
|
|
24342
24501
|
/**
|
|
@@ -24480,7 +24639,10 @@ function getPipeMetadata(type, meta) {
|
|
|
24480
24639
|
type: type,
|
|
24481
24640
|
name: type.name,
|
|
24482
24641
|
pipeName: meta.name,
|
|
24483
|
-
pure: meta.pure !== undefined ? meta.pure : true
|
|
24642
|
+
pure: meta.pure !== undefined ? meta.pure : true,
|
|
24643
|
+
// TODO(alxhub): pass through the standalone flag from the pipe metadata once standalone
|
|
24644
|
+
// functionality is fully rolled out.
|
|
24645
|
+
isStandalone: false,
|
|
24484
24646
|
};
|
|
24485
24647
|
}
|
|
24486
24648
|
|
|
@@ -24774,10 +24936,11 @@ class ApplicationInitStatus {
|
|
|
24774
24936
|
}
|
|
24775
24937
|
}
|
|
24776
24938
|
ApplicationInitStatus.ɵfac = function ApplicationInitStatus_Factory(t) { return new (t || ApplicationInitStatus)(ɵɵinject(APP_INITIALIZER, 8)); };
|
|
24777
|
-
ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationInitStatus, factory: ApplicationInitStatus.ɵfac });
|
|
24939
|
+
ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationInitStatus, factory: ApplicationInitStatus.ɵfac, providedIn: 'root' });
|
|
24778
24940
|
(function () {
|
|
24779
24941
|
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationInitStatus, [{
|
|
24780
|
-
type: Injectable
|
|
24942
|
+
type: Injectable,
|
|
24943
|
+
args: [{ providedIn: 'root' }]
|
|
24781
24944
|
}], function () {
|
|
24782
24945
|
return [{ type: undefined, decorators: [{
|
|
24783
24946
|
type: Inject,
|
|
@@ -24806,7 +24969,10 @@ ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Appli
|
|
|
24806
24969
|
*
|
|
24807
24970
|
* @publicApi
|
|
24808
24971
|
*/
|
|
24809
|
-
const APP_ID = new InjectionToken('AppId'
|
|
24972
|
+
const APP_ID = new InjectionToken('AppId', {
|
|
24973
|
+
providedIn: 'root',
|
|
24974
|
+
factory: _appIdRandomProviderFactory,
|
|
24975
|
+
});
|
|
24810
24976
|
function _appIdRandomProviderFactory() {
|
|
24811
24977
|
return `${_randomChar()}${_randomChar()}${_randomChar()}`;
|
|
24812
24978
|
}
|
|
@@ -24849,6 +25015,15 @@ const APP_BOOTSTRAP_LISTENER = new InjectionToken('appBootstrapListener');
|
|
|
24849
25015
|
* @publicApi
|
|
24850
25016
|
*/
|
|
24851
25017
|
const PACKAGE_ROOT_URL = new InjectionToken('Application Packages Root URL');
|
|
25018
|
+
// We keep this token here, rather than the animations package, so that modules that only care
|
|
25019
|
+
// about which animations module is loaded (e.g. the CDK) can retrieve it without having to
|
|
25020
|
+
// include extra dependencies. See #44970 for more context.
|
|
25021
|
+
/**
|
|
25022
|
+
* A [DI token](guide/glossary#di-token "DI token definition") that indicates which animations
|
|
25023
|
+
* module has been loaded.
|
|
25024
|
+
* @publicApi
|
|
25025
|
+
*/
|
|
25026
|
+
const ANIMATION_MODULE_TYPE = new InjectionToken('AnimationModuleType');
|
|
24852
25027
|
|
|
24853
25028
|
/**
|
|
24854
25029
|
* @license
|
|
@@ -24883,6 +25058,33 @@ Console.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Console, factory: C
|
|
|
24883
25058
|
* Use of this source code is governed by an MIT-style license that can be
|
|
24884
25059
|
* found in the LICENSE file at https://angular.io/license
|
|
24885
25060
|
*/
|
|
25061
|
+
/**
|
|
25062
|
+
* Work out the locale from the potential global properties.
|
|
25063
|
+
*
|
|
25064
|
+
* * Closure Compiler: use `goog.LOCALE`.
|
|
25065
|
+
* * Ivy enabled: use `$localize.locale`
|
|
25066
|
+
*/
|
|
25067
|
+
function getGlobalLocale() {
|
|
25068
|
+
if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode &&
|
|
25069
|
+
typeof goog !== 'undefined' && goog.LOCALE !== 'en') {
|
|
25070
|
+
// * The default `goog.LOCALE` value is `en`, while Angular used `en-US`.
|
|
25071
|
+
// * In order to preserve backwards compatibility, we use Angular default value over
|
|
25072
|
+
// Closure Compiler's one.
|
|
25073
|
+
return goog.LOCALE;
|
|
25074
|
+
}
|
|
25075
|
+
else {
|
|
25076
|
+
// KEEP `typeof $localize !== 'undefined' && $localize.locale` IN SYNC WITH THE LOCALIZE
|
|
25077
|
+
// COMPILE-TIME INLINER.
|
|
25078
|
+
//
|
|
25079
|
+
// * During compile time inlining of translations the expression will be replaced
|
|
25080
|
+
// with a string literal that is the current locale. Other forms of this expression are not
|
|
25081
|
+
// guaranteed to be replaced.
|
|
25082
|
+
//
|
|
25083
|
+
// * During runtime translation evaluation, the developer is required to set `$localize.locale`
|
|
25084
|
+
// if required, or just to provide their own `LOCALE_ID` provider.
|
|
25085
|
+
return (typeof $localize !== 'undefined' && $localize.locale) || DEFAULT_LOCALE_ID;
|
|
25086
|
+
}
|
|
25087
|
+
}
|
|
24886
25088
|
/**
|
|
24887
25089
|
* Provide this token to set the locale of your application.
|
|
24888
25090
|
* It is used for i18n extraction, by i18n pipes (DatePipe, I18nPluralPipe, CurrencyPipe,
|
|
@@ -24905,7 +25107,10 @@ Console.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Console, factory: C
|
|
|
24905
25107
|
*
|
|
24906
25108
|
* @publicApi
|
|
24907
25109
|
*/
|
|
24908
|
-
const LOCALE_ID = new InjectionToken('LocaleId'
|
|
25110
|
+
const LOCALE_ID = new InjectionToken('LocaleId', {
|
|
25111
|
+
providedIn: 'root',
|
|
25112
|
+
factory: () => inject(LOCALE_ID, InjectFlags.Optional | InjectFlags.SkipSelf) || getGlobalLocale(),
|
|
25113
|
+
});
|
|
24909
25114
|
/**
|
|
24910
25115
|
* Provide this token to set the default currency code your application uses for
|
|
24911
25116
|
* CurrencyPipe when there is no currency code passed into it. This is only used by
|
|
@@ -24944,7 +25149,10 @@ const LOCALE_ID = new InjectionToken('LocaleId');
|
|
|
24944
25149
|
*
|
|
24945
25150
|
* @publicApi
|
|
24946
25151
|
*/
|
|
24947
|
-
const DEFAULT_CURRENCY_CODE = new InjectionToken('DefaultCurrencyCode'
|
|
25152
|
+
const DEFAULT_CURRENCY_CODE = new InjectionToken('DefaultCurrencyCode', {
|
|
25153
|
+
providedIn: 'root',
|
|
25154
|
+
factory: () => USD_CURRENCY_CODE,
|
|
25155
|
+
});
|
|
24948
25156
|
/**
|
|
24949
25157
|
* Use this token at bootstrap to provide the content of your translation file (`xtb`,
|
|
24950
25158
|
* `xlf` or `xlf2`) when you want to translate your application in another language.
|
|
@@ -25111,10 +25319,11 @@ class Compiler {
|
|
|
25111
25319
|
}
|
|
25112
25320
|
}
|
|
25113
25321
|
Compiler.ɵfac = function Compiler_Factory(t) { return new (t || Compiler)(); };
|
|
25114
|
-
Compiler.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Compiler, factory: Compiler.ɵfac });
|
|
25322
|
+
Compiler.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Compiler, factory: Compiler.ɵfac, providedIn: 'root' });
|
|
25115
25323
|
(function () {
|
|
25116
25324
|
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Compiler, [{
|
|
25117
|
-
type: Injectable
|
|
25325
|
+
type: Injectable,
|
|
25326
|
+
args: [{ providedIn: 'root' }]
|
|
25118
25327
|
}], null, null);
|
|
25119
25328
|
})();
|
|
25120
25329
|
/**
|
|
@@ -25992,26 +26201,7 @@ class PlatformRef {
|
|
|
25992
26201
|
this._destroyed = false;
|
|
25993
26202
|
}
|
|
25994
26203
|
/**
|
|
25995
|
-
* Creates an instance of an `@NgModule` for the given platform
|
|
25996
|
-
*
|
|
25997
|
-
* @usageNotes
|
|
25998
|
-
*
|
|
25999
|
-
* The following example creates the NgModule for a browser platform.
|
|
26000
|
-
*
|
|
26001
|
-
* ```typescript
|
|
26002
|
-
* my_module.ts:
|
|
26003
|
-
*
|
|
26004
|
-
* @NgModule({
|
|
26005
|
-
* imports: [BrowserModule]
|
|
26006
|
-
* })
|
|
26007
|
-
* class MyModule {}
|
|
26008
|
-
*
|
|
26009
|
-
* main.ts:
|
|
26010
|
-
* import {MyModuleNgFactory} from './my_module.ngfactory';
|
|
26011
|
-
* import {platformBrowser} from '@angular/platform-browser';
|
|
26012
|
-
*
|
|
26013
|
-
* let moduleRef = platformBrowser().bootstrapModuleFactory(MyModuleNgFactory);
|
|
26014
|
-
* ```
|
|
26204
|
+
* Creates an instance of an `@NgModule` for the given platform.
|
|
26015
26205
|
*
|
|
26016
26206
|
* @deprecated Passing NgModule factories as the `PlatformRef.bootstrapModuleFactory` function
|
|
26017
26207
|
* argument is deprecated. Use the `PlatformRef.bootstrapModule` API instead.
|
|
@@ -26065,7 +26255,7 @@ class PlatformRef {
|
|
|
26065
26255
|
});
|
|
26066
26256
|
}
|
|
26067
26257
|
/**
|
|
26068
|
-
* Creates an instance of an `@NgModule` for a given platform
|
|
26258
|
+
* Creates an instance of an `@NgModule` for a given platform.
|
|
26069
26259
|
*
|
|
26070
26260
|
* @usageNotes
|
|
26071
26261
|
* ### Simple Example
|
|
@@ -26501,10 +26691,11 @@ class ApplicationRef {
|
|
|
26501
26691
|
}
|
|
26502
26692
|
}
|
|
26503
26693
|
ApplicationRef.ɵfac = function ApplicationRef_Factory(t) { return new (t || ApplicationRef)(ɵɵinject(NgZone), ɵɵinject(Injector), ɵɵinject(ErrorHandler), ɵɵinject(ComponentFactoryResolver$1), ɵɵinject(ApplicationInitStatus)); };
|
|
26504
|
-
ApplicationRef.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac });
|
|
26694
|
+
ApplicationRef.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac, providedIn: 'root' });
|
|
26505
26695
|
(function () {
|
|
26506
26696
|
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationRef, [{
|
|
26507
|
-
type: Injectable
|
|
26697
|
+
type: Injectable,
|
|
26698
|
+
args: [{ providedIn: 'root' }]
|
|
26508
26699
|
}], function () { return [{ type: NgZone }, { type: Injector }, { type: ErrorHandler }, { type: ComponentFactoryResolver$1 }, { type: ApplicationInitStatus }]; }, null);
|
|
26509
26700
|
})();
|
|
26510
26701
|
function remove(list, el) {
|
|
@@ -26812,8 +27003,6 @@ var ng_module_factory_loader_impl = {};
|
|
|
26812
27003
|
* Use of this source code is governed by an MIT-style license that can be
|
|
26813
27004
|
* found in the LICENSE file at https://angular.io/license
|
|
26814
27005
|
*/
|
|
26815
|
-
// TODO(alxhub): recombine the interfaces and implementations here and move the docs back onto the
|
|
26816
|
-
// original classes.
|
|
26817
27006
|
/**
|
|
26818
27007
|
* @publicApi
|
|
26819
27008
|
*/
|
|
@@ -26829,47 +27018,92 @@ class DebugEventListener {
|
|
|
26829
27018
|
function asNativeElements(debugEls) {
|
|
26830
27019
|
return debugEls.map((el) => el.nativeElement);
|
|
26831
27020
|
}
|
|
26832
|
-
|
|
27021
|
+
/**
|
|
27022
|
+
* @publicApi
|
|
27023
|
+
*/
|
|
27024
|
+
class DebugNode {
|
|
26833
27025
|
constructor(nativeNode) {
|
|
26834
27026
|
this.nativeNode = nativeNode;
|
|
26835
27027
|
}
|
|
27028
|
+
/**
|
|
27029
|
+
* The `DebugElement` parent. Will be `null` if this is the root element.
|
|
27030
|
+
*/
|
|
26836
27031
|
get parent() {
|
|
26837
27032
|
const parent = this.nativeNode.parentNode;
|
|
26838
|
-
return parent ? new
|
|
27033
|
+
return parent ? new DebugElement(parent) : null;
|
|
26839
27034
|
}
|
|
27035
|
+
/**
|
|
27036
|
+
* The host dependency injector. For example, the root element's component instance injector.
|
|
27037
|
+
*/
|
|
26840
27038
|
get injector() {
|
|
26841
27039
|
return getInjector(this.nativeNode);
|
|
26842
27040
|
}
|
|
27041
|
+
/**
|
|
27042
|
+
* The element's own component instance, if it has one.
|
|
27043
|
+
*/
|
|
26843
27044
|
get componentInstance() {
|
|
26844
27045
|
const nativeElement = this.nativeNode;
|
|
26845
27046
|
return nativeElement &&
|
|
26846
27047
|
(getComponent$1(nativeElement) || getOwningComponent(nativeElement));
|
|
26847
27048
|
}
|
|
27049
|
+
/**
|
|
27050
|
+
* An object that provides parent context for this element. Often an ancestor component instance
|
|
27051
|
+
* that governs this element.
|
|
27052
|
+
*
|
|
27053
|
+
* When an element is repeated within *ngFor, the context is an `NgForOf` whose `$implicit`
|
|
27054
|
+
* property is the value of the row instance value. For example, the `hero` in `*ngFor="let hero
|
|
27055
|
+
* of heroes"`.
|
|
27056
|
+
*/
|
|
26848
27057
|
get context() {
|
|
26849
27058
|
return getComponent$1(this.nativeNode) || getContext(this.nativeNode);
|
|
26850
27059
|
}
|
|
27060
|
+
/**
|
|
27061
|
+
* The callbacks attached to the component's @Output properties and/or the element's event
|
|
27062
|
+
* properties.
|
|
27063
|
+
*/
|
|
26851
27064
|
get listeners() {
|
|
26852
27065
|
return getListeners(this.nativeNode).filter(listener => listener.type === 'dom');
|
|
26853
27066
|
}
|
|
27067
|
+
/**
|
|
27068
|
+
* Dictionary of objects associated with template local variables (e.g. #foo), keyed by the local
|
|
27069
|
+
* variable name.
|
|
27070
|
+
*/
|
|
26854
27071
|
get references() {
|
|
26855
27072
|
return getLocalRefs(this.nativeNode);
|
|
26856
27073
|
}
|
|
27074
|
+
/**
|
|
27075
|
+
* This component's injector lookup tokens. Includes the component itself plus the tokens that the
|
|
27076
|
+
* component lists in its providers metadata.
|
|
27077
|
+
*/
|
|
26857
27078
|
get providerTokens() {
|
|
26858
27079
|
return getInjectionTokens(this.nativeNode);
|
|
26859
27080
|
}
|
|
26860
27081
|
}
|
|
26861
|
-
|
|
27082
|
+
/**
|
|
27083
|
+
* @publicApi
|
|
27084
|
+
*
|
|
27085
|
+
* @see [Component testing scenarios](guide/testing-components-scenarios)
|
|
27086
|
+
* @see [Basics of testing components](guide/testing-components-basics)
|
|
27087
|
+
* @see [Testing utility APIs](guide/testing-utility-apis)
|
|
27088
|
+
*/
|
|
27089
|
+
class DebugElement extends DebugNode {
|
|
26862
27090
|
constructor(nativeNode) {
|
|
26863
27091
|
ngDevMode && assertDomNode(nativeNode);
|
|
26864
27092
|
super(nativeNode);
|
|
26865
27093
|
}
|
|
27094
|
+
/**
|
|
27095
|
+
* The underlying DOM element at the root of the component.
|
|
27096
|
+
*/
|
|
26866
27097
|
get nativeElement() {
|
|
26867
27098
|
return this.nativeNode.nodeType == Node.ELEMENT_NODE ? this.nativeNode : null;
|
|
26868
27099
|
}
|
|
27100
|
+
/**
|
|
27101
|
+
* The element tag name, if it is an element.
|
|
27102
|
+
*/
|
|
26869
27103
|
get name() {
|
|
26870
27104
|
const context = getLContext(this.nativeNode);
|
|
26871
|
-
|
|
26872
|
-
|
|
27105
|
+
const lView = context ? context.lView : null;
|
|
27106
|
+
if (lView !== null) {
|
|
26873
27107
|
const tData = lView[TVIEW].data;
|
|
26874
27108
|
const tNode = tData[context.nodeIndex];
|
|
26875
27109
|
return tNode.value;
|
|
@@ -26892,10 +27126,10 @@ class DebugElement__POST_R3__ extends DebugNode__POST_R3__ {
|
|
|
26892
27126
|
*/
|
|
26893
27127
|
get properties() {
|
|
26894
27128
|
const context = getLContext(this.nativeNode);
|
|
26895
|
-
|
|
27129
|
+
const lView = context ? context.lView : null;
|
|
27130
|
+
if (lView === null) {
|
|
26896
27131
|
return {};
|
|
26897
27132
|
}
|
|
26898
|
-
const lView = context.lView;
|
|
26899
27133
|
const tData = lView[TVIEW].data;
|
|
26900
27134
|
const tNode = tData[context.nodeIndex];
|
|
26901
27135
|
const properties = {};
|
|
@@ -26906,6 +27140,9 @@ class DebugElement__POST_R3__ extends DebugNode__POST_R3__ {
|
|
|
26906
27140
|
collectPropertyBindings(properties, tNode, lView, tData);
|
|
26907
27141
|
return properties;
|
|
26908
27142
|
}
|
|
27143
|
+
/**
|
|
27144
|
+
* A map of attribute names to attribute values for an element.
|
|
27145
|
+
*/
|
|
26909
27146
|
get attributes() {
|
|
26910
27147
|
const attributes = {};
|
|
26911
27148
|
const element = this.nativeElement;
|
|
@@ -26913,10 +27150,10 @@ class DebugElement__POST_R3__ extends DebugNode__POST_R3__ {
|
|
|
26913
27150
|
return attributes;
|
|
26914
27151
|
}
|
|
26915
27152
|
const context = getLContext(element);
|
|
26916
|
-
|
|
27153
|
+
const lView = context ? context.lView : null;
|
|
27154
|
+
if (lView === null) {
|
|
26917
27155
|
return {};
|
|
26918
27156
|
}
|
|
26919
|
-
const lView = context.lView;
|
|
26920
27157
|
const tNodeAttrs = lView[TVIEW].data[context.nodeIndex].attrs;
|
|
26921
27158
|
const lowercaseTNodeAttrs = [];
|
|
26922
27159
|
// For debug nodes we take the element's attribute directly from the DOM since it allows us
|
|
@@ -26954,12 +27191,29 @@ class DebugElement__POST_R3__ extends DebugNode__POST_R3__ {
|
|
|
26954
27191
|
}
|
|
26955
27192
|
return attributes;
|
|
26956
27193
|
}
|
|
27194
|
+
/**
|
|
27195
|
+
* The inline styles of the DOM element.
|
|
27196
|
+
*
|
|
27197
|
+
* Will be `null` if there is no `style` property on the underlying DOM element.
|
|
27198
|
+
*
|
|
27199
|
+
* @see [ElementCSSInlineStyle](https://developer.mozilla.org/en-US/docs/Web/API/ElementCSSInlineStyle/style)
|
|
27200
|
+
*/
|
|
26957
27201
|
get styles() {
|
|
26958
27202
|
if (this.nativeElement && this.nativeElement.style) {
|
|
26959
27203
|
return this.nativeElement.style;
|
|
26960
27204
|
}
|
|
26961
27205
|
return {};
|
|
26962
27206
|
}
|
|
27207
|
+
/**
|
|
27208
|
+
* A map containing the class names on the element as keys.
|
|
27209
|
+
*
|
|
27210
|
+
* This map is derived from the `className` property of the DOM element.
|
|
27211
|
+
*
|
|
27212
|
+
* Note: The values of this object will always be `true`. The class key will not appear in the KV
|
|
27213
|
+
* object if it does not exist on the element.
|
|
27214
|
+
*
|
|
27215
|
+
* @see [Element.className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className)
|
|
27216
|
+
*/
|
|
26963
27217
|
get classes() {
|
|
26964
27218
|
const result = {};
|
|
26965
27219
|
const element = this.nativeElement;
|
|
@@ -26969,15 +27223,23 @@ class DebugElement__POST_R3__ extends DebugNode__POST_R3__ {
|
|
|
26969
27223
|
classes.forEach((value) => result[value] = true);
|
|
26970
27224
|
return result;
|
|
26971
27225
|
}
|
|
27226
|
+
/**
|
|
27227
|
+
* The `childNodes` of the DOM element as a `DebugNode` array.
|
|
27228
|
+
*
|
|
27229
|
+
* @see [Node.childNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes)
|
|
27230
|
+
*/
|
|
26972
27231
|
get childNodes() {
|
|
26973
27232
|
const childNodes = this.nativeNode.childNodes;
|
|
26974
27233
|
const children = [];
|
|
26975
27234
|
for (let i = 0; i < childNodes.length; i++) {
|
|
26976
27235
|
const element = childNodes[i];
|
|
26977
|
-
children.push(
|
|
27236
|
+
children.push(getDebugNode(element));
|
|
26978
27237
|
}
|
|
26979
27238
|
return children;
|
|
26980
27239
|
}
|
|
27240
|
+
/**
|
|
27241
|
+
* The immediate `DebugElement` children. Walk the tree by descending through `children`.
|
|
27242
|
+
*/
|
|
26981
27243
|
get children() {
|
|
26982
27244
|
const nativeElement = this.nativeElement;
|
|
26983
27245
|
if (!nativeElement)
|
|
@@ -26986,24 +27248,45 @@ class DebugElement__POST_R3__ extends DebugNode__POST_R3__ {
|
|
|
26986
27248
|
const children = [];
|
|
26987
27249
|
for (let i = 0; i < childNodes.length; i++) {
|
|
26988
27250
|
const element = childNodes[i];
|
|
26989
|
-
children.push(
|
|
27251
|
+
children.push(getDebugNode(element));
|
|
26990
27252
|
}
|
|
26991
27253
|
return children;
|
|
26992
27254
|
}
|
|
27255
|
+
/**
|
|
27256
|
+
* @returns the first `DebugElement` that matches the predicate at any depth in the subtree.
|
|
27257
|
+
*/
|
|
26993
27258
|
query(predicate) {
|
|
26994
27259
|
const results = this.queryAll(predicate);
|
|
26995
27260
|
return results[0] || null;
|
|
26996
27261
|
}
|
|
27262
|
+
/**
|
|
27263
|
+
* @returns All `DebugElement` matches for the predicate at any depth in the subtree.
|
|
27264
|
+
*/
|
|
26997
27265
|
queryAll(predicate) {
|
|
26998
27266
|
const matches = [];
|
|
26999
|
-
|
|
27267
|
+
_queryAll(this, predicate, matches, true);
|
|
27000
27268
|
return matches;
|
|
27001
27269
|
}
|
|
27270
|
+
/**
|
|
27271
|
+
* @returns All `DebugNode` matches for the predicate at any depth in the subtree.
|
|
27272
|
+
*/
|
|
27002
27273
|
queryAllNodes(predicate) {
|
|
27003
27274
|
const matches = [];
|
|
27004
|
-
|
|
27275
|
+
_queryAll(this, predicate, matches, false);
|
|
27005
27276
|
return matches;
|
|
27006
27277
|
}
|
|
27278
|
+
/**
|
|
27279
|
+
* Triggers the event by its name if there is a corresponding listener in the element's
|
|
27280
|
+
* `listeners` collection.
|
|
27281
|
+
*
|
|
27282
|
+
* If the event lacks a listener or there's some other problem, consider
|
|
27283
|
+
* calling `nativeElement.dispatchEvent(eventObject)`.
|
|
27284
|
+
*
|
|
27285
|
+
* @param eventName The name of the event to trigger
|
|
27286
|
+
* @param eventObj The _event object_ expected by the handler
|
|
27287
|
+
*
|
|
27288
|
+
* @see [Testing components scenarios](guide/testing-components-scenarios#trigger-event-handler)
|
|
27289
|
+
*/
|
|
27007
27290
|
triggerEventHandler(eventName, eventObj) {
|
|
27008
27291
|
const node = this.nativeNode;
|
|
27009
27292
|
const invokedListeners = [];
|
|
@@ -27062,11 +27345,12 @@ function isPrimitiveValue(value) {
|
|
|
27062
27345
|
return typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number' ||
|
|
27063
27346
|
value === null;
|
|
27064
27347
|
}
|
|
27065
|
-
function
|
|
27348
|
+
function _queryAll(parentElement, predicate, matches, elementsOnly) {
|
|
27066
27349
|
const context = getLContext(parentElement.nativeNode);
|
|
27067
|
-
|
|
27068
|
-
|
|
27069
|
-
|
|
27350
|
+
const lView = context ? context.lView : null;
|
|
27351
|
+
if (lView !== null) {
|
|
27352
|
+
const parentTNode = lView[TVIEW].data[context.nodeIndex];
|
|
27353
|
+
_queryNodeChildren(parentTNode, lView, predicate, matches, elementsOnly, parentElement.nativeNode);
|
|
27070
27354
|
}
|
|
27071
27355
|
else {
|
|
27072
27356
|
// If the context is null, then `parentElement` was either created with Renderer2 or native DOM
|
|
@@ -27084,26 +27368,26 @@ function _queryAllR3(parentElement, predicate, matches, elementsOnly) {
|
|
|
27084
27368
|
* @param elementsOnly whether only elements should be searched
|
|
27085
27369
|
* @param rootNativeNode the root native node on which predicate should not be matched
|
|
27086
27370
|
*/
|
|
27087
|
-
function
|
|
27371
|
+
function _queryNodeChildren(tNode, lView, predicate, matches, elementsOnly, rootNativeNode) {
|
|
27088
27372
|
ngDevMode && assertTNodeForLView(tNode, lView);
|
|
27089
27373
|
const nativeNode = getNativeByTNodeOrNull(tNode, lView);
|
|
27090
27374
|
// For each type of TNode, specific logic is executed.
|
|
27091
27375
|
if (tNode.type & (3 /* AnyRNode */ | 8 /* ElementContainer */)) {
|
|
27092
27376
|
// Case 1: the TNode is an element
|
|
27093
27377
|
// The native node has to be checked.
|
|
27094
|
-
|
|
27378
|
+
_addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode);
|
|
27095
27379
|
if (isComponentHost(tNode)) {
|
|
27096
27380
|
// If the element is the host of a component, then all nodes in its view have to be processed.
|
|
27097
27381
|
// Note: the component's content (tNode.child) will be processed from the insertion points.
|
|
27098
27382
|
const componentView = getComponentLViewByIndex(tNode.index, lView);
|
|
27099
27383
|
if (componentView && componentView[TVIEW].firstChild) {
|
|
27100
|
-
|
|
27384
|
+
_queryNodeChildren(componentView[TVIEW].firstChild, componentView, predicate, matches, elementsOnly, rootNativeNode);
|
|
27101
27385
|
}
|
|
27102
27386
|
}
|
|
27103
27387
|
else {
|
|
27104
27388
|
if (tNode.child) {
|
|
27105
27389
|
// Otherwise, its children have to be processed.
|
|
27106
|
-
|
|
27390
|
+
_queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);
|
|
27107
27391
|
}
|
|
27108
27392
|
// We also have to query the DOM directly in order to catch elements inserted through
|
|
27109
27393
|
// Renderer2. Note that this is __not__ optimal, because we're walking similar trees multiple
|
|
@@ -27119,16 +27403,16 @@ function _queryNodeChildrenR3(tNode, lView, predicate, matches, elementsOnly, ro
|
|
|
27119
27403
|
// processed.
|
|
27120
27404
|
const nodeOrContainer = lView[tNode.index];
|
|
27121
27405
|
if (isLContainer(nodeOrContainer)) {
|
|
27122
|
-
|
|
27406
|
+
_queryNodeChildrenInContainer(nodeOrContainer, predicate, matches, elementsOnly, rootNativeNode);
|
|
27123
27407
|
}
|
|
27124
27408
|
}
|
|
27125
27409
|
else if (tNode.type & 4 /* Container */) {
|
|
27126
27410
|
// Case 2: the TNode is a container
|
|
27127
27411
|
// The native node has to be checked.
|
|
27128
27412
|
const lContainer = lView[tNode.index];
|
|
27129
|
-
|
|
27413
|
+
_addQueryMatch(lContainer[NATIVE], predicate, matches, elementsOnly, rootNativeNode);
|
|
27130
27414
|
// Each view inside the container has to be processed.
|
|
27131
|
-
|
|
27415
|
+
_queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode);
|
|
27132
27416
|
}
|
|
27133
27417
|
else if (tNode.type & 16 /* Projection */) {
|
|
27134
27418
|
// Case 3: the TNode is a projection insertion point (i.e. a <ng-content>).
|
|
@@ -27138,18 +27422,18 @@ function _queryNodeChildrenR3(tNode, lView, predicate, matches, elementsOnly, ro
|
|
|
27138
27422
|
const head = componentHost.projection[tNode.projection];
|
|
27139
27423
|
if (Array.isArray(head)) {
|
|
27140
27424
|
for (let nativeNode of head) {
|
|
27141
|
-
|
|
27425
|
+
_addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode);
|
|
27142
27426
|
}
|
|
27143
27427
|
}
|
|
27144
27428
|
else if (head) {
|
|
27145
27429
|
const nextLView = componentView[PARENT];
|
|
27146
27430
|
const nextTNode = nextLView[TVIEW].data[head.index];
|
|
27147
|
-
|
|
27431
|
+
_queryNodeChildren(nextTNode, nextLView, predicate, matches, elementsOnly, rootNativeNode);
|
|
27148
27432
|
}
|
|
27149
27433
|
}
|
|
27150
27434
|
else if (tNode.child) {
|
|
27151
27435
|
// Case 4: the TNode is a view.
|
|
27152
|
-
|
|
27436
|
+
_queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);
|
|
27153
27437
|
}
|
|
27154
27438
|
// We don't want to go to the next sibling of the root node.
|
|
27155
27439
|
if (rootNativeNode !== nativeNode) {
|
|
@@ -27157,7 +27441,7 @@ function _queryNodeChildrenR3(tNode, lView, predicate, matches, elementsOnly, ro
|
|
|
27157
27441
|
// link, depending on whether the current node has been projected.
|
|
27158
27442
|
const nextTNode = (tNode.flags & 4 /* isProjected */) ? tNode.projectionNext : tNode.next;
|
|
27159
27443
|
if (nextTNode) {
|
|
27160
|
-
|
|
27444
|
+
_queryNodeChildren(nextTNode, lView, predicate, matches, elementsOnly, rootNativeNode);
|
|
27161
27445
|
}
|
|
27162
27446
|
}
|
|
27163
27447
|
}
|
|
@@ -27170,12 +27454,12 @@ function _queryNodeChildrenR3(tNode, lView, predicate, matches, elementsOnly, ro
|
|
|
27170
27454
|
* @param elementsOnly whether only elements should be searched
|
|
27171
27455
|
* @param rootNativeNode the root native node on which predicate should not be matched
|
|
27172
27456
|
*/
|
|
27173
|
-
function
|
|
27457
|
+
function _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode) {
|
|
27174
27458
|
for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
|
|
27175
27459
|
const childView = lContainer[i];
|
|
27176
27460
|
const firstChild = childView[TVIEW].firstChild;
|
|
27177
27461
|
if (firstChild) {
|
|
27178
|
-
|
|
27462
|
+
_queryNodeChildren(firstChild, childView, predicate, matches, elementsOnly, rootNativeNode);
|
|
27179
27463
|
}
|
|
27180
27464
|
}
|
|
27181
27465
|
}
|
|
@@ -27188,7 +27472,7 @@ function _queryNodeChildrenInContainerR3(lContainer, predicate, matches, element
|
|
|
27188
27472
|
* @param elementsOnly whether only elements should be searched
|
|
27189
27473
|
* @param rootNativeNode the root native node on which predicate should not be matched
|
|
27190
27474
|
*/
|
|
27191
|
-
function
|
|
27475
|
+
function _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode) {
|
|
27192
27476
|
if (rootNativeNode !== nativeNode) {
|
|
27193
27477
|
const debugNode = getDebugNode(nativeNode);
|
|
27194
27478
|
if (!debugNode) {
|
|
@@ -27197,7 +27481,7 @@ function _addQueryMatchR3(nativeNode, predicate, matches, elementsOnly, rootNati
|
|
|
27197
27481
|
// Type of the "predicate and "matches" array are set based on the value of
|
|
27198
27482
|
// the "elementsOnly" parameter. TypeScript is not able to properly infer these
|
|
27199
27483
|
// types with generics, so we manually cast the parameters accordingly.
|
|
27200
|
-
if (elementsOnly && debugNode instanceof
|
|
27484
|
+
if (elementsOnly && (debugNode instanceof DebugElement) && predicate(debugNode) &&
|
|
27201
27485
|
matches.indexOf(debugNode) === -1) {
|
|
27202
27486
|
matches.push(debugNode);
|
|
27203
27487
|
}
|
|
@@ -27222,7 +27506,7 @@ function _queryNativeNodeDescendants(parentNode, predicate, matches, elementsOnl
|
|
|
27222
27506
|
const node = nodes[i];
|
|
27223
27507
|
const debugNode = getDebugNode(node);
|
|
27224
27508
|
if (debugNode) {
|
|
27225
|
-
if (elementsOnly && debugNode instanceof
|
|
27509
|
+
if (elementsOnly && (debugNode instanceof DebugElement) && predicate(debugNode) &&
|
|
27226
27510
|
matches.indexOf(debugNode) === -1) {
|
|
27227
27511
|
matches.push(debugNode);
|
|
27228
27512
|
}
|
|
@@ -27263,25 +27547,24 @@ function collectPropertyBindings(properties, tNode, lView, tData) {
|
|
|
27263
27547
|
// Need to keep the nodes in a global Map so that multiple angular apps are supported.
|
|
27264
27548
|
const _nativeNodeToDebugNode = new Map();
|
|
27265
27549
|
const NG_DEBUG_PROPERTY = '__ng_debug__';
|
|
27266
|
-
|
|
27550
|
+
/**
|
|
27551
|
+
* @publicApi
|
|
27552
|
+
*/
|
|
27553
|
+
function getDebugNode(nativeNode) {
|
|
27267
27554
|
if (nativeNode instanceof Node) {
|
|
27268
27555
|
if (!(nativeNode.hasOwnProperty(NG_DEBUG_PROPERTY))) {
|
|
27269
27556
|
nativeNode[NG_DEBUG_PROPERTY] = nativeNode.nodeType == Node.ELEMENT_NODE ?
|
|
27270
|
-
new
|
|
27271
|
-
new
|
|
27557
|
+
new DebugElement(nativeNode) :
|
|
27558
|
+
new DebugNode(nativeNode);
|
|
27272
27559
|
}
|
|
27273
27560
|
return nativeNode[NG_DEBUG_PROPERTY];
|
|
27274
27561
|
}
|
|
27275
27562
|
return null;
|
|
27276
27563
|
}
|
|
27277
|
-
|
|
27278
|
-
|
|
27279
|
-
*/
|
|
27280
|
-
const getDebugNode = getDebugNode__POST_R3__;
|
|
27281
|
-
function getDebugNodeR2__POST_R3__(_nativeNode) {
|
|
27564
|
+
// TODO: cleanup all references to this function and remove it.
|
|
27565
|
+
function getDebugNodeR2(_nativeNode) {
|
|
27282
27566
|
return null;
|
|
27283
27567
|
}
|
|
27284
|
-
const getDebugNodeR2 = getDebugNodeR2__POST_R3__;
|
|
27285
27568
|
function getAllDebugNodes() {
|
|
27286
27569
|
return Array.from(_nativeNodeToDebugNode.values());
|
|
27287
27570
|
}
|
|
@@ -27291,14 +27574,6 @@ function indexDebugNode(node) {
|
|
|
27291
27574
|
function removeDebugNodeFromIndex(node) {
|
|
27292
27575
|
_nativeNodeToDebugNode.delete(node.nativeNode);
|
|
27293
27576
|
}
|
|
27294
|
-
/**
|
|
27295
|
-
* @publicApi
|
|
27296
|
-
*/
|
|
27297
|
-
const DebugNode = DebugNode__POST_R3__;
|
|
27298
|
-
/**
|
|
27299
|
-
* @publicApi
|
|
27300
|
-
*/
|
|
27301
|
-
const DebugElement = DebugElement__POST_R3__;
|
|
27302
27577
|
|
|
27303
27578
|
/**
|
|
27304
27579
|
* @license
|
|
@@ -28420,102 +28695,9 @@ const _CORE_PLATFORM_PROVIDERS = [
|
|
|
28420
28695
|
const platformCore = createPlatformFactory(null, 'core', _CORE_PLATFORM_PROVIDERS);
|
|
28421
28696
|
|
|
28422
28697
|
/**
|
|
28423
|
-
* @license
|
|
28424
|
-
* Copyright Google LLC All Rights Reserved.
|
|
28425
|
-
*
|
|
28426
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
28427
|
-
* found in the LICENSE file at https://angular.io/license
|
|
28428
|
-
*/
|
|
28429
|
-
function _iterableDiffersFactory() {
|
|
28430
|
-
return defaultIterableDiffers;
|
|
28431
|
-
}
|
|
28432
|
-
function _keyValueDiffersFactory() {
|
|
28433
|
-
return defaultKeyValueDiffers;
|
|
28434
|
-
}
|
|
28435
|
-
function _localeFactory(locale) {
|
|
28436
|
-
return locale || getGlobalLocale();
|
|
28437
|
-
}
|
|
28438
|
-
/**
|
|
28439
|
-
* Work out the locale from the potential global properties.
|
|
28440
|
-
*
|
|
28441
|
-
* * Closure Compiler: use `goog.getLocale()`.
|
|
28442
|
-
* * Ivy enabled: use `$localize.locale`
|
|
28443
|
-
*/
|
|
28444
|
-
function getGlobalLocale() {
|
|
28445
|
-
if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode &&
|
|
28446
|
-
typeof goog !== 'undefined' && goog.getLocale() !== 'en') {
|
|
28447
|
-
// * The default `goog.getLocale()` value is `en`, while Angular used `en-US`.
|
|
28448
|
-
// * In order to preserve backwards compatibility, we use Angular default value over
|
|
28449
|
-
// Closure Compiler's one.
|
|
28450
|
-
return goog.getLocale();
|
|
28451
|
-
}
|
|
28452
|
-
else {
|
|
28453
|
-
// KEEP `typeof $localize !== 'undefined' && $localize.locale` IN SYNC WITH THE LOCALIZE
|
|
28454
|
-
// COMPILE-TIME INLINER.
|
|
28455
|
-
//
|
|
28456
|
-
// * During compile time inlining of translations the expression will be replaced
|
|
28457
|
-
// with a string literal that is the current locale. Other forms of this expression are not
|
|
28458
|
-
// guaranteed to be replaced.
|
|
28459
|
-
//
|
|
28460
|
-
// * During runtime translation evaluation, the developer is required to set `$localize.locale`
|
|
28461
|
-
// if required, or just to provide their own `LOCALE_ID` provider.
|
|
28462
|
-
return (typeof $localize !== 'undefined' && $localize.locale) || DEFAULT_LOCALE_ID;
|
|
28463
|
-
}
|
|
28464
|
-
}
|
|
28465
|
-
/**
|
|
28466
|
-
* A built-in [dependency injection token](guide/glossary#di-token)
|
|
28467
|
-
* that is used to configure the root injector for bootstrapping.
|
|
28468
|
-
*/
|
|
28469
|
-
const APPLICATION_MODULE_PROVIDERS = [
|
|
28470
|
-
{
|
|
28471
|
-
provide: ApplicationRef,
|
|
28472
|
-
useClass: ApplicationRef,
|
|
28473
|
-
deps: [NgZone, Injector, ErrorHandler, ComponentFactoryResolver$1, ApplicationInitStatus]
|
|
28474
|
-
},
|
|
28475
|
-
{ provide: SCHEDULER, deps: [NgZone], useFactory: zoneSchedulerFactory },
|
|
28476
|
-
{
|
|
28477
|
-
provide: ApplicationInitStatus,
|
|
28478
|
-
useClass: ApplicationInitStatus,
|
|
28479
|
-
deps: [[new Optional(), APP_INITIALIZER]]
|
|
28480
|
-
},
|
|
28481
|
-
{ provide: Compiler, useClass: Compiler, deps: [] },
|
|
28482
|
-
APP_ID_RANDOM_PROVIDER,
|
|
28483
|
-
{ provide: IterableDiffers, useFactory: _iterableDiffersFactory, deps: [] },
|
|
28484
|
-
{ provide: KeyValueDiffers, useFactory: _keyValueDiffersFactory, deps: [] },
|
|
28485
|
-
{
|
|
28486
|
-
provide: LOCALE_ID,
|
|
28487
|
-
useFactory: _localeFactory,
|
|
28488
|
-
deps: [[new Inject(LOCALE_ID), new Optional(), new SkipSelf()]]
|
|
28489
|
-
},
|
|
28490
|
-
{ provide: DEFAULT_CURRENCY_CODE, useValue: USD_CURRENCY_CODE },
|
|
28491
|
-
];
|
|
28492
|
-
/**
|
|
28493
|
-
* Schedule work at next available slot.
|
|
28494
|
-
*
|
|
28495
|
-
* In Ivy this is just `requestAnimationFrame`. For compatibility reasons when bootstrapped
|
|
28496
|
-
* using `platformRef.bootstrap` we need to use `NgZone.onStable` as the scheduling mechanism.
|
|
28497
|
-
* This overrides the scheduling mechanism in Ivy to `NgZone.onStable`.
|
|
28498
|
-
*
|
|
28499
|
-
* @param ngZone NgZone to use for scheduling.
|
|
28500
|
-
*/
|
|
28501
|
-
function zoneSchedulerFactory(ngZone) {
|
|
28502
|
-
let queue = [];
|
|
28503
|
-
ngZone.onStable.subscribe(() => {
|
|
28504
|
-
while (queue.length) {
|
|
28505
|
-
queue.pop()();
|
|
28506
|
-
}
|
|
28507
|
-
});
|
|
28508
|
-
return function (fn) {
|
|
28509
|
-
queue.push(fn);
|
|
28510
|
-
};
|
|
28511
|
-
}
|
|
28512
|
-
/**
|
|
28513
|
-
* Configures the root injector for an app with
|
|
28514
|
-
* providers of `@angular/core` dependencies that `ApplicationRef` needs
|
|
28515
|
-
* to bootstrap components.
|
|
28516
|
-
*
|
|
28517
28698
|
* Re-exported by `BrowserModule`, which is included automatically in the root
|
|
28518
|
-
* `AppModule` when you create a new app with the CLI `new` command.
|
|
28699
|
+
* `AppModule` when you create a new app with the CLI `new` command. Eagerly injects
|
|
28700
|
+
* `ApplicationRef` to instantiate it.
|
|
28519
28701
|
*
|
|
28520
28702
|
* @publicApi
|
|
28521
28703
|
*/
|
|
@@ -28525,14 +28707,25 @@ class ApplicationModule {
|
|
|
28525
28707
|
}
|
|
28526
28708
|
ApplicationModule.ɵfac = function ApplicationModule_Factory(t) { return new (t || ApplicationModule)(ɵɵinject(ApplicationRef)); };
|
|
28527
28709
|
ApplicationModule.ɵmod = /*@__PURE__*/ ɵɵdefineNgModule({ type: ApplicationModule });
|
|
28528
|
-
ApplicationModule.ɵinj = /*@__PURE__*/ ɵɵdefineInjector({
|
|
28710
|
+
ApplicationModule.ɵinj = /*@__PURE__*/ ɵɵdefineInjector({});
|
|
28529
28711
|
(function () {
|
|
28530
28712
|
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationModule, [{
|
|
28531
|
-
type: NgModule
|
|
28532
|
-
args: [{ providers: APPLICATION_MODULE_PROVIDERS }]
|
|
28713
|
+
type: NgModule
|
|
28533
28714
|
}], function () { return [{ type: ApplicationRef }]; }, null);
|
|
28534
28715
|
})();
|
|
28535
28716
|
|
|
28717
|
+
/**
|
|
28718
|
+
* @license
|
|
28719
|
+
* Copyright Google LLC All Rights Reserved.
|
|
28720
|
+
*
|
|
28721
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
28722
|
+
* found in the LICENSE file at https://angular.io/license
|
|
28723
|
+
*/
|
|
28724
|
+
/** Coerces a value (typically a string) to a boolean. */
|
|
28725
|
+
function coerceToBoolean(value) {
|
|
28726
|
+
return typeof value === 'boolean' ? value : (value != null && value !== 'false');
|
|
28727
|
+
}
|
|
28728
|
+
|
|
28536
28729
|
/**
|
|
28537
28730
|
* @license
|
|
28538
28731
|
* Copyright Google LLC All Rights Reserved.
|
|
@@ -28691,5 +28884,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
|
28691
28884
|
* Generated bundle index. Do not edit.
|
|
28692
28885
|
*/
|
|
28693
28886
|
|
|
28694
|
-
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,
|
|
28887
|
+
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 };
|
|
28695
28888
|
//# sourceMappingURL=core.mjs.map
|