@angular/core 16.0.0 → 16.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/src/application_ref.mjs +60 -55
- package/esm2022/src/change_detection/change_detector_ref.mjs +2 -2
- package/esm2022/src/core_private_export.mjs +1 -2
- package/esm2022/src/di/injectable.mjs +2 -1
- package/esm2022/src/di/metadata.mjs +6 -5
- package/esm2022/src/di/metadata_attr.mjs +2 -1
- package/esm2022/src/di/r3_injector.mjs +6 -3
- package/esm2022/src/errors.mjs +1 -1
- package/esm2022/src/hydration/annotate.mjs +1 -1
- package/esm2022/src/hydration/api.mjs +32 -4
- package/esm2022/src/hydration/skip_hydration.mjs +12 -1
- package/esm2022/src/hydration/utils.mjs +9 -3
- package/esm2022/src/i18n/locale_data_api.mjs +2 -2
- package/esm2022/src/linker/element_ref.mjs +1 -1
- package/esm2022/src/linker/view_container_ref.mjs +16 -6
- package/esm2022/src/metadata/di.mjs +5 -4
- package/esm2022/src/metadata/directives.mjs +7 -7
- package/esm2022/src/metadata/ng_module.mjs +2 -1
- package/esm2022/src/render/api.mjs +1 -1
- package/esm2022/src/render3/bindings.mjs +2 -2
- package/esm2022/src/render3/component.mjs +4 -4
- package/esm2022/src/render3/definition.mjs +5 -2
- package/esm2022/src/render3/errors.mjs +6 -3
- package/esm2022/src/render3/instructions/element_validation.mjs +2 -2
- package/esm2022/src/render3/instructions/listener.mjs +1 -3
- package/esm2022/src/render3/instructions/shared.mjs +7 -3
- package/esm2022/src/render3/interfaces/document.mjs +6 -4
- package/esm2022/src/render3/interfaces/node.mjs +1 -1
- package/esm2022/src/render3/node_manipulation.mjs +10 -2
- package/esm2022/src/signals/src/api.mjs +5 -3
- package/esm2022/src/transfer_state.mjs +13 -28
- package/esm2022/src/util/assert.mjs +2 -5
- package/esm2022/src/version.mjs +1 -1
- package/esm2022/testing/src/logger.mjs +3 -3
- package/esm2022/testing/src/test_bed.mjs +4 -4
- package/esm2022/testing/src/test_bed_common.mjs +1 -1
- package/fesm2022/core.mjs +237 -171
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +5 -3
- package/fesm2022/rxjs-interop.mjs.map +1 -1
- package/fesm2022/testing.mjs +134 -102
- package/fesm2022/testing.mjs.map +1 -1
- package/index.d.ts +48 -43
- package/package.json +1 -1
- package/rxjs-interop/index.d.ts +1 -1
- 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 +415 -361
- package/schematics/ng-generate/standalone-migration/bundle.js.map +3 -3
- package/testing/index.d.ts +5 -5
package/fesm2022/core.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v16.0.
|
|
2
|
+
* @license Angular v16.0.2
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -302,10 +302,7 @@ function throwError(msg, actual, expected, comparison) {
|
|
|
302
302
|
(comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`));
|
|
303
303
|
}
|
|
304
304
|
function assertDomNode(node) {
|
|
305
|
-
|
|
306
|
-
if (!(typeof Node !== 'undefined' && node instanceof Node) &&
|
|
307
|
-
!(typeof node === 'object' && node != null &&
|
|
308
|
-
node.constructor.name === 'WebWorkerRenderNode')) {
|
|
305
|
+
if (!(node instanceof Node)) {
|
|
309
306
|
throwError(`The provided value must be an instance of a DOM Node but got ${stringify(node)}`);
|
|
310
307
|
}
|
|
311
308
|
}
|
|
@@ -1823,7 +1820,7 @@ function getPipeDef$1(type) {
|
|
|
1823
1820
|
/**
|
|
1824
1821
|
* Checks whether a given Component, Directive or Pipe is marked as standalone.
|
|
1825
1822
|
* This will return false if passed anything other than a Component, Directive, or Pipe class
|
|
1826
|
-
* See this guide for additional information:
|
|
1823
|
+
* See [this guide](/guide/standalone-components) for additional information:
|
|
1827
1824
|
*
|
|
1828
1825
|
* @param type A reference to a Component, Directive or Pipe.
|
|
1829
1826
|
* @publicApi
|
|
@@ -1903,6 +1900,9 @@ function getComponentId(componentDef) {
|
|
|
1903
1900
|
componentDef.decls,
|
|
1904
1901
|
componentDef.encapsulation,
|
|
1905
1902
|
componentDef.standalone,
|
|
1903
|
+
componentDef.exportAs,
|
|
1904
|
+
JSON.stringify(componentDef.inputs),
|
|
1905
|
+
JSON.stringify(componentDef.outputs),
|
|
1906
1906
|
// We cannot use 'componentDef.type.name' as the name of the symbol will change and will not
|
|
1907
1907
|
// match in the server and browser bundles.
|
|
1908
1908
|
Object.getOwnPropertyNames(componentDef.type.prototype),
|
|
@@ -2166,10 +2166,12 @@ function getFactoryDef(type, throwNotFound) {
|
|
|
2166
2166
|
*/
|
|
2167
2167
|
const SIGNAL = Symbol('SIGNAL');
|
|
2168
2168
|
/**
|
|
2169
|
-
* Checks if the given `value`
|
|
2169
|
+
* Checks if the given `value` is a reactive `Signal`.
|
|
2170
|
+
*
|
|
2171
|
+
* @developerPreview
|
|
2170
2172
|
*/
|
|
2171
2173
|
function isSignal(value) {
|
|
2172
|
-
return value[SIGNAL] !== undefined;
|
|
2174
|
+
return typeof value === 'function' && value[SIGNAL] !== undefined;
|
|
2173
2175
|
}
|
|
2174
2176
|
/**
|
|
2175
2177
|
* Converts `fn` into a marked signal function (where `isSignal(fn)` will be `true`), and
|
|
@@ -4938,6 +4940,7 @@ function makePropDecorator(name, props, parentClass, additionalProcessing) {
|
|
|
4938
4940
|
/**
|
|
4939
4941
|
* Attribute decorator and metadata.
|
|
4940
4942
|
*
|
|
4943
|
+
* @Annotation
|
|
4941
4944
|
* @publicApi
|
|
4942
4945
|
*/
|
|
4943
4946
|
const Attribute = makeParamDecorator('Attribute', (attributeName) => ({ attributeName, __NG_ELEMENT_ID__: () => ɵɵinjectAttribute(attributeName) }));
|
|
@@ -4961,6 +4964,7 @@ class Query {
|
|
|
4961
4964
|
* ContentChildren decorator and metadata.
|
|
4962
4965
|
*
|
|
4963
4966
|
*
|
|
4967
|
+
* @Annotation
|
|
4964
4968
|
* @publicApi
|
|
4965
4969
|
*/
|
|
4966
4970
|
const ContentChildren = makePropDecorator('ContentChildren', (selector, data = {}) => ({
|
|
@@ -4975,7 +4979,7 @@ const ContentChildren = makePropDecorator('ContentChildren', (selector, data = {
|
|
|
4975
4979
|
* ContentChild decorator and metadata.
|
|
4976
4980
|
*
|
|
4977
4981
|
*
|
|
4978
|
-
|
|
4982
|
+
* @Annotation
|
|
4979
4983
|
*
|
|
4980
4984
|
* @publicApi
|
|
4981
4985
|
*/
|
|
@@ -4983,7 +4987,7 @@ const ContentChild = makePropDecorator('ContentChild', (selector, data = {}) =>
|
|
|
4983
4987
|
/**
|
|
4984
4988
|
* ViewChildren decorator and metadata.
|
|
4985
4989
|
*
|
|
4986
|
-
|
|
4990
|
+
* @Annotation
|
|
4987
4991
|
* @publicApi
|
|
4988
4992
|
*/
|
|
4989
4993
|
const ViewChildren = makePropDecorator('ViewChildren', (selector, data = {}) => ({
|
|
@@ -4997,7 +5001,7 @@ const ViewChildren = makePropDecorator('ViewChildren', (selector, data = {}) =>
|
|
|
4997
5001
|
/**
|
|
4998
5002
|
* ViewChild decorator and metadata.
|
|
4999
5003
|
*
|
|
5000
|
-
|
|
5004
|
+
* @Annotation
|
|
5001
5005
|
* @publicApi
|
|
5002
5006
|
*/
|
|
5003
5007
|
const ViewChild = makePropDecorator('ViewChild', (selector, data) => ({ selector, first: true, isViewQuery: true, descendants: true, ...data }), Query);
|
|
@@ -5584,6 +5588,7 @@ function getParentCtor(ctor) {
|
|
|
5584
5588
|
/**
|
|
5585
5589
|
* Inject decorator and metadata.
|
|
5586
5590
|
*
|
|
5591
|
+
* @Annotation
|
|
5587
5592
|
* @publicApi
|
|
5588
5593
|
*/
|
|
5589
5594
|
const Inject = attachInjectFlag(
|
|
@@ -5593,7 +5598,7 @@ makeParamDecorator('Inject', (token) => ({ token })), -1 /* DecoratorFlags.Injec
|
|
|
5593
5598
|
/**
|
|
5594
5599
|
* Optional decorator and metadata.
|
|
5595
5600
|
*
|
|
5596
|
-
|
|
5601
|
+
* @Annotation
|
|
5597
5602
|
* @publicApi
|
|
5598
5603
|
*/
|
|
5599
5604
|
const Optional =
|
|
@@ -5603,7 +5608,7 @@ attachInjectFlag(makeParamDecorator('Optional'), 8 /* InternalInjectFlags.Option
|
|
|
5603
5608
|
/**
|
|
5604
5609
|
* Self decorator and metadata.
|
|
5605
5610
|
*
|
|
5606
|
-
|
|
5611
|
+
* @Annotation
|
|
5607
5612
|
* @publicApi
|
|
5608
5613
|
*/
|
|
5609
5614
|
const Self =
|
|
@@ -5613,7 +5618,7 @@ attachInjectFlag(makeParamDecorator('Self'), 2 /* InternalInjectFlags.Self */);
|
|
|
5613
5618
|
/**
|
|
5614
5619
|
* `SkipSelf` decorator and metadata.
|
|
5615
5620
|
*
|
|
5616
|
-
|
|
5621
|
+
* @Annotation
|
|
5617
5622
|
* @publicApi
|
|
5618
5623
|
*/
|
|
5619
5624
|
const SkipSelf =
|
|
@@ -5623,7 +5628,7 @@ attachInjectFlag(makeParamDecorator('SkipSelf'), 4 /* InternalInjectFlags.SkipSe
|
|
|
5623
5628
|
/**
|
|
5624
5629
|
* Host decorator and metadata.
|
|
5625
5630
|
*
|
|
5626
|
-
|
|
5631
|
+
* @Annotation
|
|
5627
5632
|
* @publicApi
|
|
5628
5633
|
*/
|
|
5629
5634
|
const Host =
|
|
@@ -5986,7 +5991,7 @@ function isPropertyValid(element, propName, tagName, schemas) {
|
|
|
5986
5991
|
if (schemas === null)
|
|
5987
5992
|
return true;
|
|
5988
5993
|
// The property is considered valid if the element matches the schema, it exists on the element,
|
|
5989
|
-
// or it is synthetic
|
|
5994
|
+
// or it is synthetic.
|
|
5990
5995
|
if (matchingSchemas(schemas, tagName) || propName in element || isAnimationProp(propName)) {
|
|
5991
5996
|
return true;
|
|
5992
5997
|
}
|
|
@@ -6128,6 +6133,59 @@ function matchingSchemas(schemas, tagName) {
|
|
|
6128
6133
|
return false;
|
|
6129
6134
|
}
|
|
6130
6135
|
|
|
6136
|
+
/**
|
|
6137
|
+
* The name of an attribute that can be added to the hydration boundary node
|
|
6138
|
+
* (component host node) to disable hydration for the content within that boundary.
|
|
6139
|
+
*/
|
|
6140
|
+
const SKIP_HYDRATION_ATTR_NAME = 'ngSkipHydration';
|
|
6141
|
+
/**
|
|
6142
|
+
* Helper function to check if a given node has the 'ngSkipHydration' attribute
|
|
6143
|
+
*/
|
|
6144
|
+
function hasNgSkipHydrationAttr(tNode) {
|
|
6145
|
+
const SKIP_HYDRATION_ATTR_NAME_LOWER_CASE = SKIP_HYDRATION_ATTR_NAME.toLowerCase();
|
|
6146
|
+
const attrs = tNode.mergedAttrs;
|
|
6147
|
+
if (attrs === null)
|
|
6148
|
+
return false;
|
|
6149
|
+
// only ever look at the attribute name and skip the values
|
|
6150
|
+
for (let i = 0; i < attrs.length; i += 2) {
|
|
6151
|
+
const value = attrs[i];
|
|
6152
|
+
// This is a marker, which means that the static attributes section is over,
|
|
6153
|
+
// so we can exit early.
|
|
6154
|
+
if (typeof value === 'number')
|
|
6155
|
+
return false;
|
|
6156
|
+
if (typeof value === 'string' && value.toLowerCase() === SKIP_HYDRATION_ATTR_NAME_LOWER_CASE) {
|
|
6157
|
+
return true;
|
|
6158
|
+
}
|
|
6159
|
+
}
|
|
6160
|
+
return false;
|
|
6161
|
+
}
|
|
6162
|
+
/**
|
|
6163
|
+
* Checks whether a TNode has a flag to indicate that it's a part of
|
|
6164
|
+
* a skip hydration block.
|
|
6165
|
+
*/
|
|
6166
|
+
function hasInSkipHydrationBlockFlag(tNode) {
|
|
6167
|
+
return (tNode.flags & 128 /* TNodeFlags.inSkipHydrationBlock */) === 128 /* TNodeFlags.inSkipHydrationBlock */;
|
|
6168
|
+
}
|
|
6169
|
+
/**
|
|
6170
|
+
* Helper function that determines if a given node is within a skip hydration block
|
|
6171
|
+
* by navigating up the TNode tree to see if any parent nodes have skip hydration
|
|
6172
|
+
* attribute.
|
|
6173
|
+
*
|
|
6174
|
+
* TODO(akushnir): this function should contain the logic of `hasInSkipHydrationBlockFlag`,
|
|
6175
|
+
* there is no need to traverse parent nodes when we have a TNode flag (which would also
|
|
6176
|
+
* make this lookup O(1)).
|
|
6177
|
+
*/
|
|
6178
|
+
function isInSkipHydrationBlock(tNode) {
|
|
6179
|
+
let currentTNode = tNode.parent;
|
|
6180
|
+
while (currentTNode) {
|
|
6181
|
+
if (hasNgSkipHydrationAttr(currentTNode)) {
|
|
6182
|
+
return true;
|
|
6183
|
+
}
|
|
6184
|
+
currentTNode = currentTNode.parent;
|
|
6185
|
+
}
|
|
6186
|
+
return false;
|
|
6187
|
+
}
|
|
6188
|
+
|
|
6131
6189
|
/**
|
|
6132
6190
|
* Flags for renderer-specific style modifiers.
|
|
6133
6191
|
* @publicApi
|
|
@@ -7007,12 +7065,14 @@ function processCleanups(tView, lView) {
|
|
|
7007
7065
|
}
|
|
7008
7066
|
const destroyHooks = lView[ON_DESTROY_HOOKS];
|
|
7009
7067
|
if (destroyHooks !== null) {
|
|
7068
|
+
// Reset the ON_DESTROY_HOOKS array before iterating over it to prevent hooks that unregister
|
|
7069
|
+
// themselves from mutating the array during iteration.
|
|
7070
|
+
lView[ON_DESTROY_HOOKS] = null;
|
|
7010
7071
|
for (let i = 0; i < destroyHooks.length; i++) {
|
|
7011
7072
|
const destroyHooksFn = destroyHooks[i];
|
|
7012
7073
|
ngDevMode && assertFunction(destroyHooksFn, 'Expecting destroy hook to be a function.');
|
|
7013
7074
|
destroyHooksFn();
|
|
7014
7075
|
}
|
|
7015
|
-
lView[ON_DESTROY_HOOKS] = null;
|
|
7016
7076
|
}
|
|
7017
7077
|
}
|
|
7018
7078
|
/** Calls onDestroy hooks for this view */
|
|
@@ -7427,6 +7487,11 @@ function applyProjectionRecursive(renderer, action, lView, tProjectionNode, pare
|
|
|
7427
7487
|
else {
|
|
7428
7488
|
let nodeToProject = nodeToProjectOrRNodes;
|
|
7429
7489
|
const projectedComponentLView = componentLView[PARENT];
|
|
7490
|
+
// If a parent <ng-content> is located within a skip hydration block,
|
|
7491
|
+
// annotate an actual node that is being projected with the same flag too.
|
|
7492
|
+
if (hasInSkipHydrationBlockFlag(tProjectionNode)) {
|
|
7493
|
+
nodeToProject.flags |= 128 /* TNodeFlags.inSkipHydrationBlock */;
|
|
7494
|
+
}
|
|
7430
7495
|
applyNodes(renderer, action, nodeToProject, projectedComponentLView, parentRElement, beforeNode, true);
|
|
7431
7496
|
}
|
|
7432
7497
|
}
|
|
@@ -7727,7 +7792,7 @@ function ɵɵvalidateIframeAttribute(attrValue, tagName, attrName) {
|
|
|
7727
7792
|
* When running ivy outside of a browser environment, it is necessary to call `setDocument()` to
|
|
7728
7793
|
* tell ivy what the global `document` is.
|
|
7729
7794
|
*
|
|
7730
|
-
* Angular does this for us in each of the standard platforms (`Browser
|
|
7795
|
+
* Angular does this for us in each of the standard platforms (`Browser` and `Server`)
|
|
7731
7796
|
* by calling `setDocument()` when providing the `DOCUMENT` token.
|
|
7732
7797
|
*/
|
|
7733
7798
|
let DOCUMENT = undefined;
|
|
@@ -7754,12 +7819,13 @@ function getDocument() {
|
|
|
7754
7819
|
else if (typeof document !== 'undefined') {
|
|
7755
7820
|
return document;
|
|
7756
7821
|
}
|
|
7822
|
+
throw new RuntimeError(210 /* RuntimeErrorCode.MISSING_DOCUMENT */, (typeof ngDevMode === 'undefined' || ngDevMode) &&
|
|
7823
|
+
`The document object is not available in this context. Make sure the DOCUMENT injection token is provided.`);
|
|
7757
7824
|
// No "document" can be found. This should only happen if we are running ivy outside Angular and
|
|
7758
7825
|
// the current platform is not a browser. Since this is not a supported scenario at the moment
|
|
7759
7826
|
// this should not happen in Angular apps.
|
|
7760
7827
|
// Once we support running ivy outside of Angular we will need to publish `setDocument()` as a
|
|
7761
|
-
// public API.
|
|
7762
|
-
return undefined;
|
|
7828
|
+
// public API.
|
|
7763
7829
|
}
|
|
7764
7830
|
|
|
7765
7831
|
/**
|
|
@@ -9003,7 +9069,11 @@ class R3Injector extends EnvironmentInjector {
|
|
|
9003
9069
|
for (const service of this._ngOnDestroyHooks) {
|
|
9004
9070
|
service.ngOnDestroy();
|
|
9005
9071
|
}
|
|
9006
|
-
|
|
9072
|
+
const onDestroyHooks = this._onDestroyHooks;
|
|
9073
|
+
// Reset the _onDestroyHooks array before iterating over it to prevent hooks that unregister
|
|
9074
|
+
// themselves from mutating the array during iteration.
|
|
9075
|
+
this._onDestroyHooks = [];
|
|
9076
|
+
for (const hook of onDestroyHooks) {
|
|
9007
9077
|
hook();
|
|
9008
9078
|
}
|
|
9009
9079
|
}
|
|
@@ -9012,7 +9082,6 @@ class R3Injector extends EnvironmentInjector {
|
|
|
9012
9082
|
this.records.clear();
|
|
9013
9083
|
this._ngOnDestroyHooks.clear();
|
|
9014
9084
|
this.injectorDefTypes.clear();
|
|
9015
|
-
this._onDestroyHooks.length = 0;
|
|
9016
9085
|
}
|
|
9017
9086
|
}
|
|
9018
9087
|
onDestroy(callback) {
|
|
@@ -9426,26 +9495,6 @@ const ENABLED_SSR_FEATURES = new InjectionToken((typeof ngDevMode === 'undefined
|
|
|
9426
9495
|
factory: () => new Set(),
|
|
9427
9496
|
});
|
|
9428
9497
|
|
|
9429
|
-
function escapeTransferStateContent(text) {
|
|
9430
|
-
const escapedText = {
|
|
9431
|
-
'&': '&a;',
|
|
9432
|
-
'"': '&q;',
|
|
9433
|
-
'\'': '&s;',
|
|
9434
|
-
'<': '&l;',
|
|
9435
|
-
'>': '&g;',
|
|
9436
|
-
};
|
|
9437
|
-
return text.replace(/[&"'<>]/g, s => escapedText[s]);
|
|
9438
|
-
}
|
|
9439
|
-
function unescapeTransferStateContent(text) {
|
|
9440
|
-
const unescapedText = {
|
|
9441
|
-
'&a;': '&',
|
|
9442
|
-
'&q;': '"',
|
|
9443
|
-
'&s;': '\'',
|
|
9444
|
-
'&l;': '<',
|
|
9445
|
-
'&g;': '>',
|
|
9446
|
-
};
|
|
9447
|
-
return text.replace(/&[^;]+;/g, s => unescapedText[s]);
|
|
9448
|
-
}
|
|
9449
9498
|
/**
|
|
9450
9499
|
* Create a `StateKey<T>` that can be used to store value of type T with `TransferState`.
|
|
9451
9500
|
*
|
|
@@ -9465,7 +9514,9 @@ function makeStateKey(key) {
|
|
|
9465
9514
|
}
|
|
9466
9515
|
function initTransferState() {
|
|
9467
9516
|
const transferState = new TransferState();
|
|
9468
|
-
|
|
9517
|
+
if (inject(PLATFORM_ID) === 'browser') {
|
|
9518
|
+
transferState.store = retrieveTransferredState(getDocument(), inject(APP_ID));
|
|
9519
|
+
}
|
|
9469
9520
|
return transferState;
|
|
9470
9521
|
}
|
|
9471
9522
|
/**
|
|
@@ -9547,24 +9598,27 @@ class TransferState {
|
|
|
9547
9598
|
}
|
|
9548
9599
|
}
|
|
9549
9600
|
}
|
|
9550
|
-
|
|
9601
|
+
// Escape script tag to avoid break out of <script> tag in serialized output.
|
|
9602
|
+
// Encoding of `<` is the same behaviour as G3 script_builders.
|
|
9603
|
+
return JSON.stringify(this.store).replace(/</g, '\\u003C');
|
|
9551
9604
|
}
|
|
9552
9605
|
}
|
|
9553
9606
|
function retrieveTransferredState(doc, appId) {
|
|
9554
9607
|
// Locate the script tag with the JSON data transferred from the server.
|
|
9555
9608
|
// The id of the script tag is set to the Angular appId + 'state'.
|
|
9556
9609
|
const script = doc.getElementById(appId + '-state');
|
|
9557
|
-
|
|
9558
|
-
if (script && script.textContent) {
|
|
9610
|
+
if (script?.textContent) {
|
|
9559
9611
|
try {
|
|
9560
9612
|
// Avoid using any here as it triggers lint errors in google3 (any is not allowed).
|
|
9561
|
-
|
|
9613
|
+
// Decoding of `<` is done of the box by browsers and node.js, same behaviour as G3
|
|
9614
|
+
// script_builders.
|
|
9615
|
+
return JSON.parse(script.textContent);
|
|
9562
9616
|
}
|
|
9563
9617
|
catch (e) {
|
|
9564
9618
|
console.warn('Exception while restoring TransferState for app ' + appId, e);
|
|
9565
9619
|
}
|
|
9566
9620
|
}
|
|
9567
|
-
return
|
|
9621
|
+
return {};
|
|
9568
9622
|
}
|
|
9569
9623
|
|
|
9570
9624
|
/** Encodes that the node lookup should start from the host node of this component. */
|
|
@@ -9683,6 +9737,12 @@ function getComponentLViewForHydration(viewRef) {
|
|
|
9683
9737
|
if (isRootView(lView)) {
|
|
9684
9738
|
lView = lView[HEADER_OFFSET];
|
|
9685
9739
|
}
|
|
9740
|
+
// If a `ViewContainerRef` was injected in a component class, this resulted
|
|
9741
|
+
// in an LContainer creation at that location. In this case, the component
|
|
9742
|
+
// LView is in the LContainer's `HOST` slot.
|
|
9743
|
+
if (isLContainer(lView)) {
|
|
9744
|
+
lView = lView[HOST];
|
|
9745
|
+
}
|
|
9686
9746
|
return lView;
|
|
9687
9747
|
}
|
|
9688
9748
|
function getTextNodeContent(node) {
|
|
@@ -9978,7 +10038,7 @@ class Version {
|
|
|
9978
10038
|
/**
|
|
9979
10039
|
* @publicApi
|
|
9980
10040
|
*/
|
|
9981
|
-
const VERSION = new Version('16.0.
|
|
10041
|
+
const VERSION = new Version('16.0.2');
|
|
9982
10042
|
|
|
9983
10043
|
// This default value is when checking the hierarchy for a token.
|
|
9984
10044
|
//
|
|
@@ -10084,48 +10144,6 @@ class ErrorHandler {
|
|
|
10084
10144
|
}
|
|
10085
10145
|
}
|
|
10086
10146
|
|
|
10087
|
-
/**
|
|
10088
|
-
* The name of an attribute that can be added to the hydration boundary node
|
|
10089
|
-
* (component host node) to disable hydration for the content within that boundary.
|
|
10090
|
-
*/
|
|
10091
|
-
const SKIP_HYDRATION_ATTR_NAME = 'ngSkipHydration';
|
|
10092
|
-
/**
|
|
10093
|
-
* Helper function to check if a given node has the 'ngSkipHydration' attribute
|
|
10094
|
-
*/
|
|
10095
|
-
function hasNgSkipHydrationAttr(tNode) {
|
|
10096
|
-
const SKIP_HYDRATION_ATTR_NAME_LOWER_CASE = SKIP_HYDRATION_ATTR_NAME.toLowerCase();
|
|
10097
|
-
const attrs = tNode.mergedAttrs;
|
|
10098
|
-
if (attrs === null)
|
|
10099
|
-
return false;
|
|
10100
|
-
// only ever look at the attribute name and skip the values
|
|
10101
|
-
for (let i = 0; i < attrs.length; i += 2) {
|
|
10102
|
-
const value = attrs[i];
|
|
10103
|
-
// This is a marker, which means that the static attributes section is over,
|
|
10104
|
-
// so we can exit early.
|
|
10105
|
-
if (typeof value === 'number')
|
|
10106
|
-
return false;
|
|
10107
|
-
if (typeof value === 'string' && value.toLowerCase() === SKIP_HYDRATION_ATTR_NAME_LOWER_CASE) {
|
|
10108
|
-
return true;
|
|
10109
|
-
}
|
|
10110
|
-
}
|
|
10111
|
-
return false;
|
|
10112
|
-
}
|
|
10113
|
-
/**
|
|
10114
|
-
* Helper function that determines if a given node is within a skip hydration block
|
|
10115
|
-
* by navigating up the TNode tree to see if any parent nodes have skip hydration
|
|
10116
|
-
* attribute.
|
|
10117
|
-
*/
|
|
10118
|
-
function isInSkipHydrationBlock(tNode) {
|
|
10119
|
-
let currentTNode = tNode.parent;
|
|
10120
|
-
while (currentTNode) {
|
|
10121
|
-
if (hasNgSkipHydrationAttr(currentTNode)) {
|
|
10122
|
-
return true;
|
|
10123
|
-
}
|
|
10124
|
-
currentTNode = currentTNode.parent;
|
|
10125
|
-
}
|
|
10126
|
-
return false;
|
|
10127
|
-
}
|
|
10128
|
-
|
|
10129
10147
|
/**
|
|
10130
10148
|
* Internal token that specifies whether DOM reuse logic
|
|
10131
10149
|
* during hydration is enabled.
|
|
@@ -10235,9 +10253,11 @@ function throwMultipleComponentError(tNode, first, second) {
|
|
|
10235
10253
|
`${stringifyForError(second)}`);
|
|
10236
10254
|
}
|
|
10237
10255
|
/** Throws an ExpressionChangedAfterChecked error if checkNoChanges mode is on. */
|
|
10238
|
-
function throwErrorIfNoChangesMode(creationMode, oldValue, currValue, propName) {
|
|
10256
|
+
function throwErrorIfNoChangesMode(creationMode, oldValue, currValue, propName, lView) {
|
|
10257
|
+
const hostComponentDef = getDeclarationComponentDef(lView);
|
|
10258
|
+
const componentClassName = hostComponentDef?.type?.name;
|
|
10239
10259
|
const field = propName ? ` for '${propName}'` : '';
|
|
10240
|
-
let msg = `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value${field}: '${oldValue}'. Current value: '${currValue}'
|
|
10260
|
+
let msg = `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value${field}: '${oldValue}'. Current value: '${currValue}'.${componentClassName ? ` Expression location: ${componentClassName} component` : ''}`;
|
|
10241
10261
|
if (creationMode) {
|
|
10242
10262
|
msg +=
|
|
10243
10263
|
` It seems like the view has been created after its parent and its children have been dirty checked.` +
|
|
@@ -10563,6 +10583,7 @@ function getInjectableMetadata(type, srcMeta) {
|
|
|
10563
10583
|
/**
|
|
10564
10584
|
* Injectable decorator and metadata.
|
|
10565
10585
|
*
|
|
10586
|
+
* @Annotation
|
|
10566
10587
|
* @publicApi
|
|
10567
10588
|
*/
|
|
10568
10589
|
const Injectable = makeDecorator('Injectable', undefined, undefined, undefined, (type, meta) => compileInjectable(type, meta));
|
|
@@ -11119,6 +11140,10 @@ function createTNode(tView, tParent, type, index, value, attrs) {
|
|
|
11119
11140
|
ngDevMode && ngDevMode.tNode++;
|
|
11120
11141
|
ngDevMode && tParent && assertTNodeForTView(tParent, tView);
|
|
11121
11142
|
let injectorIndex = tParent ? tParent.injectorIndex : -1;
|
|
11143
|
+
let flags = 0;
|
|
11144
|
+
if (isInSkipHydrationBlock$1()) {
|
|
11145
|
+
flags |= 128 /* TNodeFlags.inSkipHydrationBlock */;
|
|
11146
|
+
}
|
|
11122
11147
|
const tNode = {
|
|
11123
11148
|
type,
|
|
11124
11149
|
index,
|
|
@@ -11129,7 +11154,7 @@ function createTNode(tView, tParent, type, index, value, attrs) {
|
|
|
11129
11154
|
directiveStylingLast: -1,
|
|
11130
11155
|
componentOffset: -1,
|
|
11131
11156
|
propertyBindings: null,
|
|
11132
|
-
flags
|
|
11157
|
+
flags,
|
|
11133
11158
|
providerIndexes: 0,
|
|
11134
11159
|
value: value,
|
|
11135
11160
|
attrs: attrs,
|
|
@@ -13683,7 +13708,7 @@ function bindingUpdated(lView, bindingIndex, value) {
|
|
|
13683
13708
|
const oldValueToCompare = oldValue !== NO_CHANGE ? oldValue : undefined;
|
|
13684
13709
|
if (!devModeEqual(oldValueToCompare, value)) {
|
|
13685
13710
|
const details = getExpressionChangedErrorDetails(lView, bindingIndex, oldValueToCompare, value);
|
|
13686
|
-
throwErrorIfNoChangesMode(oldValue === NO_CHANGE, details.oldValue, details.newValue, details.propName);
|
|
13711
|
+
throwErrorIfNoChangesMode(oldValue === NO_CHANGE, details.oldValue, details.newValue, details.propName, lView);
|
|
13687
13712
|
}
|
|
13688
13713
|
// There was a change, but the `devModeEqual` decided that the change is exempt from an error.
|
|
13689
13714
|
// For this reason we exit as if no change. The early exit is needed to prevent the changed
|
|
@@ -15668,8 +15693,6 @@ function wrapListener(tNode, lView, context, listenerFn, wrapWithPreventDefault)
|
|
|
15668
15693
|
}
|
|
15669
15694
|
if (wrapWithPreventDefault && result === false) {
|
|
15670
15695
|
e.preventDefault();
|
|
15671
|
-
// Necessary for legacy browsers that don't support preventDefault (e.g. IE)
|
|
15672
|
-
e.returnValue = false;
|
|
15673
15696
|
}
|
|
15674
15697
|
return result;
|
|
15675
15698
|
};
|
|
@@ -19202,7 +19225,7 @@ function getLocaleCurrencyCode(locale) {
|
|
|
19202
19225
|
* @param locale A locale code for the locale format rules to use.
|
|
19203
19226
|
* @returns The plural function for the locale.
|
|
19204
19227
|
* @see `NgPlural`
|
|
19205
|
-
* @see [Internationalization (i18n) Guide](
|
|
19228
|
+
* @see [Internationalization (i18n) Guide](/guide/i18n-overview)
|
|
19206
19229
|
*/
|
|
19207
19230
|
function getLocalePluralCase(locale) {
|
|
19208
19231
|
const data = findLocaleData(locale);
|
|
@@ -23117,7 +23140,11 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
|
|
|
23117
23140
|
}
|
|
23118
23141
|
const hydrationInfo = findMatchingDehydratedView(this._lContainer, templateRef.ssrId);
|
|
23119
23142
|
const viewRef = templateRef.createEmbeddedViewImpl(context || {}, injector, hydrationInfo);
|
|
23120
|
-
|
|
23143
|
+
// If there is a matching dehydrated view, but the host TNode is located in the skip
|
|
23144
|
+
// hydration block, this means that the content was detached (as a part of the skip
|
|
23145
|
+
// hydration logic) and it needs to be appended into the DOM.
|
|
23146
|
+
const skipDomInsertion = !!hydrationInfo && !hasInSkipHydrationBlockFlag(this._hostTNode);
|
|
23147
|
+
this.insertImpl(viewRef, index, skipDomInsertion);
|
|
23121
23148
|
return viewRef;
|
|
23122
23149
|
}
|
|
23123
23150
|
createComponent(componentFactoryOrType, indexOrOptions, injector, projectableNodes, environmentInjector) {
|
|
@@ -23191,7 +23218,11 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
|
|
|
23191
23218
|
const dehydratedView = findMatchingDehydratedView(this._lContainer, componentDef?.id ?? null);
|
|
23192
23219
|
const rNode = dehydratedView?.firstChild ?? null;
|
|
23193
23220
|
const componentRef = componentFactory.create(contextInjector, projectableNodes, rNode, environmentInjector);
|
|
23194
|
-
|
|
23221
|
+
// If there is a matching dehydrated view, but the host TNode is located in the skip
|
|
23222
|
+
// hydration block, this means that the content was detached (as a part of the skip
|
|
23223
|
+
// hydration logic) and it needs to be appended into the DOM.
|
|
23224
|
+
const skipDomInsertion = !!dehydratedView && !hasInSkipHydrationBlockFlag(this._hostTNode);
|
|
23225
|
+
this.insertImpl(componentRef.hostView, index, skipDomInsertion);
|
|
23195
23226
|
return componentRef;
|
|
23196
23227
|
}
|
|
23197
23228
|
insert(viewRef, index) {
|
|
@@ -23365,8 +23396,10 @@ function locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue) {
|
|
|
23365
23396
|
return;
|
|
23366
23397
|
const hydrationInfo = hostLView[HYDRATION];
|
|
23367
23398
|
const noOffsetIndex = hostTNode.index - HEADER_OFFSET;
|
|
23368
|
-
|
|
23369
|
-
|
|
23399
|
+
// TODO(akushnir): this should really be a single condition, refactor the code
|
|
23400
|
+
// to use `hasInSkipHydrationBlockFlag` logic inside `isInSkipHydrationBlock`.
|
|
23401
|
+
const skipHydration = isInSkipHydrationBlock(hostTNode) || hasInSkipHydrationBlockFlag(hostTNode);
|
|
23402
|
+
const isNodeCreationMode = !hydrationInfo || skipHydration || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);
|
|
23370
23403
|
// Regular creation mode.
|
|
23371
23404
|
if (isNodeCreationMode) {
|
|
23372
23405
|
return createAnchorNode(lContainer, hostLView, hostTNode, slotValue);
|
|
@@ -25062,17 +25095,17 @@ const Directive = makeDecorator('Directive', (dir = {}) => dir, undefined, undef
|
|
|
25062
25095
|
/**
|
|
25063
25096
|
* Component decorator and metadata.
|
|
25064
25097
|
*
|
|
25065
|
-
|
|
25098
|
+
* @Annotation
|
|
25066
25099
|
* @publicApi
|
|
25067
25100
|
*/
|
|
25068
25101
|
const Component = makeDecorator('Component', (c = {}) => ({ changeDetection: ChangeDetectionStrategy.Default, ...c }), Directive, undefined, (type, meta) => compileComponent(type, meta));
|
|
25069
25102
|
/**
|
|
25070
|
-
|
|
25103
|
+
* @Annotation
|
|
25071
25104
|
* @publicApi
|
|
25072
25105
|
*/
|
|
25073
25106
|
const Pipe = makeDecorator('Pipe', (p) => ({ pure: true, ...p }), undefined, undefined, (type, meta) => compilePipe(type, meta));
|
|
25074
25107
|
/**
|
|
25075
|
-
|
|
25108
|
+
* @Annotation
|
|
25076
25109
|
* @publicApi
|
|
25077
25110
|
*/
|
|
25078
25111
|
const Input = makePropDecorator('Input', (arg) => {
|
|
@@ -25082,12 +25115,12 @@ const Input = makePropDecorator('Input', (arg) => {
|
|
|
25082
25115
|
return typeof arg === 'string' ? { alias: arg } : arg;
|
|
25083
25116
|
});
|
|
25084
25117
|
/**
|
|
25085
|
-
|
|
25118
|
+
* @Annotation
|
|
25086
25119
|
* @publicApi
|
|
25087
25120
|
*/
|
|
25088
25121
|
const Output = makePropDecorator('Output', (alias) => ({ alias }));
|
|
25089
25122
|
/**
|
|
25090
|
-
|
|
25123
|
+
* @Annotation
|
|
25091
25124
|
* @publicApi
|
|
25092
25125
|
*/
|
|
25093
25126
|
const HostBinding = makePropDecorator('HostBinding', (hostPropertyName) => ({ hostPropertyName }));
|
|
@@ -25153,12 +25186,13 @@ const HostBinding = makePropDecorator('HostBinding', (hostPropertyName) => ({ ho
|
|
|
25153
25186
|
* The global target names that can be used to prefix an event name are
|
|
25154
25187
|
* `document:`, `window:` and `body:`.
|
|
25155
25188
|
*
|
|
25156
|
-
|
|
25189
|
+
* @Annotation
|
|
25157
25190
|
* @publicApi
|
|
25158
25191
|
*/
|
|
25159
25192
|
const HostListener = makePropDecorator('HostListener', (eventName, args) => ({ eventName, args }));
|
|
25160
25193
|
|
|
25161
25194
|
/**
|
|
25195
|
+
* @Annotation
|
|
25162
25196
|
*/
|
|
25163
25197
|
const NgModule = makeDecorator('NgModule', (ngModule) => ngModule, undefined, undefined,
|
|
25164
25198
|
/**
|
|
@@ -26645,64 +26679,69 @@ function runPlatformInitializers(injector) {
|
|
|
26645
26679
|
* @returns A promise that returns an `ApplicationRef` instance once resolved.
|
|
26646
26680
|
*/
|
|
26647
26681
|
function internalCreateApplication(config) {
|
|
26648
|
-
|
|
26649
|
-
|
|
26650
|
-
|
|
26651
|
-
|
|
26652
|
-
|
|
26653
|
-
|
|
26654
|
-
|
|
26655
|
-
|
|
26656
|
-
|
|
26657
|
-
|
|
26658
|
-
|
|
26659
|
-
|
|
26660
|
-
|
|
26661
|
-
|
|
26662
|
-
|
|
26663
|
-
|
|
26664
|
-
|
|
26665
|
-
|
|
26666
|
-
|
|
26667
|
-
const envInjector = adapter.injector;
|
|
26668
|
-
const ngZone = envInjector.get(NgZone);
|
|
26669
|
-
return ngZone.run(() => {
|
|
26670
|
-
envInjector.resolveInjectorInitializers();
|
|
26671
|
-
const exceptionHandler = envInjector.get(ErrorHandler, null);
|
|
26672
|
-
if ((typeof ngDevMode === 'undefined' || ngDevMode) && !exceptionHandler) {
|
|
26673
|
-
throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, 'No `ErrorHandler` found in the Dependency Injection tree.');
|
|
26674
|
-
}
|
|
26675
|
-
let onErrorSubscription;
|
|
26676
|
-
ngZone.runOutsideAngular(() => {
|
|
26677
|
-
onErrorSubscription = ngZone.onError.subscribe({
|
|
26678
|
-
next: (error) => {
|
|
26679
|
-
exceptionHandler.handleError(error);
|
|
26680
|
-
}
|
|
26681
|
-
});
|
|
26682
|
-
});
|
|
26683
|
-
// If the whole platform is destroyed, invoke the `destroy` method
|
|
26684
|
-
// for all bootstrapped applications as well.
|
|
26685
|
-
const destroyListener = () => envInjector.destroy();
|
|
26686
|
-
const onPlatformDestroyListeners = platformInjector.get(PLATFORM_DESTROY_LISTENERS);
|
|
26687
|
-
onPlatformDestroyListeners.add(destroyListener);
|
|
26688
|
-
envInjector.onDestroy(() => {
|
|
26689
|
-
onErrorSubscription.unsubscribe();
|
|
26690
|
-
onPlatformDestroyListeners.delete(destroyListener);
|
|
26682
|
+
try {
|
|
26683
|
+
const { rootComponent, appProviders, platformProviders } = config;
|
|
26684
|
+
if ((typeof ngDevMode === 'undefined' || ngDevMode) && rootComponent !== undefined) {
|
|
26685
|
+
assertStandaloneComponentType(rootComponent);
|
|
26686
|
+
}
|
|
26687
|
+
const platformInjector = createOrReusePlatformInjector(platformProviders);
|
|
26688
|
+
// Create root application injector based on a set of providers configured at the platform
|
|
26689
|
+
// bootstrap level as well as providers passed to the bootstrap call by a user.
|
|
26690
|
+
const allAppProviders = [
|
|
26691
|
+
provideZoneChangeDetection(),
|
|
26692
|
+
...(appProviders || []),
|
|
26693
|
+
];
|
|
26694
|
+
const adapter = new EnvironmentNgModuleRefAdapter({
|
|
26695
|
+
providers: allAppProviders,
|
|
26696
|
+
parent: platformInjector,
|
|
26697
|
+
debugName: (typeof ngDevMode === 'undefined' || ngDevMode) ? 'Environment Injector' : '',
|
|
26698
|
+
// We skip environment initializers because we need to run them inside the NgZone, which
|
|
26699
|
+
// happens after we get the NgZone instance from the Injector.
|
|
26700
|
+
runEnvironmentInitializers: false,
|
|
26691
26701
|
});
|
|
26692
|
-
|
|
26693
|
-
|
|
26694
|
-
|
|
26695
|
-
|
|
26696
|
-
|
|
26697
|
-
|
|
26698
|
-
|
|
26699
|
-
|
|
26700
|
-
|
|
26701
|
-
|
|
26702
|
-
|
|
26702
|
+
const envInjector = adapter.injector;
|
|
26703
|
+
const ngZone = envInjector.get(NgZone);
|
|
26704
|
+
return ngZone.run(() => {
|
|
26705
|
+
envInjector.resolveInjectorInitializers();
|
|
26706
|
+
const exceptionHandler = envInjector.get(ErrorHandler, null);
|
|
26707
|
+
if ((typeof ngDevMode === 'undefined' || ngDevMode) && !exceptionHandler) {
|
|
26708
|
+
throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, 'No `ErrorHandler` found in the Dependency Injection tree.');
|
|
26709
|
+
}
|
|
26710
|
+
let onErrorSubscription;
|
|
26711
|
+
ngZone.runOutsideAngular(() => {
|
|
26712
|
+
onErrorSubscription = ngZone.onError.subscribe({
|
|
26713
|
+
next: (error) => {
|
|
26714
|
+
exceptionHandler.handleError(error);
|
|
26715
|
+
}
|
|
26716
|
+
});
|
|
26717
|
+
});
|
|
26718
|
+
// If the whole platform is destroyed, invoke the `destroy` method
|
|
26719
|
+
// for all bootstrapped applications as well.
|
|
26720
|
+
const destroyListener = () => envInjector.destroy();
|
|
26721
|
+
const onPlatformDestroyListeners = platformInjector.get(PLATFORM_DESTROY_LISTENERS);
|
|
26722
|
+
onPlatformDestroyListeners.add(destroyListener);
|
|
26723
|
+
envInjector.onDestroy(() => {
|
|
26724
|
+
onErrorSubscription.unsubscribe();
|
|
26725
|
+
onPlatformDestroyListeners.delete(destroyListener);
|
|
26726
|
+
});
|
|
26727
|
+
return _callAndReportToErrorHandler(exceptionHandler, ngZone, () => {
|
|
26728
|
+
const initStatus = envInjector.get(ApplicationInitStatus);
|
|
26729
|
+
initStatus.runInitializers();
|
|
26730
|
+
return initStatus.donePromise.then(() => {
|
|
26731
|
+
const localeId = envInjector.get(LOCALE_ID, DEFAULT_LOCALE_ID);
|
|
26732
|
+
setLocaleId(localeId || DEFAULT_LOCALE_ID);
|
|
26733
|
+
const appRef = envInjector.get(ApplicationRef);
|
|
26734
|
+
if (rootComponent !== undefined) {
|
|
26735
|
+
appRef.bootstrap(rootComponent);
|
|
26736
|
+
}
|
|
26737
|
+
return appRef;
|
|
26738
|
+
});
|
|
26703
26739
|
});
|
|
26704
26740
|
});
|
|
26705
|
-
}
|
|
26741
|
+
}
|
|
26742
|
+
catch (e) {
|
|
26743
|
+
return Promise.reject(e);
|
|
26744
|
+
}
|
|
26706
26745
|
}
|
|
26707
26746
|
/**
|
|
26708
26747
|
* Creates a factory for a platform. Can be used to provide or override `Providers` specific to
|
|
@@ -27513,7 +27552,7 @@ function noModuleError(id) {
|
|
|
27513
27552
|
*
|
|
27514
27553
|
* The following example sets the `OnPush` change-detection strategy for a component
|
|
27515
27554
|
* (`CheckOnce`, rather than the default `CheckAlways`), then forces a second check
|
|
27516
|
-
* after an interval.
|
|
27555
|
+
* after an interval.
|
|
27517
27556
|
*
|
|
27518
27557
|
* <code-example path="core/ts/change_detect/change-detection.ts"
|
|
27519
27558
|
* region="mark-for-check"></code-example>
|
|
@@ -29772,6 +29811,11 @@ class InitialRenderPendingTasks {
|
|
|
29772
29811
|
* prevents adding it multiple times.
|
|
29773
29812
|
*/
|
|
29774
29813
|
let isHydrationSupportEnabled = false;
|
|
29814
|
+
/**
|
|
29815
|
+
* Defines a period of time that Angular waits for the `ApplicationRef.isStable` to emit `true`.
|
|
29816
|
+
* If there was no event with the `true` value during this time, Angular reports a warning.
|
|
29817
|
+
*/
|
|
29818
|
+
const APPLICATION_IS_STABLE_TIMEOUT = 10000;
|
|
29775
29819
|
/**
|
|
29776
29820
|
* Brings the necessary hydration code in tree-shakable manner.
|
|
29777
29821
|
* The code is only present when the `provideClientHydration` is
|
|
@@ -29813,15 +29857,27 @@ function printHydrationStats(injector) {
|
|
|
29813
29857
|
`and ${ngDevMode.hydratedNodes} node(s), ` +
|
|
29814
29858
|
`${ngDevMode.componentsSkippedHydration} component(s) were skipped. ` +
|
|
29815
29859
|
`Note: this feature is in Developer Preview mode. ` +
|
|
29816
|
-
`Learn more at https://
|
|
29860
|
+
`Learn more at https://angular.io/guide/hydration.`;
|
|
29817
29861
|
// tslint:disable-next-line:no-console
|
|
29818
29862
|
console.log(message);
|
|
29819
29863
|
}
|
|
29820
29864
|
/**
|
|
29821
29865
|
* Returns a Promise that is resolved when an application becomes stable.
|
|
29822
29866
|
*/
|
|
29823
|
-
function whenStable(appRef, pendingTasks) {
|
|
29867
|
+
function whenStable(appRef, pendingTasks, injector) {
|
|
29824
29868
|
const isStablePromise = appRef.isStable.pipe(first((isStable) => isStable)).toPromise();
|
|
29869
|
+
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
29870
|
+
const timeoutTime = APPLICATION_IS_STABLE_TIMEOUT;
|
|
29871
|
+
const console = injector.get(Console);
|
|
29872
|
+
const ngZone = injector.get(NgZone);
|
|
29873
|
+
// The following call should not and does not prevent the app to become stable
|
|
29874
|
+
// We cannot use RxJS timer here because the app would remain unstable.
|
|
29875
|
+
// This also avoids an extra change detection cycle.
|
|
29876
|
+
const timeoutId = ngZone.runOutsideAngular(() => {
|
|
29877
|
+
return setTimeout(() => logWarningOnStableTimedout(timeoutTime, console), timeoutTime);
|
|
29878
|
+
});
|
|
29879
|
+
isStablePromise.finally(() => clearTimeout(timeoutId));
|
|
29880
|
+
}
|
|
29825
29881
|
const pendingTasksPromise = pendingTasks.whenAllTasksComplete;
|
|
29826
29882
|
return Promise.allSettled([isStablePromise, pendingTasksPromise]);
|
|
29827
29883
|
}
|
|
@@ -29895,7 +29951,7 @@ function withDomHydration() {
|
|
|
29895
29951
|
const pendingTasks = inject(InitialRenderPendingTasks);
|
|
29896
29952
|
const injector = inject(Injector);
|
|
29897
29953
|
return () => {
|
|
29898
|
-
whenStable(appRef, pendingTasks).then(() => {
|
|
29954
|
+
whenStable(appRef, pendingTasks, injector).then(() => {
|
|
29899
29955
|
// Wait until an app becomes stable and cleanup all views that
|
|
29900
29956
|
// were not claimed during the application bootstrap process.
|
|
29901
29957
|
// The timing is similar to when we start the serialization process
|
|
@@ -29913,6 +29969,16 @@ function withDomHydration() {
|
|
|
29913
29969
|
}
|
|
29914
29970
|
]);
|
|
29915
29971
|
}
|
|
29972
|
+
/**
|
|
29973
|
+
*
|
|
29974
|
+
* @param time The time in ms until the stable timedout warning message is logged
|
|
29975
|
+
*/
|
|
29976
|
+
function logWarningOnStableTimedout(time, console) {
|
|
29977
|
+
const message = `Angular hydration expected the ApplicationRef.isStable() to emit \`true\`, but it ` +
|
|
29978
|
+
`didn't happen within ${time}ms. Angular hydration logic depends on the application becoming stable ` +
|
|
29979
|
+
`as a signal to complete hydration process.`;
|
|
29980
|
+
console.warn(formatRuntimeError(-506 /* RuntimeErrorCode.HYDRATION_STABLE_TIMEDOUT */, message));
|
|
29981
|
+
}
|
|
29916
29982
|
|
|
29917
29983
|
/** Coerces a value (typically a string) to a boolean. */
|
|
29918
29984
|
function coerceToBoolean(value) {
|
|
@@ -30064,12 +30130,12 @@ function ɵɵngDeclarePipe(decl) {
|
|
|
30064
30130
|
* @param component Component class reference.
|
|
30065
30131
|
* @param options Set of options to use:
|
|
30066
30132
|
* * `environmentInjector`: An `EnvironmentInjector` instance to be used for the component, see
|
|
30067
|
-
* additional info about it
|
|
30133
|
+
* additional info about it [here](/guide/standalone-components#environment-injectors).
|
|
30068
30134
|
* * `hostElement` (optional): A DOM node that should act as a host node for the component. If not
|
|
30069
30135
|
* provided, Angular creates one based on the tag name used in the component selector (and falls
|
|
30070
30136
|
* back to using `div` if selector doesn't have tag name info).
|
|
30071
|
-
* * `elementInjector` (optional): An `ElementInjector` instance, see additional info about it
|
|
30072
|
-
*
|
|
30137
|
+
* * `elementInjector` (optional): An `ElementInjector` instance, see additional info about it
|
|
30138
|
+
* [here](/guide/hierarchical-dependency-injection#elementinjector).
|
|
30073
30139
|
* * `projectableNodes` (optional): A list of DOM nodes that should be projected through
|
|
30074
30140
|
* [`<ng-content>`](api/core/ng-content) of the new component instance.
|
|
30075
30141
|
* @returns ComponentRef instance that represents a given Component.
|
|
@@ -30198,5 +30264,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
|
30198
30264
|
* Generated bundle index. Do not edit.
|
|
30199
30265
|
*/
|
|
30200
30266
|
|
|
30201
|
-
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,
|
|
30267
|
+
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, 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, 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 };
|
|
30202
30268
|
//# sourceMappingURL=core.mjs.map
|