@angular/core 16.0.0-next.7 → 16.0.0-rc.1
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/esm2022/rxjs-interop/src/index.mjs +3 -3
- package/esm2022/rxjs-interop/src/to_observable.mjs +39 -0
- package/esm2022/rxjs-interop/src/to_signal.mjs +52 -0
- package/esm2022/src/application_ref.mjs +3 -3
- package/esm2022/src/application_tokens.mjs +12 -2
- package/esm2022/src/core_private_export.mjs +3 -2
- package/esm2022/src/debug/debug_node.mjs +4 -9
- package/esm2022/src/di/interface/defs.mjs +3 -18
- package/esm2022/src/di/r3_injector.mjs +2 -1
- package/esm2022/src/errors.mjs +1 -1
- package/esm2022/src/hydration/annotate.mjs +42 -33
- package/esm2022/src/hydration/api.mjs +48 -20
- package/esm2022/src/hydration/error_handling.mjs +1 -17
- package/esm2022/src/hydration/tokens.mjs +4 -3
- package/esm2022/src/initial_render_pending_tasks.mjs +10 -10
- package/esm2022/src/render3/assert.mjs +1 -1
- package/esm2022/src/render3/component_ref.mjs +3 -3
- package/esm2022/src/render3/di.mjs +3 -3
- package/esm2022/src/render3/hooks.mjs +3 -3
- package/esm2022/src/render3/instructions/element_validation.mjs +4 -5
- package/esm2022/src/render3/instructions/i18n.mjs +14 -2
- package/esm2022/src/render3/instructions/mark_view_dirty.mjs +1 -1
- package/esm2022/src/render3/instructions/shared.mjs +14 -14
- package/esm2022/src/render3/interfaces/type_checks.mjs +1 -1
- package/esm2022/src/render3/interfaces/view.mjs +1 -1
- package/esm2022/src/render3/node_manipulation.mjs +9 -9
- package/esm2022/src/render3/reactive_lview_consumer.mjs +2 -2
- package/esm2022/src/render3/reactivity/effect.mjs +1 -1
- package/esm2022/src/render3/util/discovery_utils.mjs +1 -1
- package/esm2022/src/render3/util/view_traversal_utils.mjs +1 -1
- package/esm2022/src/render3/util/view_utils.mjs +6 -2
- package/esm2022/src/render3/view_ref.mjs +4 -4
- package/esm2022/src/signals/src/signal.mjs +8 -1
- package/esm2022/src/signals/src/watch.mjs +6 -2
- package/esm2022/src/version.mjs +1 -1
- package/esm2022/testing/src/logger.mjs +3 -3
- package/esm2022/testing/src/ng_zone_mock.mjs +3 -3
- package/esm2022/testing/src/styling.mjs +1 -2
- package/fesm2022/core.mjs +179 -145
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +764 -56
- package/fesm2022/rxjs-interop.mjs.map +1 -1
- package/fesm2022/testing.mjs +87 -81
- package/fesm2022/testing.mjs.map +1 -1
- package/index.d.ts +43 -18
- package/package.json +2 -2
- package/rxjs-interop/index.d.ts +53 -46
- package/schematics/migrations/guard-and-resolve-interfaces/bundle.js +13 -13
- package/schematics/migrations/remove-module-id/bundle.js +14 -14
- package/schematics/ng-generate/standalone-migration/bundle.js +2938 -1229
- package/schematics/ng-generate/standalone-migration/bundle.js.map +4 -4
- package/testing/index.d.ts +1 -1
- package/esm2022/rxjs-interop/src/from_observable.mjs +0 -46
- package/esm2022/rxjs-interop/src/from_signal.mjs +0 -36
package/fesm2022/core.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v16.0.0-
|
|
2
|
+
* @license Angular v16.0.0-rc.1
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -403,30 +403,15 @@ function getOwnDefinition(type, field) {
|
|
|
403
403
|
function getInheritedInjectableDef(type) {
|
|
404
404
|
const def = type && (type[NG_PROV_DEF] || type[NG_INJECTABLE_DEF]);
|
|
405
405
|
if (def) {
|
|
406
|
-
const typeName = getTypeName(type);
|
|
407
406
|
ngDevMode &&
|
|
408
|
-
console.warn(`DEPRECATED: DI is instantiating a token "${
|
|
409
|
-
`This will become an error in a future version of Angular. Please add @Injectable() to the "${
|
|
407
|
+
console.warn(`DEPRECATED: DI is instantiating a token "${type.name}" that inherits its @Injectable decorator but does not provide one itself.\n` +
|
|
408
|
+
`This will become an error in a future version of Angular. Please add @Injectable() to the "${type.name}" class.`);
|
|
410
409
|
return def;
|
|
411
410
|
}
|
|
412
411
|
else {
|
|
413
412
|
return null;
|
|
414
413
|
}
|
|
415
414
|
}
|
|
416
|
-
/** Gets the name of a type, accounting for some cross-browser differences. */
|
|
417
|
-
function getTypeName(type) {
|
|
418
|
-
// `Function.prototype.name` behaves differently between IE and other browsers. In most browsers
|
|
419
|
-
// it'll always return the name of the function itself, no matter how many other functions it
|
|
420
|
-
// inherits from. On IE the function doesn't have its own `name` property, but it takes it from
|
|
421
|
-
// the lowest level in the prototype chain. E.g. if we have `class Foo extends Parent` most
|
|
422
|
-
// browsers will evaluate `Foo.name` to `Foo` while IE will return `Parent`. We work around
|
|
423
|
-
// the issue by converting the function to a string and parsing its name out that way via a regex.
|
|
424
|
-
if (type.hasOwnProperty('name')) {
|
|
425
|
-
return type.name;
|
|
426
|
-
}
|
|
427
|
-
const match = ('' + type).match(/^function\s*([^\s(]+)/);
|
|
428
|
-
return match === null ? '' : match[1];
|
|
429
|
-
}
|
|
430
415
|
/**
|
|
431
416
|
* Read the injector def type in a way which is immune to accidentally reading inherited value.
|
|
432
417
|
*
|
|
@@ -2055,7 +2040,7 @@ function isComponentDef(def) {
|
|
|
2055
2040
|
return !!def.template;
|
|
2056
2041
|
}
|
|
2057
2042
|
function isRootView(target) {
|
|
2058
|
-
return (target[FLAGS] &
|
|
2043
|
+
return (target[FLAGS] & 512 /* LViewFlags.IsRoot */) !== 0;
|
|
2059
2044
|
}
|
|
2060
2045
|
function isProjectionTNode(tNode) {
|
|
2061
2046
|
return (tNode.type & 16 /* TNodeType.Projection */) === 16 /* TNodeType.Projection */;
|
|
@@ -2630,6 +2615,12 @@ class WritableSignalImpl extends ReactiveNode {
|
|
|
2630
2615
|
this.producerMayHaveChanged();
|
|
2631
2616
|
postSignalSetFn?.();
|
|
2632
2617
|
}
|
|
2618
|
+
asReadonly() {
|
|
2619
|
+
if (this.readonlySignal === undefined) {
|
|
2620
|
+
this.readonlySignal = createSignalFromFunction(this, () => this.signal());
|
|
2621
|
+
}
|
|
2622
|
+
return this.readonlySignal;
|
|
2623
|
+
}
|
|
2633
2624
|
signal() {
|
|
2634
2625
|
this.producerAccessed();
|
|
2635
2626
|
return this.value;
|
|
@@ -2648,6 +2639,7 @@ function signal(initialValue, options) {
|
|
|
2648
2639
|
set: signalNode.set.bind(signalNode),
|
|
2649
2640
|
update: signalNode.update.bind(signalNode),
|
|
2650
2641
|
mutate: signalNode.mutate.bind(signalNode),
|
|
2642
|
+
asReadonly: signalNode.asReadonly.bind(signalNode)
|
|
2651
2643
|
});
|
|
2652
2644
|
return signalFn;
|
|
2653
2645
|
}
|
|
@@ -2690,6 +2682,9 @@ class Watch extends ReactiveNode {
|
|
|
2690
2682
|
this.schedule = schedule;
|
|
2691
2683
|
this.dirty = false;
|
|
2692
2684
|
this.cleanupFn = NOOP_CLEANUP_FN;
|
|
2685
|
+
this.registerOnCleanup = (cleanupFn) => {
|
|
2686
|
+
this.cleanupFn = cleanupFn;
|
|
2687
|
+
};
|
|
2693
2688
|
this.consumerAllowSignalWrites = allowSignalWrites;
|
|
2694
2689
|
}
|
|
2695
2690
|
notify() {
|
|
@@ -2719,7 +2714,8 @@ class Watch extends ReactiveNode {
|
|
|
2719
2714
|
this.trackingVersion++;
|
|
2720
2715
|
try {
|
|
2721
2716
|
this.cleanupFn();
|
|
2722
|
-
this.cleanupFn =
|
|
2717
|
+
this.cleanupFn = NOOP_CLEANUP_FN;
|
|
2718
|
+
this.watch(this.registerOnCleanup);
|
|
2723
2719
|
}
|
|
2724
2720
|
finally {
|
|
2725
2721
|
setActiveConsumer(prevConsumer);
|
|
@@ -2980,7 +2976,7 @@ function isCreationMode(view) {
|
|
|
2980
2976
|
* into a container. For that, you'll want `viewAttachedToContainer` below.
|
|
2981
2977
|
*/
|
|
2982
2978
|
function viewAttachedToChangeDetector(view) {
|
|
2983
|
-
return (view[FLAGS] &
|
|
2979
|
+
return (view[FLAGS] & 128 /* LViewFlags.Attached */) === 128 /* LViewFlags.Attached */;
|
|
2984
2980
|
}
|
|
2985
2981
|
/** Returns a boolean for whether the view is attached to a container. */
|
|
2986
2982
|
function viewAttachedToContainer(view) {
|
|
@@ -3022,6 +3018,9 @@ function updateTransplantedViewCount(lContainer, amount) {
|
|
|
3022
3018
|
* Stores a LView-specific destroy callback.
|
|
3023
3019
|
*/
|
|
3024
3020
|
function storeLViewOnDestroy(lView, onDestroyCallback) {
|
|
3021
|
+
if ((lView[FLAGS] & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */) {
|
|
3022
|
+
throw new RuntimeError(911 /* RuntimeErrorCode.VIEW_ALREADY_DESTROYED */, ngDevMode && 'View has already been destroyed.');
|
|
3023
|
+
}
|
|
3025
3024
|
if (lView[ON_DESTROY_HOOKS] === null) {
|
|
3026
3025
|
lView[ON_DESTROY_HOOKS] = [];
|
|
3027
3026
|
}
|
|
@@ -3720,7 +3719,7 @@ function incrementInitPhaseFlags(lView, initPhase) {
|
|
|
3720
3719
|
assertNotEqual(initPhase, 3 /* InitPhaseState.InitPhaseCompleted */, 'Init hooks phase should not be incremented after all init hooks have been run.');
|
|
3721
3720
|
let flags = lView[FLAGS];
|
|
3722
3721
|
if ((flags & 3 /* LViewFlags.InitPhaseStateMask */) === initPhase) {
|
|
3723
|
-
flags &=
|
|
3722
|
+
flags &= 4095 /* LViewFlags.IndexWithinInitPhaseReset */;
|
|
3724
3723
|
flags += 1 /* LViewFlags.InitPhaseStateIncrementer */;
|
|
3725
3724
|
lView[FLAGS] = flags;
|
|
3726
3725
|
}
|
|
@@ -3801,12 +3800,12 @@ function callHook(currentView, initPhase, arr, i) {
|
|
|
3801
3800
|
const directiveIndex = isInitHook ? -arr[i] : arr[i];
|
|
3802
3801
|
const directive = currentView[directiveIndex];
|
|
3803
3802
|
if (isInitHook) {
|
|
3804
|
-
const indexWithintInitPhase = currentView[FLAGS] >>
|
|
3803
|
+
const indexWithintInitPhase = currentView[FLAGS] >> 12 /* LViewFlags.IndexWithinInitPhaseShift */;
|
|
3805
3804
|
// The init phase state must be always checked here as it may have been recursively updated.
|
|
3806
3805
|
if (indexWithintInitPhase <
|
|
3807
3806
|
(currentView[PREORDER_HOOK_FLAGS] >> 16 /* PreOrderHookFlags.NumberOfInitHooksCalledShift */) &&
|
|
3808
3807
|
(currentView[FLAGS] & 3 /* LViewFlags.InitPhaseStateMask */) === initPhase) {
|
|
3809
|
-
currentView[FLAGS] +=
|
|
3808
|
+
currentView[FLAGS] += 4096 /* LViewFlags.IndexWithinInitPhaseIncrementer */;
|
|
3810
3809
|
callHookInternal(directive, hook);
|
|
3811
3810
|
}
|
|
3812
3811
|
}
|
|
@@ -4396,7 +4395,7 @@ function getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default,
|
|
|
4396
4395
|
if (tNode !== null) {
|
|
4397
4396
|
// If the view or any of its ancestors have an embedded
|
|
4398
4397
|
// view injector, we have to look it up there first.
|
|
4399
|
-
if (lView[FLAGS] &
|
|
4398
|
+
if (lView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */) {
|
|
4400
4399
|
const embeddedInjectorValue = lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, NOT_FOUND);
|
|
4401
4400
|
if (embeddedInjectorValue !== NOT_FOUND) {
|
|
4402
4401
|
return embeddedInjectorValue;
|
|
@@ -4739,8 +4738,8 @@ function lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundVa
|
|
|
4739
4738
|
// hierarchy when resolving the value is to walk it node-by-node while attempting to resolve
|
|
4740
4739
|
// the token at each level.
|
|
4741
4740
|
while (currentTNode !== null && currentLView !== null &&
|
|
4742
|
-
(currentLView[FLAGS] &
|
|
4743
|
-
!(currentLView[FLAGS] &
|
|
4741
|
+
(currentLView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */) &&
|
|
4742
|
+
!(currentLView[FLAGS] & 512 /* LViewFlags.IsRoot */)) {
|
|
4744
4743
|
ngDevMode && assertTNodeForLView(currentTNode, currentLView);
|
|
4745
4744
|
// Note that this lookup on the node injector is using the `Self` flag, because
|
|
4746
4745
|
// we don't want the node injector to look at any parent injectors since we
|
|
@@ -5914,8 +5913,8 @@ function validateElementIsKnown(element, lView, tagName, schemas, hasDirectives)
|
|
|
5914
5913
|
// as a custom element. Note that unknown elements with a dash in their name won't be instances
|
|
5915
5914
|
// of HTMLUnknownElement in browsers that support web components.
|
|
5916
5915
|
const isUnknown =
|
|
5917
|
-
// Note that we can't check for `typeof HTMLUnknownElement === 'function'
|
|
5918
|
-
//
|
|
5916
|
+
// Note that we can't check for `typeof HTMLUnknownElement === 'function'` because
|
|
5917
|
+
// Domino doesn't expose HTMLUnknownElement globally.
|
|
5919
5918
|
(typeof HTMLUnknownElement !== 'undefined' && HTMLUnknownElement &&
|
|
5920
5919
|
element instanceof HTMLUnknownElement) ||
|
|
5921
5920
|
(typeof customElements !== 'undefined' && tagName.indexOf('-') > -1 &&
|
|
@@ -5972,8 +5971,7 @@ function isPropertyValid(element, propName, tagName, schemas) {
|
|
|
5972
5971
|
if (matchingSchemas(schemas, tagName) || propName in element || isAnimationProp(propName)) {
|
|
5973
5972
|
return true;
|
|
5974
5973
|
}
|
|
5975
|
-
// Note: `typeof Node` returns 'function' in most browsers, but
|
|
5976
|
-
// need to account for both here, while being careful with `typeof null` also returning 'object'.
|
|
5974
|
+
// Note: `typeof Node` returns 'function' in most browsers, but is undefined with domino.
|
|
5977
5975
|
return typeof Node === 'undefined' || Node === null || !(element instanceof Node);
|
|
5978
5976
|
}
|
|
5979
5977
|
/**
|
|
@@ -6571,7 +6569,7 @@ function getLViewParent(lView) {
|
|
|
6571
6569
|
function getRootView(componentOrLView) {
|
|
6572
6570
|
ngDevMode && assertDefined(componentOrLView, 'component');
|
|
6573
6571
|
let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);
|
|
6574
|
-
while (lView && !(lView[FLAGS] &
|
|
6572
|
+
while (lView && !(lView[FLAGS] & 512 /* LViewFlags.IsRoot */)) {
|
|
6575
6573
|
lView = getLViewParent(lView);
|
|
6576
6574
|
}
|
|
6577
6575
|
ngDevMode && assertLView(lView);
|
|
@@ -6817,7 +6815,7 @@ function insertView(tView, lView, lContainer, index) {
|
|
|
6817
6815
|
lQueries.insertView(tView);
|
|
6818
6816
|
}
|
|
6819
6817
|
// Sets the attached flag
|
|
6820
|
-
lView[FLAGS] |=
|
|
6818
|
+
lView[FLAGS] |= 128 /* LViewFlags.Attached */;
|
|
6821
6819
|
}
|
|
6822
6820
|
/**
|
|
6823
6821
|
* Track views created from the declaration container (TemplateRef) and inserted into a
|
|
@@ -6857,8 +6855,8 @@ function detachMovedView(declarationContainer, lView) {
|
|
|
6857
6855
|
// If the view was marked for refresh but then detached before it was checked (where the flag
|
|
6858
6856
|
// would be cleared and the counter decremented), we need to decrement the view counter here
|
|
6859
6857
|
// instead.
|
|
6860
|
-
if (lView[FLAGS] &
|
|
6861
|
-
lView[FLAGS] &= ~
|
|
6858
|
+
if (lView[FLAGS] & 1024 /* LViewFlags.RefreshTransplantedView */) {
|
|
6859
|
+
lView[FLAGS] &= ~1024 /* LViewFlags.RefreshTransplantedView */;
|
|
6862
6860
|
updateTransplantedViewCount(insertionLContainer, -1);
|
|
6863
6861
|
}
|
|
6864
6862
|
movedViews.splice(declarationViewIndex, 1);
|
|
@@ -6896,7 +6894,7 @@ function detachView(lContainer, removeIndex) {
|
|
|
6896
6894
|
viewToDetach[PARENT] = null;
|
|
6897
6895
|
viewToDetach[NEXT] = null;
|
|
6898
6896
|
// Unsets the attached flag
|
|
6899
|
-
viewToDetach[FLAGS] &= ~
|
|
6897
|
+
viewToDetach[FLAGS] &= ~128 /* LViewFlags.Attached */;
|
|
6900
6898
|
}
|
|
6901
6899
|
return viewToDetach;
|
|
6902
6900
|
}
|
|
@@ -6908,7 +6906,7 @@ function detachView(lContainer, removeIndex) {
|
|
|
6908
6906
|
* @param lView The view to be destroyed.
|
|
6909
6907
|
*/
|
|
6910
6908
|
function destroyLView(tView, lView) {
|
|
6911
|
-
if (!(lView[FLAGS] &
|
|
6909
|
+
if (!(lView[FLAGS] & 256 /* LViewFlags.Destroyed */)) {
|
|
6912
6910
|
const renderer = lView[RENDERER];
|
|
6913
6911
|
lView[REACTIVE_TEMPLATE_CONSUMER]?.destroy();
|
|
6914
6912
|
lView[REACTIVE_HOST_BINDING_CONSUMER]?.destroy();
|
|
@@ -6927,16 +6925,16 @@ function destroyLView(tView, lView) {
|
|
|
6927
6925
|
* @param lView The LView to clean up
|
|
6928
6926
|
*/
|
|
6929
6927
|
function cleanUpView(tView, lView) {
|
|
6930
|
-
if (!(lView[FLAGS] &
|
|
6928
|
+
if (!(lView[FLAGS] & 256 /* LViewFlags.Destroyed */)) {
|
|
6931
6929
|
// Usually the Attached flag is removed when the view is detached from its parent, however
|
|
6932
6930
|
// if it's a root view, the flag won't be unset hence why we're also removing on destroy.
|
|
6933
|
-
lView[FLAGS] &= ~
|
|
6931
|
+
lView[FLAGS] &= ~128 /* LViewFlags.Attached */;
|
|
6934
6932
|
// Mark the LView as destroyed *before* executing the onDestroy hooks. An onDestroy hook
|
|
6935
6933
|
// runs arbitrary user code, which could include its own `viewRef.destroy()` (or similar). If
|
|
6936
6934
|
// We don't flag the view as destroyed before the hooks, this could lead to an infinite loop.
|
|
6937
6935
|
// This also aligns with the ViewEngine behavior. It also means that the onDestroy hook is
|
|
6938
6936
|
// really more of an "afterDestroy" hook if you think about it.
|
|
6939
|
-
lView[FLAGS] |=
|
|
6937
|
+
lView[FLAGS] |= 256 /* LViewFlags.Destroyed */;
|
|
6940
6938
|
executeOnDestroys(tView, lView);
|
|
6941
6939
|
processCleanups(tView, lView);
|
|
6942
6940
|
// For component views only, the local renderer is destroyed at clean up time.
|
|
@@ -9003,6 +9001,7 @@ class R3Injector extends EnvironmentInjector {
|
|
|
9003
9001
|
}
|
|
9004
9002
|
}
|
|
9005
9003
|
onDestroy(callback) {
|
|
9004
|
+
this.assertNotDestroyed();
|
|
9006
9005
|
this._onDestroyHooks.push(callback);
|
|
9007
9006
|
return () => this.removeOnDestroy(callback);
|
|
9008
9007
|
}
|
|
@@ -9398,9 +9397,19 @@ const CSP_NONCE = new InjectionToken('CSP nonce', {
|
|
|
9398
9397
|
// 4. Have the `ComponentFactory` read the attribute and provide it to the injector under the
|
|
9399
9398
|
// hood - has the same problem as #1 and #2 in that the renderer is used to query for the root
|
|
9400
9399
|
// node and the nonce value needs to be available when the renderer is created.
|
|
9401
|
-
return getDocument().body
|
|
9400
|
+
return getDocument().body?.querySelector('[ngCspNonce]')?.getAttribute('ngCspNonce') || null;
|
|
9402
9401
|
},
|
|
9403
9402
|
});
|
|
9403
|
+
/**
|
|
9404
|
+
* Internal token to collect all SSR-related features enabled for this application.
|
|
9405
|
+
*
|
|
9406
|
+
* Note: the token is in `core` to let other packages register features (the `core`
|
|
9407
|
+
* package is imported in other packages).
|
|
9408
|
+
*/
|
|
9409
|
+
const ENABLED_SSR_FEATURES = new InjectionToken((typeof ngDevMode === 'undefined' || ngDevMode) ? 'ENABLED_SSR_FEATURES' : '', {
|
|
9410
|
+
providedIn: 'root',
|
|
9411
|
+
factory: () => new Set(),
|
|
9412
|
+
});
|
|
9404
9413
|
|
|
9405
9414
|
function escapeTransferStateContent(text) {
|
|
9406
9415
|
const escapedText = {
|
|
@@ -9954,7 +9963,7 @@ class Version {
|
|
|
9954
9963
|
/**
|
|
9955
9964
|
* @publicApi
|
|
9956
9965
|
*/
|
|
9957
|
-
const VERSION = new Version('16.0.0-
|
|
9966
|
+
const VERSION = new Version('16.0.0-rc.1');
|
|
9958
9967
|
|
|
9959
9968
|
// This default value is when checking the hierarchy for a token.
|
|
9960
9969
|
//
|
|
@@ -9988,7 +9997,7 @@ const NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};
|
|
|
9988
9997
|
*/
|
|
9989
9998
|
function markViewDirty(lView) {
|
|
9990
9999
|
while (lView) {
|
|
9991
|
-
lView[FLAGS] |=
|
|
10000
|
+
lView[FLAGS] |= 64 /* LViewFlags.Dirty */;
|
|
9992
10001
|
const parent = getLViewParent(lView);
|
|
9993
10002
|
// Stop traversing up as soon as you find a root view that wasn't attached to any container
|
|
9994
10003
|
if (isRootView(lView) && !parent) {
|
|
@@ -10104,9 +10113,10 @@ function isInSkipHydrationBlock(tNode) {
|
|
|
10104
10113
|
|
|
10105
10114
|
const NG_DEV_MODE$1 = typeof ngDevMode === 'undefined' || !!ngDevMode;
|
|
10106
10115
|
/**
|
|
10107
|
-
* Internal token that specifies whether
|
|
10116
|
+
* Internal token that specifies whether DOM reuse logic
|
|
10117
|
+
* during hydration is enabled.
|
|
10108
10118
|
*/
|
|
10109
|
-
const
|
|
10119
|
+
const IS_HYDRATION_DOM_REUSE_ENABLED = new InjectionToken(NG_DEV_MODE$1 ? 'IS_HYDRATION_DOM_REUSE_ENABLED' : '');
|
|
10110
10120
|
// By default (in client rendering mode), we remove all the contents
|
|
10111
10121
|
// of the host element and render an application after that.
|
|
10112
10122
|
const PRESERVE_HOST_CONTENT_DEFAULT = false;
|
|
@@ -10740,10 +10750,10 @@ function renderChildComponents(hostLView, components) {
|
|
|
10740
10750
|
function createLView(parentLView, tView, context, flags, host, tHostNode, environment, renderer, injector, embeddedViewInjector, hydrationInfo) {
|
|
10741
10751
|
const lView = tView.blueprint.slice();
|
|
10742
10752
|
lView[HOST] = host;
|
|
10743
|
-
lView[FLAGS] = flags | 4 /* LViewFlags.CreationMode */ |
|
|
10753
|
+
lView[FLAGS] = flags | 4 /* LViewFlags.CreationMode */ | 128 /* LViewFlags.Attached */ | 8 /* LViewFlags.FirstLViewPass */;
|
|
10744
10754
|
if (embeddedViewInjector !== null ||
|
|
10745
|
-
(parentLView && (parentLView[FLAGS] &
|
|
10746
|
-
lView[FLAGS] |=
|
|
10755
|
+
(parentLView && (parentLView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */))) {
|
|
10756
|
+
lView[FLAGS] |= 2048 /* LViewFlags.HasEmbeddedViewInjector */;
|
|
10747
10757
|
}
|
|
10748
10758
|
resetPreOrderHookFlags(lView);
|
|
10749
10759
|
ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);
|
|
@@ -10929,7 +10939,7 @@ function renderView(tView, lView, context) {
|
|
|
10929
10939
|
function refreshView(tView, lView, templateFn, context) {
|
|
10930
10940
|
ngDevMode && assertEqual(isCreationMode(lView), false, 'Should be run in update mode');
|
|
10931
10941
|
const flags = lView[FLAGS];
|
|
10932
|
-
if ((flags &
|
|
10942
|
+
if ((flags & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */)
|
|
10933
10943
|
return;
|
|
10934
10944
|
// Check no changes mode is a dev only mode used to verify that bindings have not changed
|
|
10935
10945
|
// since they were assigned. We do not want to execute lifecycle hooks in that mode.
|
|
@@ -11032,10 +11042,10 @@ function refreshView(tView, lView, templateFn, context) {
|
|
|
11032
11042
|
// no changes cycle, the component would be not be dirty for the next update pass. This would
|
|
11033
11043
|
// be different in production mode where the component dirty state is not reset.
|
|
11034
11044
|
if (!isInCheckNoChangesPass) {
|
|
11035
|
-
lView[FLAGS] &= ~(
|
|
11045
|
+
lView[FLAGS] &= ~(64 /* LViewFlags.Dirty */ | 8 /* LViewFlags.FirstLViewPass */);
|
|
11036
11046
|
}
|
|
11037
|
-
if (lView[FLAGS] &
|
|
11038
|
-
lView[FLAGS] &= ~
|
|
11047
|
+
if (lView[FLAGS] & 1024 /* LViewFlags.RefreshTransplantedView */) {
|
|
11048
|
+
lView[FLAGS] &= ~1024 /* LViewFlags.RefreshTransplantedView */;
|
|
11039
11049
|
updateTransplantedViewCount(lView[PARENT], -1);
|
|
11040
11050
|
}
|
|
11041
11051
|
}
|
|
@@ -11487,7 +11497,7 @@ function markDirtyIfOnPush(lView, viewIndex) {
|
|
|
11487
11497
|
ngDevMode && assertLView(lView);
|
|
11488
11498
|
const childComponentLView = getComponentLViewByIndex(viewIndex, lView);
|
|
11489
11499
|
if (!(childComponentLView[FLAGS] & 16 /* LViewFlags.CheckAlways */)) {
|
|
11490
|
-
childComponentLView[FLAGS] |=
|
|
11500
|
+
childComponentLView[FLAGS] |= 64 /* LViewFlags.Dirty */;
|
|
11491
11501
|
}
|
|
11492
11502
|
}
|
|
11493
11503
|
function setNgReflectProperty(lView, element, type, attrName, value) {
|
|
@@ -11860,7 +11870,7 @@ function addComponentLogic(lView, hostTNode, def) {
|
|
|
11860
11870
|
// Only component views should be added to the view tree directly. Embedded views are
|
|
11861
11871
|
// accessed through their containers because they may be removed / re-added later.
|
|
11862
11872
|
const rendererFactory = lView[ENVIRONMENT].rendererFactory;
|
|
11863
|
-
const componentView = addToViewTree(lView, createLView(lView, tView, null, def.onPush ?
|
|
11873
|
+
const componentView = addToViewTree(lView, createLView(lView, tView, null, def.onPush ? 64 /* LViewFlags.Dirty */ : 16 /* LViewFlags.CheckAlways */, native, hostTNode, null, rendererFactory.createRenderer(native, def), null, null, null));
|
|
11864
11874
|
// Component view will always be created before any injected LContainers,
|
|
11865
11875
|
// so this is a regular element, wrap it with the component view
|
|
11866
11876
|
lView[hostTNode.index] = componentView;
|
|
@@ -12033,14 +12043,14 @@ function markTransplantedViewsForRefresh(lView) {
|
|
|
12033
12043
|
ngDevMode && assertLContainer(insertionLContainer);
|
|
12034
12044
|
// We don't want to increment the counter if the moved LView was already marked for
|
|
12035
12045
|
// refresh.
|
|
12036
|
-
if ((movedLView[FLAGS] &
|
|
12046
|
+
if ((movedLView[FLAGS] & 1024 /* LViewFlags.RefreshTransplantedView */) === 0) {
|
|
12037
12047
|
updateTransplantedViewCount(insertionLContainer, 1);
|
|
12038
12048
|
}
|
|
12039
12049
|
// Note, it is possible that the `movedViews` is tracking views that are transplanted *and*
|
|
12040
12050
|
// those that aren't (declaration component === insertion component). In the latter case,
|
|
12041
12051
|
// it's fine to add the flag, as we will clear it immediately in
|
|
12042
12052
|
// `refreshEmbeddedViews` for the view currently being refreshed.
|
|
12043
|
-
movedLView[FLAGS] |=
|
|
12053
|
+
movedLView[FLAGS] |= 1024 /* LViewFlags.RefreshTransplantedView */;
|
|
12044
12054
|
}
|
|
12045
12055
|
}
|
|
12046
12056
|
}
|
|
@@ -12056,7 +12066,7 @@ function refreshComponent(hostLView, componentHostIdx) {
|
|
|
12056
12066
|
// Only attached components that are CheckAlways or OnPush and dirty should be refreshed
|
|
12057
12067
|
if (viewAttachedToChangeDetector(componentView)) {
|
|
12058
12068
|
const tView = componentView[TVIEW];
|
|
12059
|
-
if (componentView[FLAGS] & (16 /* LViewFlags.CheckAlways */ |
|
|
12069
|
+
if (componentView[FLAGS] & (16 /* LViewFlags.CheckAlways */ | 64 /* LViewFlags.Dirty */)) {
|
|
12060
12070
|
refreshView(tView, componentView, tView.template, componentView[CONTEXT]);
|
|
12061
12071
|
}
|
|
12062
12072
|
else if (componentView[TRANSPLANTED_VIEWS_TO_REFRESH] > 0) {
|
|
@@ -12076,7 +12086,7 @@ function refreshContainsDirtyView(lView) {
|
|
|
12076
12086
|
for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
|
|
12077
12087
|
const embeddedLView = lContainer[i];
|
|
12078
12088
|
if (viewAttachedToChangeDetector(embeddedLView)) {
|
|
12079
|
-
if (embeddedLView[FLAGS] &
|
|
12089
|
+
if (embeddedLView[FLAGS] & 1024 /* LViewFlags.RefreshTransplantedView */) {
|
|
12080
12090
|
const embeddedTView = embeddedLView[TVIEW];
|
|
12081
12091
|
ngDevMode && assertDefined(embeddedTView, 'TView must be allocated');
|
|
12082
12092
|
refreshView(embeddedTView, embeddedLView, embeddedTView.template, embeddedLView[CONTEXT]);
|
|
@@ -12537,7 +12547,7 @@ class ViewRef$1 {
|
|
|
12537
12547
|
this._lView[CONTEXT] = value;
|
|
12538
12548
|
}
|
|
12539
12549
|
get destroyed() {
|
|
12540
|
-
return (this._lView[FLAGS] &
|
|
12550
|
+
return (this._lView[FLAGS] & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */;
|
|
12541
12551
|
}
|
|
12542
12552
|
destroy() {
|
|
12543
12553
|
if (this._appRef) {
|
|
@@ -12650,7 +12660,7 @@ class ViewRef$1 {
|
|
|
12650
12660
|
* ```
|
|
12651
12661
|
*/
|
|
12652
12662
|
detach() {
|
|
12653
|
-
this._lView[FLAGS] &= ~
|
|
12663
|
+
this._lView[FLAGS] &= ~128 /* LViewFlags.Attached */;
|
|
12654
12664
|
}
|
|
12655
12665
|
/**
|
|
12656
12666
|
* Re-attaches a view to the change detection tree.
|
|
@@ -12709,7 +12719,7 @@ class ViewRef$1 {
|
|
|
12709
12719
|
* ```
|
|
12710
12720
|
*/
|
|
12711
12721
|
reattach() {
|
|
12712
|
-
this._lView[FLAGS] |=
|
|
12722
|
+
this._lView[FLAGS] |= 128 /* LViewFlags.Attached */;
|
|
12713
12723
|
}
|
|
12714
12724
|
/**
|
|
12715
12725
|
* Checks the view and its children.
|
|
@@ -12895,8 +12905,8 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
12895
12905
|
const hostRNode = rootSelectorOrNode ?
|
|
12896
12906
|
locateHostElement(hostRenderer, rootSelectorOrNode, this.componentDef.encapsulation, rootViewInjector) :
|
|
12897
12907
|
createElementNode(hostRenderer, elementName, getNamespace(elementName));
|
|
12898
|
-
const rootFlags = this.componentDef.onPush ?
|
|
12899
|
-
16 /* LViewFlags.CheckAlways */ |
|
|
12908
|
+
const rootFlags = this.componentDef.onPush ? 64 /* LViewFlags.Dirty */ | 512 /* LViewFlags.IsRoot */ :
|
|
12909
|
+
16 /* LViewFlags.CheckAlways */ | 512 /* LViewFlags.IsRoot */;
|
|
12900
12910
|
// Create the root view. Uses empty TView and ContentTemplate.
|
|
12901
12911
|
const rootTView = createTView(0 /* TViewType.Root */, null, null, 1, 0, null, null, null, null, null, null);
|
|
12902
12912
|
const rootLView = createLView(null, rootTView, null, rootFlags, null, null, environment, hostRenderer, rootViewInjector, null, null);
|
|
@@ -13039,7 +13049,7 @@ function createRootComponentView(tNode, hostRNode, rootComponentDef, rootDirecti
|
|
|
13039
13049
|
hydrationInfo = retrieveHydrationInfo(hostRNode, rootView[INJECTOR$1]);
|
|
13040
13050
|
}
|
|
13041
13051
|
const viewRenderer = environment.rendererFactory.createRenderer(hostRNode, rootComponentDef);
|
|
13042
|
-
const componentView = createLView(rootView, getOrCreateComponentTView(rootComponentDef), null, rootComponentDef.onPush ?
|
|
13052
|
+
const componentView = createLView(rootView, getOrCreateComponentTView(rootComponentDef), null, rootComponentDef.onPush ? 64 /* LViewFlags.Dirty */ : 16 /* LViewFlags.CheckAlways */, rootView[tNode.index], tNode, environment, viewRenderer, null, null, hydrationInfo);
|
|
13043
13053
|
if (tView.firstCreatePass) {
|
|
13044
13054
|
markAsComponentHost(tView, tNode, rootDirectives.length - 1);
|
|
13045
13055
|
}
|
|
@@ -14329,22 +14339,6 @@ function invalidSkipHydrationHost(rNode) {
|
|
|
14329
14339
|
const message = header + actual + footer;
|
|
14330
14340
|
return new RuntimeError(-504 /* RuntimeErrorCode.INVALID_SKIP_HYDRATION_HOST */, message);
|
|
14331
14341
|
}
|
|
14332
|
-
/**
|
|
14333
|
-
* Builds the hydration error message in the case that a user is attempting to enable
|
|
14334
|
-
* hydration on internationalized nodes, which is not yet supported.
|
|
14335
|
-
*
|
|
14336
|
-
* @param rNode the HTML Element
|
|
14337
|
-
* @returns an error
|
|
14338
|
-
*/
|
|
14339
|
-
function notYetSupportedI18nBlockError(rNode) {
|
|
14340
|
-
const header = 'Hydration for nodes marked with `i18n` is not yet supported. ' +
|
|
14341
|
-
'You can opt-out a component that uses `i18n` in a template using ' +
|
|
14342
|
-
'the `ngSkipHydration` attribute or fall back to the previous ' +
|
|
14343
|
-
'hydration logic (which re-creates the application structure).\n\n';
|
|
14344
|
-
const actual = `${describeDomFromNode(rNode)}\n\n`;
|
|
14345
|
-
const message = header + actual;
|
|
14346
|
-
return new RuntimeError(518 /* RuntimeErrorCode.HYDRATION_I18N_NOT_YET_SUPPORTED */, message);
|
|
14347
|
-
}
|
|
14348
14342
|
// Stringification methods
|
|
14349
14343
|
/**
|
|
14350
14344
|
* Stringifies a given TNode's attributes
|
|
@@ -20933,6 +20927,18 @@ function ɵɵi18nStart(index, messageIndex, subTemplateIndex = -1) {
|
|
|
20933
20927
|
if (tView.firstCreatePass) {
|
|
20934
20928
|
i18nStartFirstCreatePass(tView, parentTNode === null ? 0 : parentTNode.index, lView, adjustedIndex, message, subTemplateIndex);
|
|
20935
20929
|
}
|
|
20930
|
+
// Set a flag that this LView has i18n blocks.
|
|
20931
|
+
// The flag is later used to determine whether this component should
|
|
20932
|
+
// be hydrated (currently hydration is not supported for i18n blocks).
|
|
20933
|
+
if (tView.type === 2 /* TViewType.Embedded */) {
|
|
20934
|
+
// Annotate host component's LView (not embedded view's LView),
|
|
20935
|
+
// since hydration can be skipped on per-component basis only.
|
|
20936
|
+
const componentLView = lView[DECLARATION_COMPONENT_VIEW];
|
|
20937
|
+
componentLView[FLAGS] |= 32 /* LViewFlags.HasI18n */;
|
|
20938
|
+
}
|
|
20939
|
+
else {
|
|
20940
|
+
lView[FLAGS] |= 32 /* LViewFlags.HasI18n */;
|
|
20941
|
+
}
|
|
20936
20942
|
const tI18n = tView.data[adjustedIndex];
|
|
20937
20943
|
const sameViewParentTNode = parentTNode === lView[T_HOST] ? null : parentTNode;
|
|
20938
20944
|
const parentRNode = getClosestRElement(tView, sameViewParentTNode, lView);
|
|
@@ -21630,7 +21636,7 @@ function getOwningComponent(elementOrDir) {
|
|
|
21630
21636
|
while (lView[TVIEW].type === 2 /* TViewType.Embedded */ && (parent = getLViewParent(lView))) {
|
|
21631
21637
|
lView = parent;
|
|
21632
21638
|
}
|
|
21633
|
-
return lView[FLAGS] &
|
|
21639
|
+
return lView[FLAGS] & 512 /* LViewFlags.IsRoot */ ? null : lView[CONTEXT];
|
|
21634
21640
|
}
|
|
21635
21641
|
/**
|
|
21636
21642
|
* Retrieves all root components associated with a DOM element, directive or component instance.
|
|
@@ -27078,7 +27084,7 @@ class ApplicationRef {
|
|
|
27078
27084
|
this._loadComponent(compRef);
|
|
27079
27085
|
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
27080
27086
|
const _console = this._injector.get(Console);
|
|
27081
|
-
_console.log(`Angular is running in development mode
|
|
27087
|
+
_console.log(`Angular is running in development mode.`);
|
|
27082
27088
|
}
|
|
27083
27089
|
return compRef;
|
|
27084
27090
|
}
|
|
@@ -27720,16 +27726,11 @@ class DebugElement extends DebugNode {
|
|
|
27720
27726
|
i += 2;
|
|
27721
27727
|
}
|
|
27722
27728
|
}
|
|
27723
|
-
const
|
|
27724
|
-
for (let i = 0; i < eAttrs.length; i++) {
|
|
27725
|
-
const attr = eAttrs[i];
|
|
27726
|
-
const lowercaseName = attr.name.toLowerCase();
|
|
27729
|
+
for (const attr of element.attributes) {
|
|
27727
27730
|
// Make sure that we don't assign the same attribute both in its
|
|
27728
27731
|
// case-sensitive form and the lower-cased one from the browser.
|
|
27729
|
-
if (lowercaseTNodeAttrs.
|
|
27730
|
-
|
|
27731
|
-
// IE preserves the case, while all other browser convert it to lower case.
|
|
27732
|
-
attributes[lowercaseName] = attr.value;
|
|
27732
|
+
if (!lowercaseTNodeAttrs.includes(attr.name)) {
|
|
27733
|
+
attributes[attr.name] = attr.value;
|
|
27733
27734
|
}
|
|
27734
27735
|
}
|
|
27735
27736
|
return attributes;
|
|
@@ -29272,11 +29273,14 @@ function annotateForHydration(appRef, doc) {
|
|
|
29272
29273
|
}
|
|
29273
29274
|
}
|
|
29274
29275
|
}
|
|
29275
|
-
|
|
29276
|
-
if
|
|
29277
|
-
|
|
29278
|
-
|
|
29279
|
-
|
|
29276
|
+
// Note: we *always* include hydration info key and a corresponding value
|
|
29277
|
+
// into the TransferState, even if the list of serialized views is empty.
|
|
29278
|
+
// This is needed as a signal to the client that the server part of the
|
|
29279
|
+
// hydration logic was setup and enabled correctly. Otherwise, if a client
|
|
29280
|
+
// hydration doesn't find a key in the transfer state - an error is produced.
|
|
29281
|
+
const serializedViews = serializedViewCollection.getAll();
|
|
29282
|
+
const transferState = appRef.injector.get(TransferState);
|
|
29283
|
+
transferState.set(NGH_DATA_KEY, serializedViews);
|
|
29280
29284
|
}
|
|
29281
29285
|
/**
|
|
29282
29286
|
* Serializes the lContainer data into a list of SerializedView objects,
|
|
@@ -29353,15 +29357,6 @@ function appendDisconnectedNodeIndex(ngh, tNode) {
|
|
|
29353
29357
|
ngh[DISCONNECTED_NODES].push(noOffsetIndex);
|
|
29354
29358
|
}
|
|
29355
29359
|
}
|
|
29356
|
-
/**
|
|
29357
|
-
* There is no special TNode type for an i18n block, so we verify
|
|
29358
|
-
* whether the structure that we store at the `TView.data[idx]` position
|
|
29359
|
-
* has the `TI18n` shape.
|
|
29360
|
-
*/
|
|
29361
|
-
function isTI18nNode(obj) {
|
|
29362
|
-
const tI18n = obj;
|
|
29363
|
-
return tI18n.hasOwnProperty('create') && tI18n.hasOwnProperty('update');
|
|
29364
|
-
}
|
|
29365
29360
|
/**
|
|
29366
29361
|
* Serializes the lView data into a SerializedView object that will later be added
|
|
29367
29362
|
* to the TransferState storage and referenced using the `ngh` attribute on a host
|
|
@@ -29462,18 +29457,6 @@ function serializeLView(lView, context) {
|
|
|
29462
29457
|
annotateHostElementForHydration(targetNode, lView[i], context);
|
|
29463
29458
|
}
|
|
29464
29459
|
}
|
|
29465
|
-
else if (isTI18nNode(tNode)) {
|
|
29466
|
-
// Hydration for i18n nodes is not *yet* supported.
|
|
29467
|
-
// Produce an error message which would also describe possible
|
|
29468
|
-
// solutions (switching back to the "destructive" hydration or
|
|
29469
|
-
// excluding a component from hydration via `ngSkipHydration`).
|
|
29470
|
-
//
|
|
29471
|
-
// TODO(akushnir): we should find a better way to get a hold of the node that has the `i18n`
|
|
29472
|
-
// attribute on it. For now, we either refer to the host element of the component or to the
|
|
29473
|
-
// previous element in the LView.
|
|
29474
|
-
const targetNode = (i === HEADER_OFFSET) ? lView[HOST] : unwrapRNode(lView[i - 1]);
|
|
29475
|
-
throw notYetSupportedI18nBlockError(targetNode);
|
|
29476
|
-
}
|
|
29477
29460
|
else {
|
|
29478
29461
|
// <ng-container> case
|
|
29479
29462
|
if (tNode.type & 8 /* TNodeType.ElementContainer */) {
|
|
@@ -29546,17 +29529,42 @@ function serializeLView(lView, context) {
|
|
|
29546
29529
|
return ngh;
|
|
29547
29530
|
}
|
|
29548
29531
|
/**
|
|
29549
|
-
*
|
|
29532
|
+
* Determines whether a component instance that is represented
|
|
29533
|
+
* by a given LView uses `ViewEncapsulation.ShadowDom`.
|
|
29534
|
+
*/
|
|
29535
|
+
function componentUsesShadowDomEncapsulation(lView) {
|
|
29536
|
+
const instance = lView[CONTEXT];
|
|
29537
|
+
return instance?.constructor ?
|
|
29538
|
+
getComponentDef(instance.constructor)?.encapsulation === ViewEncapsulation$1.ShadowDom :
|
|
29539
|
+
false;
|
|
29540
|
+
}
|
|
29541
|
+
/**
|
|
29542
|
+
* Annotates component host element for hydration:
|
|
29543
|
+
* - by either adding the `ngh` attribute and collecting hydration-related info
|
|
29544
|
+
* for the serialization and transferring to the client
|
|
29545
|
+
* - or by adding the `ngSkipHydration` attribute in case Angular detects that
|
|
29546
|
+
* component contents is not compatible with hydration.
|
|
29550
29547
|
*
|
|
29551
29548
|
* @param element The Host element to be annotated
|
|
29552
29549
|
* @param lView The associated LView
|
|
29553
29550
|
* @param context The hydration context
|
|
29554
29551
|
*/
|
|
29555
29552
|
function annotateHostElementForHydration(element, lView, context) {
|
|
29556
|
-
const ngh = serializeLView(lView, context);
|
|
29557
|
-
const index = context.serializedViewCollection.add(ngh);
|
|
29558
29553
|
const renderer = lView[RENDERER];
|
|
29559
|
-
|
|
29554
|
+
if ((lView[FLAGS] & 32 /* LViewFlags.HasI18n */) === 32 /* LViewFlags.HasI18n */ ||
|
|
29555
|
+
componentUsesShadowDomEncapsulation(lView)) {
|
|
29556
|
+
// Attach the skip hydration attribute if this component:
|
|
29557
|
+
// - either has i18n blocks, since hydrating such blocks is not yet supported
|
|
29558
|
+
// - or uses ShadowDom view encapsulation, since Domino doesn't support
|
|
29559
|
+
// shadow DOM, so we can not guarantee that client and server representations
|
|
29560
|
+
// would exactly match
|
|
29561
|
+
renderer.setAttribute(element, SKIP_HYDRATION_ATTR_NAME, '');
|
|
29562
|
+
}
|
|
29563
|
+
else {
|
|
29564
|
+
const ngh = serializeLView(lView, context);
|
|
29565
|
+
const index = context.serializedViewCollection.add(ngh);
|
|
29566
|
+
renderer.setAttribute(element, NGH_ATTR_NAME, index.toString());
|
|
29567
|
+
}
|
|
29560
29568
|
}
|
|
29561
29569
|
/**
|
|
29562
29570
|
* Physically inserts the comment nodes to ensure empty text nodes and adjacent
|
|
@@ -29611,12 +29619,10 @@ function isDisconnectedNode(tNode, lView) {
|
|
|
29611
29619
|
*/
|
|
29612
29620
|
class InitialRenderPendingTasks {
|
|
29613
29621
|
get whenAllTasksComplete() {
|
|
29614
|
-
if (this.collection.size
|
|
29615
|
-
|
|
29622
|
+
if (this.collection.size === 0) {
|
|
29623
|
+
this.complete();
|
|
29616
29624
|
}
|
|
29617
|
-
return
|
|
29618
|
-
this.completed = true;
|
|
29619
|
-
});
|
|
29625
|
+
return this.promise;
|
|
29620
29626
|
}
|
|
29621
29627
|
constructor() {
|
|
29622
29628
|
this.taskId = 0;
|
|
@@ -29646,15 +29652,17 @@ class InitialRenderPendingTasks {
|
|
|
29646
29652
|
return;
|
|
29647
29653
|
this.collection.delete(taskId);
|
|
29648
29654
|
if (this.collection.size === 0) {
|
|
29649
|
-
|
|
29650
|
-
this.completed = true;
|
|
29651
|
-
this.resolve();
|
|
29655
|
+
this.complete();
|
|
29652
29656
|
}
|
|
29653
29657
|
}
|
|
29654
29658
|
ngOnDestroy() {
|
|
29655
|
-
this.
|
|
29659
|
+
this.complete();
|
|
29656
29660
|
this.collection.clear();
|
|
29657
29661
|
}
|
|
29662
|
+
complete() {
|
|
29663
|
+
this.completed = true;
|
|
29664
|
+
this.resolve();
|
|
29665
|
+
}
|
|
29658
29666
|
static { this.ɵfac = function InitialRenderPendingTasks_Factory(t) { return new (t || InitialRenderPendingTasks)(); }; }
|
|
29659
29667
|
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: InitialRenderPendingTasks, factory: InitialRenderPendingTasks.ɵfac, providedIn: 'root' }); }
|
|
29660
29668
|
}
|
|
@@ -29670,7 +29678,7 @@ class InitialRenderPendingTasks {
|
|
|
29670
29678
|
let isHydrationSupportEnabled = false;
|
|
29671
29679
|
/**
|
|
29672
29680
|
* Brings the necessary hydration code in tree-shakable manner.
|
|
29673
|
-
* The code is only present when the `
|
|
29681
|
+
* The code is only present when the `provideClientHydration` is
|
|
29674
29682
|
* invoked. Otherwise, this code is tree-shaken away during the
|
|
29675
29683
|
* build optimization step.
|
|
29676
29684
|
*
|
|
@@ -29703,12 +29711,13 @@ function isBrowser() {
|
|
|
29703
29711
|
/**
|
|
29704
29712
|
* Outputs a message with hydration stats into a console.
|
|
29705
29713
|
*/
|
|
29706
|
-
function printHydrationStats(
|
|
29714
|
+
function printHydrationStats(injector) {
|
|
29715
|
+
const console = injector.get(Console);
|
|
29707
29716
|
const message = `Angular hydrated ${ngDevMode.hydratedComponents} component(s) ` +
|
|
29708
29717
|
`and ${ngDevMode.hydratedNodes} node(s), ` +
|
|
29709
29718
|
`${ngDevMode.componentsSkippedHydration} component(s) were skipped. ` +
|
|
29710
29719
|
`Note: this feature is in Developer Preview mode. ` +
|
|
29711
|
-
`Learn more at https://angular.io/
|
|
29720
|
+
`Learn more at https://next.angular.io/guide/hydration.`;
|
|
29712
29721
|
// tslint:disable-next-line:no-console
|
|
29713
29722
|
console.log(message);
|
|
29714
29723
|
}
|
|
@@ -29732,6 +29741,32 @@ function whenStable(appRef, pendingTasks) {
|
|
|
29732
29741
|
*/
|
|
29733
29742
|
function withDomHydration() {
|
|
29734
29743
|
return makeEnvironmentProviders([
|
|
29744
|
+
{
|
|
29745
|
+
provide: IS_HYDRATION_DOM_REUSE_ENABLED,
|
|
29746
|
+
useFactory: () => {
|
|
29747
|
+
let isEnabled = true;
|
|
29748
|
+
if (isBrowser()) {
|
|
29749
|
+
// On the client, verify that the server response contains
|
|
29750
|
+
// hydration annotations. Otherwise, keep hydration disabled.
|
|
29751
|
+
const transferState = inject(TransferState, { optional: true });
|
|
29752
|
+
isEnabled = !!transferState?.get(NGH_DATA_KEY, null);
|
|
29753
|
+
if (!isEnabled) {
|
|
29754
|
+
const console = inject(Console);
|
|
29755
|
+
const message = formatRuntimeError(-505 /* RuntimeErrorCode.MISSING_HYDRATION_ANNOTATIONS */, 'Angular hydration was requested on the client, but there was no ' +
|
|
29756
|
+
'serialized information present in the server response, ' +
|
|
29757
|
+
'thus hydration was not enabled. ' +
|
|
29758
|
+
'Make sure the `provideClientHydration()` is included into the list ' +
|
|
29759
|
+
'of providers in the server part of the application configuration.');
|
|
29760
|
+
// tslint:disable-next-line:no-console
|
|
29761
|
+
console.warn(message);
|
|
29762
|
+
}
|
|
29763
|
+
}
|
|
29764
|
+
if (isEnabled) {
|
|
29765
|
+
inject(ENABLED_SSR_FEATURES).add('hydration');
|
|
29766
|
+
}
|
|
29767
|
+
return isEnabled;
|
|
29768
|
+
},
|
|
29769
|
+
},
|
|
29735
29770
|
{
|
|
29736
29771
|
provide: ENVIRONMENT_INITIALIZER,
|
|
29737
29772
|
useValue: () => {
|
|
@@ -29740,30 +29775,29 @@ function withDomHydration() {
|
|
|
29740
29775
|
// on the client. Moving forward, the `isBrowser` check should
|
|
29741
29776
|
// be replaced with a tree-shakable alternative (e.g. `isServer`
|
|
29742
29777
|
// flag).
|
|
29743
|
-
if (isBrowser()) {
|
|
29778
|
+
if (isBrowser() && inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
|
|
29744
29779
|
enableHydrationRuntimeSupport();
|
|
29745
29780
|
}
|
|
29746
29781
|
},
|
|
29747
29782
|
multi: true,
|
|
29748
29783
|
},
|
|
29749
|
-
{
|
|
29750
|
-
provide: IS_HYDRATION_FEATURE_ENABLED,
|
|
29751
|
-
useValue: true,
|
|
29752
|
-
},
|
|
29753
29784
|
{
|
|
29754
29785
|
provide: PRESERVE_HOST_CONTENT,
|
|
29755
|
-
|
|
29756
|
-
|
|
29757
|
-
|
|
29758
|
-
|
|
29786
|
+
useFactory: () => {
|
|
29787
|
+
// Preserve host element content only in a browser
|
|
29788
|
+
// environment and when hydration is configured properly.
|
|
29789
|
+
// On a server, an application is rendered from scratch,
|
|
29790
|
+
// so the host content needs to be empty.
|
|
29791
|
+
return isBrowser() && inject(IS_HYDRATION_DOM_REUSE_ENABLED);
|
|
29792
|
+
}
|
|
29759
29793
|
},
|
|
29760
29794
|
{
|
|
29761
29795
|
provide: APP_BOOTSTRAP_LISTENER,
|
|
29762
29796
|
useFactory: () => {
|
|
29763
|
-
if (isBrowser()) {
|
|
29797
|
+
if (isBrowser() && inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
|
|
29764
29798
|
const appRef = inject(ApplicationRef);
|
|
29765
29799
|
const pendingTasks = inject(InitialRenderPendingTasks);
|
|
29766
|
-
const
|
|
29800
|
+
const injector = inject(Injector);
|
|
29767
29801
|
return () => {
|
|
29768
29802
|
whenStable(appRef, pendingTasks).then(() => {
|
|
29769
29803
|
// Wait until an app becomes stable and cleanup all views that
|
|
@@ -29772,7 +29806,7 @@ function withDomHydration() {
|
|
|
29772
29806
|
// on the server.
|
|
29773
29807
|
cleanupDehydratedViews(appRef);
|
|
29774
29808
|
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
29775
|
-
printHydrationStats(
|
|
29809
|
+
printHydrationStats(injector);
|
|
29776
29810
|
}
|
|
29777
29811
|
});
|
|
29778
29812
|
};
|
|
@@ -30068,5 +30102,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
|
30068
30102
|
* Generated bundle index. Do not edit.
|
|
30069
30103
|
*/
|
|
30070
30104
|
|
|
30071
|
-
export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, 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, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, 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, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, asNativeElements, assertInInjectionContext, assertPlatform, computed, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, platformCore, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, INJECTOR_SCOPE as ɵINJECTOR_SCOPE,
|
|
30105
|
+
export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, 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, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, 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, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, asNativeElements, assertInInjectionContext, assertPlatform, computed, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, platformCore, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, ENABLED_SSR_FEATURES as ɵENABLED_SSR_FEATURES, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, InitialRenderPendingTasks as ɵInitialRenderPendingTasks, 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, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, 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, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, detectChanges as ɵdetectChanges, devModeEqual as ɵdevModeEqual, escapeTransferStateContent as ɵescapeTransferStateContent, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, getDebugNode as ɵgetDebugNode, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, isBoundToModule as ɵisBoundToModule, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, publishDefaultGlobalUtils$1 as ɵpublishDefaultGlobalUtils, publishGlobalUtil as ɵpublishGlobalUtil, registerLocaleData as ɵregisterLocaleData, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, setClassMetadata as ɵsetClassMetadata, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, unescapeTransferStateContent as ɵunescapeTransferStateContent, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, withDomHydration as ɵwithDomHydration, ɵɵCopyDefinitionFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵStandaloneFeature, ɵɵ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, ɵɵvalidateIframeAttribute, ɵɵviewQuery };
|
|
30072
30106
|
//# sourceMappingURL=core.mjs.map
|