@angular/core 16.2.0-rc.0 → 16.2.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/fesm2022/core.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v16.2.0-rc.0
2
+ * @license Angular v16.2.1
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -761,7 +761,7 @@ Please check that 1) the type for the parameter at index ${index} is correct and
761
761
  }
762
762
  /**
763
763
  * Injects a token from the currently active injector.
764
- * `inject` is only supported in a [injection context](/guide/dependency-injection-context). It can
764
+ * `inject` is only supported in an [injection context](/guide/dependency-injection-context). It can
765
765
  * be used during:
766
766
  * - Construction (via the `constructor`) of a class being instantiated by the DI system, such
767
767
  * as an `@Injectable` or `@Component`.
@@ -6937,7 +6937,7 @@ function createElementNode(renderer, name, namespace) {
6937
6937
  * @param tView The `TView' of the `LView` from which elements should be added or removed
6938
6938
  * @param lView The view from which elements should be added or removed
6939
6939
  */
6940
- function removeViewFromContainer(tView, lView) {
6940
+ function removeViewFromDOM(tView, lView) {
6941
6941
  const renderer = lView[RENDERER];
6942
6942
  applyView(tView, lView, renderer, 2 /* WalkTNodeTreeAction.Detach */, null, null);
6943
6943
  lView[HOST] = null;
@@ -6957,7 +6957,7 @@ function removeViewFromContainer(tView, lView) {
6957
6957
  * @param parentNativeNode The parent `RElement` where it should be inserted into.
6958
6958
  * @param beforeNode The node before which elements should be added, if insert mode
6959
6959
  */
6960
- function addViewToContainer(tView, parentTNode, renderer, lView, parentNativeNode, beforeNode) {
6960
+ function addViewToDOM(tView, parentTNode, renderer, lView, parentNativeNode, beforeNode) {
6961
6961
  lView[HOST] = parentNativeNode;
6962
6962
  lView[T_HOST] = parentTNode;
6963
6963
  applyView(tView, lView, renderer, 1 /* WalkTNodeTreeAction.Insert */, parentNativeNode, beforeNode);
@@ -6968,7 +6968,7 @@ function addViewToContainer(tView, parentTNode, renderer, lView, parentNativeNod
6968
6968
  * @param tView The `TView' of the `LView` to be detached
6969
6969
  * @param lView the `LView` to be detached.
6970
6970
  */
6971
- function renderDetachView(tView, lView) {
6971
+ function detachViewFromDOM(tView, lView) {
6972
6972
  applyView(tView, lView, lView[RENDERER], 2 /* WalkTNodeTreeAction.Detach */, null, null);
6973
6973
  }
6974
6974
  /**
@@ -7130,7 +7130,7 @@ function detachView(lContainer, removeIndex) {
7130
7130
  lContainer[indexInContainer - 1][NEXT] = viewToDetach[NEXT];
7131
7131
  }
7132
7132
  const removedLView = removeFromArray(lContainer, CONTAINER_HEADER_OFFSET + removeIndex);
7133
- removeViewFromContainer(viewToDetach[TVIEW], viewToDetach);
7133
+ removeViewFromDOM(viewToDetach[TVIEW], viewToDetach);
7134
7134
  // notify query that a view has been removed
7135
7135
  const lQueries = removedLView[QUERIES];
7136
7136
  if (lQueries !== null) {
@@ -9649,6 +9649,7 @@ const PLATFORM_ID = new InjectionToken('Platform ID', {
9649
9649
  * A [DI token](guide/glossary#di-token "DI token definition") that indicates the root directory of
9650
9650
  * the application
9651
9651
  * @publicApi
9652
+ * @deprecated
9652
9653
  */
9653
9654
  const PACKAGE_ROOT_URL = new InjectionToken('Application Packages Root URL');
9654
9655
  // We keep this token here, rather than the animations package, so that modules that only care
@@ -9869,6 +9870,10 @@ const NGH_DATA_KEY = makeStateKey(TRANSFER_STATE_TOKEN_ID);
9869
9870
  * state that contains the necessary hydration info for this component.
9870
9871
  */
9871
9872
  const NGH_ATTR_NAME = 'ngh';
9873
+ /**
9874
+ * Marker used in a comment node to ensure hydration content integrity
9875
+ */
9876
+ const SSR_CONTENT_INTEGRITY_MARKER = 'nghm';
9872
9877
  /**
9873
9878
  * Reference to a function that reads `ngh` attribute value from a given RNode
9874
9879
  * and retrieves hydration information from the TransferState using that value
@@ -9876,12 +9881,30 @@ const NGH_ATTR_NAME = 'ngh';
9876
9881
  *
9877
9882
  * @param rNode Component's host element.
9878
9883
  * @param injector Injector that this component has access to.
9884
+ * @param isRootView Specifies whether we trying to read hydration info for the root view.
9879
9885
  */
9880
- let _retrieveHydrationInfoImpl = (rNode, injector) => null;
9881
- function retrieveHydrationInfoImpl(rNode, injector) {
9882
- const nghAttrValue = rNode.getAttribute(NGH_ATTR_NAME);
9886
+ let _retrieveHydrationInfoImpl = (rNode, injector, isRootView) => null;
9887
+ function retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {
9888
+ let nghAttrValue = rNode.getAttribute(NGH_ATTR_NAME);
9883
9889
  if (nghAttrValue == null)
9884
9890
  return null;
9891
+ // For cases when a root component also acts as an anchor node for a ViewContainerRef
9892
+ // (for example, when ViewContainerRef is injected in a root component), there is a need
9893
+ // to serialize information about the component itself, as well as an LContainer that
9894
+ // represents this ViewContainerRef. Effectively, we need to serialize 2 pieces of info:
9895
+ // (1) hydration info for the root component itself and (2) hydration info for the
9896
+ // ViewContainerRef instance (an LContainer). Each piece of information is included into
9897
+ // the hydration data (in the TransferState object) separately, thus we end up with 2 ids.
9898
+ // Since we only have 1 root element, we encode both bits of info into a single string:
9899
+ // ids are separated by the `|` char (e.g. `10|25`, where `10` is the ngh for a component view
9900
+ // and 25 is the `ngh` for a root view which holds LContainer).
9901
+ const [componentViewNgh, rootViewNgh] = nghAttrValue.split('|');
9902
+ nghAttrValue = isRootView ? rootViewNgh : componentViewNgh;
9903
+ if (!nghAttrValue)
9904
+ return null;
9905
+ // We've read one of the ngh ids, keep the remaining one, so that
9906
+ // we can set it back on the DOM element.
9907
+ const remainingNgh = isRootView ? componentViewNgh : (rootViewNgh ? `|${rootViewNgh}` : '');
9885
9908
  let data = {};
9886
9909
  // An element might have an empty `ngh` attribute value (e.g. `<comp ngh="" />`),
9887
9910
  // which means that no special annotations are required. Do not attempt to read
@@ -9903,9 +9926,29 @@ function retrieveHydrationInfoImpl(rNode, injector) {
9903
9926
  data,
9904
9927
  firstChild: rNode.firstChild ?? null,
9905
9928
  };
9906
- // The `ngh` attribute is cleared from the DOM node now
9907
- // that the data has been retrieved.
9908
- rNode.removeAttribute(NGH_ATTR_NAME);
9929
+ if (isRootView) {
9930
+ // If there is hydration info present for the root view, it means that there was
9931
+ // a ViewContainerRef injected in the root component. The root component host element
9932
+ // acted as an anchor node in this scenario. As a result, the DOM nodes that represent
9933
+ // embedded views in this ViewContainerRef are located as siblings to the host node,
9934
+ // i.e. `<app-root /><#VIEW1><#VIEW2>...<!--container-->`. In this case, the current
9935
+ // node becomes the first child of this root view and the next sibling is the first
9936
+ // element in the DOM segment.
9937
+ dehydratedView.firstChild = rNode;
9938
+ // We use `0` here, since this is the slot (right after the HEADER_OFFSET)
9939
+ // where a component LView or an LContainer is located in a root LView.
9940
+ setSegmentHead(dehydratedView, 0, rNode.nextSibling);
9941
+ }
9942
+ if (remainingNgh) {
9943
+ // If we have only used one of the ngh ids, store the remaining one
9944
+ // back on this RNode.
9945
+ rNode.setAttribute(NGH_ATTR_NAME, remainingNgh);
9946
+ }
9947
+ else {
9948
+ // The `ngh` attribute is cleared from the DOM node now
9949
+ // that the data has been retrieved for all indices.
9950
+ rNode.removeAttribute(NGH_ATTR_NAME);
9951
+ }
9909
9952
  // Note: don't check whether this node was claimed for hydration,
9910
9953
  // because this node might've been previously claimed while processing
9911
9954
  // template instructions.
@@ -9923,14 +9966,16 @@ function enableRetrieveHydrationInfoImpl() {
9923
9966
  * Retrieves hydration info by reading the value from the `ngh` attribute
9924
9967
  * and accessing a corresponding slot in TransferState storage.
9925
9968
  */
9926
- function retrieveHydrationInfo(rNode, injector) {
9927
- return _retrieveHydrationInfoImpl(rNode, injector);
9969
+ function retrieveHydrationInfo(rNode, injector, isRootView = false) {
9970
+ return _retrieveHydrationInfoImpl(rNode, injector, isRootView);
9928
9971
  }
9929
9972
  /**
9930
- * Retrieves an instance of a component LView from a given ViewRef.
9931
- * Returns an instance of a component LView or `null` in case of an embedded view.
9973
+ * Retrieves the necessary object from a given ViewRef to serialize:
9974
+ * - an LView for component views
9975
+ * - an LContainer for cases when component acts as a ViewContainerRef anchor
9976
+ * - `null` in case of an embedded view
9932
9977
  */
9933
- function getComponentLViewForHydration(viewRef) {
9978
+ function getLNodeForHydration(viewRef) {
9934
9979
  // Reading an internal field from `ViewRef` instance.
9935
9980
  let lView = viewRef._lView;
9936
9981
  const tView = lView[TVIEW];
@@ -9944,12 +9989,6 @@ function getComponentLViewForHydration(viewRef) {
9944
9989
  if (isRootView(lView)) {
9945
9990
  lView = lView[HEADER_OFFSET];
9946
9991
  }
9947
- // If a `ViewContainerRef` was injected in a component class, this resulted
9948
- // in an LContainer creation at that location. In this case, the component
9949
- // LView is in the LContainer's `HOST` slot.
9950
- if (isLContainer(lView)) {
9951
- lView = lView[HOST];
9952
- }
9953
9992
  return lView;
9954
9993
  }
9955
9994
  function getTextNodeContent(node) {
@@ -10252,7 +10291,7 @@ class Version {
10252
10291
  /**
10253
10292
  * @publicApi
10254
10293
  */
10255
- const VERSION = new Version('16.2.0-rc.0');
10294
+ const VERSION = new Version('16.2.1');
10256
10295
 
10257
10296
  // This default value is when checking the hierarchy for a token.
10258
10297
  //
@@ -13293,7 +13332,7 @@ class ViewRef$1 {
13293
13332
  }
13294
13333
  detachFromAppRef() {
13295
13334
  this._appRef = null;
13296
- renderDetachView(this._lView[TVIEW], this._lView);
13335
+ detachViewFromDOM(this._lView[TVIEW], this._lView);
13297
13336
  }
13298
13337
  attachToAppRef(appRef) {
13299
13338
  if (this._attachedToViewContainer) {
@@ -13452,9 +13491,13 @@ class ComponentFactory extends ComponentFactory$1 {
13452
13491
  const nonSignalFlags = this.componentDef.onPush ? 64 /* LViewFlags.Dirty */ | 512 /* LViewFlags.IsRoot */ :
13453
13492
  16 /* LViewFlags.CheckAlways */ | 512 /* LViewFlags.IsRoot */;
13454
13493
  const rootFlags = this.componentDef.signals ? signalFlags : nonSignalFlags;
13494
+ let hydrationInfo = null;
13495
+ if (hostRNode !== null) {
13496
+ hydrationInfo = retrieveHydrationInfo(hostRNode, rootViewInjector, true /* isRootView */);
13497
+ }
13455
13498
  // Create the root view. Uses empty TView and ContentTemplate.
13456
13499
  const rootTView = createTView(0 /* TViewType.Root */, null, null, 1, 0, null, null, null, null, null, null);
13457
- const rootLView = createLView(null, rootTView, null, rootFlags, null, null, environment, hostRenderer, rootViewInjector, null, null);
13500
+ const rootLView = createLView(null, rootTView, null, rootFlags, null, null, environment, hostRenderer, rootViewInjector, null, hydrationInfo);
13458
13501
  // rootView is the parent when bootstrapping
13459
13502
  // TODO(misko): it looks like we are entering view here but we don't really need to as
13460
13503
  // `renderView` does that. However as the code is written it is needed because
@@ -13581,7 +13624,7 @@ function createRootComponentTNode(lView, rNode) {
13581
13624
  function createRootComponentView(tNode, hostRNode, rootComponentDef, rootDirectives, rootView, environment, hostRenderer) {
13582
13625
  const tView = rootView[TVIEW];
13583
13626
  applyRootComponentStyling(rootDirectives, tNode, hostRNode, hostRenderer);
13584
- // Hydration info is on the host element and needs to be retreived
13627
+ // Hydration info is on the host element and needs to be retrieved
13585
13628
  // and passed to the component LView.
13586
13629
  let hydrationInfo = null;
13587
13630
  if (hostRNode !== null) {
@@ -23364,6 +23407,57 @@ class QueryList {
23364
23407
  }
23365
23408
  }
23366
23409
 
23410
+ function createAndRenderEmbeddedLView(declarationLView, templateTNode, context, options) {
23411
+ const embeddedTView = templateTNode.tView;
23412
+ ngDevMode && assertDefined(embeddedTView, 'TView must be defined for a template node.');
23413
+ ngDevMode && assertTNodeForLView(templateTNode, declarationLView);
23414
+ // Embedded views follow the change detection strategy of the view they're declared in.
23415
+ const isSignalView = declarationLView[FLAGS] & 4096 /* LViewFlags.SignalView */;
23416
+ const viewFlags = isSignalView ? 4096 /* LViewFlags.SignalView */ : 16 /* LViewFlags.CheckAlways */;
23417
+ const embeddedLView = createLView(declarationLView, embeddedTView, context, viewFlags, null, templateTNode, null, null, null, options?.injector ?? null, options?.hydrationInfo ?? null);
23418
+ const declarationLContainer = declarationLView[templateTNode.index];
23419
+ ngDevMode && assertLContainer(declarationLContainer);
23420
+ embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;
23421
+ const declarationViewLQueries = declarationLView[QUERIES];
23422
+ if (declarationViewLQueries !== null) {
23423
+ embeddedLView[QUERIES] = declarationViewLQueries.createEmbeddedView(embeddedTView);
23424
+ }
23425
+ // execute creation mode of a view
23426
+ renderView(embeddedTView, embeddedLView, context);
23427
+ return embeddedLView;
23428
+ }
23429
+ function getLViewFromLContainer(lContainer, index) {
23430
+ const adjustedIndex = CONTAINER_HEADER_OFFSET + index;
23431
+ // avoid reading past the array boundaries
23432
+ if (adjustedIndex < lContainer.length) {
23433
+ const lView = lContainer[adjustedIndex];
23434
+ ngDevMode && assertLView(lView);
23435
+ return lView;
23436
+ }
23437
+ return undefined;
23438
+ }
23439
+ function addLViewToLContainer(lContainer, lView, index, addToDOM = true) {
23440
+ const tView = lView[TVIEW];
23441
+ // insert to the view tree so the new view can be change-detected
23442
+ insertView(tView, lView, lContainer, index);
23443
+ // insert to the view to the DOM tree
23444
+ if (addToDOM) {
23445
+ const beforeNode = getBeforeNodeForView(index, lContainer);
23446
+ const renderer = lView[RENDERER];
23447
+ const parentRNode = nativeParentNode(renderer, lContainer[NATIVE]);
23448
+ if (parentRNode !== null) {
23449
+ addViewToDOM(tView, lContainer[T_HOST], renderer, lView, parentRNode, beforeNode);
23450
+ }
23451
+ }
23452
+ }
23453
+ function removeLViewFromLContainer(lContainer, index) {
23454
+ const lView = detachView(lContainer, index);
23455
+ if (lView !== undefined) {
23456
+ destroyLView(lView[TVIEW], lView);
23457
+ }
23458
+ return lView;
23459
+ }
23460
+
23367
23461
  /**
23368
23462
  * Represents an embedded template that can be used to instantiate embedded views.
23369
23463
  * To instantiate embedded views based on a template, use the `ViewContainerRef`
@@ -23409,25 +23503,13 @@ const R3TemplateRef = class TemplateRef extends ViewEngineTemplateRef {
23409
23503
  return this._declarationTContainer.tView?.ssrId || null;
23410
23504
  }
23411
23505
  createEmbeddedView(context, injector) {
23412
- return this.createEmbeddedViewImpl(context, injector, null);
23506
+ return this.createEmbeddedViewImpl(context, injector);
23413
23507
  }
23414
23508
  /**
23415
23509
  * @internal
23416
23510
  */
23417
23511
  createEmbeddedViewImpl(context, injector, hydrationInfo) {
23418
- // Embedded views follow the change detection strategy of the view they're declared in.
23419
- const isSignalView = this._declarationLView[FLAGS] & 4096 /* LViewFlags.SignalView */;
23420
- const viewFlags = isSignalView ? 4096 /* LViewFlags.SignalView */ : 16 /* LViewFlags.CheckAlways */;
23421
- const embeddedTView = this._declarationTContainer.tView;
23422
- const embeddedLView = createLView(this._declarationLView, embeddedTView, context, viewFlags, null, embeddedTView.declTNode, null, null, null, injector || null, hydrationInfo || null);
23423
- const declarationLContainer = this._declarationLView[this._declarationTContainer.index];
23424
- ngDevMode && assertLContainer(declarationLContainer);
23425
- embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;
23426
- const declarationViewLQueries = this._declarationLView[QUERIES];
23427
- if (declarationViewLQueries !== null) {
23428
- embeddedLView[QUERIES] = declarationViewLQueries.createEmbeddedView(embeddedTView);
23429
- }
23430
- renderView(embeddedTView, embeddedLView, context);
23512
+ const embeddedLView = createAndRenderEmbeddedLView(this._declarationLView, this._declarationTContainer, context, { injector, hydrationInfo });
23431
23513
  return new ViewRef$1(embeddedLView);
23432
23514
  }
23433
23515
  };
@@ -23524,11 +23606,20 @@ function cleanupLView(lView) {
23524
23606
  function cleanupDehydratedViews(appRef) {
23525
23607
  const viewRefs = appRef._views;
23526
23608
  for (const viewRef of viewRefs) {
23527
- const lView = getComponentLViewForHydration(viewRef);
23609
+ const lNode = getLNodeForHydration(viewRef);
23528
23610
  // An `lView` might be `null` if a `ViewRef` represents
23529
23611
  // an embedded view (not a component view).
23530
- if (lView !== null && lView[HOST] !== null) {
23531
- cleanupLView(lView);
23612
+ if (lNode !== null && lNode[HOST] !== null) {
23613
+ if (isLView(lNode)) {
23614
+ cleanupLView(lNode);
23615
+ }
23616
+ else {
23617
+ // Cleanup in the root component view
23618
+ const componentLView = lNode[HOST];
23619
+ cleanupLView(componentLView);
23620
+ // Cleanup in all views within this view container
23621
+ cleanupLContainer(lNode);
23622
+ }
23532
23623
  ngDevMode && ngDevMode.dehydratedViewsCleanupRuns++;
23533
23624
  }
23534
23625
  }
@@ -23810,16 +23901,7 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
23810
23901
  // Logical operation of adding `LView` to `LContainer`
23811
23902
  const adjustedIdx = this._adjustIndex(index);
23812
23903
  const lContainer = this._lContainer;
23813
- insertView(tView, lView, lContainer, adjustedIdx);
23814
- // Physical operation of adding the DOM nodes.
23815
- if (!skipDomInsertion) {
23816
- const beforeNode = getBeforeNodeForView(adjustedIdx, lContainer);
23817
- const renderer = lView[RENDERER];
23818
- const parentRNode = nativeParentNode(renderer, lContainer[NATIVE]);
23819
- if (parentRNode !== null) {
23820
- addViewToContainer(tView, lContainer[T_HOST], renderer, lView, parentRNode, beforeNode);
23821
- }
23822
- }
23904
+ addLViewToLContainer(lContainer, lView, adjustedIdx, !skipDomInsertion);
23823
23905
  viewRef.attachToViewContainerRef();
23824
23906
  addToArray(getOrCreateViewRefs(lContainer), adjustedIdx, viewRef);
23825
23907
  return viewRef;
@@ -30639,6 +30721,47 @@ function calcNumRootNodes(tView, lView, tNode) {
30639
30721
  collectNativeNodes(tView, lView, tNode, rootNodes);
30640
30722
  return rootNodes.length;
30641
30723
  }
30724
+ /**
30725
+ * Annotates root level component's LView for hydration,
30726
+ * see `annotateHostElementForHydration` for additional information.
30727
+ */
30728
+ function annotateComponentLViewForHydration(lView, context) {
30729
+ const hostElement = lView[HOST];
30730
+ // Root elements might also be annotated with the `ngSkipHydration` attribute,
30731
+ // check if it's present before starting the serialization process.
30732
+ if (hostElement && !hostElement.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {
30733
+ return annotateHostElementForHydration(hostElement, lView, context);
30734
+ }
30735
+ return null;
30736
+ }
30737
+ /**
30738
+ * Annotates root level LContainer for hydration. This happens when a root component
30739
+ * injects ViewContainerRef, thus making the component an anchor for a view container.
30740
+ * This function serializes the component itself as well as all views from the view
30741
+ * container.
30742
+ */
30743
+ function annotateLContainerForHydration(lContainer, context) {
30744
+ const componentLView = lContainer[HOST];
30745
+ // Serialize the root component itself.
30746
+ const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context);
30747
+ const hostElement = unwrapRNode(componentLView[HOST]);
30748
+ // Serialize all views within this view container.
30749
+ const rootLView = lContainer[PARENT];
30750
+ const rootLViewNghIndex = annotateHostElementForHydration(hostElement, rootLView, context);
30751
+ const renderer = componentLView[RENDERER];
30752
+ // For cases when a root component also acts as an anchor node for a ViewContainerRef
30753
+ // (for example, when ViewContainerRef is injected in a root component), there is a need
30754
+ // to serialize information about the component itself, as well as an LContainer that
30755
+ // represents this ViewContainerRef. Effectively, we need to serialize 2 pieces of info:
30756
+ // (1) hydration info for the root component itself and (2) hydration info for the
30757
+ // ViewContainerRef instance (an LContainer). Each piece of information is included into
30758
+ // the hydration data (in the TransferState object) separately, thus we end up with 2 ids.
30759
+ // Since we only have 1 root element, we encode both bits of info into a single string:
30760
+ // ids are separated by the `|` char (e.g. `10|25`, where `10` is the ngh for a component view
30761
+ // and 25 is the `ngh` for a root view which holds LContainer).
30762
+ const finalIndex = `${componentLViewNghIndex}|${rootLViewNghIndex}`;
30763
+ renderer.setAttribute(hostElement, NGH_ATTR_NAME, finalIndex);
30764
+ }
30642
30765
  /**
30643
30766
  * Annotates all components bootstrapped in a given ApplicationRef
30644
30767
  * with info needed for hydration.
@@ -30651,21 +30774,21 @@ function annotateForHydration(appRef, doc) {
30651
30774
  const corruptedTextNodes = new Map();
30652
30775
  const viewRefs = appRef._views;
30653
30776
  for (const viewRef of viewRefs) {
30654
- const lView = getComponentLViewForHydration(viewRef);
30777
+ const lNode = getLNodeForHydration(viewRef);
30655
30778
  // An `lView` might be `null` if a `ViewRef` represents
30656
30779
  // an embedded view (not a component view).
30657
- if (lView !== null) {
30658
- const hostElement = lView[HOST];
30659
- // Root elements might also be annotated with the `ngSkipHydration` attribute,
30660
- // check if it's present before starting the serialization process.
30661
- if (hostElement && !hostElement.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {
30662
- const context = {
30663
- serializedViewCollection,
30664
- corruptedTextNodes,
30665
- };
30666
- annotateHostElementForHydration(hostElement, lView, context);
30667
- insertCorruptedTextNodeMarkers(corruptedTextNodes, doc);
30780
+ if (lNode !== null) {
30781
+ const context = {
30782
+ serializedViewCollection,
30783
+ corruptedTextNodes,
30784
+ };
30785
+ if (isLContainer(lNode)) {
30786
+ annotateLContainerForHydration(lNode, context);
30668
30787
  }
30788
+ else {
30789
+ annotateComponentLViewForHydration(lNode, context);
30790
+ }
30791
+ insertCorruptedTextNodeMarkers(corruptedTextNodes, doc);
30669
30792
  }
30670
30793
  }
30671
30794
  // Note: we *always* include hydration info key and a corresponding value
@@ -30946,6 +31069,8 @@ function componentUsesShadowDomEncapsulation(lView) {
30946
31069
  * @param element The Host element to be annotated
30947
31070
  * @param lView The associated LView
30948
31071
  * @param context The hydration context
31072
+ * @returns An index of serialized view from the transfer state object
31073
+ * or `null` when a given component can not be serialized.
30949
31074
  */
30950
31075
  function annotateHostElementForHydration(element, lView, context) {
30951
31076
  const renderer = lView[RENDERER];
@@ -30956,11 +31081,13 @@ function annotateHostElementForHydration(element, lView, context) {
30956
31081
  // shadow DOM, so we can not guarantee that client and server representations
30957
31082
  // would exactly match
30958
31083
  renderer.setAttribute(element, SKIP_HYDRATION_ATTR_NAME, '');
31084
+ return null;
30959
31085
  }
30960
31086
  else {
30961
31087
  const ngh = serializeLView(lView, context);
30962
31088
  const index = context.serializedViewCollection.add(ngh);
30963
31089
  renderer.setAttribute(element, NGH_ATTR_NAME, index.toString());
31090
+ return index;
30964
31091
  }
30965
31092
  }
30966
31093
  /**
@@ -31114,10 +31241,11 @@ function withDomHydration() {
31114
31241
  useValue: () => {
31115
31242
  // Since this function is used across both server and client,
31116
31243
  // make sure that the runtime code is only added when invoked
31117
- // on the client. Moving forward, the `isBrowser` check should
31244
+ // on the client. Moving forward, the `isPlatformBrowser` check should
31118
31245
  // be replaced with a tree-shakable alternative (e.g. `isServer`
31119
31246
  // flag).
31120
31247
  if (isPlatformBrowser() && inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
31248
+ verifySsrContentsIntegrity();
31121
31249
  enableHydrationRuntimeSupport();
31122
31250
  }
31123
31251
  },
@@ -31140,11 +31268,15 @@ function withDomHydration() {
31140
31268
  const appRef = inject(ApplicationRef);
31141
31269
  const injector = inject(Injector);
31142
31270
  return () => {
31271
+ // Wait until an app becomes stable and cleanup all views that
31272
+ // were not claimed during the application bootstrap process.
31273
+ // The timing is similar to when we start the serialization process
31274
+ // on the server.
31275
+ //
31276
+ // Note: the cleanup task *MUST* be scheduled within the Angular zone
31277
+ // to ensure that change detection is properly run afterward.
31143
31278
  whenStable(appRef, injector).then(() => {
31144
- // Wait until an app becomes stable and cleanup all views that
31145
- // were not claimed during the application bootstrap process.
31146
- // The timing is similar to when we start the serialization process
31147
- // on the server.
31279
+ NgZone.assertInAngularZone();
31148
31280
  cleanupDehydratedViews(appRef);
31149
31281
  if (typeof ngDevMode !== 'undefined' && ngDevMode) {
31150
31282
  printHydrationStats(injector);
@@ -31168,6 +31300,34 @@ function logWarningOnStableTimedout(time, console) {
31168
31300
  `as a signal to complete hydration process.`;
31169
31301
  console.warn(formatRuntimeError(-506 /* RuntimeErrorCode.HYDRATION_STABLE_TIMEDOUT */, message));
31170
31302
  }
31303
+ /**
31304
+ * Verifies whether the DOM contains a special marker added during SSR time to make sure
31305
+ * there is no SSR'ed contents transformations happen after SSR is completed. Typically that
31306
+ * happens either by CDN or during the build process as an optimization to remove comment nodes.
31307
+ * Hydration process requires comment nodes produced by Angular to locate correct DOM segments.
31308
+ * When this special marker is *not* present - throw an error and do not proceed with hydration,
31309
+ * since it will not be able to function correctly.
31310
+ *
31311
+ * Note: this function is invoked only on the client, so it's safe to use DOM APIs.
31312
+ */
31313
+ function verifySsrContentsIntegrity() {
31314
+ const doc = getDocument();
31315
+ let hydrationMarker;
31316
+ for (const node of doc.body.childNodes) {
31317
+ if (node.nodeType === Node.COMMENT_NODE &&
31318
+ node.textContent?.trim() === SSR_CONTENT_INTEGRITY_MARKER) {
31319
+ hydrationMarker = node;
31320
+ break;
31321
+ }
31322
+ }
31323
+ if (!hydrationMarker) {
31324
+ throw new RuntimeError(-507 /* RuntimeErrorCode.MISSING_SSR_CONTENT_INTEGRITY_MARKER */, typeof ngDevMode !== 'undefined' && ngDevMode &&
31325
+ 'Angular hydration logic detected that HTML content of this page was modified after it ' +
31326
+ 'was produced during server side rendering. Make sure that there are no optimizations ' +
31327
+ 'that remove comment nodes from HTML enabled on your CDN. Angular hydration ' +
31328
+ 'relies on HTML produced by the server, including whitespaces and comment nodes.');
31329
+ }
31330
+ }
31171
31331
 
31172
31332
  /**
31173
31333
  * Transforms a value (typically a string) to a boolean.
@@ -31487,5 +31647,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
31487
31647
  * Generated bundle index. Do not edit.
31488
31648
  */
31489
31649
 
31490
- 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, afterNextRender, afterRender, asNativeElements, assertInInjectionContext, assertPlatform, booleanAttribute, computed, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, numberAttribute, platformCore, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderEventManager as ɵAfterRenderEventManager, 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, 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, setInjectorProfilerContext as ɵsetInjectorProfilerContext, 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, ɵɵInputTransformsFeature, ɵɵ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, ɵɵdefer, ɵɵ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 };
31650
+ 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, afterNextRender, afterRender, asNativeElements, assertInInjectionContext, assertPlatform, booleanAttribute, computed, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, numberAttribute, platformCore, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderEventManager as ɵAfterRenderEventManager, 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, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, 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, 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, setInjectorProfilerContext as ɵsetInjectorProfilerContext, 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, ɵɵInputTransformsFeature, ɵɵ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, ɵɵdefer, ɵɵ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 };
31491
31651
  //# sourceMappingURL=core.mjs.map