@angular/core 16.0.0-next.7 → 16.0.0-rc.1

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