@angular/core 19.2.1 → 19.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/core.mjs +343 -1640
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/di.mjs +1 -1
- package/fesm2022/primitives/di.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +2 -589
- package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
- package/fesm2022/primitives/signals.mjs +26 -10
- package/fesm2022/primitives/signals.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +7 -11
- package/fesm2022/rxjs-interop.mjs.map +1 -1
- package/fesm2022/testing.mjs +115 -130
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/weak_ref-DrMdAIDh.mjs +12 -0
- package/fesm2022/weak_ref-DrMdAIDh.mjs.map +1 -0
- package/index.d.ts +14320 -15103
- package/navigation_types.d-u4EOrrdZ.d.ts +121 -0
- package/package.json +1 -1
- package/primitives/di/index.d.ts +65 -59
- package/primitives/event-dispatch/index.d.ts +205 -309
- package/primitives/signals/index.d.ts +158 -195
- package/rxjs-interop/index.d.ts +72 -91
- package/schematics/bundles/{apply_import_manager-b8d6885d.js → apply_import_manager-BynuozbO.js} +12 -16
- package/schematics/bundles/{checker-89987c98.js → checker-DP-zos5Q.js} +2959 -1054
- package/schematics/bundles/cleanup-unused-imports.js +21 -27
- package/schematics/bundles/{compiler_host-2398e4ca.js → compiler_host-DzM2hemp.js} +19 -23
- package/schematics/bundles/control-flow-migration.js +81 -38
- package/schematics/bundles/explicit-standalone-flag.js +26 -32
- package/schematics/bundles/{imports-047fbbc8.js → imports-CIX-JgAN.js} +9 -14
- package/schematics/bundles/{index-10911843.js → index-BPqwMr5d.js} +4 -4
- package/schematics/bundles/{index-e0b2e4a7.js → index-CPpyW--c.js} +55 -59
- package/schematics/bundles/inject-migration.js +121 -127
- package/schematics/bundles/{leading_space-f8944434.js → leading_space-D9nQ8UQC.js} +1 -1
- package/schematics/bundles/{migrate_ts_type_references-52508cd4.js → migrate_ts_type_references-Ri-K4P_1.js} +106 -111
- package/schematics/bundles/{ng_decorators-b0d8b324.js → ng_decorators-DznZ5jMl.js} +4 -8
- package/schematics/bundles/{nodes-7758dbf6.js → nodes-B16H9JUd.js} +2 -6
- package/schematics/bundles/output-migration.js +39 -45
- package/schematics/bundles/pending-tasks.js +13 -19
- package/schematics/bundles/{program-0e1d4f10.js → program-BmLi-Vxz.js} +788 -2631
- package/schematics/bundles/{project_paths-c48796dd.js → project_paths-CXXqWSoY.js} +25 -23
- package/schematics/bundles/{project_tsconfig_paths-b558633b.js → project_tsconfig_paths-CDVxT6Ov.js} +1 -1
- package/schematics/bundles/{property_name-ac18447e.js → property_name-BBwFuqMe.js} +3 -7
- package/schematics/bundles/provide-initializer.js +13 -19
- package/schematics/bundles/route-lazy-loading.js +35 -41
- package/schematics/bundles/self-closing-tags-migration.js +19 -25
- package/schematics/bundles/signal-input-migration.js +60 -67
- package/schematics/bundles/signal-queries-migration.js +47 -54
- package/schematics/bundles/signals.js +9 -11
- package/schematics/bundles/standalone-migration.js +178 -184
- package/testing/index.d.ts +289 -462
- package/weak_ref.d-ttyj86RV.d.ts +9 -0
package/fesm2022/core.mjs
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v19.2.
|
|
2
|
+
* @license Angular v19.2.3
|
|
3
3
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { SIGNAL_NODE
|
|
7
|
+
import { SIGNAL_NODE, signalSetFn, SIGNAL, producerAccessed, getActiveConsumer, setActiveConsumer, createSignal, signalUpdateFn, consumerDestroy, REACTIVE_NODE, consumerPollProducersForChange, consumerBeforeComputation, consumerAfterComputation, createComputed, setThrowInvalidWriteToSignalError, untracked as untracked$1, createWatch, isInNotificationPhase, createLinkedSignal, linkedSignalSetFn, linkedSignalUpdateFn } from '@angular/core/primitives/signals';
|
|
8
8
|
export { SIGNAL as ɵSIGNAL } from '@angular/core/primitives/signals';
|
|
9
|
-
import
|
|
9
|
+
import { getCurrentInjector, NOT_FOUND as NOT_FOUND$1, setCurrentInjector } from '@angular/core/primitives/di';
|
|
10
|
+
export { setCurrentInjector as ɵsetCurrentInjector } from '@angular/core/primitives/di';
|
|
10
11
|
import { BehaviorSubject, Subject, Subscription } from 'rxjs';
|
|
11
|
-
import { Attribute as Attribute$1, clearAppScopedEarlyEventContract, EventContract, EventContractContainer, getAppScopedQueuedEventInfos, EventDispatcher, registerDispatcher, isEarlyEventType, isCaptureEventType
|
|
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://
|
|
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
|
|
76
|
+
...SIGNAL_NODE,
|
|
75
77
|
transformFn: undefined,
|
|
76
78
|
applyValueToInputSignal(node, value) {
|
|
77
|
-
signalSetFn
|
|
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,18 @@ 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
|
|
100
|
+
producerAccessed(node);
|
|
100
101
|
if (node.value === REQUIRED_UNSET_VALUE) {
|
|
101
|
-
|
|
102
|
+
let message = null;
|
|
103
|
+
if (ngDevMode) {
|
|
104
|
+
const name = options?.debugName ?? options?.alias;
|
|
105
|
+
message = `Input${name ? ` "${name}"` : ''} is required but no value is available yet.`;
|
|
106
|
+
}
|
|
107
|
+
throw new RuntimeError(-950 /* RuntimeErrorCode.REQUIRED_INPUT_NO_VALUE */, message);
|
|
102
108
|
}
|
|
103
109
|
return node.value;
|
|
104
110
|
}
|
|
105
|
-
inputValueFn[SIGNAL
|
|
111
|
+
inputValueFn[SIGNAL] = node;
|
|
106
112
|
if (ngDevMode) {
|
|
107
113
|
inputValueFn.toString = () => `[Input Signal: ${inputValueFn()}]`;
|
|
108
114
|
node.debugName = options?.debugName;
|
|
@@ -147,8 +153,6 @@ function makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {
|
|
|
147
153
|
? cls[ANNOTATIONS]
|
|
148
154
|
: Object.defineProperty(cls, ANNOTATIONS, { value: [] })[ANNOTATIONS];
|
|
149
155
|
annotations.push(annotationInstance);
|
|
150
|
-
if (additionalProcessing)
|
|
151
|
-
additionalProcessing(cls);
|
|
152
156
|
return cls;
|
|
153
157
|
};
|
|
154
158
|
}
|
|
@@ -196,9 +200,6 @@ function makeParamDecorator(name, props, parentClass) {
|
|
|
196
200
|
return cls;
|
|
197
201
|
}
|
|
198
202
|
}
|
|
199
|
-
if (parentClass) {
|
|
200
|
-
ParamDecoratorFactory.prototype = Object.create(parentClass.prototype);
|
|
201
|
-
}
|
|
202
203
|
ParamDecoratorFactory.prototype.ngMetadataName = name;
|
|
203
204
|
ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;
|
|
204
205
|
return ParamDecoratorFactory;
|
|
@@ -227,8 +228,6 @@ function makePropDecorator(name, props, parentClass, additionalProcessing) {
|
|
|
227
228
|
: Object.defineProperty(constructor, PROP_METADATA, { value: {} })[PROP_METADATA];
|
|
228
229
|
meta[name] = (meta.hasOwnProperty(name) && meta[name]) || [];
|
|
229
230
|
meta[name].unshift(decoratorInstance);
|
|
230
|
-
if (additionalProcessing)
|
|
231
|
-
additionalProcessing(target, name, ...args);
|
|
232
231
|
}
|
|
233
232
|
return PropDecorator;
|
|
234
233
|
}
|
|
@@ -469,6 +468,8 @@ function isForwardRef(fn) {
|
|
|
469
468
|
}
|
|
470
469
|
|
|
471
470
|
// The functions in this file verify that the assumptions we are making
|
|
471
|
+
// about state in an instruction are correct before implementing any logic.
|
|
472
|
+
// They are meant only to be called in dev mode as sanity checks.
|
|
472
473
|
function assertNumber(actual, msg) {
|
|
473
474
|
if (!(typeof actual === 'number')) {
|
|
474
475
|
throwError(msg, typeof actual, 'number', '===');
|
|
@@ -529,11 +530,6 @@ function assertGreaterThanOrEqual(actual, expected, msg) {
|
|
|
529
530
|
throwError(msg, actual, expected, '>=');
|
|
530
531
|
}
|
|
531
532
|
}
|
|
532
|
-
function assertNotDefined(actual, msg) {
|
|
533
|
-
if (actual != null) {
|
|
534
|
-
throwError(msg, actual, null, '==');
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
533
|
function assertDefined(actual, msg) {
|
|
538
534
|
if (actual == null) {
|
|
539
535
|
throwError(msg, actual, null, '!=');
|
|
@@ -566,7 +562,7 @@ function assertOneOf(value, ...validValues) {
|
|
|
566
562
|
throwError(`Expected value to be one of ${JSON.stringify(validValues)} but was ${JSON.stringify(value)}.`);
|
|
567
563
|
}
|
|
568
564
|
function assertNotReactive(fn) {
|
|
569
|
-
if (getActiveConsumer
|
|
565
|
+
if (getActiveConsumer() !== null) {
|
|
570
566
|
throwError(`${fn}() should never be called in a reactive context.`);
|
|
571
567
|
}
|
|
572
568
|
}
|
|
@@ -1079,18 +1075,22 @@ function assertInjectImplementationNotEqual(fn) {
|
|
|
1079
1075
|
|
|
1080
1076
|
const _THROW_IF_NOT_FOUND = {};
|
|
1081
1077
|
const THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;
|
|
1082
|
-
function getCurrentInjector() {
|
|
1083
|
-
return di.getCurrentInjector();
|
|
1084
|
-
}
|
|
1085
|
-
function setCurrentInjector(injector) {
|
|
1086
|
-
return di.setCurrentInjector(injector);
|
|
1087
|
-
}
|
|
1088
1078
|
/*
|
|
1089
1079
|
* Name of a property (that we patch onto DI decorator), which is used as an annotation of which
|
|
1090
1080
|
* InjectFlag this decorator represents. This allows to avoid direct references to the DI decorators
|
|
1091
1081
|
* in the code, thus making them tree-shakable.
|
|
1092
1082
|
*/
|
|
1093
1083
|
const DI_DECORATOR_FLAG = '__NG_DI_FLAG__';
|
|
1084
|
+
class RetrievingInjector {
|
|
1085
|
+
injector;
|
|
1086
|
+
constructor(injector) {
|
|
1087
|
+
this.injector = injector;
|
|
1088
|
+
}
|
|
1089
|
+
retrieve(token, options) {
|
|
1090
|
+
const ngOptions = options;
|
|
1091
|
+
return this.injector.get(token, ngOptions.optional ? NOT_FOUND$1 : THROW_IF_NOT_FOUND, ngOptions);
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
1094
|
const NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';
|
|
1095
1095
|
const NG_TOKEN_PATH = 'ngTokenPath';
|
|
1096
1096
|
const NEW_LINE = /\n/gm;
|
|
@@ -1099,13 +1099,21 @@ const SOURCE = '__source';
|
|
|
1099
1099
|
function injectInjectorOnly(token, flags = InjectFlags.Default) {
|
|
1100
1100
|
if (getCurrentInjector() === undefined) {
|
|
1101
1101
|
throw new RuntimeError(-203 /* RuntimeErrorCode.MISSING_INJECTION_CONTEXT */, ngDevMode &&
|
|
1102
|
-
`inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with \`runInInjectionContext\`.`);
|
|
1102
|
+
`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\`.`);
|
|
1103
1103
|
}
|
|
1104
1104
|
else if (getCurrentInjector() === null) {
|
|
1105
1105
|
return injectRootLimpMode(token, undefined, flags);
|
|
1106
1106
|
}
|
|
1107
1107
|
else {
|
|
1108
|
-
const
|
|
1108
|
+
const currentInjector = getCurrentInjector();
|
|
1109
|
+
let injector;
|
|
1110
|
+
if (currentInjector instanceof RetrievingInjector) {
|
|
1111
|
+
injector = currentInjector.injector;
|
|
1112
|
+
}
|
|
1113
|
+
else {
|
|
1114
|
+
injector = currentInjector;
|
|
1115
|
+
}
|
|
1116
|
+
const value = injector.get(token, flags & InjectFlags.Optional ? null : undefined, flags);
|
|
1109
1117
|
ngDevMode && emitInjectEvent(token, value, flags);
|
|
1110
1118
|
return value;
|
|
1111
1119
|
}
|
|
@@ -1438,27 +1446,6 @@ function arraySplice(array, index, count) {
|
|
|
1438
1446
|
array.pop(); // shrink the array
|
|
1439
1447
|
}
|
|
1440
1448
|
}
|
|
1441
|
-
/**
|
|
1442
|
-
* Same as `Array.splice(index, 0, value)` but faster.
|
|
1443
|
-
*
|
|
1444
|
-
* `Array.splice()` is not fast because it has to allocate an array for the elements which were
|
|
1445
|
-
* removed. This causes memory pressure and slows down code when most of the time we don't
|
|
1446
|
-
* care about the deleted items array.
|
|
1447
|
-
*
|
|
1448
|
-
* @param array Array to splice.
|
|
1449
|
-
* @param index Index in array where the `value` should be added.
|
|
1450
|
-
* @param value Value to add to array.
|
|
1451
|
-
*/
|
|
1452
|
-
function arrayInsert(array, index, value) {
|
|
1453
|
-
ngDevMode && assertLessThanOrEqual(index, array.length, "Can't insert past array end.");
|
|
1454
|
-
let end = array.length;
|
|
1455
|
-
while (end > index) {
|
|
1456
|
-
const previousEnd = end - 1;
|
|
1457
|
-
array[end] = array[previousEnd];
|
|
1458
|
-
end = previousEnd;
|
|
1459
|
-
}
|
|
1460
|
-
array[index] = value;
|
|
1461
|
-
}
|
|
1462
1449
|
/**
|
|
1463
1450
|
* Same as `Array.splice2(index, 0, value1, value2)` but faster.
|
|
1464
1451
|
*
|
|
@@ -1495,22 +1482,6 @@ function arrayInsert2(array, index, value1, value2) {
|
|
|
1495
1482
|
array[index + 1] = value2;
|
|
1496
1483
|
}
|
|
1497
1484
|
}
|
|
1498
|
-
/**
|
|
1499
|
-
* Get an index of an `value` in a sorted `array`.
|
|
1500
|
-
*
|
|
1501
|
-
* NOTE:
|
|
1502
|
-
* - This uses binary search algorithm for fast removals.
|
|
1503
|
-
*
|
|
1504
|
-
* @param array A sorted array to binary search.
|
|
1505
|
-
* @param value The value to look for.
|
|
1506
|
-
* @returns index of the value.
|
|
1507
|
-
* - positive index if value found.
|
|
1508
|
-
* - negative index if value not found. (`~index` to get the value where it should have been
|
|
1509
|
-
* located)
|
|
1510
|
-
*/
|
|
1511
|
-
function arrayIndexOfSorted(array, value) {
|
|
1512
|
-
return _arrayIndexOfSorted(array, value, 0);
|
|
1513
|
-
}
|
|
1514
1485
|
/**
|
|
1515
1486
|
* Set a `value` for a `key`.
|
|
1516
1487
|
*
|
|
@@ -1559,24 +1530,6 @@ function keyValueArrayGet(keyValueArray, key) {
|
|
|
1559
1530
|
function keyValueArrayIndexOf(keyValueArray, key) {
|
|
1560
1531
|
return _arrayIndexOfSorted(keyValueArray, key, 1);
|
|
1561
1532
|
}
|
|
1562
|
-
/**
|
|
1563
|
-
* Delete a `key` (and `value`) from the `KeyValueArray`.
|
|
1564
|
-
*
|
|
1565
|
-
* @param keyValueArray to modify.
|
|
1566
|
-
* @param key The key to locate or delete (if exist).
|
|
1567
|
-
* @returns index of where the key was (or should have been.)
|
|
1568
|
-
* - positive (even) index if key found and deleted.
|
|
1569
|
-
* - negative index if key not found. (`~index` (even) to get the index where it should have
|
|
1570
|
-
* been.)
|
|
1571
|
-
*/
|
|
1572
|
-
function keyValueArrayDelete(keyValueArray, key) {
|
|
1573
|
-
const index = keyValueArrayIndexOf(keyValueArray, key);
|
|
1574
|
-
if (index >= 0) {
|
|
1575
|
-
// if we found it remove it.
|
|
1576
|
-
arraySplice(keyValueArray, index, 2);
|
|
1577
|
-
}
|
|
1578
|
-
return index;
|
|
1579
|
-
}
|
|
1580
1533
|
/**
|
|
1581
1534
|
* INTERNAL: Get an index of an `value` in a sorted `array` by grouping search by `shift`.
|
|
1582
1535
|
*
|
|
@@ -2085,6 +2038,10 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2085
2038
|
}
|
|
2086
2039
|
this.injectorDefTypes = new Set(this.get(INJECTOR_DEF_TYPES, EMPTY_ARRAY, InjectFlags.Self));
|
|
2087
2040
|
}
|
|
2041
|
+
retrieve(token, options) {
|
|
2042
|
+
const ngOptions = options;
|
|
2043
|
+
return this.get(token, ngOptions.optional ? NOT_FOUND$1 : THROW_IF_NOT_FOUND, ngOptions);
|
|
2044
|
+
}
|
|
2088
2045
|
/**
|
|
2089
2046
|
* Destroy the injector and release references to every instance or provider associated with it.
|
|
2090
2047
|
*
|
|
@@ -2095,7 +2052,7 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2095
2052
|
assertNotDestroyed(this);
|
|
2096
2053
|
// Set destroyed = true first, in case lifecycle hooks re-enter destroy().
|
|
2097
2054
|
this._destroyed = true;
|
|
2098
|
-
const prevConsumer = setActiveConsumer
|
|
2055
|
+
const prevConsumer = setActiveConsumer(null);
|
|
2099
2056
|
try {
|
|
2100
2057
|
// Call all the lifecycle hooks.
|
|
2101
2058
|
for (const service of this._ngOnDestroyHooks) {
|
|
@@ -2114,7 +2071,7 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2114
2071
|
this.records.clear();
|
|
2115
2072
|
this._ngOnDestroyHooks.clear();
|
|
2116
2073
|
this.injectorDefTypes.clear();
|
|
2117
|
-
setActiveConsumer
|
|
2074
|
+
setActiveConsumer(prevConsumer);
|
|
2118
2075
|
}
|
|
2119
2076
|
}
|
|
2120
2077
|
onDestroy(callback) {
|
|
@@ -2216,7 +2173,7 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2216
2173
|
}
|
|
2217
2174
|
/** @internal */
|
|
2218
2175
|
resolveInjectorInitializers() {
|
|
2219
|
-
const prevConsumer = setActiveConsumer
|
|
2176
|
+
const prevConsumer = setActiveConsumer(null);
|
|
2220
2177
|
const previousInjector = setCurrentInjector(this);
|
|
2221
2178
|
const previousInjectImplementation = setInjectImplementation(undefined);
|
|
2222
2179
|
let prevInjectContext;
|
|
@@ -2239,7 +2196,7 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2239
2196
|
setCurrentInjector(previousInjector);
|
|
2240
2197
|
setInjectImplementation(previousInjectImplementation);
|
|
2241
2198
|
ngDevMode && setInjectorProfilerContext(prevInjectContext);
|
|
2242
|
-
setActiveConsumer
|
|
2199
|
+
setActiveConsumer(prevConsumer);
|
|
2243
2200
|
}
|
|
2244
2201
|
}
|
|
2245
2202
|
toString() {
|
|
@@ -2302,7 +2259,7 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2302
2259
|
this.records.set(token, record);
|
|
2303
2260
|
}
|
|
2304
2261
|
hydrate(token, record) {
|
|
2305
|
-
const prevConsumer = setActiveConsumer
|
|
2262
|
+
const prevConsumer = setActiveConsumer(null);
|
|
2306
2263
|
try {
|
|
2307
2264
|
if (record.value === CIRCULAR) {
|
|
2308
2265
|
throwCyclicDependencyError(stringify(token));
|
|
@@ -2325,7 +2282,7 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2325
2282
|
return record.value;
|
|
2326
2283
|
}
|
|
2327
2284
|
finally {
|
|
2328
|
-
setActiveConsumer
|
|
2285
|
+
setActiveConsumer(prevConsumer);
|
|
2329
2286
|
}
|
|
2330
2287
|
}
|
|
2331
2288
|
injectableDefInScope(def) {
|
|
@@ -2487,14 +2444,19 @@ function forEachSingleProvider(providers, fn) {
|
|
|
2487
2444
|
* @publicApi
|
|
2488
2445
|
*/
|
|
2489
2446
|
function runInInjectionContext(injector, fn) {
|
|
2447
|
+
let internalInjector;
|
|
2490
2448
|
if (injector instanceof R3Injector) {
|
|
2491
2449
|
assertNotDestroyed(injector);
|
|
2450
|
+
internalInjector = injector;
|
|
2451
|
+
}
|
|
2452
|
+
else {
|
|
2453
|
+
internalInjector = new RetrievingInjector(injector);
|
|
2492
2454
|
}
|
|
2493
2455
|
let prevInjectorProfilerContext;
|
|
2494
2456
|
if (ngDevMode) {
|
|
2495
2457
|
prevInjectorProfilerContext = setInjectorProfilerContext({ injector, token: null });
|
|
2496
2458
|
}
|
|
2497
|
-
const prevInjector = setCurrentInjector(
|
|
2459
|
+
const prevInjector = setCurrentInjector(internalInjector);
|
|
2498
2460
|
const previousInjectImplementation = setInjectImplementation(undefined);
|
|
2499
2461
|
try {
|
|
2500
2462
|
return fn();
|
|
@@ -3004,9 +2966,6 @@ function assertNgModuleType(actual, msg = "Type passed in is not NgModuleType, i
|
|
|
3004
2966
|
throwError(msg);
|
|
3005
2967
|
}
|
|
3006
2968
|
}
|
|
3007
|
-
function assertCurrentTNodeIsParent(isParent) {
|
|
3008
|
-
assertEqual(isParent, true, 'currentTNode should be a parent');
|
|
3009
|
-
}
|
|
3010
2969
|
function assertHasParent(tNode) {
|
|
3011
2970
|
assertDefined(tNode, 'currentTNode should exist!');
|
|
3012
2971
|
assertDefined(tNode.parent, 'currentTNode should have a parent');
|
|
@@ -3026,7 +2985,7 @@ function assertFirstCreatePass(tView, errMessage) {
|
|
|
3026
2985
|
assertEqual(tView.firstCreatePass, true, errMessage || 'Should only be called in first create pass.');
|
|
3027
2986
|
}
|
|
3028
2987
|
function assertFirstUpdatePass(tView, errMessage) {
|
|
3029
|
-
assertEqual(tView.firstUpdatePass, true,
|
|
2988
|
+
assertEqual(tView.firstUpdatePass, true, 'Should only be called in first update pass.');
|
|
3030
2989
|
}
|
|
3031
2990
|
/**
|
|
3032
2991
|
* This is a basic sanity check that an object is probably a directive def. DirectiveDef is
|
|
@@ -3051,25 +3010,10 @@ function assertBetween(lower, upper, index) {
|
|
|
3051
3010
|
}
|
|
3052
3011
|
function assertProjectionSlots(lView, errMessage) {
|
|
3053
3012
|
assertDefined(lView[DECLARATION_COMPONENT_VIEW], 'Component views should exist.');
|
|
3054
|
-
assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection,
|
|
3055
|
-
'Components with projection nodes (<ng-content>) must have projection slots defined.');
|
|
3013
|
+
assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, 'Components with projection nodes (<ng-content>) must have projection slots defined.');
|
|
3056
3014
|
}
|
|
3057
3015
|
function assertParentView(lView, errMessage) {
|
|
3058
|
-
assertDefined(lView,
|
|
3059
|
-
}
|
|
3060
|
-
function assertNoDuplicateDirectives$1(directives) {
|
|
3061
|
-
// The array needs at least two elements in order to have duplicates.
|
|
3062
|
-
if (directives.length < 2) {
|
|
3063
|
-
return;
|
|
3064
|
-
}
|
|
3065
|
-
const seenDirectives = new Set();
|
|
3066
|
-
for (const current of directives) {
|
|
3067
|
-
if (seenDirectives.has(current)) {
|
|
3068
|
-
throw new RuntimeError(309 /* RuntimeErrorCode.DUPLICATE_DIRECTIVE */, `Directive ${current.type.name} matches multiple times on the same element. ` +
|
|
3069
|
-
`Directives can only match an element once.`);
|
|
3070
|
-
}
|
|
3071
|
-
seenDirectives.add(current);
|
|
3072
|
-
}
|
|
3016
|
+
assertDefined(lView, "Component views should always have a parent view (component's host view)");
|
|
3073
3017
|
}
|
|
3074
3018
|
/**
|
|
3075
3019
|
* This is a basic sanity check that the `injectorIndex` seems to point to what looks like a
|
|
@@ -3534,14 +3478,6 @@ let _checkNoChangesMode = 0; /* CheckNoChangesMode.Off */
|
|
|
3534
3478
|
* @see detectChangesInViewWhileDirty
|
|
3535
3479
|
*/
|
|
3536
3480
|
let _isRefreshingViews = false;
|
|
3537
|
-
/**
|
|
3538
|
-
* Returns true if the instruction state stack is empty.
|
|
3539
|
-
*
|
|
3540
|
-
* Intended to be called from tests only (tree shaken otherwise).
|
|
3541
|
-
*/
|
|
3542
|
-
function specOnlyIsInstructionStateEmpty() {
|
|
3543
|
-
return instructionState.lFrame.parent === null;
|
|
3544
|
-
}
|
|
3545
3481
|
function getElementDepthCount() {
|
|
3546
3482
|
return instructionState.lFrame.elementDepthCount;
|
|
3547
3483
|
}
|
|
@@ -4263,12 +4199,12 @@ function callHooks(currentView, arr, initPhase, currentNodeIndex) {
|
|
|
4263
4199
|
*/
|
|
4264
4200
|
function callHookInternal(directive, hook) {
|
|
4265
4201
|
profiler(4 /* ProfilerEvent.LifecycleHookStart */, directive, hook);
|
|
4266
|
-
const prevConsumer = setActiveConsumer
|
|
4202
|
+
const prevConsumer = setActiveConsumer(null);
|
|
4267
4203
|
try {
|
|
4268
4204
|
hook.call(directive);
|
|
4269
4205
|
}
|
|
4270
4206
|
finally {
|
|
4271
|
-
setActiveConsumer
|
|
4207
|
+
setActiveConsumer(prevConsumer);
|
|
4272
4208
|
profiler(5 /* ProfilerEvent.LifecycleHookEnd */, directive, hook);
|
|
4273
4209
|
}
|
|
4274
4210
|
}
|
|
@@ -4686,9 +4622,7 @@ function isAnimationProp(name) {
|
|
|
4686
4622
|
* @param src `TAttributes` which should be appended to `dst`
|
|
4687
4623
|
*/
|
|
4688
4624
|
function mergeHostAttrs(dst, src) {
|
|
4689
|
-
if (src === null || src.length === 0)
|
|
4690
|
-
// do nothing
|
|
4691
|
-
}
|
|
4625
|
+
if (src === null || src.length === 0) ;
|
|
4692
4626
|
else if (dst === null || dst.length === 0) {
|
|
4693
4627
|
// We have source, but dst is empty, just make a copy.
|
|
4694
4628
|
dst = src.slice();
|
|
@@ -4701,9 +4635,7 @@ function mergeHostAttrs(dst, src) {
|
|
|
4701
4635
|
srcMarker = item;
|
|
4702
4636
|
}
|
|
4703
4637
|
else {
|
|
4704
|
-
if (srcMarker === 0 /* AttributeMarker.NamespaceURI */)
|
|
4705
|
-
// Case where we need to consume `key1`, `key2`, `value` items.
|
|
4706
|
-
}
|
|
4638
|
+
if (srcMarker === 0 /* AttributeMarker.NamespaceURI */) ;
|
|
4707
4639
|
else if (srcMarker === -1 /* AttributeMarker.ImplicitAttributes */ ||
|
|
4708
4640
|
srcMarker === 2 /* AttributeMarker.Styles */) {
|
|
4709
4641
|
// Case where we have to consume `key1` and `value` only.
|
|
@@ -4761,21 +4693,15 @@ function mergeHostAttribute(dst, marker, key1, key2, value) {
|
|
|
4761
4693
|
}
|
|
4762
4694
|
else if (item === key1) {
|
|
4763
4695
|
// We already have same token
|
|
4764
|
-
|
|
4696
|
+
{
|
|
4765
4697
|
if (value !== null) {
|
|
4766
4698
|
dst[i + 1] = value;
|
|
4767
4699
|
}
|
|
4768
4700
|
return;
|
|
4769
4701
|
}
|
|
4770
|
-
else if (key2 === dst[i + 1]) {
|
|
4771
|
-
dst[i + 2] = value;
|
|
4772
|
-
return;
|
|
4773
|
-
}
|
|
4774
4702
|
}
|
|
4775
4703
|
// Increment counter.
|
|
4776
4704
|
i++;
|
|
4777
|
-
if (key2 !== null)
|
|
4778
|
-
i++;
|
|
4779
4705
|
if (value !== null)
|
|
4780
4706
|
i++;
|
|
4781
4707
|
}
|
|
@@ -4785,9 +4711,6 @@ function mergeHostAttribute(dst, marker, key1, key2, value) {
|
|
|
4785
4711
|
i = markerInsertPosition + 1;
|
|
4786
4712
|
}
|
|
4787
4713
|
dst.splice(i++, 0, key1);
|
|
4788
|
-
if (key2 !== null) {
|
|
4789
|
-
dst.splice(i++, 0, key2);
|
|
4790
|
-
}
|
|
4791
4714
|
if (value !== null) {
|
|
4792
4715
|
dst.splice(i++, 0, value);
|
|
4793
4716
|
}
|
|
@@ -5999,29 +5922,6 @@ function getDevModeNodeName(tNode) {
|
|
|
5999
5922
|
}
|
|
6000
5923
|
}
|
|
6001
5924
|
|
|
6002
|
-
/**
|
|
6003
|
-
* @module
|
|
6004
|
-
* @description
|
|
6005
|
-
* The `di` module provides dependency injection container services.
|
|
6006
|
-
*/
|
|
6007
|
-
|
|
6008
|
-
/**
|
|
6009
|
-
* This file should not be necessary because node resolution should just default to `./di/index`!
|
|
6010
|
-
*
|
|
6011
|
-
* However it does not seem to work and it breaks:
|
|
6012
|
-
* - //packages/animations/browser/test:test_web_chromium-local
|
|
6013
|
-
* - //packages/compiler-cli/test:extract_i18n
|
|
6014
|
-
* - //packages/compiler-cli/test:ngc
|
|
6015
|
-
* - //packages/compiler-cli/test:perform_watch
|
|
6016
|
-
* - //packages/compiler-cli/test/diagnostics:check_types
|
|
6017
|
-
* - //packages/compiler-cli/test/transformers:test
|
|
6018
|
-
* - //packages/compiler/test:test
|
|
6019
|
-
* - //tools/public_api_guard:core_api
|
|
6020
|
-
*
|
|
6021
|
-
* Remove this file once the above is solved or wait until `ngc` is deleted and then it should be
|
|
6022
|
-
* safe to delete this file.
|
|
6023
|
-
*/
|
|
6024
|
-
|
|
6025
5925
|
const SCHEDULE_IN_ROOT_ZONE_DEFAULT = false;
|
|
6026
5926
|
|
|
6027
5927
|
/**
|
|
@@ -6209,12 +6109,12 @@ class EventEmitter_ extends Subject {
|
|
|
6209
6109
|
}
|
|
6210
6110
|
}
|
|
6211
6111
|
emit(value) {
|
|
6212
|
-
const prevConsumer = setActiveConsumer
|
|
6112
|
+
const prevConsumer = setActiveConsumer(null);
|
|
6213
6113
|
try {
|
|
6214
6114
|
super.next(value);
|
|
6215
6115
|
}
|
|
6216
6116
|
finally {
|
|
6217
|
-
setActiveConsumer
|
|
6117
|
+
setActiveConsumer(prevConsumer);
|
|
6218
6118
|
}
|
|
6219
6119
|
}
|
|
6220
6120
|
subscribe(observerOrNext, error, complete) {
|
|
@@ -6791,8 +6691,6 @@ function getNgZone(ngZoneToUse = 'zone.js', options) {
|
|
|
6791
6691
|
return ngZoneToUse;
|
|
6792
6692
|
}
|
|
6793
6693
|
|
|
6794
|
-
// Public API for Zone
|
|
6795
|
-
|
|
6796
6694
|
/**
|
|
6797
6695
|
* Provides a hook for centralized exception handling.
|
|
6798
6696
|
*
|
|
@@ -6893,14 +6791,15 @@ class OutputEmitterRef {
|
|
|
6893
6791
|
/** Emits a new value to the output. */
|
|
6894
6792
|
emit(value) {
|
|
6895
6793
|
if (this.destroyed) {
|
|
6896
|
-
|
|
6794
|
+
console.warn(formatRuntimeError(953 /* RuntimeErrorCode.OUTPUT_REF_DESTROYED */, ngDevMode &&
|
|
6897
6795
|
'Unexpected emit for destroyed `OutputRef`. ' +
|
|
6898
|
-
'The owning directive/component is destroyed.');
|
|
6796
|
+
'The owning directive/component is destroyed.'));
|
|
6797
|
+
return;
|
|
6899
6798
|
}
|
|
6900
6799
|
if (this.listeners === null) {
|
|
6901
6800
|
return;
|
|
6902
6801
|
}
|
|
6903
|
-
const previousConsumer = setActiveConsumer
|
|
6802
|
+
const previousConsumer = setActiveConsumer(null);
|
|
6904
6803
|
try {
|
|
6905
6804
|
for (const listenerFn of this.listeners) {
|
|
6906
6805
|
try {
|
|
@@ -6912,7 +6811,7 @@ class OutputEmitterRef {
|
|
|
6912
6811
|
}
|
|
6913
6812
|
}
|
|
6914
6813
|
finally {
|
|
6915
|
-
setActiveConsumer
|
|
6814
|
+
setActiveConsumer(previousConsumer);
|
|
6916
6815
|
}
|
|
6917
6816
|
}
|
|
6918
6817
|
}
|
|
@@ -7100,11 +6999,9 @@ function unwrapElementRef(value) {
|
|
|
7100
6999
|
* Checks if the given `value` is a reactive `Signal`.
|
|
7101
7000
|
*/
|
|
7102
7001
|
function isSignal(value) {
|
|
7103
|
-
return typeof value === 'function' && value[SIGNAL
|
|
7002
|
+
return typeof value === 'function' && value[SIGNAL] !== undefined;
|
|
7104
7003
|
}
|
|
7105
7004
|
|
|
7106
|
-
/** Symbol used distinguish `WritableSignal` from other non-writable signals and functions. */
|
|
7107
|
-
const ɵWRITABLE_SIGNAL = /* @__PURE__ */ Symbol('WRITABLE_SIGNAL');
|
|
7108
7005
|
/**
|
|
7109
7006
|
* Utility function used during template type checking to extract the value from a `WritableSignal`.
|
|
7110
7007
|
* @codeGenApi
|
|
@@ -7118,13 +7015,10 @@ function ɵunwrapWritableSignal(value) {
|
|
|
7118
7015
|
* Create a `Signal` that can be set or updated directly.
|
|
7119
7016
|
*/
|
|
7120
7017
|
function signal(initialValue, options) {
|
|
7121
|
-
const signalFn = createSignal
|
|
7122
|
-
const node = signalFn[SIGNAL
|
|
7123
|
-
|
|
7124
|
-
|
|
7125
|
-
}
|
|
7126
|
-
signalFn.set = (newValue) => signalSetFn$1(node, newValue);
|
|
7127
|
-
signalFn.update = (updateFn) => signalUpdateFn$1(node, updateFn);
|
|
7018
|
+
const signalFn = createSignal(initialValue, options?.equal);
|
|
7019
|
+
const node = signalFn[SIGNAL];
|
|
7020
|
+
signalFn.set = (newValue) => signalSetFn(node, newValue);
|
|
7021
|
+
signalFn.update = (updateFn) => signalUpdateFn(node, updateFn);
|
|
7128
7022
|
signalFn.asReadonly = signalAsReadonlyFn.bind(signalFn);
|
|
7129
7023
|
if (ngDevMode) {
|
|
7130
7024
|
signalFn.toString = () => `[Signal: ${signalFn()}]`;
|
|
@@ -7133,10 +7027,10 @@ function signal(initialValue, options) {
|
|
|
7133
7027
|
return signalFn;
|
|
7134
7028
|
}
|
|
7135
7029
|
function signalAsReadonlyFn() {
|
|
7136
|
-
const node = this[SIGNAL
|
|
7030
|
+
const node = this[SIGNAL];
|
|
7137
7031
|
if (node.readonlyFn === undefined) {
|
|
7138
7032
|
const readonlyFn = () => this();
|
|
7139
|
-
readonlyFn[SIGNAL
|
|
7033
|
+
readonlyFn[SIGNAL] = node;
|
|
7140
7034
|
node.readonlyFn = readonlyFn;
|
|
7141
7035
|
}
|
|
7142
7036
|
return node.readonlyFn;
|
|
@@ -7614,20 +7508,6 @@ function getComponentViewByInstance(componentInstance) {
|
|
|
7614
7508
|
* This property will be monkey-patched on elements, components and directives.
|
|
7615
7509
|
*/
|
|
7616
7510
|
const MONKEY_PATCH_KEY_NAME = '__ngContext__';
|
|
7617
|
-
function attachLViewId(target, data) {
|
|
7618
|
-
target[MONKEY_PATCH_KEY_NAME] = data[ID];
|
|
7619
|
-
}
|
|
7620
|
-
/**
|
|
7621
|
-
* Returns the monkey-patch value data present on the target (which could be
|
|
7622
|
-
* a component, directive or a DOM node).
|
|
7623
|
-
*/
|
|
7624
|
-
function readLView(target) {
|
|
7625
|
-
const data = readPatchedData(target);
|
|
7626
|
-
if (isLView(data)) {
|
|
7627
|
-
return data;
|
|
7628
|
-
}
|
|
7629
|
-
return data ? data.lView : null;
|
|
7630
|
-
}
|
|
7631
7511
|
/**
|
|
7632
7512
|
* Assigns the given data to the given target (which could be a component,
|
|
7633
7513
|
* directive or DOM node instance) using monkey-patching.
|
|
@@ -8093,20 +7973,6 @@ function getLocalRefs(target) {
|
|
|
8093
7973
|
function getHostElement(componentOrDirective) {
|
|
8094
7974
|
return getLContext(componentOrDirective).native;
|
|
8095
7975
|
}
|
|
8096
|
-
/**
|
|
8097
|
-
* Retrieves the rendered text for a given component.
|
|
8098
|
-
*
|
|
8099
|
-
* This function retrieves the host element of a component and
|
|
8100
|
-
* and then returns the `textContent` for that element. This implies
|
|
8101
|
-
* that the text returned will include re-projected content of
|
|
8102
|
-
* the component as well.
|
|
8103
|
-
*
|
|
8104
|
-
* @param component The component to return the content text for.
|
|
8105
|
-
*/
|
|
8106
|
-
function getRenderedText(component) {
|
|
8107
|
-
const hostElement = getHostElement(component);
|
|
8108
|
-
return hostElement.textContent || '';
|
|
8109
|
-
}
|
|
8110
7976
|
/**
|
|
8111
7977
|
* Retrieves a list of event listeners associated with a DOM element. The list does include host
|
|
8112
7978
|
* listeners, but it does not include event listeners defined outside of the Angular context
|
|
@@ -8185,23 +8051,6 @@ function isDirectiveDefHack(obj) {
|
|
|
8185
8051
|
obj.declaredInputs !== undefined &&
|
|
8186
8052
|
obj.findHostDirectiveDefs !== undefined);
|
|
8187
8053
|
}
|
|
8188
|
-
/**
|
|
8189
|
-
* Retrieve the component `LView` from component/element.
|
|
8190
|
-
*
|
|
8191
|
-
* NOTE: `LView` is a private and should not be leaked outside.
|
|
8192
|
-
* Don't export this method to `ng.*` on window.
|
|
8193
|
-
*
|
|
8194
|
-
* @param target DOM element or component instance for which to retrieve the LView.
|
|
8195
|
-
*/
|
|
8196
|
-
function getComponentLView(target) {
|
|
8197
|
-
const lContext = getLContext(target);
|
|
8198
|
-
const nodeIndx = lContext.nodeIndex;
|
|
8199
|
-
const lView = lContext.lView;
|
|
8200
|
-
ngDevMode && assertLView(lView);
|
|
8201
|
-
const componentLView = lView[nodeIndx];
|
|
8202
|
-
ngDevMode && assertLView(componentLView);
|
|
8203
|
-
return componentLView;
|
|
8204
|
-
}
|
|
8205
8054
|
/** Asserts that a value is a DOM Element. */
|
|
8206
8055
|
function assertDomElement(value) {
|
|
8207
8056
|
if (typeof Element !== 'undefined' && !(value instanceof Element)) {
|
|
@@ -8417,7 +8266,7 @@ function makeStateKey(key) {
|
|
|
8417
8266
|
}
|
|
8418
8267
|
function initTransferState() {
|
|
8419
8268
|
const transferState = new TransferState();
|
|
8420
|
-
if (
|
|
8269
|
+
if (typeof ngServerMode === 'undefined' || !ngServerMode) {
|
|
8421
8270
|
transferState.store = retrieveTransferredState(getDocument(), inject(APP_ID));
|
|
8422
8271
|
}
|
|
8423
8272
|
return transferState;
|
|
@@ -8544,7 +8393,6 @@ const DEFER_BLOCK_ID = 'di';
|
|
|
8544
8393
|
const DEFER_BLOCK_STATE$1 = 's';
|
|
8545
8394
|
const DEFER_PARENT_BLOCK_ID = 'p';
|
|
8546
8395
|
const DEFER_HYDRATE_TRIGGERS = 't';
|
|
8547
|
-
const DEFER_PREFETCH_TRIGGERS = 'pt';
|
|
8548
8396
|
|
|
8549
8397
|
/**
|
|
8550
8398
|
* Internal token that specifies whether DOM reuse logic
|
|
@@ -8625,7 +8473,7 @@ function performanceMarkFeature(feature) {
|
|
|
8625
8473
|
function assertNotInReactiveContext(debugFn, extraContext) {
|
|
8626
8474
|
// Taking a `Function` instead of a string name here prevents the un-minified name of the function
|
|
8627
8475
|
// from being retained in the bundle regardless of minification.
|
|
8628
|
-
if (getActiveConsumer
|
|
8476
|
+
if (getActiveConsumer() !== null) {
|
|
8629
8477
|
throw new RuntimeError(-602 /* RuntimeErrorCode.ASSERTION_NOT_INSIDE_REACTIVE_CONTEXT */, ngDevMode &&
|
|
8630
8478
|
`${debugFn.name}() cannot be called from within a reactive context.${extraContext ? ` ${extraContext}` : ''}`);
|
|
8631
8479
|
}
|
|
@@ -9545,6 +9393,16 @@ class DehydratedBlockRegistry {
|
|
|
9545
9393
|
contract = inject(JSACTION_EVENT_CONTRACT);
|
|
9546
9394
|
add(blockId, info) {
|
|
9547
9395
|
this.registry.set(blockId, info);
|
|
9396
|
+
// It's possible that hydration is queued that's waiting for the
|
|
9397
|
+
// resolution of a lazy loaded route. In this case, we ensure
|
|
9398
|
+
// the callback function is called to continue the hydration process
|
|
9399
|
+
// for the queued block set.
|
|
9400
|
+
if (this.awaitingCallbacks.has(blockId)) {
|
|
9401
|
+
const awaitingCallbacks = this.awaitingCallbacks.get(blockId);
|
|
9402
|
+
for (const cb of awaitingCallbacks) {
|
|
9403
|
+
cb();
|
|
9404
|
+
}
|
|
9405
|
+
}
|
|
9548
9406
|
}
|
|
9549
9407
|
get(blockId) {
|
|
9550
9408
|
return this.registry.get(blockId) ?? null;
|
|
@@ -9559,6 +9417,7 @@ class DehydratedBlockRegistry {
|
|
|
9559
9417
|
this.jsActionMap.delete(blockId);
|
|
9560
9418
|
this.invokeTriggerCleanupFns(blockId);
|
|
9561
9419
|
this.hydrating.delete(blockId);
|
|
9420
|
+
this.awaitingCallbacks.delete(blockId);
|
|
9562
9421
|
}
|
|
9563
9422
|
if (this.size === 0) {
|
|
9564
9423
|
this.contract.instance?.cleanUp();
|
|
@@ -9586,6 +9445,13 @@ class DehydratedBlockRegistry {
|
|
|
9586
9445
|
}
|
|
9587
9446
|
// Blocks that are being hydrated.
|
|
9588
9447
|
hydrating = new Map();
|
|
9448
|
+
// Blocks that are awaiting a defer instruction finish.
|
|
9449
|
+
awaitingCallbacks = new Map();
|
|
9450
|
+
awaitParentBlock(topmostParentBlock, callback) {
|
|
9451
|
+
const parentBlockAwaitCallbacks = this.awaitingCallbacks.get(topmostParentBlock) ?? [];
|
|
9452
|
+
parentBlockAwaitCallbacks.push(callback);
|
|
9453
|
+
this.awaitingCallbacks.set(topmostParentBlock, parentBlockAwaitCallbacks);
|
|
9454
|
+
}
|
|
9589
9455
|
/** @nocollapse */
|
|
9590
9456
|
static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ ɵɵdefineInjectable({
|
|
9591
9457
|
token: DehydratedBlockRegistry,
|
|
@@ -10014,7 +9880,6 @@ function getParentBlockHydrationQueue(deferBlockId, injector) {
|
|
|
10014
9880
|
isTopMostDeferBlock = dehydratedBlockRegistry.has(currentBlockId);
|
|
10015
9881
|
const hydratingParentBlock = dehydratedBlockRegistry.hydrating.get(currentBlockId);
|
|
10016
9882
|
if (parentBlockPromise === null && hydratingParentBlock != null) {
|
|
10017
|
-
// TODO: add an ngDevMode asset that `hydratingParentBlock.promise` exists and is of type Promise.
|
|
10018
9883
|
parentBlockPromise = hydratingParentBlock.promise;
|
|
10019
9884
|
break;
|
|
10020
9885
|
}
|
|
@@ -10109,12 +9974,62 @@ function processBlockData(injector) {
|
|
|
10109
9974
|
}
|
|
10110
9975
|
return blockDetails;
|
|
10111
9976
|
}
|
|
9977
|
+
function isSsrContentsIntegrity(node) {
|
|
9978
|
+
return (!!node &&
|
|
9979
|
+
node.nodeType === Node.COMMENT_NODE &&
|
|
9980
|
+
node.textContent?.trim() === SSR_CONTENT_INTEGRITY_MARKER);
|
|
9981
|
+
}
|
|
9982
|
+
function skipTextNodes(node) {
|
|
9983
|
+
// Ignore whitespace. Before the <body>, we shouldn't find text nodes that aren't whitespace.
|
|
9984
|
+
while (node && node.nodeType === Node.TEXT_NODE) {
|
|
9985
|
+
node = node.previousSibling;
|
|
9986
|
+
}
|
|
9987
|
+
return node;
|
|
9988
|
+
}
|
|
9989
|
+
/**
|
|
9990
|
+
* Verifies whether the DOM contains a special marker added during SSR time to make sure
|
|
9991
|
+
* there is no SSR'ed contents transformations happen after SSR is completed. Typically that
|
|
9992
|
+
* happens either by CDN or during the build process as an optimization to remove comment nodes.
|
|
9993
|
+
* Hydration process requires comment nodes produced by Angular to locate correct DOM segments.
|
|
9994
|
+
* When this special marker is *not* present - throw an error and do not proceed with hydration,
|
|
9995
|
+
* since it will not be able to function correctly.
|
|
9996
|
+
*
|
|
9997
|
+
* Note: this function is invoked only on the client, so it's safe to use DOM APIs.
|
|
9998
|
+
*/
|
|
9999
|
+
function verifySsrContentsIntegrity(doc) {
|
|
10000
|
+
for (const node of doc.body.childNodes) {
|
|
10001
|
+
if (isSsrContentsIntegrity(node)) {
|
|
10002
|
+
return;
|
|
10003
|
+
}
|
|
10004
|
+
}
|
|
10005
|
+
// Check if the HTML parser may have moved the marker to just before the <body> tag,
|
|
10006
|
+
// e.g. because the body tag was implicit and not present in the markup. An implicit body
|
|
10007
|
+
// tag is unlikely to interfer with whitespace/comments inside of the app's root element.
|
|
10008
|
+
// Case 1: Implicit body. Example:
|
|
10009
|
+
// <!doctype html><head><title>Hi</title></head><!--nghm--><app-root></app-root>
|
|
10010
|
+
const beforeBody = skipTextNodes(doc.body.previousSibling);
|
|
10011
|
+
if (isSsrContentsIntegrity(beforeBody)) {
|
|
10012
|
+
return;
|
|
10013
|
+
}
|
|
10014
|
+
// Case 2: Implicit body & head. Example:
|
|
10015
|
+
// <!doctype html><head><title>Hi</title><!--nghm--><app-root></app-root>
|
|
10016
|
+
let endOfHead = skipTextNodes(doc.head.lastChild);
|
|
10017
|
+
if (isSsrContentsIntegrity(endOfHead)) {
|
|
10018
|
+
return;
|
|
10019
|
+
}
|
|
10020
|
+
throw new RuntimeError(-507 /* RuntimeErrorCode.MISSING_SSR_CONTENT_INTEGRITY_MARKER */, typeof ngDevMode !== 'undefined' &&
|
|
10021
|
+
ngDevMode &&
|
|
10022
|
+
'Angular hydration logic detected that HTML content of this page was modified after it ' +
|
|
10023
|
+
'was produced during server side rendering. Make sure that there are no optimizations ' +
|
|
10024
|
+
'that remove comment nodes from HTML enabled on your CDN. Angular hydration ' +
|
|
10025
|
+
'relies on HTML produced by the server, including whitespaces and comment nodes.');
|
|
10026
|
+
}
|
|
10112
10027
|
|
|
10113
10028
|
/** Refreshes all content queries declared by directives in a given view */
|
|
10114
10029
|
function refreshContentQueries(tView, lView) {
|
|
10115
10030
|
const contentQueries = tView.contentQueries;
|
|
10116
10031
|
if (contentQueries !== null) {
|
|
10117
|
-
const prevConsumer = setActiveConsumer
|
|
10032
|
+
const prevConsumer = setActiveConsumer(null);
|
|
10118
10033
|
try {
|
|
10119
10034
|
for (let i = 0; i < contentQueries.length; i += 2) {
|
|
10120
10035
|
const queryStartIdx = contentQueries[i];
|
|
@@ -10130,24 +10045,24 @@ function refreshContentQueries(tView, lView) {
|
|
|
10130
10045
|
}
|
|
10131
10046
|
}
|
|
10132
10047
|
finally {
|
|
10133
|
-
setActiveConsumer
|
|
10048
|
+
setActiveConsumer(prevConsumer);
|
|
10134
10049
|
}
|
|
10135
10050
|
}
|
|
10136
10051
|
}
|
|
10137
10052
|
function executeViewQueryFn(flags, viewQueryFn, component) {
|
|
10138
10053
|
ngDevMode && assertDefined(viewQueryFn, 'View queries function to execute must be defined.');
|
|
10139
10054
|
setCurrentQueryIndex(0);
|
|
10140
|
-
const prevConsumer = setActiveConsumer
|
|
10055
|
+
const prevConsumer = setActiveConsumer(null);
|
|
10141
10056
|
try {
|
|
10142
10057
|
viewQueryFn(flags, component);
|
|
10143
10058
|
}
|
|
10144
10059
|
finally {
|
|
10145
|
-
setActiveConsumer
|
|
10060
|
+
setActiveConsumer(prevConsumer);
|
|
10146
10061
|
}
|
|
10147
10062
|
}
|
|
10148
10063
|
function executeContentQueries(tView, tNode, lView) {
|
|
10149
10064
|
if (isContentQueryHost(tNode)) {
|
|
10150
|
-
const prevConsumer = setActiveConsumer
|
|
10065
|
+
const prevConsumer = setActiveConsumer(null);
|
|
10151
10066
|
try {
|
|
10152
10067
|
const start = tNode.directiveStart;
|
|
10153
10068
|
const end = tNode.directiveEnd;
|
|
@@ -10162,7 +10077,7 @@ function executeContentQueries(tView, tNode, lView) {
|
|
|
10162
10077
|
}
|
|
10163
10078
|
}
|
|
10164
10079
|
finally {
|
|
10165
|
-
setActiveConsumer
|
|
10080
|
+
setActiveConsumer(prevConsumer);
|
|
10166
10081
|
}
|
|
10167
10082
|
}
|
|
10168
10083
|
}
|
|
@@ -10258,16 +10173,6 @@ function getPolicy$1() {
|
|
|
10258
10173
|
function trustedHTMLFromString(html) {
|
|
10259
10174
|
return getPolicy$1()?.createHTML(html) || html;
|
|
10260
10175
|
}
|
|
10261
|
-
/**
|
|
10262
|
-
* Unsafely promote a string to a TrustedScript, falling back to strings when
|
|
10263
|
-
* Trusted Types are not available.
|
|
10264
|
-
* @security In particular, it must be assured that the provided string will
|
|
10265
|
-
* never cause an XSS vulnerability if used in a context that will be
|
|
10266
|
-
* interpreted and executed as a script by a browser, e.g. when calling eval.
|
|
10267
|
-
*/
|
|
10268
|
-
function trustedScriptFromString(script) {
|
|
10269
|
-
return getPolicy$1()?.createScript(script) || script;
|
|
10270
|
-
}
|
|
10271
10176
|
/**
|
|
10272
10177
|
* Unsafely promote a string to a TrustedScriptURL, falling back to strings
|
|
10273
10178
|
* when Trusted Types are not available.
|
|
@@ -10280,54 +10185,6 @@ function trustedScriptFromString(script) {
|
|
|
10280
10185
|
function trustedScriptURLFromString(url) {
|
|
10281
10186
|
return getPolicy$1()?.createScriptURL(url) || url;
|
|
10282
10187
|
}
|
|
10283
|
-
/**
|
|
10284
|
-
* Unsafely call the Function constructor with the given string arguments. It
|
|
10285
|
-
* is only available in development mode, and should be stripped out of
|
|
10286
|
-
* production code.
|
|
10287
|
-
* @security This is a security-sensitive function; any use of this function
|
|
10288
|
-
* must go through security review. In particular, it must be assured that it
|
|
10289
|
-
* is only called from development code, as use in production code can lead to
|
|
10290
|
-
* XSS vulnerabilities.
|
|
10291
|
-
*/
|
|
10292
|
-
function newTrustedFunctionForDev(...args) {
|
|
10293
|
-
if (typeof ngDevMode === 'undefined') {
|
|
10294
|
-
throw new Error('newTrustedFunctionForDev should never be called in production');
|
|
10295
|
-
}
|
|
10296
|
-
if (!_global.trustedTypes) {
|
|
10297
|
-
// In environments that don't support Trusted Types, fall back to the most
|
|
10298
|
-
// straightforward implementation:
|
|
10299
|
-
return new Function(...args);
|
|
10300
|
-
}
|
|
10301
|
-
// Chrome currently does not support passing TrustedScript to the Function
|
|
10302
|
-
// constructor. The following implements the workaround proposed on the page
|
|
10303
|
-
// below, where the Chromium bug is also referenced:
|
|
10304
|
-
// https://github.com/w3c/webappsec-trusted-types/wiki/Trusted-Types-for-function-constructor
|
|
10305
|
-
const fnArgs = args.slice(0, -1).join(',');
|
|
10306
|
-
const fnBody = args[args.length - 1];
|
|
10307
|
-
const body = `(function anonymous(${fnArgs}
|
|
10308
|
-
) { ${fnBody}
|
|
10309
|
-
})`;
|
|
10310
|
-
// Using eval directly confuses the compiler and prevents this module from
|
|
10311
|
-
// being stripped out of JS binaries even if not used. The global['eval']
|
|
10312
|
-
// indirection fixes that.
|
|
10313
|
-
const fn = _global['eval'](trustedScriptFromString(body));
|
|
10314
|
-
if (fn.bind === undefined) {
|
|
10315
|
-
// Workaround for a browser bug that only exists in Chrome 83, where passing
|
|
10316
|
-
// a TrustedScript to eval just returns the TrustedScript back without
|
|
10317
|
-
// evaluating it. In that case, fall back to the most straightforward
|
|
10318
|
-
// implementation:
|
|
10319
|
-
return new Function(...args);
|
|
10320
|
-
}
|
|
10321
|
-
// To completely mimic the behavior of calling "new Function", two more
|
|
10322
|
-
// things need to happen:
|
|
10323
|
-
// 1. Stringifying the resulting function should return its source code
|
|
10324
|
-
fn.toString = () => body;
|
|
10325
|
-
// 2. When calling the resulting function, `this` should refer to `global`
|
|
10326
|
-
return fn.bind(_global);
|
|
10327
|
-
// When Trusted Types support in Function constructors is widely available,
|
|
10328
|
-
// the implementation of this function can be simplified to:
|
|
10329
|
-
// return new Function(...args.map(a => trustedScriptFromString(a)));
|
|
10330
|
-
}
|
|
10331
10188
|
|
|
10332
10189
|
/**
|
|
10333
10190
|
* @fileoverview
|
|
@@ -12471,7 +12328,7 @@ var InputFlags;
|
|
|
12471
12328
|
})(InputFlags || (InputFlags = {}));
|
|
12472
12329
|
|
|
12473
12330
|
function writeToDirectiveInput(def, instance, publicName, value) {
|
|
12474
|
-
const prevConsumer = setActiveConsumer
|
|
12331
|
+
const prevConsumer = setActiveConsumer(null);
|
|
12475
12332
|
try {
|
|
12476
12333
|
if (ngDevMode) {
|
|
12477
12334
|
if (!def.inputs.hasOwnProperty(publicName)) {
|
|
@@ -12492,7 +12349,7 @@ function writeToDirectiveInput(def, instance, publicName, value) {
|
|
|
12492
12349
|
let inputSignalNode = null;
|
|
12493
12350
|
if ((flags & InputFlags.SignalBased) !== 0) {
|
|
12494
12351
|
const field = instance[privateName];
|
|
12495
|
-
inputSignalNode = field[SIGNAL
|
|
12352
|
+
inputSignalNode = field[SIGNAL];
|
|
12496
12353
|
}
|
|
12497
12354
|
// If there is a signal node and a transform, run it before potentially
|
|
12498
12355
|
// delegating to features like `NgOnChanges`.
|
|
@@ -12511,7 +12368,7 @@ function writeToDirectiveInput(def, instance, publicName, value) {
|
|
|
12511
12368
|
}
|
|
12512
12369
|
}
|
|
12513
12370
|
finally {
|
|
12514
|
-
setActiveConsumer
|
|
12371
|
+
setActiveConsumer(prevConsumer);
|
|
12515
12372
|
}
|
|
12516
12373
|
}
|
|
12517
12374
|
|
|
@@ -12968,56 +12825,6 @@ function setAllInputsForProperty(tNode, tView, lView, publicName, value) {
|
|
|
12968
12825
|
}
|
|
12969
12826
|
return hasMatch;
|
|
12970
12827
|
}
|
|
12971
|
-
/**
|
|
12972
|
-
* Sets an input value only on a specific directive and its host directives.
|
|
12973
|
-
* @param tNode TNode on which the input is being set.
|
|
12974
|
-
* @param tView Current TView
|
|
12975
|
-
* @param lView `LView` which contains the directives.
|
|
12976
|
-
* @param target Directive on which to set the input.
|
|
12977
|
-
* @param publicName Public name of the input being set.
|
|
12978
|
-
* @param value Value to set.
|
|
12979
|
-
*/
|
|
12980
|
-
function setDirectiveInput(tNode, tView, lView, target, publicName, value) {
|
|
12981
|
-
let hostIndex = null;
|
|
12982
|
-
let hostDirectivesStart = null;
|
|
12983
|
-
let hostDirectivesEnd = null;
|
|
12984
|
-
let hasSet = false;
|
|
12985
|
-
if (ngDevMode && !tNode.directiveToIndex?.has(target.type)) {
|
|
12986
|
-
throw new Error(`Node does not have a directive with type ${target.type.name}`);
|
|
12987
|
-
}
|
|
12988
|
-
const data = tNode.directiveToIndex.get(target.type);
|
|
12989
|
-
if (typeof data === 'number') {
|
|
12990
|
-
hostIndex = data;
|
|
12991
|
-
}
|
|
12992
|
-
else {
|
|
12993
|
-
[hostIndex, hostDirectivesStart, hostDirectivesEnd] = data;
|
|
12994
|
-
}
|
|
12995
|
-
if (hostDirectivesStart !== null &&
|
|
12996
|
-
hostDirectivesEnd !== null &&
|
|
12997
|
-
tNode.hostDirectiveInputs?.hasOwnProperty(publicName)) {
|
|
12998
|
-
const hostDirectiveInputs = tNode.hostDirectiveInputs[publicName];
|
|
12999
|
-
for (let i = 0; i < hostDirectiveInputs.length; i += 2) {
|
|
13000
|
-
const index = hostDirectiveInputs[i];
|
|
13001
|
-
if (index >= hostDirectivesStart && index <= hostDirectivesEnd) {
|
|
13002
|
-
ngDevMode && assertIndexInRange(lView, index);
|
|
13003
|
-
const def = tView.data[index];
|
|
13004
|
-
const hostDirectivePublicName = hostDirectiveInputs[i + 1];
|
|
13005
|
-
writeToDirectiveInput(def, lView[index], hostDirectivePublicName, value);
|
|
13006
|
-
hasSet = true;
|
|
13007
|
-
}
|
|
13008
|
-
else if (index > hostDirectivesEnd) {
|
|
13009
|
-
// Directives here are in ascending order so we can stop looking once we're past the range.
|
|
13010
|
-
break;
|
|
13011
|
-
}
|
|
13012
|
-
}
|
|
13013
|
-
}
|
|
13014
|
-
if (hostIndex !== null) {
|
|
13015
|
-
ngDevMode && assertIndexInRange(lView, hostIndex);
|
|
13016
|
-
writeToDirectiveInput(target, lView[hostIndex], publicName, value);
|
|
13017
|
-
hasSet = true;
|
|
13018
|
-
}
|
|
13019
|
-
return hasSet;
|
|
13020
|
-
}
|
|
13021
12828
|
|
|
13022
12829
|
function renderComponent(hostLView, componentHostIdx) {
|
|
13023
12830
|
ngDevMode && assertEqual(isCreationMode(hostLView), true, 'Should be run in creation mode');
|
|
@@ -13126,7 +12933,7 @@ function renderView(tView, lView, context) {
|
|
|
13126
12933
|
throw error;
|
|
13127
12934
|
}
|
|
13128
12935
|
finally {
|
|
13129
|
-
lView[FLAGS] &=
|
|
12936
|
+
lView[FLAGS] &= -5 /* LViewFlags.CreationMode */;
|
|
13130
12937
|
leaveView();
|
|
13131
12938
|
}
|
|
13132
12939
|
}
|
|
@@ -13138,7 +12945,7 @@ function renderChildComponents(hostLView, components) {
|
|
|
13138
12945
|
}
|
|
13139
12946
|
|
|
13140
12947
|
function createAndRenderEmbeddedLView(declarationLView, templateTNode, context, options) {
|
|
13141
|
-
const prevConsumer = setActiveConsumer
|
|
12948
|
+
const prevConsumer = setActiveConsumer(null);
|
|
13142
12949
|
try {
|
|
13143
12950
|
const embeddedTView = templateTNode.tView;
|
|
13144
12951
|
ngDevMode && assertDefined(embeddedTView, 'TView must be defined for a template node.');
|
|
@@ -13159,7 +12966,7 @@ function createAndRenderEmbeddedLView(declarationLView, templateTNode, context,
|
|
|
13159
12966
|
return embeddedLView;
|
|
13160
12967
|
}
|
|
13161
12968
|
finally {
|
|
13162
|
-
setActiveConsumer
|
|
12969
|
+
setActiveConsumer(prevConsumer);
|
|
13163
12970
|
}
|
|
13164
12971
|
}
|
|
13165
12972
|
/**
|
|
@@ -13404,7 +13211,7 @@ function cleanUpView(tView, lView) {
|
|
|
13404
13211
|
if (isDestroyed(lView)) {
|
|
13405
13212
|
return;
|
|
13406
13213
|
}
|
|
13407
|
-
const prevConsumer = setActiveConsumer
|
|
13214
|
+
const prevConsumer = setActiveConsumer(null);
|
|
13408
13215
|
try {
|
|
13409
13216
|
// Usually the Attached flag is removed when the view is detached from its parent, however
|
|
13410
13217
|
// if it's a root view, the flag won't be unset hence why we're also removing on destroy.
|
|
@@ -13415,7 +13222,7 @@ function cleanUpView(tView, lView) {
|
|
|
13415
13222
|
// This also aligns with the ViewEngine behavior. It also means that the onDestroy hook is
|
|
13416
13223
|
// really more of an "afterDestroy" hook if you think about it.
|
|
13417
13224
|
lView[FLAGS] |= 256 /* LViewFlags.Destroyed */;
|
|
13418
|
-
lView[REACTIVE_TEMPLATE_CONSUMER] && consumerDestroy
|
|
13225
|
+
lView[REACTIVE_TEMPLATE_CONSUMER] && consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);
|
|
13419
13226
|
executeOnDestroys(tView, lView);
|
|
13420
13227
|
processCleanups(tView, lView);
|
|
13421
13228
|
// For component views only, the local renderer is destroyed at clean up time.
|
|
@@ -13440,7 +13247,7 @@ function cleanUpView(tView, lView) {
|
|
|
13440
13247
|
unregisterLView(lView);
|
|
13441
13248
|
}
|
|
13442
13249
|
finally {
|
|
13443
|
-
setActiveConsumer
|
|
13250
|
+
setActiveConsumer(prevConsumer);
|
|
13444
13251
|
}
|
|
13445
13252
|
}
|
|
13446
13253
|
/** Removes listeners and unsubscribes from output subscriptions */
|
|
@@ -14047,7 +13854,7 @@ function maybeReturnReactiveLViewConsumer(consumer) {
|
|
|
14047
13854
|
freeConsumers.push(consumer);
|
|
14048
13855
|
}
|
|
14049
13856
|
const REACTIVE_LVIEW_CONSUMER_NODE = {
|
|
14050
|
-
...REACTIVE_NODE
|
|
13857
|
+
...REACTIVE_NODE,
|
|
14051
13858
|
consumerIsAlwaysLive: true,
|
|
14052
13859
|
kind: 'template',
|
|
14053
13860
|
consumerMarkedDirty: (node) => {
|
|
@@ -14075,7 +13882,7 @@ function getOrCreateTemporaryConsumer(lView) {
|
|
|
14075
13882
|
return consumer;
|
|
14076
13883
|
}
|
|
14077
13884
|
const TEMPORARY_CONSUMER_NODE = {
|
|
14078
|
-
...REACTIVE_NODE
|
|
13885
|
+
...REACTIVE_NODE,
|
|
14079
13886
|
consumerIsAlwaysLive: true,
|
|
14080
13887
|
kind: 'template',
|
|
14081
13888
|
consumerMarkedDirty: (node) => {
|
|
@@ -14242,9 +14049,9 @@ function refreshView(tView, lView, templateFn, context) {
|
|
|
14242
14049
|
if (!isInCheckNoChangesPass) {
|
|
14243
14050
|
if (viewShouldHaveReactiveConsumer(tView)) {
|
|
14244
14051
|
currentConsumer = getOrBorrowReactiveLViewConsumer(lView);
|
|
14245
|
-
prevConsumer = consumerBeforeComputation
|
|
14052
|
+
prevConsumer = consumerBeforeComputation(currentConsumer);
|
|
14246
14053
|
}
|
|
14247
|
-
else if (getActiveConsumer
|
|
14054
|
+
else if (getActiveConsumer() === null) {
|
|
14248
14055
|
// If the current view should not have a reactive consumer but we don't have an active consumer,
|
|
14249
14056
|
// we still need to create a temporary consumer to track any signal reads in this template.
|
|
14250
14057
|
// This is a rare case that can happen with `viewContainerRef.createEmbeddedView(...).detectChanges()`.
|
|
@@ -14253,10 +14060,10 @@ function refreshView(tView, lView, templateFn, context) {
|
|
|
14253
14060
|
// the temporary one.
|
|
14254
14061
|
returnConsumerToPool = false;
|
|
14255
14062
|
currentConsumer = getOrCreateTemporaryConsumer(lView);
|
|
14256
|
-
prevConsumer = consumerBeforeComputation
|
|
14063
|
+
prevConsumer = consumerBeforeComputation(currentConsumer);
|
|
14257
14064
|
}
|
|
14258
14065
|
else if (lView[REACTIVE_TEMPLATE_CONSUMER]) {
|
|
14259
|
-
consumerDestroy
|
|
14066
|
+
consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);
|
|
14260
14067
|
lView[REACTIVE_TEMPLATE_CONSUMER] = null;
|
|
14261
14068
|
}
|
|
14262
14069
|
}
|
|
@@ -14385,7 +14192,7 @@ function refreshView(tView, lView, templateFn, context) {
|
|
|
14385
14192
|
}
|
|
14386
14193
|
finally {
|
|
14387
14194
|
if (currentConsumer !== null) {
|
|
14388
|
-
consumerAfterComputation
|
|
14195
|
+
consumerAfterComputation(currentConsumer, prevConsumer);
|
|
14389
14196
|
if (returnConsumerToPool) {
|
|
14390
14197
|
maybeReturnReactiveLViewConsumer(currentConsumer);
|
|
14391
14198
|
}
|
|
@@ -14475,14 +14282,14 @@ function detectChangesInView(lView, mode) {
|
|
|
14475
14282
|
// Always refresh views marked for refresh, regardless of mode.
|
|
14476
14283
|
shouldRefreshView ||= !!(flags & 1024 /* LViewFlags.RefreshView */);
|
|
14477
14284
|
// Refresh views when they have a dirty reactive consumer, regardless of mode.
|
|
14478
|
-
shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange
|
|
14285
|
+
shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange(consumer));
|
|
14479
14286
|
shouldRefreshView ||= !!(ngDevMode && isExhaustiveCheckNoChanges());
|
|
14480
14287
|
// Mark the Flags and `ReactiveNode` as not dirty before refreshing the component, so that they
|
|
14481
14288
|
// can be re-dirtied during the refresh process.
|
|
14482
14289
|
if (consumer) {
|
|
14483
14290
|
consumer.dirty = false;
|
|
14484
14291
|
}
|
|
14485
|
-
lView[FLAGS] &=
|
|
14292
|
+
lView[FLAGS] &= -9217;
|
|
14486
14293
|
if (shouldRefreshView) {
|
|
14487
14294
|
refreshView(tView, lView, tView.template, lView[CONTEXT]);
|
|
14488
14295
|
}
|
|
@@ -14678,7 +14485,7 @@ function detachView(lContainer, removeIndex) {
|
|
|
14678
14485
|
viewToDetach[PARENT] = null;
|
|
14679
14486
|
viewToDetach[NEXT] = null;
|
|
14680
14487
|
// Unsets the attached flag
|
|
14681
|
-
viewToDetach[FLAGS] &=
|
|
14488
|
+
viewToDetach[FLAGS] &= -129 /* LViewFlags.Attached */;
|
|
14682
14489
|
}
|
|
14683
14490
|
return viewToDetach;
|
|
14684
14491
|
}
|
|
@@ -14760,7 +14567,7 @@ function trackMovedView(declarationContainer, lView) {
|
|
|
14760
14567
|
}
|
|
14761
14568
|
}
|
|
14762
14569
|
|
|
14763
|
-
|
|
14570
|
+
let ViewRef$1 = class ViewRef {
|
|
14764
14571
|
_lView;
|
|
14765
14572
|
_cdRefInjectingView;
|
|
14766
14573
|
notifyErrorHandler;
|
|
@@ -14925,7 +14732,7 @@ class ViewRef$1 {
|
|
|
14925
14732
|
* ```
|
|
14926
14733
|
*/
|
|
14927
14734
|
detach() {
|
|
14928
|
-
this._lView[FLAGS] &=
|
|
14735
|
+
this._lView[FLAGS] &= -129 /* LViewFlags.Attached */;
|
|
14929
14736
|
}
|
|
14930
14737
|
/**
|
|
14931
14738
|
* Re-attaches a view to the change detection tree.
|
|
@@ -15055,7 +14862,7 @@ class ViewRef$1 {
|
|
|
15055
14862
|
}
|
|
15056
14863
|
updateAncestorTraversalFlagsOnAttach(this._lView);
|
|
15057
14864
|
}
|
|
15058
|
-
}
|
|
14865
|
+
};
|
|
15059
14866
|
/**
|
|
15060
14867
|
* Reports whether the given view is considered dirty according to the different marking mechanisms.
|
|
15061
14868
|
*/
|
|
@@ -17040,8 +16847,8 @@ function findMatchingDehydratedView(lContainer, template) {
|
|
|
17040
16847
|
*
|
|
17041
16848
|
* @publicApi
|
|
17042
16849
|
*/
|
|
17043
|
-
|
|
17044
|
-
}
|
|
16850
|
+
let ComponentRef$1 = class ComponentRef {
|
|
16851
|
+
};
|
|
17045
16852
|
/**
|
|
17046
16853
|
* Base class for a factory that can create a component dynamically.
|
|
17047
16854
|
* Instantiate a factory for a given type of component with `resolveComponentFactory()`.
|
|
@@ -17052,8 +16859,8 @@ class ComponentRef$1 {
|
|
|
17052
16859
|
* @deprecated Angular no longer requires Component factories. Please use other APIs where
|
|
17053
16860
|
* Component class can be used directly.
|
|
17054
16861
|
*/
|
|
17055
|
-
|
|
17056
|
-
}
|
|
16862
|
+
let ComponentFactory$1 = class ComponentFactory {
|
|
16863
|
+
};
|
|
17057
16864
|
|
|
17058
16865
|
class _NullComponentFactoryResolver {
|
|
17059
16866
|
resolveComponentFactory(component) {
|
|
@@ -17075,9 +16882,9 @@ class _NullComponentFactoryResolver {
|
|
|
17075
16882
|
* @deprecated Angular no longer requires Component factories. Please use other APIs where
|
|
17076
16883
|
* Component class can be used directly.
|
|
17077
16884
|
*/
|
|
17078
|
-
|
|
16885
|
+
let ComponentFactoryResolver$1 = class ComponentFactoryResolver {
|
|
17079
16886
|
static NULL = new _NullComponentFactoryResolver();
|
|
17080
|
-
}
|
|
16887
|
+
};
|
|
17081
16888
|
|
|
17082
16889
|
/**
|
|
17083
16890
|
* Creates and initializes a custom renderer that implements the `Renderer2` base class.
|
|
@@ -17436,7 +17243,6 @@ function addSet(sourceSet, targetSet) {
|
|
|
17436
17243
|
}
|
|
17437
17244
|
/** The deps tracker to be used in the current Angular app in dev mode. */
|
|
17438
17245
|
const depsTracker = new DepsTracker();
|
|
17439
|
-
const TEST_ONLY = { DepsTracker };
|
|
17440
17246
|
|
|
17441
17247
|
/**
|
|
17442
17248
|
* Compute the static styling (class/style) from `TAttributes`.
|
|
@@ -18105,12 +17911,12 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
18105
17911
|
}
|
|
18106
17912
|
create(injector, projectableNodes, rootSelectorOrNode, environmentInjector) {
|
|
18107
17913
|
profiler(22 /* ProfilerEvent.DynamicComponentStart */);
|
|
18108
|
-
const prevConsumer = setActiveConsumer
|
|
17914
|
+
const prevConsumer = setActiveConsumer(null);
|
|
18109
17915
|
try {
|
|
18110
17916
|
const cmpDef = this.componentDef;
|
|
18111
17917
|
ngDevMode && verifyNotAnOrphanComponent(cmpDef);
|
|
18112
17918
|
const tAttributes = rootSelectorOrNode
|
|
18113
|
-
? ['ng-version', '19.2.
|
|
17919
|
+
? ['ng-version', '19.2.3']
|
|
18114
17920
|
: // Extract attributes and classes from the first selector only to match VE behavior.
|
|
18115
17921
|
extractAttrsAndClassesFromSelector(this.componentDef.selectors[0]);
|
|
18116
17922
|
// Create the root view. Uses empty TView and ContentTemplate.
|
|
@@ -18168,7 +17974,7 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
18168
17974
|
return new ComponentRef(this.componentType, rootLView);
|
|
18169
17975
|
}
|
|
18170
17976
|
finally {
|
|
18171
|
-
setActiveConsumer
|
|
17977
|
+
setActiveConsumer(prevConsumer);
|
|
18172
17978
|
}
|
|
18173
17979
|
}
|
|
18174
17980
|
}
|
|
@@ -19119,7 +18925,7 @@ function getQueryResults(lView, queryIndex) {
|
|
|
19119
18925
|
*/
|
|
19120
18926
|
function createQuerySignalFn(firstOnly, required, opts) {
|
|
19121
18927
|
let node;
|
|
19122
|
-
const signalFn = createComputed
|
|
18928
|
+
const signalFn = createComputed(() => {
|
|
19123
18929
|
// A dedicated signal that increments its value every time a query changes its dirty status. By
|
|
19124
18930
|
// using this signal we can implement a query as computed and avoid creation of a specialized
|
|
19125
18931
|
// reactive node type. Please note that a query gets marked dirty under the following
|
|
@@ -19133,7 +18939,7 @@ function createQuerySignalFn(firstOnly, required, opts) {
|
|
|
19133
18939
|
}
|
|
19134
18940
|
return value;
|
|
19135
18941
|
});
|
|
19136
|
-
node = signalFn[SIGNAL
|
|
18942
|
+
node = signalFn[SIGNAL];
|
|
19137
18943
|
node._dirtyCounter = signal(0);
|
|
19138
18944
|
node._flatValue = undefined;
|
|
19139
18945
|
if (ngDevMode) {
|
|
@@ -19152,7 +18958,7 @@ function createMultiResultQuerySignalFn(opts) {
|
|
|
19152
18958
|
return createQuerySignalFn(/* firstOnly */ false, /* required */ false, opts);
|
|
19153
18959
|
}
|
|
19154
18960
|
function bindQueryToSignal(target, queryIndex) {
|
|
19155
|
-
const node = target[SIGNAL
|
|
18961
|
+
const node = target[SIGNAL];
|
|
19156
18962
|
node._lView = getLView();
|
|
19157
18963
|
node._queryIndex = queryIndex;
|
|
19158
18964
|
node._queryList = loadQueryInternal(node._lView, queryIndex);
|
|
@@ -19325,16 +19131,16 @@ function createModelSignal(initialValue, opts) {
|
|
|
19325
19131
|
const emitterRef = new OutputEmitterRef();
|
|
19326
19132
|
node.value = initialValue;
|
|
19327
19133
|
function getter() {
|
|
19328
|
-
producerAccessed
|
|
19134
|
+
producerAccessed(node);
|
|
19329
19135
|
assertModelSet(node.value);
|
|
19330
19136
|
return node.value;
|
|
19331
19137
|
}
|
|
19332
|
-
getter[SIGNAL
|
|
19138
|
+
getter[SIGNAL] = node;
|
|
19333
19139
|
getter.asReadonly = signalAsReadonlyFn.bind(getter);
|
|
19334
19140
|
// TODO: Should we throw an error when updating a destroyed model?
|
|
19335
19141
|
getter.set = (newValue) => {
|
|
19336
19142
|
if (!node.equal(node.value, newValue)) {
|
|
19337
|
-
signalSetFn
|
|
19143
|
+
signalSetFn(node, newValue);
|
|
19338
19144
|
emitterRef.emit(newValue);
|
|
19339
19145
|
}
|
|
19340
19146
|
};
|
|
@@ -19644,9 +19450,6 @@ function registerNgModuleType(ngModuleType, id) {
|
|
|
19644
19450
|
assertSameOrNotExisting(id, existing, ngModuleType);
|
|
19645
19451
|
modules.set(id, ngModuleType);
|
|
19646
19452
|
}
|
|
19647
|
-
function clearModulesForTest() {
|
|
19648
|
-
modules.clear();
|
|
19649
|
-
}
|
|
19650
19453
|
function getRegisteredNgModuleType(id) {
|
|
19651
19454
|
return modules.get(id);
|
|
19652
19455
|
}
|
|
@@ -19702,8 +19505,8 @@ function ɵɵvalidateIframeAttribute(attrValue, tagName, attrName) {
|
|
|
19702
19505
|
*
|
|
19703
19506
|
* @publicApi
|
|
19704
19507
|
*/
|
|
19705
|
-
|
|
19706
|
-
}
|
|
19508
|
+
let NgModuleRef$1 = class NgModuleRef {
|
|
19509
|
+
};
|
|
19707
19510
|
/**
|
|
19708
19511
|
* @publicApi
|
|
19709
19512
|
*
|
|
@@ -19714,8 +19517,8 @@ class NgModuleRef$1 {
|
|
|
19714
19517
|
* [createNgModule](api/core/createNgModule)), consider switching to those APIs instead of
|
|
19715
19518
|
* using factory-based ones.
|
|
19716
19519
|
*/
|
|
19717
|
-
|
|
19718
|
-
}
|
|
19520
|
+
let NgModuleFactory$1 = class NgModuleFactory {
|
|
19521
|
+
};
|
|
19719
19522
|
|
|
19720
19523
|
/**
|
|
19721
19524
|
* Returns a new NgModuleRef instance based on the NgModule class and parent injector provided.
|
|
@@ -20657,9 +20460,6 @@ function validateMappings(bindingType, def, hostDirectiveBindings) {
|
|
|
20657
20460
|
}
|
|
20658
20461
|
}
|
|
20659
20462
|
|
|
20660
|
-
function isIterable(obj) {
|
|
20661
|
-
return obj !== null && typeof obj === 'object' && obj[Symbol.iterator] !== undefined;
|
|
20662
|
-
}
|
|
20663
20463
|
function isListLikeIterable(obj) {
|
|
20664
20464
|
if (!isJsObject(obj))
|
|
20665
20465
|
return false;
|
|
@@ -20893,7 +20693,7 @@ function locateOrCreateContainerAnchorImpl(tView, lView, tNode, index) {
|
|
|
20893
20693
|
lastNodeWasCreated(isNodeCreationMode);
|
|
20894
20694
|
// Regular creation mode.
|
|
20895
20695
|
if (isNodeCreationMode) {
|
|
20896
|
-
return createContainerAnchorImpl(tView, lView
|
|
20696
|
+
return createContainerAnchorImpl(tView, lView);
|
|
20897
20697
|
}
|
|
20898
20698
|
const ssrId = hydrationInfo.data[TEMPLATES]?.[index] ?? null;
|
|
20899
20699
|
// Apply `ssrId` value to the underlying TView if it was not previously set.
|
|
@@ -21044,8 +20844,9 @@ function onTimer(delay) {
|
|
|
21044
20844
|
*/
|
|
21045
20845
|
function scheduleTimerTrigger(delay, callback, injector) {
|
|
21046
20846
|
const scheduler = injector.get(TimerScheduler);
|
|
20847
|
+
const ngZone = injector.get(NgZone);
|
|
21047
20848
|
const cleanupFn = () => scheduler.remove(callback);
|
|
21048
|
-
scheduler.add(delay, callback);
|
|
20849
|
+
scheduler.add(delay, callback, ngZone);
|
|
21049
20850
|
return cleanupFn;
|
|
21050
20851
|
}
|
|
21051
20852
|
/**
|
|
@@ -21071,10 +20872,10 @@ class TimerScheduler {
|
|
|
21071
20872
|
// the current callback invocation. The shape of this list is the same
|
|
21072
20873
|
// as the shape of the `current` list.
|
|
21073
20874
|
deferred = [];
|
|
21074
|
-
add(delay, callback) {
|
|
20875
|
+
add(delay, callback, ngZone) {
|
|
21075
20876
|
const target = this.executingCallbacks ? this.deferred : this.current;
|
|
21076
20877
|
this.addToQueue(target, Date.now() + delay, callback);
|
|
21077
|
-
this.scheduleTimer();
|
|
20878
|
+
this.scheduleTimer(ngZone);
|
|
21078
20879
|
}
|
|
21079
20880
|
remove(callback) {
|
|
21080
20881
|
const { current, deferred } = this;
|
|
@@ -21120,7 +20921,7 @@ class TimerScheduler {
|
|
|
21120
20921
|
}
|
|
21121
20922
|
return index;
|
|
21122
20923
|
}
|
|
21123
|
-
scheduleTimer() {
|
|
20924
|
+
scheduleTimer(ngZone) {
|
|
21124
20925
|
const callback = () => {
|
|
21125
20926
|
this.clearTimeout();
|
|
21126
20927
|
this.executingCallbacks = true;
|
|
@@ -21170,7 +20971,7 @@ class TimerScheduler {
|
|
|
21170
20971
|
}
|
|
21171
20972
|
this.deferred.length = 0;
|
|
21172
20973
|
}
|
|
21173
|
-
this.scheduleTimer();
|
|
20974
|
+
this.scheduleTimer(ngZone);
|
|
21174
20975
|
};
|
|
21175
20976
|
// Avoid running timer callbacks more than once per
|
|
21176
20977
|
// average frame duration. This is needed for better
|
|
@@ -21193,7 +20994,9 @@ class TimerScheduler {
|
|
|
21193
20994
|
this.clearTimeout();
|
|
21194
20995
|
const timeout = Math.max(invokeAt - now, FRAME_DURATION_MS);
|
|
21195
20996
|
this.invokeTimerAt = invokeAt;
|
|
21196
|
-
this.timeoutId =
|
|
20997
|
+
this.timeoutId = ngZone.runOutsideAngular(() => {
|
|
20998
|
+
return setTimeout(() => ngZone.run(callback), timeout);
|
|
20999
|
+
});
|
|
21197
21000
|
}
|
|
21198
21001
|
}
|
|
21199
21002
|
}
|
|
@@ -21633,26 +21436,6 @@ function setClassMetadata(type, decorators, ctorParameters, propDecorators) {
|
|
|
21633
21436
|
});
|
|
21634
21437
|
}
|
|
21635
21438
|
|
|
21636
|
-
/*
|
|
21637
|
-
* This file exists to support compilation of @angular/core in Ivy mode.
|
|
21638
|
-
*
|
|
21639
|
-
* When the Angular compiler processes a compilation unit, it normally writes imports to
|
|
21640
|
-
* @angular/core. When compiling the core package itself this strategy isn't usable. Instead, the
|
|
21641
|
-
* compiler writes imports to this file.
|
|
21642
|
-
*
|
|
21643
|
-
* Only a subset of such imports are supported - core is not allowed to declare components or pipes.
|
|
21644
|
-
* A check in ngtsc's `R3SymbolsImportRewriter` validates this condition. The rewriter is only used
|
|
21645
|
-
* when compiling @angular/core and is responsible for translating an external name (prefixed with
|
|
21646
|
-
* ɵ) to the internal symbol name as exported below.
|
|
21647
|
-
*
|
|
21648
|
-
* The below symbols are used for @Injectable and @NgModule compilation.
|
|
21649
|
-
*/
|
|
21650
|
-
/**
|
|
21651
|
-
* The existence of this constant (in this particular file) informs the Angular compiler that the
|
|
21652
|
-
* current program is actually @angular/core, which needs to be compiled specially.
|
|
21653
|
-
*/
|
|
21654
|
-
const ITS_JUST_ANGULAR = true;
|
|
21655
|
-
|
|
21656
21439
|
class Console {
|
|
21657
21440
|
log(message) {
|
|
21658
21441
|
// tslint:disable-next-line:no-console
|
|
@@ -22720,7 +22503,7 @@ function extractEffectsFromInjector(injector) {
|
|
|
22720
22503
|
}
|
|
22721
22504
|
const resolverToEffects = getFrameworkDIDebugData().resolverToEffects;
|
|
22722
22505
|
const effects = resolverToEffects.get(diResolver) ?? [];
|
|
22723
|
-
return effects.map((effect) => effect[SIGNAL
|
|
22506
|
+
return effects.map((effect) => effect[SIGNAL]);
|
|
22724
22507
|
}
|
|
22725
22508
|
function extractSignalNodesAndEdgesFromRoots(nodes, signalDependenciesMap = new Map()) {
|
|
22726
22509
|
for (const node of nodes) {
|
|
@@ -23449,7 +23232,7 @@ function publishDefaultGlobalUtils() {
|
|
|
23449
23232
|
* Sets the error for an invalid write to a signal to be an Angular `RuntimeError`.
|
|
23450
23233
|
*/
|
|
23451
23234
|
function publishSignalConfiguration() {
|
|
23452
|
-
setThrowInvalidWriteToSignalError
|
|
23235
|
+
setThrowInvalidWriteToSignalError(() => {
|
|
23453
23236
|
throw new RuntimeError(600 /* RuntimeErrorCode.SIGNAL_WRITE_FROM_ILLEGAL_CONTEXT */, ngDevMode && 'Writing to signals is not allowed in a `computed`.');
|
|
23454
23237
|
});
|
|
23455
23238
|
}
|
|
@@ -23698,12 +23481,15 @@ class ApplicationRef {
|
|
|
23698
23481
|
const isComponentFactory = componentOrFactory instanceof ComponentFactory$1;
|
|
23699
23482
|
const initStatus = this._injector.get(ApplicationInitStatus);
|
|
23700
23483
|
if (!initStatus.done) {
|
|
23701
|
-
|
|
23702
|
-
|
|
23703
|
-
|
|
23704
|
-
|
|
23705
|
-
|
|
23706
|
-
|
|
23484
|
+
let errorMessage = '';
|
|
23485
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
23486
|
+
const standalone = !isComponentFactory && isStandalone(componentOrFactory);
|
|
23487
|
+
errorMessage =
|
|
23488
|
+
'Cannot bootstrap as there are still asynchronous initializers running.' +
|
|
23489
|
+
(standalone
|
|
23490
|
+
? ''
|
|
23491
|
+
: ' Bootstrap components in the `ngDoBootstrap` method of the root module.');
|
|
23492
|
+
}
|
|
23707
23493
|
throw new RuntimeError(405 /* RuntimeErrorCode.ASYNC_INITIALIZERS_STILL_RUNNING */, errorMessage);
|
|
23708
23494
|
}
|
|
23709
23495
|
let componentFactory;
|
|
@@ -23771,7 +23557,7 @@ class ApplicationRef {
|
|
|
23771
23557
|
if (this._runningTick) {
|
|
23772
23558
|
throw new RuntimeError(101 /* RuntimeErrorCode.RECURSIVE_APPLICATION_REF_TICK */, ngDevMode && 'ApplicationRef.tick is called recursively');
|
|
23773
23559
|
}
|
|
23774
|
-
const prevConsumer = setActiveConsumer
|
|
23560
|
+
const prevConsumer = setActiveConsumer(null);
|
|
23775
23561
|
try {
|
|
23776
23562
|
this._runningTick = true;
|
|
23777
23563
|
this.synchronize();
|
|
@@ -23789,7 +23575,7 @@ class ApplicationRef {
|
|
|
23789
23575
|
this._runningTick = false;
|
|
23790
23576
|
this.tracingSnapshot?.dispose();
|
|
23791
23577
|
this.tracingSnapshot = null;
|
|
23792
|
-
setActiveConsumer
|
|
23578
|
+
setActiveConsumer(prevConsumer);
|
|
23793
23579
|
this.afterTick.next();
|
|
23794
23580
|
profiler(13 /* ProfilerEvent.ChangeDetectionEnd */);
|
|
23795
23581
|
}
|
|
@@ -23821,7 +23607,7 @@ class ApplicationRef {
|
|
|
23821
23607
|
synchronizeOnce() {
|
|
23822
23608
|
// First, process any dirty root effects.
|
|
23823
23609
|
if (this.dirtyFlags & 16 /* ApplicationRefDirtyFlags.RootEffects */) {
|
|
23824
|
-
this.dirtyFlags &=
|
|
23610
|
+
this.dirtyFlags &= -17 /* ApplicationRefDirtyFlags.RootEffects */;
|
|
23825
23611
|
this.rootEffectScheduler.flush();
|
|
23826
23612
|
}
|
|
23827
23613
|
// First check dirty views, if there are any.
|
|
@@ -23831,7 +23617,7 @@ class ApplicationRef {
|
|
|
23831
23617
|
// `ApplicationRef.tick()` and the `NgZone` integration.
|
|
23832
23618
|
const useGlobalCheck = Boolean(this.dirtyFlags & 1 /* ApplicationRefDirtyFlags.ViewTreeGlobal */);
|
|
23833
23619
|
// Clear the view-related dirty flags.
|
|
23834
|
-
this.dirtyFlags &=
|
|
23620
|
+
this.dirtyFlags &= -8 /* ApplicationRefDirtyFlags.ViewTreeAny */;
|
|
23835
23621
|
// Set the AfterRender bit, as we're checking views and will need to run afterRender hooks.
|
|
23836
23622
|
this.dirtyFlags |= 8 /* ApplicationRefDirtyFlags.AfterRender */;
|
|
23837
23623
|
// Check all potentially dirty views.
|
|
@@ -23841,7 +23627,7 @@ class ApplicationRef {
|
|
|
23841
23627
|
// If `markForCheck()` was called during view checking, it will have set the `ViewTreeCheck`
|
|
23842
23628
|
// flag. We clear the flag here because, for backwards compatibility, `markForCheck()`
|
|
23843
23629
|
// during view checking doesn't cause the view to be re-checked.
|
|
23844
|
-
this.dirtyFlags &=
|
|
23630
|
+
this.dirtyFlags &= -5 /* ApplicationRefDirtyFlags.ViewTreeCheck */;
|
|
23845
23631
|
// Check if any views are still dirty after checking and we need to loop back.
|
|
23846
23632
|
this.syncDirtyFlagsWithViews();
|
|
23847
23633
|
if (this.dirtyFlags &
|
|
@@ -23859,7 +23645,7 @@ class ApplicationRef {
|
|
|
23859
23645
|
}
|
|
23860
23646
|
// Even if there were no dirty views, afterRender hooks might still be dirty.
|
|
23861
23647
|
if (this.dirtyFlags & 8 /* ApplicationRefDirtyFlags.AfterRender */) {
|
|
23862
|
-
this.dirtyFlags &=
|
|
23648
|
+
this.dirtyFlags &= -9 /* ApplicationRefDirtyFlags.AfterRender */;
|
|
23863
23649
|
this.afterRenderManager.execute();
|
|
23864
23650
|
// afterRender hooks might influence dirty flags.
|
|
23865
23651
|
}
|
|
@@ -23888,7 +23674,7 @@ class ApplicationRef {
|
|
|
23888
23674
|
else {
|
|
23889
23675
|
// Even though this flag may be set, none of _our_ views require traversal, and so the
|
|
23890
23676
|
// `ApplicationRef` doesn't require any repeated checking.
|
|
23891
|
-
this.dirtyFlags &=
|
|
23677
|
+
this.dirtyFlags &= -8 /* ApplicationRefDirtyFlags.ViewTreeAny */;
|
|
23892
23678
|
}
|
|
23893
23679
|
}
|
|
23894
23680
|
/**
|
|
@@ -24234,8 +24020,8 @@ function triggerDeferBlock(triggerType, lView, tNode) {
|
|
|
24234
24020
|
}
|
|
24235
24021
|
}
|
|
24236
24022
|
/**
|
|
24237
|
-
* The core mechanism for incremental hydration. This triggers
|
|
24238
|
-
* hydration for all the blocks in the tree that need to be hydrated
|
|
24023
|
+
* The core mechanism for incremental hydration. This triggers or
|
|
24024
|
+
* queues hydration for all the blocks in the tree that need to be hydrated
|
|
24239
24025
|
* and keeps track of all those blocks that were hydrated along the way.
|
|
24240
24026
|
*
|
|
24241
24027
|
* Note: the `replayQueuedEventsFn` is only provided when hydration is invoked
|
|
@@ -24250,26 +24036,57 @@ async function triggerHydrationFromBlockName(injector, blockName, replayQueuedEv
|
|
|
24250
24036
|
if (blocksBeingHydrated.has(blockName)) {
|
|
24251
24037
|
return;
|
|
24252
24038
|
}
|
|
24253
|
-
// The parent promise is the possible case of a list of defer blocks already being queued
|
|
24254
|
-
// If it is queued, it'll exist; otherwise it'll be null. The hydration queue will contain all
|
|
24255
|
-
// elements that need to be hydrated, sans any that have promises already
|
|
24256
|
-
const { parentBlockPromise, hydrationQueue } = getParentBlockHydrationQueue(blockName, injector);
|
|
24257
|
-
// The hydrating map in the registry prevents re-triggering hydration for a block that's already in
|
|
24258
|
-
// the hydration queue. Here we generate promises for each of the blocks about to be hydrated
|
|
24259
|
-
populateHydratingStateForQueue(dehydratedBlockRegistry, hydrationQueue);
|
|
24260
24039
|
// Trigger resource loading and hydration for the blocks in the queue in the order of highest block
|
|
24261
24040
|
// to lowest block. Once a block has finished resource loading, after next render fires after hydration
|
|
24262
24041
|
// finishes. The new block will have its defer instruction called and will be in the registry.
|
|
24263
24042
|
// Due to timing related to potential nested control flow, this has to be scheduled after the next render.
|
|
24264
|
-
|
|
24265
|
-
|
|
24266
|
-
|
|
24267
|
-
//
|
|
24268
|
-
//
|
|
24269
|
-
|
|
24043
|
+
const { parentBlockPromise, hydrationQueue } = getParentBlockHydrationQueue(blockName, injector);
|
|
24044
|
+
if (hydrationQueue.length === 0)
|
|
24045
|
+
return;
|
|
24046
|
+
// It's possible that the hydrationQueue topmost item is actually in the process of hydrating and has
|
|
24047
|
+
// a promise already. In that case, we don't want to destroy that promise and queue it again.
|
|
24048
|
+
if (parentBlockPromise !== null) {
|
|
24049
|
+
hydrationQueue.shift();
|
|
24050
|
+
}
|
|
24051
|
+
// The hydrating map in the registry prevents re-triggering hydration for a block that's already in
|
|
24052
|
+
// the hydration queue. Here we generate promises for each of the blocks about to be hydrated
|
|
24053
|
+
populateHydratingStateForQueue(dehydratedBlockRegistry, hydrationQueue);
|
|
24054
|
+
// We await this after populating the hydration state so we can prevent re-triggering hydration for
|
|
24055
|
+
// the same blocks while this promise is being awaited.
|
|
24270
24056
|
if (parentBlockPromise !== null) {
|
|
24271
24057
|
await parentBlockPromise;
|
|
24272
24058
|
}
|
|
24059
|
+
const topmostParentBlock = hydrationQueue[0];
|
|
24060
|
+
if (dehydratedBlockRegistry.has(topmostParentBlock)) {
|
|
24061
|
+
// the topmost parent block is already in the registry and we can proceed
|
|
24062
|
+
// with hydration.
|
|
24063
|
+
await triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn);
|
|
24064
|
+
}
|
|
24065
|
+
else {
|
|
24066
|
+
// the topmost parent block is not yet in the registry, which may mean
|
|
24067
|
+
// a lazy loaded route, a control flow branch was taken, a route has
|
|
24068
|
+
// been navigated, etc. So we need to queue up the hydration process
|
|
24069
|
+
// so that it can be finished after the top block has had its defer
|
|
24070
|
+
// instruction executed.
|
|
24071
|
+
dehydratedBlockRegistry.awaitParentBlock(topmostParentBlock, async () => await triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn));
|
|
24072
|
+
}
|
|
24073
|
+
}
|
|
24074
|
+
/**
|
|
24075
|
+
* The core mechanism for incremental hydration. This triggers
|
|
24076
|
+
* hydration for all the blocks in the tree that need to be hydrated
|
|
24077
|
+
* and keeps track of all those blocks that were hydrated along the way.
|
|
24078
|
+
*
|
|
24079
|
+
* Note: the `replayQueuedEventsFn` is only provided when hydration is invoked
|
|
24080
|
+
* as a result of an event replay (via JsAction). When hydration is invoked from
|
|
24081
|
+
* an instruction set (e.g. `deferOnImmediate`) - there is no need to replay any
|
|
24082
|
+
* events.
|
|
24083
|
+
*/
|
|
24084
|
+
async function triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn) {
|
|
24085
|
+
const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);
|
|
24086
|
+
const blocksBeingHydrated = dehydratedBlockRegistry.hydrating;
|
|
24087
|
+
// Indicate that we have some pending async work.
|
|
24088
|
+
const pendingTasks = injector.get(PendingTasksInternal);
|
|
24089
|
+
const taskId = pendingTasks.add();
|
|
24273
24090
|
// Actually do the triggering and hydration of the queue of blocks
|
|
24274
24091
|
for (let blockQueueIdx = 0; blockQueueIdx < hydrationQueue.length; blockQueueIdx++) {
|
|
24275
24092
|
const dehydratedBlockId = hydrationQueue[blockQueueIdx];
|
|
@@ -24302,8 +24119,9 @@ async function triggerHydrationFromBlockName(injector, blockName, replayQueuedEv
|
|
|
24302
24119
|
break;
|
|
24303
24120
|
}
|
|
24304
24121
|
}
|
|
24305
|
-
|
|
24306
|
-
|
|
24122
|
+
const lastBlockName = hydrationQueue[hydrationQueue.length - 1];
|
|
24123
|
+
// Await hydration completion for the last block.
|
|
24124
|
+
await blocksBeingHydrated.get(lastBlockName)?.promise;
|
|
24307
24125
|
// All async work is done, remove the taskId from the registry.
|
|
24308
24126
|
pendingTasks.remove(taskId);
|
|
24309
24127
|
// Replay any queued events, if any exist and the replay operation was requested.
|
|
@@ -24311,7 +24129,7 @@ async function triggerHydrationFromBlockName(injector, blockName, replayQueuedEv
|
|
|
24311
24129
|
replayQueuedEventsFn(hydrationQueue);
|
|
24312
24130
|
}
|
|
24313
24131
|
// Cleanup after hydration of all affected defer blocks.
|
|
24314
|
-
cleanupHydratedDeferBlocks(dehydratedBlockRegistry.get(
|
|
24132
|
+
cleanupHydratedDeferBlocks(dehydratedBlockRegistry.get(lastBlockName), hydrationQueue, dehydratedBlockRegistry, injector.get(ApplicationRef));
|
|
24315
24133
|
}
|
|
24316
24134
|
function deferBlockHasErrored(deferBlock) {
|
|
24317
24135
|
return (getLDeferBlockDetails(deferBlock.lView, deferBlock.tNode)[DEFER_BLOCK_STATE] ===
|
|
@@ -24490,7 +24308,7 @@ function setTimerTriggers(injector, elementTriggers) {
|
|
|
24490
24308
|
function setImmediateTriggers(injector, elementTriggers) {
|
|
24491
24309
|
for (const elementTrigger of elementTriggers) {
|
|
24492
24310
|
// Note: we intentionally avoid awaiting each call and instead kick off
|
|
24493
|
-
//
|
|
24311
|
+
// the hydration process simultaneously for all defer blocks with this trigger;
|
|
24494
24312
|
triggerHydrationFromBlockName(injector, elementTrigger.blockName);
|
|
24495
24313
|
}
|
|
24496
24314
|
}
|
|
@@ -24600,7 +24418,7 @@ function ɵɵdeferWhen(rawValue) {
|
|
|
24600
24418
|
return;
|
|
24601
24419
|
const bindingIndex = nextBindingIndex();
|
|
24602
24420
|
if (bindingUpdated(lView, bindingIndex, rawValue)) {
|
|
24603
|
-
const prevConsumer = setActiveConsumer
|
|
24421
|
+
const prevConsumer = setActiveConsumer(null);
|
|
24604
24422
|
try {
|
|
24605
24423
|
const value = Boolean(rawValue); // handle truthy or falsy values
|
|
24606
24424
|
const lDetails = getLDeferBlockDetails(lView, tNode);
|
|
@@ -24616,7 +24434,7 @@ function ɵɵdeferWhen(rawValue) {
|
|
|
24616
24434
|
}
|
|
24617
24435
|
}
|
|
24618
24436
|
finally {
|
|
24619
|
-
setActiveConsumer
|
|
24437
|
+
setActiveConsumer(prevConsumer);
|
|
24620
24438
|
}
|
|
24621
24439
|
}
|
|
24622
24440
|
}
|
|
@@ -24634,7 +24452,7 @@ function ɵɵdeferPrefetchWhen(rawValue) {
|
|
|
24634
24452
|
return;
|
|
24635
24453
|
const bindingIndex = nextBindingIndex();
|
|
24636
24454
|
if (bindingUpdated(lView, bindingIndex, rawValue)) {
|
|
24637
|
-
const prevConsumer = setActiveConsumer
|
|
24455
|
+
const prevConsumer = setActiveConsumer(null);
|
|
24638
24456
|
try {
|
|
24639
24457
|
const value = Boolean(rawValue); // handle truthy or falsy values
|
|
24640
24458
|
const tView = lView[TVIEW];
|
|
@@ -24646,7 +24464,7 @@ function ɵɵdeferPrefetchWhen(rawValue) {
|
|
|
24646
24464
|
}
|
|
24647
24465
|
}
|
|
24648
24466
|
finally {
|
|
24649
|
-
setActiveConsumer
|
|
24467
|
+
setActiveConsumer(prevConsumer);
|
|
24650
24468
|
}
|
|
24651
24469
|
}
|
|
24652
24470
|
}
|
|
@@ -24675,7 +24493,7 @@ function ɵɵdeferHydrateWhen(rawValue) {
|
|
|
24675
24493
|
}
|
|
24676
24494
|
else {
|
|
24677
24495
|
const injector = lView[INJECTOR];
|
|
24678
|
-
const prevConsumer = setActiveConsumer
|
|
24496
|
+
const prevConsumer = setActiveConsumer(null);
|
|
24679
24497
|
try {
|
|
24680
24498
|
const value = Boolean(rawValue); // handle truthy or falsy values
|
|
24681
24499
|
if (value === true) {
|
|
@@ -24689,7 +24507,7 @@ function ɵɵdeferHydrateWhen(rawValue) {
|
|
|
24689
24507
|
}
|
|
24690
24508
|
}
|
|
24691
24509
|
finally {
|
|
24692
|
-
setActiveConsumer
|
|
24510
|
+
setActiveConsumer(prevConsumer);
|
|
24693
24511
|
}
|
|
24694
24512
|
}
|
|
24695
24513
|
}
|
|
@@ -24739,7 +24557,7 @@ function ɵɵdeferPrefetchOnIdle() {
|
|
|
24739
24557
|
}
|
|
24740
24558
|
if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
|
|
24741
24559
|
return;
|
|
24742
|
-
scheduleDelayedPrefetching(onIdle
|
|
24560
|
+
scheduleDelayedPrefetching(onIdle);
|
|
24743
24561
|
}
|
|
24744
24562
|
/**
|
|
24745
24563
|
* Sets up logic to handle the `on idle` deferred trigger.
|
|
@@ -24855,7 +24673,7 @@ function ɵɵdeferPrefetchOnTimer(delay) {
|
|
|
24855
24673
|
}
|
|
24856
24674
|
if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
|
|
24857
24675
|
return;
|
|
24858
|
-
scheduleDelayedPrefetching(onTimer(delay)
|
|
24676
|
+
scheduleDelayedPrefetching(onTimer(delay));
|
|
24859
24677
|
}
|
|
24860
24678
|
/**
|
|
24861
24679
|
* Creates runtime data structures for the `on timer` hydrate trigger.
|
|
@@ -25673,7 +25491,7 @@ function getTStylingRangePrevDuplicate(tStylingRange) {
|
|
|
25673
25491
|
function setTStylingRangePrev(tStylingRange, previous) {
|
|
25674
25492
|
ngDevMode && assertNumber(tStylingRange, 'expected number');
|
|
25675
25493
|
ngDevMode && assertNumberInRange(previous, 0, 32767 /* StylingRange.UNSIGNED_MASK */);
|
|
25676
|
-
return ((tStylingRange &
|
|
25494
|
+
return ((tStylingRange & 131071 /* StylingRange.PREV_MASK */) |
|
|
25677
25495
|
(previous << 17 /* StylingRange.PREV_SHIFT */));
|
|
25678
25496
|
}
|
|
25679
25497
|
function setTStylingRangePrevDuplicate(tStylingRange) {
|
|
@@ -25687,7 +25505,7 @@ function getTStylingRangeNext(tStylingRange) {
|
|
|
25687
25505
|
function setTStylingRangeNext(tStylingRange, next) {
|
|
25688
25506
|
ngDevMode && assertNumber(tStylingRange, 'expected number');
|
|
25689
25507
|
ngDevMode && assertNumberInRange(next, 0, 32767 /* StylingRange.UNSIGNED_MASK */);
|
|
25690
|
-
return ((tStylingRange &
|
|
25508
|
+
return ((tStylingRange & -131069 /* StylingRange.NEXT_MASK */) | //
|
|
25691
25509
|
(next << 2 /* StylingRange.NEXT_SHIFT */));
|
|
25692
25510
|
}
|
|
25693
25511
|
function getTStylingRangeNextDuplicate(tStylingRange) {
|
|
@@ -25698,166 +25516,7 @@ function setTStylingRangeNextDuplicate(tStylingRange) {
|
|
|
25698
25516
|
ngDevMode && assertNumber(tStylingRange, 'expected number');
|
|
25699
25517
|
return (tStylingRange | 1 /* StylingRange.NEXT_DUPLICATE */);
|
|
25700
25518
|
}
|
|
25701
|
-
function getTStylingRangeTail(tStylingRange) {
|
|
25702
|
-
ngDevMode && assertNumber(tStylingRange, 'expected number');
|
|
25703
|
-
const next = getTStylingRangeNext(tStylingRange);
|
|
25704
|
-
return next === 0 ? getTStylingRangePrev(tStylingRange) : next;
|
|
25705
|
-
}
|
|
25706
25519
|
|
|
25707
|
-
/**
|
|
25708
|
-
* NOTE: The word `styling` is used interchangeably as style or class styling.
|
|
25709
|
-
*
|
|
25710
|
-
* This file contains code to link styling instructions together so that they can be replayed in
|
|
25711
|
-
* priority order. The file exists because Ivy styling instruction execution order does not match
|
|
25712
|
-
* that of the priority order. The purpose of this code is to create a linked list so that the
|
|
25713
|
-
* instructions can be traversed in priority order when computing the styles.
|
|
25714
|
-
*
|
|
25715
|
-
* Assume we are dealing with the following code:
|
|
25716
|
-
* ```angular-ts
|
|
25717
|
-
* @Component({
|
|
25718
|
-
* template: `
|
|
25719
|
-
* <my-cmp [style]=" {color: '#001'} "
|
|
25720
|
-
* [style.color]=" #002 "
|
|
25721
|
-
* dir-style-color-1
|
|
25722
|
-
* dir-style-color-2> `
|
|
25723
|
-
* })
|
|
25724
|
-
* class ExampleComponent {
|
|
25725
|
-
* static ngComp = ... {
|
|
25726
|
-
* ...
|
|
25727
|
-
* // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
|
|
25728
|
-
* ɵɵstyleMap({color: '#001'});
|
|
25729
|
-
* ɵɵstyleProp('color', '#002');
|
|
25730
|
-
* ...
|
|
25731
|
-
* }
|
|
25732
|
-
* }
|
|
25733
|
-
*
|
|
25734
|
-
* @Directive({
|
|
25735
|
-
* selector: `[dir-style-color-1]',
|
|
25736
|
-
* })
|
|
25737
|
-
* class Style1Directive {
|
|
25738
|
-
* @HostBinding('style') style = {color: '#005'};
|
|
25739
|
-
* @HostBinding('style.color') color = '#006';
|
|
25740
|
-
*
|
|
25741
|
-
* static ngDir = ... {
|
|
25742
|
-
* ...
|
|
25743
|
-
* // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
|
|
25744
|
-
* ɵɵstyleMap({color: '#005'});
|
|
25745
|
-
* ɵɵstyleProp('color', '#006');
|
|
25746
|
-
* ...
|
|
25747
|
-
* }
|
|
25748
|
-
* }
|
|
25749
|
-
*
|
|
25750
|
-
* @Directive({
|
|
25751
|
-
* selector: `[dir-style-color-2]',
|
|
25752
|
-
* })
|
|
25753
|
-
* class Style2Directive {
|
|
25754
|
-
* @HostBinding('style') style = {color: '#007'};
|
|
25755
|
-
* @HostBinding('style.color') color = '#008';
|
|
25756
|
-
*
|
|
25757
|
-
* static ngDir = ... {
|
|
25758
|
-
* ...
|
|
25759
|
-
* // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
|
|
25760
|
-
* ɵɵstyleMap({color: '#007'});
|
|
25761
|
-
* ɵɵstyleProp('color', '#008');
|
|
25762
|
-
* ...
|
|
25763
|
-
* }
|
|
25764
|
-
* }
|
|
25765
|
-
*
|
|
25766
|
-
* @Directive({
|
|
25767
|
-
* selector: `my-cmp',
|
|
25768
|
-
* })
|
|
25769
|
-
* class MyComponent {
|
|
25770
|
-
* @HostBinding('style') style = {color: '#003'};
|
|
25771
|
-
* @HostBinding('style.color') color = '#004';
|
|
25772
|
-
*
|
|
25773
|
-
* static ngComp = ... {
|
|
25774
|
-
* ...
|
|
25775
|
-
* // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
|
|
25776
|
-
* ɵɵstyleMap({color: '#003'});
|
|
25777
|
-
* ɵɵstyleProp('color', '#004');
|
|
25778
|
-
* ...
|
|
25779
|
-
* }
|
|
25780
|
-
* }
|
|
25781
|
-
* ```
|
|
25782
|
-
*
|
|
25783
|
-
* The Order of instruction execution is:
|
|
25784
|
-
*
|
|
25785
|
-
* NOTE: the comment binding location is for illustrative purposes only.
|
|
25786
|
-
*
|
|
25787
|
-
* ```ts
|
|
25788
|
-
* // Template: (ExampleComponent)
|
|
25789
|
-
* ɵɵstyleMap({color: '#001'}); // Binding index: 10
|
|
25790
|
-
* ɵɵstyleProp('color', '#002'); // Binding index: 12
|
|
25791
|
-
* // MyComponent
|
|
25792
|
-
* ɵɵstyleMap({color: '#003'}); // Binding index: 20
|
|
25793
|
-
* ɵɵstyleProp('color', '#004'); // Binding index: 22
|
|
25794
|
-
* // Style1Directive
|
|
25795
|
-
* ɵɵstyleMap({color: '#005'}); // Binding index: 24
|
|
25796
|
-
* ɵɵstyleProp('color', '#006'); // Binding index: 26
|
|
25797
|
-
* // Style2Directive
|
|
25798
|
-
* ɵɵstyleMap({color: '#007'}); // Binding index: 28
|
|
25799
|
-
* ɵɵstyleProp('color', '#008'); // Binding index: 30
|
|
25800
|
-
* ```
|
|
25801
|
-
*
|
|
25802
|
-
* The correct priority order of concatenation is:
|
|
25803
|
-
*
|
|
25804
|
-
* ```ts
|
|
25805
|
-
* // MyComponent
|
|
25806
|
-
* ɵɵstyleMap({color: '#003'}); // Binding index: 20
|
|
25807
|
-
* ɵɵstyleProp('color', '#004'); // Binding index: 22
|
|
25808
|
-
* // Style1Directive
|
|
25809
|
-
* ɵɵstyleMap({color: '#005'}); // Binding index: 24
|
|
25810
|
-
* ɵɵstyleProp('color', '#006'); // Binding index: 26
|
|
25811
|
-
* // Style2Directive
|
|
25812
|
-
* ɵɵstyleMap({color: '#007'}); // Binding index: 28
|
|
25813
|
-
* ɵɵstyleProp('color', '#008'); // Binding index: 30
|
|
25814
|
-
* // Template: (ExampleComponent)
|
|
25815
|
-
* ɵɵstyleMap({color: '#001'}); // Binding index: 10
|
|
25816
|
-
* ɵɵstyleProp('color', '#002'); // Binding index: 12
|
|
25817
|
-
* ```
|
|
25818
|
-
*
|
|
25819
|
-
* What color should be rendered?
|
|
25820
|
-
*
|
|
25821
|
-
* Once the items are correctly sorted in the list, the answer is simply the last item in the
|
|
25822
|
-
* concatenation list which is `#002`.
|
|
25823
|
-
*
|
|
25824
|
-
* To do so we keep a linked list of all of the bindings which pertain to this element.
|
|
25825
|
-
* Notice that the bindings are inserted in the order of execution, but the `TView.data` allows
|
|
25826
|
-
* us to traverse them in the order of priority.
|
|
25827
|
-
*
|
|
25828
|
-
* |Idx|`TView.data`|`LView` | Notes
|
|
25829
|
-
* |---|------------|-----------------|--------------
|
|
25830
|
-
* |...| | |
|
|
25831
|
-
* |10 |`null` |`{color: '#001'}`| `ɵɵstyleMap('color', {color: '#001'})`
|
|
25832
|
-
* |11 |`30 | 12` | ... |
|
|
25833
|
-
* |12 |`color` |`'#002'` | `ɵɵstyleProp('color', '#002')`
|
|
25834
|
-
* |13 |`10 | 0` | ... |
|
|
25835
|
-
* |...| | |
|
|
25836
|
-
* |20 |`null` |`{color: '#003'}`| `ɵɵstyleMap('color', {color: '#003'})`
|
|
25837
|
-
* |21 |`0 | 22` | ... |
|
|
25838
|
-
* |22 |`color` |`'#004'` | `ɵɵstyleProp('color', '#004')`
|
|
25839
|
-
* |23 |`20 | 24` | ... |
|
|
25840
|
-
* |24 |`null` |`{color: '#005'}`| `ɵɵstyleMap('color', {color: '#005'})`
|
|
25841
|
-
* |25 |`22 | 26` | ... |
|
|
25842
|
-
* |26 |`color` |`'#006'` | `ɵɵstyleProp('color', '#006')`
|
|
25843
|
-
* |27 |`24 | 28` | ... |
|
|
25844
|
-
* |28 |`null` |`{color: '#007'}`| `ɵɵstyleMap('color', {color: '#007'})`
|
|
25845
|
-
* |29 |`26 | 30` | ... |
|
|
25846
|
-
* |30 |`color` |`'#008'` | `ɵɵstyleProp('color', '#008')`
|
|
25847
|
-
* |31 |`28 | 10` | ... |
|
|
25848
|
-
*
|
|
25849
|
-
* The above data structure allows us to re-concatenate the styling no matter which data binding
|
|
25850
|
-
* changes.
|
|
25851
|
-
*
|
|
25852
|
-
* NOTE: in addition to keeping track of next/previous index the `TView.data` also stores prev/next
|
|
25853
|
-
* duplicate bit. The duplicate bit if true says there either is a binding with the same name or
|
|
25854
|
-
* there is a map (which may contain the name). This information is useful in knowing if other
|
|
25855
|
-
* styles with higher priority need to be searched for overwrites.
|
|
25856
|
-
*
|
|
25857
|
-
* NOTE: See `should support example in 'tnode_linked_list.ts' documentation` in
|
|
25858
|
-
* `tnode_linked_list_spec.ts` for working example.
|
|
25859
|
-
*/
|
|
25860
|
-
let __unused_const_as_closure_does_not_like_standalone_comment_blocks__;
|
|
25861
25520
|
/**
|
|
25862
25521
|
* Insert new `tStyleValue` at `TData` and link existing style bindings such that we maintain linked
|
|
25863
25522
|
* list of styles and compute the duplicate flag.
|
|
@@ -27178,12 +26837,7 @@ function isStylingValuePresent(value) {
|
|
|
27178
26837
|
* @param suffix
|
|
27179
26838
|
*/
|
|
27180
26839
|
function normalizeSuffix(value, suffix) {
|
|
27181
|
-
if (value == null || value === '')
|
|
27182
|
-
// do nothing
|
|
27183
|
-
// Do not add the suffix if the value is going to be empty.
|
|
27184
|
-
// As it produce invalid CSS, which the browsers will automatically omit but Domino will not.
|
|
27185
|
-
// Example: `"left": "px;"` instead of `"left": ""`.
|
|
27186
|
-
}
|
|
26840
|
+
if (value == null || value === '') ;
|
|
27187
26841
|
else if (typeof suffix === 'string') {
|
|
27188
26842
|
value = value + suffix;
|
|
27189
26843
|
}
|
|
@@ -27890,7 +27544,7 @@ function ɵɵconditional(matchingTemplateIndex, contextValue) {
|
|
|
27890
27544
|
: undefined;
|
|
27891
27545
|
const viewInContainerIdx = 0;
|
|
27892
27546
|
if (bindingUpdated(hostLView, bindingIndex, matchingTemplateIndex)) {
|
|
27893
|
-
const prevConsumer = setActiveConsumer
|
|
27547
|
+
const prevConsumer = setActiveConsumer(null);
|
|
27894
27548
|
try {
|
|
27895
27549
|
// The index of the view to show changed - remove the previously displayed one
|
|
27896
27550
|
// (it is a noop if there are no active views in a container).
|
|
@@ -27911,7 +27565,7 @@ function ɵɵconditional(matchingTemplateIndex, contextValue) {
|
|
|
27911
27565
|
}
|
|
27912
27566
|
}
|
|
27913
27567
|
finally {
|
|
27914
|
-
setActiveConsumer
|
|
27568
|
+
setActiveConsumer(prevConsumer);
|
|
27915
27569
|
}
|
|
27916
27570
|
}
|
|
27917
27571
|
else if (prevContainer !== undefined) {
|
|
@@ -28113,7 +27767,7 @@ class LiveCollectionLContainerImpl extends LiveCollection {
|
|
|
28113
27767
|
* @codeGenApi
|
|
28114
27768
|
*/
|
|
28115
27769
|
function ɵɵrepeater(collection) {
|
|
28116
|
-
const prevConsumer = setActiveConsumer
|
|
27770
|
+
const prevConsumer = setActiveConsumer(null);
|
|
28117
27771
|
const metadataSlotIdx = getSelectedIndex();
|
|
28118
27772
|
try {
|
|
28119
27773
|
const hostLView = getLView();
|
|
@@ -28165,7 +27819,7 @@ function ɵɵrepeater(collection) {
|
|
|
28165
27819
|
}
|
|
28166
27820
|
}
|
|
28167
27821
|
finally {
|
|
28168
|
-
setActiveConsumer
|
|
27822
|
+
setActiveConsumer(prevConsumer);
|
|
28169
27823
|
}
|
|
28170
27824
|
}
|
|
28171
27825
|
function getLContainer(lView, index) {
|
|
@@ -28570,25 +28224,10 @@ function ɵɵsyntheticHostProperty(propName, value, sanitizer) {
|
|
|
28570
28224
|
return ɵɵsyntheticHostProperty;
|
|
28571
28225
|
}
|
|
28572
28226
|
|
|
28573
|
-
/**
|
|
28574
|
-
* NOTE: changes to the `ngI18nClosureMode` name must be synced with `compiler-cli/src/tooling.ts`.
|
|
28575
|
-
*/
|
|
28576
|
-
if (typeof ngI18nClosureMode === 'undefined') {
|
|
28577
|
-
// These property accesses can be ignored because ngI18nClosureMode will be set to false
|
|
28578
|
-
// when optimizing code and the whole if statement will be dropped.
|
|
28579
|
-
// Make sure to refer to ngI18nClosureMode as ['ngI18nClosureMode'] for closure.
|
|
28580
|
-
// NOTE: we need to have it in IIFE so that the tree-shaker is happy.
|
|
28581
|
-
(function () {
|
|
28582
|
-
_global['ngI18nClosureMode'] =
|
|
28583
|
-
// TODO(FW-1250): validate that this actually, you know, works.
|
|
28584
|
-
typeof goog !== 'undefined' && typeof goog.getMsg === 'function';
|
|
28585
|
-
})();
|
|
28586
|
-
}
|
|
28587
|
-
|
|
28588
28227
|
// THIS CODE IS GENERATED - DO NOT MODIFY.
|
|
28589
28228
|
const u = undefined;
|
|
28590
28229
|
function plural(val) {
|
|
28591
|
-
const
|
|
28230
|
+
const i = Math.floor(Math.abs(val)), v = val.toString().replace(/^[^.]*\.?/, '').length;
|
|
28592
28231
|
if (i === 1 && v === 0)
|
|
28593
28232
|
return 1;
|
|
28594
28233
|
return 5;
|
|
@@ -30560,7 +30199,7 @@ function listenToOutput(tNode, tView, lView, index, lookupName, eventName, liste
|
|
|
30560
30199
|
tCleanup && tCleanup.push(eventName, tNode.index, idx, -(idx + 1));
|
|
30561
30200
|
}
|
|
30562
30201
|
function executeListenerWithErrorHandling(lView, context, listenerFn, e) {
|
|
30563
|
-
const prevConsumer = setActiveConsumer
|
|
30202
|
+
const prevConsumer = setActiveConsumer(null);
|
|
30564
30203
|
try {
|
|
30565
30204
|
profiler(6 /* ProfilerEvent.OutputStart */, context, listenerFn);
|
|
30566
30205
|
// Only explicitly returning false from a listener should preventDefault
|
|
@@ -30572,7 +30211,7 @@ function executeListenerWithErrorHandling(lView, context, listenerFn, e) {
|
|
|
30572
30211
|
}
|
|
30573
30212
|
finally {
|
|
30574
30213
|
profiler(7 /* ProfilerEvent.OutputEnd */, context, listenerFn);
|
|
30575
|
-
setActiveConsumer
|
|
30214
|
+
setActiveConsumer(prevConsumer);
|
|
30576
30215
|
}
|
|
30577
30216
|
}
|
|
30578
30217
|
/**
|
|
@@ -32535,26 +32174,6 @@ function ɵɵattachSourceLocations(templatePath, locations) {
|
|
|
32535
32174
|
}
|
|
32536
32175
|
}
|
|
32537
32176
|
|
|
32538
|
-
/*
|
|
32539
|
-
* This file re-exports all symbols contained in this directory.
|
|
32540
|
-
*
|
|
32541
|
-
* Why is this file not `index.ts`?
|
|
32542
|
-
*
|
|
32543
|
-
* There seems to be an inconsistent path resolution of an `index.ts` file
|
|
32544
|
-
* when only the parent directory is referenced. This could be due to the
|
|
32545
|
-
* node module resolution configuration differing from rollup and/or typescript.
|
|
32546
|
-
*
|
|
32547
|
-
* With commit
|
|
32548
|
-
* https://github.com/angular/angular/commit/d5e3f2c64bd13ce83e7c70788b7fc514ca4a9918
|
|
32549
|
-
* the `instructions.ts` file was moved to `instructions/instructions.ts` and an
|
|
32550
|
-
* `index.ts` file was used to re-export everything. Having had file names that were
|
|
32551
|
-
* importing from `instructions' directly (not the from the sub file or the `index.ts`
|
|
32552
|
-
* file) caused strange CI issues. `index.ts` had to be renamed to `all.ts` for this
|
|
32553
|
-
* to work.
|
|
32554
|
-
*
|
|
32555
|
-
* Jira Issue = FW-1184
|
|
32556
|
-
*/
|
|
32557
|
-
|
|
32558
32177
|
/**
|
|
32559
32178
|
* Resolves the providers which are defined in the DirectiveDef.
|
|
32560
32179
|
*
|
|
@@ -33777,7 +33396,7 @@ function resetProjectionState(tNode) {
|
|
|
33777
33396
|
if (isTNodeShape(current)) {
|
|
33778
33397
|
// Reset `projectionNext` since it can affect the traversal order during projection.
|
|
33779
33398
|
current.projectionNext = null;
|
|
33780
|
-
current.flags &=
|
|
33399
|
+
current.flags &= -3 /* TNodeFlags.isProjected */;
|
|
33781
33400
|
}
|
|
33782
33401
|
}
|
|
33783
33402
|
tNode.projection = null;
|
|
@@ -34008,10 +33627,6 @@ function resetJitOptions() {
|
|
|
34008
33627
|
jitOptions = null;
|
|
34009
33628
|
}
|
|
34010
33629
|
|
|
34011
|
-
function patchModuleCompilation() {
|
|
34012
|
-
// Does nothing, but exists as a target for patching.
|
|
34013
|
-
}
|
|
34014
|
-
|
|
34015
33630
|
const moduleQueue = [];
|
|
34016
33631
|
/**
|
|
34017
33632
|
* Enqueues moduleDef to be checked later to see if scope can be set on its
|
|
@@ -34061,7 +33676,6 @@ function isResolvedDeclaration(declaration) {
|
|
|
34061
33676
|
* This function automatically gets called when a class has a `@NgModule` decorator.
|
|
34062
33677
|
*/
|
|
34063
33678
|
function compileNgModule(moduleType, ngModule = {}) {
|
|
34064
|
-
patchModuleCompilation();
|
|
34065
33679
|
compileNgModuleDefs(moduleType, ngModule);
|
|
34066
33680
|
if (ngModule.id !== undefined) {
|
|
34067
33681
|
registerNgModuleType(moduleType, ngModule.id);
|
|
@@ -34425,7 +34039,7 @@ function patchComponentDefWithScope(componentDef, transitiveScopes) {
|
|
|
34425
34039
|
*/
|
|
34426
34040
|
function transitiveScopesFor(type) {
|
|
34427
34041
|
if (isNgModule(type)) {
|
|
34428
|
-
|
|
34042
|
+
{
|
|
34429
34043
|
const scope = depsTracker.getNgModuleScope(type);
|
|
34430
34044
|
const def = getNgModuleDef(type, true);
|
|
34431
34045
|
return {
|
|
@@ -34433,9 +34047,6 @@ function transitiveScopesFor(type) {
|
|
|
34433
34047
|
...scope,
|
|
34434
34048
|
};
|
|
34435
34049
|
}
|
|
34436
|
-
else {
|
|
34437
|
-
return transitiveScopesForNgModule(type);
|
|
34438
|
-
}
|
|
34439
34050
|
}
|
|
34440
34051
|
else if (isStandalone(type)) {
|
|
34441
34052
|
const directiveDef = getComponentDef(type) || getDirectiveDef(type);
|
|
@@ -34470,77 +34081,6 @@ function transitiveScopesFor(type) {
|
|
|
34470
34081
|
// TODO: change the error message to be more user-facing and take standalone into account
|
|
34471
34082
|
throw new Error(`${type.name} does not have a module def (ɵmod property)`);
|
|
34472
34083
|
}
|
|
34473
|
-
/**
|
|
34474
|
-
* Compute the pair of transitive scopes (compilation scope and exported scope) for a given module.
|
|
34475
|
-
*
|
|
34476
|
-
* This operation is memoized and the result is cached on the module's definition. This function can
|
|
34477
|
-
* be called on modules with components that have not fully compiled yet, but the result should not
|
|
34478
|
-
* be used until they have.
|
|
34479
|
-
*
|
|
34480
|
-
* @param moduleType module that transitive scope should be calculated for.
|
|
34481
|
-
*/
|
|
34482
|
-
function transitiveScopesForNgModule(moduleType) {
|
|
34483
|
-
const def = getNgModuleDef(moduleType, true);
|
|
34484
|
-
if (def.transitiveCompileScopes !== null) {
|
|
34485
|
-
return def.transitiveCompileScopes;
|
|
34486
|
-
}
|
|
34487
|
-
const scopes = {
|
|
34488
|
-
schemas: def.schemas || null,
|
|
34489
|
-
compilation: {
|
|
34490
|
-
directives: new Set(),
|
|
34491
|
-
pipes: new Set(),
|
|
34492
|
-
},
|
|
34493
|
-
exported: {
|
|
34494
|
-
directives: new Set(),
|
|
34495
|
-
pipes: new Set(),
|
|
34496
|
-
},
|
|
34497
|
-
};
|
|
34498
|
-
maybeUnwrapFn(def.imports).forEach((imported) => {
|
|
34499
|
-
// When this module imports another, the imported module's exported directives and pipes are
|
|
34500
|
-
// added to the compilation scope of this module.
|
|
34501
|
-
const importedScope = transitiveScopesFor(imported);
|
|
34502
|
-
importedScope.exported.directives.forEach((entry) => scopes.compilation.directives.add(entry));
|
|
34503
|
-
importedScope.exported.pipes.forEach((entry) => scopes.compilation.pipes.add(entry));
|
|
34504
|
-
});
|
|
34505
|
-
maybeUnwrapFn(def.declarations).forEach((declared) => {
|
|
34506
|
-
const declaredWithDefs = declared;
|
|
34507
|
-
if (getPipeDef$1(declaredWithDefs)) {
|
|
34508
|
-
scopes.compilation.pipes.add(declared);
|
|
34509
|
-
}
|
|
34510
|
-
else {
|
|
34511
|
-
// Either declared has a ɵcmp or ɵdir, or it's a component which hasn't
|
|
34512
|
-
// had its template compiled yet. In either case, it gets added to the compilation's
|
|
34513
|
-
// directives.
|
|
34514
|
-
scopes.compilation.directives.add(declared);
|
|
34515
|
-
}
|
|
34516
|
-
});
|
|
34517
|
-
maybeUnwrapFn(def.exports).forEach((exported) => {
|
|
34518
|
-
const exportedType = exported;
|
|
34519
|
-
// Either the type is a module, a pipe, or a component/directive (which may not have a
|
|
34520
|
-
// ɵcmp as it might be compiled asynchronously).
|
|
34521
|
-
if (isNgModule(exportedType)) {
|
|
34522
|
-
// When this module exports another, the exported module's exported directives and pipes are
|
|
34523
|
-
// added to both the compilation and exported scopes of this module.
|
|
34524
|
-
const exportedScope = transitiveScopesFor(exportedType);
|
|
34525
|
-
exportedScope.exported.directives.forEach((entry) => {
|
|
34526
|
-
scopes.compilation.directives.add(entry);
|
|
34527
|
-
scopes.exported.directives.add(entry);
|
|
34528
|
-
});
|
|
34529
|
-
exportedScope.exported.pipes.forEach((entry) => {
|
|
34530
|
-
scopes.compilation.pipes.add(entry);
|
|
34531
|
-
scopes.exported.pipes.add(entry);
|
|
34532
|
-
});
|
|
34533
|
-
}
|
|
34534
|
-
else if (getPipeDef$1(exportedType)) {
|
|
34535
|
-
scopes.exported.pipes.add(exportedType);
|
|
34536
|
-
}
|
|
34537
|
-
else {
|
|
34538
|
-
scopes.exported.directives.add(exportedType);
|
|
34539
|
-
}
|
|
34540
|
-
});
|
|
34541
|
-
def.transitiveCompileScopes = scopes;
|
|
34542
|
-
return scopes;
|
|
34543
|
-
}
|
|
34544
34084
|
function expandModuleWithProviders(value) {
|
|
34545
34085
|
if (isModuleWithProviders(value)) {
|
|
34546
34086
|
return value.ngModule;
|
|
@@ -34713,43 +34253,8 @@ function compileComponent(type, metadata) {
|
|
|
34713
34253
|
* component's `imports`.
|
|
34714
34254
|
*/
|
|
34715
34255
|
function getStandaloneDefFunctions(type, imports) {
|
|
34716
|
-
let cachedDirectiveDefs = null;
|
|
34717
|
-
let cachedPipeDefs = null;
|
|
34718
34256
|
const directiveDefs = () => {
|
|
34719
|
-
|
|
34720
|
-
if (cachedDirectiveDefs === null) {
|
|
34721
|
-
// Standalone components are always able to self-reference, so include the component's own
|
|
34722
|
-
// definition in its `directiveDefs`.
|
|
34723
|
-
cachedDirectiveDefs = [getComponentDef(type)];
|
|
34724
|
-
const seen = new Set([type]);
|
|
34725
|
-
for (const rawDep of imports) {
|
|
34726
|
-
ngDevMode && verifyStandaloneImport(rawDep, type);
|
|
34727
|
-
const dep = resolveForwardRef(rawDep);
|
|
34728
|
-
if (seen.has(dep)) {
|
|
34729
|
-
continue;
|
|
34730
|
-
}
|
|
34731
|
-
seen.add(dep);
|
|
34732
|
-
if (!!getNgModuleDef(dep)) {
|
|
34733
|
-
const scope = transitiveScopesFor(dep);
|
|
34734
|
-
for (const dir of scope.exported.directives) {
|
|
34735
|
-
const def = getComponentDef(dir) || getDirectiveDef(dir);
|
|
34736
|
-
if (def && !seen.has(dir)) {
|
|
34737
|
-
seen.add(dir);
|
|
34738
|
-
cachedDirectiveDefs.push(def);
|
|
34739
|
-
}
|
|
34740
|
-
}
|
|
34741
|
-
}
|
|
34742
|
-
else {
|
|
34743
|
-
const def = getComponentDef(dep) || getDirectiveDef(dep);
|
|
34744
|
-
if (def) {
|
|
34745
|
-
cachedDirectiveDefs.push(def);
|
|
34746
|
-
}
|
|
34747
|
-
}
|
|
34748
|
-
}
|
|
34749
|
-
}
|
|
34750
|
-
return cachedDirectiveDefs;
|
|
34751
|
-
}
|
|
34752
|
-
else {
|
|
34257
|
+
{
|
|
34753
34258
|
if (ngDevMode) {
|
|
34754
34259
|
for (const rawDep of imports) {
|
|
34755
34260
|
verifyStandaloneImport(rawDep, type);
|
|
@@ -34765,37 +34270,7 @@ function getStandaloneDefFunctions(type, imports) {
|
|
|
34765
34270
|
}
|
|
34766
34271
|
};
|
|
34767
34272
|
const pipeDefs = () => {
|
|
34768
|
-
|
|
34769
|
-
if (cachedPipeDefs === null) {
|
|
34770
|
-
cachedPipeDefs = [];
|
|
34771
|
-
const seen = new Set();
|
|
34772
|
-
for (const rawDep of imports) {
|
|
34773
|
-
const dep = resolveForwardRef(rawDep);
|
|
34774
|
-
if (seen.has(dep)) {
|
|
34775
|
-
continue;
|
|
34776
|
-
}
|
|
34777
|
-
seen.add(dep);
|
|
34778
|
-
if (!!getNgModuleDef(dep)) {
|
|
34779
|
-
const scope = transitiveScopesFor(dep);
|
|
34780
|
-
for (const pipe of scope.exported.pipes) {
|
|
34781
|
-
const def = getPipeDef$1(pipe);
|
|
34782
|
-
if (def && !seen.has(pipe)) {
|
|
34783
|
-
seen.add(pipe);
|
|
34784
|
-
cachedPipeDefs.push(def);
|
|
34785
|
-
}
|
|
34786
|
-
}
|
|
34787
|
-
}
|
|
34788
|
-
else {
|
|
34789
|
-
const def = getPipeDef$1(dep);
|
|
34790
|
-
if (def) {
|
|
34791
|
-
cachedPipeDefs.push(def);
|
|
34792
|
-
}
|
|
34793
|
-
}
|
|
34794
|
-
}
|
|
34795
|
-
}
|
|
34796
|
-
return cachedPipeDefs;
|
|
34797
|
-
}
|
|
34798
|
-
else {
|
|
34273
|
+
{
|
|
34799
34274
|
if (ngDevMode) {
|
|
34800
34275
|
for (const rawDep of imports) {
|
|
34801
34276
|
verifyStandaloneImport(rawDep, type);
|
|
@@ -35131,11 +34606,6 @@ const NgModule = makeDecorator('NgModule', (ngModule) => ngModule, undefined, un
|
|
|
35131
34606
|
*/
|
|
35132
34607
|
(type, meta) => compileNgModule(type, meta));
|
|
35133
34608
|
|
|
35134
|
-
/**
|
|
35135
|
-
* This indirection is needed to free up Component, etc symbols in the public API
|
|
35136
|
-
* to be used by the decorator versions of these annotations.
|
|
35137
|
-
*/
|
|
35138
|
-
|
|
35139
34609
|
/**
|
|
35140
34610
|
* @description Represents the version of Angular
|
|
35141
34611
|
*
|
|
@@ -35157,7 +34627,7 @@ class Version {
|
|
|
35157
34627
|
/**
|
|
35158
34628
|
* @publicApi
|
|
35159
34629
|
*/
|
|
35160
|
-
const VERSION = new Version('19.2.
|
|
34630
|
+
const VERSION = new Version('19.2.3');
|
|
35161
34631
|
|
|
35162
34632
|
/**
|
|
35163
34633
|
* Combination of NgModuleFactory and ComponentFactories.
|
|
@@ -35399,7 +34869,7 @@ function internalProvideZoneChangeDetection({ ngZoneFactory, ignoreChangesOutsid
|
|
|
35399
34869
|
* ```
|
|
35400
34870
|
*
|
|
35401
34871
|
* @publicApi
|
|
35402
|
-
* @see {@link /api/
|
|
34872
|
+
* @see {@link /api/platform-browser/bootstrapApplication bootstrapApplication}
|
|
35403
34873
|
* @see {@link NgZoneOptions}
|
|
35404
34874
|
*/
|
|
35405
34875
|
function provideZoneChangeDetection(options) {
|
|
@@ -36744,8 +36214,6 @@ function enableProdMode() {
|
|
|
36744
36214
|
}
|
|
36745
36215
|
}
|
|
36746
36216
|
|
|
36747
|
-
// Public API for render
|
|
36748
|
-
|
|
36749
36217
|
/**
|
|
36750
36218
|
* Returns the NgModuleFactory with the given id (specified using [@NgModule.id
|
|
36751
36219
|
* field](api/core/NgModule#id)), if it exists and has been loaded. Factories for NgModules that do
|
|
@@ -36920,11 +36388,6 @@ class ViewRef extends ChangeDetectorRef {
|
|
|
36920
36388
|
class EmbeddedViewRef extends ViewRef {
|
|
36921
36389
|
}
|
|
36922
36390
|
|
|
36923
|
-
// Public API for compiler
|
|
36924
|
-
|
|
36925
|
-
// This file exists for easily patching NgModuleFactoryLoader in g3
|
|
36926
|
-
var ng_module_factory_loader_impl = {};
|
|
36927
|
-
|
|
36928
36391
|
/**
|
|
36929
36392
|
* @publicApi
|
|
36930
36393
|
*/
|
|
@@ -37469,8 +36932,6 @@ function collectPropertyBindings(properties, tNode, lView, tData) {
|
|
|
37469
36932
|
}
|
|
37470
36933
|
}
|
|
37471
36934
|
}
|
|
37472
|
-
// Need to keep the nodes in a global Map so that multiple angular apps are supported.
|
|
37473
|
-
const _nativeNodeToDebugNode = new Map();
|
|
37474
36935
|
const NG_DEBUG_PROPERTY = '__ng_debug__';
|
|
37475
36936
|
/**
|
|
37476
36937
|
* @publicApi
|
|
@@ -37487,15 +36948,6 @@ function getDebugNode(nativeNode) {
|
|
|
37487
36948
|
}
|
|
37488
36949
|
return null;
|
|
37489
36950
|
}
|
|
37490
|
-
function getAllDebugNodes() {
|
|
37491
|
-
return Array.from(_nativeNodeToDebugNode.values());
|
|
37492
|
-
}
|
|
37493
|
-
function indexDebugNode(node) {
|
|
37494
|
-
_nativeNodeToDebugNode.set(node.nativeNode, node);
|
|
37495
|
-
}
|
|
37496
|
-
function removeDebugNodeFromIndex(node) {
|
|
37497
|
-
_nativeNodeToDebugNode.delete(node.nativeNode);
|
|
37498
|
-
}
|
|
37499
36951
|
|
|
37500
36952
|
class DefaultIterableDifferFactory {
|
|
37501
36953
|
constructor() { }
|
|
@@ -38551,12 +38003,6 @@ const iterableDiff = [new DefaultIterableDifferFactory()];
|
|
|
38551
38003
|
const defaultIterableDiffers = new IterableDiffers(iterableDiff);
|
|
38552
38004
|
const defaultKeyValueDiffers = new KeyValueDiffers(keyValDiff);
|
|
38553
38005
|
|
|
38554
|
-
/**
|
|
38555
|
-
* @module
|
|
38556
|
-
* @description
|
|
38557
|
-
* Change detection enables data binding in Angular.
|
|
38558
|
-
*/
|
|
38559
|
-
|
|
38560
38006
|
/**
|
|
38561
38007
|
* This platform has to be included in any other platform
|
|
38562
38008
|
*
|
|
@@ -38582,658 +38028,6 @@ class ApplicationModule {
|
|
|
38582
38028
|
type: NgModule
|
|
38583
38029
|
}], () => [{ type: ApplicationRef }], null); })();
|
|
38584
38030
|
|
|
38585
|
-
/**
|
|
38586
|
-
* The default equality function used for `signal` and `computed`, which uses referential equality.
|
|
38587
|
-
*/
|
|
38588
|
-
function defaultEquals(a, b) {
|
|
38589
|
-
return Object.is(a, b);
|
|
38590
|
-
}
|
|
38591
|
-
|
|
38592
|
-
/**
|
|
38593
|
-
* The currently active consumer `ReactiveNode`, if running code in a reactive context.
|
|
38594
|
-
*
|
|
38595
|
-
* Change this via `setActiveConsumer`.
|
|
38596
|
-
*/
|
|
38597
|
-
let activeConsumer = null;
|
|
38598
|
-
let inNotificationPhase = false;
|
|
38599
|
-
/**
|
|
38600
|
-
* Global epoch counter. Incremented whenever a source signal is set.
|
|
38601
|
-
*/
|
|
38602
|
-
let epoch = 1;
|
|
38603
|
-
/**
|
|
38604
|
-
* Symbol used to tell `Signal`s apart from other functions.
|
|
38605
|
-
*
|
|
38606
|
-
* This can be used to auto-unwrap signals in various cases, or to auto-wrap non-signal values.
|
|
38607
|
-
*/
|
|
38608
|
-
const SIGNAL = /* @__PURE__ */ Symbol('SIGNAL');
|
|
38609
|
-
function setActiveConsumer(consumer) {
|
|
38610
|
-
const prev = activeConsumer;
|
|
38611
|
-
activeConsumer = consumer;
|
|
38612
|
-
return prev;
|
|
38613
|
-
}
|
|
38614
|
-
function getActiveConsumer() {
|
|
38615
|
-
return activeConsumer;
|
|
38616
|
-
}
|
|
38617
|
-
function isInNotificationPhase() {
|
|
38618
|
-
return inNotificationPhase;
|
|
38619
|
-
}
|
|
38620
|
-
function isReactive(value) {
|
|
38621
|
-
return value[SIGNAL] !== undefined;
|
|
38622
|
-
}
|
|
38623
|
-
const REACTIVE_NODE = {
|
|
38624
|
-
version: 0,
|
|
38625
|
-
lastCleanEpoch: 0,
|
|
38626
|
-
dirty: false,
|
|
38627
|
-
producerNode: undefined,
|
|
38628
|
-
producerLastReadVersion: undefined,
|
|
38629
|
-
producerIndexOfThis: undefined,
|
|
38630
|
-
nextProducerIndex: 0,
|
|
38631
|
-
liveConsumerNode: undefined,
|
|
38632
|
-
liveConsumerIndexOfThis: undefined,
|
|
38633
|
-
consumerAllowSignalWrites: false,
|
|
38634
|
-
consumerIsAlwaysLive: false,
|
|
38635
|
-
kind: 'unknown',
|
|
38636
|
-
producerMustRecompute: () => false,
|
|
38637
|
-
producerRecomputeValue: () => { },
|
|
38638
|
-
consumerMarkedDirty: () => { },
|
|
38639
|
-
consumerOnSignalRead: () => { },
|
|
38640
|
-
};
|
|
38641
|
-
/**
|
|
38642
|
-
* Called by implementations when a producer's signal is read.
|
|
38643
|
-
*/
|
|
38644
|
-
function producerAccessed(node) {
|
|
38645
|
-
if (inNotificationPhase) {
|
|
38646
|
-
throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode
|
|
38647
|
-
? `Assertion error: signal read during notification phase`
|
|
38648
|
-
: '');
|
|
38649
|
-
}
|
|
38650
|
-
if (activeConsumer === null) {
|
|
38651
|
-
// Accessed outside of a reactive context, so nothing to record.
|
|
38652
|
-
return;
|
|
38653
|
-
}
|
|
38654
|
-
activeConsumer.consumerOnSignalRead(node);
|
|
38655
|
-
// This producer is the `idx`th dependency of `activeConsumer`.
|
|
38656
|
-
const idx = activeConsumer.nextProducerIndex++;
|
|
38657
|
-
assertConsumerNode(activeConsumer);
|
|
38658
|
-
if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) {
|
|
38659
|
-
// There's been a change in producers since the last execution of `activeConsumer`.
|
|
38660
|
-
// `activeConsumer.producerNode[idx]` holds a stale dependency which will be be removed and
|
|
38661
|
-
// replaced with `this`.
|
|
38662
|
-
//
|
|
38663
|
-
// If `activeConsumer` isn't live, then this is a no-op, since we can replace the producer in
|
|
38664
|
-
// `activeConsumer.producerNode` directly. However, if `activeConsumer` is live, then we need
|
|
38665
|
-
// to remove it from the stale producer's `liveConsumer`s.
|
|
38666
|
-
if (consumerIsLive(activeConsumer)) {
|
|
38667
|
-
const staleProducer = activeConsumer.producerNode[idx];
|
|
38668
|
-
producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]);
|
|
38669
|
-
// At this point, the only record of `staleProducer` is the reference at
|
|
38670
|
-
// `activeConsumer.producerNode[idx]` which will be overwritten below.
|
|
38671
|
-
}
|
|
38672
|
-
}
|
|
38673
|
-
if (activeConsumer.producerNode[idx] !== node) {
|
|
38674
|
-
// We're a new dependency of the consumer (at `idx`).
|
|
38675
|
-
activeConsumer.producerNode[idx] = node;
|
|
38676
|
-
// If the active consumer is live, then add it as a live consumer. If not, then use 0 as a
|
|
38677
|
-
// placeholder value.
|
|
38678
|
-
activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer)
|
|
38679
|
-
? producerAddLiveConsumer(node, activeConsumer, idx)
|
|
38680
|
-
: 0;
|
|
38681
|
-
}
|
|
38682
|
-
activeConsumer.producerLastReadVersion[idx] = node.version;
|
|
38683
|
-
}
|
|
38684
|
-
/**
|
|
38685
|
-
* Increment the global epoch counter.
|
|
38686
|
-
*
|
|
38687
|
-
* Called by source producers (that is, not computeds) whenever their values change.
|
|
38688
|
-
*/
|
|
38689
|
-
function producerIncrementEpoch() {
|
|
38690
|
-
epoch++;
|
|
38691
|
-
}
|
|
38692
|
-
/**
|
|
38693
|
-
* Ensure this producer's `version` is up-to-date.
|
|
38694
|
-
*/
|
|
38695
|
-
function producerUpdateValueVersion(node) {
|
|
38696
|
-
if (consumerIsLive(node) && !node.dirty) {
|
|
38697
|
-
// A live consumer will be marked dirty by producers, so a clean state means that its version
|
|
38698
|
-
// is guaranteed to be up-to-date.
|
|
38699
|
-
return;
|
|
38700
|
-
}
|
|
38701
|
-
if (!node.dirty && node.lastCleanEpoch === epoch) {
|
|
38702
|
-
// Even non-live consumers can skip polling if they previously found themselves to be clean at
|
|
38703
|
-
// the current epoch, since their dependencies could not possibly have changed (such a change
|
|
38704
|
-
// would've increased the epoch).
|
|
38705
|
-
return;
|
|
38706
|
-
}
|
|
38707
|
-
if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {
|
|
38708
|
-
// None of our producers report a change since the last time they were read, so no
|
|
38709
|
-
// recomputation of our value is necessary, and we can consider ourselves clean.
|
|
38710
|
-
producerMarkClean(node);
|
|
38711
|
-
return;
|
|
38712
|
-
}
|
|
38713
|
-
node.producerRecomputeValue(node);
|
|
38714
|
-
// After recomputing the value, we're no longer dirty.
|
|
38715
|
-
producerMarkClean(node);
|
|
38716
|
-
}
|
|
38717
|
-
/**
|
|
38718
|
-
* Propagate a dirty notification to live consumers of this producer.
|
|
38719
|
-
*/
|
|
38720
|
-
function producerNotifyConsumers(node) {
|
|
38721
|
-
if (node.liveConsumerNode === undefined) {
|
|
38722
|
-
return;
|
|
38723
|
-
}
|
|
38724
|
-
// Prevent signal reads when we're updating the graph
|
|
38725
|
-
const prev = inNotificationPhase;
|
|
38726
|
-
inNotificationPhase = true;
|
|
38727
|
-
try {
|
|
38728
|
-
for (const consumer of node.liveConsumerNode) {
|
|
38729
|
-
if (!consumer.dirty) {
|
|
38730
|
-
consumerMarkDirty(consumer);
|
|
38731
|
-
}
|
|
38732
|
-
}
|
|
38733
|
-
}
|
|
38734
|
-
finally {
|
|
38735
|
-
inNotificationPhase = prev;
|
|
38736
|
-
}
|
|
38737
|
-
}
|
|
38738
|
-
/**
|
|
38739
|
-
* Whether this `ReactiveNode` in its producer capacity is currently allowed to initiate updates,
|
|
38740
|
-
* based on the current consumer context.
|
|
38741
|
-
*/
|
|
38742
|
-
function producerUpdatesAllowed() {
|
|
38743
|
-
return activeConsumer?.consumerAllowSignalWrites !== false;
|
|
38744
|
-
}
|
|
38745
|
-
function consumerMarkDirty(node) {
|
|
38746
|
-
node.dirty = true;
|
|
38747
|
-
producerNotifyConsumers(node);
|
|
38748
|
-
node.consumerMarkedDirty?.(node);
|
|
38749
|
-
}
|
|
38750
|
-
function producerMarkClean(node) {
|
|
38751
|
-
node.dirty = false;
|
|
38752
|
-
node.lastCleanEpoch = epoch;
|
|
38753
|
-
}
|
|
38754
|
-
/**
|
|
38755
|
-
* Prepare this consumer to run a computation in its reactive context.
|
|
38756
|
-
*
|
|
38757
|
-
* Must be called by subclasses which represent reactive computations, before those computations
|
|
38758
|
-
* begin.
|
|
38759
|
-
*/
|
|
38760
|
-
function consumerBeforeComputation(node) {
|
|
38761
|
-
node && (node.nextProducerIndex = 0);
|
|
38762
|
-
return setActiveConsumer(node);
|
|
38763
|
-
}
|
|
38764
|
-
/**
|
|
38765
|
-
* Finalize this consumer's state after a reactive computation has run.
|
|
38766
|
-
*
|
|
38767
|
-
* Must be called by subclasses which represent reactive computations, after those computations
|
|
38768
|
-
* have finished.
|
|
38769
|
-
*/
|
|
38770
|
-
function consumerAfterComputation(node, prevConsumer) {
|
|
38771
|
-
setActiveConsumer(prevConsumer);
|
|
38772
|
-
if (!node ||
|
|
38773
|
-
node.producerNode === undefined ||
|
|
38774
|
-
node.producerIndexOfThis === undefined ||
|
|
38775
|
-
node.producerLastReadVersion === undefined) {
|
|
38776
|
-
return;
|
|
38777
|
-
}
|
|
38778
|
-
if (consumerIsLive(node)) {
|
|
38779
|
-
// For live consumers, we need to remove the producer -> consumer edge for any stale producers
|
|
38780
|
-
// which weren't dependencies after the recomputation.
|
|
38781
|
-
for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {
|
|
38782
|
-
producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
|
|
38783
|
-
}
|
|
38784
|
-
}
|
|
38785
|
-
// Truncate the producer tracking arrays.
|
|
38786
|
-
// Perf note: this is essentially truncating the length to `node.nextProducerIndex`, but
|
|
38787
|
-
// benchmarking has shown that individual pop operations are faster.
|
|
38788
|
-
while (node.producerNode.length > node.nextProducerIndex) {
|
|
38789
|
-
node.producerNode.pop();
|
|
38790
|
-
node.producerLastReadVersion.pop();
|
|
38791
|
-
node.producerIndexOfThis.pop();
|
|
38792
|
-
}
|
|
38793
|
-
}
|
|
38794
|
-
/**
|
|
38795
|
-
* Determine whether this consumer has any dependencies which have changed since the last time
|
|
38796
|
-
* they were read.
|
|
38797
|
-
*/
|
|
38798
|
-
function consumerPollProducersForChange(node) {
|
|
38799
|
-
assertConsumerNode(node);
|
|
38800
|
-
// Poll producers for change.
|
|
38801
|
-
for (let i = 0; i < node.producerNode.length; i++) {
|
|
38802
|
-
const producer = node.producerNode[i];
|
|
38803
|
-
const seenVersion = node.producerLastReadVersion[i];
|
|
38804
|
-
// First check the versions. A mismatch means that the producer's value is known to have
|
|
38805
|
-
// changed since the last time we read it.
|
|
38806
|
-
if (seenVersion !== producer.version) {
|
|
38807
|
-
return true;
|
|
38808
|
-
}
|
|
38809
|
-
// The producer's version is the same as the last time we read it, but it might itself be
|
|
38810
|
-
// stale. Force the producer to recompute its version (calculating a new value if necessary).
|
|
38811
|
-
producerUpdateValueVersion(producer);
|
|
38812
|
-
// Now when we do this check, `producer.version` is guaranteed to be up to date, so if the
|
|
38813
|
-
// versions still match then it has not changed since the last time we read it.
|
|
38814
|
-
if (seenVersion !== producer.version) {
|
|
38815
|
-
return true;
|
|
38816
|
-
}
|
|
38817
|
-
}
|
|
38818
|
-
return false;
|
|
38819
|
-
}
|
|
38820
|
-
/**
|
|
38821
|
-
* Disconnect this consumer from the graph.
|
|
38822
|
-
*/
|
|
38823
|
-
function consumerDestroy(node) {
|
|
38824
|
-
assertConsumerNode(node);
|
|
38825
|
-
if (consumerIsLive(node)) {
|
|
38826
|
-
// Drop all connections from the graph to this node.
|
|
38827
|
-
for (let i = 0; i < node.producerNode.length; i++) {
|
|
38828
|
-
producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
|
|
38829
|
-
}
|
|
38830
|
-
}
|
|
38831
|
-
// Truncate all the arrays to drop all connection from this node to the graph.
|
|
38832
|
-
node.producerNode.length =
|
|
38833
|
-
node.producerLastReadVersion.length =
|
|
38834
|
-
node.producerIndexOfThis.length =
|
|
38835
|
-
0;
|
|
38836
|
-
if (node.liveConsumerNode) {
|
|
38837
|
-
node.liveConsumerNode.length = node.liveConsumerIndexOfThis.length = 0;
|
|
38838
|
-
}
|
|
38839
|
-
}
|
|
38840
|
-
/**
|
|
38841
|
-
* Add `consumer` as a live consumer of this node.
|
|
38842
|
-
*
|
|
38843
|
-
* Note that this operation is potentially transitive. If this node becomes live, then it becomes
|
|
38844
|
-
* a live consumer of all of its current producers.
|
|
38845
|
-
*/
|
|
38846
|
-
function producerAddLiveConsumer(node, consumer, indexOfThis) {
|
|
38847
|
-
assertProducerNode(node);
|
|
38848
|
-
if (node.liveConsumerNode.length === 0 && isConsumerNode(node)) {
|
|
38849
|
-
// When going from 0 to 1 live consumers, we become a live consumer to our producers.
|
|
38850
|
-
for (let i = 0; i < node.producerNode.length; i++) {
|
|
38851
|
-
node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i);
|
|
38852
|
-
}
|
|
38853
|
-
}
|
|
38854
|
-
node.liveConsumerIndexOfThis.push(indexOfThis);
|
|
38855
|
-
return node.liveConsumerNode.push(consumer) - 1;
|
|
38856
|
-
}
|
|
38857
|
-
/**
|
|
38858
|
-
* Remove the live consumer at `idx`.
|
|
38859
|
-
*/
|
|
38860
|
-
function producerRemoveLiveConsumerAtIndex(node, idx) {
|
|
38861
|
-
assertProducerNode(node);
|
|
38862
|
-
if (typeof ngDevMode !== 'undefined' && ngDevMode && idx >= node.liveConsumerNode.length) {
|
|
38863
|
-
throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`);
|
|
38864
|
-
}
|
|
38865
|
-
if (node.liveConsumerNode.length === 1 && isConsumerNode(node)) {
|
|
38866
|
-
// When removing the last live consumer, we will no longer be live. We need to remove
|
|
38867
|
-
// ourselves from our producers' tracking (which may cause consumer-producers to lose
|
|
38868
|
-
// liveness as well).
|
|
38869
|
-
for (let i = 0; i < node.producerNode.length; i++) {
|
|
38870
|
-
producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
|
|
38871
|
-
}
|
|
38872
|
-
}
|
|
38873
|
-
// Move the last value of `liveConsumers` into `idx`. Note that if there's only a single
|
|
38874
|
-
// live consumer, this is a no-op.
|
|
38875
|
-
const lastIdx = node.liveConsumerNode.length - 1;
|
|
38876
|
-
node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];
|
|
38877
|
-
node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];
|
|
38878
|
-
// Truncate the array.
|
|
38879
|
-
node.liveConsumerNode.length--;
|
|
38880
|
-
node.liveConsumerIndexOfThis.length--;
|
|
38881
|
-
// If the index is still valid, then we need to fix the index pointer from the producer to this
|
|
38882
|
-
// consumer, and update it from `lastIdx` to `idx` (accounting for the move above).
|
|
38883
|
-
if (idx < node.liveConsumerNode.length) {
|
|
38884
|
-
const idxProducer = node.liveConsumerIndexOfThis[idx];
|
|
38885
|
-
const consumer = node.liveConsumerNode[idx];
|
|
38886
|
-
assertConsumerNode(consumer);
|
|
38887
|
-
consumer.producerIndexOfThis[idxProducer] = idx;
|
|
38888
|
-
}
|
|
38889
|
-
}
|
|
38890
|
-
function consumerIsLive(node) {
|
|
38891
|
-
return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;
|
|
38892
|
-
}
|
|
38893
|
-
function assertConsumerNode(node) {
|
|
38894
|
-
node.producerNode ??= [];
|
|
38895
|
-
node.producerIndexOfThis ??= [];
|
|
38896
|
-
node.producerLastReadVersion ??= [];
|
|
38897
|
-
}
|
|
38898
|
-
function assertProducerNode(node) {
|
|
38899
|
-
node.liveConsumerNode ??= [];
|
|
38900
|
-
node.liveConsumerIndexOfThis ??= [];
|
|
38901
|
-
}
|
|
38902
|
-
function isConsumerNode(node) {
|
|
38903
|
-
return node.producerNode !== undefined;
|
|
38904
|
-
}
|
|
38905
|
-
|
|
38906
|
-
/**
|
|
38907
|
-
* Create a computed signal which derives a reactive value from an expression.
|
|
38908
|
-
*/
|
|
38909
|
-
function createComputed(computation) {
|
|
38910
|
-
const node = Object.create(COMPUTED_NODE);
|
|
38911
|
-
node.computation = computation;
|
|
38912
|
-
const computed = () => {
|
|
38913
|
-
// Check if the value needs updating before returning it.
|
|
38914
|
-
producerUpdateValueVersion(node);
|
|
38915
|
-
// Record that someone looked at this signal.
|
|
38916
|
-
producerAccessed(node);
|
|
38917
|
-
if (node.value === ERRORED) {
|
|
38918
|
-
throw node.error;
|
|
38919
|
-
}
|
|
38920
|
-
return node.value;
|
|
38921
|
-
};
|
|
38922
|
-
computed[SIGNAL] = node;
|
|
38923
|
-
return computed;
|
|
38924
|
-
}
|
|
38925
|
-
/**
|
|
38926
|
-
* A dedicated symbol used before a computed value has been calculated for the first time.
|
|
38927
|
-
* Explicitly typed as `any` so we can use it as signal's value.
|
|
38928
|
-
*/
|
|
38929
|
-
const UNSET = /* @__PURE__ */ Symbol('UNSET');
|
|
38930
|
-
/**
|
|
38931
|
-
* A dedicated symbol used in place of a computed signal value to indicate that a given computation
|
|
38932
|
-
* is in progress. Used to detect cycles in computation chains.
|
|
38933
|
-
* Explicitly typed as `any` so we can use it as signal's value.
|
|
38934
|
-
*/
|
|
38935
|
-
const COMPUTING = /* @__PURE__ */ Symbol('COMPUTING');
|
|
38936
|
-
/**
|
|
38937
|
-
* A dedicated symbol used in place of a computed signal value to indicate that a given computation
|
|
38938
|
-
* failed. The thrown error is cached until the computation gets dirty again.
|
|
38939
|
-
* Explicitly typed as `any` so we can use it as signal's value.
|
|
38940
|
-
*/
|
|
38941
|
-
const ERRORED = /* @__PURE__ */ Symbol('ERRORED');
|
|
38942
|
-
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
38943
|
-
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
38944
|
-
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
38945
|
-
const COMPUTED_NODE = /* @__PURE__ */ (() => {
|
|
38946
|
-
return {
|
|
38947
|
-
...REACTIVE_NODE,
|
|
38948
|
-
value: UNSET,
|
|
38949
|
-
dirty: true,
|
|
38950
|
-
error: null,
|
|
38951
|
-
equal: defaultEquals,
|
|
38952
|
-
kind: 'computed',
|
|
38953
|
-
producerMustRecompute(node) {
|
|
38954
|
-
// Force a recomputation if there's no current value, or if the current value is in the
|
|
38955
|
-
// process of being calculated (which should throw an error).
|
|
38956
|
-
return node.value === UNSET || node.value === COMPUTING;
|
|
38957
|
-
},
|
|
38958
|
-
producerRecomputeValue(node) {
|
|
38959
|
-
if (node.value === COMPUTING) {
|
|
38960
|
-
// Our computation somehow led to a cyclic read of itself.
|
|
38961
|
-
throw new Error('Detected cycle in computations.');
|
|
38962
|
-
}
|
|
38963
|
-
const oldValue = node.value;
|
|
38964
|
-
node.value = COMPUTING;
|
|
38965
|
-
const prevConsumer = consumerBeforeComputation(node);
|
|
38966
|
-
let newValue;
|
|
38967
|
-
let wasEqual = false;
|
|
38968
|
-
try {
|
|
38969
|
-
newValue = node.computation();
|
|
38970
|
-
// We want to mark this node as errored if calling `equal` throws; however, we don't want
|
|
38971
|
-
// to track any reactive reads inside `equal`.
|
|
38972
|
-
setActiveConsumer(null);
|
|
38973
|
-
wasEqual =
|
|
38974
|
-
oldValue !== UNSET &&
|
|
38975
|
-
oldValue !== ERRORED &&
|
|
38976
|
-
newValue !== ERRORED &&
|
|
38977
|
-
node.equal(oldValue, newValue);
|
|
38978
|
-
}
|
|
38979
|
-
catch (err) {
|
|
38980
|
-
newValue = ERRORED;
|
|
38981
|
-
node.error = err;
|
|
38982
|
-
}
|
|
38983
|
-
finally {
|
|
38984
|
-
consumerAfterComputation(node, prevConsumer);
|
|
38985
|
-
}
|
|
38986
|
-
if (wasEqual) {
|
|
38987
|
-
// No change to `valueVersion` - old and new values are
|
|
38988
|
-
// semantically equivalent.
|
|
38989
|
-
node.value = oldValue;
|
|
38990
|
-
return;
|
|
38991
|
-
}
|
|
38992
|
-
node.value = newValue;
|
|
38993
|
-
node.version++;
|
|
38994
|
-
},
|
|
38995
|
-
};
|
|
38996
|
-
})();
|
|
38997
|
-
|
|
38998
|
-
function defaultThrowError() {
|
|
38999
|
-
throw new Error();
|
|
39000
|
-
}
|
|
39001
|
-
let throwInvalidWriteToSignalErrorFn = defaultThrowError;
|
|
39002
|
-
function throwInvalidWriteToSignalError(node) {
|
|
39003
|
-
throwInvalidWriteToSignalErrorFn(node);
|
|
39004
|
-
}
|
|
39005
|
-
function setThrowInvalidWriteToSignalError(fn) {
|
|
39006
|
-
throwInvalidWriteToSignalErrorFn = fn;
|
|
39007
|
-
}
|
|
39008
|
-
|
|
39009
|
-
/**
|
|
39010
|
-
* If set, called after `WritableSignal`s are updated.
|
|
39011
|
-
*
|
|
39012
|
-
* This hook can be used to achieve various effects, such as running effects synchronously as part
|
|
39013
|
-
* of setting a signal.
|
|
39014
|
-
*/
|
|
39015
|
-
let postSignalSetFn = null;
|
|
39016
|
-
/**
|
|
39017
|
-
* Create a `Signal` that can be set or updated directly.
|
|
39018
|
-
*/
|
|
39019
|
-
function createSignal(initialValue) {
|
|
39020
|
-
const node = Object.create(SIGNAL_NODE);
|
|
39021
|
-
node.value = initialValue;
|
|
39022
|
-
const getter = (() => {
|
|
39023
|
-
producerAccessed(node);
|
|
39024
|
-
return node.value;
|
|
39025
|
-
});
|
|
39026
|
-
getter[SIGNAL] = node;
|
|
39027
|
-
return getter;
|
|
39028
|
-
}
|
|
39029
|
-
function setPostSignalSetFn(fn) {
|
|
39030
|
-
const prev = postSignalSetFn;
|
|
39031
|
-
postSignalSetFn = fn;
|
|
39032
|
-
return prev;
|
|
39033
|
-
}
|
|
39034
|
-
function signalGetFn() {
|
|
39035
|
-
producerAccessed(this);
|
|
39036
|
-
return this.value;
|
|
39037
|
-
}
|
|
39038
|
-
function signalSetFn(node, newValue) {
|
|
39039
|
-
if (!producerUpdatesAllowed()) {
|
|
39040
|
-
throwInvalidWriteToSignalError(node);
|
|
39041
|
-
}
|
|
39042
|
-
if (!node.equal(node.value, newValue)) {
|
|
39043
|
-
node.value = newValue;
|
|
39044
|
-
signalValueChanged(node);
|
|
39045
|
-
}
|
|
39046
|
-
}
|
|
39047
|
-
function signalUpdateFn(node, updater) {
|
|
39048
|
-
if (!producerUpdatesAllowed()) {
|
|
39049
|
-
throwInvalidWriteToSignalError(node);
|
|
39050
|
-
}
|
|
39051
|
-
signalSetFn(node, updater(node.value));
|
|
39052
|
-
}
|
|
39053
|
-
function runPostSignalSetFn() {
|
|
39054
|
-
postSignalSetFn?.();
|
|
39055
|
-
}
|
|
39056
|
-
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
39057
|
-
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
39058
|
-
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
39059
|
-
const SIGNAL_NODE = /* @__PURE__ */ (() => {
|
|
39060
|
-
return {
|
|
39061
|
-
...REACTIVE_NODE,
|
|
39062
|
-
equal: defaultEquals,
|
|
39063
|
-
value: undefined,
|
|
39064
|
-
kind: 'signal',
|
|
39065
|
-
};
|
|
39066
|
-
})();
|
|
39067
|
-
function signalValueChanged(node) {
|
|
39068
|
-
node.version++;
|
|
39069
|
-
producerIncrementEpoch();
|
|
39070
|
-
producerNotifyConsumers(node);
|
|
39071
|
-
postSignalSetFn?.();
|
|
39072
|
-
}
|
|
39073
|
-
|
|
39074
|
-
function createLinkedSignal(sourceFn, computationFn, equalityFn) {
|
|
39075
|
-
const node = Object.create(LINKED_SIGNAL_NODE);
|
|
39076
|
-
node.source = sourceFn;
|
|
39077
|
-
node.computation = computationFn;
|
|
39078
|
-
if (equalityFn != undefined) {
|
|
39079
|
-
node.equal = equalityFn;
|
|
39080
|
-
}
|
|
39081
|
-
const linkedSignalGetter = () => {
|
|
39082
|
-
// Check if the value needs updating before returning it.
|
|
39083
|
-
producerUpdateValueVersion(node);
|
|
39084
|
-
// Record that someone looked at this signal.
|
|
39085
|
-
producerAccessed(node);
|
|
39086
|
-
if (node.value === ERRORED) {
|
|
39087
|
-
throw node.error;
|
|
39088
|
-
}
|
|
39089
|
-
return node.value;
|
|
39090
|
-
};
|
|
39091
|
-
const getter = linkedSignalGetter;
|
|
39092
|
-
getter[SIGNAL] = node;
|
|
39093
|
-
return getter;
|
|
39094
|
-
}
|
|
39095
|
-
function linkedSignalSetFn(node, newValue) {
|
|
39096
|
-
producerUpdateValueVersion(node);
|
|
39097
|
-
signalSetFn(node, newValue);
|
|
39098
|
-
producerMarkClean(node);
|
|
39099
|
-
}
|
|
39100
|
-
function linkedSignalUpdateFn(node, updater) {
|
|
39101
|
-
producerUpdateValueVersion(node);
|
|
39102
|
-
signalUpdateFn(node, updater);
|
|
39103
|
-
producerMarkClean(node);
|
|
39104
|
-
}
|
|
39105
|
-
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
39106
|
-
// a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`.
|
|
39107
|
-
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
39108
|
-
const LINKED_SIGNAL_NODE = /* @__PURE__ */ (() => {
|
|
39109
|
-
return {
|
|
39110
|
-
...REACTIVE_NODE,
|
|
39111
|
-
value: UNSET,
|
|
39112
|
-
dirty: true,
|
|
39113
|
-
error: null,
|
|
39114
|
-
equal: defaultEquals,
|
|
39115
|
-
producerMustRecompute(node) {
|
|
39116
|
-
// Force a recomputation if there's no current value, or if the current value is in the
|
|
39117
|
-
// process of being calculated (which should throw an error).
|
|
39118
|
-
return node.value === UNSET || node.value === COMPUTING;
|
|
39119
|
-
},
|
|
39120
|
-
producerRecomputeValue(node) {
|
|
39121
|
-
if (node.value === COMPUTING) {
|
|
39122
|
-
// Our computation somehow led to a cyclic read of itself.
|
|
39123
|
-
throw new Error('Detected cycle in computations.');
|
|
39124
|
-
}
|
|
39125
|
-
const oldValue = node.value;
|
|
39126
|
-
node.value = COMPUTING;
|
|
39127
|
-
const prevConsumer = consumerBeforeComputation(node);
|
|
39128
|
-
let newValue;
|
|
39129
|
-
try {
|
|
39130
|
-
const newSourceValue = node.source();
|
|
39131
|
-
const prev = oldValue === UNSET || oldValue === ERRORED
|
|
39132
|
-
? undefined
|
|
39133
|
-
: {
|
|
39134
|
-
source: node.sourceValue,
|
|
39135
|
-
value: oldValue,
|
|
39136
|
-
};
|
|
39137
|
-
newValue = node.computation(newSourceValue, prev);
|
|
39138
|
-
node.sourceValue = newSourceValue;
|
|
39139
|
-
}
|
|
39140
|
-
catch (err) {
|
|
39141
|
-
newValue = ERRORED;
|
|
39142
|
-
node.error = err;
|
|
39143
|
-
}
|
|
39144
|
-
finally {
|
|
39145
|
-
consumerAfterComputation(node, prevConsumer);
|
|
39146
|
-
}
|
|
39147
|
-
if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {
|
|
39148
|
-
// No change to `valueVersion` - old and new values are
|
|
39149
|
-
// semantically equivalent.
|
|
39150
|
-
node.value = oldValue;
|
|
39151
|
-
return;
|
|
39152
|
-
}
|
|
39153
|
-
node.value = newValue;
|
|
39154
|
-
node.version++;
|
|
39155
|
-
},
|
|
39156
|
-
};
|
|
39157
|
-
})();
|
|
39158
|
-
|
|
39159
|
-
function createWatch(fn, schedule, allowSignalWrites) {
|
|
39160
|
-
const node = Object.create(WATCH_NODE);
|
|
39161
|
-
if (allowSignalWrites) {
|
|
39162
|
-
node.consumerAllowSignalWrites = true;
|
|
39163
|
-
}
|
|
39164
|
-
node.fn = fn;
|
|
39165
|
-
node.schedule = schedule;
|
|
39166
|
-
const registerOnCleanup = (cleanupFn) => {
|
|
39167
|
-
node.cleanupFn = cleanupFn;
|
|
39168
|
-
};
|
|
39169
|
-
function isWatchNodeDestroyed(node) {
|
|
39170
|
-
return node.fn === null && node.schedule === null;
|
|
39171
|
-
}
|
|
39172
|
-
function destroyWatchNode(node) {
|
|
39173
|
-
if (!isWatchNodeDestroyed(node)) {
|
|
39174
|
-
consumerDestroy(node); // disconnect watcher from the reactive graph
|
|
39175
|
-
node.cleanupFn();
|
|
39176
|
-
// nullify references to the integration functions to mark node as destroyed
|
|
39177
|
-
node.fn = null;
|
|
39178
|
-
node.schedule = null;
|
|
39179
|
-
node.cleanupFn = NOOP_CLEANUP_FN;
|
|
39180
|
-
}
|
|
39181
|
-
}
|
|
39182
|
-
const run = () => {
|
|
39183
|
-
if (node.fn === null) {
|
|
39184
|
-
// trying to run a destroyed watch is noop
|
|
39185
|
-
return;
|
|
39186
|
-
}
|
|
39187
|
-
if (isInNotificationPhase()) {
|
|
39188
|
-
throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);
|
|
39189
|
-
}
|
|
39190
|
-
node.dirty = false;
|
|
39191
|
-
if (node.hasRun && !consumerPollProducersForChange(node)) {
|
|
39192
|
-
return;
|
|
39193
|
-
}
|
|
39194
|
-
node.hasRun = true;
|
|
39195
|
-
const prevConsumer = consumerBeforeComputation(node);
|
|
39196
|
-
try {
|
|
39197
|
-
node.cleanupFn();
|
|
39198
|
-
node.cleanupFn = NOOP_CLEANUP_FN;
|
|
39199
|
-
node.fn(registerOnCleanup);
|
|
39200
|
-
}
|
|
39201
|
-
finally {
|
|
39202
|
-
consumerAfterComputation(node, prevConsumer);
|
|
39203
|
-
}
|
|
39204
|
-
};
|
|
39205
|
-
node.ref = {
|
|
39206
|
-
notify: () => consumerMarkDirty(node),
|
|
39207
|
-
run,
|
|
39208
|
-
cleanup: () => node.cleanupFn(),
|
|
39209
|
-
destroy: () => destroyWatchNode(node),
|
|
39210
|
-
[SIGNAL]: node,
|
|
39211
|
-
};
|
|
39212
|
-
return node.ref;
|
|
39213
|
-
}
|
|
39214
|
-
const NOOP_CLEANUP_FN = () => { };
|
|
39215
|
-
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
39216
|
-
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
39217
|
-
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
39218
|
-
const WATCH_NODE = /* @__PURE__ */ (() => {
|
|
39219
|
-
return {
|
|
39220
|
-
...REACTIVE_NODE,
|
|
39221
|
-
consumerIsAlwaysLive: true,
|
|
39222
|
-
consumerAllowSignalWrites: false,
|
|
39223
|
-
consumerMarkedDirty: (node) => {
|
|
39224
|
-
if (node.schedule !== null) {
|
|
39225
|
-
node.schedule(node.ref);
|
|
39226
|
-
}
|
|
39227
|
-
},
|
|
39228
|
-
hasRun: false,
|
|
39229
|
-
cleanupFn: NOOP_CLEANUP_FN,
|
|
39230
|
-
};
|
|
39231
|
-
})();
|
|
39232
|
-
|
|
39233
|
-
function setAlternateWeakRefImpl(impl) {
|
|
39234
|
-
// TODO: remove this function
|
|
39235
|
-
}
|
|
39236
|
-
|
|
39237
38031
|
/**
|
|
39238
38032
|
* Internal create application API that implements the core application creation logic and optional
|
|
39239
38033
|
* bootstrap logic.
|
|
@@ -39328,8 +38122,8 @@ function withEventReplay() {
|
|
|
39328
38122
|
providers.push({
|
|
39329
38123
|
provide: ENVIRONMENT_INITIALIZER,
|
|
39330
38124
|
useValue: () => {
|
|
39331
|
-
const
|
|
39332
|
-
const
|
|
38125
|
+
const appRef = inject(ApplicationRef);
|
|
38126
|
+
const { injector } = appRef;
|
|
39333
38127
|
// We have to check for the appRef here due to the possibility of multiple apps
|
|
39334
38128
|
// being present on the same page. We only want to enable event replay for the
|
|
39335
38129
|
// apps that actually want it.
|
|
@@ -39353,8 +38147,8 @@ function withEventReplay() {
|
|
|
39353
38147
|
provide: APP_BOOTSTRAP_LISTENER,
|
|
39354
38148
|
useFactory: () => {
|
|
39355
38149
|
const appId = inject(APP_ID);
|
|
39356
|
-
const injector = inject(Injector);
|
|
39357
38150
|
const appRef = inject(ApplicationRef);
|
|
38151
|
+
const { injector } = appRef;
|
|
39358
38152
|
return () => {
|
|
39359
38153
|
// We have to check for the appRef here due to the possibility of multiple apps
|
|
39360
38154
|
// being present on the same page. We only want to enable event replay for the
|
|
@@ -39381,6 +38175,15 @@ function withEventReplay() {
|
|
|
39381
38175
|
// of the application is completed. This timing is similar to the unclaimed
|
|
39382
38176
|
// dehydrated views cleanup timing.
|
|
39383
38177
|
appRef.whenStable().then(() => {
|
|
38178
|
+
// Note: we have to check whether the application is destroyed before
|
|
38179
|
+
// performing other operations with the `injector`.
|
|
38180
|
+
// The application may be destroyed **before** it becomes stable, so when
|
|
38181
|
+
// the `whenStable` resolves, the injector might already be in
|
|
38182
|
+
// a destroyed state. Thus, calling `injector.get` would throw an error
|
|
38183
|
+
// indicating that the injector has already been destroyed.
|
|
38184
|
+
if (appRef.destroyed) {
|
|
38185
|
+
return;
|
|
38186
|
+
}
|
|
39384
38187
|
const eventContractDetails = injector.get(JSACTION_EVENT_CONTRACT);
|
|
39385
38188
|
initEventReplay(eventContractDetails, injector);
|
|
39386
38189
|
const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);
|
|
@@ -39585,7 +38388,7 @@ function annotateComponentLViewForHydration(lView, context, injector) {
|
|
|
39585
38388
|
function annotateLContainerForHydration(lContainer, context, injector) {
|
|
39586
38389
|
const componentLView = unwrapLView(lContainer[HOST]);
|
|
39587
38390
|
// Serialize the root component itself.
|
|
39588
|
-
const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context
|
|
38391
|
+
const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context);
|
|
39589
38392
|
if (componentLViewNghIndex === null) {
|
|
39590
38393
|
// Component was not serialized (for example, if hydration was skipped by adding
|
|
39591
38394
|
// the `ngSkipHydration` attribute or this component uses i18n blocks in the template,
|
|
@@ -39632,7 +38435,7 @@ function annotateForHydration(appRef, doc) {
|
|
|
39632
38435
|
capture: new Set(),
|
|
39633
38436
|
};
|
|
39634
38437
|
const deferBlocks = new Map();
|
|
39635
|
-
|
|
38438
|
+
appRef.injector.get(APP_ID);
|
|
39636
38439
|
for (const viewRef of viewRefs) {
|
|
39637
38440
|
const lNode = getLNodeForHydration(viewRef);
|
|
39638
38441
|
// An `lView` might be `null` if a `ViewRef` represents
|
|
@@ -39646,14 +38449,13 @@ function annotateForHydration(appRef, doc) {
|
|
|
39646
38449
|
i18nChildren: new Map(),
|
|
39647
38450
|
eventTypesToReplay,
|
|
39648
38451
|
shouldReplayEvents,
|
|
39649
|
-
appId,
|
|
39650
38452
|
deferBlocks,
|
|
39651
38453
|
};
|
|
39652
38454
|
if (isLContainer(lNode)) {
|
|
39653
|
-
annotateLContainerForHydration(lNode, context
|
|
38455
|
+
annotateLContainerForHydration(lNode, context);
|
|
39654
38456
|
}
|
|
39655
38457
|
else {
|
|
39656
|
-
annotateComponentLViewForHydration(lNode, context
|
|
38458
|
+
annotateComponentLViewForHydration(lNode, context);
|
|
39657
38459
|
}
|
|
39658
38460
|
insertCorruptedTextNodeMarkers(corruptedTextNodes, doc);
|
|
39659
38461
|
}
|
|
@@ -39708,7 +38510,7 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
|
|
|
39708
38510
|
// `<app-root /><#VIEW1><#VIEW2>...<!--container-->`
|
|
39709
38511
|
// The `+1` is to capture the `<app-root />` element.
|
|
39710
38512
|
numRootNodes = calcNumRootNodesInLContainer(childLView) + 1;
|
|
39711
|
-
annotateLContainerForHydration(childLView, context
|
|
38513
|
+
annotateLContainerForHydration(childLView, context);
|
|
39712
38514
|
const componentLView = unwrapLView(childLView[HOST]);
|
|
39713
38515
|
serializedView = {
|
|
39714
38516
|
[TEMPLATE_ID]: componentLView[TVIEW].ssrId,
|
|
@@ -40321,7 +39123,7 @@ function withDomHydration() {
|
|
|
40321
39123
|
return;
|
|
40322
39124
|
}
|
|
40323
39125
|
if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
|
|
40324
|
-
verifySsrContentsIntegrity();
|
|
39126
|
+
verifySsrContentsIntegrity(getDocument());
|
|
40325
39127
|
enableHydrationRuntimeSupport();
|
|
40326
39128
|
}
|
|
40327
39129
|
else if (typeof ngDevMode !== 'undefined' && ngDevMode && !isClientRenderModeEnabled()) {
|
|
@@ -40463,35 +39265,6 @@ function logWarningOnStableTimedout(time, console) {
|
|
|
40463
39265
|
`as a signal to complete hydration process.`;
|
|
40464
39266
|
console.warn(formatRuntimeError(-506 /* RuntimeErrorCode.HYDRATION_STABLE_TIMEDOUT */, message));
|
|
40465
39267
|
}
|
|
40466
|
-
/**
|
|
40467
|
-
* Verifies whether the DOM contains a special marker added during SSR time to make sure
|
|
40468
|
-
* there is no SSR'ed contents transformations happen after SSR is completed. Typically that
|
|
40469
|
-
* happens either by CDN or during the build process as an optimization to remove comment nodes.
|
|
40470
|
-
* Hydration process requires comment nodes produced by Angular to locate correct DOM segments.
|
|
40471
|
-
* When this special marker is *not* present - throw an error and do not proceed with hydration,
|
|
40472
|
-
* since it will not be able to function correctly.
|
|
40473
|
-
*
|
|
40474
|
-
* Note: this function is invoked only on the client, so it's safe to use DOM APIs.
|
|
40475
|
-
*/
|
|
40476
|
-
function verifySsrContentsIntegrity() {
|
|
40477
|
-
const doc = getDocument();
|
|
40478
|
-
let hydrationMarker;
|
|
40479
|
-
for (const node of doc.body.childNodes) {
|
|
40480
|
-
if (node.nodeType === Node.COMMENT_NODE &&
|
|
40481
|
-
node.textContent?.trim() === SSR_CONTENT_INTEGRITY_MARKER) {
|
|
40482
|
-
hydrationMarker = node;
|
|
40483
|
-
break;
|
|
40484
|
-
}
|
|
40485
|
-
}
|
|
40486
|
-
if (!hydrationMarker) {
|
|
40487
|
-
throw new RuntimeError(-507 /* RuntimeErrorCode.MISSING_SSR_CONTENT_INTEGRITY_MARKER */, typeof ngDevMode !== 'undefined' &&
|
|
40488
|
-
ngDevMode &&
|
|
40489
|
-
'Angular hydration logic detected that HTML content of this page was modified after it ' +
|
|
40490
|
-
'was produced during server side rendering. Make sure that there are no optimizations ' +
|
|
40491
|
-
'that remove comment nodes from HTML enabled on your CDN. Angular hydration ' +
|
|
40492
|
-
'relies on HTML produced by the server, including whitespaces and comment nodes.');
|
|
40493
|
-
}
|
|
40494
|
-
}
|
|
40495
39268
|
|
|
40496
39269
|
/**
|
|
40497
39270
|
* Transforms a value (typically a string) to a boolean.
|
|
@@ -40592,37 +39365,21 @@ function disableProfiling() {
|
|
|
40592
39365
|
* can, optionally, return a value.
|
|
40593
39366
|
*/
|
|
40594
39367
|
function untracked(nonReactiveReadsFn) {
|
|
40595
|
-
|
|
40596
|
-
// We are not trying to catch any particular errors here, just making sure that the consumers
|
|
40597
|
-
// stack is restored in case of errors.
|
|
40598
|
-
try {
|
|
40599
|
-
return nonReactiveReadsFn();
|
|
40600
|
-
}
|
|
40601
|
-
finally {
|
|
40602
|
-
setActiveConsumer$1(prevConsumer);
|
|
40603
|
-
}
|
|
39368
|
+
return untracked$1(nonReactiveReadsFn);
|
|
40604
39369
|
}
|
|
40605
39370
|
|
|
40606
39371
|
/**
|
|
40607
39372
|
* Create a computed `Signal` which derives a reactive value from an expression.
|
|
40608
39373
|
*/
|
|
40609
39374
|
function computed(computation, options) {
|
|
40610
|
-
const getter = createComputed
|
|
40611
|
-
if (options?.equal) {
|
|
40612
|
-
getter[SIGNAL$1].equal = options.equal;
|
|
40613
|
-
}
|
|
39375
|
+
const getter = createComputed(computation, options?.equal);
|
|
40614
39376
|
if (ngDevMode) {
|
|
40615
39377
|
getter.toString = () => `[Computed: ${getter()}]`;
|
|
40616
|
-
getter[SIGNAL
|
|
39378
|
+
getter[SIGNAL].debugName = options?.debugName;
|
|
40617
39379
|
}
|
|
40618
39380
|
return getter;
|
|
40619
39381
|
}
|
|
40620
39382
|
|
|
40621
|
-
/**
|
|
40622
|
-
* Controls whether effects use the legacy `microtaskEffect` by default.
|
|
40623
|
-
*/
|
|
40624
|
-
const USE_MICROTASK_EFFECT_BY_DEFAULT = false;
|
|
40625
|
-
|
|
40626
39383
|
class MicrotaskEffectScheduler extends ZoneAwareEffectScheduler {
|
|
40627
39384
|
pendingTasks = inject(PendingTasksInternal);
|
|
40628
39385
|
taskId = null;
|
|
@@ -40671,7 +39428,7 @@ class EffectHandle {
|
|
|
40671
39428
|
this.effectFn = effectFn;
|
|
40672
39429
|
this.zone = zone;
|
|
40673
39430
|
this.injector = injector;
|
|
40674
|
-
this.watcher = createWatch
|
|
39431
|
+
this.watcher = createWatch((onCleanup) => this.runEffect(onCleanup), () => this.schedule(), allowSignalWrites);
|
|
40675
39432
|
this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
|
|
40676
39433
|
}
|
|
40677
39434
|
runEffect(onCleanup) {
|
|
@@ -40733,22 +39490,13 @@ function microtaskEffect(effectFn, options) {
|
|
|
40733
39490
|
return handle;
|
|
40734
39491
|
}
|
|
40735
39492
|
|
|
40736
|
-
let useMicrotaskEffectsByDefault = USE_MICROTASK_EFFECT_BY_DEFAULT;
|
|
40737
|
-
/**
|
|
40738
|
-
* Toggle the flag on whether to use microtask effects (for testing).
|
|
40739
|
-
*/
|
|
40740
|
-
function setUseMicrotaskEffectsByDefault(value) {
|
|
40741
|
-
const prev = useMicrotaskEffectsByDefault;
|
|
40742
|
-
useMicrotaskEffectsByDefault = value;
|
|
40743
|
-
return prev;
|
|
40744
|
-
}
|
|
40745
39493
|
class EffectRefImpl {
|
|
40746
|
-
[SIGNAL
|
|
39494
|
+
[SIGNAL];
|
|
40747
39495
|
constructor(node) {
|
|
40748
|
-
this[SIGNAL
|
|
39496
|
+
this[SIGNAL] = node;
|
|
40749
39497
|
}
|
|
40750
39498
|
destroy() {
|
|
40751
|
-
this[SIGNAL
|
|
39499
|
+
this[SIGNAL].destroy();
|
|
40752
39500
|
}
|
|
40753
39501
|
}
|
|
40754
39502
|
/**
|
|
@@ -40770,12 +39518,6 @@ class EffectRefImpl {
|
|
|
40770
39518
|
* @developerPreview
|
|
40771
39519
|
*/
|
|
40772
39520
|
function effect(effectFn, options) {
|
|
40773
|
-
if (useMicrotaskEffectsByDefault) {
|
|
40774
|
-
if (ngDevMode && options?.forceRoot) {
|
|
40775
|
-
throw new Error(`Cannot use 'forceRoot' option with microtask effects on`);
|
|
40776
|
-
}
|
|
40777
|
-
return microtaskEffect(effectFn, options);
|
|
40778
|
-
}
|
|
40779
39521
|
ngDevMode &&
|
|
40780
39522
|
assertNotInReactiveContext(effect, 'Call `effect` outside of a reactive context. For example, schedule the ' +
|
|
40781
39523
|
'effect inside the component constructor.');
|
|
@@ -40823,13 +39565,13 @@ function effect(effectFn, options) {
|
|
|
40823
39565
|
* Not public API, which guarantees `EffectScheduler` only ever comes from the application root
|
|
40824
39566
|
* injector.
|
|
40825
39567
|
*/
|
|
40826
|
-
|
|
39568
|
+
/* @__PURE__ */ new InjectionToken('', {
|
|
40827
39569
|
providedIn: 'root',
|
|
40828
39570
|
factory: () => inject(EffectScheduler),
|
|
40829
39571
|
});
|
|
40830
39572
|
const BASE_EFFECT_NODE =
|
|
40831
39573
|
/* @__PURE__ */ (() => ({
|
|
40832
|
-
...REACTIVE_NODE
|
|
39574
|
+
...REACTIVE_NODE,
|
|
40833
39575
|
consumerIsAlwaysLive: true,
|
|
40834
39576
|
consumerAllowSignalWrites: true,
|
|
40835
39577
|
dirty: true,
|
|
@@ -40840,15 +39582,15 @@ const BASE_EFFECT_NODE =
|
|
|
40840
39582
|
onDestroyFn: noop,
|
|
40841
39583
|
run() {
|
|
40842
39584
|
this.dirty = false;
|
|
40843
|
-
if (ngDevMode && isInNotificationPhase
|
|
39585
|
+
if (ngDevMode && isInNotificationPhase()) {
|
|
40844
39586
|
throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);
|
|
40845
39587
|
}
|
|
40846
|
-
if (this.hasRun && !consumerPollProducersForChange
|
|
39588
|
+
if (this.hasRun && !consumerPollProducersForChange(this)) {
|
|
40847
39589
|
return;
|
|
40848
39590
|
}
|
|
40849
39591
|
this.hasRun = true;
|
|
40850
39592
|
const registerCleanupFn = (cleanupFn) => (this.cleanupFns ??= []).push(cleanupFn);
|
|
40851
|
-
const prevNode = consumerBeforeComputation
|
|
39593
|
+
const prevNode = consumerBeforeComputation(this);
|
|
40852
39594
|
// We clear `setIsRefreshingViews` so that `markForCheck()` within the body of an effect will
|
|
40853
39595
|
// cause CD to reach the component in question.
|
|
40854
39596
|
const prevRefreshingViews = setIsRefreshingViews(false);
|
|
@@ -40858,7 +39600,7 @@ const BASE_EFFECT_NODE =
|
|
|
40858
39600
|
}
|
|
40859
39601
|
finally {
|
|
40860
39602
|
setIsRefreshingViews(prevRefreshingViews);
|
|
40861
|
-
consumerAfterComputation
|
|
39603
|
+
consumerAfterComputation(this, prevNode);
|
|
40862
39604
|
}
|
|
40863
39605
|
},
|
|
40864
39606
|
maybeCleanup() {
|
|
@@ -40886,7 +39628,7 @@ const ROOT_EFFECT_NODE =
|
|
|
40886
39628
|
this.notifier.notify(12 /* NotificationSource.RootEffect */);
|
|
40887
39629
|
},
|
|
40888
39630
|
destroy() {
|
|
40889
|
-
consumerDestroy
|
|
39631
|
+
consumerDestroy(this);
|
|
40890
39632
|
this.onDestroyFn();
|
|
40891
39633
|
this.maybeCleanup();
|
|
40892
39634
|
this.scheduler.remove(this);
|
|
@@ -40901,7 +39643,7 @@ const VIEW_EFFECT_NODE =
|
|
|
40901
39643
|
this.notifier.notify(13 /* NotificationSource.ViewEffect */);
|
|
40902
39644
|
},
|
|
40903
39645
|
destroy() {
|
|
40904
|
-
consumerDestroy
|
|
39646
|
+
consumerDestroy(this);
|
|
40905
39647
|
this.onDestroyFn();
|
|
40906
39648
|
this.maybeCleanup();
|
|
40907
39649
|
this.view[EFFECTS]?.delete(this);
|
|
@@ -40973,11 +39715,11 @@ var ResourceStatus;
|
|
|
40973
39715
|
const identityFn = (v) => v;
|
|
40974
39716
|
function linkedSignal(optionsOrComputation, options) {
|
|
40975
39717
|
if (typeof optionsOrComputation === 'function') {
|
|
40976
|
-
const getter = createLinkedSignal
|
|
39718
|
+
const getter = createLinkedSignal(optionsOrComputation, (identityFn), options?.equal);
|
|
40977
39719
|
return upgradeLinkedSignalGetter(getter);
|
|
40978
39720
|
}
|
|
40979
39721
|
else {
|
|
40980
|
-
const getter = createLinkedSignal
|
|
39722
|
+
const getter = createLinkedSignal(optionsOrComputation.source, optionsOrComputation.computation, optionsOrComputation.equal);
|
|
40981
39723
|
return upgradeLinkedSignalGetter(getter);
|
|
40982
39724
|
}
|
|
40983
39725
|
}
|
|
@@ -40985,10 +39727,10 @@ function upgradeLinkedSignalGetter(getter) {
|
|
|
40985
39727
|
if (ngDevMode) {
|
|
40986
39728
|
getter.toString = () => `[LinkedSignal: ${getter()}]`;
|
|
40987
39729
|
}
|
|
40988
|
-
const node = getter[SIGNAL
|
|
39730
|
+
const node = getter[SIGNAL];
|
|
40989
39731
|
const upgradedGetter = getter;
|
|
40990
|
-
upgradedGetter.set = (newValue) => linkedSignalSetFn
|
|
40991
|
-
upgradedGetter.update = (updateFn) => linkedSignalUpdateFn
|
|
39732
|
+
upgradedGetter.set = (newValue) => linkedSignalSetFn(node, newValue);
|
|
39733
|
+
upgradedGetter.update = (updateFn) => linkedSignalUpdateFn(node, updateFn);
|
|
40992
39734
|
upgradedGetter.asReadonly = signalAsReadonlyFn.bind(getter);
|
|
40993
39735
|
return upgradedGetter;
|
|
40994
39736
|
}
|
|
@@ -41430,12 +40172,10 @@ function ɵɵngDeclarePipe(decl) {
|
|
|
41430
40172
|
return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵpipe.js`, decl);
|
|
41431
40173
|
}
|
|
41432
40174
|
|
|
41433
|
-
// we reexport these symbols just so that they are retained during the dead code elimination
|
|
41434
|
-
|
|
41435
40175
|
const NOT_SET = Symbol('NOT_SET');
|
|
41436
40176
|
const EMPTY_CLEANUP_SET = new Set();
|
|
41437
40177
|
const AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */ (() => ({
|
|
41438
|
-
...SIGNAL_NODE
|
|
40178
|
+
...SIGNAL_NODE,
|
|
41439
40179
|
consumerIsAlwaysLive: true,
|
|
41440
40180
|
consumerAllowSignalWrites: true,
|
|
41441
40181
|
value: NOT_SET,
|
|
@@ -41463,7 +40203,7 @@ const AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */ (() => ({
|
|
|
41463
40203
|
return this.signal;
|
|
41464
40204
|
}
|
|
41465
40205
|
this.dirty = false;
|
|
41466
|
-
if (this.value !== NOT_SET && !consumerPollProducersForChange
|
|
40206
|
+
if (this.value !== NOT_SET && !consumerPollProducersForChange(this)) {
|
|
41467
40207
|
// None of our producers report a change since the last time they were read, so no
|
|
41468
40208
|
// recomputation of our value is necessary.
|
|
41469
40209
|
return this.signal;
|
|
@@ -41486,13 +40226,13 @@ const AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */ (() => ({
|
|
|
41486
40226
|
}
|
|
41487
40227
|
args.push(this.registerCleanupFn);
|
|
41488
40228
|
// Call the user's callback in our reactive context.
|
|
41489
|
-
const prevConsumer = consumerBeforeComputation
|
|
40229
|
+
const prevConsumer = consumerBeforeComputation(this);
|
|
41490
40230
|
let newValue;
|
|
41491
40231
|
try {
|
|
41492
40232
|
newValue = this.userFn.apply(null, args);
|
|
41493
40233
|
}
|
|
41494
40234
|
finally {
|
|
41495
|
-
consumerAfterComputation
|
|
40235
|
+
consumerAfterComputation(this, prevConsumer);
|
|
41496
40236
|
}
|
|
41497
40237
|
if (this.value === NOT_SET || !this.equal(this.value, newValue)) {
|
|
41498
40238
|
this.value = newValue;
|
|
@@ -41536,10 +40276,10 @@ class AfterRenderEffectSequence extends AfterRenderSequence {
|
|
|
41536
40276
|
node.userFn = effectHook;
|
|
41537
40277
|
node.dirty = true;
|
|
41538
40278
|
node.signal = (() => {
|
|
41539
|
-
producerAccessed
|
|
40279
|
+
producerAccessed(node);
|
|
41540
40280
|
return node.value;
|
|
41541
40281
|
});
|
|
41542
|
-
node.signal[SIGNAL
|
|
40282
|
+
node.signal[SIGNAL] = node;
|
|
41543
40283
|
node.registerCleanupFn = (fn) => (node.cleanup ??= new Set()).add(fn);
|
|
41544
40284
|
this.nodes[phase] = node;
|
|
41545
40285
|
// Install the upstream hook which runs the `phaseFn` for this phase.
|
|
@@ -41587,8 +40327,6 @@ function afterRenderEffect(callbackOrSpec, options) {
|
|
|
41587
40327
|
return sequence;
|
|
41588
40328
|
}
|
|
41589
40329
|
|
|
41590
|
-
// This file exists to allow the set of reactivity exports to be modified in g3, as these APIs are
|
|
41591
|
-
|
|
41592
40330
|
/**
|
|
41593
40331
|
* Creates a `ComponentRef` instance based on provided component type and a set of options.
|
|
41594
40332
|
*
|
|
@@ -41800,40 +40538,5 @@ const REQUEST_CONTEXT = new InjectionToken(typeof ngDevMode === 'undefined' || n
|
|
|
41800
40538
|
factory: () => null,
|
|
41801
40539
|
});
|
|
41802
40540
|
|
|
41803
|
-
/**
|
|
41804
|
-
* @module
|
|
41805
|
-
* @description
|
|
41806
|
-
* Entry point from which you should import all public core APIs.
|
|
41807
|
-
*/
|
|
41808
|
-
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
41809
|
-
// This helper is to give a reasonable error message to people upgrading to v9 that have not yet
|
|
41810
|
-
// installed `@angular/localize` in their app.
|
|
41811
|
-
// tslint:disable-next-line: no-toplevel-property-access
|
|
41812
|
-
_global.$localize ??= function () {
|
|
41813
|
-
throw new Error('It looks like your application or one of its dependencies is using i18n.\n' +
|
|
41814
|
-
'Angular 9 introduced a global `$localize()` function that needs to be loaded.\n' +
|
|
41815
|
-
'Please run `ng add @angular/localize` from the Angular CLI.\n' +
|
|
41816
|
-
"(For non-CLI projects, add `import '@angular/localize/init';` to your `polyfills.ts` file.\n" +
|
|
41817
|
-
'For server-side rendering applications add the import to your `main.server.ts` file.)');
|
|
41818
|
-
};
|
|
41819
|
-
}
|
|
41820
|
-
|
|
41821
|
-
/**
|
|
41822
|
-
* @module
|
|
41823
|
-
* @description
|
|
41824
|
-
* Entry point for all public APIs of this package.
|
|
41825
|
-
*/
|
|
41826
|
-
// This file only reexports content of the `src` folder. Keep it that way.
|
|
41827
|
-
|
|
41828
|
-
/* This file is not used to build this module. It is only used during editing
|
|
41829
|
-
* by the TypeScript language service and during build for verification. `ngc`
|
|
41830
|
-
* replaces this file with production index.ts when it rewrites private symbol
|
|
41831
|
-
* names.
|
|
41832
|
-
*/
|
|
41833
|
-
|
|
41834
|
-
/**
|
|
41835
|
-
* Generated bundle index. Do not edit.
|
|
41836
|
-
*/
|
|
41837
|
-
|
|
41838
|
-
export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, PendingTasks, Pipe, PlatformRef, Query, QueryList, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, Renderer2, RendererFactory2, RendererStyleFlags2, ResourceStatus, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, ViewRef, afterNextRender, afterRender, afterRenderEffect, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideEnvironmentInitializer, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, providePlatformInitializer, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, resource, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderManager as ɵAfterRenderManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, LContext as ɵLContext, 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 };
|
|
40541
|
+
export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, PendingTasks, Pipe, PlatformRef, Query, QueryList, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, Renderer2, RendererFactory2, RendererStyleFlags2, ResourceStatus, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, ViewRef, afterNextRender, afterRender, afterRenderEffect, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideEnvironmentInitializer, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, providePlatformInitializer, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, resource, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderManager as ɵAfterRenderManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, LContext as ɵLContext, 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, ɵ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 };
|
|
41839
40542
|
//# sourceMappingURL=core.mjs.map
|