@angular/core 19.1.0-next.3 → 19.1.0-next.4

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 (32) hide show
  1. package/fesm2022/core.mjs +329 -107
  2. package/fesm2022/core.mjs.map +1 -1
  3. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  4. package/fesm2022/primitives/signals.mjs +1 -1
  5. package/fesm2022/rxjs-interop.mjs +1 -1
  6. package/fesm2022/testing.mjs +4 -4
  7. package/index.d.ts +153 -7
  8. package/package.json +1 -1
  9. package/primitives/event-dispatch/index.d.ts +1 -1
  10. package/primitives/signals/index.d.ts +1 -1
  11. package/rxjs-interop/index.d.ts +1 -1
  12. package/schematics/bundles/{checker-228cb8a8.js → checker-884633eb.js} +45 -21
  13. package/schematics/bundles/{combine_units-5d6a7099.js → combine_units-4a95b1b9.js} +3 -3
  14. package/schematics/bundles/{compiler_host-fc806dbe.js → compiler_host-22f6513d.js} +2 -2
  15. package/schematics/bundles/control-flow-migration.js +3 -3
  16. package/schematics/bundles/explicit-standalone-flag.js +3 -3
  17. package/schematics/bundles/imports-abe29092.js +1 -1
  18. package/schematics/bundles/inject-migration.js +3 -3
  19. package/schematics/bundles/leading_space-d190b83b.js +1 -1
  20. package/schematics/bundles/{migrate_ts_type_references-d02c6750.js → migrate_ts_type_references-4b11f3f2.js} +4 -4
  21. package/schematics/bundles/nodes-a9f0b985.js +1 -1
  22. package/schematics/bundles/output-migration.js +4 -4
  23. package/schematics/bundles/pending-tasks.js +3 -3
  24. package/schematics/bundles/{program-1591ec8f.js → program-094352ba.js} +11 -11
  25. package/schematics/bundles/project_tsconfig_paths-e9ccccbf.js +1 -1
  26. package/schematics/bundles/provide-initializer.js +3 -3
  27. package/schematics/bundles/route-lazy-loading.js +3 -3
  28. package/schematics/bundles/signal-input-migration.js +5 -5
  29. package/schematics/bundles/signal-queries-migration.js +5 -5
  30. package/schematics/bundles/signals.js +5 -5
  31. package/schematics/bundles/standalone-migration.js +5 -5
  32. package/testing/index.d.ts +1 -1
package/fesm2022/core.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v19.1.0-next.3
2
+ * @license Angular v19.1.0-next.4
3
3
  * (c) 2010-2024 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -273,6 +273,7 @@ function ngDevModeResetPerfCounters() {
273
273
  dehydratedViewsRemoved: 0,
274
274
  dehydratedViewsCleanupRuns: 0,
275
275
  componentsSkippedHydration: 0,
276
+ deferBlocksWithIncrementalHydration: 0,
276
277
  };
277
278
  // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.
278
279
  const allowNgDevModeTrue = locationString.indexOf('ngDevMode=false') === -1;
@@ -6516,7 +6517,7 @@ class NgZone {
6516
6517
  * Executes the `fn` function synchronously within the Angular zone as a task and returns value
6517
6518
  * returned by the function.
6518
6519
  *
6519
- * Running functions via `run` allows you to reenter Angular zone from a task that was executed
6520
+ * Running functions via `runTask` allows you to reenter Angular zone from a task that was executed
6520
6521
  * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
6521
6522
  *
6522
6523
  * Any future tasks or microtasks scheduled from within this function will continue executing from
@@ -9103,6 +9104,18 @@ function isDeferBlock(tView, tNode) {
9103
9104
  }
9104
9105
  return !!tDetails && isTDeferBlockDetails(tDetails);
9105
9106
  }
9107
+ /**
9108
+ * Tracks debugging information about a trigger.
9109
+ * @param tView TView in which the trigger is declared.
9110
+ * @param tNode TNode on which the trigger is declared.
9111
+ * @param textRepresentation Text representation of the trigger to be used for debugging purposes.
9112
+ */
9113
+ function trackTriggerForDebugging(tView, tNode, textRepresentation) {
9114
+ const tDetails = getTDeferBlockDetails(tView, tNode);
9115
+ tDetails.debug ??= {};
9116
+ tDetails.debug.triggers ??= new Set();
9117
+ tDetails.debug.triggers.add(textRepresentation);
9118
+ }
9106
9119
 
9107
9120
  /*!
9108
9121
  * @license
@@ -9557,7 +9570,6 @@ function retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {
9557
9570
  const rootNgh = rootViewNgh ? `|${rootViewNgh}` : '';
9558
9571
  const remainingNgh = isRootView ? componentViewNgh : rootNgh;
9559
9572
  let data = {};
9560
- let nghDeferData;
9561
9573
  // An element might have an empty `ngh` attribute value (e.g. `<comp ngh="" />`),
9562
9574
  // which means that no special annotations are required. Do not attempt to read
9563
9575
  // from the TransferState in this case.
@@ -9565,7 +9577,6 @@ function retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {
9565
9577
  const transferState = injector.get(TransferState, null, { optional: true });
9566
9578
  if (transferState !== null) {
9567
9579
  const nghData = transferState.get(NGH_DATA_KEY, []);
9568
- nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});
9569
9580
  // The nghAttrValue is always a number referencing an index
9570
9581
  // in the hydration TransferState data.
9571
9582
  data = nghData[Number(nghAttrValue)];
@@ -9725,6 +9736,13 @@ function markRNodeAsSkippedByHydration(node) {
9725
9736
  patchHydrationInfo(node, { status: HydrationStatus.Skipped });
9726
9737
  ngDevMode.componentsSkippedHydration++;
9727
9738
  }
9739
+ function countBlocksSkippedByHydration(injector) {
9740
+ const transferState = injector.get(TransferState);
9741
+ const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});
9742
+ if (ngDevMode) {
9743
+ ngDevMode.deferBlocksWithIncrementalHydration = Object.keys(nghDeferData).length;
9744
+ }
9745
+ }
9728
9746
  function markRNodeAsHavingHydrationMismatch(node, expectedNodeDetails = null, actualNodeDetails = null) {
9729
9747
  if (!ngDevMode) {
9730
9748
  throw new Error('Calling `markRNodeAsMismatchedByHydration` in prod mode ' +
@@ -16633,11 +16651,15 @@ function gatherDeferBlocksCommentNodes(doc, node) {
16633
16651
  let currentNode;
16634
16652
  const nodesByBlockId = new Map();
16635
16653
  while ((currentNode = commentNodesIterator.nextNode())) {
16636
- // TODO(incremental-hydration: convert this to use string parsing rather than regex
16637
- const regex = new RegExp(/^\s*ngh=(d[0-9]+)/g);
16638
- const result = regex.exec(currentNode?.textContent ?? '');
16639
- if (result && result?.length > 0) {
16640
- nodesByBlockId.set(result[1], currentNode);
16654
+ const nghPattern = 'ngh=';
16655
+ const content = currentNode?.textContent;
16656
+ const nghIdx = content?.indexOf(nghPattern) ?? -1;
16657
+ if (nghIdx > -1) {
16658
+ const nghValue = content.substring(nghIdx + nghPattern.length).trim();
16659
+ // Make sure the value has an expected format.
16660
+ ngDevMode &&
16661
+ assertEqual(nghValue.startsWith('d'), true, 'Invalid defer block id found in a comment node.');
16662
+ nodesByBlockId.set(nghValue, currentNode);
16641
16663
  }
16642
16664
  }
16643
16665
  return nodesByBlockId;
@@ -18088,7 +18110,7 @@ function createRootComponent(componentView, rootComponentDef, rootDirectives, ho
18088
18110
  function setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {
18089
18111
  if (rootSelectorOrNode) {
18090
18112
  // The placeholder will be replaced with the actual version at build time.
18091
- setUpAttributes(hostRenderer, hostRNode, ['ng-version', '19.1.0-next.3']);
18113
+ setUpAttributes(hostRenderer, hostRNode, ['ng-version', '19.1.0-next.4']);
18092
18114
  }
18093
18115
  else {
18094
18116
  // If host element is created as a part of this function call (i.e. `rootSelectorOrNode`
@@ -21285,15 +21307,8 @@ function renderDeferBlockState(newState, tNode, lContainer, skipTimerScheduling
21285
21307
  }
21286
21308
  }
21287
21309
  function findMatchingDehydratedViewForDeferBlock(lContainer, lDetails) {
21288
- // TODO(incremental-hydration): extract into a separate util function and use in relevant places.
21289
- const views = lContainer[DEHYDRATED_VIEWS];
21290
- if (views === null || views.length === 0) {
21291
- return null;
21292
- }
21293
21310
  // Find matching view based on serialized defer block state.
21294
- // TODO(incremental-hydration): reconcile this logic with the regular logic that looks up
21295
- // dehydrated views to see if there is anything missing in this function.
21296
- return (views.find((view) => view.data[DEFER_BLOCK_STATE$1] === lDetails[DEFER_BLOCK_STATE]) ?? null);
21311
+ return (lContainer[DEHYDRATED_VIEWS]?.find((view) => view.data[DEFER_BLOCK_STATE$1] === lDetails[DEFER_BLOCK_STATE]) ?? null);
21297
21312
  }
21298
21313
  /**
21299
21314
  * Applies changes to the DOM to reflect a given state.
@@ -21325,30 +21340,22 @@ function applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView)
21325
21340
  }
21326
21341
  }
21327
21342
  const dehydratedView = findMatchingDehydratedViewForDeferBlock(lContainer, lDetails);
21328
- // Render either when we don't have dehydrated views at all (e.g. client rendering)
21329
- // or when dehydrated view is found (in which case we hydrate).
21330
- // Otherwise, do nothing, since we'd end up erasing SSR'ed content.
21331
- // TODO(incremental-hydration): Use the util function for checking dehydrated views mentioned above
21332
- const isClientOnly = lContainer[DEHYDRATED_VIEWS] === null || lContainer[DEHYDRATED_VIEWS].length === 0;
21333
- if (isClientOnly || dehydratedView) {
21334
- // Erase dehydrated view info, so that it's not removed later
21335
- // by post-hydration cleanup process.
21336
- // TODO(incremental-hydration): we need a better mechanism here.
21337
- lContainer[DEHYDRATED_VIEWS] = null;
21338
- const embeddedLView = createAndRenderEmbeddedLView(hostLView, activeBlockTNode, null, {
21339
- injector,
21340
- dehydratedView,
21341
- });
21342
- addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(activeBlockTNode, dehydratedView));
21343
- markViewDirty(embeddedLView, 2 /* NotificationSource.DeferBlockStateUpdate */);
21344
- }
21343
+ // Erase dehydrated view info, so that it's not removed later
21344
+ // by post-hydration cleanup process.
21345
+ lContainer[DEHYDRATED_VIEWS] = null;
21346
+ const embeddedLView = createAndRenderEmbeddedLView(hostLView, activeBlockTNode, null, {
21347
+ injector,
21348
+ dehydratedView,
21349
+ });
21350
+ addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(activeBlockTNode, dehydratedView));
21351
+ markViewDirty(embeddedLView, 2 /* NotificationSource.DeferBlockStateUpdate */);
21345
21352
  // TODO(incremental-hydration):
21346
21353
  // - what if we had some views in `lContainer[DEHYDRATED_VIEWS]`, but
21347
21354
  // we didn't find a view that matches the expected state?
21348
21355
  // - for example, handle a situation when a block was in the "completed" state
21349
21356
  // on the server, but the loading failing on the client. How do we reconcile and cleanup?
21350
- // TODO(incremental-hydration): should we also invoke if newState === DeferBlockState.Error?
21351
- if (newState === DeferBlockState.Complete && Array.isArray(lDetails[ON_COMPLETE_FNS])) {
21357
+ if ((newState === DeferBlockState.Complete || newState === DeferBlockState.Error) &&
21358
+ Array.isArray(lDetails[ON_COMPLETE_FNS])) {
21352
21359
  for (const callback of lDetails[ON_COMPLETE_FNS]) {
21353
21360
  callback();
21354
21361
  }
@@ -21869,6 +21876,162 @@ function detectChanges(component) {
21869
21876
  detectChangesInternal(view);
21870
21877
  }
21871
21878
 
21879
+ /**
21880
+ * Retrieves all defer blocks in a given LView.
21881
+ *
21882
+ * @param lView lView with defer blocks
21883
+ * @param deferBlocks defer block aggregator array
21884
+ */
21885
+ function getDeferBlocks$1(lView, deferBlocks) {
21886
+ const tView = lView[TVIEW];
21887
+ for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
21888
+ if (isLContainer(lView[i])) {
21889
+ const lContainer = lView[i];
21890
+ // An LContainer may represent an instance of a defer block, in which case
21891
+ // we store it as a result. Otherwise, keep iterating over LContainer views and
21892
+ // look for defer blocks.
21893
+ const isLast = i === tView.bindingStartIndex - 1;
21894
+ if (!isLast) {
21895
+ const tNode = tView.data[i];
21896
+ const tDetails = getTDeferBlockDetails(tView, tNode);
21897
+ if (isTDeferBlockDetails(tDetails)) {
21898
+ deferBlocks.push({ lContainer, lView, tNode, tDetails });
21899
+ // This LContainer represents a defer block, so we exit
21900
+ // this iteration and don't inspect views in this LContainer.
21901
+ continue;
21902
+ }
21903
+ }
21904
+ for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
21905
+ getDeferBlocks$1(lContainer[i], deferBlocks);
21906
+ }
21907
+ }
21908
+ else if (isLView(lView[i])) {
21909
+ // This is a component, enter the `getDeferBlocks` recursively.
21910
+ getDeferBlocks$1(lView[i], deferBlocks);
21911
+ }
21912
+ }
21913
+ }
21914
+
21915
+ /*!
21916
+ * @license
21917
+ * Copyright Google LLC All Rights Reserved.
21918
+ *
21919
+ * Use of this source code is governed by an MIT-style license that can be
21920
+ * found in the LICENSE file at https://angular.dev/license
21921
+ */
21922
+ /**
21923
+ * Gets all of the `@defer` blocks that are present inside the specified DOM node.
21924
+ * @param node Node in which to look for `@defer` blocks.
21925
+ *
21926
+ * @publicApi
21927
+ */
21928
+ function getDeferBlocks(node) {
21929
+ const results = [];
21930
+ const lView = getLContext(node)?.lView;
21931
+ if (lView) {
21932
+ findDeferBlocks(node, lView, results);
21933
+ }
21934
+ return results;
21935
+ }
21936
+ /**
21937
+ * Finds all the `@defer` blocks inside a specific node and view.
21938
+ * @param node Node in which to search for blocks.
21939
+ * @param lView View within the node in which to search for blocks.
21940
+ * @param results Array to which to add blocks once they're found.
21941
+ */
21942
+ function findDeferBlocks(node, lView, results) {
21943
+ const registry = lView[INJECTOR].get(DEHYDRATED_BLOCK_REGISTRY, null, { optional: true });
21944
+ const blocks = [];
21945
+ getDeferBlocks$1(lView, blocks);
21946
+ for (const details of blocks) {
21947
+ const native = getNativeByTNode(details.tNode, details.lView);
21948
+ const lDetails = getLDeferBlockDetails(details.lView, details.tNode);
21949
+ // The LView from `getLContext` might be the view the element is placed in.
21950
+ // Filter out defer blocks that aren't inside the specified root node.
21951
+ if (!node.contains(native)) {
21952
+ continue;
21953
+ }
21954
+ const tDetails = details.tDetails;
21955
+ const renderedLView = getRendererLView(details);
21956
+ const rootNodes = [];
21957
+ if (renderedLView !== null) {
21958
+ collectNativeNodes(renderedLView[TVIEW], renderedLView, renderedLView[TVIEW].firstChild, rootNodes);
21959
+ }
21960
+ const data = {
21961
+ state: stringifyState(lDetails[DEFER_BLOCK_STATE]),
21962
+ incrementalHydrationState: inferHydrationState(tDetails, lDetails, registry),
21963
+ hasErrorBlock: tDetails.errorTmplIndex !== null,
21964
+ loadingBlock: {
21965
+ exists: tDetails.loadingTmplIndex !== null,
21966
+ minimumTime: tDetails.loadingBlockConfig?.[MINIMUM_SLOT] ?? null,
21967
+ afterTime: tDetails.loadingBlockConfig?.[LOADING_AFTER_SLOT] ?? null,
21968
+ },
21969
+ placeholderBlock: {
21970
+ exists: tDetails.placeholderTmplIndex !== null,
21971
+ minimumTime: tDetails.placeholderBlockConfig?.[MINIMUM_SLOT] ?? null,
21972
+ },
21973
+ triggers: tDetails.debug?.triggers ? Array.from(tDetails.debug.triggers).sort() : [],
21974
+ rootNodes,
21975
+ };
21976
+ results.push(data);
21977
+ // `getDeferBlocks` does not resolve nested defer blocks so we have to recurse manually.
21978
+ if (renderedLView !== null) {
21979
+ findDeferBlocks(node, renderedLView, results);
21980
+ }
21981
+ }
21982
+ }
21983
+ /**
21984
+ * Turns the `DeferBlockState` into a string which is more readable than the enum form.
21985
+ *
21986
+ * @param lDetails Information about the
21987
+ * @returns
21988
+ */
21989
+ function stringifyState(state) {
21990
+ switch (state) {
21991
+ case DeferBlockState.Complete:
21992
+ return 'complete';
21993
+ case DeferBlockState.Loading:
21994
+ return 'loading';
21995
+ case DeferBlockState.Placeholder:
21996
+ return 'placeholder';
21997
+ case DeferBlockState.Error:
21998
+ return 'error';
21999
+ case DeferBlockInternalState.Initial:
22000
+ return 'initial';
22001
+ default:
22002
+ throw new Error(`Unrecognized state ${state}`);
22003
+ }
22004
+ }
22005
+ /**
22006
+ * Infers the hydration state of a specific defer block.
22007
+ * @param tDetails Static defer block information.
22008
+ * @param lDetails Instance defer block information.
22009
+ * @param registry Registry coordinating the hydration of defer blocks.
22010
+ */
22011
+ function inferHydrationState(tDetails, lDetails, registry) {
22012
+ if (registry === null ||
22013
+ lDetails[SSR_UNIQUE_ID] === null ||
22014
+ tDetails.hydrateTriggers === null ||
22015
+ tDetails.hydrateTriggers.has(7 /* DeferBlockTrigger.Never */)) {
22016
+ return 'not-configured';
22017
+ }
22018
+ return registry.has(lDetails[SSR_UNIQUE_ID]) ? 'dehydrated' : 'hydrated';
22019
+ }
22020
+ /**
22021
+ * Gets the current LView that is rendered out in a defer block.
22022
+ * @param details Instance information about the block.
22023
+ */
22024
+ function getRendererLView(details) {
22025
+ // Defer block containers can only ever contain one view.
22026
+ // If they're empty, it means that nothing is rendered.
22027
+ if (details.lContainer.length <= CONTAINER_HEADER_OFFSET) {
22028
+ return null;
22029
+ }
22030
+ const lView = details.lContainer[CONTAINER_HEADER_OFFSET];
22031
+ ngDevMode && assertLView(lView);
22032
+ return lView;
22033
+ }
22034
+
21872
22035
  /**
21873
22036
  * Discovers the dependencies of an injectable instance. Provides DI information about each
21874
22037
  * dependency that the injectable was instantiated with, including where they were provided from.
@@ -22553,6 +22716,7 @@ const globalUtilsFunctions = {
22553
22716
  'ɵgetInjectorMetadata': getInjectorMetadata,
22554
22717
  'ɵsetProfiler': setProfiler,
22555
22718
  'ɵgetSignalGraph': getSignalGraph,
22719
+ 'ɵgetDeferBlocks': getDeferBlocks,
22556
22720
  'getDirectiveMetadata': getDirectiveMetadata$1,
22557
22721
  'getComponent': getComponent,
22558
22722
  'getContext': getContext,
@@ -23793,9 +23957,14 @@ function detectChangesInViewIfRequired(lView, notifyErrorHandler, isFirstPass, z
23793
23957
  function scheduleDelayedTrigger(scheduleFn) {
23794
23958
  const lView = getLView();
23795
23959
  const tNode = getCurrentTNode();
23960
+ renderPlaceholder(lView, tNode);
23961
+ // Exit early to avoid invoking `scheduleFn`, which would
23962
+ // add `setTimeout` call and potentially delay serialization
23963
+ // on the server unnecessarily.
23964
+ if (!shouldTriggerDeferBlock(0 /* TriggerType.Regular */, lView))
23965
+ return;
23796
23966
  const injector = lView[INJECTOR];
23797
23967
  const lDetails = getLDeferBlockDetails(lView, tNode);
23798
- renderPlaceholder(lView, tNode);
23799
23968
  const cleanupFn = scheduleFn(() => triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode), injector);
23800
23969
  storeTriggerCleanupFn(0 /* TriggerType.Regular */, lDetails, cleanupFn);
23801
23970
  }
@@ -24077,30 +24246,25 @@ function populateHydratingStateForQueue(registry, queue) {
24077
24246
  }
24078
24247
  // Waits for the next render cycle to complete
24079
24248
  function nextRender(injector) {
24080
- let resolve;
24081
- const promise = new Promise((resolveFn) => {
24082
- resolve = resolveFn;
24083
- });
24084
- afterNextRender(() => resolve(), { injector });
24085
- return promise;
24249
+ return new Promise((resolveFn) => afterNextRender(resolveFn, { injector }));
24086
24250
  }
24087
- function triggerResourceLoadingForHydration(dehydratedBlockId, dehydratedBlockRegistry) {
24088
- let resolve;
24089
- const promise = new Promise((resolveFn) => (resolve = resolveFn));
24251
+ async function triggerResourceLoadingForHydration(dehydratedBlockId, dehydratedBlockRegistry) {
24090
24252
  const deferBlock = dehydratedBlockRegistry.get(dehydratedBlockId);
24091
24253
  // Since we trigger hydration for nested defer blocks in a sequence (parent -> child),
24092
24254
  // there is a chance that a defer block may not be present at hydration time. For example,
24093
24255
  // when a nested block was in an `@if` condition, which has changed.
24094
- if (deferBlock !== null) {
24095
- const { tNode, lView } = deferBlock;
24096
- const lDetails = getLDeferBlockDetails(lView, tNode);
24097
- onDeferBlockCompletion(lDetails, () => resolve());
24098
- triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);
24256
+ if (deferBlock === null) {
24099
24257
  // TODO(incremental-hydration): handle the cleanup for cases when
24100
24258
  // defer block is no longer present during hydration (e.g. `@if` condition
24101
24259
  // has changed during hydration/rendering).
24260
+ return;
24102
24261
  }
24103
- return promise;
24262
+ const { tNode, lView } = deferBlock;
24263
+ const lDetails = getLDeferBlockDetails(lView, tNode);
24264
+ return new Promise((resolve) => {
24265
+ onDeferBlockCompletion(lDetails, resolve);
24266
+ triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);
24267
+ });
24104
24268
  }
24105
24269
  /**
24106
24270
  * Registers cleanup functions for a defer block when the block has finished
@@ -24278,7 +24442,7 @@ function ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplInd
24278
24442
  loadingPromise: null,
24279
24443
  providers: null,
24280
24444
  hydrateTriggers: null,
24281
- prefetchTriggers: null,
24445
+ debug: null,
24282
24446
  flags: flags ?? 0 /* TDeferDetailsFlags.Default */,
24283
24447
  };
24284
24448
  enableTimerScheduling?.(tView, tDetails, placeholderConfigIndex, loadingConfigIndex);
@@ -24335,6 +24499,9 @@ function ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplInd
24335
24499
  function ɵɵdeferWhen(rawValue) {
24336
24500
  const lView = getLView();
24337
24501
  const tNode = getSelectedTNode();
24502
+ if (ngDevMode) {
24503
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'when <expression>');
24504
+ }
24338
24505
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24339
24506
  return;
24340
24507
  const bindingIndex = nextBindingIndex();
@@ -24366,6 +24533,9 @@ function ɵɵdeferWhen(rawValue) {
24366
24533
  function ɵɵdeferPrefetchWhen(rawValue) {
24367
24534
  const lView = getLView();
24368
24535
  const tNode = getSelectedTNode();
24536
+ if (ngDevMode) {
24537
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch when <expression>');
24538
+ }
24369
24539
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24370
24540
  return;
24371
24541
  const bindingIndex = nextBindingIndex();
@@ -24393,6 +24563,9 @@ function ɵɵdeferPrefetchWhen(rawValue) {
24393
24563
  function ɵɵdeferHydrateWhen(rawValue) {
24394
24564
  const lView = getLView();
24395
24565
  const tNode = getSelectedTNode();
24566
+ if (ngDevMode) {
24567
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate when <expression>');
24568
+ }
24396
24569
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24397
24570
  return;
24398
24571
  // TODO(incremental-hydration): audit all defer instructions to reduce unnecessary work by
@@ -24434,6 +24607,9 @@ function ɵɵdeferHydrateWhen(rawValue) {
24434
24607
  function ɵɵdeferHydrateNever() {
24435
24608
  const lView = getLView();
24436
24609
  const tNode = getCurrentTNode();
24610
+ if (ngDevMode) {
24611
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate never');
24612
+ }
24437
24613
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24438
24614
  return;
24439
24615
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24450,6 +24626,9 @@ function ɵɵdeferHydrateNever() {
24450
24626
  function ɵɵdeferOnIdle() {
24451
24627
  const lView = getLView();
24452
24628
  const tNode = getCurrentTNode();
24629
+ if (ngDevMode) {
24630
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'on idle');
24631
+ }
24453
24632
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24454
24633
  return;
24455
24634
  scheduleDelayedTrigger(onIdle);
@@ -24461,6 +24640,9 @@ function ɵɵdeferOnIdle() {
24461
24640
  function ɵɵdeferPrefetchOnIdle() {
24462
24641
  const lView = getLView();
24463
24642
  const tNode = getCurrentTNode();
24643
+ if (ngDevMode) {
24644
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch on idle');
24645
+ }
24464
24646
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24465
24647
  return;
24466
24648
  scheduleDelayedPrefetching(onIdle, 0 /* DeferBlockTrigger.Idle */);
@@ -24472,6 +24654,9 @@ function ɵɵdeferPrefetchOnIdle() {
24472
24654
  function ɵɵdeferHydrateOnIdle() {
24473
24655
  const lView = getLView();
24474
24656
  const tNode = getCurrentTNode();
24657
+ if (ngDevMode) {
24658
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on idle');
24659
+ }
24475
24660
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24476
24661
  return;
24477
24662
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24491,6 +24676,9 @@ function ɵɵdeferHydrateOnIdle() {
24491
24676
  function ɵɵdeferOnImmediate() {
24492
24677
  const lView = getLView();
24493
24678
  const tNode = getCurrentTNode();
24679
+ if (ngDevMode) {
24680
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'on immediate');
24681
+ }
24494
24682
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24495
24683
  return;
24496
24684
  // Render placeholder block only if loading template is not present and we're on
@@ -24509,6 +24697,9 @@ function ɵɵdeferOnImmediate() {
24509
24697
  function ɵɵdeferPrefetchOnImmediate() {
24510
24698
  const lView = getLView();
24511
24699
  const tNode = getCurrentTNode();
24700
+ if (ngDevMode) {
24701
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'prefetch on immediate');
24702
+ }
24512
24703
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24513
24704
  return;
24514
24705
  const tView = lView[TVIEW];
@@ -24524,6 +24715,9 @@ function ɵɵdeferPrefetchOnImmediate() {
24524
24715
  function ɵɵdeferHydrateOnImmediate() {
24525
24716
  const lView = getLView();
24526
24717
  const tNode = getCurrentTNode();
24718
+ if (ngDevMode) {
24719
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on immediate');
24720
+ }
24527
24721
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24528
24722
  return;
24529
24723
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24547,6 +24741,9 @@ function ɵɵdeferHydrateOnImmediate() {
24547
24741
  function ɵɵdeferOnTimer(delay) {
24548
24742
  const lView = getLView();
24549
24743
  const tNode = getCurrentTNode();
24744
+ if (ngDevMode) {
24745
+ trackTriggerForDebugging(lView[TVIEW], tNode, `on timer(${delay}ms)`);
24746
+ }
24550
24747
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24551
24748
  return;
24552
24749
  scheduleDelayedTrigger(onTimer(delay));
@@ -24559,6 +24756,9 @@ function ɵɵdeferOnTimer(delay) {
24559
24756
  function ɵɵdeferPrefetchOnTimer(delay) {
24560
24757
  const lView = getLView();
24561
24758
  const tNode = getCurrentTNode();
24759
+ if (ngDevMode) {
24760
+ trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on timer(${delay}ms)`);
24761
+ }
24562
24762
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24563
24763
  return;
24564
24764
  scheduleDelayedPrefetching(onTimer(delay), 5 /* DeferBlockTrigger.Timer */);
@@ -24571,10 +24771,13 @@ function ɵɵdeferPrefetchOnTimer(delay) {
24571
24771
  function ɵɵdeferHydrateOnTimer(delay) {
24572
24772
  const lView = getLView();
24573
24773
  const tNode = getCurrentTNode();
24774
+ if (ngDevMode) {
24775
+ trackTriggerForDebugging(lView[TVIEW], tNode, `hydrate on timer(${delay}ms)`);
24776
+ }
24574
24777
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24575
24778
  return;
24576
24779
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
24577
- hydrateTriggers.set(5 /* DeferBlockTrigger.Timer */, delay);
24780
+ hydrateTriggers.set(5 /* DeferBlockTrigger.Timer */, { delay });
24578
24781
  if (typeof ngServerMode !== 'undefined' && ngServerMode) {
24579
24782
  // We are on the server and SSR for defer blocks is enabled.
24580
24783
  triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);
@@ -24592,6 +24795,9 @@ function ɵɵdeferHydrateOnTimer(delay) {
24592
24795
  function ɵɵdeferOnHover(triggerIndex, walkUpTimes) {
24593
24796
  const lView = getLView();
24594
24797
  const tNode = getCurrentTNode();
24798
+ if (ngDevMode) {
24799
+ trackTriggerForDebugging(lView[TVIEW], tNode, `on hover${walkUpTimes === -1 ? '' : '(<target>)'}`);
24800
+ }
24595
24801
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24596
24802
  return;
24597
24803
  renderPlaceholder(lView, tNode);
@@ -24609,6 +24815,9 @@ function ɵɵdeferOnHover(triggerIndex, walkUpTimes) {
24609
24815
  function ɵɵdeferPrefetchOnHover(triggerIndex, walkUpTimes) {
24610
24816
  const lView = getLView();
24611
24817
  const tNode = getCurrentTNode();
24818
+ if (ngDevMode) {
24819
+ trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on hover${walkUpTimes === -1 ? '' : '(<target>)'}`);
24820
+ }
24612
24821
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24613
24822
  return;
24614
24823
  const tView = lView[TVIEW];
@@ -24624,6 +24833,9 @@ function ɵɵdeferPrefetchOnHover(triggerIndex, walkUpTimes) {
24624
24833
  function ɵɵdeferHydrateOnHover() {
24625
24834
  const lView = getLView();
24626
24835
  const tNode = getCurrentTNode();
24836
+ if (ngDevMode) {
24837
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on hover');
24838
+ }
24627
24839
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24628
24840
  return;
24629
24841
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24644,6 +24856,9 @@ function ɵɵdeferHydrateOnHover() {
24644
24856
  function ɵɵdeferOnInteraction(triggerIndex, walkUpTimes) {
24645
24857
  const lView = getLView();
24646
24858
  const tNode = getCurrentTNode();
24859
+ if (ngDevMode) {
24860
+ trackTriggerForDebugging(lView[TVIEW], tNode, `on interaction${walkUpTimes === -1 ? '' : '(<target>)'}`);
24861
+ }
24647
24862
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24648
24863
  return;
24649
24864
  renderPlaceholder(lView, tNode);
@@ -24661,6 +24876,9 @@ function ɵɵdeferOnInteraction(triggerIndex, walkUpTimes) {
24661
24876
  function ɵɵdeferPrefetchOnInteraction(triggerIndex, walkUpTimes) {
24662
24877
  const lView = getLView();
24663
24878
  const tNode = getCurrentTNode();
24879
+ if (ngDevMode) {
24880
+ trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on interaction${walkUpTimes === -1 ? '' : '(<target>)'}`);
24881
+ }
24664
24882
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24665
24883
  return;
24666
24884
  const tView = lView[TVIEW];
@@ -24676,6 +24894,9 @@ function ɵɵdeferPrefetchOnInteraction(triggerIndex, walkUpTimes) {
24676
24894
  function ɵɵdeferHydrateOnInteraction() {
24677
24895
  const lView = getLView();
24678
24896
  const tNode = getCurrentTNode();
24897
+ if (ngDevMode) {
24898
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on interaction');
24899
+ }
24679
24900
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24680
24901
  return;
24681
24902
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -24696,6 +24917,9 @@ function ɵɵdeferHydrateOnInteraction() {
24696
24917
  function ɵɵdeferOnViewport(triggerIndex, walkUpTimes) {
24697
24918
  const lView = getLView();
24698
24919
  const tNode = getCurrentTNode();
24920
+ if (ngDevMode) {
24921
+ trackTriggerForDebugging(lView[TVIEW], tNode, `on viewport${walkUpTimes === -1 ? '' : '(<target>)'}`);
24922
+ }
24699
24923
  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode))
24700
24924
  return;
24701
24925
  renderPlaceholder(lView, tNode);
@@ -24713,6 +24937,9 @@ function ɵɵdeferOnViewport(triggerIndex, walkUpTimes) {
24713
24937
  function ɵɵdeferPrefetchOnViewport(triggerIndex, walkUpTimes) {
24714
24938
  const lView = getLView();
24715
24939
  const tNode = getCurrentTNode();
24940
+ if (ngDevMode) {
24941
+ trackTriggerForDebugging(lView[TVIEW], tNode, `prefetch on viewport${walkUpTimes === -1 ? '' : '(<target>)'}`);
24942
+ }
24716
24943
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
24717
24944
  return;
24718
24945
  const tView = lView[TVIEW];
@@ -24728,6 +24955,9 @@ function ɵɵdeferPrefetchOnViewport(triggerIndex, walkUpTimes) {
24728
24955
  function ɵɵdeferHydrateOnViewport() {
24729
24956
  const lView = getLView();
24730
24957
  const tNode = getCurrentTNode();
24958
+ if (ngDevMode) {
24959
+ trackTriggerForDebugging(lView[TVIEW], tNode, 'hydrate on viewport');
24960
+ }
24731
24961
  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode))
24732
24962
  return;
24733
24963
  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
@@ -34746,7 +34976,7 @@ class Version {
34746
34976
  /**
34747
34977
  * @publicApi
34748
34978
  */
34749
- const VERSION = new Version('19.1.0-next.3');
34979
+ const VERSION = new Version('19.1.0-next.4');
34750
34980
 
34751
34981
  /**
34752
34982
  * Combination of NgModuleFactory and ComponentFactories.
@@ -35767,6 +35997,27 @@ function logOversizedImageWarning(src) {
35767
35997
  */
35768
35998
  const PLATFORM_DESTROY_LISTENERS = new InjectionToken(ngDevMode ? 'PlatformDestroyListeners' : '');
35769
35999
 
36000
+ /**
36001
+ * InjectionToken to control root component bootstrap behavior.
36002
+ *
36003
+ * This token is primarily used in Angular's server-side rendering (SSR) scenarios,
36004
+ * particularly by the `@angular/ssr` package, to manage whether the root component
36005
+ * should be bootstrapped during the application initialization process.
36006
+ *
36007
+ * ## Purpose:
36008
+ * During SSR route extraction, setting this token to `false` prevents Angular from
36009
+ * bootstrapping the root component. This avoids unnecessary component rendering,
36010
+ * enabling route extraction without requiring additional APIs or triggering
36011
+ * component logic.
36012
+ *
36013
+ * ## Behavior:
36014
+ * - **`false`**: Prevents the root component from being bootstrapped.
36015
+ * - **`true`** (default): Proceeds with the normal root component bootstrap process.
36016
+ *
36017
+ * This mechanism ensures SSR can efficiently separate route extraction logic
36018
+ * from component rendering.
36019
+ */
36020
+ const ENABLE_ROOT_COMPONENT_BOOTSTRAP = new InjectionToken(ngDevMode ? 'ENABLE_ROOT_COMPONENT_BOOTSTRAP' : '');
35770
36021
  function isApplicationBootstrapConfig(config) {
35771
36022
  return !config.moduleRef;
35772
36023
  }
@@ -35831,6 +36082,14 @@ function bootstrap(config) {
35831
36082
  // If the `LOCALE_ID` provider is defined at bootstrap then we set the value for ivy
35832
36083
  const localeId = envInjector.get(LOCALE_ID, DEFAULT_LOCALE_ID);
35833
36084
  setLocaleId(localeId || DEFAULT_LOCALE_ID);
36085
+ const enableRootComponentBoostrap = envInjector.get(ENABLE_ROOT_COMPONENT_BOOTSTRAP, true);
36086
+ if (!enableRootComponentBoostrap) {
36087
+ if (isApplicationBootstrapConfig(config)) {
36088
+ return envInjector.get(ApplicationRef);
36089
+ }
36090
+ config.allPlatformModules.push(config.moduleRef);
36091
+ return config.moduleRef;
36092
+ }
35834
36093
  if (typeof ngDevMode === 'undefined' || ngDevMode) {
35835
36094
  const imagePerformanceService = envInjector.get(ImagePerformanceWarning);
35836
36095
  imagePerformanceService.start();
@@ -38741,42 +39000,6 @@ function internalCreateApplication(config) {
38741
39000
  }
38742
39001
  }
38743
39002
 
38744
- /**
38745
- * Retrieves all defer blocks in a given LView.
38746
- *
38747
- * @param lView lView with defer blocks
38748
- * @param deferBlocks defer block aggregator array
38749
- */
38750
- function getDeferBlocks(lView, deferBlocks) {
38751
- const tView = lView[TVIEW];
38752
- for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
38753
- if (isLContainer(lView[i])) {
38754
- const lContainer = lView[i];
38755
- // An LContainer may represent an instance of a defer block, in which case
38756
- // we store it as a result. Otherwise, keep iterating over LContainer views and
38757
- // look for defer blocks.
38758
- const isLast = i === tView.bindingStartIndex - 1;
38759
- if (!isLast) {
38760
- const tNode = tView.data[i];
38761
- const tDetails = getTDeferBlockDetails(tView, tNode);
38762
- if (isTDeferBlockDetails(tDetails)) {
38763
- deferBlocks.push({ lContainer, lView, tNode, tDetails });
38764
- // This LContainer represents a defer block, so we exit
38765
- // this iteration and don't inspect views in this LContainer.
38766
- continue;
38767
- }
38768
- }
38769
- for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
38770
- getDeferBlocks(lContainer[i], deferBlocks);
38771
- }
38772
- }
38773
- else if (isLView(lView[i])) {
38774
- // This is a component, enter the `getDeferBlocks` recursively.
38775
- getDeferBlocks(lView[i], deferBlocks);
38776
- }
38777
- }
38778
- }
38779
-
38780
39003
  /** Apps in which we've enabled event replay.
38781
39004
  * This is to prevent initializing event replay more than once per app.
38782
39005
  */
@@ -39144,7 +39367,6 @@ function annotateForHydration(appRef, doc) {
39144
39367
  transferState.set(NGH_DATA_KEY, serializedViews);
39145
39368
  if (deferBlocks.size > 0) {
39146
39369
  const blocks = {};
39147
- // TODO(incremental-hydration): we should probably have an object here instead of a Map?
39148
39370
  for (const [id, info] of deferBlocks.entries()) {
39149
39371
  blocks[id] = info;
39150
39372
  }
@@ -39213,10 +39435,10 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39213
39435
  // If this is a defer block, serialize extra info.
39214
39436
  if (isDeferBlock(lView[TVIEW], tNode)) {
39215
39437
  const lDetails = getLDeferBlockDetails(lView, tNode);
39216
- if (context.isIncrementalHydrationEnabled) {
39438
+ const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
39439
+ if (context.isIncrementalHydrationEnabled && tDetails.hydrateTriggers !== null) {
39217
39440
  const deferBlockId = `d${context.deferBlocks.size}`;
39218
- const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
39219
- if (tDetails.hydrateTriggers?.has(7 /* DeferBlockTrigger.Never */)) {
39441
+ if (tDetails.hydrateTriggers.has(7 /* DeferBlockTrigger.Never */)) {
39220
39442
  isHydrateNeverBlock = true;
39221
39443
  }
39222
39444
  let rootNodes = [];
@@ -39226,8 +39448,11 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39226
39448
  [DEFER_PARENT_BLOCK_ID]: parentDeferBlockId,
39227
39449
  [NUM_ROOT_NODES]: rootNodes.length,
39228
39450
  [DEFER_BLOCK_STATE$1]: lDetails[DEFER_BLOCK_STATE],
39229
- [DEFER_HYDRATE_TRIGGERS]: serializeHydrateTriggers(tDetails.hydrateTriggers),
39230
39451
  };
39452
+ const serializedTriggers = serializeHydrateTriggers(tDetails.hydrateTriggers);
39453
+ if (serializedTriggers.length > 0) {
39454
+ deferBlockInfo[DEFER_HYDRATE_TRIGGERS] = serializedTriggers;
39455
+ }
39231
39456
  context.deferBlocks.set(deferBlockId, deferBlockInfo);
39232
39457
  const node = unwrapRNode(lContainer);
39233
39458
  if (node !== undefined) {
@@ -39258,11 +39483,7 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39258
39483
  serializedView[DEFER_BLOCK_STATE$1] = lDetails[DEFER_BLOCK_STATE];
39259
39484
  }
39260
39485
  if (!isHydrateNeverBlock) {
39261
- // TODO(incremental-hydration): avoid copying of an object here
39262
- serializedView = {
39263
- ...serializedView,
39264
- ...serializeLView(lContainer[i], parentDeferBlockId, context),
39265
- };
39486
+ Object.assign(serializedView, serializeLView(lContainer[i], parentDeferBlockId, context));
39266
39487
  }
39267
39488
  }
39268
39489
  // Check if the previous view has the same shape (for example, it was
@@ -39283,9 +39504,6 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39283
39504
  return views;
39284
39505
  }
39285
39506
  function serializeHydrateTriggers(triggerMap) {
39286
- if (triggerMap === null) {
39287
- return null;
39288
- }
39289
39507
  const serializableDeferBlockTrigger = new Set([
39290
39508
  0 /* DeferBlockTrigger.Idle */,
39291
39509
  1 /* DeferBlockTrigger.Immediate */,
@@ -39299,7 +39517,7 @@ function serializeHydrateTriggers(triggerMap) {
39299
39517
  triggers.push(trigger);
39300
39518
  }
39301
39519
  else {
39302
- triggers.push({ trigger, details });
39520
+ triggers.push({ trigger, delay: details.delay });
39303
39521
  }
39304
39522
  }
39305
39523
  }
@@ -39717,6 +39935,9 @@ function printHydrationStats(injector) {
39717
39935
  const message = `Angular hydrated ${ngDevMode.hydratedComponents} component(s) ` +
39718
39936
  `and ${ngDevMode.hydratedNodes} node(s), ` +
39719
39937
  `${ngDevMode.componentsSkippedHydration} component(s) were skipped. ` +
39938
+ (isIncrementalHydrationEnabled(injector)
39939
+ ? `${ngDevMode.deferBlocksWithIncrementalHydration} defer block(s) were configured to use incremental hydration. `
39940
+ : '') +
39720
39941
  `Learn more at https://angular.dev/guide/hydration.`;
39721
39942
  // tslint:disable-next-line:no-console
39722
39943
  console.log(message);
@@ -39840,6 +40061,7 @@ function withDomHydration() {
39840
40061
  whenStableWithTimeout(appRef, injector).then(() => {
39841
40062
  cleanupDehydratedViews(appRef);
39842
40063
  if (typeof ngDevMode !== 'undefined' && ngDevMode) {
40064
+ countBlocksSkippedByHydration(injector);
39843
40065
  printHydrationStats(injector);
39844
40066
  }
39845
40067
  });
@@ -41346,5 +41568,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
41346
41568
  * Generated bundle index. Do not edit.
41347
41569
  */
41348
41570
 
41349
- export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, 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_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as 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, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, PendingTasks, Pipe, PlatformRef, Query, QueryList, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, Renderer2, RendererFactory2, RendererStyleFlags2, ResourceStatus, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, ViewRef, afterNextRender, afterRender, afterRenderEffect, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideEnvironmentInitializer, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, providePlatformInitializer, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, resource, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderManager as ɵAfterRenderManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, MicrotaskEffectScheduler as ɵMicrotaskEffectScheduler, 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, PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PendingTasksInternal as ɵPendingTasksInternal, 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, TracingAction as ɵTracingAction, TracingService as ɵTracingService, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _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, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, disableProfiling as ɵdisableProfiling, enableProfiling as ɵenableProfiling, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getClosestComponentName as ɵgetClosestComponentName, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, microtaskEffect as ɵmicrotaskEffect, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, publishExternalGlobalUtil as ɵpublishExternalGlobalUtil, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, startMeasuring as ɵstartMeasuring, stopMeasuring as ɵstopMeasuring, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, withIncrementalHydration as ɵwithIncrementalHydration, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattachSourceLocations, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdeclareLet, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferHydrateNever, ɵɵdeferHydrateOnHover, ɵɵdeferHydrateOnIdle, ɵɵdeferHydrateOnImmediate, ɵɵdeferHydrateOnInteraction, ɵɵdeferHydrateOnTimer, ɵɵdeferHydrateOnViewport, ɵɵdeferHydrateWhen, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵ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, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵ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, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
41571
+ export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, 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_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as 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, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, PendingTasks, Pipe, PlatformRef, Query, QueryList, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, Renderer2, RendererFactory2, RendererStyleFlags2, ResourceStatus, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, ViewRef, afterNextRender, afterRender, afterRenderEffect, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideEnvironmentInitializer, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, providePlatformInitializer, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, resource, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderManager as ɵAfterRenderManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, MicrotaskEffectScheduler as ɵMicrotaskEffectScheduler, 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, PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PendingTasksInternal as ɵPendingTasksInternal, 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, TracingAction as ɵTracingAction, TracingService as ɵTracingService, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _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, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, disableProfiling as ɵdisableProfiling, enableProfiling as ɵenableProfiling, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getClosestComponentName as ɵgetClosestComponentName, getDebugNode as ɵgetDebugNode, getDeferBlocks$1 as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, microtaskEffect as ɵmicrotaskEffect, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, publishExternalGlobalUtil as ɵpublishExternalGlobalUtil, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, startMeasuring as ɵstartMeasuring, stopMeasuring as ɵstopMeasuring, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, withIncrementalHydration as ɵwithIncrementalHydration, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattachSourceLocations, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdeclareLet, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferHydrateNever, ɵɵdeferHydrateOnHover, ɵɵdeferHydrateOnIdle, ɵɵdeferHydrateOnImmediate, ɵɵdeferHydrateOnInteraction, ɵɵdeferHydrateOnTimer, ɵɵdeferHydrateOnViewport, ɵɵdeferHydrateWhen, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵ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, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵ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, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
41350
41572
  //# sourceMappingURL=core.mjs.map