@angular/core 20.0.0-next.1 → 20.0.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/fesm2022/core.mjs +374 -1796
  2. package/fesm2022/core.mjs.map +1 -1
  3. package/fesm2022/primitives/di.mjs +1 -1
  4. package/fesm2022/primitives/di.mjs.map +1 -1
  5. package/fesm2022/primitives/event-dispatch.mjs +2 -589
  6. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  7. package/fesm2022/primitives/signals.mjs +18 -8
  8. package/fesm2022/primitives/signals.mjs.map +1 -1
  9. package/fesm2022/rxjs-interop.mjs +7 -32
  10. package/fesm2022/rxjs-interop.mjs.map +1 -1
  11. package/fesm2022/testing.mjs +119 -138
  12. package/fesm2022/testing.mjs.map +1 -1
  13. package/fesm2022/weak_ref-DrMdAIDh.mjs +12 -0
  14. package/fesm2022/weak_ref-DrMdAIDh.mjs.map +1 -0
  15. package/index.d.ts +14343 -15225
  16. package/navigation_types.d-u4EOrrdZ.d.ts +121 -0
  17. package/package.json +2 -2
  18. package/primitives/di/index.d.ts +42 -50
  19. package/primitives/event-dispatch/index.d.ts +205 -309
  20. package/primitives/signals/index.d.ts +158 -195
  21. package/rxjs-interop/index.d.ts +71 -91
  22. package/schematics/bundles/{apply_import_manager-e2a7fe5b.js → apply_import_manager-CyRT0UvU.js} +12 -16
  23. package/schematics/bundles/{checker-af521da6.js → checker-DF8ZaFW5.js} +3084 -1122
  24. package/schematics/bundles/cleanup-unused-imports.js +21 -27
  25. package/schematics/bundles/{compiler_host-5a29293c.js → compiler_host-Da636uJ8.js} +19 -23
  26. package/schematics/bundles/control-flow-migration.js +81 -38
  27. package/schematics/bundles/{imports-047fbbc8.js → imports-CIX-JgAN.js} +9 -14
  28. package/schematics/bundles/{index-1bef3025.js → index-DnkWgagp.js} +55 -59
  29. package/schematics/bundles/{index-ef1bffbb.js → index-vGJcp5M7.js} +4 -4
  30. package/schematics/bundles/inject-flags.js +181 -0
  31. package/schematics/bundles/inject-migration.js +121 -127
  32. package/schematics/bundles/{leading_space-f8944434.js → leading_space-D9nQ8UQC.js} +1 -1
  33. package/schematics/bundles/{migrate_ts_type_references-2a3e9e6b.js → migrate_ts_type_references-DtkOnnv0.js} +106 -111
  34. package/schematics/bundles/{ng_decorators-b0d8b324.js → ng_decorators-DznZ5jMl.js} +4 -8
  35. package/schematics/bundles/{nodes-7758dbf6.js → nodes-B16H9JUd.js} +2 -6
  36. package/schematics/bundles/output-migration.js +39 -45
  37. package/schematics/bundles/{program-a449f9bf.js → program-BZk27Ndu.js} +844 -2651
  38. package/schematics/bundles/{project_paths-17dc204d.js → project_paths-Jtbi76Bs.js} +25 -23
  39. package/schematics/bundles/{project_tsconfig_paths-b558633b.js → project_tsconfig_paths-CDVxT6Ov.js} +1 -1
  40. package/schematics/bundles/{property_name-ac18447e.js → property_name-BBwFuqMe.js} +3 -7
  41. package/schematics/bundles/route-lazy-loading.js +35 -41
  42. package/schematics/bundles/self-closing-tags-migration.js +19 -25
  43. package/schematics/bundles/signal-input-migration.js +60 -67
  44. package/schematics/bundles/signal-queries-migration.js +47 -54
  45. package/schematics/bundles/signals.js +9 -11
  46. package/schematics/bundles/standalone-migration.js +178 -184
  47. package/schematics/migrations.json +4 -15
  48. package/testing/index.d.ts +289 -469
  49. package/weak_ref.d-ttyj86RV.d.ts +9 -0
  50. package/schematics/bundles/explicit-standalone-flag.js +0 -184
  51. package/schematics/bundles/pending-tasks.js +0 -103
  52. package/schematics/bundles/provide-initializer.js +0 -186
package/fesm2022/core.mjs CHANGED
@@ -1,15 +1,17 @@
1
1
  /**
2
- * @license Angular v20.0.0-next.1
2
+ * @license Angular v20.0.0-next.2
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
- import { SIGNAL_NODE as SIGNAL_NODE$1, signalSetFn as signalSetFn$1, producerAccessed as producerAccessed$1, SIGNAL as SIGNAL$1, getActiveConsumer as getActiveConsumer$1, setActiveConsumer as setActiveConsumer$1, createSignal as createSignal$1, signalUpdateFn as signalUpdateFn$1, consumerDestroy as consumerDestroy$1, REACTIVE_NODE as REACTIVE_NODE$1, consumerBeforeComputation as consumerBeforeComputation$1, consumerAfterComputation as consumerAfterComputation$1, consumerPollProducersForChange as consumerPollProducersForChange$1, createComputed as createComputed$1, setThrowInvalidWriteToSignalError as setThrowInvalidWriteToSignalError$1, createWatch as createWatch$1, isInNotificationPhase as isInNotificationPhase$1, createLinkedSignal as createLinkedSignal$1, linkedSignalSetFn as linkedSignalSetFn$1, linkedSignalUpdateFn as linkedSignalUpdateFn$1 } from '@angular/core/primitives/signals';
7
+ import { SIGNAL_NODE, signalSetFn, SIGNAL, producerAccessed, getActiveConsumer, setActiveConsumer, createSignal, signalUpdateFn, consumerDestroy, REACTIVE_NODE, consumerPollProducersForChange, consumerBeforeComputation, consumerAfterComputation, createComputed, setThrowInvalidWriteToSignalError, isInNotificationPhase, createLinkedSignal, linkedSignalSetFn, linkedSignalUpdateFn } from '@angular/core/primitives/signals';
8
8
  export { SIGNAL as ɵSIGNAL } from '@angular/core/primitives/signals';
9
- import * as di from '@angular/core/primitives/di';
9
+ import { getCurrentInjector, setCurrentInjector } from '@angular/core/primitives/di';
10
+ export { setCurrentInjector as ɵsetCurrentInjector } from '@angular/core/primitives/di';
10
11
  import { Subject, BehaviorSubject, Subscription } from 'rxjs';
11
- import { Attribute as Attribute$1, clearAppScopedEarlyEventContract, EventContract, EventContractContainer, getAppScopedQueuedEventInfos, EventDispatcher, registerDispatcher, isEarlyEventType, isCaptureEventType, EventPhase } from '@angular/core/primitives/event-dispatch';
12
+ import { Attribute as Attribute$1, clearAppScopedEarlyEventContract, EventContract, EventContractContainer, getAppScopedQueuedEventInfos, EventDispatcher, registerDispatcher, EventPhase, isEarlyEventType, isCaptureEventType } from '@angular/core/primitives/event-dispatch';
12
13
  import { map } from 'rxjs/operators';
14
+ export { s as ɵsetAlternateWeakRefImpl } from './weak_ref-DrMdAIDh.mjs';
13
15
 
14
16
  /**
15
17
  * Base URL for the error details page.
@@ -22,7 +24,7 @@ const ERROR_DETAILS_PAGE_BASE_URL = 'https://angular.dev/errors';
22
24
  /**
23
25
  * URL for the XSS security documentation.
24
26
  */
25
- const XSS_SECURITY_URL = 'https://g.co/ng/security#xss';
27
+ const XSS_SECURITY_URL = 'https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss';
26
28
 
27
29
  /**
28
30
  * Class that represents a runtime error.
@@ -71,15 +73,14 @@ const REQUIRED_UNSET_VALUE = /* @__PURE__ */ Symbol('InputSignalNode#UNSET');
71
73
  // TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
72
74
  const INPUT_SIGNAL_NODE = /* @__PURE__ */ (() => {
73
75
  return {
74
- ...SIGNAL_NODE$1,
76
+ ...SIGNAL_NODE,
75
77
  transformFn: undefined,
76
78
  applyValueToInputSignal(node, value) {
77
- signalSetFn$1(node, value);
79
+ signalSetFn(node, value);
78
80
  },
79
81
  };
80
82
  })();
81
83
 
82
- const ɵINPUT_SIGNAL_BRAND_READ_TYPE = /* @__PURE__ */ Symbol();
83
84
  const ɵINPUT_SIGNAL_BRAND_WRITE_TYPE = /* @__PURE__ */ Symbol();
84
85
  /**
85
86
  * Creates an input signal.
@@ -96,13 +97,13 @@ function createInputSignal(initialValue, options) {
96
97
  node.transformFn = options?.transform;
97
98
  function inputValueFn() {
98
99
  // Record that someone looked at this signal.
99
- producerAccessed$1(node);
100
+ producerAccessed(node);
100
101
  if (node.value === REQUIRED_UNSET_VALUE) {
101
102
  throw new RuntimeError(-950 /* RuntimeErrorCode.REQUIRED_INPUT_NO_VALUE */, ngDevMode && 'Input is required but no value is available yet.');
102
103
  }
103
104
  return node.value;
104
105
  }
105
- inputValueFn[SIGNAL$1] = node;
106
+ inputValueFn[SIGNAL] = node;
106
107
  if (ngDevMode) {
107
108
  inputValueFn.toString = () => `[Input Signal: ${inputValueFn()}]`;
108
109
  node.debugName = options?.debugName;
@@ -147,8 +148,6 @@ function makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {
147
148
  ? cls[ANNOTATIONS]
148
149
  : Object.defineProperty(cls, ANNOTATIONS, { value: [] })[ANNOTATIONS];
149
150
  annotations.push(annotationInstance);
150
- if (additionalProcessing)
151
- additionalProcessing(cls);
152
151
  return cls;
153
152
  };
154
153
  }
@@ -196,9 +195,6 @@ function makeParamDecorator(name, props, parentClass) {
196
195
  return cls;
197
196
  }
198
197
  }
199
- if (parentClass) {
200
- ParamDecoratorFactory.prototype = Object.create(parentClass.prototype);
201
- }
202
198
  ParamDecoratorFactory.prototype.ngMetadataName = name;
203
199
  ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;
204
200
  return ParamDecoratorFactory;
@@ -227,8 +223,6 @@ function makePropDecorator(name, props, parentClass, additionalProcessing) {
227
223
  : Object.defineProperty(constructor, PROP_METADATA, { value: {} })[PROP_METADATA];
228
224
  meta[name] = (meta.hasOwnProperty(name) && meta[name]) || [];
229
225
  meta[name].unshift(decoratorInstance);
230
- if (additionalProcessing)
231
- additionalProcessing(target, name, ...args);
232
226
  }
233
227
  return PropDecorator;
234
228
  }
@@ -250,25 +244,6 @@ function ngDevModeResetPerfCounters() {
250
244
  firstCreatePass: 0,
251
245
  tNode: 0,
252
246
  tView: 0,
253
- rendererCreateTextNode: 0,
254
- rendererSetText: 0,
255
- rendererCreateElement: 0,
256
- rendererAddEventListener: 0,
257
- rendererSetAttribute: 0,
258
- rendererRemoveAttribute: 0,
259
- rendererSetProperty: 0,
260
- rendererSetClassName: 0,
261
- rendererAddClass: 0,
262
- rendererRemoveClass: 0,
263
- rendererSetStyle: 0,
264
- rendererRemoveStyle: 0,
265
- rendererDestroy: 0,
266
- rendererDestroyNode: 0,
267
- rendererMoveNode: 0,
268
- rendererRemoveNode: 0,
269
- rendererAppendChild: 0,
270
- rendererInsertBefore: 0,
271
- rendererCreateComment: 0,
272
247
  hydratedNodes: 0,
273
248
  hydratedComponents: 0,
274
249
  dehydratedViewsRemoved: 0,
@@ -469,6 +444,8 @@ function isForwardRef(fn) {
469
444
  }
470
445
 
471
446
  // The functions in this file verify that the assumptions we are making
447
+ // about state in an instruction are correct before implementing any logic.
448
+ // They are meant only to be called in dev mode as sanity checks.
472
449
  function assertNumber(actual, msg) {
473
450
  if (!(typeof actual === 'number')) {
474
451
  throwError(msg, typeof actual, 'number', '===');
@@ -529,11 +506,6 @@ function assertGreaterThanOrEqual(actual, expected, msg) {
529
506
  throwError(msg, actual, expected, '>=');
530
507
  }
531
508
  }
532
- function assertNotDefined(actual, msg) {
533
- if (actual != null) {
534
- throwError(msg, actual, null, '==');
535
- }
536
- }
537
509
  function assertDefined(actual, msg) {
538
510
  if (actual == null) {
539
511
  throwError(msg, actual, null, '!=');
@@ -566,7 +538,7 @@ function assertOneOf(value, ...validValues) {
566
538
  throwError(`Expected value to be one of ${JSON.stringify(validValues)} but was ${JSON.stringify(value)}.`);
567
539
  }
568
540
  function assertNotReactive(fn) {
569
- if (getActiveConsumer$1() !== null) {
541
+ if (getActiveConsumer() !== null) {
570
542
  throwError(`${fn}() should never be called in a reactive context.`);
571
543
  }
572
544
  }
@@ -1013,31 +985,6 @@ function throwProviderNotFoundError(token, injectorName) {
1013
985
  throw new RuntimeError(-201 /* RuntimeErrorCode.PROVIDER_NOT_FOUND */, errorMessage);
1014
986
  }
1015
987
 
1016
- /**
1017
- * Injection flags for DI.
1018
- *
1019
- * @publicApi
1020
- * @deprecated use an options object for [`inject`](api/core/inject) instead.
1021
- */
1022
- var InjectFlags;
1023
- (function (InjectFlags) {
1024
- // TODO(alxhub): make this 'const' (and remove `InternalInjectFlags` enum) when ngc no longer
1025
- // writes exports of it into ngfactory files.
1026
- /** Check self and check parent injector if needed */
1027
- InjectFlags[InjectFlags["Default"] = 0] = "Default";
1028
- /**
1029
- * Specifies that an injector should retrieve a dependency from any injector until reaching the
1030
- * host element of the current component. (Only used with Element Injector)
1031
- */
1032
- InjectFlags[InjectFlags["Host"] = 1] = "Host";
1033
- /** Don't ascend to ancestors of the node requesting injection. */
1034
- InjectFlags[InjectFlags["Self"] = 2] = "Self";
1035
- /** Skip the node that is requesting injection. */
1036
- InjectFlags[InjectFlags["SkipSelf"] = 4] = "SkipSelf";
1037
- /** Inject `defaultValue` instead if token not found. */
1038
- InjectFlags[InjectFlags["Optional"] = 8] = "Optional";
1039
- })(InjectFlags || (InjectFlags = {}));
1040
-
1041
988
  /**
1042
989
  * Current implementation of inject.
1043
990
  *
@@ -1073,7 +1020,7 @@ function injectRootLimpMode(token, notFoundValue, flags) {
1073
1020
  ? (injectableDef.value = injectableDef.factory())
1074
1021
  : injectableDef.value;
1075
1022
  }
1076
- if (flags & InjectFlags.Optional)
1023
+ if (flags & 8 /* InternalInjectFlags.Optional */)
1077
1024
  return null;
1078
1025
  if (notFoundValue !== undefined)
1079
1026
  return notFoundValue;
@@ -1093,38 +1040,50 @@ function assertInjectImplementationNotEqual(fn) {
1093
1040
 
1094
1041
  const _THROW_IF_NOT_FOUND = {};
1095
1042
  const THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;
1096
- function getCurrentInjector() {
1097
- return di.getCurrentInjector();
1098
- }
1099
- function setCurrentInjector(injector) {
1100
- return di.setCurrentInjector(injector);
1101
- }
1102
1043
  /*
1103
1044
  * Name of a property (that we patch onto DI decorator), which is used as an annotation of which
1104
1045
  * InjectFlag this decorator represents. This allows to avoid direct references to the DI decorators
1105
1046
  * in the code, thus making them tree-shakable.
1106
1047
  */
1107
1048
  const DI_DECORATOR_FLAG = '__NG_DI_FLAG__';
1049
+ /**
1050
+ * A wrapper around an `Injector` that implements the `PrimitivesInjector` interface.
1051
+ *
1052
+ * This is used to allow the `inject` function to be used with the new primitives-based DI system.
1053
+ */
1054
+ class RetrievingInjector {
1055
+ injector;
1056
+ constructor(injector) {
1057
+ this.injector = injector;
1058
+ }
1059
+ retrieve(token, options) {
1060
+ const flags = convertToBitFlags(options) || 0 /* InternalInjectFlags.Default */;
1061
+ return this.injector.get(token,
1062
+ // When a dependency is requested with an optional flag, DI returns null as the default value.
1063
+ flags & 8 /* InternalInjectFlags.Optional */ ? null : undefined, flags);
1064
+ }
1065
+ }
1108
1066
  const NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';
1109
1067
  const NG_TOKEN_PATH = 'ngTokenPath';
1110
1068
  const NEW_LINE = /\n/gm;
1111
1069
  const NO_NEW_LINE = 'ɵ';
1112
1070
  const SOURCE = '__source';
1113
- function injectInjectorOnly(token, flags = InjectFlags.Default) {
1114
- if (getCurrentInjector() === undefined) {
1071
+ function injectInjectorOnly(token, flags = 0 /* InternalInjectFlags.Default */) {
1072
+ const currentInjector = getCurrentInjector();
1073
+ if (currentInjector === undefined) {
1115
1074
  throw new RuntimeError(-203 /* RuntimeErrorCode.MISSING_INJECTION_CONTEXT */, ngDevMode &&
1116
- `inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with \`runInInjectionContext\`.`);
1075
+ `The \`${stringify(token)}\` token injection failed. \`inject()\` function must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with \`runInInjectionContext\`.`);
1117
1076
  }
1118
- else if (getCurrentInjector() === null) {
1077
+ else if (currentInjector === null) {
1119
1078
  return injectRootLimpMode(token, undefined, flags);
1120
1079
  }
1121
1080
  else {
1122
- const value = getCurrentInjector().get(token, flags & InjectFlags.Optional ? null : undefined, flags);
1081
+ const value = currentInjector.retrieve(token, convertToInjectOptions(flags));
1123
1082
  ngDevMode && emitInjectEvent(token, value, flags);
1124
1083
  return value;
1125
1084
  }
1126
1085
  }
1127
- function ɵɵinject(token, flags = InjectFlags.Default) {
1086
+ function ɵɵinject(token, flags = 0 /* InternalInjectFlags.Default */) {
1128
1087
  return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);
1129
1088
  }
1130
1089
  /**
@@ -1208,10 +1167,10 @@ Please check that 1) the type for the parameter at index ${index} is correct and
1208
1167
  *
1209
1168
  * @publicApi
1210
1169
  */
1211
- function inject(token, flags = InjectFlags.Default) {
1170
+ function inject(token, options) {
1212
1171
  // The `as any` here _shouldn't_ be necessary, but without it JSCompiler
1213
1172
  // throws a disambiguation error due to the multiple signatures.
1214
- return ɵɵinject(token, convertToBitFlags(flags));
1173
+ return ɵɵinject(token, convertToBitFlags(options));
1215
1174
  }
1216
1175
  // Converts object-based DI flags (`InjectOptions`) to bit flags (`InjectFlags`).
1217
1176
  function convertToBitFlags(flags) {
@@ -1227,6 +1186,15 @@ function convertToBitFlags(flags) {
1227
1186
  (flags.self && 2 /* InternalInjectFlags.Self */) |
1228
1187
  (flags.skipSelf && 4 /* InternalInjectFlags.SkipSelf */));
1229
1188
  }
1189
+ // Converts bitflags to inject options
1190
+ function convertToInjectOptions(flags) {
1191
+ return {
1192
+ optional: !!(flags & 8 /* InternalInjectFlags.Optional */),
1193
+ host: !!(flags & 1 /* InternalInjectFlags.Host */),
1194
+ self: !!(flags & 2 /* InternalInjectFlags.Self */),
1195
+ skipSelf: !!(flags & 4 /* InternalInjectFlags.SkipSelf */),
1196
+ };
1197
+ }
1230
1198
  function injectArgs(types) {
1231
1199
  const args = [];
1232
1200
  for (let i = 0; i < types.length; i++) {
@@ -1236,7 +1204,7 @@ function injectArgs(types) {
1236
1204
  throw new RuntimeError(900 /* RuntimeErrorCode.INVALID_DIFFER_INPUT */, ngDevMode && 'Arguments array must have arguments.');
1237
1205
  }
1238
1206
  let type = undefined;
1239
- let flags = InjectFlags.Default;
1207
+ let flags = 0 /* InternalInjectFlags.Default */;
1240
1208
  for (let j = 0; j < arg.length; j++) {
1241
1209
  const meta = arg[j];
1242
1210
  const flag = getInjectFlag(meta);
@@ -1452,27 +1420,6 @@ function arraySplice(array, index, count) {
1452
1420
  array.pop(); // shrink the array
1453
1421
  }
1454
1422
  }
1455
- /**
1456
- * Same as `Array.splice(index, 0, value)` but faster.
1457
- *
1458
- * `Array.splice()` is not fast because it has to allocate an array for the elements which were
1459
- * removed. This causes memory pressure and slows down code when most of the time we don't
1460
- * care about the deleted items array.
1461
- *
1462
- * @param array Array to splice.
1463
- * @param index Index in array where the `value` should be added.
1464
- * @param value Value to add to array.
1465
- */
1466
- function arrayInsert(array, index, value) {
1467
- ngDevMode && assertLessThanOrEqual(index, array.length, "Can't insert past array end.");
1468
- let end = array.length;
1469
- while (end > index) {
1470
- const previousEnd = end - 1;
1471
- array[end] = array[previousEnd];
1472
- end = previousEnd;
1473
- }
1474
- array[index] = value;
1475
- }
1476
1423
  /**
1477
1424
  * Same as `Array.splice2(index, 0, value1, value2)` but faster.
1478
1425
  *
@@ -1509,22 +1456,6 @@ function arrayInsert2(array, index, value1, value2) {
1509
1456
  array[index + 1] = value2;
1510
1457
  }
1511
1458
  }
1512
- /**
1513
- * Get an index of an `value` in a sorted `array`.
1514
- *
1515
- * NOTE:
1516
- * - This uses binary search algorithm for fast removals.
1517
- *
1518
- * @param array A sorted array to binary search.
1519
- * @param value The value to look for.
1520
- * @returns index of the value.
1521
- * - positive index if value found.
1522
- * - negative index if value not found. (`~index` to get the value where it should have been
1523
- * located)
1524
- */
1525
- function arrayIndexOfSorted(array, value) {
1526
- return _arrayIndexOfSorted(array, value, 0);
1527
- }
1528
1459
  /**
1529
1460
  * Set a `value` for a `key`.
1530
1461
  *
@@ -1573,24 +1504,6 @@ function keyValueArrayGet(keyValueArray, key) {
1573
1504
  function keyValueArrayIndexOf(keyValueArray, key) {
1574
1505
  return _arrayIndexOfSorted(keyValueArray, key, 1);
1575
1506
  }
1576
- /**
1577
- * Delete a `key` (and `value`) from the `KeyValueArray`.
1578
- *
1579
- * @param keyValueArray to modify.
1580
- * @param key The key to locate or delete (if exist).
1581
- * @returns index of where the key was (or should have been.)
1582
- * - positive (even) index if key found and deleted.
1583
- * - negative index if key not found. (`~index` (even) to get the index where it should have
1584
- * been.)
1585
- */
1586
- function keyValueArrayDelete(keyValueArray, key) {
1587
- const index = keyValueArrayIndexOf(keyValueArray, key);
1588
- if (index >= 0) {
1589
- // if we found it remove it.
1590
- arraySplice(keyValueArray, index, 2);
1591
- }
1592
- return index;
1593
- }
1594
1507
  /**
1595
1508
  * INTERNAL: Get an index of an `value` in a sorted `array` by grouping search by `shift`.
1596
1509
  *
@@ -2105,7 +2018,13 @@ class R3Injector extends EnvironmentInjector {
2105
2018
  if (record != null && typeof record.value === 'string') {
2106
2019
  this.scopes.add(record.value);
2107
2020
  }
2108
- this.injectorDefTypes = new Set(this.get(INJECTOR_DEF_TYPES, EMPTY_ARRAY, InjectFlags.Self));
2021
+ this.injectorDefTypes = new Set(this.get(INJECTOR_DEF_TYPES, EMPTY_ARRAY, { self: true }));
2022
+ }
2023
+ retrieve(token, options) {
2024
+ const flags = convertToBitFlags(options) || 0 /* InternalInjectFlags.Default */;
2025
+ return this.get(token,
2026
+ // When a dependency is requested with an optional flag, DI returns null as the default value.
2027
+ flags & 8 /* InternalInjectFlags.Optional */ ? null : undefined, flags);
2109
2028
  }
2110
2029
  /**
2111
2030
  * Destroy the injector and release references to every instance or provider associated with it.
@@ -2117,7 +2036,7 @@ class R3Injector extends EnvironmentInjector {
2117
2036
  assertNotDestroyed(this);
2118
2037
  // Set destroyed = true first, in case lifecycle hooks re-enter destroy().
2119
2038
  this._destroyed = true;
2120
- const prevConsumer = setActiveConsumer$1(null);
2039
+ const prevConsumer = setActiveConsumer(null);
2121
2040
  try {
2122
2041
  // Call all the lifecycle hooks.
2123
2042
  for (const service of this._ngOnDestroyHooks) {
@@ -2136,7 +2055,7 @@ class R3Injector extends EnvironmentInjector {
2136
2055
  this.records.clear();
2137
2056
  this._ngOnDestroyHooks.clear();
2138
2057
  this.injectorDefTypes.clear();
2139
- setActiveConsumer$1(prevConsumer);
2058
+ setActiveConsumer(prevConsumer);
2140
2059
  }
2141
2060
  }
2142
2061
  onDestroy(callback) {
@@ -2161,12 +2080,12 @@ class R3Injector extends EnvironmentInjector {
2161
2080
  ngDevMode && setInjectorProfilerContext(prevInjectContext);
2162
2081
  }
2163
2082
  }
2164
- get(token, notFoundValue = THROW_IF_NOT_FOUND, flags = InjectFlags.Default) {
2083
+ get(token, notFoundValue = THROW_IF_NOT_FOUND, options) {
2165
2084
  assertNotDestroyed(this);
2166
2085
  if (token.hasOwnProperty(NG_ENV_ID)) {
2167
2086
  return token[NG_ENV_ID](this);
2168
2087
  }
2169
- flags = convertToBitFlags(flags);
2088
+ const flags = convertToBitFlags(options);
2170
2089
  // Set the injection context.
2171
2090
  let prevInjectContext;
2172
2091
  if (ngDevMode) {
@@ -2176,7 +2095,7 @@ class R3Injector extends EnvironmentInjector {
2176
2095
  const previousInjectImplementation = setInjectImplementation(undefined);
2177
2096
  try {
2178
2097
  // Check for the SkipSelf flag.
2179
- if (!(flags & InjectFlags.SkipSelf)) {
2098
+ if (!(flags & 4 /* InternalInjectFlags.SkipSelf */)) {
2180
2099
  // SkipSelf isn't set, check if the record belongs to this injector.
2181
2100
  let record = this.records.get(token);
2182
2101
  if (record === undefined) {
@@ -2205,11 +2124,13 @@ class R3Injector extends EnvironmentInjector {
2205
2124
  }
2206
2125
  // Select the next injector based on the Self flag - if self is set, the next injector is
2207
2126
  // the NullInjector, otherwise it's the parent.
2208
- const nextInjector = !(flags & InjectFlags.Self) ? this.parent : getNullInjector();
2127
+ const nextInjector = !(flags & 2 /* InternalInjectFlags.Self */) ? this.parent : getNullInjector();
2209
2128
  // Set the notFoundValue based on the Optional flag - if optional is set and notFoundValue
2210
2129
  // is undefined, the value is null, otherwise it's the notFoundValue.
2211
2130
  notFoundValue =
2212
- flags & InjectFlags.Optional && notFoundValue === THROW_IF_NOT_FOUND ? null : notFoundValue;
2131
+ flags & 8 /* InternalInjectFlags.Optional */ && notFoundValue === THROW_IF_NOT_FOUND
2132
+ ? null
2133
+ : notFoundValue;
2213
2134
  return nextInjector.get(token, notFoundValue);
2214
2135
  }
2215
2136
  catch (e) {
@@ -2238,7 +2159,7 @@ class R3Injector extends EnvironmentInjector {
2238
2159
  }
2239
2160
  /** @internal */
2240
2161
  resolveInjectorInitializers() {
2241
- const prevConsumer = setActiveConsumer$1(null);
2162
+ const prevConsumer = setActiveConsumer(null);
2242
2163
  const previousInjector = setCurrentInjector(this);
2243
2164
  const previousInjectImplementation = setInjectImplementation(undefined);
2244
2165
  let prevInjectContext;
@@ -2246,7 +2167,7 @@ class R3Injector extends EnvironmentInjector {
2246
2167
  prevInjectContext = setInjectorProfilerContext({ injector: this, token: null });
2247
2168
  }
2248
2169
  try {
2249
- const initializers = this.get(ENVIRONMENT_INITIALIZER, EMPTY_ARRAY, InjectFlags.Self);
2170
+ const initializers = this.get(ENVIRONMENT_INITIALIZER, EMPTY_ARRAY, { self: true });
2250
2171
  if (ngDevMode && !Array.isArray(initializers)) {
2251
2172
  throw new RuntimeError(-209 /* RuntimeErrorCode.INVALID_MULTI_PROVIDER */, 'Unexpected type of the `ENVIRONMENT_INITIALIZER` token value ' +
2252
2173
  `(expected an array, but got ${typeof initializers}). ` +
@@ -2261,7 +2182,7 @@ class R3Injector extends EnvironmentInjector {
2261
2182
  setCurrentInjector(previousInjector);
2262
2183
  setInjectImplementation(previousInjectImplementation);
2263
2184
  ngDevMode && setInjectorProfilerContext(prevInjectContext);
2264
- setActiveConsumer$1(prevConsumer);
2185
+ setActiveConsumer(prevConsumer);
2265
2186
  }
2266
2187
  }
2267
2188
  toString() {
@@ -2325,7 +2246,7 @@ class R3Injector extends EnvironmentInjector {
2325
2246
  this.records.set(token, record);
2326
2247
  }
2327
2248
  hydrate(token, record) {
2328
- const prevConsumer = setActiveConsumer$1(null);
2249
+ const prevConsumer = setActiveConsumer(null);
2329
2250
  try {
2330
2251
  if (record.value === CIRCULAR) {
2331
2252
  throwCyclicDependencyError(stringify(token));
@@ -2349,7 +2270,7 @@ class R3Injector extends EnvironmentInjector {
2349
2270
  return record.value;
2350
2271
  }
2351
2272
  finally {
2352
- setActiveConsumer$1(prevConsumer);
2273
+ setActiveConsumer(prevConsumer);
2353
2274
  }
2354
2275
  }
2355
2276
  injectableDefInScope(def) {
@@ -2511,14 +2432,19 @@ function forEachSingleProvider(providers, fn) {
2511
2432
  * @publicApi
2512
2433
  */
2513
2434
  function runInInjectionContext(injector, fn) {
2435
+ let internalInjector;
2514
2436
  if (injector instanceof R3Injector) {
2515
2437
  assertNotDestroyed(injector);
2438
+ internalInjector = injector;
2439
+ }
2440
+ else {
2441
+ internalInjector = new RetrievingInjector(injector);
2516
2442
  }
2517
2443
  let prevInjectorProfilerContext;
2518
2444
  if (ngDevMode) {
2519
2445
  prevInjectorProfilerContext = setInjectorProfilerContext({ injector, token: null });
2520
2446
  }
2521
- const prevInjector = setCurrentInjector(injector);
2447
+ const prevInjector = setCurrentInjector(internalInjector);
2522
2448
  const previousInjectImplementation = setInjectImplementation(undefined);
2523
2449
  try {
2524
2450
  return fn();
@@ -3028,9 +2954,6 @@ function assertNgModuleType(actual, msg = "Type passed in is not NgModuleType, i
3028
2954
  throwError(msg);
3029
2955
  }
3030
2956
  }
3031
- function assertCurrentTNodeIsParent(isParent) {
3032
- assertEqual(isParent, true, 'currentTNode should be a parent');
3033
- }
3034
2957
  function assertHasParent(tNode) {
3035
2958
  assertDefined(tNode, 'currentTNode should exist!');
3036
2959
  assertDefined(tNode.parent, 'currentTNode should have a parent');
@@ -3050,7 +2973,7 @@ function assertFirstCreatePass(tView, errMessage) {
3050
2973
  assertEqual(tView.firstCreatePass, true, errMessage || 'Should only be called in first create pass.');
3051
2974
  }
3052
2975
  function assertFirstUpdatePass(tView, errMessage) {
3053
- assertEqual(tView.firstUpdatePass, true, errMessage || 'Should only be called in first update pass.');
2976
+ assertEqual(tView.firstUpdatePass, true, 'Should only be called in first update pass.');
3054
2977
  }
3055
2978
  /**
3056
2979
  * This is a basic sanity check that an object is probably a directive def. DirectiveDef is
@@ -3075,25 +2998,10 @@ function assertBetween(lower, upper, index) {
3075
2998
  }
3076
2999
  function assertProjectionSlots(lView, errMessage) {
3077
3000
  assertDefined(lView[DECLARATION_COMPONENT_VIEW], 'Component views should exist.');
3078
- assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, errMessage ||
3079
- 'Components with projection nodes (<ng-content>) must have projection slots defined.');
3001
+ assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, 'Components with projection nodes (<ng-content>) must have projection slots defined.');
3080
3002
  }
3081
3003
  function assertParentView(lView, errMessage) {
3082
- assertDefined(lView, errMessage || "Component views should always have a parent view (component's host view)");
3083
- }
3084
- function assertNoDuplicateDirectives$1(directives) {
3085
- // The array needs at least two elements in order to have duplicates.
3086
- if (directives.length < 2) {
3087
- return;
3088
- }
3089
- const seenDirectives = new Set();
3090
- for (const current of directives) {
3091
- if (seenDirectives.has(current)) {
3092
- throw new RuntimeError(309 /* RuntimeErrorCode.DUPLICATE_DIRECTIVE */, `Directive ${current.type.name} matches multiple times on the same element. ` +
3093
- `Directives can only match an element once.`);
3094
- }
3095
- seenDirectives.add(current);
3096
- }
3004
+ assertDefined(lView, "Component views should always have a parent view (component's host view)");
3097
3005
  }
3098
3006
  /**
3099
3007
  * This is a basic sanity check that the `injectorIndex` seems to point to what looks like a
@@ -3559,14 +3467,6 @@ let _checkNoChangesMode = 0; /* CheckNoChangesMode.Off */
3559
3467
  * @see detectChangesInViewWhileDirty
3560
3468
  */
3561
3469
  let _isRefreshingViews = false;
3562
- /**
3563
- * Returns true if the instruction state stack is empty.
3564
- *
3565
- * Intended to be called from tests only (tree shaken otherwise).
3566
- */
3567
- function specOnlyIsInstructionStateEmpty() {
3568
- return instructionState.lFrame.parent === null;
3569
- }
3570
3470
  function getElementDepthCount() {
3571
3471
  return instructionState.lFrame.elementDepthCount;
3572
3472
  }
@@ -3855,14 +3755,14 @@ function getDeclarationTNode(lView) {
3855
3755
  */
3856
3756
  function enterDI(lView, tNode, flags) {
3857
3757
  ngDevMode && assertLViewOrUndefined(lView);
3858
- if (flags & InjectFlags.SkipSelf) {
3758
+ if (flags & 4 /* InternalInjectFlags.SkipSelf */) {
3859
3759
  ngDevMode && assertTNodeForTView(tNode, lView[TVIEW]);
3860
3760
  let parentTNode = tNode;
3861
3761
  let parentLView = lView;
3862
3762
  while (true) {
3863
3763
  ngDevMode && assertDefined(parentTNode, 'Parent TNode should be defined');
3864
3764
  parentTNode = parentTNode.parent;
3865
- if (parentTNode === null && !(flags & InjectFlags.Host)) {
3765
+ if (parentTNode === null && !(flags & 1 /* InternalInjectFlags.Host */)) {
3866
3766
  parentTNode = getDeclarationTNode(parentLView);
3867
3767
  if (parentTNode === null)
3868
3768
  break;
@@ -4288,12 +4188,12 @@ function callHooks(currentView, arr, initPhase, currentNodeIndex) {
4288
4188
  */
4289
4189
  function callHookInternal(directive, hook) {
4290
4190
  profiler(4 /* ProfilerEvent.LifecycleHookStart */, directive, hook);
4291
- const prevConsumer = setActiveConsumer$1(null);
4191
+ const prevConsumer = setActiveConsumer(null);
4292
4192
  try {
4293
4193
  hook.call(directive);
4294
4194
  }
4295
4195
  finally {
4296
- setActiveConsumer$1(prevConsumer);
4196
+ setActiveConsumer(prevConsumer);
4297
4197
  profiler(5 /* ProfilerEvent.LifecycleHookEnd */, directive, hook);
4298
4198
  }
4299
4199
  }
@@ -4660,7 +4560,6 @@ function setUpAttributes(renderer, native, attrs) {
4660
4560
  const namespaceURI = attrs[i++];
4661
4561
  const attrName = attrs[i++];
4662
4562
  const attrVal = attrs[i++];
4663
- ngDevMode && ngDevMode.rendererSetAttribute++;
4664
4563
  renderer.setAttribute(native, attrName, attrVal, namespaceURI);
4665
4564
  }
4666
4565
  else {
@@ -4668,7 +4567,6 @@ function setUpAttributes(renderer, native, attrs) {
4668
4567
  const attrName = value;
4669
4568
  const attrVal = attrs[++i];
4670
4569
  // Standard attributes
4671
- ngDevMode && ngDevMode.rendererSetAttribute++;
4672
4570
  if (isAnimationProp(attrName)) {
4673
4571
  renderer.setProperty(native, attrName, attrVal);
4674
4572
  }
@@ -4711,9 +4609,7 @@ function isAnimationProp(name) {
4711
4609
  * @param src `TAttributes` which should be appended to `dst`
4712
4610
  */
4713
4611
  function mergeHostAttrs(dst, src) {
4714
- if (src === null || src.length === 0) {
4715
- // do nothing
4716
- }
4612
+ if (src === null || src.length === 0) ;
4717
4613
  else if (dst === null || dst.length === 0) {
4718
4614
  // We have source, but dst is empty, just make a copy.
4719
4615
  dst = src.slice();
@@ -4726,9 +4622,7 @@ function mergeHostAttrs(dst, src) {
4726
4622
  srcMarker = item;
4727
4623
  }
4728
4624
  else {
4729
- if (srcMarker === 0 /* AttributeMarker.NamespaceURI */) {
4730
- // Case where we need to consume `key1`, `key2`, `value` items.
4731
- }
4625
+ if (srcMarker === 0 /* AttributeMarker.NamespaceURI */) ;
4732
4626
  else if (srcMarker === -1 /* AttributeMarker.ImplicitAttributes */ ||
4733
4627
  srcMarker === 2 /* AttributeMarker.Styles */) {
4734
4628
  // Case where we have to consume `key1` and `value` only.
@@ -4786,21 +4680,15 @@ function mergeHostAttribute(dst, marker, key1, key2, value) {
4786
4680
  }
4787
4681
  else if (item === key1) {
4788
4682
  // We already have same token
4789
- if (key2 === null) {
4683
+ {
4790
4684
  if (value !== null) {
4791
4685
  dst[i + 1] = value;
4792
4686
  }
4793
4687
  return;
4794
4688
  }
4795
- else if (key2 === dst[i + 1]) {
4796
- dst[i + 2] = value;
4797
- return;
4798
- }
4799
4689
  }
4800
4690
  // Increment counter.
4801
4691
  i++;
4802
- if (key2 !== null)
4803
- i++;
4804
4692
  if (value !== null)
4805
4693
  i++;
4806
4694
  }
@@ -4810,9 +4698,6 @@ function mergeHostAttribute(dst, marker, key1, key2, value) {
4810
4698
  i = markerInsertPosition + 1;
4811
4699
  }
4812
4700
  dst.splice(i++, 0, key1);
4813
- if (key2 !== null) {
4814
- dst.splice(i++, 0, key2);
4815
- }
4816
4701
  if (value !== null) {
4817
4702
  dst.splice(i++, 0, value);
4818
4703
  }
@@ -4848,9 +4733,8 @@ class ChainedInjector {
4848
4733
  this.injector = injector;
4849
4734
  this.parentInjector = parentInjector;
4850
4735
  }
4851
- get(token, notFoundValue, flags) {
4852
- flags = convertToBitFlags(flags);
4853
- const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
4736
+ get(token, notFoundValue, options) {
4737
+ const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, options);
4854
4738
  if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
4855
4739
  notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
4856
4740
  // Return the value from the root element injector when
@@ -4860,7 +4744,7 @@ class ChainedInjector {
4860
4744
  // (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
4861
4745
  return value;
4862
4746
  }
4863
- return this.parentInjector.get(token, notFoundValue, flags);
4747
+ return this.parentInjector.get(token, notFoundValue, options);
4864
4748
  }
4865
4749
  }
4866
4750
 
@@ -5184,7 +5068,7 @@ function injectAttributeImpl(tNode, attrNameToInject) {
5184
5068
  return null;
5185
5069
  }
5186
5070
  function notFoundValueOrThrow(notFoundValue, token, flags) {
5187
- if (flags & InjectFlags.Optional || notFoundValue !== undefined) {
5071
+ if (flags & 8 /* InternalInjectFlags.Optional */ || notFoundValue !== undefined) {
5188
5072
  return notFoundValue;
5189
5073
  }
5190
5074
  else {
@@ -5197,15 +5081,15 @@ function notFoundValueOrThrow(notFoundValue, token, flags) {
5197
5081
  * @param lView The `LView` that contains the `tNode`
5198
5082
  * @param token The token to look for
5199
5083
  * @param flags Injection flags
5200
- * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
5084
+ * @param notFoundValue The value to return when the injection flags is `InternalInjectFlags.Optional`
5201
5085
  * @returns the value from the injector or throws an exception
5202
5086
  */
5203
5087
  function lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {
5204
- if (flags & InjectFlags.Optional && notFoundValue === undefined) {
5088
+ if (flags & 8 /* InternalInjectFlags.Optional */ && notFoundValue === undefined) {
5205
5089
  // This must be set or the NullInjector will throw for optional deps
5206
5090
  notFoundValue = null;
5207
5091
  }
5208
- if ((flags & (InjectFlags.Self | InjectFlags.Host)) === 0) {
5092
+ if ((flags & (2 /* InternalInjectFlags.Self */ | 1 /* InternalInjectFlags.Host */)) === 0) {
5209
5093
  const moduleInjector = lView[INJECTOR];
5210
5094
  // switch to `injectInjectorOnly` implementation for module injector, since module injector
5211
5095
  // should not have access to Component/Directive DI scope (that may happen through
@@ -5213,10 +5097,10 @@ function lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {
5213
5097
  const previousInjectImplementation = setInjectImplementation(undefined);
5214
5098
  try {
5215
5099
  if (moduleInjector) {
5216
- return moduleInjector.get(token, notFoundValue, flags & InjectFlags.Optional);
5100
+ return moduleInjector.get(token, notFoundValue, flags & 8 /* InternalInjectFlags.Optional */);
5217
5101
  }
5218
5102
  else {
5219
- return injectRootLimpMode(token, notFoundValue, flags & InjectFlags.Optional);
5103
+ return injectRootLimpMode(token, notFoundValue, flags & 8 /* InternalInjectFlags.Optional */);
5220
5104
  }
5221
5105
  }
5222
5106
  finally {
@@ -5238,17 +5122,17 @@ function lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {
5238
5122
  * @param lView The `LView` that contains the `tNode`
5239
5123
  * @param token The token to look for
5240
5124
  * @param flags Injection flags
5241
- * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
5125
+ * @param notFoundValue The value to return when the injection flags is `InternalInjectFlags.Optional`
5242
5126
  * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
5243
5127
  */
5244
- function getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default, notFoundValue) {
5128
+ function getOrCreateInjectable(tNode, lView, token, flags = 0 /* InternalInjectFlags.Default */, notFoundValue) {
5245
5129
  if (tNode !== null) {
5246
5130
  // If the view or any of its ancestors have an embedded
5247
5131
  // view injector, we have to look it up there first.
5248
5132
  if (lView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */ &&
5249
5133
  // The token must be present on the current node injector when the `Self`
5250
5134
  // flag is set, so the lookup on embedded view injector(s) can be skipped.
5251
- !(flags & InjectFlags.Self)) {
5135
+ !(flags & 2 /* InternalInjectFlags.Self */)) {
5252
5136
  const embeddedInjectorValue = lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, NOT_FOUND);
5253
5137
  if (embeddedInjectorValue !== NOT_FOUND) {
5254
5138
  return embeddedInjectorValue;
@@ -5270,7 +5154,7 @@ function getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default,
5270
5154
  * @param lView The `LView` that contains the `tNode`
5271
5155
  * @param token The token to look for
5272
5156
  * @param flags Injection flags
5273
- * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
5157
+ * @param notFoundValue The value to return when the injection flags is `InternalInjectFlags.Optional`
5274
5158
  * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
5275
5159
  */
5276
5160
  function lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue) {
@@ -5281,7 +5165,7 @@ function lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue)
5281
5165
  if (!enterDI(lView, tNode, flags)) {
5282
5166
  // Failed to enter DI, try module injector instead. If a token is injected with the @Host
5283
5167
  // flag, the module injector is not searched for that token in Ivy.
5284
- return flags & InjectFlags.Host
5168
+ return flags & 1 /* InternalInjectFlags.Host */
5285
5169
  ? notFoundValueOrThrow(notFoundValue, token, flags)
5286
5170
  : lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
5287
5171
  }
@@ -5297,7 +5181,7 @@ function lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue)
5297
5181
  else {
5298
5182
  value = bloomHash(flags);
5299
5183
  }
5300
- if (value == null && !(flags & InjectFlags.Optional)) {
5184
+ if (value == null && !(flags & 8 /* InternalInjectFlags.Optional */)) {
5301
5185
  throwProviderNotFoundError(token);
5302
5186
  }
5303
5187
  else {
@@ -5315,10 +5199,10 @@ function lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue)
5315
5199
  let previousTView = null;
5316
5200
  let injectorIndex = getInjectorIndex(tNode, lView);
5317
5201
  let parentLocation = NO_PARENT_INJECTOR;
5318
- let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
5202
+ let hostTElementNode = flags & 1 /* InternalInjectFlags.Host */ ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
5319
5203
  // If we should skip this injector, or if there is no injector on this node, start by
5320
5204
  // searching the parent injector.
5321
- if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
5205
+ if (injectorIndex === -1 || flags & 4 /* InternalInjectFlags.SkipSelf */) {
5322
5206
  parentLocation =
5323
5207
  injectorIndex === -1
5324
5208
  ? getParentInjectorLocation(tNode, lView)
@@ -5392,7 +5276,7 @@ function searchTokensOnInjector(injectorIndex, lView, token, previousTView, flag
5392
5276
  previousTView != currentTView && (tNode.type & 3 /* TNodeType.AnyRNode */) !== 0;
5393
5277
  // This special case happens when there is a @host on the inject and when we are searching
5394
5278
  // on the host element node.
5395
- const isHostSpecialCase = flags & InjectFlags.Host && hostTElementNode === tNode;
5279
+ const isHostSpecialCase = flags & 1 /* InternalInjectFlags.Host */ && hostTElementNode === tNode;
5396
5280
  const injectableIdx = locateDirectiveOrProvider(tNode, currentTView, token, canAccessViewProviders, isHostSpecialCase);
5397
5281
  if (injectableIdx !== null) {
5398
5282
  return getNodeInjectable(lView, currentTView, injectableIdx, tNode);
@@ -5468,7 +5352,7 @@ function getNodeInjectable(lView, tView, index, tNode) {
5468
5352
  const previousInjectImplementation = factory.injectImpl
5469
5353
  ? setInjectImplementation(factory.injectImpl)
5470
5354
  : null;
5471
- const success = enterDI(lView, tNode, InjectFlags.Default);
5355
+ const success = enterDI(lView, tNode, 0 /* InternalInjectFlags.Default */);
5472
5356
  ngDevMode &&
5473
5357
  assertEqual(success, true, "Because flags do not contain `SkipSelf' we expect this to always succeed.");
5474
5358
  try {
@@ -5547,7 +5431,7 @@ function bloomHasToken(bloomHash, injectorIndex, injectorView) {
5547
5431
  }
5548
5432
  /** Returns true if flags prevent parent injector from being searched for tokens */
5549
5433
  function shouldSearchParent(flags, isFirstHostTNode) {
5550
- return !(flags & InjectFlags.Self) && !(flags & InjectFlags.Host && isFirstHostTNode);
5434
+ return (!(flags & 2 /* InternalInjectFlags.Self */) && !(flags & 1 /* InternalInjectFlags.Host */ && isFirstHostTNode));
5551
5435
  }
5552
5436
  function getNodeInjectorLView(nodeInjector) {
5553
5437
  return nodeInjector._lView;
@@ -5615,7 +5499,7 @@ function getFactoryOf(type) {
5615
5499
  * @param lView The `LView` that contains the `tNode`
5616
5500
  * @param token The token to look for
5617
5501
  * @param flags Injection flags
5618
- * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
5502
+ * @param notFoundValue The value to return when the injection flags is `InternalInjectFlags.Optional`
5619
5503
  * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
5620
5504
  */
5621
5505
  function lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundValue) {
@@ -5635,7 +5519,7 @@ function lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundVa
5635
5519
  // Note that this lookup on the node injector is using the `Self` flag, because
5636
5520
  // we don't want the node injector to look at any parent injectors since we
5637
5521
  // may hit the embedded view injector first.
5638
- const nodeInjectorValue = lookupTokenUsingNodeInjector(currentTNode, currentLView, token, flags | InjectFlags.Self, NOT_FOUND);
5522
+ const nodeInjectorValue = lookupTokenUsingNodeInjector(currentTNode, currentLView, token, flags | 2 /* InternalInjectFlags.Self */, NOT_FOUND);
5639
5523
  if (nodeInjectorValue !== NOT_FOUND) {
5640
5524
  return nodeInjectorValue;
5641
5525
  }
@@ -6002,7 +5886,7 @@ HOST_TAG_NAME.__NG_ELEMENT_ID__ = (flags) => {
6002
5886
  if (tNode.type & 2 /* TNodeType.Element */) {
6003
5887
  return tNode.value;
6004
5888
  }
6005
- if (flags & InjectFlags.Optional) {
5889
+ if (flags & 8 /* InternalInjectFlags.Optional */) {
6006
5890
  return null;
6007
5891
  }
6008
5892
  throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode &&
@@ -6024,29 +5908,6 @@ function getDevModeNodeName(tNode) {
6024
5908
  }
6025
5909
  }
6026
5910
 
6027
- /**
6028
- * @module
6029
- * @description
6030
- * The `di` module provides dependency injection container services.
6031
- */
6032
-
6033
- /**
6034
- * This file should not be necessary because node resolution should just default to `./di/index`!
6035
- *
6036
- * However it does not seem to work and it breaks:
6037
- * - //packages/animations/browser/test:test_web_chromium-local
6038
- * - //packages/compiler-cli/test:extract_i18n
6039
- * - //packages/compiler-cli/test:ngc
6040
- * - //packages/compiler-cli/test:perform_watch
6041
- * - //packages/compiler-cli/test/diagnostics:check_types
6042
- * - //packages/compiler-cli/test/transformers:test
6043
- * - //packages/compiler/test:test
6044
- * - //tools/public_api_guard:core_api
6045
- *
6046
- * Remove this file once the above is solved or wait until `ngc` is deleted and then it should be
6047
- * safe to delete this file.
6048
- */
6049
-
6050
5911
  /**
6051
5912
  * Provides a hook for centralized exception handling.
6052
5913
  *
@@ -6178,14 +6039,15 @@ class OutputEmitterRef {
6178
6039
  /** Emits a new value to the output. */
6179
6040
  emit(value) {
6180
6041
  if (this.destroyed) {
6181
- throw new RuntimeError(953 /* RuntimeErrorCode.OUTPUT_REF_DESTROYED */, ngDevMode &&
6042
+ console.warn(formatRuntimeError(953 /* RuntimeErrorCode.OUTPUT_REF_DESTROYED */, ngDevMode &&
6182
6043
  'Unexpected emit for destroyed `OutputRef`. ' +
6183
- 'The owning directive/component is destroyed.');
6044
+ 'The owning directive/component is destroyed.'));
6045
+ return;
6184
6046
  }
6185
6047
  if (this.listeners === null) {
6186
6048
  return;
6187
6049
  }
6188
- const previousConsumer = setActiveConsumer$1(null);
6050
+ const previousConsumer = setActiveConsumer(null);
6189
6051
  try {
6190
6052
  for (const listenerFn of this.listeners) {
6191
6053
  try {
@@ -6197,7 +6059,7 @@ class OutputEmitterRef {
6197
6059
  }
6198
6060
  }
6199
6061
  finally {
6200
- setActiveConsumer$1(previousConsumer);
6062
+ setActiveConsumer(previousConsumer);
6201
6063
  }
6202
6064
  }
6203
6065
  }
@@ -6385,11 +6247,9 @@ function unwrapElementRef(value) {
6385
6247
  * Checks if the given `value` is a reactive `Signal`.
6386
6248
  */
6387
6249
  function isSignal(value) {
6388
- return typeof value === 'function' && value[SIGNAL$1] !== undefined;
6250
+ return typeof value === 'function' && value[SIGNAL] !== undefined;
6389
6251
  }
6390
6252
 
6391
- /** Symbol used distinguish `WritableSignal` from other non-writable signals and functions. */
6392
- const ɵWRITABLE_SIGNAL = /* @__PURE__ */ Symbol('WRITABLE_SIGNAL');
6393
6253
  /**
6394
6254
  * Utility function used during template type checking to extract the value from a `WritableSignal`.
6395
6255
  * @codeGenApi
@@ -6403,13 +6263,13 @@ function ɵunwrapWritableSignal(value) {
6403
6263
  * Create a `Signal` that can be set or updated directly.
6404
6264
  */
6405
6265
  function signal(initialValue, options) {
6406
- const signalFn = createSignal$1(initialValue);
6407
- const node = signalFn[SIGNAL$1];
6266
+ const signalFn = createSignal(initialValue);
6267
+ const node = signalFn[SIGNAL];
6408
6268
  if (options?.equal) {
6409
6269
  node.equal = options.equal;
6410
6270
  }
6411
- signalFn.set = (newValue) => signalSetFn$1(node, newValue);
6412
- signalFn.update = (updateFn) => signalUpdateFn$1(node, updateFn);
6271
+ signalFn.set = (newValue) => signalSetFn(node, newValue);
6272
+ signalFn.update = (updateFn) => signalUpdateFn(node, updateFn);
6413
6273
  signalFn.asReadonly = signalAsReadonlyFn.bind(signalFn);
6414
6274
  if (ngDevMode) {
6415
6275
  signalFn.toString = () => `[Signal: ${signalFn()}]`;
@@ -6418,10 +6278,10 @@ function signal(initialValue, options) {
6418
6278
  return signalFn;
6419
6279
  }
6420
6280
  function signalAsReadonlyFn() {
6421
- const node = this[SIGNAL$1];
6281
+ const node = this[SIGNAL];
6422
6282
  if (node.readonlyFn === undefined) {
6423
6283
  const readonlyFn = () => this();
6424
- readonlyFn[SIGNAL$1] = node;
6284
+ readonlyFn[SIGNAL] = node;
6425
6285
  node.readonlyFn = readonlyFn;
6426
6286
  }
6427
6287
  return node.readonlyFn;
@@ -6899,20 +6759,6 @@ function getComponentViewByInstance(componentInstance) {
6899
6759
  * This property will be monkey-patched on elements, components and directives.
6900
6760
  */
6901
6761
  const MONKEY_PATCH_KEY_NAME = '__ngContext__';
6902
- function attachLViewId(target, data) {
6903
- target[MONKEY_PATCH_KEY_NAME] = data[ID];
6904
- }
6905
- /**
6906
- * Returns the monkey-patch value data present on the target (which could be
6907
- * a component, directive or a DOM node).
6908
- */
6909
- function readLView(target) {
6910
- const data = readPatchedData(target);
6911
- if (isLView(data)) {
6912
- return data;
6913
- }
6914
- return data ? data.lView : null;
6915
- }
6916
6762
  /**
6917
6763
  * Assigns the given data to the given target (which could be a component,
6918
6764
  * directive or DOM node instance) using monkey-patching.
@@ -7378,20 +7224,6 @@ function getLocalRefs(target) {
7378
7224
  function getHostElement(componentOrDirective) {
7379
7225
  return getLContext(componentOrDirective).native;
7380
7226
  }
7381
- /**
7382
- * Retrieves the rendered text for a given component.
7383
- *
7384
- * This function retrieves the host element of a component and
7385
- * and then returns the `textContent` for that element. This implies
7386
- * that the text returned will include re-projected content of
7387
- * the component as well.
7388
- *
7389
- * @param component The component to return the content text for.
7390
- */
7391
- function getRenderedText(component) {
7392
- const hostElement = getHostElement(component);
7393
- return hostElement.textContent || '';
7394
- }
7395
7227
  /**
7396
7228
  * Retrieves a list of event listeners associated with a DOM element. The list does include host
7397
7229
  * listeners, but it does not include event listeners defined outside of the Angular context
@@ -7470,23 +7302,6 @@ function isDirectiveDefHack(obj) {
7470
7302
  obj.declaredInputs !== undefined &&
7471
7303
  obj.findHostDirectiveDefs !== undefined);
7472
7304
  }
7473
- /**
7474
- * Retrieve the component `LView` from component/element.
7475
- *
7476
- * NOTE: `LView` is a private and should not be leaked outside.
7477
- * Don't export this method to `ng.*` on window.
7478
- *
7479
- * @param target DOM element or component instance for which to retrieve the LView.
7480
- */
7481
- function getComponentLView(target) {
7482
- const lContext = getLContext(target);
7483
- const nodeIndx = lContext.nodeIndex;
7484
- const lView = lContext.lView;
7485
- ngDevMode && assertLView(lView);
7486
- const componentLView = lView[nodeIndx];
7487
- ngDevMode && assertLView(componentLView);
7488
- return componentLView;
7489
- }
7490
7305
  /** Asserts that a value is a DOM Element. */
7491
7306
  function assertDomElement(value) {
7492
7307
  if (typeof Element !== 'undefined' && !(value instanceof Element)) {
@@ -7702,7 +7517,7 @@ function makeStateKey(key) {
7702
7517
  }
7703
7518
  function initTransferState() {
7704
7519
  const transferState = new TransferState();
7705
- if (inject(PLATFORM_ID) === 'browser') {
7520
+ if (typeof ngServerMode === 'undefined' || !ngServerMode) {
7706
7521
  transferState.store = retrieveTransferredState(getDocument(), inject(APP_ID));
7707
7522
  }
7708
7523
  return transferState;
@@ -7829,7 +7644,6 @@ const DEFER_BLOCK_ID = 'di';
7829
7644
  const DEFER_BLOCK_STATE$1 = 's';
7830
7645
  const DEFER_PARENT_BLOCK_ID = 'p';
7831
7646
  const DEFER_HYDRATE_TRIGGERS = 't';
7832
- const DEFER_PREFETCH_TRIGGERS = 'pt';
7833
7647
 
7834
7648
  /**
7835
7649
  * Internal token that specifies whether DOM reuse logic
@@ -7910,7 +7724,7 @@ function performanceMarkFeature(feature) {
7910
7724
  function assertNotInReactiveContext(debugFn, extraContext) {
7911
7725
  // Taking a `Function` instead of a string name here prevents the un-minified name of the function
7912
7726
  // from being retained in the bundle regardless of minification.
7913
- if (getActiveConsumer$1() !== null) {
7727
+ if (getActiveConsumer() !== null) {
7914
7728
  throw new RuntimeError(-602 /* RuntimeErrorCode.ASSERTION_NOT_INSIDE_REACTIVE_CONTEXT */, ngDevMode &&
7915
7729
  `${debugFn.name}() cannot be called from within a reactive context.${extraContext ? ` ${extraContext}` : ''}`);
7916
7730
  }
@@ -8136,12 +7950,12 @@ class EventEmitter_ extends Subject {
8136
7950
  }
8137
7951
  }
8138
7952
  emit(value) {
8139
- const prevConsumer = setActiveConsumer$1(null);
7953
+ const prevConsumer = setActiveConsumer(null);
8140
7954
  try {
8141
7955
  super.next(value);
8142
7956
  }
8143
7957
  finally {
8144
- setActiveConsumer$1(prevConsumer);
7958
+ setActiveConsumer(prevConsumer);
8145
7959
  }
8146
7960
  }
8147
7961
  subscribe(observerOrNext, error, complete) {
@@ -8718,8 +8532,6 @@ function getNgZone(ngZoneToUse = 'zone.js', options) {
8718
8532
  return ngZoneToUse;
8719
8533
  }
8720
8534
 
8721
- // Public API for Zone
8722
-
8723
8535
  class AfterRenderManager {
8724
8536
  impl = null;
8725
8537
  execute() {
@@ -9554,6 +9366,16 @@ class DehydratedBlockRegistry {
9554
9366
  contract = inject(JSACTION_EVENT_CONTRACT);
9555
9367
  add(blockId, info) {
9556
9368
  this.registry.set(blockId, info);
9369
+ // It's possible that hydration is queued that's waiting for the
9370
+ // resolution of a lazy loaded route. In this case, we ensure
9371
+ // the callback function is called to continue the hydration process
9372
+ // for the queued block set.
9373
+ if (this.awaitingCallbacks.has(blockId)) {
9374
+ const awaitingCallbacks = this.awaitingCallbacks.get(blockId);
9375
+ for (const cb of awaitingCallbacks) {
9376
+ cb();
9377
+ }
9378
+ }
9557
9379
  }
9558
9380
  get(blockId) {
9559
9381
  return this.registry.get(blockId) ?? null;
@@ -9568,6 +9390,7 @@ class DehydratedBlockRegistry {
9568
9390
  this.jsActionMap.delete(blockId);
9569
9391
  this.invokeTriggerCleanupFns(blockId);
9570
9392
  this.hydrating.delete(blockId);
9393
+ this.awaitingCallbacks.delete(blockId);
9571
9394
  }
9572
9395
  if (this.size === 0) {
9573
9396
  this.contract.instance?.cleanUp();
@@ -9595,6 +9418,13 @@ class DehydratedBlockRegistry {
9595
9418
  }
9596
9419
  // Blocks that are being hydrated.
9597
9420
  hydrating = new Map();
9421
+ // Blocks that are awaiting a defer instruction finish.
9422
+ awaitingCallbacks = new Map();
9423
+ awaitParentBlock(topmostParentBlock, callback) {
9424
+ const parentBlockAwaitCallbacks = this.awaitingCallbacks.get(topmostParentBlock) ?? [];
9425
+ parentBlockAwaitCallbacks.push(callback);
9426
+ this.awaitingCallbacks.set(topmostParentBlock, parentBlockAwaitCallbacks);
9427
+ }
9598
9428
  /** @nocollapse */
9599
9429
  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ ɵɵdefineInjectable({
9600
9430
  token: DehydratedBlockRegistry,
@@ -10023,7 +9853,6 @@ function getParentBlockHydrationQueue(deferBlockId, injector) {
10023
9853
  isTopMostDeferBlock = dehydratedBlockRegistry.has(currentBlockId);
10024
9854
  const hydratingParentBlock = dehydratedBlockRegistry.hydrating.get(currentBlockId);
10025
9855
  if (parentBlockPromise === null && hydratingParentBlock != null) {
10026
- // TODO: add an ngDevMode asset that `hydratingParentBlock.promise` exists and is of type Promise.
10027
9856
  parentBlockPromise = hydratingParentBlock.promise;
10028
9857
  break;
10029
9858
  }
@@ -10123,7 +9952,7 @@ function processBlockData(injector) {
10123
9952
  function refreshContentQueries(tView, lView) {
10124
9953
  const contentQueries = tView.contentQueries;
10125
9954
  if (contentQueries !== null) {
10126
- const prevConsumer = setActiveConsumer$1(null);
9955
+ const prevConsumer = setActiveConsumer(null);
10127
9956
  try {
10128
9957
  for (let i = 0; i < contentQueries.length; i += 2) {
10129
9958
  const queryStartIdx = contentQueries[i];
@@ -10139,24 +9968,24 @@ function refreshContentQueries(tView, lView) {
10139
9968
  }
10140
9969
  }
10141
9970
  finally {
10142
- setActiveConsumer$1(prevConsumer);
9971
+ setActiveConsumer(prevConsumer);
10143
9972
  }
10144
9973
  }
10145
9974
  }
10146
9975
  function executeViewQueryFn(flags, viewQueryFn, component) {
10147
9976
  ngDevMode && assertDefined(viewQueryFn, 'View queries function to execute must be defined.');
10148
9977
  setCurrentQueryIndex(0);
10149
- const prevConsumer = setActiveConsumer$1(null);
9978
+ const prevConsumer = setActiveConsumer(null);
10150
9979
  try {
10151
9980
  viewQueryFn(flags, component);
10152
9981
  }
10153
9982
  finally {
10154
- setActiveConsumer$1(prevConsumer);
9983
+ setActiveConsumer(prevConsumer);
10155
9984
  }
10156
9985
  }
10157
9986
  function executeContentQueries(tView, tNode, lView) {
10158
9987
  if (isContentQueryHost(tNode)) {
10159
- const prevConsumer = setActiveConsumer$1(null);
9988
+ const prevConsumer = setActiveConsumer(null);
10160
9989
  try {
10161
9990
  const start = tNode.directiveStart;
10162
9991
  const end = tNode.directiveEnd;
@@ -10171,7 +10000,7 @@ function executeContentQueries(tView, tNode, lView) {
10171
10000
  }
10172
10001
  }
10173
10002
  finally {
10174
- setActiveConsumer$1(prevConsumer);
10003
+ setActiveConsumer(prevConsumer);
10175
10004
  }
10176
10005
  }
10177
10006
  }
@@ -10267,16 +10096,6 @@ function getPolicy$1() {
10267
10096
  function trustedHTMLFromString(html) {
10268
10097
  return getPolicy$1()?.createHTML(html) || html;
10269
10098
  }
10270
- /**
10271
- * Unsafely promote a string to a TrustedScript, falling back to strings when
10272
- * Trusted Types are not available.
10273
- * @security In particular, it must be assured that the provided string will
10274
- * never cause an XSS vulnerability if used in a context that will be
10275
- * interpreted and executed as a script by a browser, e.g. when calling eval.
10276
- */
10277
- function trustedScriptFromString(script) {
10278
- return getPolicy$1()?.createScript(script) || script;
10279
- }
10280
10099
  /**
10281
10100
  * Unsafely promote a string to a TrustedScriptURL, falling back to strings
10282
10101
  * when Trusted Types are not available.
@@ -10289,54 +10108,6 @@ function trustedScriptFromString(script) {
10289
10108
  function trustedScriptURLFromString(url) {
10290
10109
  return getPolicy$1()?.createScriptURL(url) || url;
10291
10110
  }
10292
- /**
10293
- * Unsafely call the Function constructor with the given string arguments. It
10294
- * is only available in development mode, and should be stripped out of
10295
- * production code.
10296
- * @security This is a security-sensitive function; any use of this function
10297
- * must go through security review. In particular, it must be assured that it
10298
- * is only called from development code, as use in production code can lead to
10299
- * XSS vulnerabilities.
10300
- */
10301
- function newTrustedFunctionForDev(...args) {
10302
- if (typeof ngDevMode === 'undefined') {
10303
- throw new Error('newTrustedFunctionForDev should never be called in production');
10304
- }
10305
- if (!_global.trustedTypes) {
10306
- // In environments that don't support Trusted Types, fall back to the most
10307
- // straightforward implementation:
10308
- return new Function(...args);
10309
- }
10310
- // Chrome currently does not support passing TrustedScript to the Function
10311
- // constructor. The following implements the workaround proposed on the page
10312
- // below, where the Chromium bug is also referenced:
10313
- // https://github.com/w3c/webappsec-trusted-types/wiki/Trusted-Types-for-function-constructor
10314
- const fnArgs = args.slice(0, -1).join(',');
10315
- const fnBody = args[args.length - 1];
10316
- const body = `(function anonymous(${fnArgs}
10317
- ) { ${fnBody}
10318
- })`;
10319
- // Using eval directly confuses the compiler and prevents this module from
10320
- // being stripped out of JS binaries even if not used. The global['eval']
10321
- // indirection fixes that.
10322
- const fn = _global['eval'](trustedScriptFromString(body));
10323
- if (fn.bind === undefined) {
10324
- // Workaround for a browser bug that only exists in Chrome 83, where passing
10325
- // a TrustedScript to eval just returns the TrustedScript back without
10326
- // evaluating it. In that case, fall back to the most straightforward
10327
- // implementation:
10328
- return new Function(...args);
10329
- }
10330
- // To completely mimic the behavior of calling "new Function", two more
10331
- // things need to happen:
10332
- // 1. Stringifying the resulting function should return its source code
10333
- fn.toString = () => body;
10334
- // 2. When calling the resulting function, `this` should refer to `global`
10335
- return fn.bind(_global);
10336
- // When Trusted Types support in Function constructors is widely available,
10337
- // the implementation of this function can be simplified to:
10338
- // return new Function(...args.map(a => trustedScriptFromString(a)));
10339
- }
10340
10111
 
10341
10112
  /**
10342
10113
  * @fileoverview
@@ -12103,16 +11874,12 @@ function extractAttrsAndClassesFromSelector(selector) {
12103
11874
  const NO_CHANGE = typeof ngDevMode === 'undefined' || ngDevMode ? { __brand__: 'NO_CHANGE' } : {};
12104
11875
 
12105
11876
  function createTextNode(renderer, value) {
12106
- ngDevMode && ngDevMode.rendererCreateTextNode++;
12107
- ngDevMode && ngDevMode.rendererSetText++;
12108
11877
  return renderer.createText(value);
12109
11878
  }
12110
11879
  function updateTextNode(renderer, rNode, value) {
12111
- ngDevMode && ngDevMode.rendererSetText++;
12112
11880
  renderer.setValue(rNode, value);
12113
11881
  }
12114
11882
  function createCommentNode(renderer, value) {
12115
- ngDevMode && ngDevMode.rendererCreateComment++;
12116
11883
  return renderer.createComment(escapeCommentText(value));
12117
11884
  }
12118
11885
  /**
@@ -12123,7 +11890,6 @@ function createCommentNode(renderer, value) {
12123
11890
  * @returns the element created
12124
11891
  */
12125
11892
  function createElementNode(renderer, name, namespace) {
12126
- ngDevMode && ngDevMode.rendererCreateElement++;
12127
11893
  return renderer.createElement(name, namespace);
12128
11894
  }
12129
11895
  /**
@@ -12131,11 +11897,9 @@ function createElementNode(renderer, name, namespace) {
12131
11897
  * This is a utility function that can be used when native nodes were determined.
12132
11898
  */
12133
11899
  function nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {
12134
- ngDevMode && ngDevMode.rendererInsertBefore++;
12135
11900
  renderer.insertBefore(parent, child, beforeNode, isMove);
12136
11901
  }
12137
11902
  function nativeAppendChild(renderer, parent, child) {
12138
- ngDevMode && ngDevMode.rendererAppendChild++;
12139
11903
  ngDevMode && assertDefined(parent, 'parent node must be defined');
12140
11904
  renderer.appendChild(parent, child);
12141
11905
  }
@@ -12157,7 +11921,6 @@ function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove)
12157
11921
  * @param isHostElement A flag indicating if a node to be removed is a host of a component.
12158
11922
  */
12159
11923
  function nativeRemoveNode(renderer, rNode, isHostElement) {
12160
- ngDevMode && ngDevMode.rendererRemoveNode++;
12161
11924
  renderer.removeChild(null, rNode, isHostElement);
12162
11925
  }
12163
11926
  /**
@@ -12181,7 +11944,6 @@ function clearElementContents(rElement) {
12181
11944
  function writeDirectStyle(renderer, element, newValue) {
12182
11945
  ngDevMode && assertString(newValue, "'newValue' should be a string");
12183
11946
  renderer.setAttribute(element, 'style', newValue);
12184
- ngDevMode && ngDevMode.rendererSetStyle++;
12185
11947
  }
12186
11948
  /**
12187
11949
  * Write `className` to `RElement`.
@@ -12202,7 +11964,6 @@ function writeDirectClass(renderer, element, newValue) {
12202
11964
  else {
12203
11965
  renderer.setAttribute(element, 'class', newValue);
12204
11966
  }
12205
- ngDevMode && ngDevMode.rendererSetClassName++;
12206
11967
  }
12207
11968
  /** Sets up the static DOM attributes on an `RNode`. */
12208
11969
  function setupStaticAttributes(renderer, element, tNode) {
@@ -12480,7 +12241,7 @@ var InputFlags;
12480
12241
  })(InputFlags || (InputFlags = {}));
12481
12242
 
12482
12243
  function writeToDirectiveInput(def, instance, publicName, value) {
12483
- const prevConsumer = setActiveConsumer$1(null);
12244
+ const prevConsumer = setActiveConsumer(null);
12484
12245
  try {
12485
12246
  if (ngDevMode) {
12486
12247
  if (!def.inputs.hasOwnProperty(publicName)) {
@@ -12501,7 +12262,7 @@ function writeToDirectiveInput(def, instance, publicName, value) {
12501
12262
  let inputSignalNode = null;
12502
12263
  if ((flags & InputFlags.SignalBased) !== 0) {
12503
12264
  const field = instance[privateName];
12504
- inputSignalNode = field[SIGNAL$1];
12265
+ inputSignalNode = field[SIGNAL];
12505
12266
  }
12506
12267
  // If there is a signal node and a transform, run it before potentially
12507
12268
  // delegating to features like `NgOnChanges`.
@@ -12520,7 +12281,7 @@ function writeToDirectiveInput(def, instance, publicName, value) {
12520
12281
  }
12521
12282
  }
12522
12283
  finally {
12523
- setActiveConsumer$1(prevConsumer);
12284
+ setActiveConsumer(prevConsumer);
12524
12285
  }
12525
12286
  }
12526
12287
 
@@ -12681,7 +12442,6 @@ function elementPropertyInternal(tView, tNode, lView, propName, value, renderer,
12681
12442
  if (!isPropertyValid(element, propName, tNode.value, tView.schemas)) {
12682
12443
  handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);
12683
12444
  }
12684
- ngDevMode.rendererSetProperty++;
12685
12445
  }
12686
12446
  // It is assumed that the sanitizer is only added when the compiler determines that the
12687
12447
  // property is risky, so sanitization can be done without further checks.
@@ -12849,11 +12609,9 @@ function elementAttributeInternal(tNode, lView, name, value, sanitizer, namespac
12849
12609
  }
12850
12610
  function setElementAttribute(renderer, element, namespace, tagName, name, value, sanitizer) {
12851
12611
  if (value == null) {
12852
- ngDevMode && ngDevMode.rendererRemoveAttribute++;
12853
12612
  renderer.removeAttribute(element, name, namespace);
12854
12613
  }
12855
12614
  else {
12856
- ngDevMode && ngDevMode.rendererSetAttribute++;
12857
12615
  const strValue = sanitizer == null ? renderStringify(value) : sanitizer(value, tagName || '', name);
12858
12616
  renderer.setAttribute(element, name, strValue, namespace);
12859
12617
  }
@@ -13149,7 +12907,7 @@ function renderView(tView, lView, context) {
13149
12907
  throw error;
13150
12908
  }
13151
12909
  finally {
13152
- lView[FLAGS] &= ~4 /* LViewFlags.CreationMode */;
12910
+ lView[FLAGS] &= -5 /* LViewFlags.CreationMode */;
13153
12911
  leaveView();
13154
12912
  }
13155
12913
  }
@@ -13161,7 +12919,7 @@ function renderChildComponents(hostLView, components) {
13161
12919
  }
13162
12920
 
13163
12921
  function createAndRenderEmbeddedLView(declarationLView, templateTNode, context, options) {
13164
- const prevConsumer = setActiveConsumer$1(null);
12922
+ const prevConsumer = setActiveConsumer(null);
13165
12923
  try {
13166
12924
  const embeddedTView = templateTNode.tView;
13167
12925
  ngDevMode && assertDefined(embeddedTView, 'TView must be defined for a template node.');
@@ -13182,7 +12940,7 @@ function createAndRenderEmbeddedLView(declarationLView, templateTNode, context,
13182
12940
  return embeddedLView;
13183
12941
  }
13184
12942
  finally {
13185
- setActiveConsumer$1(prevConsumer);
12943
+ setActiveConsumer(prevConsumer);
13186
12944
  }
13187
12945
  }
13188
12946
  /**
@@ -13284,7 +13042,6 @@ function applyToElementOrContainer(action, renderer, parent, lNodeToHandle, befo
13284
13042
  nativeRemoveNode(renderer, rNode, isComponent);
13285
13043
  }
13286
13044
  else if (action === 3 /* WalkTNodeTreeAction.Destroy */) {
13287
- ngDevMode && ngDevMode.rendererDestroyNode++;
13288
13045
  renderer.destroyNode(rNode);
13289
13046
  }
13290
13047
  if (lContainer != null) {
@@ -13427,7 +13184,7 @@ function cleanUpView(tView, lView) {
13427
13184
  if (isDestroyed(lView)) {
13428
13185
  return;
13429
13186
  }
13430
- const prevConsumer = setActiveConsumer$1(null);
13187
+ const prevConsumer = setActiveConsumer(null);
13431
13188
  try {
13432
13189
  // Usually the Attached flag is removed when the view is detached from its parent, however
13433
13190
  // if it's a root view, the flag won't be unset hence why we're also removing on destroy.
@@ -13438,12 +13195,11 @@ function cleanUpView(tView, lView) {
13438
13195
  // This also aligns with the ViewEngine behavior. It also means that the onDestroy hook is
13439
13196
  // really more of an "afterDestroy" hook if you think about it.
13440
13197
  lView[FLAGS] |= 256 /* LViewFlags.Destroyed */;
13441
- lView[REACTIVE_TEMPLATE_CONSUMER] && consumerDestroy$1(lView[REACTIVE_TEMPLATE_CONSUMER]);
13198
+ lView[REACTIVE_TEMPLATE_CONSUMER] && consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);
13442
13199
  executeOnDestroys(tView, lView);
13443
13200
  processCleanups(tView, lView);
13444
13201
  // For component views only, the local renderer is destroyed at clean up time.
13445
13202
  if (lView[TVIEW].type === 1 /* TViewType.Component */) {
13446
- ngDevMode && ngDevMode.rendererDestroy++;
13447
13203
  lView[RENDERER].destroy();
13448
13204
  }
13449
13205
  const declarationContainer = lView[DECLARATION_LCONTAINER];
@@ -13463,7 +13219,7 @@ function cleanUpView(tView, lView) {
13463
13219
  unregisterLView(lView);
13464
13220
  }
13465
13221
  finally {
13466
- setActiveConsumer$1(prevConsumer);
13222
+ setActiveConsumer(prevConsumer);
13467
13223
  }
13468
13224
  }
13469
13225
  /** Removes listeners and unsubscribes from output subscriptions */
@@ -13935,18 +13691,15 @@ function applyStyling(renderer, isClassBased, rNode, prop, value) {
13935
13691
  if (isClassBased) {
13936
13692
  // We actually want JS true/false here because any truthy value should add the class
13937
13693
  if (!value) {
13938
- ngDevMode && ngDevMode.rendererRemoveClass++;
13939
13694
  renderer.removeClass(rNode, prop);
13940
13695
  }
13941
13696
  else {
13942
- ngDevMode && ngDevMode.rendererAddClass++;
13943
13697
  renderer.addClass(rNode, prop);
13944
13698
  }
13945
13699
  }
13946
13700
  else {
13947
13701
  let flags = prop.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;
13948
13702
  if (value == null /** || value === undefined */) {
13949
- ngDevMode && ngDevMode.rendererRemoveStyle++;
13950
13703
  renderer.removeStyle(rNode, prop, flags);
13951
13704
  }
13952
13705
  else {
@@ -13958,7 +13711,6 @@ function applyStyling(renderer, isClassBased, rNode, prop, value) {
13958
13711
  value = value.slice(0, -10);
13959
13712
  flags |= RendererStyleFlags2.Important;
13960
13713
  }
13961
- ngDevMode && ngDevMode.rendererSetStyle++;
13962
13714
  renderer.setStyle(rNode, prop, value, flags);
13963
13715
  }
13964
13716
  }
@@ -14070,7 +13822,7 @@ function maybeReturnReactiveLViewConsumer(consumer) {
14070
13822
  freeConsumers.push(consumer);
14071
13823
  }
14072
13824
  const REACTIVE_LVIEW_CONSUMER_NODE = {
14073
- ...REACTIVE_NODE$1,
13825
+ ...REACTIVE_NODE,
14074
13826
  consumerIsAlwaysLive: true,
14075
13827
  kind: 'template',
14076
13828
  consumerMarkedDirty: (node) => {
@@ -14098,7 +13850,7 @@ function getOrCreateTemporaryConsumer(lView) {
14098
13850
  return consumer;
14099
13851
  }
14100
13852
  const TEMPORARY_CONSUMER_NODE = {
14101
- ...REACTIVE_NODE$1,
13853
+ ...REACTIVE_NODE,
14102
13854
  consumerIsAlwaysLive: true,
14103
13855
  kind: 'template',
14104
13856
  consumerMarkedDirty: (node) => {
@@ -14259,9 +14011,9 @@ function refreshView(tView, lView, templateFn, context) {
14259
14011
  if (!isInCheckNoChangesPass) {
14260
14012
  if (viewShouldHaveReactiveConsumer(tView)) {
14261
14013
  currentConsumer = getOrBorrowReactiveLViewConsumer(lView);
14262
- prevConsumer = consumerBeforeComputation$1(currentConsumer);
14014
+ prevConsumer = consumerBeforeComputation(currentConsumer);
14263
14015
  }
14264
- else if (getActiveConsumer$1() === null) {
14016
+ else if (getActiveConsumer() === null) {
14265
14017
  // If the current view should not have a reactive consumer but we don't have an active consumer,
14266
14018
  // we still need to create a temporary consumer to track any signal reads in this template.
14267
14019
  // This is a rare case that can happen with `viewContainerRef.createEmbeddedView(...).detectChanges()`.
@@ -14270,10 +14022,10 @@ function refreshView(tView, lView, templateFn, context) {
14270
14022
  // the temporary one.
14271
14023
  returnConsumerToPool = false;
14272
14024
  currentConsumer = getOrCreateTemporaryConsumer(lView);
14273
- prevConsumer = consumerBeforeComputation$1(currentConsumer);
14025
+ prevConsumer = consumerBeforeComputation(currentConsumer);
14274
14026
  }
14275
14027
  else if (lView[REACTIVE_TEMPLATE_CONSUMER]) {
14276
- consumerDestroy$1(lView[REACTIVE_TEMPLATE_CONSUMER]);
14028
+ consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);
14277
14029
  lView[REACTIVE_TEMPLATE_CONSUMER] = null;
14278
14030
  }
14279
14031
  }
@@ -14402,7 +14154,7 @@ function refreshView(tView, lView, templateFn, context) {
14402
14154
  }
14403
14155
  finally {
14404
14156
  if (currentConsumer !== null) {
14405
- consumerAfterComputation$1(currentConsumer, prevConsumer);
14157
+ consumerAfterComputation(currentConsumer, prevConsumer);
14406
14158
  if (returnConsumerToPool) {
14407
14159
  maybeReturnReactiveLViewConsumer(currentConsumer);
14408
14160
  }
@@ -14492,14 +14244,14 @@ function detectChangesInView(lView, mode) {
14492
14244
  // Always refresh views marked for refresh, regardless of mode.
14493
14245
  shouldRefreshView ||= !!(flags & 1024 /* LViewFlags.RefreshView */);
14494
14246
  // Refresh views when they have a dirty reactive consumer, regardless of mode.
14495
- shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange$1(consumer));
14247
+ shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange(consumer));
14496
14248
  shouldRefreshView ||= !!(ngDevMode && isExhaustiveCheckNoChanges());
14497
14249
  // Mark the Flags and `ReactiveNode` as not dirty before refreshing the component, so that they
14498
14250
  // can be re-dirtied during the refresh process.
14499
14251
  if (consumer) {
14500
14252
  consumer.dirty = false;
14501
14253
  }
14502
- lView[FLAGS] &= ~(8192 /* LViewFlags.HasChildViewsToRefresh */ | 1024 /* LViewFlags.RefreshView */);
14254
+ lView[FLAGS] &= -9217;
14503
14255
  if (shouldRefreshView) {
14504
14256
  refreshView(tView, lView, tView.template, lView[CONTEXT]);
14505
14257
  }
@@ -14695,7 +14447,7 @@ function detachView(lContainer, removeIndex) {
14695
14447
  viewToDetach[PARENT] = null;
14696
14448
  viewToDetach[NEXT] = null;
14697
14449
  // Unsets the attached flag
14698
- viewToDetach[FLAGS] &= ~128 /* LViewFlags.Attached */;
14450
+ viewToDetach[FLAGS] &= -129 /* LViewFlags.Attached */;
14699
14451
  }
14700
14452
  return viewToDetach;
14701
14453
  }
@@ -14777,7 +14529,7 @@ function trackMovedView(declarationContainer, lView) {
14777
14529
  }
14778
14530
  }
14779
14531
 
14780
- class ViewRef$1 {
14532
+ let ViewRef$1 = class ViewRef {
14781
14533
  _lView;
14782
14534
  _cdRefInjectingView;
14783
14535
  _appRef = null;
@@ -14940,7 +14692,7 @@ class ViewRef$1 {
14940
14692
  * ```
14941
14693
  */
14942
14694
  detach() {
14943
- this._lView[FLAGS] &= ~128 /* LViewFlags.Attached */;
14695
+ this._lView[FLAGS] &= -129 /* LViewFlags.Attached */;
14944
14696
  }
14945
14697
  /**
14946
14698
  * Re-attaches a view to the change detection tree.
@@ -15070,7 +14822,7 @@ class ViewRef$1 {
15070
14822
  }
15071
14823
  updateAncestorTraversalFlagsOnAttach(this._lView);
15072
14824
  }
15073
- }
14825
+ };
15074
14826
  /**
15075
14827
  * Reports whether the given view is considered dirty according to the different marking mechanisms.
15076
14828
  */
@@ -17055,8 +16807,8 @@ function findMatchingDehydratedView(lContainer, template) {
17055
16807
  *
17056
16808
  * @publicApi
17057
16809
  */
17058
- class ComponentRef$1 {
17059
- }
16810
+ let ComponentRef$1 = class ComponentRef {
16811
+ };
17060
16812
  /**
17061
16813
  * Base class for a factory that can create a component dynamically.
17062
16814
  * Instantiate a factory for a given type of component with `resolveComponentFactory()`.
@@ -17067,8 +16819,8 @@ class ComponentRef$1 {
17067
16819
  * @deprecated Angular no longer requires Component factories. Please use other APIs where
17068
16820
  * Component class can be used directly.
17069
16821
  */
17070
- class ComponentFactory$1 {
17071
- }
16822
+ let ComponentFactory$1 = class ComponentFactory {
16823
+ };
17072
16824
 
17073
16825
  class _NullComponentFactoryResolver {
17074
16826
  resolveComponentFactory(component) {
@@ -17090,9 +16842,9 @@ class _NullComponentFactoryResolver {
17090
16842
  * @deprecated Angular no longer requires Component factories. Please use other APIs where
17091
16843
  * Component class can be used directly.
17092
16844
  */
17093
- class ComponentFactoryResolver$1 {
16845
+ let ComponentFactoryResolver$1 = class ComponentFactoryResolver {
17094
16846
  static NULL = new _NullComponentFactoryResolver();
17095
- }
16847
+ };
17096
16848
 
17097
16849
  /**
17098
16850
  * Creates and initializes a custom renderer that implements the `Renderer2` base class.
@@ -17451,7 +17203,6 @@ function addSet(sourceSet, targetSet) {
17451
17203
  }
17452
17204
  /** The deps tracker to be used in the current Angular app in dev mode. */
17453
17205
  const depsTracker = new DepsTracker();
17454
- const TEST_ONLY = { DepsTracker };
17455
17206
 
17456
17207
  /**
17457
17208
  * Compute the static styling (class/style) from `TAttributes`.
@@ -17490,7 +17241,7 @@ function computeStaticStyling(tNode, attrs, writeToHost) {
17490
17241
  writeToHost ? (tNode.classes = classes) : (tNode.classesWithoutHost = classes);
17491
17242
  }
17492
17243
 
17493
- function ɵɵdirectiveInject(token, flags = InjectFlags.Default) {
17244
+ function ɵɵdirectiveInject(token, flags = 0 /* InternalInjectFlags.Default */) {
17494
17245
  const lView = getLView();
17495
17246
  // Fall back to inject() if view hasn't been created. This situation can happen in tests
17496
17247
  // if inject utilities are used before bootstrapping.
@@ -18011,9 +17762,6 @@ function elementEndFirstCreatePass(tView, tNode) {
18011
17762
  }
18012
17763
  }
18013
17764
 
18014
- function isIterable(obj) {
18015
- return obj !== null && typeof obj === 'object' && obj[Symbol.iterator] !== undefined;
18016
- }
18017
17765
  function isListLikeIterable(obj) {
18018
17766
  if (!isJsObject(obj))
18019
17767
  return false;
@@ -18289,7 +18037,6 @@ function listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn,
18289
18037
  listenerFn = wrapListener(tNode, lView, context, listenerFn);
18290
18038
  stashEventListener(target, eventName, listenerFn);
18291
18039
  const cleanupFn = renderer.listen(target, eventName, listenerFn);
18292
- ngDevMode && ngDevMode.rendererAddEventListener++;
18293
18040
  lCleanup.push(listenerFn, cleanupFn);
18294
18041
  tCleanup && tCleanup.push(eventName, idxOrTargetGetter, lCleanupIndex, lCleanupIndex + 1);
18295
18042
  }
@@ -18331,7 +18078,7 @@ function listenToOutput(tNode, tView, lView, index, lookupName, eventName, liste
18331
18078
  tCleanup && tCleanup.push(eventName, tNode.index, idx, -(idx + 1));
18332
18079
  }
18333
18080
  function executeListenerWithErrorHandling(lView, context, listenerFn, e) {
18334
- const prevConsumer = setActiveConsumer$1(null);
18081
+ const prevConsumer = setActiveConsumer(null);
18335
18082
  try {
18336
18083
  profiler(6 /* ProfilerEvent.OutputStart */, context, listenerFn);
18337
18084
  // Only explicitly returning false from a listener should preventDefault
@@ -18344,7 +18091,7 @@ function executeListenerWithErrorHandling(lView, context, listenerFn, e) {
18344
18091
  }
18345
18092
  finally {
18346
18093
  profiler(7 /* ProfilerEvent.OutputEnd */, context, listenerFn);
18347
- setActiveConsumer$1(prevConsumer);
18094
+ setActiveConsumer(prevConsumer);
18348
18095
  }
18349
18096
  }
18350
18097
  /**
@@ -18651,7 +18398,7 @@ class ComponentFactory extends ComponentFactory$1 {
18651
18398
  }
18652
18399
  create(injector, projectableNodes, rootSelectorOrNode, environmentInjector, directives, componentBindings) {
18653
18400
  profiler(22 /* ProfilerEvent.DynamicComponentStart */);
18654
- const prevConsumer = setActiveConsumer$1(null);
18401
+ const prevConsumer = setActiveConsumer(null);
18655
18402
  try {
18656
18403
  const cmpDef = this.componentDef;
18657
18404
  ngDevMode && verifyNotAnOrphanComponent(cmpDef);
@@ -18723,13 +18470,13 @@ class ComponentFactory extends ComponentFactory$1 {
18723
18470
  return new ComponentRef(this.componentType, rootLView, !!hasInputBindings);
18724
18471
  }
18725
18472
  finally {
18726
- setActiveConsumer$1(prevConsumer);
18473
+ setActiveConsumer(prevConsumer);
18727
18474
  }
18728
18475
  }
18729
18476
  }
18730
18477
  function createRootTView(rootSelectorOrNode, componentDef, componentBindings, directives) {
18731
18478
  const tAttributes = rootSelectorOrNode
18732
- ? ['ng-version', '20.0.0-next.1']
18479
+ ? ['ng-version', '20.0.0-next.2']
18733
18480
  : // Extract attributes and classes from the first selector only to match VE behavior.
18734
18481
  extractAttrsAndClassesFromSelector(componentDef.selectors[0]);
18735
18482
  let creationBindings = null;
@@ -19186,7 +18933,6 @@ function createContainerRef(hostTNode, hostLView) {
19186
18933
  */
19187
18934
  function insertAnchorNode(hostLView, hostTNode) {
19188
18935
  const renderer = hostLView[RENDERER];
19189
- ngDevMode && ngDevMode.rendererCreateComment++;
19190
18936
  const commentNode = renderer.createComment(ngDevMode ? 'container' : '');
19191
18937
  const hostNative = getNativeByTNode(hostTNode, hostLView);
19192
18938
  const parentOfHostNative = renderer.parentNode(hostNative);
@@ -19743,7 +19489,7 @@ function getQueryResults(lView, queryIndex) {
19743
19489
  */
19744
19490
  function createQuerySignalFn(firstOnly, required, opts) {
19745
19491
  let node;
19746
- const signalFn = createComputed$1(() => {
19492
+ const signalFn = createComputed(() => {
19747
19493
  // A dedicated signal that increments its value every time a query changes its dirty status. By
19748
19494
  // using this signal we can implement a query as computed and avoid creation of a specialized
19749
19495
  // reactive node type. Please note that a query gets marked dirty under the following
@@ -19757,7 +19503,7 @@ function createQuerySignalFn(firstOnly, required, opts) {
19757
19503
  }
19758
19504
  return value;
19759
19505
  });
19760
- node = signalFn[SIGNAL$1];
19506
+ node = signalFn[SIGNAL];
19761
19507
  node._dirtyCounter = signal(0);
19762
19508
  node._flatValue = undefined;
19763
19509
  if (ngDevMode) {
@@ -19776,7 +19522,7 @@ function createMultiResultQuerySignalFn(opts) {
19776
19522
  return createQuerySignalFn(/* firstOnly */ false, /* required */ false, opts);
19777
19523
  }
19778
19524
  function bindQueryToSignal(target, queryIndex) {
19779
- const node = target[SIGNAL$1];
19525
+ const node = target[SIGNAL];
19780
19526
  node._lView = getLView();
19781
19527
  node._queryIndex = queryIndex;
19782
19528
  node._queryList = loadQueryInternal(node._lView, queryIndex);
@@ -19949,16 +19695,16 @@ function createModelSignal(initialValue, opts) {
19949
19695
  const emitterRef = new OutputEmitterRef();
19950
19696
  node.value = initialValue;
19951
19697
  function getter() {
19952
- producerAccessed$1(node);
19698
+ producerAccessed(node);
19953
19699
  assertModelSet(node.value);
19954
19700
  return node.value;
19955
19701
  }
19956
- getter[SIGNAL$1] = node;
19702
+ getter[SIGNAL] = node;
19957
19703
  getter.asReadonly = signalAsReadonlyFn.bind(getter);
19958
19704
  // TODO: Should we throw an error when updating a destroyed model?
19959
19705
  getter.set = (newValue) => {
19960
19706
  if (!node.equal(node.value, newValue)) {
19961
- signalSetFn$1(node, newValue);
19707
+ signalSetFn(node, newValue);
19962
19708
  emitterRef.emit(newValue);
19963
19709
  }
19964
19710
  };
@@ -20268,9 +20014,6 @@ function registerNgModuleType(ngModuleType, id) {
20268
20014
  assertSameOrNotExisting(id, existing, ngModuleType);
20269
20015
  modules.set(id, ngModuleType);
20270
20016
  }
20271
- function clearModulesForTest() {
20272
- modules.clear();
20273
- }
20274
20017
  function getRegisteredNgModuleType(id) {
20275
20018
  return modules.get(id);
20276
20019
  }
@@ -20326,8 +20069,8 @@ function ɵɵvalidateIframeAttribute(attrValue, tagName, attrName) {
20326
20069
  *
20327
20070
  * @publicApi
20328
20071
  */
20329
- class NgModuleRef$1 {
20330
- }
20072
+ let NgModuleRef$1 = class NgModuleRef {
20073
+ };
20331
20074
  /**
20332
20075
  * @publicApi
20333
20076
  *
@@ -20338,8 +20081,8 @@ class NgModuleRef$1 {
20338
20081
  * [createNgModule](api/core/createNgModule)), consider switching to those APIs instead of
20339
20082
  * using factory-based ones.
20340
20083
  */
20341
- class NgModuleFactory$1 {
20342
- }
20084
+ let NgModuleFactory$1 = class NgModuleFactory {
20085
+ };
20343
20086
 
20344
20087
  /**
20345
20088
  * Returns a new NgModuleRef instance based on the NgModule class and parent injector provided.
@@ -21389,7 +21132,7 @@ function locateOrCreateContainerAnchorImpl(tView, lView, tNode, index) {
21389
21132
  lastNodeWasCreated(isNodeCreationMode);
21390
21133
  // Regular creation mode.
21391
21134
  if (isNodeCreationMode) {
21392
- return createContainerAnchorImpl(tView, lView, tNode, index);
21135
+ return createContainerAnchorImpl(tView, lView);
21393
21136
  }
21394
21137
  const ssrId = hydrationInfo.data[TEMPLATES]?.[index] ?? null;
21395
21138
  // Apply `ssrId` value to the underlying TView if it was not previously set.
@@ -22129,26 +21872,6 @@ function setClassMetadata(type, decorators, ctorParameters, propDecorators) {
22129
21872
  });
22130
21873
  }
22131
21874
 
22132
- /*
22133
- * This file exists to support compilation of @angular/core in Ivy mode.
22134
- *
22135
- * When the Angular compiler processes a compilation unit, it normally writes imports to
22136
- * @angular/core. When compiling the core package itself this strategy isn't usable. Instead, the
22137
- * compiler writes imports to this file.
22138
- *
22139
- * Only a subset of such imports are supported - core is not allowed to declare components or pipes.
22140
- * A check in ngtsc's `R3SymbolsImportRewriter` validates this condition. The rewriter is only used
22141
- * when compiling @angular/core and is responsible for translating an external name (prefixed with
22142
- * ɵ) to the internal symbol name as exported below.
22143
- *
22144
- * The below symbols are used for @Injectable and @NgModule compilation.
22145
- */
22146
- /**
22147
- * The existence of this constant (in this particular file) informs the Angular compiler that the
22148
- * current program is actually @angular/core, which needs to be compiled specially.
22149
- */
22150
- const ITS_JUST_ANGULAR = true;
22151
-
22152
21875
  class Console {
22153
21876
  log(message) {
22154
21877
  // tslint:disable-next-line:no-console
@@ -23221,7 +22944,7 @@ function extractEffectsFromInjector(injector) {
23221
22944
  }
23222
22945
  const resolverToEffects = getFrameworkDIDebugData().resolverToEffects;
23223
22946
  const effects = resolverToEffects.get(diResolver) ?? [];
23224
- return effects.map((effect) => effect[SIGNAL$1]);
22947
+ return effects.map((effect) => effect[SIGNAL]);
23225
22948
  }
23226
22949
  function extractSignalNodesAndEdgesFromRoots(nodes, signalDependenciesMap = new Map()) {
23227
22950
  for (const node of nodes) {
@@ -23950,7 +23673,7 @@ function publishDefaultGlobalUtils() {
23950
23673
  * Sets the error for an invalid write to a signal to be an Angular `RuntimeError`.
23951
23674
  */
23952
23675
  function publishSignalConfiguration() {
23953
- setThrowInvalidWriteToSignalError$1(() => {
23676
+ setThrowInvalidWriteToSignalError(() => {
23954
23677
  throw new RuntimeError(600 /* RuntimeErrorCode.SIGNAL_WRITE_FROM_ILLEGAL_CONTEXT */, ngDevMode && 'Writing to signals is not allowed in a `computed`.');
23955
23678
  });
23956
23679
  }
@@ -24199,12 +23922,15 @@ class ApplicationRef {
24199
23922
  const isComponentFactory = componentOrFactory instanceof ComponentFactory$1;
24200
23923
  const initStatus = this._injector.get(ApplicationInitStatus);
24201
23924
  if (!initStatus.done) {
24202
- const standalone = !isComponentFactory && isStandalone(componentOrFactory);
24203
- const errorMessage = (typeof ngDevMode === 'undefined' || ngDevMode) &&
24204
- 'Cannot bootstrap as there are still asynchronous initializers running.' +
24205
- (standalone
24206
- ? ''
24207
- : ' Bootstrap components in the `ngDoBootstrap` method of the root module.');
23925
+ let errorMessage = '';
23926
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
23927
+ const standalone = !isComponentFactory && isStandalone(componentOrFactory);
23928
+ errorMessage =
23929
+ 'Cannot bootstrap as there are still asynchronous initializers running.' +
23930
+ (standalone
23931
+ ? ''
23932
+ : ' Bootstrap components in the `ngDoBootstrap` method of the root module.');
23933
+ }
24208
23934
  throw new RuntimeError(405 /* RuntimeErrorCode.ASYNC_INITIALIZERS_STILL_RUNNING */, errorMessage);
24209
23935
  }
24210
23936
  let componentFactory;
@@ -24272,7 +23998,7 @@ class ApplicationRef {
24272
23998
  if (this._runningTick) {
24273
23999
  throw new RuntimeError(101 /* RuntimeErrorCode.RECURSIVE_APPLICATION_REF_TICK */, ngDevMode && 'ApplicationRef.tick is called recursively');
24274
24000
  }
24275
- const prevConsumer = setActiveConsumer$1(null);
24001
+ const prevConsumer = setActiveConsumer(null);
24276
24002
  try {
24277
24003
  this._runningTick = true;
24278
24004
  this.synchronize();
@@ -24282,15 +24008,11 @@ class ApplicationRef {
24282
24008
  }
24283
24009
  }
24284
24010
  }
24285
- catch (e) {
24286
- // Attention: Don't rethrow as it could cancel subscriptions to Observables!
24287
- this.internalErrorHandler(e);
24288
- }
24289
24011
  finally {
24290
24012
  this._runningTick = false;
24291
24013
  this.tracingSnapshot?.dispose();
24292
24014
  this.tracingSnapshot = null;
24293
- setActiveConsumer$1(prevConsumer);
24015
+ setActiveConsumer(prevConsumer);
24294
24016
  this.afterTick.next();
24295
24017
  profiler(13 /* ProfilerEvent.ChangeDetectionEnd */);
24296
24018
  }
@@ -24322,7 +24044,7 @@ class ApplicationRef {
24322
24044
  synchronizeOnce() {
24323
24045
  // First, process any dirty root effects.
24324
24046
  if (this.dirtyFlags & 16 /* ApplicationRefDirtyFlags.RootEffects */) {
24325
- this.dirtyFlags &= ~16 /* ApplicationRefDirtyFlags.RootEffects */;
24047
+ this.dirtyFlags &= -17 /* ApplicationRefDirtyFlags.RootEffects */;
24326
24048
  this.rootEffectScheduler.flush();
24327
24049
  }
24328
24050
  // First check dirty views, if there are any.
@@ -24332,7 +24054,7 @@ class ApplicationRef {
24332
24054
  // `ApplicationRef.tick()` and the `NgZone` integration.
24333
24055
  const useGlobalCheck = Boolean(this.dirtyFlags & 1 /* ApplicationRefDirtyFlags.ViewTreeGlobal */);
24334
24056
  // Clear the view-related dirty flags.
24335
- this.dirtyFlags &= ~7 /* ApplicationRefDirtyFlags.ViewTreeAny */;
24057
+ this.dirtyFlags &= -8 /* ApplicationRefDirtyFlags.ViewTreeAny */;
24336
24058
  // Set the AfterRender bit, as we're checking views and will need to run afterRender hooks.
24337
24059
  this.dirtyFlags |= 8 /* ApplicationRefDirtyFlags.AfterRender */;
24338
24060
  // Check all potentially dirty views.
@@ -24342,7 +24064,7 @@ class ApplicationRef {
24342
24064
  // If `markForCheck()` was called during view checking, it will have set the `ViewTreeCheck`
24343
24065
  // flag. We clear the flag here because, for backwards compatibility, `markForCheck()`
24344
24066
  // during view checking doesn't cause the view to be re-checked.
24345
- this.dirtyFlags &= ~4 /* ApplicationRefDirtyFlags.ViewTreeCheck */;
24067
+ this.dirtyFlags &= -5 /* ApplicationRefDirtyFlags.ViewTreeCheck */;
24346
24068
  // Check if any views are still dirty after checking and we need to loop back.
24347
24069
  this.syncDirtyFlagsWithViews();
24348
24070
  if (this.dirtyFlags &
@@ -24360,7 +24082,7 @@ class ApplicationRef {
24360
24082
  }
24361
24083
  // Even if there were no dirty views, afterRender hooks might still be dirty.
24362
24084
  if (this.dirtyFlags & 8 /* ApplicationRefDirtyFlags.AfterRender */) {
24363
- this.dirtyFlags &= ~8 /* ApplicationRefDirtyFlags.AfterRender */;
24085
+ this.dirtyFlags &= -9 /* ApplicationRefDirtyFlags.AfterRender */;
24364
24086
  this.afterRenderManager.execute();
24365
24087
  // afterRender hooks might influence dirty flags.
24366
24088
  }
@@ -24389,7 +24111,7 @@ class ApplicationRef {
24389
24111
  else {
24390
24112
  // Even though this flag may be set, none of _our_ views require traversal, and so the
24391
24113
  // `ApplicationRef` doesn't require any repeated checking.
24392
- this.dirtyFlags &= ~7 /* ApplicationRefDirtyFlags.ViewTreeAny */;
24114
+ this.dirtyFlags &= -8 /* ApplicationRefDirtyFlags.ViewTreeAny */;
24393
24115
  }
24394
24116
  }
24395
24117
  /**
@@ -24414,7 +24136,12 @@ class ApplicationRef {
24414
24136
  }
24415
24137
  _loadComponent(componentRef) {
24416
24138
  this.attachView(componentRef.hostView);
24417
- this.tick();
24139
+ try {
24140
+ this.tick();
24141
+ }
24142
+ catch (e) {
24143
+ this.internalErrorHandler(e);
24144
+ }
24418
24145
  this.components.push(componentRef);
24419
24146
  // Get the listeners lazily to prevent DI cycles.
24420
24147
  const listeners = this._injector.get(APP_BOOTSTRAP_LISTENER, []);
@@ -24735,8 +24462,8 @@ function triggerDeferBlock(triggerType, lView, tNode) {
24735
24462
  }
24736
24463
  }
24737
24464
  /**
24738
- * The core mechanism for incremental hydration. This triggers
24739
- * hydration for all the blocks in the tree that need to be hydrated
24465
+ * The core mechanism for incremental hydration. This triggers or
24466
+ * queues hydration for all the blocks in the tree that need to be hydrated
24740
24467
  * and keeps track of all those blocks that were hydrated along the way.
24741
24468
  *
24742
24469
  * Note: the `replayQueuedEventsFn` is only provided when hydration is invoked
@@ -24751,26 +24478,57 @@ async function triggerHydrationFromBlockName(injector, blockName, replayQueuedEv
24751
24478
  if (blocksBeingHydrated.has(blockName)) {
24752
24479
  return;
24753
24480
  }
24754
- // The parent promise is the possible case of a list of defer blocks already being queued
24755
- // If it is queued, it'll exist; otherwise it'll be null. The hydration queue will contain all
24756
- // elements that need to be hydrated, sans any that have promises already
24757
- const { parentBlockPromise, hydrationQueue } = getParentBlockHydrationQueue(blockName, injector);
24758
- // The hydrating map in the registry prevents re-triggering hydration for a block that's already in
24759
- // the hydration queue. Here we generate promises for each of the blocks about to be hydrated
24760
- populateHydratingStateForQueue(dehydratedBlockRegistry, hydrationQueue);
24761
24481
  // Trigger resource loading and hydration for the blocks in the queue in the order of highest block
24762
24482
  // to lowest block. Once a block has finished resource loading, after next render fires after hydration
24763
24483
  // finishes. The new block will have its defer instruction called and will be in the registry.
24764
24484
  // Due to timing related to potential nested control flow, this has to be scheduled after the next render.
24765
- // Indicate that we have some pending async work.
24766
- const pendingTasks = injector.get(PendingTasksInternal);
24767
- const taskId = pendingTasks.add();
24768
- // If the parent block was being hydrated, but the process has
24769
- // not yet complete, wait until parent block promise settles before
24770
- // going over dehydrated blocks from the queue.
24485
+ const { parentBlockPromise, hydrationQueue } = getParentBlockHydrationQueue(blockName, injector);
24486
+ if (hydrationQueue.length === 0)
24487
+ return;
24488
+ // It's possible that the hydrationQueue topmost item is actually in the process of hydrating and has
24489
+ // a promise already. In that case, we don't want to destroy that promise and queue it again.
24490
+ if (parentBlockPromise !== null) {
24491
+ hydrationQueue.shift();
24492
+ }
24493
+ // The hydrating map in the registry prevents re-triggering hydration for a block that's already in
24494
+ // the hydration queue. Here we generate promises for each of the blocks about to be hydrated
24495
+ populateHydratingStateForQueue(dehydratedBlockRegistry, hydrationQueue);
24496
+ // We await this after populating the hydration state so we can prevent re-triggering hydration for
24497
+ // the same blocks while this promise is being awaited.
24771
24498
  if (parentBlockPromise !== null) {
24772
24499
  await parentBlockPromise;
24773
24500
  }
24501
+ const topmostParentBlock = hydrationQueue[0];
24502
+ if (dehydratedBlockRegistry.has(topmostParentBlock)) {
24503
+ // the topmost parent block is already in the registry and we can proceed
24504
+ // with hydration.
24505
+ await triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn);
24506
+ }
24507
+ else {
24508
+ // the topmost parent block is not yet in the registry, which may mean
24509
+ // a lazy loaded route, a control flow branch was taken, a route has
24510
+ // been navigated, etc. So we need to queue up the hydration process
24511
+ // so that it can be finished after the top block has had its defer
24512
+ // instruction executed.
24513
+ dehydratedBlockRegistry.awaitParentBlock(topmostParentBlock, async () => await triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn));
24514
+ }
24515
+ }
24516
+ /**
24517
+ * The core mechanism for incremental hydration. This triggers
24518
+ * hydration for all the blocks in the tree that need to be hydrated
24519
+ * and keeps track of all those blocks that were hydrated along the way.
24520
+ *
24521
+ * Note: the `replayQueuedEventsFn` is only provided when hydration is invoked
24522
+ * as a result of an event replay (via JsAction). When hydration is invoked from
24523
+ * an instruction set (e.g. `deferOnImmediate`) - there is no need to replay any
24524
+ * events.
24525
+ */
24526
+ async function triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn) {
24527
+ const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);
24528
+ const blocksBeingHydrated = dehydratedBlockRegistry.hydrating;
24529
+ // Indicate that we have some pending async work.
24530
+ const pendingTasks = injector.get(PendingTasksInternal);
24531
+ const taskId = pendingTasks.add();
24774
24532
  // Actually do the triggering and hydration of the queue of blocks
24775
24533
  for (let blockQueueIdx = 0; blockQueueIdx < hydrationQueue.length; blockQueueIdx++) {
24776
24534
  const dehydratedBlockId = hydrationQueue[blockQueueIdx];
@@ -24803,8 +24561,9 @@ async function triggerHydrationFromBlockName(injector, blockName, replayQueuedEv
24803
24561
  break;
24804
24562
  }
24805
24563
  }
24806
- // Await hydration completion for the requested block.
24807
- await blocksBeingHydrated.get(blockName)?.promise;
24564
+ const lastBlockName = hydrationQueue[hydrationQueue.length - 1];
24565
+ // Await hydration completion for the last block.
24566
+ await blocksBeingHydrated.get(lastBlockName)?.promise;
24808
24567
  // All async work is done, remove the taskId from the registry.
24809
24568
  pendingTasks.remove(taskId);
24810
24569
  // Replay any queued events, if any exist and the replay operation was requested.
@@ -24812,7 +24571,7 @@ async function triggerHydrationFromBlockName(injector, blockName, replayQueuedEv
24812
24571
  replayQueuedEventsFn(hydrationQueue);
24813
24572
  }
24814
24573
  // Cleanup after hydration of all affected defer blocks.
24815
- cleanupHydratedDeferBlocks(dehydratedBlockRegistry.get(blockName), hydrationQueue, dehydratedBlockRegistry, injector.get(ApplicationRef));
24574
+ cleanupHydratedDeferBlocks(dehydratedBlockRegistry.get(lastBlockName), hydrationQueue, dehydratedBlockRegistry, injector.get(ApplicationRef));
24816
24575
  }
24817
24576
  function deferBlockHasErrored(deferBlock) {
24818
24577
  return (getLDeferBlockDetails(deferBlock.lView, deferBlock.tNode)[DEFER_BLOCK_STATE] ===
@@ -24991,7 +24750,7 @@ function setTimerTriggers(injector, elementTriggers) {
24991
24750
  function setImmediateTriggers(injector, elementTriggers) {
24992
24751
  for (const elementTrigger of elementTriggers) {
24993
24752
  // Note: we intentionally avoid awaiting each call and instead kick off
24994
- // th hydration process simultaneously for all defer blocks with this trigger;
24753
+ // the hydration process simultaneously for all defer blocks with this trigger;
24995
24754
  triggerHydrationFromBlockName(injector, elementTrigger.blockName);
24996
24755
  }
24997
24756
  }
@@ -25101,7 +24860,7 @@ function ɵɵdeferWhen(rawValue) {
25101
24860
  return;
25102
24861
  const bindingIndex = nextBindingIndex();
25103
24862
  if (bindingUpdated(lView, bindingIndex, rawValue)) {
25104
- const prevConsumer = setActiveConsumer$1(null);
24863
+ const prevConsumer = setActiveConsumer(null);
25105
24864
  try {
25106
24865
  const value = Boolean(rawValue); // handle truthy or falsy values
25107
24866
  const lDetails = getLDeferBlockDetails(lView, tNode);
@@ -25117,7 +24876,7 @@ function ɵɵdeferWhen(rawValue) {
25117
24876
  }
25118
24877
  }
25119
24878
  finally {
25120
- setActiveConsumer$1(prevConsumer);
24879
+ setActiveConsumer(prevConsumer);
25121
24880
  }
25122
24881
  }
25123
24882
  }
@@ -25135,7 +24894,7 @@ function ɵɵdeferPrefetchWhen(rawValue) {
25135
24894
  return;
25136
24895
  const bindingIndex = nextBindingIndex();
25137
24896
  if (bindingUpdated(lView, bindingIndex, rawValue)) {
25138
- const prevConsumer = setActiveConsumer$1(null);
24897
+ const prevConsumer = setActiveConsumer(null);
25139
24898
  try {
25140
24899
  const value = Boolean(rawValue); // handle truthy or falsy values
25141
24900
  const tView = lView[TVIEW];
@@ -25147,7 +24906,7 @@ function ɵɵdeferPrefetchWhen(rawValue) {
25147
24906
  }
25148
24907
  }
25149
24908
  finally {
25150
- setActiveConsumer$1(prevConsumer);
24909
+ setActiveConsumer(prevConsumer);
25151
24910
  }
25152
24911
  }
25153
24912
  }
@@ -25176,7 +24935,7 @@ function ɵɵdeferHydrateWhen(rawValue) {
25176
24935
  }
25177
24936
  else {
25178
24937
  const injector = lView[INJECTOR];
25179
- const prevConsumer = setActiveConsumer$1(null);
24938
+ const prevConsumer = setActiveConsumer(null);
25180
24939
  try {
25181
24940
  const value = Boolean(rawValue); // handle truthy or falsy values
25182
24941
  if (value === true) {
@@ -25190,7 +24949,7 @@ function ɵɵdeferHydrateWhen(rawValue) {
25190
24949
  }
25191
24950
  }
25192
24951
  finally {
25193
- setActiveConsumer$1(prevConsumer);
24952
+ setActiveConsumer(prevConsumer);
25194
24953
  }
25195
24954
  }
25196
24955
  }
@@ -25240,7 +24999,7 @@ function ɵɵdeferPrefetchOnIdle() {
25240
24999
  }
25241
25000
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
25242
25001
  return;
25243
- scheduleDelayedPrefetching(onIdle, 0 /* DeferBlockTrigger.Idle */);
25002
+ scheduleDelayedPrefetching(onIdle);
25244
25003
  }
25245
25004
  /**
25246
25005
  * Sets up logic to handle the `on idle` deferred trigger.
@@ -25356,7 +25115,7 @@ function ɵɵdeferPrefetchOnTimer(delay) {
25356
25115
  }
25357
25116
  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
25358
25117
  return;
25359
- scheduleDelayedPrefetching(onTimer(delay), 5 /* DeferBlockTrigger.Timer */);
25118
+ scheduleDelayedPrefetching(onTimer(delay));
25360
25119
  }
25361
25120
  /**
25362
25121
  * Creates runtime data structures for the `on timer` hydrate trigger.
@@ -25604,7 +25363,6 @@ function ɵɵattribute(name, value, sanitizer, namespace) {
25604
25363
  */
25605
25364
  function interpolationV(lView, values) {
25606
25365
  ngDevMode && assertLessThan(2, values.length, 'should have at least 3 values');
25607
- ngDevMode && assertEqual(values.length % 2, 1, 'should have an odd number of values');
25608
25366
  let isBindingUpdated = false;
25609
25367
  let bindingIndex = getBindingIndex();
25610
25368
  for (let i = 1; i < values.length; i += 2) {
@@ -25618,7 +25376,8 @@ function interpolationV(lView, values) {
25618
25376
  // Build the updated content
25619
25377
  let content = values[0];
25620
25378
  for (let i = 1; i < values.length; i += 2) {
25621
- content += renderStringify(values[i]) + values[i + 1];
25379
+ // The condition is to prevent an out-of-bound read
25380
+ content += renderStringify(values[i]) + (i + 1 !== values.length ? values[i + 1] : '');
25622
25381
  }
25623
25382
  return content;
25624
25383
  }
@@ -25629,14 +25388,14 @@ function interpolationV(lView, values) {
25629
25388
  * @param v0 value checked for change.
25630
25389
  * @param suffix static value used for concatenation only.
25631
25390
  */
25632
- function interpolation1(lView, prefix, v0, suffix) {
25391
+ function interpolation1(lView, prefix, v0, suffix = '') {
25633
25392
  const different = bindingUpdated(lView, nextBindingIndex(), v0);
25634
25393
  return different ? prefix + renderStringify(v0) + suffix : NO_CHANGE;
25635
25394
  }
25636
25395
  /**
25637
25396
  * Creates an interpolation binding with 2 expressions.
25638
25397
  */
25639
- function interpolation2(lView, prefix, v0, i0, v1, suffix) {
25398
+ function interpolation2(lView, prefix, v0, i0, v1, suffix = '') {
25640
25399
  const bindingIndex = getBindingIndex();
25641
25400
  const different = bindingUpdated2(lView, bindingIndex, v0, v1);
25642
25401
  incrementBindingIndex(2);
@@ -25645,7 +25404,7 @@ function interpolation2(lView, prefix, v0, i0, v1, suffix) {
25645
25404
  /**
25646
25405
  * Creates an interpolation binding with 3 expressions.
25647
25406
  */
25648
- function interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix) {
25407
+ function interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix = '') {
25649
25408
  const bindingIndex = getBindingIndex();
25650
25409
  const different = bindingUpdated3(lView, bindingIndex, v0, v1, v2);
25651
25410
  incrementBindingIndex(3);
@@ -25656,7 +25415,7 @@ function interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix) {
25656
25415
  /**
25657
25416
  * Create an interpolation binding with 4 expressions.
25658
25417
  */
25659
- function interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
25418
+ function interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix = '') {
25660
25419
  const bindingIndex = getBindingIndex();
25661
25420
  const different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
25662
25421
  incrementBindingIndex(4);
@@ -25675,7 +25434,7 @@ function interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
25675
25434
  /**
25676
25435
  * Creates an interpolation binding with 5 expressions.
25677
25436
  */
25678
- function interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
25437
+ function interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix = '') {
25679
25438
  const bindingIndex = getBindingIndex();
25680
25439
  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
25681
25440
  different = bindingUpdated(lView, bindingIndex + 4, v4) || different;
@@ -25697,7 +25456,7 @@ function interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffi
25697
25456
  /**
25698
25457
  * Creates an interpolation binding with 6 expressions.
25699
25458
  */
25700
- function interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
25459
+ function interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix = '') {
25701
25460
  const bindingIndex = getBindingIndex();
25702
25461
  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
25703
25462
  different = bindingUpdated2(lView, bindingIndex + 4, v4, v5) || different;
@@ -25721,7 +25480,7 @@ function interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v
25721
25480
  /**
25722
25481
  * Creates an interpolation binding with 7 expressions.
25723
25482
  */
25724
- function interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
25483
+ function interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix = '') {
25725
25484
  const bindingIndex = getBindingIndex();
25726
25485
  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
25727
25486
  different = bindingUpdated3(lView, bindingIndex + 4, v4, v5, v6) || different;
@@ -25747,7 +25506,7 @@ function interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v
25747
25506
  /**
25748
25507
  * Creates an interpolation binding with 8 expressions.
25749
25508
  */
25750
- function interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
25509
+ function interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix = '') {
25751
25510
  const bindingIndex = getBindingIndex();
25752
25511
  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
25753
25512
  different = bindingUpdated4(lView, bindingIndex + 4, v4, v5, v6, v7) || different;
@@ -25804,7 +25563,7 @@ function ɵɵattributeInterpolate1(attrName, prefix, v0, suffix, sanitizer, name
25804
25563
  const tNode = getSelectedTNode();
25805
25564
  elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
25806
25565
  ngDevMode &&
25807
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 1, prefix, suffix);
25566
+ storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 1, prefix, suffix ?? '');
25808
25567
  }
25809
25568
  return ɵɵattributeInterpolate1;
25810
25569
  }
@@ -25841,7 +25600,7 @@ function ɵɵattributeInterpolate2(attrName, prefix, v0, i0, v1, suffix, sanitiz
25841
25600
  const tNode = getSelectedTNode();
25842
25601
  elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
25843
25602
  ngDevMode &&
25844
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 2, prefix, i0, suffix);
25603
+ storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 2, prefix, i0, suffix ?? '');
25845
25604
  }
25846
25605
  return ɵɵattributeInterpolate2;
25847
25606
  }
@@ -25881,7 +25640,7 @@ function ɵɵattributeInterpolate3(attrName, prefix, v0, i0, v1, i1, v2, suffix,
25881
25640
  const tNode = getSelectedTNode();
25882
25641
  elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
25883
25642
  ngDevMode &&
25884
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 3, prefix, i0, i1, suffix);
25643
+ storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 3, prefix, i0, i1, suffix ?? '');
25885
25644
  }
25886
25645
  return ɵɵattributeInterpolate3;
25887
25646
  }
@@ -25923,7 +25682,7 @@ function ɵɵattributeInterpolate4(attrName, prefix, v0, i0, v1, i1, v2, i2, v3,
25923
25682
  const tNode = getSelectedTNode();
25924
25683
  elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
25925
25684
  ngDevMode &&
25926
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);
25685
+ storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix ?? '');
25927
25686
  }
25928
25687
  return ɵɵattributeInterpolate4;
25929
25688
  }
@@ -25967,7 +25726,7 @@ function ɵɵattributeInterpolate5(attrName, prefix, v0, i0, v1, i1, v2, i2, v3,
25967
25726
  const tNode = getSelectedTNode();
25968
25727
  elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
25969
25728
  ngDevMode &&
25970
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);
25729
+ storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix ?? '');
25971
25730
  }
25972
25731
  return ɵɵattributeInterpolate5;
25973
25732
  }
@@ -26013,7 +25772,7 @@ function ɵɵattributeInterpolate6(attrName, prefix, v0, i0, v1, i1, v2, i2, v3,
26013
25772
  const tNode = getSelectedTNode();
26014
25773
  elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
26015
25774
  ngDevMode &&
26016
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);
25775
+ storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix ?? '');
26017
25776
  }
26018
25777
  return ɵɵattributeInterpolate6;
26019
25778
  }
@@ -26061,7 +25820,7 @@ function ɵɵattributeInterpolate7(attrName, prefix, v0, i0, v1, i1, v2, i2, v3,
26061
25820
  const tNode = getSelectedTNode();
26062
25821
  elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
26063
25822
  ngDevMode &&
26064
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);
25823
+ storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix ?? '');
26065
25824
  }
26066
25825
  return ɵɵattributeInterpolate7;
26067
25826
  }
@@ -26111,7 +25870,7 @@ function ɵɵattributeInterpolate8(attrName, prefix, v0, i0, v1, i1, v2, i2, v3,
26111
25870
  const tNode = getSelectedTNode();
26112
25871
  elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
26113
25872
  ngDevMode &&
26114
- storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);
25873
+ storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix ?? '');
26115
25874
  }
26116
25875
  return ɵɵattributeInterpolate8;
26117
25876
  }
@@ -26174,7 +25933,7 @@ function getTStylingRangePrevDuplicate(tStylingRange) {
26174
25933
  function setTStylingRangePrev(tStylingRange, previous) {
26175
25934
  ngDevMode && assertNumber(tStylingRange, 'expected number');
26176
25935
  ngDevMode && assertNumberInRange(previous, 0, 32767 /* StylingRange.UNSIGNED_MASK */);
26177
- return ((tStylingRange & ~4294836224 /* StylingRange.PREV_MASK */) |
25936
+ return ((tStylingRange & 131071 /* StylingRange.PREV_MASK */) |
26178
25937
  (previous << 17 /* StylingRange.PREV_SHIFT */));
26179
25938
  }
26180
25939
  function setTStylingRangePrevDuplicate(tStylingRange) {
@@ -26188,7 +25947,7 @@ function getTStylingRangeNext(tStylingRange) {
26188
25947
  function setTStylingRangeNext(tStylingRange, next) {
26189
25948
  ngDevMode && assertNumber(tStylingRange, 'expected number');
26190
25949
  ngDevMode && assertNumberInRange(next, 0, 32767 /* StylingRange.UNSIGNED_MASK */);
26191
- return ((tStylingRange & ~131068 /* StylingRange.NEXT_MASK */) | //
25950
+ return ((tStylingRange & -131069 /* StylingRange.NEXT_MASK */) | //
26192
25951
  (next << 2 /* StylingRange.NEXT_SHIFT */));
26193
25952
  }
26194
25953
  function getTStylingRangeNextDuplicate(tStylingRange) {
@@ -26199,166 +25958,7 @@ function setTStylingRangeNextDuplicate(tStylingRange) {
26199
25958
  ngDevMode && assertNumber(tStylingRange, 'expected number');
26200
25959
  return (tStylingRange | 1 /* StylingRange.NEXT_DUPLICATE */);
26201
25960
  }
26202
- function getTStylingRangeTail(tStylingRange) {
26203
- ngDevMode && assertNumber(tStylingRange, 'expected number');
26204
- const next = getTStylingRangeNext(tStylingRange);
26205
- return next === 0 ? getTStylingRangePrev(tStylingRange) : next;
26206
- }
26207
25961
 
26208
- /**
26209
- * NOTE: The word `styling` is used interchangeably as style or class styling.
26210
- *
26211
- * This file contains code to link styling instructions together so that they can be replayed in
26212
- * priority order. The file exists because Ivy styling instruction execution order does not match
26213
- * that of the priority order. The purpose of this code is to create a linked list so that the
26214
- * instructions can be traversed in priority order when computing the styles.
26215
- *
26216
- * Assume we are dealing with the following code:
26217
- * ```angular-ts
26218
- * @Component({
26219
- * template: `
26220
- * <my-cmp [style]=" {color: '#001'} "
26221
- * [style.color]=" #002 "
26222
- * dir-style-color-1
26223
- * dir-style-color-2> `
26224
- * })
26225
- * class ExampleComponent {
26226
- * static ngComp = ... {
26227
- * ...
26228
- * // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
26229
- * ɵɵstyleMap({color: '#001'});
26230
- * ɵɵstyleProp('color', '#002');
26231
- * ...
26232
- * }
26233
- * }
26234
- *
26235
- * @Directive({
26236
- * selector: `[dir-style-color-1]',
26237
- * })
26238
- * class Style1Directive {
26239
- * @HostBinding('style') style = {color: '#005'};
26240
- * @HostBinding('style.color') color = '#006';
26241
- *
26242
- * static ngDir = ... {
26243
- * ...
26244
- * // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
26245
- * ɵɵstyleMap({color: '#005'});
26246
- * ɵɵstyleProp('color', '#006');
26247
- * ...
26248
- * }
26249
- * }
26250
- *
26251
- * @Directive({
26252
- * selector: `[dir-style-color-2]',
26253
- * })
26254
- * class Style2Directive {
26255
- * @HostBinding('style') style = {color: '#007'};
26256
- * @HostBinding('style.color') color = '#008';
26257
- *
26258
- * static ngDir = ... {
26259
- * ...
26260
- * // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
26261
- * ɵɵstyleMap({color: '#007'});
26262
- * ɵɵstyleProp('color', '#008');
26263
- * ...
26264
- * }
26265
- * }
26266
- *
26267
- * @Directive({
26268
- * selector: `my-cmp',
26269
- * })
26270
- * class MyComponent {
26271
- * @HostBinding('style') style = {color: '#003'};
26272
- * @HostBinding('style.color') color = '#004';
26273
- *
26274
- * static ngComp = ... {
26275
- * ...
26276
- * // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
26277
- * ɵɵstyleMap({color: '#003'});
26278
- * ɵɵstyleProp('color', '#004');
26279
- * ...
26280
- * }
26281
- * }
26282
- * ```
26283
- *
26284
- * The Order of instruction execution is:
26285
- *
26286
- * NOTE: the comment binding location is for illustrative purposes only.
26287
- *
26288
- * ```ts
26289
- * // Template: (ExampleComponent)
26290
- * ɵɵstyleMap({color: '#001'}); // Binding index: 10
26291
- * ɵɵstyleProp('color', '#002'); // Binding index: 12
26292
- * // MyComponent
26293
- * ɵɵstyleMap({color: '#003'}); // Binding index: 20
26294
- * ɵɵstyleProp('color', '#004'); // Binding index: 22
26295
- * // Style1Directive
26296
- * ɵɵstyleMap({color: '#005'}); // Binding index: 24
26297
- * ɵɵstyleProp('color', '#006'); // Binding index: 26
26298
- * // Style2Directive
26299
- * ɵɵstyleMap({color: '#007'}); // Binding index: 28
26300
- * ɵɵstyleProp('color', '#008'); // Binding index: 30
26301
- * ```
26302
- *
26303
- * The correct priority order of concatenation is:
26304
- *
26305
- * ```ts
26306
- * // MyComponent
26307
- * ɵɵstyleMap({color: '#003'}); // Binding index: 20
26308
- * ɵɵstyleProp('color', '#004'); // Binding index: 22
26309
- * // Style1Directive
26310
- * ɵɵstyleMap({color: '#005'}); // Binding index: 24
26311
- * ɵɵstyleProp('color', '#006'); // Binding index: 26
26312
- * // Style2Directive
26313
- * ɵɵstyleMap({color: '#007'}); // Binding index: 28
26314
- * ɵɵstyleProp('color', '#008'); // Binding index: 30
26315
- * // Template: (ExampleComponent)
26316
- * ɵɵstyleMap({color: '#001'}); // Binding index: 10
26317
- * ɵɵstyleProp('color', '#002'); // Binding index: 12
26318
- * ```
26319
- *
26320
- * What color should be rendered?
26321
- *
26322
- * Once the items are correctly sorted in the list, the answer is simply the last item in the
26323
- * concatenation list which is `#002`.
26324
- *
26325
- * To do so we keep a linked list of all of the bindings which pertain to this element.
26326
- * Notice that the bindings are inserted in the order of execution, but the `TView.data` allows
26327
- * us to traverse them in the order of priority.
26328
- *
26329
- * |Idx|`TView.data`|`LView` | Notes
26330
- * |---|------------|-----------------|--------------
26331
- * |...| | |
26332
- * |10 |`null` |`{color: '#001'}`| `ɵɵstyleMap('color', {color: '#001'})`
26333
- * |11 |`30 | 12` | ... |
26334
- * |12 |`color` |`'#002'` | `ɵɵstyleProp('color', '#002')`
26335
- * |13 |`10 | 0` | ... |
26336
- * |...| | |
26337
- * |20 |`null` |`{color: '#003'}`| `ɵɵstyleMap('color', {color: '#003'})`
26338
- * |21 |`0 | 22` | ... |
26339
- * |22 |`color` |`'#004'` | `ɵɵstyleProp('color', '#004')`
26340
- * |23 |`20 | 24` | ... |
26341
- * |24 |`null` |`{color: '#005'}`| `ɵɵstyleMap('color', {color: '#005'})`
26342
- * |25 |`22 | 26` | ... |
26343
- * |26 |`color` |`'#006'` | `ɵɵstyleProp('color', '#006')`
26344
- * |27 |`24 | 28` | ... |
26345
- * |28 |`null` |`{color: '#007'}`| `ɵɵstyleMap('color', {color: '#007'})`
26346
- * |29 |`26 | 30` | ... |
26347
- * |30 |`color` |`'#008'` | `ɵɵstyleProp('color', '#008')`
26348
- * |31 |`28 | 10` | ... |
26349
- *
26350
- * The above data structure allows us to re-concatenate the styling no matter which data binding
26351
- * changes.
26352
- *
26353
- * NOTE: in addition to keeping track of next/previous index the `TView.data` also stores prev/next
26354
- * duplicate bit. The duplicate bit if true says there either is a binding with the same name or
26355
- * there is a map (which may contain the name). This information is useful in knowing if other
26356
- * styles with higher priority need to be searched for overwrites.
26357
- *
26358
- * NOTE: See `should support example in 'tnode_linked_list.ts' documentation` in
26359
- * `tnode_linked_list_spec.ts` for working example.
26360
- */
26361
- let __unused_const_as_closure_does_not_like_standalone_comment_blocks__;
26362
25962
  /**
26363
25963
  * Insert new `tStyleValue` at `TData` and link existing style bindings such that we maintain linked
26364
25964
  * list of styles and compute the duplicate flag.
@@ -27679,12 +27279,7 @@ function isStylingValuePresent(value) {
27679
27279
  * @param suffix
27680
27280
  */
27681
27281
  function normalizeSuffix(value, suffix) {
27682
- if (value == null || value === '') {
27683
- // do nothing
27684
- // Do not add the suffix if the value is going to be empty.
27685
- // As it produce invalid CSS, which the browsers will automatically omit but Domino will not.
27686
- // Example: `"left": "px;"` instead of `"left": ""`.
27687
- }
27282
+ if (value == null || value === '') ;
27688
27283
  else if (typeof suffix === 'string') {
27689
27284
  value = value + suffix;
27690
27285
  }
@@ -28391,7 +27986,7 @@ function ɵɵconditional(matchingTemplateIndex, contextValue) {
28391
27986
  : undefined;
28392
27987
  const viewInContainerIdx = 0;
28393
27988
  if (bindingUpdated(hostLView, bindingIndex, matchingTemplateIndex)) {
28394
- const prevConsumer = setActiveConsumer$1(null);
27989
+ const prevConsumer = setActiveConsumer(null);
28395
27990
  try {
28396
27991
  // The index of the view to show changed - remove the previously displayed one
28397
27992
  // (it is a noop if there are no active views in a container).
@@ -28412,7 +28007,7 @@ function ɵɵconditional(matchingTemplateIndex, contextValue) {
28412
28007
  }
28413
28008
  }
28414
28009
  finally {
28415
- setActiveConsumer$1(prevConsumer);
28010
+ setActiveConsumer(prevConsumer);
28416
28011
  }
28417
28012
  }
28418
28013
  else if (prevContainer !== undefined) {
@@ -28614,7 +28209,7 @@ class LiveCollectionLContainerImpl extends LiveCollection {
28614
28209
  * @codeGenApi
28615
28210
  */
28616
28211
  function ɵɵrepeater(collection) {
28617
- const prevConsumer = setActiveConsumer$1(null);
28212
+ const prevConsumer = setActiveConsumer(null);
28618
28213
  const metadataSlotIdx = getSelectedIndex();
28619
28214
  try {
28620
28215
  const hostLView = getLView();
@@ -28666,7 +28261,7 @@ function ɵɵrepeater(collection) {
28666
28261
  }
28667
28262
  }
28668
28263
  finally {
28669
- setActiveConsumer$1(prevConsumer);
28264
+ setActiveConsumer(prevConsumer);
28670
28265
  }
28671
28266
  }
28672
28267
  function getLContainer(lView, index) {
@@ -29071,25 +28666,10 @@ function ɵɵsyntheticHostProperty(propName, value, sanitizer) {
29071
28666
  return ɵɵsyntheticHostProperty;
29072
28667
  }
29073
28668
 
29074
- /**
29075
- * NOTE: changes to the `ngI18nClosureMode` name must be synced with `compiler-cli/src/tooling.ts`.
29076
- */
29077
- if (typeof ngI18nClosureMode === 'undefined') {
29078
- // These property accesses can be ignored because ngI18nClosureMode will be set to false
29079
- // when optimizing code and the whole if statement will be dropped.
29080
- // Make sure to refer to ngI18nClosureMode as ['ngI18nClosureMode'] for closure.
29081
- // NOTE: we need to have it in IIFE so that the tree-shaker is happy.
29082
- (function () {
29083
- _global['ngI18nClosureMode'] =
29084
- // TODO(FW-1250): validate that this actually, you know, works.
29085
- typeof goog !== 'undefined' && typeof goog.getMsg === 'function';
29086
- })();
29087
- }
29088
-
29089
28669
  // THIS CODE IS GENERATED - DO NOT MODIFY.
29090
28670
  const u = undefined;
29091
28671
  function plural(val) {
29092
- const n = val, i = Math.floor(Math.abs(val)), v = val.toString().replace(/^[^.]*\.?/, '').length;
28672
+ const i = Math.floor(Math.abs(val)), v = val.toString().replace(/^[^.]*\.?/, '').length;
29093
28673
  if (i === 1 && v === 0)
29094
28674
  return 1;
29095
28675
  return 5;
@@ -29453,7 +29033,6 @@ function applyMutableOpCodes(tView, mutableOpCodes, lView, anchorRNode) {
29453
29033
  if (typeof opCode == 'string') {
29454
29034
  const textNodeIndex = mutableOpCodes[++i];
29455
29035
  if (lView[textNodeIndex] === null) {
29456
- ngDevMode && ngDevMode.rendererCreateTextNode++;
29457
29036
  ngDevMode && assertIndexInRange(lView, textNodeIndex);
29458
29037
  lView[textNodeIndex] = _locateOrCreateNode(lView, textNodeIndex, opCode, Node.TEXT_NODE);
29459
29038
  }
@@ -29527,7 +29106,6 @@ function applyMutableOpCodes(tView, mutableOpCodes, lView, anchorRNode) {
29527
29106
  if (lView[commentNodeIndex] === null) {
29528
29107
  ngDevMode &&
29529
29108
  assertEqual(typeof commentValue, 'string', `Expected "${commentValue}" to be a comment node value`);
29530
- ngDevMode && ngDevMode.rendererCreateComment++;
29531
29109
  ngDevMode && assertIndexInExpandoRange(lView, commentNodeIndex);
29532
29110
  const commentRNode = (lView[commentNodeIndex] = _locateOrCreateNode(lView, commentNodeIndex, commentValue, Node.COMMENT_NODE));
29533
29111
  // FIXME(misko): Attaching patch data is only needed for the root (Also add tests)
@@ -29540,7 +29118,6 @@ function applyMutableOpCodes(tView, mutableOpCodes, lView, anchorRNode) {
29540
29118
  if (lView[elementNodeIndex] === null) {
29541
29119
  ngDevMode &&
29542
29120
  assertEqual(typeof tagName, 'string', `Expected "${tagName}" to be an element node tag name`);
29543
- ngDevMode && ngDevMode.rendererCreateElement++;
29544
29121
  ngDevMode && assertIndexInExpandoRange(lView, elementNodeIndex);
29545
29122
  const elementRNode = (lView[elementNodeIndex] = _locateOrCreateNode(lView, elementNodeIndex, tagName, Node.ELEMENT_NODE));
29546
29123
  // FIXME(misko): Attaching patch data is only needed for the root (Also add tests)
@@ -31097,7 +30674,7 @@ function ɵɵpropertyInterpolate1(propName, prefix, v0, suffix, sanitizer) {
31097
30674
  const tNode = getSelectedTNode();
31098
30675
  elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
31099
30676
  ngDevMode &&
31100
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 1, prefix, suffix);
30677
+ storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 1, prefix, suffix ?? '');
31101
30678
  }
31102
30679
  return ɵɵpropertyInterpolate1;
31103
30680
  }
@@ -31139,7 +30716,7 @@ function ɵɵpropertyInterpolate2(propName, prefix, v0, i0, v1, suffix, sanitize
31139
30716
  const tNode = getSelectedTNode();
31140
30717
  elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
31141
30718
  ngDevMode &&
31142
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 2, prefix, i0, suffix);
30719
+ storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 2, prefix, i0, suffix ?? '');
31143
30720
  }
31144
30721
  return ɵɵpropertyInterpolate2;
31145
30722
  }
@@ -31184,7 +30761,7 @@ function ɵɵpropertyInterpolate3(propName, prefix, v0, i0, v1, i1, v2, suffix,
31184
30761
  const tNode = getSelectedTNode();
31185
30762
  elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
31186
30763
  ngDevMode &&
31187
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 3, prefix, i0, i1, suffix);
30764
+ storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 3, prefix, i0, i1, suffix ?? '');
31188
30765
  }
31189
30766
  return ɵɵpropertyInterpolate3;
31190
30767
  }
@@ -31231,7 +30808,7 @@ function ɵɵpropertyInterpolate4(propName, prefix, v0, i0, v1, i1, v2, i2, v3,
31231
30808
  const tNode = getSelectedTNode();
31232
30809
  elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
31233
30810
  ngDevMode &&
31234
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);
30811
+ storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix ?? '');
31235
30812
  }
31236
30813
  return ɵɵpropertyInterpolate4;
31237
30814
  }
@@ -31280,7 +30857,7 @@ function ɵɵpropertyInterpolate5(propName, prefix, v0, i0, v1, i1, v2, i2, v3,
31280
30857
  const tNode = getSelectedTNode();
31281
30858
  elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
31282
30859
  ngDevMode &&
31283
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);
30860
+ storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix ?? '');
31284
30861
  }
31285
30862
  return ɵɵpropertyInterpolate5;
31286
30863
  }
@@ -31331,7 +30908,7 @@ function ɵɵpropertyInterpolate6(propName, prefix, v0, i0, v1, i1, v2, i2, v3,
31331
30908
  const tNode = getSelectedTNode();
31332
30909
  elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
31333
30910
  ngDevMode &&
31334
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);
30911
+ storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix ?? '');
31335
30912
  }
31336
30913
  return ɵɵpropertyInterpolate6;
31337
30914
  }
@@ -31384,7 +30961,7 @@ function ɵɵpropertyInterpolate7(propName, prefix, v0, i0, v1, i1, v2, i2, v3,
31384
30961
  const tNode = getSelectedTNode();
31385
30962
  elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
31386
30963
  ngDevMode &&
31387
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);
30964
+ storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix ?? '');
31388
30965
  }
31389
30966
  return ɵɵpropertyInterpolate7;
31390
30967
  }
@@ -31439,7 +31016,7 @@ function ɵɵpropertyInterpolate8(propName, prefix, v0, i0, v1, i1, v2, i2, v3,
31439
31016
  const tNode = getSelectedTNode();
31440
31017
  elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
31441
31018
  ngDevMode &&
31442
- storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);
31019
+ storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix ?? '');
31443
31020
  }
31444
31021
  return ɵɵpropertyInterpolate8;
31445
31022
  }
@@ -32359,7 +31936,7 @@ function enableLocateOrCreateTextNodeImpl() {
32359
31936
  * @codeGenApi
32360
31937
  */
32361
31938
  function ɵɵtextInterpolate(v0) {
32362
- ɵɵtextInterpolate1('', v0, '');
31939
+ ɵɵtextInterpolate1('', v0);
32363
31940
  return ɵɵtextInterpolate;
32364
31941
  }
32365
31942
  /**
@@ -32784,26 +32361,6 @@ function ɵɵattachSourceLocations(templatePath, locations) {
32784
32361
  }
32785
32362
  }
32786
32363
 
32787
- /*
32788
- * This file re-exports all symbols contained in this directory.
32789
- *
32790
- * Why is this file not `index.ts`?
32791
- *
32792
- * There seems to be an inconsistent path resolution of an `index.ts` file
32793
- * when only the parent directory is referenced. This could be due to the
32794
- * node module resolution configuration differing from rollup and/or typescript.
32795
- *
32796
- * With commit
32797
- * https://github.com/angular/angular/commit/d5e3f2c64bd13ce83e7c70788b7fc514ca4a9918
32798
- * the `instructions.ts` file was moved to `instructions/instructions.ts` and an
32799
- * `index.ts` file was used to re-export everything. Having had file names that were
32800
- * importing from `instructions' directly (not the from the sub file or the `index.ts`
32801
- * file) caused strange CI issues. `index.ts` had to be renamed to `all.ts` for this
32802
- * to work.
32803
- *
32804
- * Jira Issue = FW-1184
32805
- */
32806
-
32807
32364
  /**
32808
32365
  * Resolves the providers which are defined in the DirectiveDef.
32809
32366
  *
@@ -34026,7 +33583,7 @@ function resetProjectionState(tNode) {
34026
33583
  if (isTNodeShape(current)) {
34027
33584
  // Reset `projectionNext` since it can affect the traversal order during projection.
34028
33585
  current.projectionNext = null;
34029
- current.flags &= ~2 /* TNodeFlags.isProjected */;
33586
+ current.flags &= -3 /* TNodeFlags.isProjected */;
34030
33587
  }
34031
33588
  }
34032
33589
  tNode.projection = null;
@@ -34257,10 +33814,6 @@ function resetJitOptions() {
34257
33814
  jitOptions = null;
34258
33815
  }
34259
33816
 
34260
- function patchModuleCompilation() {
34261
- // Does nothing, but exists as a target for patching.
34262
- }
34263
-
34264
33817
  const moduleQueue = [];
34265
33818
  /**
34266
33819
  * Enqueues moduleDef to be checked later to see if scope can be set on its
@@ -34310,7 +33863,6 @@ function isResolvedDeclaration(declaration) {
34310
33863
  * This function automatically gets called when a class has a `@NgModule` decorator.
34311
33864
  */
34312
33865
  function compileNgModule(moduleType, ngModule = {}) {
34313
- patchModuleCompilation();
34314
33866
  compileNgModuleDefs(moduleType, ngModule);
34315
33867
  if (ngModule.id !== undefined) {
34316
33868
  registerNgModuleType(moduleType, ngModule.id);
@@ -34674,7 +34226,7 @@ function patchComponentDefWithScope(componentDef, transitiveScopes) {
34674
34226
  */
34675
34227
  function transitiveScopesFor(type) {
34676
34228
  if (isNgModule(type)) {
34677
- if (USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {
34229
+ {
34678
34230
  const scope = depsTracker.getNgModuleScope(type);
34679
34231
  const def = getNgModuleDef(type, true);
34680
34232
  return {
@@ -34682,9 +34234,6 @@ function transitiveScopesFor(type) {
34682
34234
  ...scope,
34683
34235
  };
34684
34236
  }
34685
- else {
34686
- return transitiveScopesForNgModule(type);
34687
- }
34688
34237
  }
34689
34238
  else if (isStandalone(type)) {
34690
34239
  const directiveDef = getComponentDef(type) || getDirectiveDef(type);
@@ -34719,77 +34268,6 @@ function transitiveScopesFor(type) {
34719
34268
  // TODO: change the error message to be more user-facing and take standalone into account
34720
34269
  throw new Error(`${type.name} does not have a module def (ɵmod property)`);
34721
34270
  }
34722
- /**
34723
- * Compute the pair of transitive scopes (compilation scope and exported scope) for a given module.
34724
- *
34725
- * This operation is memoized and the result is cached on the module's definition. This function can
34726
- * be called on modules with components that have not fully compiled yet, but the result should not
34727
- * be used until they have.
34728
- *
34729
- * @param moduleType module that transitive scope should be calculated for.
34730
- */
34731
- function transitiveScopesForNgModule(moduleType) {
34732
- const def = getNgModuleDef(moduleType, true);
34733
- if (def.transitiveCompileScopes !== null) {
34734
- return def.transitiveCompileScopes;
34735
- }
34736
- const scopes = {
34737
- schemas: def.schemas || null,
34738
- compilation: {
34739
- directives: new Set(),
34740
- pipes: new Set(),
34741
- },
34742
- exported: {
34743
- directives: new Set(),
34744
- pipes: new Set(),
34745
- },
34746
- };
34747
- maybeUnwrapFn(def.imports).forEach((imported) => {
34748
- // When this module imports another, the imported module's exported directives and pipes are
34749
- // added to the compilation scope of this module.
34750
- const importedScope = transitiveScopesFor(imported);
34751
- importedScope.exported.directives.forEach((entry) => scopes.compilation.directives.add(entry));
34752
- importedScope.exported.pipes.forEach((entry) => scopes.compilation.pipes.add(entry));
34753
- });
34754
- maybeUnwrapFn(def.declarations).forEach((declared) => {
34755
- const declaredWithDefs = declared;
34756
- if (getPipeDef$1(declaredWithDefs)) {
34757
- scopes.compilation.pipes.add(declared);
34758
- }
34759
- else {
34760
- // Either declared has a ɵcmp or ɵdir, or it's a component which hasn't
34761
- // had its template compiled yet. In either case, it gets added to the compilation's
34762
- // directives.
34763
- scopes.compilation.directives.add(declared);
34764
- }
34765
- });
34766
- maybeUnwrapFn(def.exports).forEach((exported) => {
34767
- const exportedType = exported;
34768
- // Either the type is a module, a pipe, or a component/directive (which may not have a
34769
- // ɵcmp as it might be compiled asynchronously).
34770
- if (isNgModule(exportedType)) {
34771
- // When this module exports another, the exported module's exported directives and pipes are
34772
- // added to both the compilation and exported scopes of this module.
34773
- const exportedScope = transitiveScopesFor(exportedType);
34774
- exportedScope.exported.directives.forEach((entry) => {
34775
- scopes.compilation.directives.add(entry);
34776
- scopes.exported.directives.add(entry);
34777
- });
34778
- exportedScope.exported.pipes.forEach((entry) => {
34779
- scopes.compilation.pipes.add(entry);
34780
- scopes.exported.pipes.add(entry);
34781
- });
34782
- }
34783
- else if (getPipeDef$1(exportedType)) {
34784
- scopes.exported.pipes.add(exportedType);
34785
- }
34786
- else {
34787
- scopes.exported.directives.add(exportedType);
34788
- }
34789
- });
34790
- def.transitiveCompileScopes = scopes;
34791
- return scopes;
34792
- }
34793
34271
  function expandModuleWithProviders(value) {
34794
34272
  if (isModuleWithProviders(value)) {
34795
34273
  return value.ngModule;
@@ -34962,43 +34440,8 @@ function compileComponent(type, metadata) {
34962
34440
  * component's `imports`.
34963
34441
  */
34964
34442
  function getStandaloneDefFunctions(type, imports) {
34965
- let cachedDirectiveDefs = null;
34966
- let cachedPipeDefs = null;
34967
34443
  const directiveDefs = () => {
34968
- if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {
34969
- if (cachedDirectiveDefs === null) {
34970
- // Standalone components are always able to self-reference, so include the component's own
34971
- // definition in its `directiveDefs`.
34972
- cachedDirectiveDefs = [getComponentDef(type)];
34973
- const seen = new Set([type]);
34974
- for (const rawDep of imports) {
34975
- ngDevMode && verifyStandaloneImport(rawDep, type);
34976
- const dep = resolveForwardRef(rawDep);
34977
- if (seen.has(dep)) {
34978
- continue;
34979
- }
34980
- seen.add(dep);
34981
- if (!!getNgModuleDef(dep)) {
34982
- const scope = transitiveScopesFor(dep);
34983
- for (const dir of scope.exported.directives) {
34984
- const def = getComponentDef(dir) || getDirectiveDef(dir);
34985
- if (def && !seen.has(dir)) {
34986
- seen.add(dir);
34987
- cachedDirectiveDefs.push(def);
34988
- }
34989
- }
34990
- }
34991
- else {
34992
- const def = getComponentDef(dep) || getDirectiveDef(dep);
34993
- if (def) {
34994
- cachedDirectiveDefs.push(def);
34995
- }
34996
- }
34997
- }
34998
- }
34999
- return cachedDirectiveDefs;
35000
- }
35001
- else {
34444
+ {
35002
34445
  if (ngDevMode) {
35003
34446
  for (const rawDep of imports) {
35004
34447
  verifyStandaloneImport(rawDep, type);
@@ -35014,37 +34457,7 @@ function getStandaloneDefFunctions(type, imports) {
35014
34457
  }
35015
34458
  };
35016
34459
  const pipeDefs = () => {
35017
- if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {
35018
- if (cachedPipeDefs === null) {
35019
- cachedPipeDefs = [];
35020
- const seen = new Set();
35021
- for (const rawDep of imports) {
35022
- const dep = resolveForwardRef(rawDep);
35023
- if (seen.has(dep)) {
35024
- continue;
35025
- }
35026
- seen.add(dep);
35027
- if (!!getNgModuleDef(dep)) {
35028
- const scope = transitiveScopesFor(dep);
35029
- for (const pipe of scope.exported.pipes) {
35030
- const def = getPipeDef$1(pipe);
35031
- if (def && !seen.has(pipe)) {
35032
- seen.add(pipe);
35033
- cachedPipeDefs.push(def);
35034
- }
35035
- }
35036
- }
35037
- else {
35038
- const def = getPipeDef$1(dep);
35039
- if (def) {
35040
- cachedPipeDefs.push(def);
35041
- }
35042
- }
35043
- }
35044
- }
35045
- return cachedPipeDefs;
35046
- }
35047
- else {
34460
+ {
35048
34461
  if (ngDevMode) {
35049
34462
  for (const rawDep of imports) {
35050
34463
  verifyStandaloneImport(rawDep, type);
@@ -35380,11 +34793,6 @@ const NgModule = makeDecorator('NgModule', (ngModule) => ngModule, undefined, un
35380
34793
  */
35381
34794
  (type, meta) => compileNgModule(type, meta));
35382
34795
 
35383
- /**
35384
- * This indirection is needed to free up Component, etc symbols in the public API
35385
- * to be used by the decorator versions of these annotations.
35386
- */
35387
-
35388
34796
  /**
35389
34797
  * @description Represents the version of Angular
35390
34798
  *
@@ -35406,7 +34814,7 @@ class Version {
35406
34814
  /**
35407
34815
  * @publicApi
35408
34816
  */
35409
- const VERSION = new Version('20.0.0-next.1');
34817
+ const VERSION = new Version('20.0.0-next.2');
35410
34818
 
35411
34819
  /**
35412
34820
  * Combination of NgModuleFactory and ComponentFactories.
@@ -35559,6 +34967,7 @@ class NgZoneChangeDetectionScheduler {
35559
34967
  zone = inject(NgZone);
35560
34968
  changeDetectionScheduler = inject(ChangeDetectionScheduler);
35561
34969
  applicationRef = inject(ApplicationRef);
34970
+ applicationErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);
35562
34971
  _onMicrotaskEmptySubscription;
35563
34972
  initialize() {
35564
34973
  if (this._onMicrotaskEmptySubscription) {
@@ -35573,7 +34982,12 @@ class NgZoneChangeDetectionScheduler {
35573
34982
  return;
35574
34983
  }
35575
34984
  this.zone.run(() => {
35576
- this.applicationRef.tick();
34985
+ try {
34986
+ this.applicationRef.tick();
34987
+ }
34988
+ catch (e) {
34989
+ this.applicationErrorHandler(e);
34990
+ }
35577
34991
  });
35578
34992
  },
35579
34993
  });
@@ -35753,6 +35167,7 @@ function trackMicrotaskNotificationForDebugging() {
35753
35167
  }
35754
35168
  }
35755
35169
  class ChangeDetectionSchedulerImpl {
35170
+ applicationErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);
35756
35171
  appRef = inject(ApplicationRef);
35757
35172
  taskService = inject(PendingTasksInternal);
35758
35173
  ngZone = inject(NgZone);
@@ -35961,7 +35376,7 @@ class ChangeDetectionSchedulerImpl {
35961
35376
  }
35962
35377
  catch (e) {
35963
35378
  this.taskService.remove(task);
35964
- throw e;
35379
+ this.applicationErrorHandler(e);
35965
35380
  }
35966
35381
  finally {
35967
35382
  this.cleanup();
@@ -36116,7 +35531,7 @@ function getGlobalLocale() {
36116
35531
  */
36117
35532
  const LOCALE_ID = new InjectionToken(ngDevMode ? 'LocaleId' : '', {
36118
35533
  providedIn: 'root',
36119
- factory: () => inject(LOCALE_ID, InjectFlags.Optional | InjectFlags.SkipSelf) || getGlobalLocale(),
35534
+ factory: () => inject(LOCALE_ID, { optional: true, skipSelf: true }) || getGlobalLocale(),
36120
35535
  });
36121
35536
  /**
36122
35537
  * Provide this token to set the default currency code your application uses for
@@ -37001,8 +36416,6 @@ function enableProdMode() {
37001
36416
  }
37002
36417
  }
37003
36418
 
37004
- // Public API for render
37005
-
37006
36419
  /**
37007
36420
  * Returns the NgModuleFactory with the given id (specified using [@NgModule.id
37008
36421
  * field](api/core/NgModule#id)), if it exists and has been loaded. Factories for NgModules that do
@@ -37177,11 +36590,6 @@ class ViewRef extends ChangeDetectorRef {
37177
36590
  class EmbeddedViewRef extends ViewRef {
37178
36591
  }
37179
36592
 
37180
- // Public API for compiler
37181
-
37182
- // This file exists for easily patching NgModuleFactoryLoader in g3
37183
- var ng_module_factory_loader_impl = {};
37184
-
37185
36593
  /**
37186
36594
  * @publicApi
37187
36595
  */
@@ -37726,8 +37134,6 @@ function collectPropertyBindings(properties, tNode, lView, tData) {
37726
37134
  }
37727
37135
  }
37728
37136
  }
37729
- // Need to keep the nodes in a global Map so that multiple angular apps are supported.
37730
- const _nativeNodeToDebugNode = new Map();
37731
37137
  const NG_DEBUG_PROPERTY = '__ng_debug__';
37732
37138
  /**
37733
37139
  * @publicApi
@@ -37744,15 +37150,6 @@ function getDebugNode(nativeNode) {
37744
37150
  }
37745
37151
  return null;
37746
37152
  }
37747
- function getAllDebugNodes() {
37748
- return Array.from(_nativeNodeToDebugNode.values());
37749
- }
37750
- function indexDebugNode(node) {
37751
- _nativeNodeToDebugNode.set(node.nativeNode, node);
37752
- }
37753
- function removeDebugNodeFromIndex(node) {
37754
- _nativeNodeToDebugNode.delete(node.nativeNode);
37755
- }
37756
37153
 
37757
37154
  class DefaultIterableDifferFactory {
37758
37155
  constructor() { }
@@ -38808,12 +38205,6 @@ const iterableDiff = [new DefaultIterableDifferFactory()];
38808
38205
  const defaultIterableDiffers = new IterableDiffers(iterableDiff);
38809
38206
  const defaultKeyValueDiffers = new KeyValueDiffers(keyValDiff);
38810
38207
 
38811
- /**
38812
- * @module
38813
- * @description
38814
- * Change detection enables data binding in Angular.
38815
- */
38816
-
38817
38208
  /**
38818
38209
  * This platform has to be included in any other platform
38819
38210
  *
@@ -38839,658 +38230,6 @@ class ApplicationModule {
38839
38230
  type: NgModule
38840
38231
  }], () => [{ type: ApplicationRef }], null); })();
38841
38232
 
38842
- /**
38843
- * The default equality function used for `signal` and `computed`, which uses referential equality.
38844
- */
38845
- function defaultEquals(a, b) {
38846
- return Object.is(a, b);
38847
- }
38848
-
38849
- /**
38850
- * The currently active consumer `ReactiveNode`, if running code in a reactive context.
38851
- *
38852
- * Change this via `setActiveConsumer`.
38853
- */
38854
- let activeConsumer = null;
38855
- let inNotificationPhase = false;
38856
- /**
38857
- * Global epoch counter. Incremented whenever a source signal is set.
38858
- */
38859
- let epoch = 1;
38860
- /**
38861
- * Symbol used to tell `Signal`s apart from other functions.
38862
- *
38863
- * This can be used to auto-unwrap signals in various cases, or to auto-wrap non-signal values.
38864
- */
38865
- const SIGNAL = /* @__PURE__ */ Symbol('SIGNAL');
38866
- function setActiveConsumer(consumer) {
38867
- const prev = activeConsumer;
38868
- activeConsumer = consumer;
38869
- return prev;
38870
- }
38871
- function getActiveConsumer() {
38872
- return activeConsumer;
38873
- }
38874
- function isInNotificationPhase() {
38875
- return inNotificationPhase;
38876
- }
38877
- function isReactive(value) {
38878
- return value[SIGNAL] !== undefined;
38879
- }
38880
- const REACTIVE_NODE = {
38881
- version: 0,
38882
- lastCleanEpoch: 0,
38883
- dirty: false,
38884
- producerNode: undefined,
38885
- producerLastReadVersion: undefined,
38886
- producerIndexOfThis: undefined,
38887
- nextProducerIndex: 0,
38888
- liveConsumerNode: undefined,
38889
- liveConsumerIndexOfThis: undefined,
38890
- consumerAllowSignalWrites: false,
38891
- consumerIsAlwaysLive: false,
38892
- kind: 'unknown',
38893
- producerMustRecompute: () => false,
38894
- producerRecomputeValue: () => { },
38895
- consumerMarkedDirty: () => { },
38896
- consumerOnSignalRead: () => { },
38897
- };
38898
- /**
38899
- * Called by implementations when a producer's signal is read.
38900
- */
38901
- function producerAccessed(node) {
38902
- if (inNotificationPhase) {
38903
- throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode
38904
- ? `Assertion error: signal read during notification phase`
38905
- : '');
38906
- }
38907
- if (activeConsumer === null) {
38908
- // Accessed outside of a reactive context, so nothing to record.
38909
- return;
38910
- }
38911
- activeConsumer.consumerOnSignalRead(node);
38912
- // This producer is the `idx`th dependency of `activeConsumer`.
38913
- const idx = activeConsumer.nextProducerIndex++;
38914
- assertConsumerNode(activeConsumer);
38915
- if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) {
38916
- // There's been a change in producers since the last execution of `activeConsumer`.
38917
- // `activeConsumer.producerNode[idx]` holds a stale dependency which will be be removed and
38918
- // replaced with `this`.
38919
- //
38920
- // If `activeConsumer` isn't live, then this is a no-op, since we can replace the producer in
38921
- // `activeConsumer.producerNode` directly. However, if `activeConsumer` is live, then we need
38922
- // to remove it from the stale producer's `liveConsumer`s.
38923
- if (consumerIsLive(activeConsumer)) {
38924
- const staleProducer = activeConsumer.producerNode[idx];
38925
- producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]);
38926
- // At this point, the only record of `staleProducer` is the reference at
38927
- // `activeConsumer.producerNode[idx]` which will be overwritten below.
38928
- }
38929
- }
38930
- if (activeConsumer.producerNode[idx] !== node) {
38931
- // We're a new dependency of the consumer (at `idx`).
38932
- activeConsumer.producerNode[idx] = node;
38933
- // If the active consumer is live, then add it as a live consumer. If not, then use 0 as a
38934
- // placeholder value.
38935
- activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer)
38936
- ? producerAddLiveConsumer(node, activeConsumer, idx)
38937
- : 0;
38938
- }
38939
- activeConsumer.producerLastReadVersion[idx] = node.version;
38940
- }
38941
- /**
38942
- * Increment the global epoch counter.
38943
- *
38944
- * Called by source producers (that is, not computeds) whenever their values change.
38945
- */
38946
- function producerIncrementEpoch() {
38947
- epoch++;
38948
- }
38949
- /**
38950
- * Ensure this producer's `version` is up-to-date.
38951
- */
38952
- function producerUpdateValueVersion(node) {
38953
- if (consumerIsLive(node) && !node.dirty) {
38954
- // A live consumer will be marked dirty by producers, so a clean state means that its version
38955
- // is guaranteed to be up-to-date.
38956
- return;
38957
- }
38958
- if (!node.dirty && node.lastCleanEpoch === epoch) {
38959
- // Even non-live consumers can skip polling if they previously found themselves to be clean at
38960
- // the current epoch, since their dependencies could not possibly have changed (such a change
38961
- // would've increased the epoch).
38962
- return;
38963
- }
38964
- if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {
38965
- // None of our producers report a change since the last time they were read, so no
38966
- // recomputation of our value is necessary, and we can consider ourselves clean.
38967
- producerMarkClean(node);
38968
- return;
38969
- }
38970
- node.producerRecomputeValue(node);
38971
- // After recomputing the value, we're no longer dirty.
38972
- producerMarkClean(node);
38973
- }
38974
- /**
38975
- * Propagate a dirty notification to live consumers of this producer.
38976
- */
38977
- function producerNotifyConsumers(node) {
38978
- if (node.liveConsumerNode === undefined) {
38979
- return;
38980
- }
38981
- // Prevent signal reads when we're updating the graph
38982
- const prev = inNotificationPhase;
38983
- inNotificationPhase = true;
38984
- try {
38985
- for (const consumer of node.liveConsumerNode) {
38986
- if (!consumer.dirty) {
38987
- consumerMarkDirty(consumer);
38988
- }
38989
- }
38990
- }
38991
- finally {
38992
- inNotificationPhase = prev;
38993
- }
38994
- }
38995
- /**
38996
- * Whether this `ReactiveNode` in its producer capacity is currently allowed to initiate updates,
38997
- * based on the current consumer context.
38998
- */
38999
- function producerUpdatesAllowed() {
39000
- return activeConsumer?.consumerAllowSignalWrites !== false;
39001
- }
39002
- function consumerMarkDirty(node) {
39003
- node.dirty = true;
39004
- producerNotifyConsumers(node);
39005
- node.consumerMarkedDirty?.(node);
39006
- }
39007
- function producerMarkClean(node) {
39008
- node.dirty = false;
39009
- node.lastCleanEpoch = epoch;
39010
- }
39011
- /**
39012
- * Prepare this consumer to run a computation in its reactive context.
39013
- *
39014
- * Must be called by subclasses which represent reactive computations, before those computations
39015
- * begin.
39016
- */
39017
- function consumerBeforeComputation(node) {
39018
- node && (node.nextProducerIndex = 0);
39019
- return setActiveConsumer(node);
39020
- }
39021
- /**
39022
- * Finalize this consumer's state after a reactive computation has run.
39023
- *
39024
- * Must be called by subclasses which represent reactive computations, after those computations
39025
- * have finished.
39026
- */
39027
- function consumerAfterComputation(node, prevConsumer) {
39028
- setActiveConsumer(prevConsumer);
39029
- if (!node ||
39030
- node.producerNode === undefined ||
39031
- node.producerIndexOfThis === undefined ||
39032
- node.producerLastReadVersion === undefined) {
39033
- return;
39034
- }
39035
- if (consumerIsLive(node)) {
39036
- // For live consumers, we need to remove the producer -> consumer edge for any stale producers
39037
- // which weren't dependencies after the recomputation.
39038
- for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {
39039
- producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
39040
- }
39041
- }
39042
- // Truncate the producer tracking arrays.
39043
- // Perf note: this is essentially truncating the length to `node.nextProducerIndex`, but
39044
- // benchmarking has shown that individual pop operations are faster.
39045
- while (node.producerNode.length > node.nextProducerIndex) {
39046
- node.producerNode.pop();
39047
- node.producerLastReadVersion.pop();
39048
- node.producerIndexOfThis.pop();
39049
- }
39050
- }
39051
- /**
39052
- * Determine whether this consumer has any dependencies which have changed since the last time
39053
- * they were read.
39054
- */
39055
- function consumerPollProducersForChange(node) {
39056
- assertConsumerNode(node);
39057
- // Poll producers for change.
39058
- for (let i = 0; i < node.producerNode.length; i++) {
39059
- const producer = node.producerNode[i];
39060
- const seenVersion = node.producerLastReadVersion[i];
39061
- // First check the versions. A mismatch means that the producer's value is known to have
39062
- // changed since the last time we read it.
39063
- if (seenVersion !== producer.version) {
39064
- return true;
39065
- }
39066
- // The producer's version is the same as the last time we read it, but it might itself be
39067
- // stale. Force the producer to recompute its version (calculating a new value if necessary).
39068
- producerUpdateValueVersion(producer);
39069
- // Now when we do this check, `producer.version` is guaranteed to be up to date, so if the
39070
- // versions still match then it has not changed since the last time we read it.
39071
- if (seenVersion !== producer.version) {
39072
- return true;
39073
- }
39074
- }
39075
- return false;
39076
- }
39077
- /**
39078
- * Disconnect this consumer from the graph.
39079
- */
39080
- function consumerDestroy(node) {
39081
- assertConsumerNode(node);
39082
- if (consumerIsLive(node)) {
39083
- // Drop all connections from the graph to this node.
39084
- for (let i = 0; i < node.producerNode.length; i++) {
39085
- producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
39086
- }
39087
- }
39088
- // Truncate all the arrays to drop all connection from this node to the graph.
39089
- node.producerNode.length =
39090
- node.producerLastReadVersion.length =
39091
- node.producerIndexOfThis.length =
39092
- 0;
39093
- if (node.liveConsumerNode) {
39094
- node.liveConsumerNode.length = node.liveConsumerIndexOfThis.length = 0;
39095
- }
39096
- }
39097
- /**
39098
- * Add `consumer` as a live consumer of this node.
39099
- *
39100
- * Note that this operation is potentially transitive. If this node becomes live, then it becomes
39101
- * a live consumer of all of its current producers.
39102
- */
39103
- function producerAddLiveConsumer(node, consumer, indexOfThis) {
39104
- assertProducerNode(node);
39105
- if (node.liveConsumerNode.length === 0 && isConsumerNode(node)) {
39106
- // When going from 0 to 1 live consumers, we become a live consumer to our producers.
39107
- for (let i = 0; i < node.producerNode.length; i++) {
39108
- node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i);
39109
- }
39110
- }
39111
- node.liveConsumerIndexOfThis.push(indexOfThis);
39112
- return node.liveConsumerNode.push(consumer) - 1;
39113
- }
39114
- /**
39115
- * Remove the live consumer at `idx`.
39116
- */
39117
- function producerRemoveLiveConsumerAtIndex(node, idx) {
39118
- assertProducerNode(node);
39119
- if (typeof ngDevMode !== 'undefined' && ngDevMode && idx >= node.liveConsumerNode.length) {
39120
- throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`);
39121
- }
39122
- if (node.liveConsumerNode.length === 1 && isConsumerNode(node)) {
39123
- // When removing the last live consumer, we will no longer be live. We need to remove
39124
- // ourselves from our producers' tracking (which may cause consumer-producers to lose
39125
- // liveness as well).
39126
- for (let i = 0; i < node.producerNode.length; i++) {
39127
- producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
39128
- }
39129
- }
39130
- // Move the last value of `liveConsumers` into `idx`. Note that if there's only a single
39131
- // live consumer, this is a no-op.
39132
- const lastIdx = node.liveConsumerNode.length - 1;
39133
- node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];
39134
- node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];
39135
- // Truncate the array.
39136
- node.liveConsumerNode.length--;
39137
- node.liveConsumerIndexOfThis.length--;
39138
- // If the index is still valid, then we need to fix the index pointer from the producer to this
39139
- // consumer, and update it from `lastIdx` to `idx` (accounting for the move above).
39140
- if (idx < node.liveConsumerNode.length) {
39141
- const idxProducer = node.liveConsumerIndexOfThis[idx];
39142
- const consumer = node.liveConsumerNode[idx];
39143
- assertConsumerNode(consumer);
39144
- consumer.producerIndexOfThis[idxProducer] = idx;
39145
- }
39146
- }
39147
- function consumerIsLive(node) {
39148
- return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;
39149
- }
39150
- function assertConsumerNode(node) {
39151
- node.producerNode ??= [];
39152
- node.producerIndexOfThis ??= [];
39153
- node.producerLastReadVersion ??= [];
39154
- }
39155
- function assertProducerNode(node) {
39156
- node.liveConsumerNode ??= [];
39157
- node.liveConsumerIndexOfThis ??= [];
39158
- }
39159
- function isConsumerNode(node) {
39160
- return node.producerNode !== undefined;
39161
- }
39162
-
39163
- /**
39164
- * Create a computed signal which derives a reactive value from an expression.
39165
- */
39166
- function createComputed(computation) {
39167
- const node = Object.create(COMPUTED_NODE);
39168
- node.computation = computation;
39169
- const computed = () => {
39170
- // Check if the value needs updating before returning it.
39171
- producerUpdateValueVersion(node);
39172
- // Record that someone looked at this signal.
39173
- producerAccessed(node);
39174
- if (node.value === ERRORED) {
39175
- throw node.error;
39176
- }
39177
- return node.value;
39178
- };
39179
- computed[SIGNAL] = node;
39180
- return computed;
39181
- }
39182
- /**
39183
- * A dedicated symbol used before a computed value has been calculated for the first time.
39184
- * Explicitly typed as `any` so we can use it as signal's value.
39185
- */
39186
- const UNSET = /* @__PURE__ */ Symbol('UNSET');
39187
- /**
39188
- * A dedicated symbol used in place of a computed signal value to indicate that a given computation
39189
- * is in progress. Used to detect cycles in computation chains.
39190
- * Explicitly typed as `any` so we can use it as signal's value.
39191
- */
39192
- const COMPUTING = /* @__PURE__ */ Symbol('COMPUTING');
39193
- /**
39194
- * A dedicated symbol used in place of a computed signal value to indicate that a given computation
39195
- * failed. The thrown error is cached until the computation gets dirty again.
39196
- * Explicitly typed as `any` so we can use it as signal's value.
39197
- */
39198
- const ERRORED = /* @__PURE__ */ Symbol('ERRORED');
39199
- // Note: Using an IIFE here to ensure that the spread assignment is not considered
39200
- // a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
39201
- // TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
39202
- const COMPUTED_NODE = /* @__PURE__ */ (() => {
39203
- return {
39204
- ...REACTIVE_NODE,
39205
- value: UNSET,
39206
- dirty: true,
39207
- error: null,
39208
- equal: defaultEquals,
39209
- kind: 'computed',
39210
- producerMustRecompute(node) {
39211
- // Force a recomputation if there's no current value, or if the current value is in the
39212
- // process of being calculated (which should throw an error).
39213
- return node.value === UNSET || node.value === COMPUTING;
39214
- },
39215
- producerRecomputeValue(node) {
39216
- if (node.value === COMPUTING) {
39217
- // Our computation somehow led to a cyclic read of itself.
39218
- throw new Error('Detected cycle in computations.');
39219
- }
39220
- const oldValue = node.value;
39221
- node.value = COMPUTING;
39222
- const prevConsumer = consumerBeforeComputation(node);
39223
- let newValue;
39224
- let wasEqual = false;
39225
- try {
39226
- newValue = node.computation();
39227
- // We want to mark this node as errored if calling `equal` throws; however, we don't want
39228
- // to track any reactive reads inside `equal`.
39229
- setActiveConsumer(null);
39230
- wasEqual =
39231
- oldValue !== UNSET &&
39232
- oldValue !== ERRORED &&
39233
- newValue !== ERRORED &&
39234
- node.equal(oldValue, newValue);
39235
- }
39236
- catch (err) {
39237
- newValue = ERRORED;
39238
- node.error = err;
39239
- }
39240
- finally {
39241
- consumerAfterComputation(node, prevConsumer);
39242
- }
39243
- if (wasEqual) {
39244
- // No change to `valueVersion` - old and new values are
39245
- // semantically equivalent.
39246
- node.value = oldValue;
39247
- return;
39248
- }
39249
- node.value = newValue;
39250
- node.version++;
39251
- },
39252
- };
39253
- })();
39254
-
39255
- function defaultThrowError() {
39256
- throw new Error();
39257
- }
39258
- let throwInvalidWriteToSignalErrorFn = defaultThrowError;
39259
- function throwInvalidWriteToSignalError(node) {
39260
- throwInvalidWriteToSignalErrorFn(node);
39261
- }
39262
- function setThrowInvalidWriteToSignalError(fn) {
39263
- throwInvalidWriteToSignalErrorFn = fn;
39264
- }
39265
-
39266
- /**
39267
- * If set, called after `WritableSignal`s are updated.
39268
- *
39269
- * This hook can be used to achieve various effects, such as running effects synchronously as part
39270
- * of setting a signal.
39271
- */
39272
- let postSignalSetFn = null;
39273
- /**
39274
- * Create a `Signal` that can be set or updated directly.
39275
- */
39276
- function createSignal(initialValue) {
39277
- const node = Object.create(SIGNAL_NODE);
39278
- node.value = initialValue;
39279
- const getter = (() => {
39280
- producerAccessed(node);
39281
- return node.value;
39282
- });
39283
- getter[SIGNAL] = node;
39284
- return getter;
39285
- }
39286
- function setPostSignalSetFn(fn) {
39287
- const prev = postSignalSetFn;
39288
- postSignalSetFn = fn;
39289
- return prev;
39290
- }
39291
- function signalGetFn() {
39292
- producerAccessed(this);
39293
- return this.value;
39294
- }
39295
- function signalSetFn(node, newValue) {
39296
- if (!producerUpdatesAllowed()) {
39297
- throwInvalidWriteToSignalError(node);
39298
- }
39299
- if (!node.equal(node.value, newValue)) {
39300
- node.value = newValue;
39301
- signalValueChanged(node);
39302
- }
39303
- }
39304
- function signalUpdateFn(node, updater) {
39305
- if (!producerUpdatesAllowed()) {
39306
- throwInvalidWriteToSignalError(node);
39307
- }
39308
- signalSetFn(node, updater(node.value));
39309
- }
39310
- function runPostSignalSetFn() {
39311
- postSignalSetFn?.();
39312
- }
39313
- // Note: Using an IIFE here to ensure that the spread assignment is not considered
39314
- // a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
39315
- // TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
39316
- const SIGNAL_NODE = /* @__PURE__ */ (() => {
39317
- return {
39318
- ...REACTIVE_NODE,
39319
- equal: defaultEquals,
39320
- value: undefined,
39321
- kind: 'signal',
39322
- };
39323
- })();
39324
- function signalValueChanged(node) {
39325
- node.version++;
39326
- producerIncrementEpoch();
39327
- producerNotifyConsumers(node);
39328
- postSignalSetFn?.();
39329
- }
39330
-
39331
- function createLinkedSignal(sourceFn, computationFn, equalityFn) {
39332
- const node = Object.create(LINKED_SIGNAL_NODE);
39333
- node.source = sourceFn;
39334
- node.computation = computationFn;
39335
- if (equalityFn != undefined) {
39336
- node.equal = equalityFn;
39337
- }
39338
- const linkedSignalGetter = () => {
39339
- // Check if the value needs updating before returning it.
39340
- producerUpdateValueVersion(node);
39341
- // Record that someone looked at this signal.
39342
- producerAccessed(node);
39343
- if (node.value === ERRORED) {
39344
- throw node.error;
39345
- }
39346
- return node.value;
39347
- };
39348
- const getter = linkedSignalGetter;
39349
- getter[SIGNAL] = node;
39350
- return getter;
39351
- }
39352
- function linkedSignalSetFn(node, newValue) {
39353
- producerUpdateValueVersion(node);
39354
- signalSetFn(node, newValue);
39355
- producerMarkClean(node);
39356
- }
39357
- function linkedSignalUpdateFn(node, updater) {
39358
- producerUpdateValueVersion(node);
39359
- signalUpdateFn(node, updater);
39360
- producerMarkClean(node);
39361
- }
39362
- // Note: Using an IIFE here to ensure that the spread assignment is not considered
39363
- // a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`.
39364
- // TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
39365
- const LINKED_SIGNAL_NODE = /* @__PURE__ */ (() => {
39366
- return {
39367
- ...REACTIVE_NODE,
39368
- value: UNSET,
39369
- dirty: true,
39370
- error: null,
39371
- equal: defaultEquals,
39372
- producerMustRecompute(node) {
39373
- // Force a recomputation if there's no current value, or if the current value is in the
39374
- // process of being calculated (which should throw an error).
39375
- return node.value === UNSET || node.value === COMPUTING;
39376
- },
39377
- producerRecomputeValue(node) {
39378
- if (node.value === COMPUTING) {
39379
- // Our computation somehow led to a cyclic read of itself.
39380
- throw new Error('Detected cycle in computations.');
39381
- }
39382
- const oldValue = node.value;
39383
- node.value = COMPUTING;
39384
- const prevConsumer = consumerBeforeComputation(node);
39385
- let newValue;
39386
- try {
39387
- const newSourceValue = node.source();
39388
- const prev = oldValue === UNSET || oldValue === ERRORED
39389
- ? undefined
39390
- : {
39391
- source: node.sourceValue,
39392
- value: oldValue,
39393
- };
39394
- newValue = node.computation(newSourceValue, prev);
39395
- node.sourceValue = newSourceValue;
39396
- }
39397
- catch (err) {
39398
- newValue = ERRORED;
39399
- node.error = err;
39400
- }
39401
- finally {
39402
- consumerAfterComputation(node, prevConsumer);
39403
- }
39404
- if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {
39405
- // No change to `valueVersion` - old and new values are
39406
- // semantically equivalent.
39407
- node.value = oldValue;
39408
- return;
39409
- }
39410
- node.value = newValue;
39411
- node.version++;
39412
- },
39413
- };
39414
- })();
39415
-
39416
- function createWatch(fn, schedule, allowSignalWrites) {
39417
- const node = Object.create(WATCH_NODE);
39418
- if (allowSignalWrites) {
39419
- node.consumerAllowSignalWrites = true;
39420
- }
39421
- node.fn = fn;
39422
- node.schedule = schedule;
39423
- const registerOnCleanup = (cleanupFn) => {
39424
- node.cleanupFn = cleanupFn;
39425
- };
39426
- function isWatchNodeDestroyed(node) {
39427
- return node.fn === null && node.schedule === null;
39428
- }
39429
- function destroyWatchNode(node) {
39430
- if (!isWatchNodeDestroyed(node)) {
39431
- consumerDestroy(node); // disconnect watcher from the reactive graph
39432
- node.cleanupFn();
39433
- // nullify references to the integration functions to mark node as destroyed
39434
- node.fn = null;
39435
- node.schedule = null;
39436
- node.cleanupFn = NOOP_CLEANUP_FN;
39437
- }
39438
- }
39439
- const run = () => {
39440
- if (node.fn === null) {
39441
- // trying to run a destroyed watch is noop
39442
- return;
39443
- }
39444
- if (isInNotificationPhase()) {
39445
- throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);
39446
- }
39447
- node.dirty = false;
39448
- if (node.hasRun && !consumerPollProducersForChange(node)) {
39449
- return;
39450
- }
39451
- node.hasRun = true;
39452
- const prevConsumer = consumerBeforeComputation(node);
39453
- try {
39454
- node.cleanupFn();
39455
- node.cleanupFn = NOOP_CLEANUP_FN;
39456
- node.fn(registerOnCleanup);
39457
- }
39458
- finally {
39459
- consumerAfterComputation(node, prevConsumer);
39460
- }
39461
- };
39462
- node.ref = {
39463
- notify: () => consumerMarkDirty(node),
39464
- run,
39465
- cleanup: () => node.cleanupFn(),
39466
- destroy: () => destroyWatchNode(node),
39467
- [SIGNAL]: node,
39468
- };
39469
- return node.ref;
39470
- }
39471
- const NOOP_CLEANUP_FN = () => { };
39472
- // Note: Using an IIFE here to ensure that the spread assignment is not considered
39473
- // a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
39474
- // TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
39475
- const WATCH_NODE = /* @__PURE__ */ (() => {
39476
- return {
39477
- ...REACTIVE_NODE,
39478
- consumerIsAlwaysLive: true,
39479
- consumerAllowSignalWrites: false,
39480
- consumerMarkedDirty: (node) => {
39481
- if (node.schedule !== null) {
39482
- node.schedule(node.ref);
39483
- }
39484
- },
39485
- hasRun: false,
39486
- cleanupFn: NOOP_CLEANUP_FN,
39487
- };
39488
- })();
39489
-
39490
- function setAlternateWeakRefImpl(impl) {
39491
- // TODO: remove this function
39492
- }
39493
-
39494
38233
  /**
39495
38234
  * Internal create application API that implements the core application creation logic and optional
39496
38235
  * bootstrap logic.
@@ -39585,8 +38324,8 @@ function withEventReplay() {
39585
38324
  providers.push({
39586
38325
  provide: ENVIRONMENT_INITIALIZER,
39587
38326
  useValue: () => {
39588
- const injector = inject(Injector);
39589
- const appRef = injector.get(ApplicationRef);
38327
+ const appRef = inject(ApplicationRef);
38328
+ const { injector } = appRef;
39590
38329
  // We have to check for the appRef here due to the possibility of multiple apps
39591
38330
  // being present on the same page. We only want to enable event replay for the
39592
38331
  // apps that actually want it.
@@ -39610,8 +38349,8 @@ function withEventReplay() {
39610
38349
  provide: APP_BOOTSTRAP_LISTENER,
39611
38350
  useFactory: () => {
39612
38351
  const appId = inject(APP_ID);
39613
- const injector = inject(Injector);
39614
38352
  const appRef = inject(ApplicationRef);
38353
+ const { injector } = appRef;
39615
38354
  return () => {
39616
38355
  // We have to check for the appRef here due to the possibility of multiple apps
39617
38356
  // being present on the same page. We only want to enable event replay for the
@@ -39638,6 +38377,15 @@ function withEventReplay() {
39638
38377
  // of the application is completed. This timing is similar to the unclaimed
39639
38378
  // dehydrated views cleanup timing.
39640
38379
  appRef.whenStable().then(() => {
38380
+ // Note: we have to check whether the application is destroyed before
38381
+ // performing other operations with the `injector`.
38382
+ // The application may be destroyed **before** it becomes stable, so when
38383
+ // the `whenStable` resolves, the injector might already be in
38384
+ // a destroyed state. Thus, calling `injector.get` would throw an error
38385
+ // indicating that the injector has already been destroyed.
38386
+ if (appRef.destroyed) {
38387
+ return;
38388
+ }
39641
38389
  const eventContractDetails = injector.get(JSACTION_EVENT_CONTRACT);
39642
38390
  initEventReplay(eventContractDetails, injector);
39643
38391
  const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);
@@ -39842,7 +38590,7 @@ function annotateComponentLViewForHydration(lView, context, injector) {
39842
38590
  function annotateLContainerForHydration(lContainer, context, injector) {
39843
38591
  const componentLView = unwrapLView(lContainer[HOST]);
39844
38592
  // Serialize the root component itself.
39845
- const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context, injector);
38593
+ const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context);
39846
38594
  if (componentLViewNghIndex === null) {
39847
38595
  // Component was not serialized (for example, if hydration was skipped by adding
39848
38596
  // the `ngSkipHydration` attribute or this component uses i18n blocks in the template,
@@ -39889,7 +38637,7 @@ function annotateForHydration(appRef, doc) {
39889
38637
  capture: new Set(),
39890
38638
  };
39891
38639
  const deferBlocks = new Map();
39892
- const appId = appRef.injector.get(APP_ID);
38640
+ appRef.injector.get(APP_ID);
39893
38641
  for (const viewRef of viewRefs) {
39894
38642
  const lNode = getLNodeForHydration(viewRef);
39895
38643
  // An `lView` might be `null` if a `ViewRef` represents
@@ -39903,14 +38651,13 @@ function annotateForHydration(appRef, doc) {
39903
38651
  i18nChildren: new Map(),
39904
38652
  eventTypesToReplay,
39905
38653
  shouldReplayEvents,
39906
- appId,
39907
38654
  deferBlocks,
39908
38655
  };
39909
38656
  if (isLContainer(lNode)) {
39910
- annotateLContainerForHydration(lNode, context, injector);
38657
+ annotateLContainerForHydration(lNode, context);
39911
38658
  }
39912
38659
  else {
39913
- annotateComponentLViewForHydration(lNode, context, injector);
38660
+ annotateComponentLViewForHydration(lNode, context);
39914
38661
  }
39915
38662
  insertCorruptedTextNodeMarkers(corruptedTextNodes, doc);
39916
38663
  }
@@ -39965,7 +38712,7 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
39965
38712
  // `<app-root /><#VIEW1><#VIEW2>...<!--container-->`
39966
38713
  // The `+1` is to capture the `<app-root />` element.
39967
38714
  numRootNodes = calcNumRootNodesInLContainer(childLView) + 1;
39968
- annotateLContainerForHydration(childLView, context, lView[INJECTOR]);
38715
+ annotateLContainerForHydration(childLView, context);
39969
38716
  const componentLView = unwrapLView(childLView[HOST]);
39970
38717
  serializedView = {
39971
38718
  [TEMPLATE_ID]: componentLView[TVIEW].ssrId,
@@ -40849,14 +39596,14 @@ function disableProfiling() {
40849
39596
  * can, optionally, return a value.
40850
39597
  */
40851
39598
  function untracked(nonReactiveReadsFn) {
40852
- const prevConsumer = setActiveConsumer$1(null);
39599
+ const prevConsumer = setActiveConsumer(null);
40853
39600
  // We are not trying to catch any particular errors here, just making sure that the consumers
40854
39601
  // stack is restored in case of errors.
40855
39602
  try {
40856
39603
  return nonReactiveReadsFn();
40857
39604
  }
40858
39605
  finally {
40859
- setActiveConsumer$1(prevConsumer);
39606
+ setActiveConsumer(prevConsumer);
40860
39607
  }
40861
39608
  }
40862
39609
 
@@ -40864,148 +39611,24 @@ function untracked(nonReactiveReadsFn) {
40864
39611
  * Create a computed `Signal` which derives a reactive value from an expression.
40865
39612
  */
40866
39613
  function computed(computation, options) {
40867
- const getter = createComputed$1(computation);
39614
+ const getter = createComputed(computation);
40868
39615
  if (options?.equal) {
40869
- getter[SIGNAL$1].equal = options.equal;
39616
+ getter[SIGNAL].equal = options.equal;
40870
39617
  }
40871
39618
  if (ngDevMode) {
40872
39619
  getter.toString = () => `[Computed: ${getter()}]`;
40873
- getter[SIGNAL$1].debugName = options?.debugName;
39620
+ getter[SIGNAL].debugName = options?.debugName;
40874
39621
  }
40875
39622
  return getter;
40876
39623
  }
40877
39624
 
40878
- /**
40879
- * Controls whether effects use the legacy `microtaskEffect` by default.
40880
- */
40881
- const USE_MICROTASK_EFFECT_BY_DEFAULT = false;
40882
-
40883
- class MicrotaskEffectScheduler extends ZoneAwareEffectScheduler {
40884
- pendingTasks = inject(PendingTasksInternal);
40885
- taskId = null;
40886
- schedule(effect) {
40887
- // Check whether there are any pending effects _before_ queueing in the base class.
40888
- super.schedule(effect);
40889
- if (this.taskId === null) {
40890
- this.taskId = this.pendingTasks.add();
40891
- queueMicrotask(() => this.flush());
40892
- }
40893
- }
40894
- flush() {
40895
- try {
40896
- super.flush();
40897
- }
40898
- finally {
40899
- if (this.taskId !== null) {
40900
- this.pendingTasks.remove(this.taskId);
40901
- this.taskId = null;
40902
- }
40903
- }
40904
- }
40905
- /** @nocollapse */
40906
- static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ ɵɵdefineInjectable({
40907
- token: MicrotaskEffectScheduler,
40908
- providedIn: 'root',
40909
- factory: () => new MicrotaskEffectScheduler(),
40910
- });
40911
- }
40912
- /**
40913
- * Core reactive node for an Angular effect.
40914
- *
40915
- * `EffectHandle` combines the reactive graph's `Watch` base node for effects with the framework's
40916
- * scheduling abstraction (`MicrotaskEffectScheduler`) as well as automatic cleanup via `DestroyRef`
40917
- * if available/requested.
40918
- */
40919
- class EffectHandle {
40920
- scheduler;
40921
- effectFn;
40922
- zone;
40923
- injector;
40924
- unregisterOnDestroy;
40925
- watcher;
40926
- constructor(scheduler, effectFn, zone, destroyRef, injector, allowSignalWrites) {
40927
- this.scheduler = scheduler;
40928
- this.effectFn = effectFn;
40929
- this.zone = zone;
40930
- this.injector = injector;
40931
- this.watcher = createWatch$1((onCleanup) => this.runEffect(onCleanup), () => this.schedule(), allowSignalWrites);
40932
- this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
40933
- }
40934
- runEffect(onCleanup) {
40935
- try {
40936
- this.effectFn(onCleanup);
40937
- }
40938
- catch (err) {
40939
- // Inject the `ErrorHandler` here in order to avoid circular DI error
40940
- // if the effect is used inside of a custom `ErrorHandler`.
40941
- const errorHandler = this.injector.get(ErrorHandler, null, { optional: true });
40942
- errorHandler?.handleError(err);
40943
- }
40944
- }
40945
- run() {
40946
- this.watcher.run();
40947
- }
40948
- schedule() {
40949
- this.scheduler.schedule(this);
40950
- }
40951
- destroy() {
40952
- this.watcher.destroy();
40953
- this.unregisterOnDestroy?.();
40954
- // Note: if the effect is currently scheduled, it's not un-scheduled, and so the scheduler will
40955
- // retain a reference to it. Attempting to execute it will be a no-op.
40956
- }
40957
- }
40958
- // Just used for the name for the debug error below.
40959
- function effect$1() { }
40960
- /**
40961
- * Create a global `Effect` for the given reactive function.
40962
- */
40963
- function microtaskEffect(effectFn, options) {
40964
- ngDevMode &&
40965
- assertNotInReactiveContext(effect$1, 'Call `effect` outside of a reactive context. For example, schedule the ' +
40966
- 'effect inside the component constructor.');
40967
- !options?.injector && assertInInjectionContext(effect$1);
40968
- const injector = options?.injector ?? inject(Injector);
40969
- const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
40970
- const handle = new EffectHandle(injector.get(MicrotaskEffectScheduler), effectFn, typeof Zone === 'undefined' ? null : Zone.current, destroyRef, injector, options?.allowSignalWrites ?? false);
40971
- // Effects need to be marked dirty manually to trigger their initial run. The timing of this
40972
- // marking matters, because the effects may read signals that track component inputs, which are
40973
- // only available after those components have had their first update pass.
40974
- //
40975
- // We inject `ChangeDetectorRef` optionally, to determine whether this effect is being created in
40976
- // the context of a component or not. If it is, then we check whether the component has already
40977
- // run its update pass, and defer the effect's initial scheduling until the update pass if it
40978
- // hasn't already run.
40979
- const cdr = injector.get(ChangeDetectorRef, null, { optional: true });
40980
- if (!cdr || !(cdr._lView[FLAGS] & 8 /* LViewFlags.FirstLViewPass */)) {
40981
- // This effect is either not running in a view injector, or the view has already
40982
- // undergone its first change detection pass, which is necessary for any required inputs to be
40983
- // set.
40984
- handle.watcher.notify();
40985
- }
40986
- else {
40987
- // Delay the initialization of the effect until the view is fully initialized.
40988
- (cdr._lView[EFFECTS_TO_SCHEDULE] ??= []).push(handle.watcher.notify);
40989
- }
40990
- return handle;
40991
- }
40992
-
40993
- let useMicrotaskEffectsByDefault = USE_MICROTASK_EFFECT_BY_DEFAULT;
40994
- /**
40995
- * Toggle the flag on whether to use microtask effects (for testing).
40996
- */
40997
- function setUseMicrotaskEffectsByDefault(value) {
40998
- const prev = useMicrotaskEffectsByDefault;
40999
- useMicrotaskEffectsByDefault = value;
41000
- return prev;
41001
- }
41002
39625
  class EffectRefImpl {
41003
- [SIGNAL$1];
39626
+ [SIGNAL];
41004
39627
  constructor(node) {
41005
- this[SIGNAL$1] = node;
39628
+ this[SIGNAL] = node;
41006
39629
  }
41007
39630
  destroy() {
41008
- this[SIGNAL$1].destroy();
39631
+ this[SIGNAL].destroy();
41009
39632
  }
41010
39633
  }
41011
39634
  /**
@@ -41027,12 +39650,6 @@ class EffectRefImpl {
41027
39650
  * @developerPreview
41028
39651
  */
41029
39652
  function effect(effectFn, options) {
41030
- if (useMicrotaskEffectsByDefault) {
41031
- if (ngDevMode && options?.forceRoot) {
41032
- throw new Error(`Cannot use 'forceRoot' option with microtask effects on`);
41033
- }
41034
- return microtaskEffect(effectFn, options);
41035
- }
41036
39653
  ngDevMode &&
41037
39654
  assertNotInReactiveContext(effect, 'Call `effect` outside of a reactive context. For example, schedule the ' +
41038
39655
  'effect inside the component constructor.');
@@ -41080,13 +39697,13 @@ function effect(effectFn, options) {
41080
39697
  * Not public API, which guarantees `EffectScheduler` only ever comes from the application root
41081
39698
  * injector.
41082
39699
  */
41083
- const APP_EFFECT_SCHEDULER = /* @__PURE__ */ new InjectionToken('', {
39700
+ /* @__PURE__ */ new InjectionToken('', {
41084
39701
  providedIn: 'root',
41085
39702
  factory: () => inject(EffectScheduler),
41086
39703
  });
41087
39704
  const BASE_EFFECT_NODE =
41088
39705
  /* @__PURE__ */ (() => ({
41089
- ...REACTIVE_NODE$1,
39706
+ ...REACTIVE_NODE,
41090
39707
  consumerIsAlwaysLive: true,
41091
39708
  consumerAllowSignalWrites: true,
41092
39709
  dirty: true,
@@ -41097,15 +39714,15 @@ const BASE_EFFECT_NODE =
41097
39714
  onDestroyFn: noop,
41098
39715
  run() {
41099
39716
  this.dirty = false;
41100
- if (ngDevMode && isInNotificationPhase$1()) {
39717
+ if (ngDevMode && isInNotificationPhase()) {
41101
39718
  throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);
41102
39719
  }
41103
- if (this.hasRun && !consumerPollProducersForChange$1(this)) {
39720
+ if (this.hasRun && !consumerPollProducersForChange(this)) {
41104
39721
  return;
41105
39722
  }
41106
39723
  this.hasRun = true;
41107
39724
  const registerCleanupFn = (cleanupFn) => (this.cleanupFns ??= []).push(cleanupFn);
41108
- const prevNode = consumerBeforeComputation$1(this);
39725
+ const prevNode = consumerBeforeComputation(this);
41109
39726
  // We clear `setIsRefreshingViews` so that `markForCheck()` within the body of an effect will
41110
39727
  // cause CD to reach the component in question.
41111
39728
  const prevRefreshingViews = setIsRefreshingViews(false);
@@ -41115,7 +39732,7 @@ const BASE_EFFECT_NODE =
41115
39732
  }
41116
39733
  finally {
41117
39734
  setIsRefreshingViews(prevRefreshingViews);
41118
- consumerAfterComputation$1(this, prevNode);
39735
+ consumerAfterComputation(this, prevNode);
41119
39736
  }
41120
39737
  },
41121
39738
  maybeCleanup() {
@@ -41143,7 +39760,7 @@ const ROOT_EFFECT_NODE =
41143
39760
  this.notifier.notify(12 /* NotificationSource.RootEffect */);
41144
39761
  },
41145
39762
  destroy() {
41146
- consumerDestroy$1(this);
39763
+ consumerDestroy(this);
41147
39764
  this.onDestroyFn();
41148
39765
  this.maybeCleanup();
41149
39766
  this.scheduler.remove(this);
@@ -41158,7 +39775,7 @@ const VIEW_EFFECT_NODE =
41158
39775
  this.notifier.notify(13 /* NotificationSource.ViewEffect */);
41159
39776
  },
41160
39777
  destroy() {
41161
- consumerDestroy$1(this);
39778
+ consumerDestroy(this);
41162
39779
  this.onDestroyFn();
41163
39780
  this.maybeCleanup();
41164
39781
  this.view[EFFECTS]?.delete(this);
@@ -41230,11 +39847,11 @@ var ResourceStatus;
41230
39847
  const identityFn = (v) => v;
41231
39848
  function linkedSignal(optionsOrComputation, options) {
41232
39849
  if (typeof optionsOrComputation === 'function') {
41233
- const getter = createLinkedSignal$1(optionsOrComputation, (identityFn), options?.equal);
39850
+ const getter = createLinkedSignal(optionsOrComputation, (identityFn), options?.equal);
41234
39851
  return upgradeLinkedSignalGetter(getter);
41235
39852
  }
41236
39853
  else {
41237
- const getter = createLinkedSignal$1(optionsOrComputation.source, optionsOrComputation.computation, optionsOrComputation.equal);
39854
+ const getter = createLinkedSignal(optionsOrComputation.source, optionsOrComputation.computation, optionsOrComputation.equal);
41238
39855
  return upgradeLinkedSignalGetter(getter);
41239
39856
  }
41240
39857
  }
@@ -41242,10 +39859,10 @@ function upgradeLinkedSignalGetter(getter) {
41242
39859
  if (ngDevMode) {
41243
39860
  getter.toString = () => `[LinkedSignal: ${getter()}]`;
41244
39861
  }
41245
- const node = getter[SIGNAL$1];
39862
+ const node = getter[SIGNAL];
41246
39863
  const upgradedGetter = getter;
41247
- upgradedGetter.set = (newValue) => linkedSignalSetFn$1(node, newValue);
41248
- upgradedGetter.update = (updateFn) => linkedSignalUpdateFn$1(node, updateFn);
39864
+ upgradedGetter.set = (newValue) => linkedSignalSetFn(node, newValue);
39865
+ upgradedGetter.update = (updateFn) => linkedSignalUpdateFn(node, updateFn);
41249
39866
  upgradedGetter.asReadonly = signalAsReadonlyFn.bind(getter);
41250
39867
  return upgradedGetter;
41251
39868
  }
@@ -41687,12 +40304,10 @@ function ɵɵngDeclarePipe(decl) {
41687
40304
  return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵpipe.js`, decl);
41688
40305
  }
41689
40306
 
41690
- // we reexport these symbols just so that they are retained during the dead code elimination
41691
-
41692
40307
  const NOT_SET = Symbol('NOT_SET');
41693
40308
  const EMPTY_CLEANUP_SET = new Set();
41694
40309
  const AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */ (() => ({
41695
- ...SIGNAL_NODE$1,
40310
+ ...SIGNAL_NODE,
41696
40311
  consumerIsAlwaysLive: true,
41697
40312
  consumerAllowSignalWrites: true,
41698
40313
  value: NOT_SET,
@@ -41720,7 +40335,7 @@ const AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */ (() => ({
41720
40335
  return this.signal;
41721
40336
  }
41722
40337
  this.dirty = false;
41723
- if (this.value !== NOT_SET && !consumerPollProducersForChange$1(this)) {
40338
+ if (this.value !== NOT_SET && !consumerPollProducersForChange(this)) {
41724
40339
  // None of our producers report a change since the last time they were read, so no
41725
40340
  // recomputation of our value is necessary.
41726
40341
  return this.signal;
@@ -41743,13 +40358,13 @@ const AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */ (() => ({
41743
40358
  }
41744
40359
  args.push(this.registerCleanupFn);
41745
40360
  // Call the user's callback in our reactive context.
41746
- const prevConsumer = consumerBeforeComputation$1(this);
40361
+ const prevConsumer = consumerBeforeComputation(this);
41747
40362
  let newValue;
41748
40363
  try {
41749
40364
  newValue = this.userFn.apply(null, args);
41750
40365
  }
41751
40366
  finally {
41752
- consumerAfterComputation$1(this, prevConsumer);
40367
+ consumerAfterComputation(this, prevConsumer);
41753
40368
  }
41754
40369
  if (this.value === NOT_SET || !this.equal(this.value, newValue)) {
41755
40370
  this.value = newValue;
@@ -41793,10 +40408,10 @@ class AfterRenderEffectSequence extends AfterRenderSequence {
41793
40408
  node.userFn = effectHook;
41794
40409
  node.dirty = true;
41795
40410
  node.signal = (() => {
41796
- producerAccessed$1(node);
40411
+ producerAccessed(node);
41797
40412
  return node.value;
41798
40413
  });
41799
- node.signal[SIGNAL$1] = node;
40414
+ node.signal[SIGNAL] = node;
41800
40415
  node.registerCleanupFn = (fn) => (node.cleanup ??= new Set()).add(fn);
41801
40416
  this.nodes[phase] = node;
41802
40417
  // Install the upstream hook which runs the `phaseFn` for this phase.
@@ -41844,8 +40459,6 @@ function afterRenderEffect(callbackOrSpec, options) {
41844
40459
  return sequence;
41845
40460
  }
41846
40461
 
41847
- // This file exists to allow the set of reactivity exports to be modified in g3, as these APIs are
41848
-
41849
40462
  /**
41850
40463
  * Creates a `ComponentRef` instance based on provided component type and a set of options.
41851
40464
  *
@@ -42059,40 +40672,5 @@ const REQUEST_CONTEXT = new InjectionToken(typeof ngDevMode === 'undefined' || n
42059
40672
  factory: () => null,
42060
40673
  });
42061
40674
 
42062
- /**
42063
- * @module
42064
- * @description
42065
- * Entry point from which you should import all public core APIs.
42066
- */
42067
- if (typeof ngDevMode !== 'undefined' && ngDevMode) {
42068
- // This helper is to give a reasonable error message to people upgrading to v9 that have not yet
42069
- // installed `@angular/localize` in their app.
42070
- // tslint:disable-next-line: no-toplevel-property-access
42071
- _global.$localize ??= function () {
42072
- throw new Error('It looks like your application or one of its dependencies is using i18n.\n' +
42073
- 'Angular 9 introduced a global `$localize()` function that needs to be loaded.\n' +
42074
- 'Please run `ng add @angular/localize` from the Angular CLI.\n' +
42075
- "(For non-CLI projects, add `import '@angular/localize/init';` to your `polyfills.ts` file.\n" +
42076
- 'For server-side rendering applications add the import to your `main.server.ts` file.)');
42077
- };
42078
- }
42079
-
42080
- /**
42081
- * @module
42082
- * @description
42083
- * Entry point for all public APIs of this package.
42084
- */
42085
- // This file only reexports content of the `src` folder. Keep it that way.
42086
-
42087
- /* This file is not used to build this module. It is only used during editing
42088
- * by the TypeScript language service and during build for verification. `ngc`
42089
- * replaces this file with production index.ts when it rewrites private symbol
42090
- * names.
42091
- */
42092
-
42093
- /**
42094
- * Generated bundle index. Do not edit.
42095
- */
42096
-
42097
- 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, inputBinding, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, outputBinding, 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, 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, ResourceImpl as ɵResourceImpl, 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, isViewDirty as ɵisViewDirty, markForRefresh as ɵmarkForRefresh, 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, ɵɵ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 };
40675
+ 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, 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, inputBinding, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, outputBinding, 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, 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, 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, ResourceImpl as ɵResourceImpl, 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, isViewDirty as ɵisViewDirty, markForRefresh as ɵmarkForRefresh, 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, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, 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, ɵɵ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 };
42098
40676
  //# sourceMappingURL=core.mjs.map