@angular/core 19.2.0 → 19.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/core.mjs +317 -1646
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/di.mjs +45 -0
- package/fesm2022/primitives/di.mjs.map +1 -0
- package/fesm2022/primitives/event-dispatch.mjs +3 -590
- package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
- package/fesm2022/primitives/signals.mjs +19 -9
- package/fesm2022/primitives/signals.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +8 -12
- package/fesm2022/rxjs-interop.mjs.map +1 -1
- package/fesm2022/testing.mjs +387 -241
- 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 +14138 -14924
- package/navigation_types.d-u4EOrrdZ.d.ts +121 -0
- package/package.json +5 -1
- package/primitives/di/index.d.ts +91 -0
- package/primitives/event-dispatch/index.d.ts +206 -310
- package/primitives/signals/index.d.ts +159 -196
- package/rxjs-interop/index.d.ts +73 -92
- package/schematics/bundles/{apply_import_manager-a4e62ded.js → apply_import_manager-C8MABThs.js} +13 -17
- package/schematics/bundles/{checker-2eecc677.js → checker-DP-zos5Q.js} +2961 -1060
- package/schematics/bundles/cleanup-unused-imports.js +22 -28
- package/schematics/bundles/{compiler_host-f313eac9.js → compiler_host-DzM2hemp.js} +20 -24
- package/schematics/bundles/control-flow-migration.js +82 -39
- package/schematics/bundles/explicit-standalone-flag.js +27 -33
- package/schematics/bundles/{imports-31a38653.js → imports-CIX-JgAN.js} +10 -15
- package/schematics/bundles/{index-afc3f749.js → index-CEdDCtp8.js} +56 -60
- package/schematics/bundles/{index-3891dd55.js → index-CrKEaRj_.js} +5 -5
- package/schematics/bundles/inject-migration.js +122 -128
- package/schematics/bundles/{leading_space-6e7a8ec6.js → leading_space-D9nQ8UQC.js} +2 -2
- package/schematics/bundles/{migrate_ts_type_references-1abf1f5f.js → migrate_ts_type_references-C0325A9V.js} +107 -112
- package/schematics/bundles/{ng_decorators-6878e227.js → ng_decorators-DznZ5jMl.js} +5 -9
- package/schematics/bundles/{nodes-ffdce442.js → nodes-B16H9JUd.js} +3 -7
- package/schematics/bundles/output-migration.js +40 -46
- package/schematics/bundles/pending-tasks.js +14 -20
- package/schematics/bundles/{program-24da9092.js → program-CRYsSwIq.js} +769 -2634
- package/schematics/bundles/{project_paths-64bc3947.js → project_paths-BoRVJPjW.js} +26 -24
- package/schematics/bundles/{project_tsconfig_paths-6c9cde78.js → project_tsconfig_paths-CDVxT6Ov.js} +2 -2
- package/schematics/bundles/{property_name-42030525.js → property_name-BBwFuqMe.js} +4 -8
- package/schematics/bundles/provide-initializer.js +14 -20
- package/schematics/bundles/route-lazy-loading.js +36 -42
- package/schematics/bundles/self-closing-tags-migration.js +55 -45
- package/schematics/bundles/signal-input-migration.js +61 -68
- package/schematics/bundles/signal-queries-migration.js +48 -55
- package/schematics/bundles/signals.js +10 -12
- package/schematics/bundles/standalone-migration.js +179 -185
- package/testing/index.d.ts +309 -471
- package/weak_ref.d-ttyj86RV.d.ts +9 -0
package/fesm2022/core.mjs
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v19.2.
|
|
3
|
-
* (c) 2010-
|
|
2
|
+
* @license Angular v19.2.2
|
|
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, createWatch, isInNotificationPhase, createLinkedSignal, linkedSignalSetFn, linkedSignalUpdateFn } from '@angular/core/primitives/signals';
|
|
8
8
|
export { SIGNAL as ɵSIGNAL } from '@angular/core/primitives/signals';
|
|
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';
|
|
9
11
|
import { BehaviorSubject, Subject, Subscription } from 'rxjs';
|
|
10
|
-
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';
|
|
11
13
|
import { map } from 'rxjs/operators';
|
|
14
|
+
export { s as ɵsetAlternateWeakRefImpl } from './weak_ref-DrMdAIDh.mjs';
|
|
12
15
|
|
|
13
16
|
/**
|
|
14
17
|
* Base URL for the error details page.
|
|
@@ -21,7 +24,7 @@ const ERROR_DETAILS_PAGE_BASE_URL = 'https://angular.dev/errors';
|
|
|
21
24
|
/**
|
|
22
25
|
* URL for the XSS security documentation.
|
|
23
26
|
*/
|
|
24
|
-
const XSS_SECURITY_URL = 'https://
|
|
27
|
+
const XSS_SECURITY_URL = 'https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss';
|
|
25
28
|
|
|
26
29
|
/**
|
|
27
30
|
* Class that represents a runtime error.
|
|
@@ -70,15 +73,14 @@ const REQUIRED_UNSET_VALUE = /* @__PURE__ */ Symbol('InputSignalNode#UNSET');
|
|
|
70
73
|
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
71
74
|
const INPUT_SIGNAL_NODE = /* @__PURE__ */ (() => {
|
|
72
75
|
return {
|
|
73
|
-
...SIGNAL_NODE
|
|
76
|
+
...SIGNAL_NODE,
|
|
74
77
|
transformFn: undefined,
|
|
75
78
|
applyValueToInputSignal(node, value) {
|
|
76
|
-
signalSetFn
|
|
79
|
+
signalSetFn(node, value);
|
|
77
80
|
},
|
|
78
81
|
};
|
|
79
82
|
})();
|
|
80
83
|
|
|
81
|
-
const ɵINPUT_SIGNAL_BRAND_READ_TYPE = /* @__PURE__ */ Symbol();
|
|
82
84
|
const ɵINPUT_SIGNAL_BRAND_WRITE_TYPE = /* @__PURE__ */ Symbol();
|
|
83
85
|
/**
|
|
84
86
|
* Creates an input signal.
|
|
@@ -95,13 +97,13 @@ function createInputSignal(initialValue, options) {
|
|
|
95
97
|
node.transformFn = options?.transform;
|
|
96
98
|
function inputValueFn() {
|
|
97
99
|
// Record that someone looked at this signal.
|
|
98
|
-
producerAccessed
|
|
100
|
+
producerAccessed(node);
|
|
99
101
|
if (node.value === REQUIRED_UNSET_VALUE) {
|
|
100
102
|
throw new RuntimeError(-950 /* RuntimeErrorCode.REQUIRED_INPUT_NO_VALUE */, ngDevMode && 'Input is required but no value is available yet.');
|
|
101
103
|
}
|
|
102
104
|
return node.value;
|
|
103
105
|
}
|
|
104
|
-
inputValueFn[SIGNAL
|
|
106
|
+
inputValueFn[SIGNAL] = node;
|
|
105
107
|
if (ngDevMode) {
|
|
106
108
|
inputValueFn.toString = () => `[Input Signal: ${inputValueFn()}]`;
|
|
107
109
|
node.debugName = options?.debugName;
|
|
@@ -146,8 +148,6 @@ function makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {
|
|
|
146
148
|
? cls[ANNOTATIONS]
|
|
147
149
|
: Object.defineProperty(cls, ANNOTATIONS, { value: [] })[ANNOTATIONS];
|
|
148
150
|
annotations.push(annotationInstance);
|
|
149
|
-
if (additionalProcessing)
|
|
150
|
-
additionalProcessing(cls);
|
|
151
151
|
return cls;
|
|
152
152
|
};
|
|
153
153
|
}
|
|
@@ -195,9 +195,6 @@ function makeParamDecorator(name, props, parentClass) {
|
|
|
195
195
|
return cls;
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
|
-
if (parentClass) {
|
|
199
|
-
ParamDecoratorFactory.prototype = Object.create(parentClass.prototype);
|
|
200
|
-
}
|
|
201
198
|
ParamDecoratorFactory.prototype.ngMetadataName = name;
|
|
202
199
|
ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;
|
|
203
200
|
return ParamDecoratorFactory;
|
|
@@ -226,8 +223,6 @@ function makePropDecorator(name, props, parentClass, additionalProcessing) {
|
|
|
226
223
|
: Object.defineProperty(constructor, PROP_METADATA, { value: {} })[PROP_METADATA];
|
|
227
224
|
meta[name] = (meta.hasOwnProperty(name) && meta[name]) || [];
|
|
228
225
|
meta[name].unshift(decoratorInstance);
|
|
229
|
-
if (additionalProcessing)
|
|
230
|
-
additionalProcessing(target, name, ...args);
|
|
231
226
|
}
|
|
232
227
|
return PropDecorator;
|
|
233
228
|
}
|
|
@@ -468,6 +463,8 @@ function isForwardRef(fn) {
|
|
|
468
463
|
}
|
|
469
464
|
|
|
470
465
|
// The functions in this file verify that the assumptions we are making
|
|
466
|
+
// about state in an instruction are correct before implementing any logic.
|
|
467
|
+
// They are meant only to be called in dev mode as sanity checks.
|
|
471
468
|
function assertNumber(actual, msg) {
|
|
472
469
|
if (!(typeof actual === 'number')) {
|
|
473
470
|
throwError(msg, typeof actual, 'number', '===');
|
|
@@ -528,11 +525,6 @@ function assertGreaterThanOrEqual(actual, expected, msg) {
|
|
|
528
525
|
throwError(msg, actual, expected, '>=');
|
|
529
526
|
}
|
|
530
527
|
}
|
|
531
|
-
function assertNotDefined(actual, msg) {
|
|
532
|
-
if (actual != null) {
|
|
533
|
-
throwError(msg, actual, null, '==');
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
528
|
function assertDefined(actual, msg) {
|
|
537
529
|
if (actual == null) {
|
|
538
530
|
throwError(msg, actual, null, '!=');
|
|
@@ -565,7 +557,7 @@ function assertOneOf(value, ...validValues) {
|
|
|
565
557
|
throwError(`Expected value to be one of ${JSON.stringify(validValues)} but was ${JSON.stringify(value)}.`);
|
|
566
558
|
}
|
|
567
559
|
function assertNotReactive(fn) {
|
|
568
|
-
if (getActiveConsumer
|
|
560
|
+
if (getActiveConsumer() !== null) {
|
|
569
561
|
throwError(`${fn}() should never be called in a reactive context.`);
|
|
570
562
|
}
|
|
571
563
|
}
|
|
@@ -1084,36 +1076,39 @@ const THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;
|
|
|
1084
1076
|
* in the code, thus making them tree-shakable.
|
|
1085
1077
|
*/
|
|
1086
1078
|
const DI_DECORATOR_FLAG = '__NG_DI_FLAG__';
|
|
1079
|
+
class RetrievingInjector {
|
|
1080
|
+
injector;
|
|
1081
|
+
constructor(injector) {
|
|
1082
|
+
this.injector = injector;
|
|
1083
|
+
}
|
|
1084
|
+
retrieve(token, options) {
|
|
1085
|
+
const ngOptions = options;
|
|
1086
|
+
return this.injector.get(token, ngOptions.optional ? NOT_FOUND$1 : THROW_IF_NOT_FOUND, ngOptions);
|
|
1087
|
+
}
|
|
1088
|
+
}
|
|
1087
1089
|
const NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';
|
|
1088
1090
|
const NG_TOKEN_PATH = 'ngTokenPath';
|
|
1089
1091
|
const NEW_LINE = /\n/gm;
|
|
1090
1092
|
const NO_NEW_LINE = 'ɵ';
|
|
1091
1093
|
const SOURCE = '__source';
|
|
1092
|
-
/**
|
|
1093
|
-
* Current injector value used by `inject`.
|
|
1094
|
-
* - `undefined`: it is an error to call `inject`
|
|
1095
|
-
* - `null`: `inject` can be called but there is no injector (limp-mode).
|
|
1096
|
-
* - Injector instance: Use the injector for resolution.
|
|
1097
|
-
*/
|
|
1098
|
-
let _currentInjector = undefined;
|
|
1099
|
-
function getCurrentInjector() {
|
|
1100
|
-
return _currentInjector;
|
|
1101
|
-
}
|
|
1102
|
-
function setCurrentInjector(injector) {
|
|
1103
|
-
const former = _currentInjector;
|
|
1104
|
-
_currentInjector = injector;
|
|
1105
|
-
return former;
|
|
1106
|
-
}
|
|
1107
1094
|
function injectInjectorOnly(token, flags = InjectFlags.Default) {
|
|
1108
|
-
if (
|
|
1095
|
+
if (getCurrentInjector() === undefined) {
|
|
1109
1096
|
throw new RuntimeError(-203 /* RuntimeErrorCode.MISSING_INJECTION_CONTEXT */, ngDevMode &&
|
|
1110
|
-
`inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with \`runInInjectionContext\`.`);
|
|
1097
|
+
`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\`.`);
|
|
1111
1098
|
}
|
|
1112
|
-
else if (
|
|
1099
|
+
else if (getCurrentInjector() === null) {
|
|
1113
1100
|
return injectRootLimpMode(token, undefined, flags);
|
|
1114
1101
|
}
|
|
1115
1102
|
else {
|
|
1116
|
-
const
|
|
1103
|
+
const currentInjector = getCurrentInjector();
|
|
1104
|
+
let injector;
|
|
1105
|
+
if (currentInjector instanceof RetrievingInjector) {
|
|
1106
|
+
injector = currentInjector.injector;
|
|
1107
|
+
}
|
|
1108
|
+
else {
|
|
1109
|
+
injector = currentInjector;
|
|
1110
|
+
}
|
|
1111
|
+
const value = injector.get(token, flags & InjectFlags.Optional ? null : undefined, flags);
|
|
1117
1112
|
ngDevMode && emitInjectEvent(token, value, flags);
|
|
1118
1113
|
return value;
|
|
1119
1114
|
}
|
|
@@ -1446,27 +1441,6 @@ function arraySplice(array, index, count) {
|
|
|
1446
1441
|
array.pop(); // shrink the array
|
|
1447
1442
|
}
|
|
1448
1443
|
}
|
|
1449
|
-
/**
|
|
1450
|
-
* Same as `Array.splice(index, 0, value)` but faster.
|
|
1451
|
-
*
|
|
1452
|
-
* `Array.splice()` is not fast because it has to allocate an array for the elements which were
|
|
1453
|
-
* removed. This causes memory pressure and slows down code when most of the time we don't
|
|
1454
|
-
* care about the deleted items array.
|
|
1455
|
-
*
|
|
1456
|
-
* @param array Array to splice.
|
|
1457
|
-
* @param index Index in array where the `value` should be added.
|
|
1458
|
-
* @param value Value to add to array.
|
|
1459
|
-
*/
|
|
1460
|
-
function arrayInsert(array, index, value) {
|
|
1461
|
-
ngDevMode && assertLessThanOrEqual(index, array.length, "Can't insert past array end.");
|
|
1462
|
-
let end = array.length;
|
|
1463
|
-
while (end > index) {
|
|
1464
|
-
const previousEnd = end - 1;
|
|
1465
|
-
array[end] = array[previousEnd];
|
|
1466
|
-
end = previousEnd;
|
|
1467
|
-
}
|
|
1468
|
-
array[index] = value;
|
|
1469
|
-
}
|
|
1470
1444
|
/**
|
|
1471
1445
|
* Same as `Array.splice2(index, 0, value1, value2)` but faster.
|
|
1472
1446
|
*
|
|
@@ -1503,22 +1477,6 @@ function arrayInsert2(array, index, value1, value2) {
|
|
|
1503
1477
|
array[index + 1] = value2;
|
|
1504
1478
|
}
|
|
1505
1479
|
}
|
|
1506
|
-
/**
|
|
1507
|
-
* Get an index of an `value` in a sorted `array`.
|
|
1508
|
-
*
|
|
1509
|
-
* NOTE:
|
|
1510
|
-
* - This uses binary search algorithm for fast removals.
|
|
1511
|
-
*
|
|
1512
|
-
* @param array A sorted array to binary search.
|
|
1513
|
-
* @param value The value to look for.
|
|
1514
|
-
* @returns index of the value.
|
|
1515
|
-
* - positive index if value found.
|
|
1516
|
-
* - negative index if value not found. (`~index` to get the value where it should have been
|
|
1517
|
-
* located)
|
|
1518
|
-
*/
|
|
1519
|
-
function arrayIndexOfSorted(array, value) {
|
|
1520
|
-
return _arrayIndexOfSorted(array, value, 0);
|
|
1521
|
-
}
|
|
1522
1480
|
/**
|
|
1523
1481
|
* Set a `value` for a `key`.
|
|
1524
1482
|
*
|
|
@@ -1567,24 +1525,6 @@ function keyValueArrayGet(keyValueArray, key) {
|
|
|
1567
1525
|
function keyValueArrayIndexOf(keyValueArray, key) {
|
|
1568
1526
|
return _arrayIndexOfSorted(keyValueArray, key, 1);
|
|
1569
1527
|
}
|
|
1570
|
-
/**
|
|
1571
|
-
* Delete a `key` (and `value`) from the `KeyValueArray`.
|
|
1572
|
-
*
|
|
1573
|
-
* @param keyValueArray to modify.
|
|
1574
|
-
* @param key The key to locate or delete (if exist).
|
|
1575
|
-
* @returns index of where the key was (or should have been.)
|
|
1576
|
-
* - positive (even) index if key found and deleted.
|
|
1577
|
-
* - negative index if key not found. (`~index` (even) to get the index where it should have
|
|
1578
|
-
* been.)
|
|
1579
|
-
*/
|
|
1580
|
-
function keyValueArrayDelete(keyValueArray, key) {
|
|
1581
|
-
const index = keyValueArrayIndexOf(keyValueArray, key);
|
|
1582
|
-
if (index >= 0) {
|
|
1583
|
-
// if we found it remove it.
|
|
1584
|
-
arraySplice(keyValueArray, index, 2);
|
|
1585
|
-
}
|
|
1586
|
-
return index;
|
|
1587
|
-
}
|
|
1588
1528
|
/**
|
|
1589
1529
|
* INTERNAL: Get an index of an `value` in a sorted `array` by grouping search by `shift`.
|
|
1590
1530
|
*
|
|
@@ -2093,6 +2033,10 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2093
2033
|
}
|
|
2094
2034
|
this.injectorDefTypes = new Set(this.get(INJECTOR_DEF_TYPES, EMPTY_ARRAY, InjectFlags.Self));
|
|
2095
2035
|
}
|
|
2036
|
+
retrieve(token, options) {
|
|
2037
|
+
const ngOptions = options;
|
|
2038
|
+
return this.get(token, ngOptions.optional ? NOT_FOUND$1 : THROW_IF_NOT_FOUND, ngOptions);
|
|
2039
|
+
}
|
|
2096
2040
|
/**
|
|
2097
2041
|
* Destroy the injector and release references to every instance or provider associated with it.
|
|
2098
2042
|
*
|
|
@@ -2103,7 +2047,7 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2103
2047
|
assertNotDestroyed(this);
|
|
2104
2048
|
// Set destroyed = true first, in case lifecycle hooks re-enter destroy().
|
|
2105
2049
|
this._destroyed = true;
|
|
2106
|
-
const prevConsumer = setActiveConsumer
|
|
2050
|
+
const prevConsumer = setActiveConsumer(null);
|
|
2107
2051
|
try {
|
|
2108
2052
|
// Call all the lifecycle hooks.
|
|
2109
2053
|
for (const service of this._ngOnDestroyHooks) {
|
|
@@ -2122,7 +2066,7 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2122
2066
|
this.records.clear();
|
|
2123
2067
|
this._ngOnDestroyHooks.clear();
|
|
2124
2068
|
this.injectorDefTypes.clear();
|
|
2125
|
-
setActiveConsumer
|
|
2069
|
+
setActiveConsumer(prevConsumer);
|
|
2126
2070
|
}
|
|
2127
2071
|
}
|
|
2128
2072
|
onDestroy(callback) {
|
|
@@ -2224,7 +2168,7 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2224
2168
|
}
|
|
2225
2169
|
/** @internal */
|
|
2226
2170
|
resolveInjectorInitializers() {
|
|
2227
|
-
const prevConsumer = setActiveConsumer
|
|
2171
|
+
const prevConsumer = setActiveConsumer(null);
|
|
2228
2172
|
const previousInjector = setCurrentInjector(this);
|
|
2229
2173
|
const previousInjectImplementation = setInjectImplementation(undefined);
|
|
2230
2174
|
let prevInjectContext;
|
|
@@ -2247,7 +2191,7 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2247
2191
|
setCurrentInjector(previousInjector);
|
|
2248
2192
|
setInjectImplementation(previousInjectImplementation);
|
|
2249
2193
|
ngDevMode && setInjectorProfilerContext(prevInjectContext);
|
|
2250
|
-
setActiveConsumer
|
|
2194
|
+
setActiveConsumer(prevConsumer);
|
|
2251
2195
|
}
|
|
2252
2196
|
}
|
|
2253
2197
|
toString() {
|
|
@@ -2310,9 +2254,9 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2310
2254
|
this.records.set(token, record);
|
|
2311
2255
|
}
|
|
2312
2256
|
hydrate(token, record) {
|
|
2313
|
-
const prevConsumer = setActiveConsumer
|
|
2257
|
+
const prevConsumer = setActiveConsumer(null);
|
|
2314
2258
|
try {
|
|
2315
|
-
if (
|
|
2259
|
+
if (record.value === CIRCULAR) {
|
|
2316
2260
|
throwCyclicDependencyError(stringify(token));
|
|
2317
2261
|
}
|
|
2318
2262
|
else if (record.value === NOT_YET) {
|
|
@@ -2333,7 +2277,7 @@ class R3Injector extends EnvironmentInjector {
|
|
|
2333
2277
|
return record.value;
|
|
2334
2278
|
}
|
|
2335
2279
|
finally {
|
|
2336
|
-
setActiveConsumer
|
|
2280
|
+
setActiveConsumer(prevConsumer);
|
|
2337
2281
|
}
|
|
2338
2282
|
}
|
|
2339
2283
|
injectableDefInScope(def) {
|
|
@@ -2495,14 +2439,19 @@ function forEachSingleProvider(providers, fn) {
|
|
|
2495
2439
|
* @publicApi
|
|
2496
2440
|
*/
|
|
2497
2441
|
function runInInjectionContext(injector, fn) {
|
|
2442
|
+
let internalInjector;
|
|
2498
2443
|
if (injector instanceof R3Injector) {
|
|
2499
2444
|
assertNotDestroyed(injector);
|
|
2445
|
+
internalInjector = injector;
|
|
2446
|
+
}
|
|
2447
|
+
else {
|
|
2448
|
+
internalInjector = new RetrievingInjector(injector);
|
|
2500
2449
|
}
|
|
2501
2450
|
let prevInjectorProfilerContext;
|
|
2502
2451
|
if (ngDevMode) {
|
|
2503
2452
|
prevInjectorProfilerContext = setInjectorProfilerContext({ injector, token: null });
|
|
2504
2453
|
}
|
|
2505
|
-
const prevInjector = setCurrentInjector(
|
|
2454
|
+
const prevInjector = setCurrentInjector(internalInjector);
|
|
2506
2455
|
const previousInjectImplementation = setInjectImplementation(undefined);
|
|
2507
2456
|
try {
|
|
2508
2457
|
return fn();
|
|
@@ -3012,9 +2961,6 @@ function assertNgModuleType(actual, msg = "Type passed in is not NgModuleType, i
|
|
|
3012
2961
|
throwError(msg);
|
|
3013
2962
|
}
|
|
3014
2963
|
}
|
|
3015
|
-
function assertCurrentTNodeIsParent(isParent) {
|
|
3016
|
-
assertEqual(isParent, true, 'currentTNode should be a parent');
|
|
3017
|
-
}
|
|
3018
2964
|
function assertHasParent(tNode) {
|
|
3019
2965
|
assertDefined(tNode, 'currentTNode should exist!');
|
|
3020
2966
|
assertDefined(tNode.parent, 'currentTNode should have a parent');
|
|
@@ -3034,7 +2980,7 @@ function assertFirstCreatePass(tView, errMessage) {
|
|
|
3034
2980
|
assertEqual(tView.firstCreatePass, true, errMessage || 'Should only be called in first create pass.');
|
|
3035
2981
|
}
|
|
3036
2982
|
function assertFirstUpdatePass(tView, errMessage) {
|
|
3037
|
-
assertEqual(tView.firstUpdatePass, true,
|
|
2983
|
+
assertEqual(tView.firstUpdatePass, true, 'Should only be called in first update pass.');
|
|
3038
2984
|
}
|
|
3039
2985
|
/**
|
|
3040
2986
|
* This is a basic sanity check that an object is probably a directive def. DirectiveDef is
|
|
@@ -3059,25 +3005,10 @@ function assertBetween(lower, upper, index) {
|
|
|
3059
3005
|
}
|
|
3060
3006
|
function assertProjectionSlots(lView, errMessage) {
|
|
3061
3007
|
assertDefined(lView[DECLARATION_COMPONENT_VIEW], 'Component views should exist.');
|
|
3062
|
-
assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection,
|
|
3063
|
-
'Components with projection nodes (<ng-content>) must have projection slots defined.');
|
|
3008
|
+
assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, 'Components with projection nodes (<ng-content>) must have projection slots defined.');
|
|
3064
3009
|
}
|
|
3065
3010
|
function assertParentView(lView, errMessage) {
|
|
3066
|
-
assertDefined(lView,
|
|
3067
|
-
}
|
|
3068
|
-
function assertNoDuplicateDirectives$1(directives) {
|
|
3069
|
-
// The array needs at least two elements in order to have duplicates.
|
|
3070
|
-
if (directives.length < 2) {
|
|
3071
|
-
return;
|
|
3072
|
-
}
|
|
3073
|
-
const seenDirectives = new Set();
|
|
3074
|
-
for (const current of directives) {
|
|
3075
|
-
if (seenDirectives.has(current)) {
|
|
3076
|
-
throw new RuntimeError(309 /* RuntimeErrorCode.DUPLICATE_DIRECTIVE */, `Directive ${current.type.name} matches multiple times on the same element. ` +
|
|
3077
|
-
`Directives can only match an element once.`);
|
|
3078
|
-
}
|
|
3079
|
-
seenDirectives.add(current);
|
|
3080
|
-
}
|
|
3011
|
+
assertDefined(lView, "Component views should always have a parent view (component's host view)");
|
|
3081
3012
|
}
|
|
3082
3013
|
/**
|
|
3083
3014
|
* This is a basic sanity check that the `injectorIndex` seems to point to what looks like a
|
|
@@ -3542,14 +3473,6 @@ let _checkNoChangesMode = 0; /* CheckNoChangesMode.Off */
|
|
|
3542
3473
|
* @see detectChangesInViewWhileDirty
|
|
3543
3474
|
*/
|
|
3544
3475
|
let _isRefreshingViews = false;
|
|
3545
|
-
/**
|
|
3546
|
-
* Returns true if the instruction state stack is empty.
|
|
3547
|
-
*
|
|
3548
|
-
* Intended to be called from tests only (tree shaken otherwise).
|
|
3549
|
-
*/
|
|
3550
|
-
function specOnlyIsInstructionStateEmpty() {
|
|
3551
|
-
return instructionState.lFrame.parent === null;
|
|
3552
|
-
}
|
|
3553
3476
|
function getElementDepthCount() {
|
|
3554
3477
|
return instructionState.lFrame.elementDepthCount;
|
|
3555
3478
|
}
|
|
@@ -4271,12 +4194,12 @@ function callHooks(currentView, arr, initPhase, currentNodeIndex) {
|
|
|
4271
4194
|
*/
|
|
4272
4195
|
function callHookInternal(directive, hook) {
|
|
4273
4196
|
profiler(4 /* ProfilerEvent.LifecycleHookStart */, directive, hook);
|
|
4274
|
-
const prevConsumer = setActiveConsumer
|
|
4197
|
+
const prevConsumer = setActiveConsumer(null);
|
|
4275
4198
|
try {
|
|
4276
4199
|
hook.call(directive);
|
|
4277
4200
|
}
|
|
4278
4201
|
finally {
|
|
4279
|
-
setActiveConsumer
|
|
4202
|
+
setActiveConsumer(prevConsumer);
|
|
4280
4203
|
profiler(5 /* ProfilerEvent.LifecycleHookEnd */, directive, hook);
|
|
4281
4204
|
}
|
|
4282
4205
|
}
|
|
@@ -4495,9 +4418,6 @@ class NodeInjectorFactory {
|
|
|
4495
4418
|
this.injectImpl = injectImplementation;
|
|
4496
4419
|
}
|
|
4497
4420
|
}
|
|
4498
|
-
function isFactory(obj) {
|
|
4499
|
-
return obj instanceof NodeInjectorFactory;
|
|
4500
|
-
}
|
|
4501
4421
|
|
|
4502
4422
|
/**
|
|
4503
4423
|
* Converts `TNodeType` into human readable text.
|
|
@@ -4697,9 +4617,7 @@ function isAnimationProp(name) {
|
|
|
4697
4617
|
* @param src `TAttributes` which should be appended to `dst`
|
|
4698
4618
|
*/
|
|
4699
4619
|
function mergeHostAttrs(dst, src) {
|
|
4700
|
-
if (src === null || src.length === 0)
|
|
4701
|
-
// do nothing
|
|
4702
|
-
}
|
|
4620
|
+
if (src === null || src.length === 0) ;
|
|
4703
4621
|
else if (dst === null || dst.length === 0) {
|
|
4704
4622
|
// We have source, but dst is empty, just make a copy.
|
|
4705
4623
|
dst = src.slice();
|
|
@@ -4712,9 +4630,7 @@ function mergeHostAttrs(dst, src) {
|
|
|
4712
4630
|
srcMarker = item;
|
|
4713
4631
|
}
|
|
4714
4632
|
else {
|
|
4715
|
-
if (srcMarker === 0 /* AttributeMarker.NamespaceURI */)
|
|
4716
|
-
// Case where we need to consume `key1`, `key2`, `value` items.
|
|
4717
|
-
}
|
|
4633
|
+
if (srcMarker === 0 /* AttributeMarker.NamespaceURI */) ;
|
|
4718
4634
|
else if (srcMarker === -1 /* AttributeMarker.ImplicitAttributes */ ||
|
|
4719
4635
|
srcMarker === 2 /* AttributeMarker.Styles */) {
|
|
4720
4636
|
// Case where we have to consume `key1` and `value` only.
|
|
@@ -4772,21 +4688,15 @@ function mergeHostAttribute(dst, marker, key1, key2, value) {
|
|
|
4772
4688
|
}
|
|
4773
4689
|
else if (item === key1) {
|
|
4774
4690
|
// We already have same token
|
|
4775
|
-
|
|
4691
|
+
{
|
|
4776
4692
|
if (value !== null) {
|
|
4777
4693
|
dst[i + 1] = value;
|
|
4778
4694
|
}
|
|
4779
4695
|
return;
|
|
4780
4696
|
}
|
|
4781
|
-
else if (key2 === dst[i + 1]) {
|
|
4782
|
-
dst[i + 2] = value;
|
|
4783
|
-
return;
|
|
4784
|
-
}
|
|
4785
4697
|
}
|
|
4786
4698
|
// Increment counter.
|
|
4787
4699
|
i++;
|
|
4788
|
-
if (key2 !== null)
|
|
4789
|
-
i++;
|
|
4790
4700
|
if (value !== null)
|
|
4791
4701
|
i++;
|
|
4792
4702
|
}
|
|
@@ -4796,9 +4706,6 @@ function mergeHostAttribute(dst, marker, key1, key2, value) {
|
|
|
4796
4706
|
i = markerInsertPosition + 1;
|
|
4797
4707
|
}
|
|
4798
4708
|
dst.splice(i++, 0, key1);
|
|
4799
|
-
if (key2 !== null) {
|
|
4800
|
-
dst.splice(i++, 0, key2);
|
|
4801
|
-
}
|
|
4802
4709
|
if (value !== null) {
|
|
4803
4710
|
dst.splice(i++, 0, value);
|
|
4804
4711
|
}
|
|
@@ -5435,7 +5342,7 @@ function locateDirectiveOrProvider(tNode, tView, token, canAccessViewProviders,
|
|
|
5435
5342
|
function getNodeInjectable(lView, tView, index, tNode) {
|
|
5436
5343
|
let value = lView[index];
|
|
5437
5344
|
const tData = tView.data;
|
|
5438
|
-
if (
|
|
5345
|
+
if (value instanceof NodeInjectorFactory) {
|
|
5439
5346
|
const factory = value;
|
|
5440
5347
|
if (factory.resolving) {
|
|
5441
5348
|
throwCyclicDependencyError(stringifyForError(tData[index]));
|
|
@@ -6010,29 +5917,6 @@ function getDevModeNodeName(tNode) {
|
|
|
6010
5917
|
}
|
|
6011
5918
|
}
|
|
6012
5919
|
|
|
6013
|
-
/**
|
|
6014
|
-
* @module
|
|
6015
|
-
* @description
|
|
6016
|
-
* The `di` module provides dependency injection container services.
|
|
6017
|
-
*/
|
|
6018
|
-
|
|
6019
|
-
/**
|
|
6020
|
-
* This file should not be necessary because node resolution should just default to `./di/index`!
|
|
6021
|
-
*
|
|
6022
|
-
* However it does not seem to work and it breaks:
|
|
6023
|
-
* - //packages/animations/browser/test:test_web_chromium-local
|
|
6024
|
-
* - //packages/compiler-cli/test:extract_i18n
|
|
6025
|
-
* - //packages/compiler-cli/test:ngc
|
|
6026
|
-
* - //packages/compiler-cli/test:perform_watch
|
|
6027
|
-
* - //packages/compiler-cli/test/diagnostics:check_types
|
|
6028
|
-
* - //packages/compiler-cli/test/transformers:test
|
|
6029
|
-
* - //packages/compiler/test:test
|
|
6030
|
-
* - //tools/public_api_guard:core_api
|
|
6031
|
-
*
|
|
6032
|
-
* Remove this file once the above is solved or wait until `ngc` is deleted and then it should be
|
|
6033
|
-
* safe to delete this file.
|
|
6034
|
-
*/
|
|
6035
|
-
|
|
6036
5920
|
const SCHEDULE_IN_ROOT_ZONE_DEFAULT = false;
|
|
6037
5921
|
|
|
6038
5922
|
/**
|
|
@@ -6220,12 +6104,12 @@ class EventEmitter_ extends Subject {
|
|
|
6220
6104
|
}
|
|
6221
6105
|
}
|
|
6222
6106
|
emit(value) {
|
|
6223
|
-
const prevConsumer = setActiveConsumer
|
|
6107
|
+
const prevConsumer = setActiveConsumer(null);
|
|
6224
6108
|
try {
|
|
6225
6109
|
super.next(value);
|
|
6226
6110
|
}
|
|
6227
6111
|
finally {
|
|
6228
|
-
setActiveConsumer
|
|
6112
|
+
setActiveConsumer(prevConsumer);
|
|
6229
6113
|
}
|
|
6230
6114
|
}
|
|
6231
6115
|
subscribe(observerOrNext, error, complete) {
|
|
@@ -6802,8 +6686,6 @@ function getNgZone(ngZoneToUse = 'zone.js', options) {
|
|
|
6802
6686
|
return ngZoneToUse;
|
|
6803
6687
|
}
|
|
6804
6688
|
|
|
6805
|
-
// Public API for Zone
|
|
6806
|
-
|
|
6807
6689
|
/**
|
|
6808
6690
|
* Provides a hook for centralized exception handling.
|
|
6809
6691
|
*
|
|
@@ -6904,14 +6786,15 @@ class OutputEmitterRef {
|
|
|
6904
6786
|
/** Emits a new value to the output. */
|
|
6905
6787
|
emit(value) {
|
|
6906
6788
|
if (this.destroyed) {
|
|
6907
|
-
|
|
6789
|
+
console.warn(formatRuntimeError(953 /* RuntimeErrorCode.OUTPUT_REF_DESTROYED */, ngDevMode &&
|
|
6908
6790
|
'Unexpected emit for destroyed `OutputRef`. ' +
|
|
6909
|
-
'The owning directive/component is destroyed.');
|
|
6791
|
+
'The owning directive/component is destroyed.'));
|
|
6792
|
+
return;
|
|
6910
6793
|
}
|
|
6911
6794
|
if (this.listeners === null) {
|
|
6912
6795
|
return;
|
|
6913
6796
|
}
|
|
6914
|
-
const previousConsumer = setActiveConsumer
|
|
6797
|
+
const previousConsumer = setActiveConsumer(null);
|
|
6915
6798
|
try {
|
|
6916
6799
|
for (const listenerFn of this.listeners) {
|
|
6917
6800
|
try {
|
|
@@ -6923,7 +6806,7 @@ class OutputEmitterRef {
|
|
|
6923
6806
|
}
|
|
6924
6807
|
}
|
|
6925
6808
|
finally {
|
|
6926
|
-
setActiveConsumer
|
|
6809
|
+
setActiveConsumer(previousConsumer);
|
|
6927
6810
|
}
|
|
6928
6811
|
}
|
|
6929
6812
|
}
|
|
@@ -7111,11 +6994,9 @@ function unwrapElementRef(value) {
|
|
|
7111
6994
|
* Checks if the given `value` is a reactive `Signal`.
|
|
7112
6995
|
*/
|
|
7113
6996
|
function isSignal(value) {
|
|
7114
|
-
return typeof value === 'function' && value[SIGNAL
|
|
6997
|
+
return typeof value === 'function' && value[SIGNAL] !== undefined;
|
|
7115
6998
|
}
|
|
7116
6999
|
|
|
7117
|
-
/** Symbol used distinguish `WritableSignal` from other non-writable signals and functions. */
|
|
7118
|
-
const ɵWRITABLE_SIGNAL = /* @__PURE__ */ Symbol('WRITABLE_SIGNAL');
|
|
7119
7000
|
/**
|
|
7120
7001
|
* Utility function used during template type checking to extract the value from a `WritableSignal`.
|
|
7121
7002
|
* @codeGenApi
|
|
@@ -7129,13 +7010,13 @@ function ɵunwrapWritableSignal(value) {
|
|
|
7129
7010
|
* Create a `Signal` that can be set or updated directly.
|
|
7130
7011
|
*/
|
|
7131
7012
|
function signal(initialValue, options) {
|
|
7132
|
-
const signalFn = createSignal
|
|
7133
|
-
const node = signalFn[SIGNAL
|
|
7013
|
+
const signalFn = createSignal(initialValue);
|
|
7014
|
+
const node = signalFn[SIGNAL];
|
|
7134
7015
|
if (options?.equal) {
|
|
7135
7016
|
node.equal = options.equal;
|
|
7136
7017
|
}
|
|
7137
|
-
signalFn.set = (newValue) => signalSetFn
|
|
7138
|
-
signalFn.update = (updateFn) => signalUpdateFn
|
|
7018
|
+
signalFn.set = (newValue) => signalSetFn(node, newValue);
|
|
7019
|
+
signalFn.update = (updateFn) => signalUpdateFn(node, updateFn);
|
|
7139
7020
|
signalFn.asReadonly = signalAsReadonlyFn.bind(signalFn);
|
|
7140
7021
|
if (ngDevMode) {
|
|
7141
7022
|
signalFn.toString = () => `[Signal: ${signalFn()}]`;
|
|
@@ -7144,10 +7025,10 @@ function signal(initialValue, options) {
|
|
|
7144
7025
|
return signalFn;
|
|
7145
7026
|
}
|
|
7146
7027
|
function signalAsReadonlyFn() {
|
|
7147
|
-
const node = this[SIGNAL
|
|
7028
|
+
const node = this[SIGNAL];
|
|
7148
7029
|
if (node.readonlyFn === undefined) {
|
|
7149
7030
|
const readonlyFn = () => this();
|
|
7150
|
-
readonlyFn[SIGNAL
|
|
7031
|
+
readonlyFn[SIGNAL] = node;
|
|
7151
7032
|
node.readonlyFn = readonlyFn;
|
|
7152
7033
|
}
|
|
7153
7034
|
return node.readonlyFn;
|
|
@@ -7387,8 +7268,8 @@ function isI18nInSkipHydrationBlock(parentTNode) {
|
|
|
7387
7268
|
* The strategy that the default change detector uses to detect changes.
|
|
7388
7269
|
* When set, takes effect the next time change detection is triggered.
|
|
7389
7270
|
*
|
|
7390
|
-
* @see
|
|
7391
|
-
* @see
|
|
7271
|
+
* @see {@link /api/core/ChangeDetectorRef?tab=usage-notes Change detection usage}
|
|
7272
|
+
* @see {@link /best-practices/skipping-subtrees Skipping component subtrees}
|
|
7392
7273
|
*
|
|
7393
7274
|
* @publicApi
|
|
7394
7275
|
*/
|
|
@@ -7625,20 +7506,6 @@ function getComponentViewByInstance(componentInstance) {
|
|
|
7625
7506
|
* This property will be monkey-patched on elements, components and directives.
|
|
7626
7507
|
*/
|
|
7627
7508
|
const MONKEY_PATCH_KEY_NAME = '__ngContext__';
|
|
7628
|
-
function attachLViewId(target, data) {
|
|
7629
|
-
target[MONKEY_PATCH_KEY_NAME] = data[ID];
|
|
7630
|
-
}
|
|
7631
|
-
/**
|
|
7632
|
-
* Returns the monkey-patch value data present on the target (which could be
|
|
7633
|
-
* a component, directive or a DOM node).
|
|
7634
|
-
*/
|
|
7635
|
-
function readLView(target) {
|
|
7636
|
-
const data = readPatchedData(target);
|
|
7637
|
-
if (isLView(data)) {
|
|
7638
|
-
return data;
|
|
7639
|
-
}
|
|
7640
|
-
return data ? data.lView : null;
|
|
7641
|
-
}
|
|
7642
7509
|
/**
|
|
7643
7510
|
* Assigns the given data to the given target (which could be a component,
|
|
7644
7511
|
* directive or DOM node instance) using monkey-patching.
|
|
@@ -8104,20 +7971,6 @@ function getLocalRefs(target) {
|
|
|
8104
7971
|
function getHostElement(componentOrDirective) {
|
|
8105
7972
|
return getLContext(componentOrDirective).native;
|
|
8106
7973
|
}
|
|
8107
|
-
/**
|
|
8108
|
-
* Retrieves the rendered text for a given component.
|
|
8109
|
-
*
|
|
8110
|
-
* This function retrieves the host element of a component and
|
|
8111
|
-
* and then returns the `textContent` for that element. This implies
|
|
8112
|
-
* that the text returned will include re-projected content of
|
|
8113
|
-
* the component as well.
|
|
8114
|
-
*
|
|
8115
|
-
* @param component The component to return the content text for.
|
|
8116
|
-
*/
|
|
8117
|
-
function getRenderedText(component) {
|
|
8118
|
-
const hostElement = getHostElement(component);
|
|
8119
|
-
return hostElement.textContent || '';
|
|
8120
|
-
}
|
|
8121
7974
|
/**
|
|
8122
7975
|
* Retrieves a list of event listeners associated with a DOM element. The list does include host
|
|
8123
7976
|
* listeners, but it does not include event listeners defined outside of the Angular context
|
|
@@ -8196,23 +8049,6 @@ function isDirectiveDefHack(obj) {
|
|
|
8196
8049
|
obj.declaredInputs !== undefined &&
|
|
8197
8050
|
obj.findHostDirectiveDefs !== undefined);
|
|
8198
8051
|
}
|
|
8199
|
-
/**
|
|
8200
|
-
* Retrieve the component `LView` from component/element.
|
|
8201
|
-
*
|
|
8202
|
-
* NOTE: `LView` is a private and should not be leaked outside.
|
|
8203
|
-
* Don't export this method to `ng.*` on window.
|
|
8204
|
-
*
|
|
8205
|
-
* @param target DOM element or component instance for which to retrieve the LView.
|
|
8206
|
-
*/
|
|
8207
|
-
function getComponentLView(target) {
|
|
8208
|
-
const lContext = getLContext(target);
|
|
8209
|
-
const nodeIndx = lContext.nodeIndex;
|
|
8210
|
-
const lView = lContext.lView;
|
|
8211
|
-
ngDevMode && assertLView(lView);
|
|
8212
|
-
const componentLView = lView[nodeIndx];
|
|
8213
|
-
ngDevMode && assertLView(componentLView);
|
|
8214
|
-
return componentLView;
|
|
8215
|
-
}
|
|
8216
8052
|
/** Asserts that a value is a DOM Element. */
|
|
8217
8053
|
function assertDomElement(value) {
|
|
8218
8054
|
if (typeof Element !== 'undefined' && !(value instanceof Element)) {
|
|
@@ -8428,7 +8264,7 @@ function makeStateKey(key) {
|
|
|
8428
8264
|
}
|
|
8429
8265
|
function initTransferState() {
|
|
8430
8266
|
const transferState = new TransferState();
|
|
8431
|
-
if (
|
|
8267
|
+
if (typeof ngServerMode === 'undefined' || !ngServerMode) {
|
|
8432
8268
|
transferState.store = retrieveTransferredState(getDocument(), inject(APP_ID));
|
|
8433
8269
|
}
|
|
8434
8270
|
return transferState;
|
|
@@ -8555,7 +8391,6 @@ const DEFER_BLOCK_ID = 'di';
|
|
|
8555
8391
|
const DEFER_BLOCK_STATE$1 = 's';
|
|
8556
8392
|
const DEFER_PARENT_BLOCK_ID = 'p';
|
|
8557
8393
|
const DEFER_HYDRATE_TRIGGERS = 't';
|
|
8558
|
-
const DEFER_PREFETCH_TRIGGERS = 'pt';
|
|
8559
8394
|
|
|
8560
8395
|
/**
|
|
8561
8396
|
* Internal token that specifies whether DOM reuse logic
|
|
@@ -8627,7 +8462,7 @@ function performanceMarkFeature(feature) {
|
|
|
8627
8462
|
|
|
8628
8463
|
/**
|
|
8629
8464
|
* Asserts that the current stack frame is not within a reactive context. Useful
|
|
8630
|
-
* to disallow certain code from running inside a reactive context (see {@link toSignal})
|
|
8465
|
+
* to disallow certain code from running inside a reactive context (see {@link /api/core/rxjs/toSignal toSignal})
|
|
8631
8466
|
*
|
|
8632
8467
|
* @param debugFn a reference to the function making the assertion (used for the error message).
|
|
8633
8468
|
*
|
|
@@ -8636,7 +8471,7 @@ function performanceMarkFeature(feature) {
|
|
|
8636
8471
|
function assertNotInReactiveContext(debugFn, extraContext) {
|
|
8637
8472
|
// Taking a `Function` instead of a string name here prevents the un-minified name of the function
|
|
8638
8473
|
// from being retained in the bundle regardless of minification.
|
|
8639
|
-
if (getActiveConsumer
|
|
8474
|
+
if (getActiveConsumer() !== null) {
|
|
8640
8475
|
throw new RuntimeError(-602 /* RuntimeErrorCode.ASSERTION_NOT_INSIDE_REACTIVE_CONTEXT */, ngDevMode &&
|
|
8641
8476
|
`${debugFn.name}() cannot be called from within a reactive context.${extraContext ? ` ${extraContext}` : ''}`);
|
|
8642
8477
|
}
|
|
@@ -9469,15 +9304,6 @@ function registerDomTrigger(initialLView, tNode, triggerIndex, walkUpTimes, regi
|
|
|
9469
9304
|
}
|
|
9470
9305
|
|
|
9471
9306
|
const DEFER_BLOCK_SSR_ID_ATTRIBUTE = 'ngb';
|
|
9472
|
-
function invokeRegisteredDelegationListeners(event) {
|
|
9473
|
-
const handlerFns = event.currentTarget?.__jsaction_fns?.get(event.type);
|
|
9474
|
-
if (!handlerFns) {
|
|
9475
|
-
return;
|
|
9476
|
-
}
|
|
9477
|
-
for (const handler of handlerFns) {
|
|
9478
|
-
handler(event);
|
|
9479
|
-
}
|
|
9480
|
-
}
|
|
9481
9307
|
function setJSActionAttributes(nativeElement, eventTypes, parentDeferBlockId = null) {
|
|
9482
9308
|
// jsaction attributes specifically should be applied to elements and not comment nodes.
|
|
9483
9309
|
// Comment nodes also have no setAttribute function. So this avoids errors.
|
|
@@ -9508,8 +9334,8 @@ const sharedStashFunction = (rEl, eventType, listenerFn) => {
|
|
|
9508
9334
|
el.__jsaction_fns = eventListenerMap;
|
|
9509
9335
|
};
|
|
9510
9336
|
const sharedMapFunction = (rEl, jsActionMap) => {
|
|
9511
|
-
let blockName = rEl.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE) ?? '';
|
|
9512
9337
|
const el = rEl;
|
|
9338
|
+
let blockName = el.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE) ?? '';
|
|
9513
9339
|
const blockSet = jsActionMap.get(blockName) ?? new Set();
|
|
9514
9340
|
if (!blockSet.has(el)) {
|
|
9515
9341
|
blockSet.add(el);
|
|
@@ -9539,7 +9365,7 @@ const JSACTION_EVENT_CONTRACT = new InjectionToken(ngDevMode ? 'EVENT_CONTRACT_D
|
|
|
9539
9365
|
});
|
|
9540
9366
|
function invokeListeners(event, currentTarget) {
|
|
9541
9367
|
const handlerFns = currentTarget?.__jsaction_fns?.get(event.type);
|
|
9542
|
-
if (!handlerFns) {
|
|
9368
|
+
if (!handlerFns || !currentTarget?.isConnected) {
|
|
9543
9369
|
return;
|
|
9544
9370
|
}
|
|
9545
9371
|
for (const handler of handlerFns) {
|
|
@@ -9565,6 +9391,16 @@ class DehydratedBlockRegistry {
|
|
|
9565
9391
|
contract = inject(JSACTION_EVENT_CONTRACT);
|
|
9566
9392
|
add(blockId, info) {
|
|
9567
9393
|
this.registry.set(blockId, info);
|
|
9394
|
+
// It's possible that hydration is queued that's waiting for the
|
|
9395
|
+
// resolution of a lazy loaded route. In this case, we ensure
|
|
9396
|
+
// the callback function is called to continue the hydration process
|
|
9397
|
+
// for the queued block set.
|
|
9398
|
+
if (this.awaitingCallbacks.has(blockId)) {
|
|
9399
|
+
const awaitingCallbacks = this.awaitingCallbacks.get(blockId);
|
|
9400
|
+
for (const cb of awaitingCallbacks) {
|
|
9401
|
+
cb();
|
|
9402
|
+
}
|
|
9403
|
+
}
|
|
9568
9404
|
}
|
|
9569
9405
|
get(blockId) {
|
|
9570
9406
|
return this.registry.get(blockId) ?? null;
|
|
@@ -9579,6 +9415,7 @@ class DehydratedBlockRegistry {
|
|
|
9579
9415
|
this.jsActionMap.delete(blockId);
|
|
9580
9416
|
this.invokeTriggerCleanupFns(blockId);
|
|
9581
9417
|
this.hydrating.delete(blockId);
|
|
9418
|
+
this.awaitingCallbacks.delete(blockId);
|
|
9582
9419
|
}
|
|
9583
9420
|
if (this.size === 0) {
|
|
9584
9421
|
this.contract.instance?.cleanUp();
|
|
@@ -9606,6 +9443,13 @@ class DehydratedBlockRegistry {
|
|
|
9606
9443
|
}
|
|
9607
9444
|
// Blocks that are being hydrated.
|
|
9608
9445
|
hydrating = new Map();
|
|
9446
|
+
// Blocks that are awaiting a defer instruction finish.
|
|
9447
|
+
awaitingCallbacks = new Map();
|
|
9448
|
+
awaitParentBlock(topmostParentBlock, callback) {
|
|
9449
|
+
const parentBlockAwaitCallbacks = this.awaitingCallbacks.get(topmostParentBlock) ?? [];
|
|
9450
|
+
parentBlockAwaitCallbacks.push(callback);
|
|
9451
|
+
this.awaitingCallbacks.set(topmostParentBlock, parentBlockAwaitCallbacks);
|
|
9452
|
+
}
|
|
9609
9453
|
/** @nocollapse */
|
|
9610
9454
|
static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ ɵɵdefineInjectable({
|
|
9611
9455
|
token: DehydratedBlockRegistry,
|
|
@@ -10034,7 +9878,6 @@ function getParentBlockHydrationQueue(deferBlockId, injector) {
|
|
|
10034
9878
|
isTopMostDeferBlock = dehydratedBlockRegistry.has(currentBlockId);
|
|
10035
9879
|
const hydratingParentBlock = dehydratedBlockRegistry.hydrating.get(currentBlockId);
|
|
10036
9880
|
if (parentBlockPromise === null && hydratingParentBlock != null) {
|
|
10037
|
-
// TODO: add an ngDevMode asset that `hydratingParentBlock.promise` exists and is of type Promise.
|
|
10038
9881
|
parentBlockPromise = hydratingParentBlock.promise;
|
|
10039
9882
|
break;
|
|
10040
9883
|
}
|
|
@@ -10134,7 +9977,7 @@ function processBlockData(injector) {
|
|
|
10134
9977
|
function refreshContentQueries(tView, lView) {
|
|
10135
9978
|
const contentQueries = tView.contentQueries;
|
|
10136
9979
|
if (contentQueries !== null) {
|
|
10137
|
-
const prevConsumer = setActiveConsumer
|
|
9980
|
+
const prevConsumer = setActiveConsumer(null);
|
|
10138
9981
|
try {
|
|
10139
9982
|
for (let i = 0; i < contentQueries.length; i += 2) {
|
|
10140
9983
|
const queryStartIdx = contentQueries[i];
|
|
@@ -10150,24 +9993,24 @@ function refreshContentQueries(tView, lView) {
|
|
|
10150
9993
|
}
|
|
10151
9994
|
}
|
|
10152
9995
|
finally {
|
|
10153
|
-
setActiveConsumer
|
|
9996
|
+
setActiveConsumer(prevConsumer);
|
|
10154
9997
|
}
|
|
10155
9998
|
}
|
|
10156
9999
|
}
|
|
10157
10000
|
function executeViewQueryFn(flags, viewQueryFn, component) {
|
|
10158
10001
|
ngDevMode && assertDefined(viewQueryFn, 'View queries function to execute must be defined.');
|
|
10159
10002
|
setCurrentQueryIndex(0);
|
|
10160
|
-
const prevConsumer = setActiveConsumer
|
|
10003
|
+
const prevConsumer = setActiveConsumer(null);
|
|
10161
10004
|
try {
|
|
10162
10005
|
viewQueryFn(flags, component);
|
|
10163
10006
|
}
|
|
10164
10007
|
finally {
|
|
10165
|
-
setActiveConsumer
|
|
10008
|
+
setActiveConsumer(prevConsumer);
|
|
10166
10009
|
}
|
|
10167
10010
|
}
|
|
10168
10011
|
function executeContentQueries(tView, tNode, lView) {
|
|
10169
10012
|
if (isContentQueryHost(tNode)) {
|
|
10170
|
-
const prevConsumer = setActiveConsumer
|
|
10013
|
+
const prevConsumer = setActiveConsumer(null);
|
|
10171
10014
|
try {
|
|
10172
10015
|
const start = tNode.directiveStart;
|
|
10173
10016
|
const end = tNode.directiveEnd;
|
|
@@ -10182,13 +10025,13 @@ function executeContentQueries(tView, tNode, lView) {
|
|
|
10182
10025
|
}
|
|
10183
10026
|
}
|
|
10184
10027
|
finally {
|
|
10185
|
-
setActiveConsumer
|
|
10028
|
+
setActiveConsumer(prevConsumer);
|
|
10186
10029
|
}
|
|
10187
10030
|
}
|
|
10188
10031
|
}
|
|
10189
10032
|
|
|
10190
10033
|
/**
|
|
10191
|
-
* Defines the CSS styles encapsulation policies for the {@link Component} decorator's
|
|
10034
|
+
* Defines the CSS styles encapsulation policies for the {@link /api/core/Component Component} decorator's
|
|
10192
10035
|
* `encapsulation` option.
|
|
10193
10036
|
*
|
|
10194
10037
|
* See {@link Component#encapsulation encapsulation}.
|
|
@@ -10278,16 +10121,6 @@ function getPolicy$1() {
|
|
|
10278
10121
|
function trustedHTMLFromString(html) {
|
|
10279
10122
|
return getPolicy$1()?.createHTML(html) || html;
|
|
10280
10123
|
}
|
|
10281
|
-
/**
|
|
10282
|
-
* Unsafely promote a string to a TrustedScript, falling back to strings when
|
|
10283
|
-
* Trusted Types are not available.
|
|
10284
|
-
* @security In particular, it must be assured that the provided string will
|
|
10285
|
-
* never cause an XSS vulnerability if used in a context that will be
|
|
10286
|
-
* interpreted and executed as a script by a browser, e.g. when calling eval.
|
|
10287
|
-
*/
|
|
10288
|
-
function trustedScriptFromString(script) {
|
|
10289
|
-
return getPolicy$1()?.createScript(script) || script;
|
|
10290
|
-
}
|
|
10291
10124
|
/**
|
|
10292
10125
|
* Unsafely promote a string to a TrustedScriptURL, falling back to strings
|
|
10293
10126
|
* when Trusted Types are not available.
|
|
@@ -10300,54 +10133,6 @@ function trustedScriptFromString(script) {
|
|
|
10300
10133
|
function trustedScriptURLFromString(url) {
|
|
10301
10134
|
return getPolicy$1()?.createScriptURL(url) || url;
|
|
10302
10135
|
}
|
|
10303
|
-
/**
|
|
10304
|
-
* Unsafely call the Function constructor with the given string arguments. It
|
|
10305
|
-
* is only available in development mode, and should be stripped out of
|
|
10306
|
-
* production code.
|
|
10307
|
-
* @security This is a security-sensitive function; any use of this function
|
|
10308
|
-
* must go through security review. In particular, it must be assured that it
|
|
10309
|
-
* is only called from development code, as use in production code can lead to
|
|
10310
|
-
* XSS vulnerabilities.
|
|
10311
|
-
*/
|
|
10312
|
-
function newTrustedFunctionForDev(...args) {
|
|
10313
|
-
if (typeof ngDevMode === 'undefined') {
|
|
10314
|
-
throw new Error('newTrustedFunctionForDev should never be called in production');
|
|
10315
|
-
}
|
|
10316
|
-
if (!_global.trustedTypes) {
|
|
10317
|
-
// In environments that don't support Trusted Types, fall back to the most
|
|
10318
|
-
// straightforward implementation:
|
|
10319
|
-
return new Function(...args);
|
|
10320
|
-
}
|
|
10321
|
-
// Chrome currently does not support passing TrustedScript to the Function
|
|
10322
|
-
// constructor. The following implements the workaround proposed on the page
|
|
10323
|
-
// below, where the Chromium bug is also referenced:
|
|
10324
|
-
// https://github.com/w3c/webappsec-trusted-types/wiki/Trusted-Types-for-function-constructor
|
|
10325
|
-
const fnArgs = args.slice(0, -1).join(',');
|
|
10326
|
-
const fnBody = args[args.length - 1];
|
|
10327
|
-
const body = `(function anonymous(${fnArgs}
|
|
10328
|
-
) { ${fnBody}
|
|
10329
|
-
})`;
|
|
10330
|
-
// Using eval directly confuses the compiler and prevents this module from
|
|
10331
|
-
// being stripped out of JS binaries even if not used. The global['eval']
|
|
10332
|
-
// indirection fixes that.
|
|
10333
|
-
const fn = _global['eval'](trustedScriptFromString(body));
|
|
10334
|
-
if (fn.bind === undefined) {
|
|
10335
|
-
// Workaround for a browser bug that only exists in Chrome 83, where passing
|
|
10336
|
-
// a TrustedScript to eval just returns the TrustedScript back without
|
|
10337
|
-
// evaluating it. In that case, fall back to the most straightforward
|
|
10338
|
-
// implementation:
|
|
10339
|
-
return new Function(...args);
|
|
10340
|
-
}
|
|
10341
|
-
// To completely mimic the behavior of calling "new Function", two more
|
|
10342
|
-
// things need to happen:
|
|
10343
|
-
// 1. Stringifying the resulting function should return its source code
|
|
10344
|
-
fn.toString = () => body;
|
|
10345
|
-
// 2. When calling the resulting function, `this` should refer to `global`
|
|
10346
|
-
return fn.bind(_global);
|
|
10347
|
-
// When Trusted Types support in Function constructors is widely available,
|
|
10348
|
-
// the implementation of this function can be simplified to:
|
|
10349
|
-
// return new Function(...args.map(a => trustedScriptFromString(a)));
|
|
10350
|
-
}
|
|
10351
10136
|
|
|
10352
10137
|
/**
|
|
10353
10138
|
* @fileoverview
|
|
@@ -12491,7 +12276,7 @@ var InputFlags;
|
|
|
12491
12276
|
})(InputFlags || (InputFlags = {}));
|
|
12492
12277
|
|
|
12493
12278
|
function writeToDirectiveInput(def, instance, publicName, value) {
|
|
12494
|
-
const prevConsumer = setActiveConsumer
|
|
12279
|
+
const prevConsumer = setActiveConsumer(null);
|
|
12495
12280
|
try {
|
|
12496
12281
|
if (ngDevMode) {
|
|
12497
12282
|
if (!def.inputs.hasOwnProperty(publicName)) {
|
|
@@ -12500,7 +12285,7 @@ function writeToDirectiveInput(def, instance, publicName, value) {
|
|
|
12500
12285
|
// Usually we resolve the directive instance using `LView[someIndex]` before writing to an
|
|
12501
12286
|
// input, however if the read happens to early, the `LView[someIndex]` might actually be a
|
|
12502
12287
|
// `NodeInjectorFactory`. Check for this specific case here since it can break in subtle ways.
|
|
12503
|
-
if (
|
|
12288
|
+
if (instance instanceof NodeInjectorFactory) {
|
|
12504
12289
|
throw new Error(`ASSERTION ERROR: Cannot write input to factory for type ${def.type.name}. Directive has not been created yet.`);
|
|
12505
12290
|
}
|
|
12506
12291
|
}
|
|
@@ -12512,7 +12297,7 @@ function writeToDirectiveInput(def, instance, publicName, value) {
|
|
|
12512
12297
|
let inputSignalNode = null;
|
|
12513
12298
|
if ((flags & InputFlags.SignalBased) !== 0) {
|
|
12514
12299
|
const field = instance[privateName];
|
|
12515
|
-
inputSignalNode = field[SIGNAL
|
|
12300
|
+
inputSignalNode = field[SIGNAL];
|
|
12516
12301
|
}
|
|
12517
12302
|
// If there is a signal node and a transform, run it before potentially
|
|
12518
12303
|
// delegating to features like `NgOnChanges`.
|
|
@@ -12531,7 +12316,7 @@ function writeToDirectiveInput(def, instance, publicName, value) {
|
|
|
12531
12316
|
}
|
|
12532
12317
|
}
|
|
12533
12318
|
finally {
|
|
12534
|
-
setActiveConsumer
|
|
12319
|
+
setActiveConsumer(prevConsumer);
|
|
12535
12320
|
}
|
|
12536
12321
|
}
|
|
12537
12322
|
|
|
@@ -12988,56 +12773,6 @@ function setAllInputsForProperty(tNode, tView, lView, publicName, value) {
|
|
|
12988
12773
|
}
|
|
12989
12774
|
return hasMatch;
|
|
12990
12775
|
}
|
|
12991
|
-
/**
|
|
12992
|
-
* Sets an input value only on a specific directive and its host directives.
|
|
12993
|
-
* @param tNode TNode on which the input is being set.
|
|
12994
|
-
* @param tView Current TView
|
|
12995
|
-
* @param lView `LView` which contains the directives.
|
|
12996
|
-
* @param target Directive on which to set the input.
|
|
12997
|
-
* @param publicName Public name of the input being set.
|
|
12998
|
-
* @param value Value to set.
|
|
12999
|
-
*/
|
|
13000
|
-
function setDirectiveInput(tNode, tView, lView, target, publicName, value) {
|
|
13001
|
-
let hostIndex = null;
|
|
13002
|
-
let hostDirectivesStart = null;
|
|
13003
|
-
let hostDirectivesEnd = null;
|
|
13004
|
-
let hasSet = false;
|
|
13005
|
-
if (ngDevMode && !tNode.directiveToIndex?.has(target.type)) {
|
|
13006
|
-
throw new Error(`Node does not have a directive with type ${target.type.name}`);
|
|
13007
|
-
}
|
|
13008
|
-
const data = tNode.directiveToIndex.get(target.type);
|
|
13009
|
-
if (typeof data === 'number') {
|
|
13010
|
-
hostIndex = data;
|
|
13011
|
-
}
|
|
13012
|
-
else {
|
|
13013
|
-
[hostIndex, hostDirectivesStart, hostDirectivesEnd] = data;
|
|
13014
|
-
}
|
|
13015
|
-
if (hostDirectivesStart !== null &&
|
|
13016
|
-
hostDirectivesEnd !== null &&
|
|
13017
|
-
tNode.hostDirectiveInputs?.hasOwnProperty(publicName)) {
|
|
13018
|
-
const hostDirectiveInputs = tNode.hostDirectiveInputs[publicName];
|
|
13019
|
-
for (let i = 0; i < hostDirectiveInputs.length; i += 2) {
|
|
13020
|
-
const index = hostDirectiveInputs[i];
|
|
13021
|
-
if (index >= hostDirectivesStart && index <= hostDirectivesEnd) {
|
|
13022
|
-
ngDevMode && assertIndexInRange(lView, index);
|
|
13023
|
-
const def = tView.data[index];
|
|
13024
|
-
const hostDirectivePublicName = hostDirectiveInputs[i + 1];
|
|
13025
|
-
writeToDirectiveInput(def, lView[index], hostDirectivePublicName, value);
|
|
13026
|
-
hasSet = true;
|
|
13027
|
-
}
|
|
13028
|
-
else if (index > hostDirectivesEnd) {
|
|
13029
|
-
// Directives here are in ascending order so we can stop looking once we're past the range.
|
|
13030
|
-
break;
|
|
13031
|
-
}
|
|
13032
|
-
}
|
|
13033
|
-
}
|
|
13034
|
-
if (hostIndex !== null) {
|
|
13035
|
-
ngDevMode && assertIndexInRange(lView, hostIndex);
|
|
13036
|
-
writeToDirectiveInput(target, lView[hostIndex], publicName, value);
|
|
13037
|
-
hasSet = true;
|
|
13038
|
-
}
|
|
13039
|
-
return hasSet;
|
|
13040
|
-
}
|
|
13041
12776
|
|
|
13042
12777
|
function renderComponent(hostLView, componentHostIdx) {
|
|
13043
12778
|
ngDevMode && assertEqual(isCreationMode(hostLView), true, 'Should be run in creation mode');
|
|
@@ -13146,7 +12881,7 @@ function renderView(tView, lView, context) {
|
|
|
13146
12881
|
throw error;
|
|
13147
12882
|
}
|
|
13148
12883
|
finally {
|
|
13149
|
-
lView[FLAGS] &=
|
|
12884
|
+
lView[FLAGS] &= -5 /* LViewFlags.CreationMode */;
|
|
13150
12885
|
leaveView();
|
|
13151
12886
|
}
|
|
13152
12887
|
}
|
|
@@ -13158,7 +12893,7 @@ function renderChildComponents(hostLView, components) {
|
|
|
13158
12893
|
}
|
|
13159
12894
|
|
|
13160
12895
|
function createAndRenderEmbeddedLView(declarationLView, templateTNode, context, options) {
|
|
13161
|
-
const prevConsumer = setActiveConsumer
|
|
12896
|
+
const prevConsumer = setActiveConsumer(null);
|
|
13162
12897
|
try {
|
|
13163
12898
|
const embeddedTView = templateTNode.tView;
|
|
13164
12899
|
ngDevMode && assertDefined(embeddedTView, 'TView must be defined for a template node.');
|
|
@@ -13179,7 +12914,7 @@ function createAndRenderEmbeddedLView(declarationLView, templateTNode, context,
|
|
|
13179
12914
|
return embeddedLView;
|
|
13180
12915
|
}
|
|
13181
12916
|
finally {
|
|
13182
|
-
setActiveConsumer
|
|
12917
|
+
setActiveConsumer(prevConsumer);
|
|
13183
12918
|
}
|
|
13184
12919
|
}
|
|
13185
12920
|
/**
|
|
@@ -13424,7 +13159,7 @@ function cleanUpView(tView, lView) {
|
|
|
13424
13159
|
if (isDestroyed(lView)) {
|
|
13425
13160
|
return;
|
|
13426
13161
|
}
|
|
13427
|
-
const prevConsumer = setActiveConsumer
|
|
13162
|
+
const prevConsumer = setActiveConsumer(null);
|
|
13428
13163
|
try {
|
|
13429
13164
|
// Usually the Attached flag is removed when the view is detached from its parent, however
|
|
13430
13165
|
// if it's a root view, the flag won't be unset hence why we're also removing on destroy.
|
|
@@ -13435,7 +13170,7 @@ function cleanUpView(tView, lView) {
|
|
|
13435
13170
|
// This also aligns with the ViewEngine behavior. It also means that the onDestroy hook is
|
|
13436
13171
|
// really more of an "afterDestroy" hook if you think about it.
|
|
13437
13172
|
lView[FLAGS] |= 256 /* LViewFlags.Destroyed */;
|
|
13438
|
-
lView[REACTIVE_TEMPLATE_CONSUMER] && consumerDestroy
|
|
13173
|
+
lView[REACTIVE_TEMPLATE_CONSUMER] && consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);
|
|
13439
13174
|
executeOnDestroys(tView, lView);
|
|
13440
13175
|
processCleanups(tView, lView);
|
|
13441
13176
|
// For component views only, the local renderer is destroyed at clean up time.
|
|
@@ -13460,7 +13195,7 @@ function cleanUpView(tView, lView) {
|
|
|
13460
13195
|
unregisterLView(lView);
|
|
13461
13196
|
}
|
|
13462
13197
|
finally {
|
|
13463
|
-
setActiveConsumer
|
|
13198
|
+
setActiveConsumer(prevConsumer);
|
|
13464
13199
|
}
|
|
13465
13200
|
}
|
|
13466
13201
|
/** Removes listeners and unsubscribes from output subscriptions */
|
|
@@ -14067,7 +13802,7 @@ function maybeReturnReactiveLViewConsumer(consumer) {
|
|
|
14067
13802
|
freeConsumers.push(consumer);
|
|
14068
13803
|
}
|
|
14069
13804
|
const REACTIVE_LVIEW_CONSUMER_NODE = {
|
|
14070
|
-
...REACTIVE_NODE
|
|
13805
|
+
...REACTIVE_NODE,
|
|
14071
13806
|
consumerIsAlwaysLive: true,
|
|
14072
13807
|
kind: 'template',
|
|
14073
13808
|
consumerMarkedDirty: (node) => {
|
|
@@ -14095,7 +13830,7 @@ function getOrCreateTemporaryConsumer(lView) {
|
|
|
14095
13830
|
return consumer;
|
|
14096
13831
|
}
|
|
14097
13832
|
const TEMPORARY_CONSUMER_NODE = {
|
|
14098
|
-
...REACTIVE_NODE
|
|
13833
|
+
...REACTIVE_NODE,
|
|
14099
13834
|
consumerIsAlwaysLive: true,
|
|
14100
13835
|
kind: 'template',
|
|
14101
13836
|
consumerMarkedDirty: (node) => {
|
|
@@ -14262,9 +13997,9 @@ function refreshView(tView, lView, templateFn, context) {
|
|
|
14262
13997
|
if (!isInCheckNoChangesPass) {
|
|
14263
13998
|
if (viewShouldHaveReactiveConsumer(tView)) {
|
|
14264
13999
|
currentConsumer = getOrBorrowReactiveLViewConsumer(lView);
|
|
14265
|
-
prevConsumer = consumerBeforeComputation
|
|
14000
|
+
prevConsumer = consumerBeforeComputation(currentConsumer);
|
|
14266
14001
|
}
|
|
14267
|
-
else if (getActiveConsumer
|
|
14002
|
+
else if (getActiveConsumer() === null) {
|
|
14268
14003
|
// If the current view should not have a reactive consumer but we don't have an active consumer,
|
|
14269
14004
|
// we still need to create a temporary consumer to track any signal reads in this template.
|
|
14270
14005
|
// This is a rare case that can happen with `viewContainerRef.createEmbeddedView(...).detectChanges()`.
|
|
@@ -14273,10 +14008,10 @@ function refreshView(tView, lView, templateFn, context) {
|
|
|
14273
14008
|
// the temporary one.
|
|
14274
14009
|
returnConsumerToPool = false;
|
|
14275
14010
|
currentConsumer = getOrCreateTemporaryConsumer(lView);
|
|
14276
|
-
prevConsumer = consumerBeforeComputation
|
|
14011
|
+
prevConsumer = consumerBeforeComputation(currentConsumer);
|
|
14277
14012
|
}
|
|
14278
14013
|
else if (lView[REACTIVE_TEMPLATE_CONSUMER]) {
|
|
14279
|
-
consumerDestroy
|
|
14014
|
+
consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);
|
|
14280
14015
|
lView[REACTIVE_TEMPLATE_CONSUMER] = null;
|
|
14281
14016
|
}
|
|
14282
14017
|
}
|
|
@@ -14405,7 +14140,7 @@ function refreshView(tView, lView, templateFn, context) {
|
|
|
14405
14140
|
}
|
|
14406
14141
|
finally {
|
|
14407
14142
|
if (currentConsumer !== null) {
|
|
14408
|
-
consumerAfterComputation
|
|
14143
|
+
consumerAfterComputation(currentConsumer, prevConsumer);
|
|
14409
14144
|
if (returnConsumerToPool) {
|
|
14410
14145
|
maybeReturnReactiveLViewConsumer(currentConsumer);
|
|
14411
14146
|
}
|
|
@@ -14495,14 +14230,14 @@ function detectChangesInView(lView, mode) {
|
|
|
14495
14230
|
// Always refresh views marked for refresh, regardless of mode.
|
|
14496
14231
|
shouldRefreshView ||= !!(flags & 1024 /* LViewFlags.RefreshView */);
|
|
14497
14232
|
// Refresh views when they have a dirty reactive consumer, regardless of mode.
|
|
14498
|
-
shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange
|
|
14233
|
+
shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange(consumer));
|
|
14499
14234
|
shouldRefreshView ||= !!(ngDevMode && isExhaustiveCheckNoChanges());
|
|
14500
14235
|
// Mark the Flags and `ReactiveNode` as not dirty before refreshing the component, so that they
|
|
14501
14236
|
// can be re-dirtied during the refresh process.
|
|
14502
14237
|
if (consumer) {
|
|
14503
14238
|
consumer.dirty = false;
|
|
14504
14239
|
}
|
|
14505
|
-
lView[FLAGS] &=
|
|
14240
|
+
lView[FLAGS] &= -9217;
|
|
14506
14241
|
if (shouldRefreshView) {
|
|
14507
14242
|
refreshView(tView, lView, tView.template, lView[CONTEXT]);
|
|
14508
14243
|
}
|
|
@@ -14698,7 +14433,7 @@ function detachView(lContainer, removeIndex) {
|
|
|
14698
14433
|
viewToDetach[PARENT] = null;
|
|
14699
14434
|
viewToDetach[NEXT] = null;
|
|
14700
14435
|
// Unsets the attached flag
|
|
14701
|
-
viewToDetach[FLAGS] &=
|
|
14436
|
+
viewToDetach[FLAGS] &= -129 /* LViewFlags.Attached */;
|
|
14702
14437
|
}
|
|
14703
14438
|
return viewToDetach;
|
|
14704
14439
|
}
|
|
@@ -14780,7 +14515,7 @@ function trackMovedView(declarationContainer, lView) {
|
|
|
14780
14515
|
}
|
|
14781
14516
|
}
|
|
14782
14517
|
|
|
14783
|
-
|
|
14518
|
+
let ViewRef$1 = class ViewRef {
|
|
14784
14519
|
_lView;
|
|
14785
14520
|
_cdRefInjectingView;
|
|
14786
14521
|
notifyErrorHandler;
|
|
@@ -14818,13 +14553,6 @@ class ViewRef$1 {
|
|
|
14818
14553
|
get context() {
|
|
14819
14554
|
return this._lView[CONTEXT];
|
|
14820
14555
|
}
|
|
14821
|
-
/**
|
|
14822
|
-
* Reports whether the given view is considered dirty according to the different marking mechanisms.
|
|
14823
|
-
*/
|
|
14824
|
-
get dirty() {
|
|
14825
|
-
return (!!(this._lView[FLAGS] &
|
|
14826
|
-
(64 /* LViewFlags.Dirty */ | 1024 /* LViewFlags.RefreshView */ | 8192 /* LViewFlags.HasChildViewsToRefresh */)) || !!this._lView[REACTIVE_TEMPLATE_CONSUMER]?.dirty);
|
|
14827
|
-
}
|
|
14828
14556
|
/**
|
|
14829
14557
|
* @deprecated Replacing the full context object is not supported. Modify the context
|
|
14830
14558
|
* directly, or consider using a `Proxy` if you need to replace the full object.
|
|
@@ -14898,9 +14626,6 @@ class ViewRef$1 {
|
|
|
14898
14626
|
markForCheck() {
|
|
14899
14627
|
markViewDirty(this._cdRefInjectingView || this._lView, 4 /* NotificationSource.MarkForCheck */);
|
|
14900
14628
|
}
|
|
14901
|
-
markForRefresh() {
|
|
14902
|
-
markViewForRefresh(this._cdRefInjectingView || this._lView);
|
|
14903
|
-
}
|
|
14904
14629
|
/**
|
|
14905
14630
|
* Detaches the view from the change detection tree.
|
|
14906
14631
|
*
|
|
@@ -14955,7 +14680,7 @@ class ViewRef$1 {
|
|
|
14955
14680
|
* ```
|
|
14956
14681
|
*/
|
|
14957
14682
|
detach() {
|
|
14958
|
-
this._lView[FLAGS] &=
|
|
14683
|
+
this._lView[FLAGS] &= -129 /* LViewFlags.Attached */;
|
|
14959
14684
|
}
|
|
14960
14685
|
/**
|
|
14961
14686
|
* Re-attaches a view to the change detection tree.
|
|
@@ -15085,6 +14810,15 @@ class ViewRef$1 {
|
|
|
15085
14810
|
}
|
|
15086
14811
|
updateAncestorTraversalFlagsOnAttach(this._lView);
|
|
15087
14812
|
}
|
|
14813
|
+
};
|
|
14814
|
+
/**
|
|
14815
|
+
* Reports whether the given view is considered dirty according to the different marking mechanisms.
|
|
14816
|
+
*/
|
|
14817
|
+
function isViewDirty(view) {
|
|
14818
|
+
return requiresRefreshOrTraversal(view._lView) || !!(view._lView[FLAGS] & 64 /* LViewFlags.Dirty */);
|
|
14819
|
+
}
|
|
14820
|
+
function markForRefresh(view) {
|
|
14821
|
+
markViewForRefresh(view['_cdRefInjectingView'] || view._lView);
|
|
15088
14822
|
}
|
|
15089
14823
|
|
|
15090
14824
|
/**
|
|
@@ -17061,8 +16795,8 @@ function findMatchingDehydratedView(lContainer, template) {
|
|
|
17061
16795
|
*
|
|
17062
16796
|
* @publicApi
|
|
17063
16797
|
*/
|
|
17064
|
-
|
|
17065
|
-
}
|
|
16798
|
+
let ComponentRef$1 = class ComponentRef {
|
|
16799
|
+
};
|
|
17066
16800
|
/**
|
|
17067
16801
|
* Base class for a factory that can create a component dynamically.
|
|
17068
16802
|
* Instantiate a factory for a given type of component with `resolveComponentFactory()`.
|
|
@@ -17073,8 +16807,8 @@ class ComponentRef$1 {
|
|
|
17073
16807
|
* @deprecated Angular no longer requires Component factories. Please use other APIs where
|
|
17074
16808
|
* Component class can be used directly.
|
|
17075
16809
|
*/
|
|
17076
|
-
|
|
17077
|
-
}
|
|
16810
|
+
let ComponentFactory$1 = class ComponentFactory {
|
|
16811
|
+
};
|
|
17078
16812
|
|
|
17079
16813
|
class _NullComponentFactoryResolver {
|
|
17080
16814
|
resolveComponentFactory(component) {
|
|
@@ -17096,9 +16830,9 @@ class _NullComponentFactoryResolver {
|
|
|
17096
16830
|
* @deprecated Angular no longer requires Component factories. Please use other APIs where
|
|
17097
16831
|
* Component class can be used directly.
|
|
17098
16832
|
*/
|
|
17099
|
-
|
|
16833
|
+
let ComponentFactoryResolver$1 = class ComponentFactoryResolver {
|
|
17100
16834
|
static NULL = new _NullComponentFactoryResolver();
|
|
17101
|
-
}
|
|
16835
|
+
};
|
|
17102
16836
|
|
|
17103
16837
|
/**
|
|
17104
16838
|
* Creates and initializes a custom renderer that implements the `Renderer2` base class.
|
|
@@ -17457,7 +17191,6 @@ function addSet(sourceSet, targetSet) {
|
|
|
17457
17191
|
}
|
|
17458
17192
|
/** The deps tracker to be used in the current Angular app in dev mode. */
|
|
17459
17193
|
const depsTracker = new DepsTracker();
|
|
17460
|
-
const TEST_ONLY = { DepsTracker };
|
|
17461
17194
|
|
|
17462
17195
|
/**
|
|
17463
17196
|
* Compute the static styling (class/style) from `TAttributes`.
|
|
@@ -18101,11 +17834,15 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
18101
17834
|
componentType;
|
|
18102
17835
|
ngContentSelectors;
|
|
18103
17836
|
isBoundToModule;
|
|
17837
|
+
cachedInputs = null;
|
|
17838
|
+
cachedOutputs = null;
|
|
18104
17839
|
get inputs() {
|
|
18105
|
-
|
|
17840
|
+
this.cachedInputs ??= toInputRefArray(this.componentDef.inputs);
|
|
17841
|
+
return this.cachedInputs;
|
|
18106
17842
|
}
|
|
18107
17843
|
get outputs() {
|
|
18108
|
-
|
|
17844
|
+
this.cachedOutputs ??= toOutputRefArray(this.componentDef.outputs);
|
|
17845
|
+
return this.cachedOutputs;
|
|
18109
17846
|
}
|
|
18110
17847
|
/**
|
|
18111
17848
|
* @param componentDef The component definition.
|
|
@@ -18122,12 +17859,12 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
18122
17859
|
}
|
|
18123
17860
|
create(injector, projectableNodes, rootSelectorOrNode, environmentInjector) {
|
|
18124
17861
|
profiler(22 /* ProfilerEvent.DynamicComponentStart */);
|
|
18125
|
-
const prevConsumer = setActiveConsumer
|
|
17862
|
+
const prevConsumer = setActiveConsumer(null);
|
|
18126
17863
|
try {
|
|
18127
17864
|
const cmpDef = this.componentDef;
|
|
18128
17865
|
ngDevMode && verifyNotAnOrphanComponent(cmpDef);
|
|
18129
17866
|
const tAttributes = rootSelectorOrNode
|
|
18130
|
-
? ['ng-version', '19.2.
|
|
17867
|
+
? ['ng-version', '19.2.2']
|
|
18131
17868
|
: // Extract attributes and classes from the first selector only to match VE behavior.
|
|
18132
17869
|
extractAttrsAndClassesFromSelector(this.componentDef.selectors[0]);
|
|
18133
17870
|
// Create the root view. Uses empty TView and ContentTemplate.
|
|
@@ -18185,7 +17922,7 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
18185
17922
|
return new ComponentRef(this.componentType, rootLView);
|
|
18186
17923
|
}
|
|
18187
17924
|
finally {
|
|
18188
|
-
setActiveConsumer
|
|
17925
|
+
setActiveConsumer(prevConsumer);
|
|
18189
17926
|
}
|
|
18190
17927
|
}
|
|
18191
17928
|
}
|
|
@@ -19136,7 +18873,7 @@ function getQueryResults(lView, queryIndex) {
|
|
|
19136
18873
|
*/
|
|
19137
18874
|
function createQuerySignalFn(firstOnly, required, opts) {
|
|
19138
18875
|
let node;
|
|
19139
|
-
const signalFn = createComputed
|
|
18876
|
+
const signalFn = createComputed(() => {
|
|
19140
18877
|
// A dedicated signal that increments its value every time a query changes its dirty status. By
|
|
19141
18878
|
// using this signal we can implement a query as computed and avoid creation of a specialized
|
|
19142
18879
|
// reactive node type. Please note that a query gets marked dirty under the following
|
|
@@ -19150,7 +18887,7 @@ function createQuerySignalFn(firstOnly, required, opts) {
|
|
|
19150
18887
|
}
|
|
19151
18888
|
return value;
|
|
19152
18889
|
});
|
|
19153
|
-
node = signalFn[SIGNAL
|
|
18890
|
+
node = signalFn[SIGNAL];
|
|
19154
18891
|
node._dirtyCounter = signal(0);
|
|
19155
18892
|
node._flatValue = undefined;
|
|
19156
18893
|
if (ngDevMode) {
|
|
@@ -19169,7 +18906,7 @@ function createMultiResultQuerySignalFn(opts) {
|
|
|
19169
18906
|
return createQuerySignalFn(/* firstOnly */ false, /* required */ false, opts);
|
|
19170
18907
|
}
|
|
19171
18908
|
function bindQueryToSignal(target, queryIndex) {
|
|
19172
|
-
const node = target[SIGNAL
|
|
18909
|
+
const node = target[SIGNAL];
|
|
19173
18910
|
node._lView = getLView();
|
|
19174
18911
|
node._queryIndex = queryIndex;
|
|
19175
18912
|
node._queryList = loadQueryInternal(node._lView, queryIndex);
|
|
@@ -19342,16 +19079,16 @@ function createModelSignal(initialValue, opts) {
|
|
|
19342
19079
|
const emitterRef = new OutputEmitterRef();
|
|
19343
19080
|
node.value = initialValue;
|
|
19344
19081
|
function getter() {
|
|
19345
|
-
producerAccessed
|
|
19082
|
+
producerAccessed(node);
|
|
19346
19083
|
assertModelSet(node.value);
|
|
19347
19084
|
return node.value;
|
|
19348
19085
|
}
|
|
19349
|
-
getter[SIGNAL
|
|
19086
|
+
getter[SIGNAL] = node;
|
|
19350
19087
|
getter.asReadonly = signalAsReadonlyFn.bind(getter);
|
|
19351
19088
|
// TODO: Should we throw an error when updating a destroyed model?
|
|
19352
19089
|
getter.set = (newValue) => {
|
|
19353
19090
|
if (!node.equal(node.value, newValue)) {
|
|
19354
|
-
signalSetFn
|
|
19091
|
+
signalSetFn(node, newValue);
|
|
19355
19092
|
emitterRef.emit(newValue);
|
|
19356
19093
|
}
|
|
19357
19094
|
};
|
|
@@ -19661,9 +19398,6 @@ function registerNgModuleType(ngModuleType, id) {
|
|
|
19661
19398
|
assertSameOrNotExisting(id, existing, ngModuleType);
|
|
19662
19399
|
modules.set(id, ngModuleType);
|
|
19663
19400
|
}
|
|
19664
|
-
function clearModulesForTest() {
|
|
19665
|
-
modules.clear();
|
|
19666
|
-
}
|
|
19667
19401
|
function getRegisteredNgModuleType(id) {
|
|
19668
19402
|
return modules.get(id);
|
|
19669
19403
|
}
|
|
@@ -19719,8 +19453,8 @@ function ɵɵvalidateIframeAttribute(attrValue, tagName, attrName) {
|
|
|
19719
19453
|
*
|
|
19720
19454
|
* @publicApi
|
|
19721
19455
|
*/
|
|
19722
|
-
|
|
19723
|
-
}
|
|
19456
|
+
let NgModuleRef$1 = class NgModuleRef {
|
|
19457
|
+
};
|
|
19724
19458
|
/**
|
|
19725
19459
|
* @publicApi
|
|
19726
19460
|
*
|
|
@@ -19731,8 +19465,8 @@ class NgModuleRef$1 {
|
|
|
19731
19465
|
* [createNgModule](api/core/createNgModule)), consider switching to those APIs instead of
|
|
19732
19466
|
* using factory-based ones.
|
|
19733
19467
|
*/
|
|
19734
|
-
|
|
19735
|
-
}
|
|
19468
|
+
let NgModuleFactory$1 = class NgModuleFactory {
|
|
19469
|
+
};
|
|
19736
19470
|
|
|
19737
19471
|
/**
|
|
19738
19472
|
* Returns a new NgModuleRef instance based on the NgModule class and parent injector provided.
|
|
@@ -20674,9 +20408,6 @@ function validateMappings(bindingType, def, hostDirectiveBindings) {
|
|
|
20674
20408
|
}
|
|
20675
20409
|
}
|
|
20676
20410
|
|
|
20677
|
-
function isIterable(obj) {
|
|
20678
|
-
return obj !== null && typeof obj === 'object' && obj[Symbol.iterator] !== undefined;
|
|
20679
|
-
}
|
|
20680
20411
|
function isListLikeIterable(obj) {
|
|
20681
20412
|
if (!isJsObject(obj))
|
|
20682
20413
|
return false;
|
|
@@ -20910,7 +20641,7 @@ function locateOrCreateContainerAnchorImpl(tView, lView, tNode, index) {
|
|
|
20910
20641
|
lastNodeWasCreated(isNodeCreationMode);
|
|
20911
20642
|
// Regular creation mode.
|
|
20912
20643
|
if (isNodeCreationMode) {
|
|
20913
|
-
return createContainerAnchorImpl(tView, lView
|
|
20644
|
+
return createContainerAnchorImpl(tView, lView);
|
|
20914
20645
|
}
|
|
20915
20646
|
const ssrId = hydrationInfo.data[TEMPLATES]?.[index] ?? null;
|
|
20916
20647
|
// Apply `ssrId` value to the underlying TView if it was not previously set.
|
|
@@ -21650,26 +21381,6 @@ function setClassMetadata(type, decorators, ctorParameters, propDecorators) {
|
|
|
21650
21381
|
});
|
|
21651
21382
|
}
|
|
21652
21383
|
|
|
21653
|
-
/*
|
|
21654
|
-
* This file exists to support compilation of @angular/core in Ivy mode.
|
|
21655
|
-
*
|
|
21656
|
-
* When the Angular compiler processes a compilation unit, it normally writes imports to
|
|
21657
|
-
* @angular/core. When compiling the core package itself this strategy isn't usable. Instead, the
|
|
21658
|
-
* compiler writes imports to this file.
|
|
21659
|
-
*
|
|
21660
|
-
* Only a subset of such imports are supported - core is not allowed to declare components or pipes.
|
|
21661
|
-
* A check in ngtsc's `R3SymbolsImportRewriter` validates this condition. The rewriter is only used
|
|
21662
|
-
* when compiling @angular/core and is responsible for translating an external name (prefixed with
|
|
21663
|
-
* ɵ) to the internal symbol name as exported below.
|
|
21664
|
-
*
|
|
21665
|
-
* The below symbols are used for @Injectable and @NgModule compilation.
|
|
21666
|
-
*/
|
|
21667
|
-
/**
|
|
21668
|
-
* The existence of this constant (in this particular file) informs the Angular compiler that the
|
|
21669
|
-
* current program is actually @angular/core, which needs to be compiled specially.
|
|
21670
|
-
*/
|
|
21671
|
-
const ITS_JUST_ANGULAR = true;
|
|
21672
|
-
|
|
21673
21384
|
class Console {
|
|
21674
21385
|
log(message) {
|
|
21675
21386
|
// tslint:disable-next-line:no-console
|
|
@@ -21941,7 +21652,7 @@ function canBeHeldWeakly(value) {
|
|
|
21941
21652
|
* Marks a component for check (in case of OnPush components) and synchronously
|
|
21942
21653
|
* performs change detection on the application this component belongs to.
|
|
21943
21654
|
*
|
|
21944
|
-
* @param component Component to {@link ChangeDetectorRef#markForCheck mark for check}
|
|
21655
|
+
* @param component Component to {@link /api/core/ChangeDetectorRef#markForCheck mark for check}
|
|
21945
21656
|
*
|
|
21946
21657
|
* @publicApi
|
|
21947
21658
|
*/
|
|
@@ -22737,7 +22448,7 @@ function extractEffectsFromInjector(injector) {
|
|
|
22737
22448
|
}
|
|
22738
22449
|
const resolverToEffects = getFrameworkDIDebugData().resolverToEffects;
|
|
22739
22450
|
const effects = resolverToEffects.get(diResolver) ?? [];
|
|
22740
|
-
return effects.map((effect) => effect[SIGNAL
|
|
22451
|
+
return effects.map((effect) => effect[SIGNAL]);
|
|
22741
22452
|
}
|
|
22742
22453
|
function extractSignalNodesAndEdgesFromRoots(nodes, signalDependenciesMap = new Map()) {
|
|
22743
22454
|
for (const node of nodes) {
|
|
@@ -23466,7 +23177,7 @@ function publishDefaultGlobalUtils() {
|
|
|
23466
23177
|
* Sets the error for an invalid write to a signal to be an Angular `RuntimeError`.
|
|
23467
23178
|
*/
|
|
23468
23179
|
function publishSignalConfiguration() {
|
|
23469
|
-
setThrowInvalidWriteToSignalError
|
|
23180
|
+
setThrowInvalidWriteToSignalError(() => {
|
|
23470
23181
|
throw new RuntimeError(600 /* RuntimeErrorCode.SIGNAL_WRITE_FROM_ILLEGAL_CONTEXT */, ngDevMode && 'Writing to signals is not allowed in a `computed`.');
|
|
23471
23182
|
});
|
|
23472
23183
|
}
|
|
@@ -23499,7 +23210,6 @@ function optionsReducer(dst, objs) {
|
|
|
23499
23210
|
* A reference to an Angular application running on a page.
|
|
23500
23211
|
*
|
|
23501
23212
|
* @usageNotes
|
|
23502
|
-
* {@a is-stable-examples}
|
|
23503
23213
|
* ### isStable examples and caveats
|
|
23504
23214
|
*
|
|
23505
23215
|
* Note two important points about `isStable`, demonstrated in the examples below:
|
|
@@ -23716,12 +23426,15 @@ class ApplicationRef {
|
|
|
23716
23426
|
const isComponentFactory = componentOrFactory instanceof ComponentFactory$1;
|
|
23717
23427
|
const initStatus = this._injector.get(ApplicationInitStatus);
|
|
23718
23428
|
if (!initStatus.done) {
|
|
23719
|
-
|
|
23720
|
-
|
|
23721
|
-
|
|
23722
|
-
|
|
23723
|
-
|
|
23724
|
-
|
|
23429
|
+
let errorMessage = '';
|
|
23430
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
23431
|
+
const standalone = !isComponentFactory && isStandalone(componentOrFactory);
|
|
23432
|
+
errorMessage =
|
|
23433
|
+
'Cannot bootstrap as there are still asynchronous initializers running.' +
|
|
23434
|
+
(standalone
|
|
23435
|
+
? ''
|
|
23436
|
+
: ' Bootstrap components in the `ngDoBootstrap` method of the root module.');
|
|
23437
|
+
}
|
|
23725
23438
|
throw new RuntimeError(405 /* RuntimeErrorCode.ASYNC_INITIALIZERS_STILL_RUNNING */, errorMessage);
|
|
23726
23439
|
}
|
|
23727
23440
|
let componentFactory;
|
|
@@ -23789,7 +23502,7 @@ class ApplicationRef {
|
|
|
23789
23502
|
if (this._runningTick) {
|
|
23790
23503
|
throw new RuntimeError(101 /* RuntimeErrorCode.RECURSIVE_APPLICATION_REF_TICK */, ngDevMode && 'ApplicationRef.tick is called recursively');
|
|
23791
23504
|
}
|
|
23792
|
-
const prevConsumer = setActiveConsumer
|
|
23505
|
+
const prevConsumer = setActiveConsumer(null);
|
|
23793
23506
|
try {
|
|
23794
23507
|
this._runningTick = true;
|
|
23795
23508
|
this.synchronize();
|
|
@@ -23807,7 +23520,7 @@ class ApplicationRef {
|
|
|
23807
23520
|
this._runningTick = false;
|
|
23808
23521
|
this.tracingSnapshot?.dispose();
|
|
23809
23522
|
this.tracingSnapshot = null;
|
|
23810
|
-
setActiveConsumer
|
|
23523
|
+
setActiveConsumer(prevConsumer);
|
|
23811
23524
|
this.afterTick.next();
|
|
23812
23525
|
profiler(13 /* ProfilerEvent.ChangeDetectionEnd */);
|
|
23813
23526
|
}
|
|
@@ -23839,7 +23552,7 @@ class ApplicationRef {
|
|
|
23839
23552
|
synchronizeOnce() {
|
|
23840
23553
|
// First, process any dirty root effects.
|
|
23841
23554
|
if (this.dirtyFlags & 16 /* ApplicationRefDirtyFlags.RootEffects */) {
|
|
23842
|
-
this.dirtyFlags &=
|
|
23555
|
+
this.dirtyFlags &= -17 /* ApplicationRefDirtyFlags.RootEffects */;
|
|
23843
23556
|
this.rootEffectScheduler.flush();
|
|
23844
23557
|
}
|
|
23845
23558
|
// First check dirty views, if there are any.
|
|
@@ -23849,7 +23562,7 @@ class ApplicationRef {
|
|
|
23849
23562
|
// `ApplicationRef.tick()` and the `NgZone` integration.
|
|
23850
23563
|
const useGlobalCheck = Boolean(this.dirtyFlags & 1 /* ApplicationRefDirtyFlags.ViewTreeGlobal */);
|
|
23851
23564
|
// Clear the view-related dirty flags.
|
|
23852
|
-
this.dirtyFlags &=
|
|
23565
|
+
this.dirtyFlags &= -8 /* ApplicationRefDirtyFlags.ViewTreeAny */;
|
|
23853
23566
|
// Set the AfterRender bit, as we're checking views and will need to run afterRender hooks.
|
|
23854
23567
|
this.dirtyFlags |= 8 /* ApplicationRefDirtyFlags.AfterRender */;
|
|
23855
23568
|
// Check all potentially dirty views.
|
|
@@ -23859,7 +23572,7 @@ class ApplicationRef {
|
|
|
23859
23572
|
// If `markForCheck()` was called during view checking, it will have set the `ViewTreeCheck`
|
|
23860
23573
|
// flag. We clear the flag here because, for backwards compatibility, `markForCheck()`
|
|
23861
23574
|
// during view checking doesn't cause the view to be re-checked.
|
|
23862
|
-
this.dirtyFlags &=
|
|
23575
|
+
this.dirtyFlags &= -5 /* ApplicationRefDirtyFlags.ViewTreeCheck */;
|
|
23863
23576
|
// Check if any views are still dirty after checking and we need to loop back.
|
|
23864
23577
|
this.syncDirtyFlagsWithViews();
|
|
23865
23578
|
if (this.dirtyFlags &
|
|
@@ -23877,7 +23590,7 @@ class ApplicationRef {
|
|
|
23877
23590
|
}
|
|
23878
23591
|
// Even if there were no dirty views, afterRender hooks might still be dirty.
|
|
23879
23592
|
if (this.dirtyFlags & 8 /* ApplicationRefDirtyFlags.AfterRender */) {
|
|
23880
|
-
this.dirtyFlags &=
|
|
23593
|
+
this.dirtyFlags &= -9 /* ApplicationRefDirtyFlags.AfterRender */;
|
|
23881
23594
|
this.afterRenderManager.execute();
|
|
23882
23595
|
// afterRender hooks might influence dirty flags.
|
|
23883
23596
|
}
|
|
@@ -23906,7 +23619,7 @@ class ApplicationRef {
|
|
|
23906
23619
|
else {
|
|
23907
23620
|
// Even though this flag may be set, none of _our_ views require traversal, and so the
|
|
23908
23621
|
// `ApplicationRef` doesn't require any repeated checking.
|
|
23909
|
-
this.dirtyFlags &=
|
|
23622
|
+
this.dirtyFlags &= -8 /* ApplicationRefDirtyFlags.ViewTreeAny */;
|
|
23910
23623
|
}
|
|
23911
23624
|
}
|
|
23912
23625
|
/**
|
|
@@ -24252,8 +23965,8 @@ function triggerDeferBlock(triggerType, lView, tNode) {
|
|
|
24252
23965
|
}
|
|
24253
23966
|
}
|
|
24254
23967
|
/**
|
|
24255
|
-
* The core mechanism for incremental hydration. This triggers
|
|
24256
|
-
* hydration for all the blocks in the tree that need to be hydrated
|
|
23968
|
+
* The core mechanism for incremental hydration. This triggers or
|
|
23969
|
+
* queues hydration for all the blocks in the tree that need to be hydrated
|
|
24257
23970
|
* and keeps track of all those blocks that were hydrated along the way.
|
|
24258
23971
|
*
|
|
24259
23972
|
* Note: the `replayQueuedEventsFn` is only provided when hydration is invoked
|
|
@@ -24268,26 +23981,57 @@ async function triggerHydrationFromBlockName(injector, blockName, replayQueuedEv
|
|
|
24268
23981
|
if (blocksBeingHydrated.has(blockName)) {
|
|
24269
23982
|
return;
|
|
24270
23983
|
}
|
|
24271
|
-
// The parent promise is the possible case of a list of defer blocks already being queued
|
|
24272
|
-
// If it is queued, it'll exist; otherwise it'll be null. The hydration queue will contain all
|
|
24273
|
-
// elements that need to be hydrated, sans any that have promises already
|
|
24274
|
-
const { parentBlockPromise, hydrationQueue } = getParentBlockHydrationQueue(blockName, injector);
|
|
24275
|
-
// The hydrating map in the registry prevents re-triggering hydration for a block that's already in
|
|
24276
|
-
// the hydration queue. Here we generate promises for each of the blocks about to be hydrated
|
|
24277
|
-
populateHydratingStateForQueue(dehydratedBlockRegistry, hydrationQueue);
|
|
24278
23984
|
// Trigger resource loading and hydration for the blocks in the queue in the order of highest block
|
|
24279
23985
|
// to lowest block. Once a block has finished resource loading, after next render fires after hydration
|
|
24280
23986
|
// finishes. The new block will have its defer instruction called and will be in the registry.
|
|
24281
23987
|
// Due to timing related to potential nested control flow, this has to be scheduled after the next render.
|
|
24282
|
-
|
|
24283
|
-
|
|
24284
|
-
|
|
24285
|
-
//
|
|
24286
|
-
//
|
|
24287
|
-
|
|
23988
|
+
const { parentBlockPromise, hydrationQueue } = getParentBlockHydrationQueue(blockName, injector);
|
|
23989
|
+
if (hydrationQueue.length === 0)
|
|
23990
|
+
return;
|
|
23991
|
+
// It's possible that the hydrationQueue topmost item is actually in the process of hydrating and has
|
|
23992
|
+
// a promise already. In that case, we don't want to destroy that promise and queue it again.
|
|
23993
|
+
if (parentBlockPromise !== null) {
|
|
23994
|
+
hydrationQueue.shift();
|
|
23995
|
+
}
|
|
23996
|
+
// The hydrating map in the registry prevents re-triggering hydration for a block that's already in
|
|
23997
|
+
// the hydration queue. Here we generate promises for each of the blocks about to be hydrated
|
|
23998
|
+
populateHydratingStateForQueue(dehydratedBlockRegistry, hydrationQueue);
|
|
23999
|
+
// We await this after populating the hydration state so we can prevent re-triggering hydration for
|
|
24000
|
+
// the same blocks while this promise is being awaited.
|
|
24288
24001
|
if (parentBlockPromise !== null) {
|
|
24289
24002
|
await parentBlockPromise;
|
|
24290
24003
|
}
|
|
24004
|
+
const topmostParentBlock = hydrationQueue[0];
|
|
24005
|
+
if (dehydratedBlockRegistry.has(topmostParentBlock)) {
|
|
24006
|
+
// the topmost parent block is already in the registry and we can proceed
|
|
24007
|
+
// with hydration.
|
|
24008
|
+
await triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn);
|
|
24009
|
+
}
|
|
24010
|
+
else {
|
|
24011
|
+
// the topmost parent block is not yet in the registry, which may mean
|
|
24012
|
+
// a lazy loaded route, a control flow branch was taken, a route has
|
|
24013
|
+
// been navigated, etc. So we need to queue up the hydration process
|
|
24014
|
+
// so that it can be finished after the top block has had its defer
|
|
24015
|
+
// instruction executed.
|
|
24016
|
+
dehydratedBlockRegistry.awaitParentBlock(topmostParentBlock, async () => await triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn));
|
|
24017
|
+
}
|
|
24018
|
+
}
|
|
24019
|
+
/**
|
|
24020
|
+
* The core mechanism for incremental hydration. This triggers
|
|
24021
|
+
* hydration for all the blocks in the tree that need to be hydrated
|
|
24022
|
+
* and keeps track of all those blocks that were hydrated along the way.
|
|
24023
|
+
*
|
|
24024
|
+
* Note: the `replayQueuedEventsFn` is only provided when hydration is invoked
|
|
24025
|
+
* as a result of an event replay (via JsAction). When hydration is invoked from
|
|
24026
|
+
* an instruction set (e.g. `deferOnImmediate`) - there is no need to replay any
|
|
24027
|
+
* events.
|
|
24028
|
+
*/
|
|
24029
|
+
async function triggerHydrationForBlockQueue(injector, hydrationQueue, replayQueuedEventsFn) {
|
|
24030
|
+
const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);
|
|
24031
|
+
const blocksBeingHydrated = dehydratedBlockRegistry.hydrating;
|
|
24032
|
+
// Indicate that we have some pending async work.
|
|
24033
|
+
const pendingTasks = injector.get(PendingTasksInternal);
|
|
24034
|
+
const taskId = pendingTasks.add();
|
|
24291
24035
|
// Actually do the triggering and hydration of the queue of blocks
|
|
24292
24036
|
for (let blockQueueIdx = 0; blockQueueIdx < hydrationQueue.length; blockQueueIdx++) {
|
|
24293
24037
|
const dehydratedBlockId = hydrationQueue[blockQueueIdx];
|
|
@@ -24320,8 +24064,9 @@ async function triggerHydrationFromBlockName(injector, blockName, replayQueuedEv
|
|
|
24320
24064
|
break;
|
|
24321
24065
|
}
|
|
24322
24066
|
}
|
|
24323
|
-
|
|
24324
|
-
|
|
24067
|
+
const lastBlockName = hydrationQueue[hydrationQueue.length - 1];
|
|
24068
|
+
// Await hydration completion for the last block.
|
|
24069
|
+
await blocksBeingHydrated.get(lastBlockName)?.promise;
|
|
24325
24070
|
// All async work is done, remove the taskId from the registry.
|
|
24326
24071
|
pendingTasks.remove(taskId);
|
|
24327
24072
|
// Replay any queued events, if any exist and the replay operation was requested.
|
|
@@ -24329,7 +24074,7 @@ async function triggerHydrationFromBlockName(injector, blockName, replayQueuedEv
|
|
|
24329
24074
|
replayQueuedEventsFn(hydrationQueue);
|
|
24330
24075
|
}
|
|
24331
24076
|
// Cleanup after hydration of all affected defer blocks.
|
|
24332
|
-
cleanupHydratedDeferBlocks(dehydratedBlockRegistry.get(
|
|
24077
|
+
cleanupHydratedDeferBlocks(dehydratedBlockRegistry.get(lastBlockName), hydrationQueue, dehydratedBlockRegistry, injector.get(ApplicationRef));
|
|
24333
24078
|
}
|
|
24334
24079
|
function deferBlockHasErrored(deferBlock) {
|
|
24335
24080
|
return (getLDeferBlockDetails(deferBlock.lView, deferBlock.tNode)[DEFER_BLOCK_STATE] ===
|
|
@@ -24508,7 +24253,7 @@ function setTimerTriggers(injector, elementTriggers) {
|
|
|
24508
24253
|
function setImmediateTriggers(injector, elementTriggers) {
|
|
24509
24254
|
for (const elementTrigger of elementTriggers) {
|
|
24510
24255
|
// Note: we intentionally avoid awaiting each call and instead kick off
|
|
24511
|
-
//
|
|
24256
|
+
// the hydration process simultaneously for all defer blocks with this trigger;
|
|
24512
24257
|
triggerHydrationFromBlockName(injector, elementTrigger.blockName);
|
|
24513
24258
|
}
|
|
24514
24259
|
}
|
|
@@ -24618,7 +24363,7 @@ function ɵɵdeferWhen(rawValue) {
|
|
|
24618
24363
|
return;
|
|
24619
24364
|
const bindingIndex = nextBindingIndex();
|
|
24620
24365
|
if (bindingUpdated(lView, bindingIndex, rawValue)) {
|
|
24621
|
-
const prevConsumer = setActiveConsumer
|
|
24366
|
+
const prevConsumer = setActiveConsumer(null);
|
|
24622
24367
|
try {
|
|
24623
24368
|
const value = Boolean(rawValue); // handle truthy or falsy values
|
|
24624
24369
|
const lDetails = getLDeferBlockDetails(lView, tNode);
|
|
@@ -24634,7 +24379,7 @@ function ɵɵdeferWhen(rawValue) {
|
|
|
24634
24379
|
}
|
|
24635
24380
|
}
|
|
24636
24381
|
finally {
|
|
24637
|
-
setActiveConsumer
|
|
24382
|
+
setActiveConsumer(prevConsumer);
|
|
24638
24383
|
}
|
|
24639
24384
|
}
|
|
24640
24385
|
}
|
|
@@ -24652,7 +24397,7 @@ function ɵɵdeferPrefetchWhen(rawValue) {
|
|
|
24652
24397
|
return;
|
|
24653
24398
|
const bindingIndex = nextBindingIndex();
|
|
24654
24399
|
if (bindingUpdated(lView, bindingIndex, rawValue)) {
|
|
24655
|
-
const prevConsumer = setActiveConsumer
|
|
24400
|
+
const prevConsumer = setActiveConsumer(null);
|
|
24656
24401
|
try {
|
|
24657
24402
|
const value = Boolean(rawValue); // handle truthy or falsy values
|
|
24658
24403
|
const tView = lView[TVIEW];
|
|
@@ -24664,7 +24409,7 @@ function ɵɵdeferPrefetchWhen(rawValue) {
|
|
|
24664
24409
|
}
|
|
24665
24410
|
}
|
|
24666
24411
|
finally {
|
|
24667
|
-
setActiveConsumer
|
|
24412
|
+
setActiveConsumer(prevConsumer);
|
|
24668
24413
|
}
|
|
24669
24414
|
}
|
|
24670
24415
|
}
|
|
@@ -24693,7 +24438,7 @@ function ɵɵdeferHydrateWhen(rawValue) {
|
|
|
24693
24438
|
}
|
|
24694
24439
|
else {
|
|
24695
24440
|
const injector = lView[INJECTOR];
|
|
24696
|
-
const prevConsumer = setActiveConsumer
|
|
24441
|
+
const prevConsumer = setActiveConsumer(null);
|
|
24697
24442
|
try {
|
|
24698
24443
|
const value = Boolean(rawValue); // handle truthy or falsy values
|
|
24699
24444
|
if (value === true) {
|
|
@@ -24707,7 +24452,7 @@ function ɵɵdeferHydrateWhen(rawValue) {
|
|
|
24707
24452
|
}
|
|
24708
24453
|
}
|
|
24709
24454
|
finally {
|
|
24710
|
-
setActiveConsumer
|
|
24455
|
+
setActiveConsumer(prevConsumer);
|
|
24711
24456
|
}
|
|
24712
24457
|
}
|
|
24713
24458
|
}
|
|
@@ -24757,7 +24502,7 @@ function ɵɵdeferPrefetchOnIdle() {
|
|
|
24757
24502
|
}
|
|
24758
24503
|
if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
|
|
24759
24504
|
return;
|
|
24760
|
-
scheduleDelayedPrefetching(onIdle
|
|
24505
|
+
scheduleDelayedPrefetching(onIdle);
|
|
24761
24506
|
}
|
|
24762
24507
|
/**
|
|
24763
24508
|
* Sets up logic to handle the `on idle` deferred trigger.
|
|
@@ -24873,7 +24618,7 @@ function ɵɵdeferPrefetchOnTimer(delay) {
|
|
|
24873
24618
|
}
|
|
24874
24619
|
if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode))
|
|
24875
24620
|
return;
|
|
24876
|
-
scheduleDelayedPrefetching(onTimer(delay)
|
|
24621
|
+
scheduleDelayedPrefetching(onTimer(delay));
|
|
24877
24622
|
}
|
|
24878
24623
|
/**
|
|
24879
24624
|
* Creates runtime data structures for the `on timer` hydrate trigger.
|
|
@@ -25691,7 +25436,7 @@ function getTStylingRangePrevDuplicate(tStylingRange) {
|
|
|
25691
25436
|
function setTStylingRangePrev(tStylingRange, previous) {
|
|
25692
25437
|
ngDevMode && assertNumber(tStylingRange, 'expected number');
|
|
25693
25438
|
ngDevMode && assertNumberInRange(previous, 0, 32767 /* StylingRange.UNSIGNED_MASK */);
|
|
25694
|
-
return ((tStylingRange &
|
|
25439
|
+
return ((tStylingRange & 131071 /* StylingRange.PREV_MASK */) |
|
|
25695
25440
|
(previous << 17 /* StylingRange.PREV_SHIFT */));
|
|
25696
25441
|
}
|
|
25697
25442
|
function setTStylingRangePrevDuplicate(tStylingRange) {
|
|
@@ -25705,7 +25450,7 @@ function getTStylingRangeNext(tStylingRange) {
|
|
|
25705
25450
|
function setTStylingRangeNext(tStylingRange, next) {
|
|
25706
25451
|
ngDevMode && assertNumber(tStylingRange, 'expected number');
|
|
25707
25452
|
ngDevMode && assertNumberInRange(next, 0, 32767 /* StylingRange.UNSIGNED_MASK */);
|
|
25708
|
-
return ((tStylingRange &
|
|
25453
|
+
return ((tStylingRange & -131069 /* StylingRange.NEXT_MASK */) | //
|
|
25709
25454
|
(next << 2 /* StylingRange.NEXT_SHIFT */));
|
|
25710
25455
|
}
|
|
25711
25456
|
function getTStylingRangeNextDuplicate(tStylingRange) {
|
|
@@ -25716,166 +25461,7 @@ function setTStylingRangeNextDuplicate(tStylingRange) {
|
|
|
25716
25461
|
ngDevMode && assertNumber(tStylingRange, 'expected number');
|
|
25717
25462
|
return (tStylingRange | 1 /* StylingRange.NEXT_DUPLICATE */);
|
|
25718
25463
|
}
|
|
25719
|
-
function getTStylingRangeTail(tStylingRange) {
|
|
25720
|
-
ngDevMode && assertNumber(tStylingRange, 'expected number');
|
|
25721
|
-
const next = getTStylingRangeNext(tStylingRange);
|
|
25722
|
-
return next === 0 ? getTStylingRangePrev(tStylingRange) : next;
|
|
25723
|
-
}
|
|
25724
25464
|
|
|
25725
|
-
/**
|
|
25726
|
-
* NOTE: The word `styling` is used interchangeably as style or class styling.
|
|
25727
|
-
*
|
|
25728
|
-
* This file contains code to link styling instructions together so that they can be replayed in
|
|
25729
|
-
* priority order. The file exists because Ivy styling instruction execution order does not match
|
|
25730
|
-
* that of the priority order. The purpose of this code is to create a linked list so that the
|
|
25731
|
-
* instructions can be traversed in priority order when computing the styles.
|
|
25732
|
-
*
|
|
25733
|
-
* Assume we are dealing with the following code:
|
|
25734
|
-
* ```angular-ts
|
|
25735
|
-
* @Component({
|
|
25736
|
-
* template: `
|
|
25737
|
-
* <my-cmp [style]=" {color: '#001'} "
|
|
25738
|
-
* [style.color]=" #002 "
|
|
25739
|
-
* dir-style-color-1
|
|
25740
|
-
* dir-style-color-2> `
|
|
25741
|
-
* })
|
|
25742
|
-
* class ExampleComponent {
|
|
25743
|
-
* static ngComp = ... {
|
|
25744
|
-
* ...
|
|
25745
|
-
* // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
|
|
25746
|
-
* ɵɵstyleMap({color: '#001'});
|
|
25747
|
-
* ɵɵstyleProp('color', '#002');
|
|
25748
|
-
* ...
|
|
25749
|
-
* }
|
|
25750
|
-
* }
|
|
25751
|
-
*
|
|
25752
|
-
* @Directive({
|
|
25753
|
-
* selector: `[dir-style-color-1]',
|
|
25754
|
-
* })
|
|
25755
|
-
* class Style1Directive {
|
|
25756
|
-
* @HostBinding('style') style = {color: '#005'};
|
|
25757
|
-
* @HostBinding('style.color') color = '#006';
|
|
25758
|
-
*
|
|
25759
|
-
* static ngDir = ... {
|
|
25760
|
-
* ...
|
|
25761
|
-
* // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
|
|
25762
|
-
* ɵɵstyleMap({color: '#005'});
|
|
25763
|
-
* ɵɵstyleProp('color', '#006');
|
|
25764
|
-
* ...
|
|
25765
|
-
* }
|
|
25766
|
-
* }
|
|
25767
|
-
*
|
|
25768
|
-
* @Directive({
|
|
25769
|
-
* selector: `[dir-style-color-2]',
|
|
25770
|
-
* })
|
|
25771
|
-
* class Style2Directive {
|
|
25772
|
-
* @HostBinding('style') style = {color: '#007'};
|
|
25773
|
-
* @HostBinding('style.color') color = '#008';
|
|
25774
|
-
*
|
|
25775
|
-
* static ngDir = ... {
|
|
25776
|
-
* ...
|
|
25777
|
-
* // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
|
|
25778
|
-
* ɵɵstyleMap({color: '#007'});
|
|
25779
|
-
* ɵɵstyleProp('color', '#008');
|
|
25780
|
-
* ...
|
|
25781
|
-
* }
|
|
25782
|
-
* }
|
|
25783
|
-
*
|
|
25784
|
-
* @Directive({
|
|
25785
|
-
* selector: `my-cmp',
|
|
25786
|
-
* })
|
|
25787
|
-
* class MyComponent {
|
|
25788
|
-
* @HostBinding('style') style = {color: '#003'};
|
|
25789
|
-
* @HostBinding('style.color') color = '#004';
|
|
25790
|
-
*
|
|
25791
|
-
* static ngComp = ... {
|
|
25792
|
-
* ...
|
|
25793
|
-
* // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
|
|
25794
|
-
* ɵɵstyleMap({color: '#003'});
|
|
25795
|
-
* ɵɵstyleProp('color', '#004');
|
|
25796
|
-
* ...
|
|
25797
|
-
* }
|
|
25798
|
-
* }
|
|
25799
|
-
* ```
|
|
25800
|
-
*
|
|
25801
|
-
* The Order of instruction execution is:
|
|
25802
|
-
*
|
|
25803
|
-
* NOTE: the comment binding location is for illustrative purposes only.
|
|
25804
|
-
*
|
|
25805
|
-
* ```ts
|
|
25806
|
-
* // Template: (ExampleComponent)
|
|
25807
|
-
* ɵɵstyleMap({color: '#001'}); // Binding index: 10
|
|
25808
|
-
* ɵɵstyleProp('color', '#002'); // Binding index: 12
|
|
25809
|
-
* // MyComponent
|
|
25810
|
-
* ɵɵstyleMap({color: '#003'}); // Binding index: 20
|
|
25811
|
-
* ɵɵstyleProp('color', '#004'); // Binding index: 22
|
|
25812
|
-
* // Style1Directive
|
|
25813
|
-
* ɵɵstyleMap({color: '#005'}); // Binding index: 24
|
|
25814
|
-
* ɵɵstyleProp('color', '#006'); // Binding index: 26
|
|
25815
|
-
* // Style2Directive
|
|
25816
|
-
* ɵɵstyleMap({color: '#007'}); // Binding index: 28
|
|
25817
|
-
* ɵɵstyleProp('color', '#008'); // Binding index: 30
|
|
25818
|
-
* ```
|
|
25819
|
-
*
|
|
25820
|
-
* The correct priority order of concatenation is:
|
|
25821
|
-
*
|
|
25822
|
-
* ```ts
|
|
25823
|
-
* // MyComponent
|
|
25824
|
-
* ɵɵstyleMap({color: '#003'}); // Binding index: 20
|
|
25825
|
-
* ɵɵstyleProp('color', '#004'); // Binding index: 22
|
|
25826
|
-
* // Style1Directive
|
|
25827
|
-
* ɵɵstyleMap({color: '#005'}); // Binding index: 24
|
|
25828
|
-
* ɵɵstyleProp('color', '#006'); // Binding index: 26
|
|
25829
|
-
* // Style2Directive
|
|
25830
|
-
* ɵɵstyleMap({color: '#007'}); // Binding index: 28
|
|
25831
|
-
* ɵɵstyleProp('color', '#008'); // Binding index: 30
|
|
25832
|
-
* // Template: (ExampleComponent)
|
|
25833
|
-
* ɵɵstyleMap({color: '#001'}); // Binding index: 10
|
|
25834
|
-
* ɵɵstyleProp('color', '#002'); // Binding index: 12
|
|
25835
|
-
* ```
|
|
25836
|
-
*
|
|
25837
|
-
* What color should be rendered?
|
|
25838
|
-
*
|
|
25839
|
-
* Once the items are correctly sorted in the list, the answer is simply the last item in the
|
|
25840
|
-
* concatenation list which is `#002`.
|
|
25841
|
-
*
|
|
25842
|
-
* To do so we keep a linked list of all of the bindings which pertain to this element.
|
|
25843
|
-
* Notice that the bindings are inserted in the order of execution, but the `TView.data` allows
|
|
25844
|
-
* us to traverse them in the order of priority.
|
|
25845
|
-
*
|
|
25846
|
-
* |Idx|`TView.data`|`LView` | Notes
|
|
25847
|
-
* |---|------------|-----------------|--------------
|
|
25848
|
-
* |...| | |
|
|
25849
|
-
* |10 |`null` |`{color: '#001'}`| `ɵɵstyleMap('color', {color: '#001'})`
|
|
25850
|
-
* |11 |`30 | 12` | ... |
|
|
25851
|
-
* |12 |`color` |`'#002'` | `ɵɵstyleProp('color', '#002')`
|
|
25852
|
-
* |13 |`10 | 0` | ... |
|
|
25853
|
-
* |...| | |
|
|
25854
|
-
* |20 |`null` |`{color: '#003'}`| `ɵɵstyleMap('color', {color: '#003'})`
|
|
25855
|
-
* |21 |`0 | 22` | ... |
|
|
25856
|
-
* |22 |`color` |`'#004'` | `ɵɵstyleProp('color', '#004')`
|
|
25857
|
-
* |23 |`20 | 24` | ... |
|
|
25858
|
-
* |24 |`null` |`{color: '#005'}`| `ɵɵstyleMap('color', {color: '#005'})`
|
|
25859
|
-
* |25 |`22 | 26` | ... |
|
|
25860
|
-
* |26 |`color` |`'#006'` | `ɵɵstyleProp('color', '#006')`
|
|
25861
|
-
* |27 |`24 | 28` | ... |
|
|
25862
|
-
* |28 |`null` |`{color: '#007'}`| `ɵɵstyleMap('color', {color: '#007'})`
|
|
25863
|
-
* |29 |`26 | 30` | ... |
|
|
25864
|
-
* |30 |`color` |`'#008'` | `ɵɵstyleProp('color', '#008')`
|
|
25865
|
-
* |31 |`28 | 10` | ... |
|
|
25866
|
-
*
|
|
25867
|
-
* The above data structure allows us to re-concatenate the styling no matter which data binding
|
|
25868
|
-
* changes.
|
|
25869
|
-
*
|
|
25870
|
-
* NOTE: in addition to keeping track of next/previous index the `TView.data` also stores prev/next
|
|
25871
|
-
* duplicate bit. The duplicate bit if true says there either is a binding with the same name or
|
|
25872
|
-
* there is a map (which may contain the name). This information is useful in knowing if other
|
|
25873
|
-
* styles with higher priority need to be searched for overwrites.
|
|
25874
|
-
*
|
|
25875
|
-
* NOTE: See `should support example in 'tnode_linked_list.ts' documentation` in
|
|
25876
|
-
* `tnode_linked_list_spec.ts` for working example.
|
|
25877
|
-
*/
|
|
25878
|
-
let __unused_const_as_closure_does_not_like_standalone_comment_blocks__;
|
|
25879
25465
|
/**
|
|
25880
25466
|
* Insert new `tStyleValue` at `TData` and link existing style bindings such that we maintain linked
|
|
25881
25467
|
* list of styles and compute the duplicate flag.
|
|
@@ -27196,12 +26782,7 @@ function isStylingValuePresent(value) {
|
|
|
27196
26782
|
* @param suffix
|
|
27197
26783
|
*/
|
|
27198
26784
|
function normalizeSuffix(value, suffix) {
|
|
27199
|
-
if (value == null || value === '')
|
|
27200
|
-
// do nothing
|
|
27201
|
-
// Do not add the suffix if the value is going to be empty.
|
|
27202
|
-
// As it produce invalid CSS, which the browsers will automatically omit but Domino will not.
|
|
27203
|
-
// Example: `"left": "px;"` instead of `"left": ""`.
|
|
27204
|
-
}
|
|
26785
|
+
if (value == null || value === '') ;
|
|
27205
26786
|
else if (typeof suffix === 'string') {
|
|
27206
26787
|
value = value + suffix;
|
|
27207
26788
|
}
|
|
@@ -27908,7 +27489,7 @@ function ɵɵconditional(matchingTemplateIndex, contextValue) {
|
|
|
27908
27489
|
: undefined;
|
|
27909
27490
|
const viewInContainerIdx = 0;
|
|
27910
27491
|
if (bindingUpdated(hostLView, bindingIndex, matchingTemplateIndex)) {
|
|
27911
|
-
const prevConsumer = setActiveConsumer
|
|
27492
|
+
const prevConsumer = setActiveConsumer(null);
|
|
27912
27493
|
try {
|
|
27913
27494
|
// The index of the view to show changed - remove the previously displayed one
|
|
27914
27495
|
// (it is a noop if there are no active views in a container).
|
|
@@ -27929,7 +27510,7 @@ function ɵɵconditional(matchingTemplateIndex, contextValue) {
|
|
|
27929
27510
|
}
|
|
27930
27511
|
}
|
|
27931
27512
|
finally {
|
|
27932
|
-
setActiveConsumer
|
|
27513
|
+
setActiveConsumer(prevConsumer);
|
|
27933
27514
|
}
|
|
27934
27515
|
}
|
|
27935
27516
|
else if (prevContainer !== undefined) {
|
|
@@ -28131,7 +27712,7 @@ class LiveCollectionLContainerImpl extends LiveCollection {
|
|
|
28131
27712
|
* @codeGenApi
|
|
28132
27713
|
*/
|
|
28133
27714
|
function ɵɵrepeater(collection) {
|
|
28134
|
-
const prevConsumer = setActiveConsumer
|
|
27715
|
+
const prevConsumer = setActiveConsumer(null);
|
|
28135
27716
|
const metadataSlotIdx = getSelectedIndex();
|
|
28136
27717
|
try {
|
|
28137
27718
|
const hostLView = getLView();
|
|
@@ -28183,7 +27764,7 @@ function ɵɵrepeater(collection) {
|
|
|
28183
27764
|
}
|
|
28184
27765
|
}
|
|
28185
27766
|
finally {
|
|
28186
|
-
setActiveConsumer
|
|
27767
|
+
setActiveConsumer(prevConsumer);
|
|
28187
27768
|
}
|
|
28188
27769
|
}
|
|
28189
27770
|
function getLContainer(lView, index) {
|
|
@@ -28588,25 +28169,10 @@ function ɵɵsyntheticHostProperty(propName, value, sanitizer) {
|
|
|
28588
28169
|
return ɵɵsyntheticHostProperty;
|
|
28589
28170
|
}
|
|
28590
28171
|
|
|
28591
|
-
/**
|
|
28592
|
-
* NOTE: changes to the `ngI18nClosureMode` name must be synced with `compiler-cli/src/tooling.ts`.
|
|
28593
|
-
*/
|
|
28594
|
-
if (typeof ngI18nClosureMode === 'undefined') {
|
|
28595
|
-
// These property accesses can be ignored because ngI18nClosureMode will be set to false
|
|
28596
|
-
// when optimizing code and the whole if statement will be dropped.
|
|
28597
|
-
// Make sure to refer to ngI18nClosureMode as ['ngI18nClosureMode'] for closure.
|
|
28598
|
-
// NOTE: we need to have it in IIFE so that the tree-shaker is happy.
|
|
28599
|
-
(function () {
|
|
28600
|
-
_global['ngI18nClosureMode'] =
|
|
28601
|
-
// TODO(FW-1250): validate that this actually, you know, works.
|
|
28602
|
-
typeof goog !== 'undefined' && typeof goog.getMsg === 'function';
|
|
28603
|
-
})();
|
|
28604
|
-
}
|
|
28605
|
-
|
|
28606
28172
|
// THIS CODE IS GENERATED - DO NOT MODIFY.
|
|
28607
28173
|
const u = undefined;
|
|
28608
28174
|
function plural(val) {
|
|
28609
|
-
const
|
|
28175
|
+
const i = Math.floor(Math.abs(val)), v = val.toString().replace(/^[^.]*\.?/, '').length;
|
|
28610
28176
|
if (i === 1 && v === 0)
|
|
28611
28177
|
return 1;
|
|
28612
28178
|
return 5;
|
|
@@ -30534,7 +30100,7 @@ function listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn,
|
|
|
30534
30100
|
}
|
|
30535
30101
|
else {
|
|
30536
30102
|
listenerFn = wrapListener(tNode, lView, context, listenerFn);
|
|
30537
|
-
stashEventListener(
|
|
30103
|
+
stashEventListener(target, eventName, listenerFn);
|
|
30538
30104
|
const cleanupFn = renderer.listen(target, eventName, listenerFn);
|
|
30539
30105
|
ngDevMode && ngDevMode.rendererAddEventListener++;
|
|
30540
30106
|
lCleanup.push(listenerFn, cleanupFn);
|
|
@@ -30578,7 +30144,7 @@ function listenToOutput(tNode, tView, lView, index, lookupName, eventName, liste
|
|
|
30578
30144
|
tCleanup && tCleanup.push(eventName, tNode.index, idx, -(idx + 1));
|
|
30579
30145
|
}
|
|
30580
30146
|
function executeListenerWithErrorHandling(lView, context, listenerFn, e) {
|
|
30581
|
-
const prevConsumer = setActiveConsumer
|
|
30147
|
+
const prevConsumer = setActiveConsumer(null);
|
|
30582
30148
|
try {
|
|
30583
30149
|
profiler(6 /* ProfilerEvent.OutputStart */, context, listenerFn);
|
|
30584
30150
|
// Only explicitly returning false from a listener should preventDefault
|
|
@@ -30590,7 +30156,7 @@ function executeListenerWithErrorHandling(lView, context, listenerFn, e) {
|
|
|
30590
30156
|
}
|
|
30591
30157
|
finally {
|
|
30592
30158
|
profiler(7 /* ProfilerEvent.OutputEnd */, context, listenerFn);
|
|
30593
|
-
setActiveConsumer
|
|
30159
|
+
setActiveConsumer(prevConsumer);
|
|
30594
30160
|
}
|
|
30595
30161
|
}
|
|
30596
30162
|
/**
|
|
@@ -32553,26 +32119,6 @@ function ɵɵattachSourceLocations(templatePath, locations) {
|
|
|
32553
32119
|
}
|
|
32554
32120
|
}
|
|
32555
32121
|
|
|
32556
|
-
/*
|
|
32557
|
-
* This file re-exports all symbols contained in this directory.
|
|
32558
|
-
*
|
|
32559
|
-
* Why is this file not `index.ts`?
|
|
32560
|
-
*
|
|
32561
|
-
* There seems to be an inconsistent path resolution of an `index.ts` file
|
|
32562
|
-
* when only the parent directory is referenced. This could be due to the
|
|
32563
|
-
* node module resolution configuration differing from rollup and/or typescript.
|
|
32564
|
-
*
|
|
32565
|
-
* With commit
|
|
32566
|
-
* https://github.com/angular/angular/commit/d5e3f2c64bd13ce83e7c70788b7fc514ca4a9918
|
|
32567
|
-
* the `instructions.ts` file was moved to `instructions/instructions.ts` and an
|
|
32568
|
-
* `index.ts` file was used to re-export everything. Having had file names that were
|
|
32569
|
-
* importing from `instructions' directly (not the from the sub file or the `index.ts`
|
|
32570
|
-
* file) caused strange CI issues. `index.ts` had to be renamed to `all.ts` for this
|
|
32571
|
-
* to work.
|
|
32572
|
-
*
|
|
32573
|
-
* Jira Issue = FW-1184
|
|
32574
|
-
*/
|
|
32575
|
-
|
|
32576
32122
|
/**
|
|
32577
32123
|
* Resolves the providers which are defined in the DirectiveDef.
|
|
32578
32124
|
*
|
|
@@ -33795,7 +33341,7 @@ function resetProjectionState(tNode) {
|
|
|
33795
33341
|
if (isTNodeShape(current)) {
|
|
33796
33342
|
// Reset `projectionNext` since it can affect the traversal order during projection.
|
|
33797
33343
|
current.projectionNext = null;
|
|
33798
|
-
current.flags &=
|
|
33344
|
+
current.flags &= -3 /* TNodeFlags.isProjected */;
|
|
33799
33345
|
}
|
|
33800
33346
|
}
|
|
33801
33347
|
tNode.projection = null;
|
|
@@ -34026,10 +33572,6 @@ function resetJitOptions() {
|
|
|
34026
33572
|
jitOptions = null;
|
|
34027
33573
|
}
|
|
34028
33574
|
|
|
34029
|
-
function patchModuleCompilation() {
|
|
34030
|
-
// Does nothing, but exists as a target for patching.
|
|
34031
|
-
}
|
|
34032
|
-
|
|
34033
33575
|
const moduleQueue = [];
|
|
34034
33576
|
/**
|
|
34035
33577
|
* Enqueues moduleDef to be checked later to see if scope can be set on its
|
|
@@ -34079,7 +33621,6 @@ function isResolvedDeclaration(declaration) {
|
|
|
34079
33621
|
* This function automatically gets called when a class has a `@NgModule` decorator.
|
|
34080
33622
|
*/
|
|
34081
33623
|
function compileNgModule(moduleType, ngModule = {}) {
|
|
34082
|
-
patchModuleCompilation();
|
|
34083
33624
|
compileNgModuleDefs(moduleType, ngModule);
|
|
34084
33625
|
if (ngModule.id !== undefined) {
|
|
34085
33626
|
registerNgModuleType(moduleType, ngModule.id);
|
|
@@ -34443,7 +33984,7 @@ function patchComponentDefWithScope(componentDef, transitiveScopes) {
|
|
|
34443
33984
|
*/
|
|
34444
33985
|
function transitiveScopesFor(type) {
|
|
34445
33986
|
if (isNgModule(type)) {
|
|
34446
|
-
|
|
33987
|
+
{
|
|
34447
33988
|
const scope = depsTracker.getNgModuleScope(type);
|
|
34448
33989
|
const def = getNgModuleDef(type, true);
|
|
34449
33990
|
return {
|
|
@@ -34451,9 +33992,6 @@ function transitiveScopesFor(type) {
|
|
|
34451
33992
|
...scope,
|
|
34452
33993
|
};
|
|
34453
33994
|
}
|
|
34454
|
-
else {
|
|
34455
|
-
return transitiveScopesForNgModule(type);
|
|
34456
|
-
}
|
|
34457
33995
|
}
|
|
34458
33996
|
else if (isStandalone(type)) {
|
|
34459
33997
|
const directiveDef = getComponentDef(type) || getDirectiveDef(type);
|
|
@@ -34488,77 +34026,6 @@ function transitiveScopesFor(type) {
|
|
|
34488
34026
|
// TODO: change the error message to be more user-facing and take standalone into account
|
|
34489
34027
|
throw new Error(`${type.name} does not have a module def (ɵmod property)`);
|
|
34490
34028
|
}
|
|
34491
|
-
/**
|
|
34492
|
-
* Compute the pair of transitive scopes (compilation scope and exported scope) for a given module.
|
|
34493
|
-
*
|
|
34494
|
-
* This operation is memoized and the result is cached on the module's definition. This function can
|
|
34495
|
-
* be called on modules with components that have not fully compiled yet, but the result should not
|
|
34496
|
-
* be used until they have.
|
|
34497
|
-
*
|
|
34498
|
-
* @param moduleType module that transitive scope should be calculated for.
|
|
34499
|
-
*/
|
|
34500
|
-
function transitiveScopesForNgModule(moduleType) {
|
|
34501
|
-
const def = getNgModuleDef(moduleType, true);
|
|
34502
|
-
if (def.transitiveCompileScopes !== null) {
|
|
34503
|
-
return def.transitiveCompileScopes;
|
|
34504
|
-
}
|
|
34505
|
-
const scopes = {
|
|
34506
|
-
schemas: def.schemas || null,
|
|
34507
|
-
compilation: {
|
|
34508
|
-
directives: new Set(),
|
|
34509
|
-
pipes: new Set(),
|
|
34510
|
-
},
|
|
34511
|
-
exported: {
|
|
34512
|
-
directives: new Set(),
|
|
34513
|
-
pipes: new Set(),
|
|
34514
|
-
},
|
|
34515
|
-
};
|
|
34516
|
-
maybeUnwrapFn(def.imports).forEach((imported) => {
|
|
34517
|
-
// When this module imports another, the imported module's exported directives and pipes are
|
|
34518
|
-
// added to the compilation scope of this module.
|
|
34519
|
-
const importedScope = transitiveScopesFor(imported);
|
|
34520
|
-
importedScope.exported.directives.forEach((entry) => scopes.compilation.directives.add(entry));
|
|
34521
|
-
importedScope.exported.pipes.forEach((entry) => scopes.compilation.pipes.add(entry));
|
|
34522
|
-
});
|
|
34523
|
-
maybeUnwrapFn(def.declarations).forEach((declared) => {
|
|
34524
|
-
const declaredWithDefs = declared;
|
|
34525
|
-
if (getPipeDef$1(declaredWithDefs)) {
|
|
34526
|
-
scopes.compilation.pipes.add(declared);
|
|
34527
|
-
}
|
|
34528
|
-
else {
|
|
34529
|
-
// Either declared has a ɵcmp or ɵdir, or it's a component which hasn't
|
|
34530
|
-
// had its template compiled yet. In either case, it gets added to the compilation's
|
|
34531
|
-
// directives.
|
|
34532
|
-
scopes.compilation.directives.add(declared);
|
|
34533
|
-
}
|
|
34534
|
-
});
|
|
34535
|
-
maybeUnwrapFn(def.exports).forEach((exported) => {
|
|
34536
|
-
const exportedType = exported;
|
|
34537
|
-
// Either the type is a module, a pipe, or a component/directive (which may not have a
|
|
34538
|
-
// ɵcmp as it might be compiled asynchronously).
|
|
34539
|
-
if (isNgModule(exportedType)) {
|
|
34540
|
-
// When this module exports another, the exported module's exported directives and pipes are
|
|
34541
|
-
// added to both the compilation and exported scopes of this module.
|
|
34542
|
-
const exportedScope = transitiveScopesFor(exportedType);
|
|
34543
|
-
exportedScope.exported.directives.forEach((entry) => {
|
|
34544
|
-
scopes.compilation.directives.add(entry);
|
|
34545
|
-
scopes.exported.directives.add(entry);
|
|
34546
|
-
});
|
|
34547
|
-
exportedScope.exported.pipes.forEach((entry) => {
|
|
34548
|
-
scopes.compilation.pipes.add(entry);
|
|
34549
|
-
scopes.exported.pipes.add(entry);
|
|
34550
|
-
});
|
|
34551
|
-
}
|
|
34552
|
-
else if (getPipeDef$1(exportedType)) {
|
|
34553
|
-
scopes.exported.pipes.add(exportedType);
|
|
34554
|
-
}
|
|
34555
|
-
else {
|
|
34556
|
-
scopes.exported.directives.add(exportedType);
|
|
34557
|
-
}
|
|
34558
|
-
});
|
|
34559
|
-
def.transitiveCompileScopes = scopes;
|
|
34560
|
-
return scopes;
|
|
34561
|
-
}
|
|
34562
34029
|
function expandModuleWithProviders(value) {
|
|
34563
34030
|
if (isModuleWithProviders(value)) {
|
|
34564
34031
|
return value.ngModule;
|
|
@@ -34731,43 +34198,8 @@ function compileComponent(type, metadata) {
|
|
|
34731
34198
|
* component's `imports`.
|
|
34732
34199
|
*/
|
|
34733
34200
|
function getStandaloneDefFunctions(type, imports) {
|
|
34734
|
-
let cachedDirectiveDefs = null;
|
|
34735
|
-
let cachedPipeDefs = null;
|
|
34736
34201
|
const directiveDefs = () => {
|
|
34737
|
-
|
|
34738
|
-
if (cachedDirectiveDefs === null) {
|
|
34739
|
-
// Standalone components are always able to self-reference, so include the component's own
|
|
34740
|
-
// definition in its `directiveDefs`.
|
|
34741
|
-
cachedDirectiveDefs = [getComponentDef(type)];
|
|
34742
|
-
const seen = new Set([type]);
|
|
34743
|
-
for (const rawDep of imports) {
|
|
34744
|
-
ngDevMode && verifyStandaloneImport(rawDep, type);
|
|
34745
|
-
const dep = resolveForwardRef(rawDep);
|
|
34746
|
-
if (seen.has(dep)) {
|
|
34747
|
-
continue;
|
|
34748
|
-
}
|
|
34749
|
-
seen.add(dep);
|
|
34750
|
-
if (!!getNgModuleDef(dep)) {
|
|
34751
|
-
const scope = transitiveScopesFor(dep);
|
|
34752
|
-
for (const dir of scope.exported.directives) {
|
|
34753
|
-
const def = getComponentDef(dir) || getDirectiveDef(dir);
|
|
34754
|
-
if (def && !seen.has(dir)) {
|
|
34755
|
-
seen.add(dir);
|
|
34756
|
-
cachedDirectiveDefs.push(def);
|
|
34757
|
-
}
|
|
34758
|
-
}
|
|
34759
|
-
}
|
|
34760
|
-
else {
|
|
34761
|
-
const def = getComponentDef(dep) || getDirectiveDef(dep);
|
|
34762
|
-
if (def) {
|
|
34763
|
-
cachedDirectiveDefs.push(def);
|
|
34764
|
-
}
|
|
34765
|
-
}
|
|
34766
|
-
}
|
|
34767
|
-
}
|
|
34768
|
-
return cachedDirectiveDefs;
|
|
34769
|
-
}
|
|
34770
|
-
else {
|
|
34202
|
+
{
|
|
34771
34203
|
if (ngDevMode) {
|
|
34772
34204
|
for (const rawDep of imports) {
|
|
34773
34205
|
verifyStandaloneImport(rawDep, type);
|
|
@@ -34783,37 +34215,7 @@ function getStandaloneDefFunctions(type, imports) {
|
|
|
34783
34215
|
}
|
|
34784
34216
|
};
|
|
34785
34217
|
const pipeDefs = () => {
|
|
34786
|
-
|
|
34787
|
-
if (cachedPipeDefs === null) {
|
|
34788
|
-
cachedPipeDefs = [];
|
|
34789
|
-
const seen = new Set();
|
|
34790
|
-
for (const rawDep of imports) {
|
|
34791
|
-
const dep = resolveForwardRef(rawDep);
|
|
34792
|
-
if (seen.has(dep)) {
|
|
34793
|
-
continue;
|
|
34794
|
-
}
|
|
34795
|
-
seen.add(dep);
|
|
34796
|
-
if (!!getNgModuleDef(dep)) {
|
|
34797
|
-
const scope = transitiveScopesFor(dep);
|
|
34798
|
-
for (const pipe of scope.exported.pipes) {
|
|
34799
|
-
const def = getPipeDef$1(pipe);
|
|
34800
|
-
if (def && !seen.has(pipe)) {
|
|
34801
|
-
seen.add(pipe);
|
|
34802
|
-
cachedPipeDefs.push(def);
|
|
34803
|
-
}
|
|
34804
|
-
}
|
|
34805
|
-
}
|
|
34806
|
-
else {
|
|
34807
|
-
const def = getPipeDef$1(dep);
|
|
34808
|
-
if (def) {
|
|
34809
|
-
cachedPipeDefs.push(def);
|
|
34810
|
-
}
|
|
34811
|
-
}
|
|
34812
|
-
}
|
|
34813
|
-
}
|
|
34814
|
-
return cachedPipeDefs;
|
|
34815
|
-
}
|
|
34816
|
-
else {
|
|
34218
|
+
{
|
|
34817
34219
|
if (ngDevMode) {
|
|
34818
34220
|
for (const rawDep of imports) {
|
|
34819
34221
|
verifyStandaloneImport(rawDep, type);
|
|
@@ -35149,11 +34551,6 @@ const NgModule = makeDecorator('NgModule', (ngModule) => ngModule, undefined, un
|
|
|
35149
34551
|
*/
|
|
35150
34552
|
(type, meta) => compileNgModule(type, meta));
|
|
35151
34553
|
|
|
35152
|
-
/**
|
|
35153
|
-
* This indirection is needed to free up Component, etc symbols in the public API
|
|
35154
|
-
* to be used by the decorator versions of these annotations.
|
|
35155
|
-
*/
|
|
35156
|
-
|
|
35157
34554
|
/**
|
|
35158
34555
|
* @description Represents the version of Angular
|
|
35159
34556
|
*
|
|
@@ -35175,7 +34572,7 @@ class Version {
|
|
|
35175
34572
|
/**
|
|
35176
34573
|
* @publicApi
|
|
35177
34574
|
*/
|
|
35178
|
-
const VERSION = new Version('19.2.
|
|
34575
|
+
const VERSION = new Version('19.2.2');
|
|
35179
34576
|
|
|
35180
34577
|
/**
|
|
35181
34578
|
* Combination of NgModuleFactory and ComponentFactories.
|
|
@@ -35417,7 +34814,7 @@ function internalProvideZoneChangeDetection({ ngZoneFactory, ignoreChangesOutsid
|
|
|
35417
34814
|
* ```
|
|
35418
34815
|
*
|
|
35419
34816
|
* @publicApi
|
|
35420
|
-
* @see {@link bootstrapApplication}
|
|
34817
|
+
* @see {@link /api/core/bootstrapApplication bootstrapApplication}
|
|
35421
34818
|
* @see {@link NgZoneOptions}
|
|
35422
34819
|
*/
|
|
35423
34820
|
function provideZoneChangeDetection(options) {
|
|
@@ -35803,7 +35200,7 @@ class ChangeDetectionSchedulerImpl {
|
|
|
35803
35200
|
*
|
|
35804
35201
|
* @publicApi
|
|
35805
35202
|
* @experimental
|
|
35806
|
-
* @see
|
|
35203
|
+
* @see {@link /api/platform-browser/bootstrapApplication bootstrapApplication}
|
|
35807
35204
|
*/
|
|
35808
35205
|
function provideExperimentalZonelessChangeDetection() {
|
|
35809
35206
|
performanceMarkFeature('NgZoneless');
|
|
@@ -35888,11 +35285,7 @@ const LOCALE_ID = new InjectionToken(ngDevMode ? 'LocaleId' : '', {
|
|
|
35888
35285
|
*
|
|
35889
35286
|
* <div class="docs-alert docs-alert-helpful">
|
|
35890
35287
|
*
|
|
35891
|
-
*
|
|
35892
|
-
*
|
|
35893
|
-
* The default currency code is currently always `USD` but this is deprecated from v9.
|
|
35894
|
-
*
|
|
35895
|
-
* **In v10 the default currency code will be taken from the current locale.**
|
|
35288
|
+
* The default currency code is currently always `USD`.
|
|
35896
35289
|
*
|
|
35897
35290
|
* If you need the previous behavior then set it by creating a `DEFAULT_CURRENCY_CODE` provider in
|
|
35898
35291
|
* your application `NgModule`:
|
|
@@ -36737,7 +36130,7 @@ function exhaustiveCheckNoChangesInterval(interval, checkNoChangesMode) {
|
|
|
36737
36130
|
*
|
|
36738
36131
|
* By default, this is true, unless `enableProdMode` is invoked prior to calling this method or the
|
|
36739
36132
|
* application is built using the Angular CLI with the `optimization` option.
|
|
36740
|
-
* @see {@link cli/build ng build}
|
|
36133
|
+
* @see {@link /cli/build ng build}
|
|
36741
36134
|
*
|
|
36742
36135
|
* @publicApi
|
|
36743
36136
|
*/
|
|
@@ -36754,7 +36147,7 @@ function isDevMode() {
|
|
|
36754
36147
|
*
|
|
36755
36148
|
* Using this method is discouraged as the Angular CLI will set production mode when using the
|
|
36756
36149
|
* `optimization` option.
|
|
36757
|
-
* @see {@link cli/build ng build}
|
|
36150
|
+
* @see {@link /cli/build ng build}
|
|
36758
36151
|
*
|
|
36759
36152
|
* @publicApi
|
|
36760
36153
|
*/
|
|
@@ -36766,8 +36159,6 @@ function enableProdMode() {
|
|
|
36766
36159
|
}
|
|
36767
36160
|
}
|
|
36768
36161
|
|
|
36769
|
-
// Public API for render
|
|
36770
|
-
|
|
36771
36162
|
/**
|
|
36772
36163
|
* Returns the NgModuleFactory with the given id (specified using [@NgModule.id
|
|
36773
36164
|
* field](api/core/NgModule#id)), if it exists and has been loaded. Factories for NgModules that do
|
|
@@ -36880,7 +36271,7 @@ function createViewRef(tNode, lView, isPipe) {
|
|
|
36880
36271
|
/**
|
|
36881
36272
|
* Represents an Angular view.
|
|
36882
36273
|
*
|
|
36883
|
-
* @see
|
|
36274
|
+
* @see {@link /api/core/ChangeDetectorRef?tab=usage-notes Change detection usage}
|
|
36884
36275
|
*
|
|
36885
36276
|
* @publicApi
|
|
36886
36277
|
*/
|
|
@@ -36942,11 +36333,6 @@ class ViewRef extends ChangeDetectorRef {
|
|
|
36942
36333
|
class EmbeddedViewRef extends ViewRef {
|
|
36943
36334
|
}
|
|
36944
36335
|
|
|
36945
|
-
// Public API for compiler
|
|
36946
|
-
|
|
36947
|
-
// This file exists for easily patching NgModuleFactoryLoader in g3
|
|
36948
|
-
var ng_module_factory_loader_impl = {};
|
|
36949
|
-
|
|
36950
36336
|
/**
|
|
36951
36337
|
* @publicApi
|
|
36952
36338
|
*/
|
|
@@ -37491,8 +36877,6 @@ function collectPropertyBindings(properties, tNode, lView, tData) {
|
|
|
37491
36877
|
}
|
|
37492
36878
|
}
|
|
37493
36879
|
}
|
|
37494
|
-
// Need to keep the nodes in a global Map so that multiple angular apps are supported.
|
|
37495
|
-
const _nativeNodeToDebugNode = new Map();
|
|
37496
36880
|
const NG_DEBUG_PROPERTY = '__ng_debug__';
|
|
37497
36881
|
/**
|
|
37498
36882
|
* @publicApi
|
|
@@ -37509,15 +36893,6 @@ function getDebugNode(nativeNode) {
|
|
|
37509
36893
|
}
|
|
37510
36894
|
return null;
|
|
37511
36895
|
}
|
|
37512
|
-
function getAllDebugNodes() {
|
|
37513
|
-
return Array.from(_nativeNodeToDebugNode.values());
|
|
37514
|
-
}
|
|
37515
|
-
function indexDebugNode(node) {
|
|
37516
|
-
_nativeNodeToDebugNode.set(node.nativeNode, node);
|
|
37517
|
-
}
|
|
37518
|
-
function removeDebugNodeFromIndex(node) {
|
|
37519
|
-
_nativeNodeToDebugNode.delete(node.nativeNode);
|
|
37520
|
-
}
|
|
37521
36896
|
|
|
37522
36897
|
class DefaultIterableDifferFactory {
|
|
37523
36898
|
constructor() { }
|
|
@@ -38573,12 +37948,6 @@ const iterableDiff = [new DefaultIterableDifferFactory()];
|
|
|
38573
37948
|
const defaultIterableDiffers = new IterableDiffers(iterableDiff);
|
|
38574
37949
|
const defaultKeyValueDiffers = new KeyValueDiffers(keyValDiff);
|
|
38575
37950
|
|
|
38576
|
-
/**
|
|
38577
|
-
* @module
|
|
38578
|
-
* @description
|
|
38579
|
-
* Change detection enables data binding in Angular.
|
|
38580
|
-
*/
|
|
38581
|
-
|
|
38582
37951
|
/**
|
|
38583
37952
|
* This platform has to be included in any other platform
|
|
38584
37953
|
*
|
|
@@ -38604,658 +37973,6 @@ class ApplicationModule {
|
|
|
38604
37973
|
type: NgModule
|
|
38605
37974
|
}], () => [{ type: ApplicationRef }], null); })();
|
|
38606
37975
|
|
|
38607
|
-
/**
|
|
38608
|
-
* The default equality function used for `signal` and `computed`, which uses referential equality.
|
|
38609
|
-
*/
|
|
38610
|
-
function defaultEquals(a, b) {
|
|
38611
|
-
return Object.is(a, b);
|
|
38612
|
-
}
|
|
38613
|
-
|
|
38614
|
-
/**
|
|
38615
|
-
* The currently active consumer `ReactiveNode`, if running code in a reactive context.
|
|
38616
|
-
*
|
|
38617
|
-
* Change this via `setActiveConsumer`.
|
|
38618
|
-
*/
|
|
38619
|
-
let activeConsumer = null;
|
|
38620
|
-
let inNotificationPhase = false;
|
|
38621
|
-
/**
|
|
38622
|
-
* Global epoch counter. Incremented whenever a source signal is set.
|
|
38623
|
-
*/
|
|
38624
|
-
let epoch = 1;
|
|
38625
|
-
/**
|
|
38626
|
-
* Symbol used to tell `Signal`s apart from other functions.
|
|
38627
|
-
*
|
|
38628
|
-
* This can be used to auto-unwrap signals in various cases, or to auto-wrap non-signal values.
|
|
38629
|
-
*/
|
|
38630
|
-
const SIGNAL = /* @__PURE__ */ Symbol('SIGNAL');
|
|
38631
|
-
function setActiveConsumer(consumer) {
|
|
38632
|
-
const prev = activeConsumer;
|
|
38633
|
-
activeConsumer = consumer;
|
|
38634
|
-
return prev;
|
|
38635
|
-
}
|
|
38636
|
-
function getActiveConsumer() {
|
|
38637
|
-
return activeConsumer;
|
|
38638
|
-
}
|
|
38639
|
-
function isInNotificationPhase() {
|
|
38640
|
-
return inNotificationPhase;
|
|
38641
|
-
}
|
|
38642
|
-
function isReactive(value) {
|
|
38643
|
-
return value[SIGNAL] !== undefined;
|
|
38644
|
-
}
|
|
38645
|
-
const REACTIVE_NODE = {
|
|
38646
|
-
version: 0,
|
|
38647
|
-
lastCleanEpoch: 0,
|
|
38648
|
-
dirty: false,
|
|
38649
|
-
producerNode: undefined,
|
|
38650
|
-
producerLastReadVersion: undefined,
|
|
38651
|
-
producerIndexOfThis: undefined,
|
|
38652
|
-
nextProducerIndex: 0,
|
|
38653
|
-
liveConsumerNode: undefined,
|
|
38654
|
-
liveConsumerIndexOfThis: undefined,
|
|
38655
|
-
consumerAllowSignalWrites: false,
|
|
38656
|
-
consumerIsAlwaysLive: false,
|
|
38657
|
-
kind: 'unknown',
|
|
38658
|
-
producerMustRecompute: () => false,
|
|
38659
|
-
producerRecomputeValue: () => { },
|
|
38660
|
-
consumerMarkedDirty: () => { },
|
|
38661
|
-
consumerOnSignalRead: () => { },
|
|
38662
|
-
};
|
|
38663
|
-
/**
|
|
38664
|
-
* Called by implementations when a producer's signal is read.
|
|
38665
|
-
*/
|
|
38666
|
-
function producerAccessed(node) {
|
|
38667
|
-
if (inNotificationPhase) {
|
|
38668
|
-
throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode
|
|
38669
|
-
? `Assertion error: signal read during notification phase`
|
|
38670
|
-
: '');
|
|
38671
|
-
}
|
|
38672
|
-
if (activeConsumer === null) {
|
|
38673
|
-
// Accessed outside of a reactive context, so nothing to record.
|
|
38674
|
-
return;
|
|
38675
|
-
}
|
|
38676
|
-
activeConsumer.consumerOnSignalRead(node);
|
|
38677
|
-
// This producer is the `idx`th dependency of `activeConsumer`.
|
|
38678
|
-
const idx = activeConsumer.nextProducerIndex++;
|
|
38679
|
-
assertConsumerNode(activeConsumer);
|
|
38680
|
-
if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) {
|
|
38681
|
-
// There's been a change in producers since the last execution of `activeConsumer`.
|
|
38682
|
-
// `activeConsumer.producerNode[idx]` holds a stale dependency which will be be removed and
|
|
38683
|
-
// replaced with `this`.
|
|
38684
|
-
//
|
|
38685
|
-
// If `activeConsumer` isn't live, then this is a no-op, since we can replace the producer in
|
|
38686
|
-
// `activeConsumer.producerNode` directly. However, if `activeConsumer` is live, then we need
|
|
38687
|
-
// to remove it from the stale producer's `liveConsumer`s.
|
|
38688
|
-
if (consumerIsLive(activeConsumer)) {
|
|
38689
|
-
const staleProducer = activeConsumer.producerNode[idx];
|
|
38690
|
-
producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]);
|
|
38691
|
-
// At this point, the only record of `staleProducer` is the reference at
|
|
38692
|
-
// `activeConsumer.producerNode[idx]` which will be overwritten below.
|
|
38693
|
-
}
|
|
38694
|
-
}
|
|
38695
|
-
if (activeConsumer.producerNode[idx] !== node) {
|
|
38696
|
-
// We're a new dependency of the consumer (at `idx`).
|
|
38697
|
-
activeConsumer.producerNode[idx] = node;
|
|
38698
|
-
// If the active consumer is live, then add it as a live consumer. If not, then use 0 as a
|
|
38699
|
-
// placeholder value.
|
|
38700
|
-
activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer)
|
|
38701
|
-
? producerAddLiveConsumer(node, activeConsumer, idx)
|
|
38702
|
-
: 0;
|
|
38703
|
-
}
|
|
38704
|
-
activeConsumer.producerLastReadVersion[idx] = node.version;
|
|
38705
|
-
}
|
|
38706
|
-
/**
|
|
38707
|
-
* Increment the global epoch counter.
|
|
38708
|
-
*
|
|
38709
|
-
* Called by source producers (that is, not computeds) whenever their values change.
|
|
38710
|
-
*/
|
|
38711
|
-
function producerIncrementEpoch() {
|
|
38712
|
-
epoch++;
|
|
38713
|
-
}
|
|
38714
|
-
/**
|
|
38715
|
-
* Ensure this producer's `version` is up-to-date.
|
|
38716
|
-
*/
|
|
38717
|
-
function producerUpdateValueVersion(node) {
|
|
38718
|
-
if (consumerIsLive(node) && !node.dirty) {
|
|
38719
|
-
// A live consumer will be marked dirty by producers, so a clean state means that its version
|
|
38720
|
-
// is guaranteed to be up-to-date.
|
|
38721
|
-
return;
|
|
38722
|
-
}
|
|
38723
|
-
if (!node.dirty && node.lastCleanEpoch === epoch) {
|
|
38724
|
-
// Even non-live consumers can skip polling if they previously found themselves to be clean at
|
|
38725
|
-
// the current epoch, since their dependencies could not possibly have changed (such a change
|
|
38726
|
-
// would've increased the epoch).
|
|
38727
|
-
return;
|
|
38728
|
-
}
|
|
38729
|
-
if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {
|
|
38730
|
-
// None of our producers report a change since the last time they were read, so no
|
|
38731
|
-
// recomputation of our value is necessary, and we can consider ourselves clean.
|
|
38732
|
-
producerMarkClean(node);
|
|
38733
|
-
return;
|
|
38734
|
-
}
|
|
38735
|
-
node.producerRecomputeValue(node);
|
|
38736
|
-
// After recomputing the value, we're no longer dirty.
|
|
38737
|
-
producerMarkClean(node);
|
|
38738
|
-
}
|
|
38739
|
-
/**
|
|
38740
|
-
* Propagate a dirty notification to live consumers of this producer.
|
|
38741
|
-
*/
|
|
38742
|
-
function producerNotifyConsumers(node) {
|
|
38743
|
-
if (node.liveConsumerNode === undefined) {
|
|
38744
|
-
return;
|
|
38745
|
-
}
|
|
38746
|
-
// Prevent signal reads when we're updating the graph
|
|
38747
|
-
const prev = inNotificationPhase;
|
|
38748
|
-
inNotificationPhase = true;
|
|
38749
|
-
try {
|
|
38750
|
-
for (const consumer of node.liveConsumerNode) {
|
|
38751
|
-
if (!consumer.dirty) {
|
|
38752
|
-
consumerMarkDirty(consumer);
|
|
38753
|
-
}
|
|
38754
|
-
}
|
|
38755
|
-
}
|
|
38756
|
-
finally {
|
|
38757
|
-
inNotificationPhase = prev;
|
|
38758
|
-
}
|
|
38759
|
-
}
|
|
38760
|
-
/**
|
|
38761
|
-
* Whether this `ReactiveNode` in its producer capacity is currently allowed to initiate updates,
|
|
38762
|
-
* based on the current consumer context.
|
|
38763
|
-
*/
|
|
38764
|
-
function producerUpdatesAllowed() {
|
|
38765
|
-
return activeConsumer?.consumerAllowSignalWrites !== false;
|
|
38766
|
-
}
|
|
38767
|
-
function consumerMarkDirty(node) {
|
|
38768
|
-
node.dirty = true;
|
|
38769
|
-
producerNotifyConsumers(node);
|
|
38770
|
-
node.consumerMarkedDirty?.(node);
|
|
38771
|
-
}
|
|
38772
|
-
function producerMarkClean(node) {
|
|
38773
|
-
node.dirty = false;
|
|
38774
|
-
node.lastCleanEpoch = epoch;
|
|
38775
|
-
}
|
|
38776
|
-
/**
|
|
38777
|
-
* Prepare this consumer to run a computation in its reactive context.
|
|
38778
|
-
*
|
|
38779
|
-
* Must be called by subclasses which represent reactive computations, before those computations
|
|
38780
|
-
* begin.
|
|
38781
|
-
*/
|
|
38782
|
-
function consumerBeforeComputation(node) {
|
|
38783
|
-
node && (node.nextProducerIndex = 0);
|
|
38784
|
-
return setActiveConsumer(node);
|
|
38785
|
-
}
|
|
38786
|
-
/**
|
|
38787
|
-
* Finalize this consumer's state after a reactive computation has run.
|
|
38788
|
-
*
|
|
38789
|
-
* Must be called by subclasses which represent reactive computations, after those computations
|
|
38790
|
-
* have finished.
|
|
38791
|
-
*/
|
|
38792
|
-
function consumerAfterComputation(node, prevConsumer) {
|
|
38793
|
-
setActiveConsumer(prevConsumer);
|
|
38794
|
-
if (!node ||
|
|
38795
|
-
node.producerNode === undefined ||
|
|
38796
|
-
node.producerIndexOfThis === undefined ||
|
|
38797
|
-
node.producerLastReadVersion === undefined) {
|
|
38798
|
-
return;
|
|
38799
|
-
}
|
|
38800
|
-
if (consumerIsLive(node)) {
|
|
38801
|
-
// For live consumers, we need to remove the producer -> consumer edge for any stale producers
|
|
38802
|
-
// which weren't dependencies after the recomputation.
|
|
38803
|
-
for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {
|
|
38804
|
-
producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
|
|
38805
|
-
}
|
|
38806
|
-
}
|
|
38807
|
-
// Truncate the producer tracking arrays.
|
|
38808
|
-
// Perf note: this is essentially truncating the length to `node.nextProducerIndex`, but
|
|
38809
|
-
// benchmarking has shown that individual pop operations are faster.
|
|
38810
|
-
while (node.producerNode.length > node.nextProducerIndex) {
|
|
38811
|
-
node.producerNode.pop();
|
|
38812
|
-
node.producerLastReadVersion.pop();
|
|
38813
|
-
node.producerIndexOfThis.pop();
|
|
38814
|
-
}
|
|
38815
|
-
}
|
|
38816
|
-
/**
|
|
38817
|
-
* Determine whether this consumer has any dependencies which have changed since the last time
|
|
38818
|
-
* they were read.
|
|
38819
|
-
*/
|
|
38820
|
-
function consumerPollProducersForChange(node) {
|
|
38821
|
-
assertConsumerNode(node);
|
|
38822
|
-
// Poll producers for change.
|
|
38823
|
-
for (let i = 0; i < node.producerNode.length; i++) {
|
|
38824
|
-
const producer = node.producerNode[i];
|
|
38825
|
-
const seenVersion = node.producerLastReadVersion[i];
|
|
38826
|
-
// First check the versions. A mismatch means that the producer's value is known to have
|
|
38827
|
-
// changed since the last time we read it.
|
|
38828
|
-
if (seenVersion !== producer.version) {
|
|
38829
|
-
return true;
|
|
38830
|
-
}
|
|
38831
|
-
// The producer's version is the same as the last time we read it, but it might itself be
|
|
38832
|
-
// stale. Force the producer to recompute its version (calculating a new value if necessary).
|
|
38833
|
-
producerUpdateValueVersion(producer);
|
|
38834
|
-
// Now when we do this check, `producer.version` is guaranteed to be up to date, so if the
|
|
38835
|
-
// versions still match then it has not changed since the last time we read it.
|
|
38836
|
-
if (seenVersion !== producer.version) {
|
|
38837
|
-
return true;
|
|
38838
|
-
}
|
|
38839
|
-
}
|
|
38840
|
-
return false;
|
|
38841
|
-
}
|
|
38842
|
-
/**
|
|
38843
|
-
* Disconnect this consumer from the graph.
|
|
38844
|
-
*/
|
|
38845
|
-
function consumerDestroy(node) {
|
|
38846
|
-
assertConsumerNode(node);
|
|
38847
|
-
if (consumerIsLive(node)) {
|
|
38848
|
-
// Drop all connections from the graph to this node.
|
|
38849
|
-
for (let i = 0; i < node.producerNode.length; i++) {
|
|
38850
|
-
producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
|
|
38851
|
-
}
|
|
38852
|
-
}
|
|
38853
|
-
// Truncate all the arrays to drop all connection from this node to the graph.
|
|
38854
|
-
node.producerNode.length =
|
|
38855
|
-
node.producerLastReadVersion.length =
|
|
38856
|
-
node.producerIndexOfThis.length =
|
|
38857
|
-
0;
|
|
38858
|
-
if (node.liveConsumerNode) {
|
|
38859
|
-
node.liveConsumerNode.length = node.liveConsumerIndexOfThis.length = 0;
|
|
38860
|
-
}
|
|
38861
|
-
}
|
|
38862
|
-
/**
|
|
38863
|
-
* Add `consumer` as a live consumer of this node.
|
|
38864
|
-
*
|
|
38865
|
-
* Note that this operation is potentially transitive. If this node becomes live, then it becomes
|
|
38866
|
-
* a live consumer of all of its current producers.
|
|
38867
|
-
*/
|
|
38868
|
-
function producerAddLiveConsumer(node, consumer, indexOfThis) {
|
|
38869
|
-
assertProducerNode(node);
|
|
38870
|
-
if (node.liveConsumerNode.length === 0 && isConsumerNode(node)) {
|
|
38871
|
-
// When going from 0 to 1 live consumers, we become a live consumer to our producers.
|
|
38872
|
-
for (let i = 0; i < node.producerNode.length; i++) {
|
|
38873
|
-
node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i);
|
|
38874
|
-
}
|
|
38875
|
-
}
|
|
38876
|
-
node.liveConsumerIndexOfThis.push(indexOfThis);
|
|
38877
|
-
return node.liveConsumerNode.push(consumer) - 1;
|
|
38878
|
-
}
|
|
38879
|
-
/**
|
|
38880
|
-
* Remove the live consumer at `idx`.
|
|
38881
|
-
*/
|
|
38882
|
-
function producerRemoveLiveConsumerAtIndex(node, idx) {
|
|
38883
|
-
assertProducerNode(node);
|
|
38884
|
-
if (typeof ngDevMode !== 'undefined' && ngDevMode && idx >= node.liveConsumerNode.length) {
|
|
38885
|
-
throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`);
|
|
38886
|
-
}
|
|
38887
|
-
if (node.liveConsumerNode.length === 1 && isConsumerNode(node)) {
|
|
38888
|
-
// When removing the last live consumer, we will no longer be live. We need to remove
|
|
38889
|
-
// ourselves from our producers' tracking (which may cause consumer-producers to lose
|
|
38890
|
-
// liveness as well).
|
|
38891
|
-
for (let i = 0; i < node.producerNode.length; i++) {
|
|
38892
|
-
producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
|
|
38893
|
-
}
|
|
38894
|
-
}
|
|
38895
|
-
// Move the last value of `liveConsumers` into `idx`. Note that if there's only a single
|
|
38896
|
-
// live consumer, this is a no-op.
|
|
38897
|
-
const lastIdx = node.liveConsumerNode.length - 1;
|
|
38898
|
-
node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];
|
|
38899
|
-
node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];
|
|
38900
|
-
// Truncate the array.
|
|
38901
|
-
node.liveConsumerNode.length--;
|
|
38902
|
-
node.liveConsumerIndexOfThis.length--;
|
|
38903
|
-
// If the index is still valid, then we need to fix the index pointer from the producer to this
|
|
38904
|
-
// consumer, and update it from `lastIdx` to `idx` (accounting for the move above).
|
|
38905
|
-
if (idx < node.liveConsumerNode.length) {
|
|
38906
|
-
const idxProducer = node.liveConsumerIndexOfThis[idx];
|
|
38907
|
-
const consumer = node.liveConsumerNode[idx];
|
|
38908
|
-
assertConsumerNode(consumer);
|
|
38909
|
-
consumer.producerIndexOfThis[idxProducer] = idx;
|
|
38910
|
-
}
|
|
38911
|
-
}
|
|
38912
|
-
function consumerIsLive(node) {
|
|
38913
|
-
return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;
|
|
38914
|
-
}
|
|
38915
|
-
function assertConsumerNode(node) {
|
|
38916
|
-
node.producerNode ??= [];
|
|
38917
|
-
node.producerIndexOfThis ??= [];
|
|
38918
|
-
node.producerLastReadVersion ??= [];
|
|
38919
|
-
}
|
|
38920
|
-
function assertProducerNode(node) {
|
|
38921
|
-
node.liveConsumerNode ??= [];
|
|
38922
|
-
node.liveConsumerIndexOfThis ??= [];
|
|
38923
|
-
}
|
|
38924
|
-
function isConsumerNode(node) {
|
|
38925
|
-
return node.producerNode !== undefined;
|
|
38926
|
-
}
|
|
38927
|
-
|
|
38928
|
-
/**
|
|
38929
|
-
* Create a computed signal which derives a reactive value from an expression.
|
|
38930
|
-
*/
|
|
38931
|
-
function createComputed(computation) {
|
|
38932
|
-
const node = Object.create(COMPUTED_NODE);
|
|
38933
|
-
node.computation = computation;
|
|
38934
|
-
const computed = () => {
|
|
38935
|
-
// Check if the value needs updating before returning it.
|
|
38936
|
-
producerUpdateValueVersion(node);
|
|
38937
|
-
// Record that someone looked at this signal.
|
|
38938
|
-
producerAccessed(node);
|
|
38939
|
-
if (node.value === ERRORED) {
|
|
38940
|
-
throw node.error;
|
|
38941
|
-
}
|
|
38942
|
-
return node.value;
|
|
38943
|
-
};
|
|
38944
|
-
computed[SIGNAL] = node;
|
|
38945
|
-
return computed;
|
|
38946
|
-
}
|
|
38947
|
-
/**
|
|
38948
|
-
* A dedicated symbol used before a computed value has been calculated for the first time.
|
|
38949
|
-
* Explicitly typed as `any` so we can use it as signal's value.
|
|
38950
|
-
*/
|
|
38951
|
-
const UNSET = /* @__PURE__ */ Symbol('UNSET');
|
|
38952
|
-
/**
|
|
38953
|
-
* A dedicated symbol used in place of a computed signal value to indicate that a given computation
|
|
38954
|
-
* is in progress. Used to detect cycles in computation chains.
|
|
38955
|
-
* Explicitly typed as `any` so we can use it as signal's value.
|
|
38956
|
-
*/
|
|
38957
|
-
const COMPUTING = /* @__PURE__ */ Symbol('COMPUTING');
|
|
38958
|
-
/**
|
|
38959
|
-
* A dedicated symbol used in place of a computed signal value to indicate that a given computation
|
|
38960
|
-
* failed. The thrown error is cached until the computation gets dirty again.
|
|
38961
|
-
* Explicitly typed as `any` so we can use it as signal's value.
|
|
38962
|
-
*/
|
|
38963
|
-
const ERRORED = /* @__PURE__ */ Symbol('ERRORED');
|
|
38964
|
-
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
38965
|
-
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
38966
|
-
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
38967
|
-
const COMPUTED_NODE = /* @__PURE__ */ (() => {
|
|
38968
|
-
return {
|
|
38969
|
-
...REACTIVE_NODE,
|
|
38970
|
-
value: UNSET,
|
|
38971
|
-
dirty: true,
|
|
38972
|
-
error: null,
|
|
38973
|
-
equal: defaultEquals,
|
|
38974
|
-
kind: 'computed',
|
|
38975
|
-
producerMustRecompute(node) {
|
|
38976
|
-
// Force a recomputation if there's no current value, or if the current value is in the
|
|
38977
|
-
// process of being calculated (which should throw an error).
|
|
38978
|
-
return node.value === UNSET || node.value === COMPUTING;
|
|
38979
|
-
},
|
|
38980
|
-
producerRecomputeValue(node) {
|
|
38981
|
-
if (node.value === COMPUTING) {
|
|
38982
|
-
// Our computation somehow led to a cyclic read of itself.
|
|
38983
|
-
throw new Error('Detected cycle in computations.');
|
|
38984
|
-
}
|
|
38985
|
-
const oldValue = node.value;
|
|
38986
|
-
node.value = COMPUTING;
|
|
38987
|
-
const prevConsumer = consumerBeforeComputation(node);
|
|
38988
|
-
let newValue;
|
|
38989
|
-
let wasEqual = false;
|
|
38990
|
-
try {
|
|
38991
|
-
newValue = node.computation();
|
|
38992
|
-
// We want to mark this node as errored if calling `equal` throws; however, we don't want
|
|
38993
|
-
// to track any reactive reads inside `equal`.
|
|
38994
|
-
setActiveConsumer(null);
|
|
38995
|
-
wasEqual =
|
|
38996
|
-
oldValue !== UNSET &&
|
|
38997
|
-
oldValue !== ERRORED &&
|
|
38998
|
-
newValue !== ERRORED &&
|
|
38999
|
-
node.equal(oldValue, newValue);
|
|
39000
|
-
}
|
|
39001
|
-
catch (err) {
|
|
39002
|
-
newValue = ERRORED;
|
|
39003
|
-
node.error = err;
|
|
39004
|
-
}
|
|
39005
|
-
finally {
|
|
39006
|
-
consumerAfterComputation(node, prevConsumer);
|
|
39007
|
-
}
|
|
39008
|
-
if (wasEqual) {
|
|
39009
|
-
// No change to `valueVersion` - old and new values are
|
|
39010
|
-
// semantically equivalent.
|
|
39011
|
-
node.value = oldValue;
|
|
39012
|
-
return;
|
|
39013
|
-
}
|
|
39014
|
-
node.value = newValue;
|
|
39015
|
-
node.version++;
|
|
39016
|
-
},
|
|
39017
|
-
};
|
|
39018
|
-
})();
|
|
39019
|
-
|
|
39020
|
-
function defaultThrowError() {
|
|
39021
|
-
throw new Error();
|
|
39022
|
-
}
|
|
39023
|
-
let throwInvalidWriteToSignalErrorFn = defaultThrowError;
|
|
39024
|
-
function throwInvalidWriteToSignalError(node) {
|
|
39025
|
-
throwInvalidWriteToSignalErrorFn(node);
|
|
39026
|
-
}
|
|
39027
|
-
function setThrowInvalidWriteToSignalError(fn) {
|
|
39028
|
-
throwInvalidWriteToSignalErrorFn = fn;
|
|
39029
|
-
}
|
|
39030
|
-
|
|
39031
|
-
/**
|
|
39032
|
-
* If set, called after `WritableSignal`s are updated.
|
|
39033
|
-
*
|
|
39034
|
-
* This hook can be used to achieve various effects, such as running effects synchronously as part
|
|
39035
|
-
* of setting a signal.
|
|
39036
|
-
*/
|
|
39037
|
-
let postSignalSetFn = null;
|
|
39038
|
-
/**
|
|
39039
|
-
* Create a `Signal` that can be set or updated directly.
|
|
39040
|
-
*/
|
|
39041
|
-
function createSignal(initialValue) {
|
|
39042
|
-
const node = Object.create(SIGNAL_NODE);
|
|
39043
|
-
node.value = initialValue;
|
|
39044
|
-
const getter = (() => {
|
|
39045
|
-
producerAccessed(node);
|
|
39046
|
-
return node.value;
|
|
39047
|
-
});
|
|
39048
|
-
getter[SIGNAL] = node;
|
|
39049
|
-
return getter;
|
|
39050
|
-
}
|
|
39051
|
-
function setPostSignalSetFn(fn) {
|
|
39052
|
-
const prev = postSignalSetFn;
|
|
39053
|
-
postSignalSetFn = fn;
|
|
39054
|
-
return prev;
|
|
39055
|
-
}
|
|
39056
|
-
function signalGetFn() {
|
|
39057
|
-
producerAccessed(this);
|
|
39058
|
-
return this.value;
|
|
39059
|
-
}
|
|
39060
|
-
function signalSetFn(node, newValue) {
|
|
39061
|
-
if (!producerUpdatesAllowed()) {
|
|
39062
|
-
throwInvalidWriteToSignalError(node);
|
|
39063
|
-
}
|
|
39064
|
-
if (!node.equal(node.value, newValue)) {
|
|
39065
|
-
node.value = newValue;
|
|
39066
|
-
signalValueChanged(node);
|
|
39067
|
-
}
|
|
39068
|
-
}
|
|
39069
|
-
function signalUpdateFn(node, updater) {
|
|
39070
|
-
if (!producerUpdatesAllowed()) {
|
|
39071
|
-
throwInvalidWriteToSignalError(node);
|
|
39072
|
-
}
|
|
39073
|
-
signalSetFn(node, updater(node.value));
|
|
39074
|
-
}
|
|
39075
|
-
function runPostSignalSetFn() {
|
|
39076
|
-
postSignalSetFn?.();
|
|
39077
|
-
}
|
|
39078
|
-
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
39079
|
-
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
39080
|
-
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
39081
|
-
const SIGNAL_NODE = /* @__PURE__ */ (() => {
|
|
39082
|
-
return {
|
|
39083
|
-
...REACTIVE_NODE,
|
|
39084
|
-
equal: defaultEquals,
|
|
39085
|
-
value: undefined,
|
|
39086
|
-
kind: 'signal',
|
|
39087
|
-
};
|
|
39088
|
-
})();
|
|
39089
|
-
function signalValueChanged(node) {
|
|
39090
|
-
node.version++;
|
|
39091
|
-
producerIncrementEpoch();
|
|
39092
|
-
producerNotifyConsumers(node);
|
|
39093
|
-
postSignalSetFn?.();
|
|
39094
|
-
}
|
|
39095
|
-
|
|
39096
|
-
function createLinkedSignal(sourceFn, computationFn, equalityFn) {
|
|
39097
|
-
const node = Object.create(LINKED_SIGNAL_NODE);
|
|
39098
|
-
node.source = sourceFn;
|
|
39099
|
-
node.computation = computationFn;
|
|
39100
|
-
if (equalityFn != undefined) {
|
|
39101
|
-
node.equal = equalityFn;
|
|
39102
|
-
}
|
|
39103
|
-
const linkedSignalGetter = () => {
|
|
39104
|
-
// Check if the value needs updating before returning it.
|
|
39105
|
-
producerUpdateValueVersion(node);
|
|
39106
|
-
// Record that someone looked at this signal.
|
|
39107
|
-
producerAccessed(node);
|
|
39108
|
-
if (node.value === ERRORED) {
|
|
39109
|
-
throw node.error;
|
|
39110
|
-
}
|
|
39111
|
-
return node.value;
|
|
39112
|
-
};
|
|
39113
|
-
const getter = linkedSignalGetter;
|
|
39114
|
-
getter[SIGNAL] = node;
|
|
39115
|
-
return getter;
|
|
39116
|
-
}
|
|
39117
|
-
function linkedSignalSetFn(node, newValue) {
|
|
39118
|
-
producerUpdateValueVersion(node);
|
|
39119
|
-
signalSetFn(node, newValue);
|
|
39120
|
-
producerMarkClean(node);
|
|
39121
|
-
}
|
|
39122
|
-
function linkedSignalUpdateFn(node, updater) {
|
|
39123
|
-
producerUpdateValueVersion(node);
|
|
39124
|
-
signalUpdateFn(node, updater);
|
|
39125
|
-
producerMarkClean(node);
|
|
39126
|
-
}
|
|
39127
|
-
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
39128
|
-
// a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`.
|
|
39129
|
-
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
39130
|
-
const LINKED_SIGNAL_NODE = /* @__PURE__ */ (() => {
|
|
39131
|
-
return {
|
|
39132
|
-
...REACTIVE_NODE,
|
|
39133
|
-
value: UNSET,
|
|
39134
|
-
dirty: true,
|
|
39135
|
-
error: null,
|
|
39136
|
-
equal: defaultEquals,
|
|
39137
|
-
producerMustRecompute(node) {
|
|
39138
|
-
// Force a recomputation if there's no current value, or if the current value is in the
|
|
39139
|
-
// process of being calculated (which should throw an error).
|
|
39140
|
-
return node.value === UNSET || node.value === COMPUTING;
|
|
39141
|
-
},
|
|
39142
|
-
producerRecomputeValue(node) {
|
|
39143
|
-
if (node.value === COMPUTING) {
|
|
39144
|
-
// Our computation somehow led to a cyclic read of itself.
|
|
39145
|
-
throw new Error('Detected cycle in computations.');
|
|
39146
|
-
}
|
|
39147
|
-
const oldValue = node.value;
|
|
39148
|
-
node.value = COMPUTING;
|
|
39149
|
-
const prevConsumer = consumerBeforeComputation(node);
|
|
39150
|
-
let newValue;
|
|
39151
|
-
try {
|
|
39152
|
-
const newSourceValue = node.source();
|
|
39153
|
-
const prev = oldValue === UNSET || oldValue === ERRORED
|
|
39154
|
-
? undefined
|
|
39155
|
-
: {
|
|
39156
|
-
source: node.sourceValue,
|
|
39157
|
-
value: oldValue,
|
|
39158
|
-
};
|
|
39159
|
-
newValue = node.computation(newSourceValue, prev);
|
|
39160
|
-
node.sourceValue = newSourceValue;
|
|
39161
|
-
}
|
|
39162
|
-
catch (err) {
|
|
39163
|
-
newValue = ERRORED;
|
|
39164
|
-
node.error = err;
|
|
39165
|
-
}
|
|
39166
|
-
finally {
|
|
39167
|
-
consumerAfterComputation(node, prevConsumer);
|
|
39168
|
-
}
|
|
39169
|
-
if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {
|
|
39170
|
-
// No change to `valueVersion` - old and new values are
|
|
39171
|
-
// semantically equivalent.
|
|
39172
|
-
node.value = oldValue;
|
|
39173
|
-
return;
|
|
39174
|
-
}
|
|
39175
|
-
node.value = newValue;
|
|
39176
|
-
node.version++;
|
|
39177
|
-
},
|
|
39178
|
-
};
|
|
39179
|
-
})();
|
|
39180
|
-
|
|
39181
|
-
function createWatch(fn, schedule, allowSignalWrites) {
|
|
39182
|
-
const node = Object.create(WATCH_NODE);
|
|
39183
|
-
if (allowSignalWrites) {
|
|
39184
|
-
node.consumerAllowSignalWrites = true;
|
|
39185
|
-
}
|
|
39186
|
-
node.fn = fn;
|
|
39187
|
-
node.schedule = schedule;
|
|
39188
|
-
const registerOnCleanup = (cleanupFn) => {
|
|
39189
|
-
node.cleanupFn = cleanupFn;
|
|
39190
|
-
};
|
|
39191
|
-
function isWatchNodeDestroyed(node) {
|
|
39192
|
-
return node.fn === null && node.schedule === null;
|
|
39193
|
-
}
|
|
39194
|
-
function destroyWatchNode(node) {
|
|
39195
|
-
if (!isWatchNodeDestroyed(node)) {
|
|
39196
|
-
consumerDestroy(node); // disconnect watcher from the reactive graph
|
|
39197
|
-
node.cleanupFn();
|
|
39198
|
-
// nullify references to the integration functions to mark node as destroyed
|
|
39199
|
-
node.fn = null;
|
|
39200
|
-
node.schedule = null;
|
|
39201
|
-
node.cleanupFn = NOOP_CLEANUP_FN;
|
|
39202
|
-
}
|
|
39203
|
-
}
|
|
39204
|
-
const run = () => {
|
|
39205
|
-
if (node.fn === null) {
|
|
39206
|
-
// trying to run a destroyed watch is noop
|
|
39207
|
-
return;
|
|
39208
|
-
}
|
|
39209
|
-
if (isInNotificationPhase()) {
|
|
39210
|
-
throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);
|
|
39211
|
-
}
|
|
39212
|
-
node.dirty = false;
|
|
39213
|
-
if (node.hasRun && !consumerPollProducersForChange(node)) {
|
|
39214
|
-
return;
|
|
39215
|
-
}
|
|
39216
|
-
node.hasRun = true;
|
|
39217
|
-
const prevConsumer = consumerBeforeComputation(node);
|
|
39218
|
-
try {
|
|
39219
|
-
node.cleanupFn();
|
|
39220
|
-
node.cleanupFn = NOOP_CLEANUP_FN;
|
|
39221
|
-
node.fn(registerOnCleanup);
|
|
39222
|
-
}
|
|
39223
|
-
finally {
|
|
39224
|
-
consumerAfterComputation(node, prevConsumer);
|
|
39225
|
-
}
|
|
39226
|
-
};
|
|
39227
|
-
node.ref = {
|
|
39228
|
-
notify: () => consumerMarkDirty(node),
|
|
39229
|
-
run,
|
|
39230
|
-
cleanup: () => node.cleanupFn(),
|
|
39231
|
-
destroy: () => destroyWatchNode(node),
|
|
39232
|
-
[SIGNAL]: node,
|
|
39233
|
-
};
|
|
39234
|
-
return node.ref;
|
|
39235
|
-
}
|
|
39236
|
-
const NOOP_CLEANUP_FN = () => { };
|
|
39237
|
-
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
39238
|
-
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
39239
|
-
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
39240
|
-
const WATCH_NODE = /* @__PURE__ */ (() => {
|
|
39241
|
-
return {
|
|
39242
|
-
...REACTIVE_NODE,
|
|
39243
|
-
consumerIsAlwaysLive: true,
|
|
39244
|
-
consumerAllowSignalWrites: false,
|
|
39245
|
-
consumerMarkedDirty: (node) => {
|
|
39246
|
-
if (node.schedule !== null) {
|
|
39247
|
-
node.schedule(node.ref);
|
|
39248
|
-
}
|
|
39249
|
-
},
|
|
39250
|
-
hasRun: false,
|
|
39251
|
-
cleanupFn: NOOP_CLEANUP_FN,
|
|
39252
|
-
};
|
|
39253
|
-
})();
|
|
39254
|
-
|
|
39255
|
-
function setAlternateWeakRefImpl(impl) {
|
|
39256
|
-
// TODO: remove this function
|
|
39257
|
-
}
|
|
39258
|
-
|
|
39259
37976
|
/**
|
|
39260
37977
|
* Internal create application API that implements the core application creation logic and optional
|
|
39261
37978
|
* bootstrap logic.
|
|
@@ -39350,8 +38067,8 @@ function withEventReplay() {
|
|
|
39350
38067
|
providers.push({
|
|
39351
38068
|
provide: ENVIRONMENT_INITIALIZER,
|
|
39352
38069
|
useValue: () => {
|
|
39353
|
-
const
|
|
39354
|
-
const
|
|
38070
|
+
const appRef = inject(ApplicationRef);
|
|
38071
|
+
const { injector } = appRef;
|
|
39355
38072
|
// We have to check for the appRef here due to the possibility of multiple apps
|
|
39356
38073
|
// being present on the same page. We only want to enable event replay for the
|
|
39357
38074
|
// apps that actually want it.
|
|
@@ -39359,6 +38076,11 @@ function withEventReplay() {
|
|
|
39359
38076
|
const jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);
|
|
39360
38077
|
if (shouldEnableEventReplay(injector)) {
|
|
39361
38078
|
setStashFn((rEl, eventName, listenerFn) => {
|
|
38079
|
+
// If a user binds to a ng-container and uses a directive that binds using a host listener,
|
|
38080
|
+
// this element could be a comment node. So we need to ensure we have an actual element
|
|
38081
|
+
// node before stashing anything.
|
|
38082
|
+
if (rEl.nodeType !== Node.ELEMENT_NODE)
|
|
38083
|
+
return;
|
|
39362
38084
|
sharedStashFunction(rEl, eventName, listenerFn);
|
|
39363
38085
|
sharedMapFunction(rEl, jsActionMap);
|
|
39364
38086
|
});
|
|
@@ -39370,8 +38092,8 @@ function withEventReplay() {
|
|
|
39370
38092
|
provide: APP_BOOTSTRAP_LISTENER,
|
|
39371
38093
|
useFactory: () => {
|
|
39372
38094
|
const appId = inject(APP_ID);
|
|
39373
|
-
const injector = inject(Injector);
|
|
39374
38095
|
const appRef = inject(ApplicationRef);
|
|
38096
|
+
const { injector } = appRef;
|
|
39375
38097
|
return () => {
|
|
39376
38098
|
// We have to check for the appRef here due to the possibility of multiple apps
|
|
39377
38099
|
// being present on the same page. We only want to enable event replay for the
|
|
@@ -39398,6 +38120,15 @@ function withEventReplay() {
|
|
|
39398
38120
|
// of the application is completed. This timing is similar to the unclaimed
|
|
39399
38121
|
// dehydrated views cleanup timing.
|
|
39400
38122
|
appRef.whenStable().then(() => {
|
|
38123
|
+
// Note: we have to check whether the application is destroyed before
|
|
38124
|
+
// performing other operations with the `injector`.
|
|
38125
|
+
// The application may be destroyed **before** it becomes stable, so when
|
|
38126
|
+
// the `whenStable` resolves, the injector might already be in
|
|
38127
|
+
// a destroyed state. Thus, calling `injector.get` would throw an error
|
|
38128
|
+
// indicating that the injector has already been destroyed.
|
|
38129
|
+
if (appRef.destroyed) {
|
|
38130
|
+
return;
|
|
38131
|
+
}
|
|
39401
38132
|
const eventContractDetails = injector.get(JSACTION_EVENT_CONTRACT);
|
|
39402
38133
|
initEventReplay(eventContractDetails, injector);
|
|
39403
38134
|
const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);
|
|
@@ -39602,7 +38333,7 @@ function annotateComponentLViewForHydration(lView, context, injector) {
|
|
|
39602
38333
|
function annotateLContainerForHydration(lContainer, context, injector) {
|
|
39603
38334
|
const componentLView = unwrapLView(lContainer[HOST]);
|
|
39604
38335
|
// Serialize the root component itself.
|
|
39605
|
-
const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context
|
|
38336
|
+
const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context);
|
|
39606
38337
|
if (componentLViewNghIndex === null) {
|
|
39607
38338
|
// Component was not serialized (for example, if hydration was skipped by adding
|
|
39608
38339
|
// the `ngSkipHydration` attribute or this component uses i18n blocks in the template,
|
|
@@ -39649,7 +38380,7 @@ function annotateForHydration(appRef, doc) {
|
|
|
39649
38380
|
capture: new Set(),
|
|
39650
38381
|
};
|
|
39651
38382
|
const deferBlocks = new Map();
|
|
39652
|
-
|
|
38383
|
+
appRef.injector.get(APP_ID);
|
|
39653
38384
|
for (const viewRef of viewRefs) {
|
|
39654
38385
|
const lNode = getLNodeForHydration(viewRef);
|
|
39655
38386
|
// An `lView` might be `null` if a `ViewRef` represents
|
|
@@ -39663,14 +38394,13 @@ function annotateForHydration(appRef, doc) {
|
|
|
39663
38394
|
i18nChildren: new Map(),
|
|
39664
38395
|
eventTypesToReplay,
|
|
39665
38396
|
shouldReplayEvents,
|
|
39666
|
-
appId,
|
|
39667
38397
|
deferBlocks,
|
|
39668
38398
|
};
|
|
39669
38399
|
if (isLContainer(lNode)) {
|
|
39670
|
-
annotateLContainerForHydration(lNode, context
|
|
38400
|
+
annotateLContainerForHydration(lNode, context);
|
|
39671
38401
|
}
|
|
39672
38402
|
else {
|
|
39673
|
-
annotateComponentLViewForHydration(lNode, context
|
|
38403
|
+
annotateComponentLViewForHydration(lNode, context);
|
|
39674
38404
|
}
|
|
39675
38405
|
insertCorruptedTextNodeMarkers(corruptedTextNodes, doc);
|
|
39676
38406
|
}
|
|
@@ -39725,7 +38455,7 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
|
|
|
39725
38455
|
// `<app-root /><#VIEW1><#VIEW2>...<!--container-->`
|
|
39726
38456
|
// The `+1` is to capture the `<app-root />` element.
|
|
39727
38457
|
numRootNodes = calcNumRootNodesInLContainer(childLView) + 1;
|
|
39728
|
-
annotateLContainerForHydration(childLView, context
|
|
38458
|
+
annotateLContainerForHydration(childLView, context);
|
|
39729
38459
|
const componentLView = unwrapLView(childLView[HOST]);
|
|
39730
38460
|
serializedView = {
|
|
39731
38461
|
[TEMPLATE_ID]: componentLView[TVIEW].ssrId,
|
|
@@ -40609,14 +39339,14 @@ function disableProfiling() {
|
|
|
40609
39339
|
* can, optionally, return a value.
|
|
40610
39340
|
*/
|
|
40611
39341
|
function untracked(nonReactiveReadsFn) {
|
|
40612
|
-
const prevConsumer = setActiveConsumer
|
|
39342
|
+
const prevConsumer = setActiveConsumer(null);
|
|
40613
39343
|
// We are not trying to catch any particular errors here, just making sure that the consumers
|
|
40614
39344
|
// stack is restored in case of errors.
|
|
40615
39345
|
try {
|
|
40616
39346
|
return nonReactiveReadsFn();
|
|
40617
39347
|
}
|
|
40618
39348
|
finally {
|
|
40619
|
-
setActiveConsumer
|
|
39349
|
+
setActiveConsumer(prevConsumer);
|
|
40620
39350
|
}
|
|
40621
39351
|
}
|
|
40622
39352
|
|
|
@@ -40624,22 +39354,17 @@ function untracked(nonReactiveReadsFn) {
|
|
|
40624
39354
|
* Create a computed `Signal` which derives a reactive value from an expression.
|
|
40625
39355
|
*/
|
|
40626
39356
|
function computed(computation, options) {
|
|
40627
|
-
const getter = createComputed
|
|
39357
|
+
const getter = createComputed(computation);
|
|
40628
39358
|
if (options?.equal) {
|
|
40629
|
-
getter[SIGNAL
|
|
39359
|
+
getter[SIGNAL].equal = options.equal;
|
|
40630
39360
|
}
|
|
40631
39361
|
if (ngDevMode) {
|
|
40632
39362
|
getter.toString = () => `[Computed: ${getter()}]`;
|
|
40633
|
-
getter[SIGNAL
|
|
39363
|
+
getter[SIGNAL].debugName = options?.debugName;
|
|
40634
39364
|
}
|
|
40635
39365
|
return getter;
|
|
40636
39366
|
}
|
|
40637
39367
|
|
|
40638
|
-
/**
|
|
40639
|
-
* Controls whether effects use the legacy `microtaskEffect` by default.
|
|
40640
|
-
*/
|
|
40641
|
-
const USE_MICROTASK_EFFECT_BY_DEFAULT = false;
|
|
40642
|
-
|
|
40643
39368
|
class MicrotaskEffectScheduler extends ZoneAwareEffectScheduler {
|
|
40644
39369
|
pendingTasks = inject(PendingTasksInternal);
|
|
40645
39370
|
taskId = null;
|
|
@@ -40688,7 +39413,7 @@ class EffectHandle {
|
|
|
40688
39413
|
this.effectFn = effectFn;
|
|
40689
39414
|
this.zone = zone;
|
|
40690
39415
|
this.injector = injector;
|
|
40691
|
-
this.watcher = createWatch
|
|
39416
|
+
this.watcher = createWatch((onCleanup) => this.runEffect(onCleanup), () => this.schedule(), allowSignalWrites);
|
|
40692
39417
|
this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
|
|
40693
39418
|
}
|
|
40694
39419
|
runEffect(onCleanup) {
|
|
@@ -40750,22 +39475,13 @@ function microtaskEffect(effectFn, options) {
|
|
|
40750
39475
|
return handle;
|
|
40751
39476
|
}
|
|
40752
39477
|
|
|
40753
|
-
let useMicrotaskEffectsByDefault = USE_MICROTASK_EFFECT_BY_DEFAULT;
|
|
40754
|
-
/**
|
|
40755
|
-
* Toggle the flag on whether to use microtask effects (for testing).
|
|
40756
|
-
*/
|
|
40757
|
-
function setUseMicrotaskEffectsByDefault(value) {
|
|
40758
|
-
const prev = useMicrotaskEffectsByDefault;
|
|
40759
|
-
useMicrotaskEffectsByDefault = value;
|
|
40760
|
-
return prev;
|
|
40761
|
-
}
|
|
40762
39478
|
class EffectRefImpl {
|
|
40763
|
-
[SIGNAL
|
|
39479
|
+
[SIGNAL];
|
|
40764
39480
|
constructor(node) {
|
|
40765
|
-
this[SIGNAL
|
|
39481
|
+
this[SIGNAL] = node;
|
|
40766
39482
|
}
|
|
40767
39483
|
destroy() {
|
|
40768
|
-
this[SIGNAL
|
|
39484
|
+
this[SIGNAL].destroy();
|
|
40769
39485
|
}
|
|
40770
39486
|
}
|
|
40771
39487
|
/**
|
|
@@ -40787,12 +39503,6 @@ class EffectRefImpl {
|
|
|
40787
39503
|
* @developerPreview
|
|
40788
39504
|
*/
|
|
40789
39505
|
function effect(effectFn, options) {
|
|
40790
|
-
if (useMicrotaskEffectsByDefault) {
|
|
40791
|
-
if (ngDevMode && options?.forceRoot) {
|
|
40792
|
-
throw new Error(`Cannot use 'forceRoot' option with microtask effects on`);
|
|
40793
|
-
}
|
|
40794
|
-
return microtaskEffect(effectFn, options);
|
|
40795
|
-
}
|
|
40796
39506
|
ngDevMode &&
|
|
40797
39507
|
assertNotInReactiveContext(effect, 'Call `effect` outside of a reactive context. For example, schedule the ' +
|
|
40798
39508
|
'effect inside the component constructor.');
|
|
@@ -40840,13 +39550,13 @@ function effect(effectFn, options) {
|
|
|
40840
39550
|
* Not public API, which guarantees `EffectScheduler` only ever comes from the application root
|
|
40841
39551
|
* injector.
|
|
40842
39552
|
*/
|
|
40843
|
-
|
|
39553
|
+
/* @__PURE__ */ new InjectionToken('', {
|
|
40844
39554
|
providedIn: 'root',
|
|
40845
39555
|
factory: () => inject(EffectScheduler),
|
|
40846
39556
|
});
|
|
40847
39557
|
const BASE_EFFECT_NODE =
|
|
40848
39558
|
/* @__PURE__ */ (() => ({
|
|
40849
|
-
...REACTIVE_NODE
|
|
39559
|
+
...REACTIVE_NODE,
|
|
40850
39560
|
consumerIsAlwaysLive: true,
|
|
40851
39561
|
consumerAllowSignalWrites: true,
|
|
40852
39562
|
dirty: true,
|
|
@@ -40857,15 +39567,15 @@ const BASE_EFFECT_NODE =
|
|
|
40857
39567
|
onDestroyFn: noop,
|
|
40858
39568
|
run() {
|
|
40859
39569
|
this.dirty = false;
|
|
40860
|
-
if (ngDevMode && isInNotificationPhase
|
|
39570
|
+
if (ngDevMode && isInNotificationPhase()) {
|
|
40861
39571
|
throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);
|
|
40862
39572
|
}
|
|
40863
|
-
if (this.hasRun && !consumerPollProducersForChange
|
|
39573
|
+
if (this.hasRun && !consumerPollProducersForChange(this)) {
|
|
40864
39574
|
return;
|
|
40865
39575
|
}
|
|
40866
39576
|
this.hasRun = true;
|
|
40867
39577
|
const registerCleanupFn = (cleanupFn) => (this.cleanupFns ??= []).push(cleanupFn);
|
|
40868
|
-
const prevNode = consumerBeforeComputation
|
|
39578
|
+
const prevNode = consumerBeforeComputation(this);
|
|
40869
39579
|
// We clear `setIsRefreshingViews` so that `markForCheck()` within the body of an effect will
|
|
40870
39580
|
// cause CD to reach the component in question.
|
|
40871
39581
|
const prevRefreshingViews = setIsRefreshingViews(false);
|
|
@@ -40875,7 +39585,7 @@ const BASE_EFFECT_NODE =
|
|
|
40875
39585
|
}
|
|
40876
39586
|
finally {
|
|
40877
39587
|
setIsRefreshingViews(prevRefreshingViews);
|
|
40878
|
-
consumerAfterComputation
|
|
39588
|
+
consumerAfterComputation(this, prevNode);
|
|
40879
39589
|
}
|
|
40880
39590
|
},
|
|
40881
39591
|
maybeCleanup() {
|
|
@@ -40903,7 +39613,7 @@ const ROOT_EFFECT_NODE =
|
|
|
40903
39613
|
this.notifier.notify(12 /* NotificationSource.RootEffect */);
|
|
40904
39614
|
},
|
|
40905
39615
|
destroy() {
|
|
40906
|
-
consumerDestroy
|
|
39616
|
+
consumerDestroy(this);
|
|
40907
39617
|
this.onDestroyFn();
|
|
40908
39618
|
this.maybeCleanup();
|
|
40909
39619
|
this.scheduler.remove(this);
|
|
@@ -40918,7 +39628,7 @@ const VIEW_EFFECT_NODE =
|
|
|
40918
39628
|
this.notifier.notify(13 /* NotificationSource.ViewEffect */);
|
|
40919
39629
|
},
|
|
40920
39630
|
destroy() {
|
|
40921
|
-
consumerDestroy
|
|
39631
|
+
consumerDestroy(this);
|
|
40922
39632
|
this.onDestroyFn();
|
|
40923
39633
|
this.maybeCleanup();
|
|
40924
39634
|
this.view[EFFECTS]?.delete(this);
|
|
@@ -40990,11 +39700,11 @@ var ResourceStatus;
|
|
|
40990
39700
|
const identityFn = (v) => v;
|
|
40991
39701
|
function linkedSignal(optionsOrComputation, options) {
|
|
40992
39702
|
if (typeof optionsOrComputation === 'function') {
|
|
40993
|
-
const getter = createLinkedSignal
|
|
39703
|
+
const getter = createLinkedSignal(optionsOrComputation, (identityFn), options?.equal);
|
|
40994
39704
|
return upgradeLinkedSignalGetter(getter);
|
|
40995
39705
|
}
|
|
40996
39706
|
else {
|
|
40997
|
-
const getter = createLinkedSignal
|
|
39707
|
+
const getter = createLinkedSignal(optionsOrComputation.source, optionsOrComputation.computation, optionsOrComputation.equal);
|
|
40998
39708
|
return upgradeLinkedSignalGetter(getter);
|
|
40999
39709
|
}
|
|
41000
39710
|
}
|
|
@@ -41002,10 +39712,10 @@ function upgradeLinkedSignalGetter(getter) {
|
|
|
41002
39712
|
if (ngDevMode) {
|
|
41003
39713
|
getter.toString = () => `[LinkedSignal: ${getter()}]`;
|
|
41004
39714
|
}
|
|
41005
|
-
const node = getter[SIGNAL
|
|
39715
|
+
const node = getter[SIGNAL];
|
|
41006
39716
|
const upgradedGetter = getter;
|
|
41007
|
-
upgradedGetter.set = (newValue) => linkedSignalSetFn
|
|
41008
|
-
upgradedGetter.update = (updateFn) => linkedSignalUpdateFn
|
|
39717
|
+
upgradedGetter.set = (newValue) => linkedSignalSetFn(node, newValue);
|
|
39718
|
+
upgradedGetter.update = (updateFn) => linkedSignalUpdateFn(node, updateFn);
|
|
41009
39719
|
upgradedGetter.asReadonly = signalAsReadonlyFn.bind(getter);
|
|
41010
39720
|
return upgradedGetter;
|
|
41011
39721
|
}
|
|
@@ -41447,12 +40157,10 @@ function ɵɵngDeclarePipe(decl) {
|
|
|
41447
40157
|
return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵpipe.js`, decl);
|
|
41448
40158
|
}
|
|
41449
40159
|
|
|
41450
|
-
// we reexport these symbols just so that they are retained during the dead code elimination
|
|
41451
|
-
|
|
41452
40160
|
const NOT_SET = Symbol('NOT_SET');
|
|
41453
40161
|
const EMPTY_CLEANUP_SET = new Set();
|
|
41454
40162
|
const AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */ (() => ({
|
|
41455
|
-
...SIGNAL_NODE
|
|
40163
|
+
...SIGNAL_NODE,
|
|
41456
40164
|
consumerIsAlwaysLive: true,
|
|
41457
40165
|
consumerAllowSignalWrites: true,
|
|
41458
40166
|
value: NOT_SET,
|
|
@@ -41480,7 +40188,7 @@ const AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */ (() => ({
|
|
|
41480
40188
|
return this.signal;
|
|
41481
40189
|
}
|
|
41482
40190
|
this.dirty = false;
|
|
41483
|
-
if (this.value !== NOT_SET && !consumerPollProducersForChange
|
|
40191
|
+
if (this.value !== NOT_SET && !consumerPollProducersForChange(this)) {
|
|
41484
40192
|
// None of our producers report a change since the last time they were read, so no
|
|
41485
40193
|
// recomputation of our value is necessary.
|
|
41486
40194
|
return this.signal;
|
|
@@ -41503,13 +40211,13 @@ const AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */ (() => ({
|
|
|
41503
40211
|
}
|
|
41504
40212
|
args.push(this.registerCleanupFn);
|
|
41505
40213
|
// Call the user's callback in our reactive context.
|
|
41506
|
-
const prevConsumer = consumerBeforeComputation
|
|
40214
|
+
const prevConsumer = consumerBeforeComputation(this);
|
|
41507
40215
|
let newValue;
|
|
41508
40216
|
try {
|
|
41509
40217
|
newValue = this.userFn.apply(null, args);
|
|
41510
40218
|
}
|
|
41511
40219
|
finally {
|
|
41512
|
-
consumerAfterComputation
|
|
40220
|
+
consumerAfterComputation(this, prevConsumer);
|
|
41513
40221
|
}
|
|
41514
40222
|
if (this.value === NOT_SET || !this.equal(this.value, newValue)) {
|
|
41515
40223
|
this.value = newValue;
|
|
@@ -41553,10 +40261,10 @@ class AfterRenderEffectSequence extends AfterRenderSequence {
|
|
|
41553
40261
|
node.userFn = effectHook;
|
|
41554
40262
|
node.dirty = true;
|
|
41555
40263
|
node.signal = (() => {
|
|
41556
|
-
producerAccessed
|
|
40264
|
+
producerAccessed(node);
|
|
41557
40265
|
return node.value;
|
|
41558
40266
|
});
|
|
41559
|
-
node.signal[SIGNAL
|
|
40267
|
+
node.signal[SIGNAL] = node;
|
|
41560
40268
|
node.registerCleanupFn = (fn) => (node.cleanup ??= new Set()).add(fn);
|
|
41561
40269
|
this.nodes[phase] = node;
|
|
41562
40270
|
// Install the upstream hook which runs the `phaseFn` for this phase.
|
|
@@ -41604,8 +40312,6 @@ function afterRenderEffect(callbackOrSpec, options) {
|
|
|
41604
40312
|
return sequence;
|
|
41605
40313
|
}
|
|
41606
40314
|
|
|
41607
|
-
// This file exists to allow the set of reactivity exports to be modified in g3, as these APIs are
|
|
41608
|
-
|
|
41609
40315
|
/**
|
|
41610
40316
|
* Creates a `ComponentRef` instance based on provided component type and a set of options.
|
|
41611
40317
|
*
|
|
@@ -41817,40 +40523,5 @@ const REQUEST_CONTEXT = new InjectionToken(typeof ngDevMode === 'undefined' || n
|
|
|
41817
40523
|
factory: () => null,
|
|
41818
40524
|
});
|
|
41819
40525
|
|
|
41820
|
-
/**
|
|
41821
|
-
* @module
|
|
41822
|
-
* @description
|
|
41823
|
-
* Entry point from which you should import all public core APIs.
|
|
41824
|
-
*/
|
|
41825
|
-
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
41826
|
-
// This helper is to give a reasonable error message to people upgrading to v9 that have not yet
|
|
41827
|
-
// installed `@angular/localize` in their app.
|
|
41828
|
-
// tslint:disable-next-line: no-toplevel-property-access
|
|
41829
|
-
_global.$localize ??= function () {
|
|
41830
|
-
throw new Error('It looks like your application or one of its dependencies is using i18n.\n' +
|
|
41831
|
-
'Angular 9 introduced a global `$localize()` function that needs to be loaded.\n' +
|
|
41832
|
-
'Please run `ng add @angular/localize` from the Angular CLI.\n' +
|
|
41833
|
-
"(For non-CLI projects, add `import '@angular/localize/init';` to your `polyfills.ts` file.\n" +
|
|
41834
|
-
'For server-side rendering applications add the import to your `main.server.ts` file.)');
|
|
41835
|
-
};
|
|
41836
|
-
}
|
|
41837
|
-
|
|
41838
|
-
/**
|
|
41839
|
-
* @module
|
|
41840
|
-
* @description
|
|
41841
|
-
* Entry point for all public APIs of this package.
|
|
41842
|
-
*/
|
|
41843
|
-
// This file only reexports content of the `src` folder. Keep it that way.
|
|
41844
|
-
|
|
41845
|
-
/* This file is not used to build this module. It is only used during editing
|
|
41846
|
-
* by the TypeScript language service and during build for verification. `ngc`
|
|
41847
|
-
* replaces this file with production index.ts when it rewrites private symbol
|
|
41848
|
-
* names.
|
|
41849
|
-
*/
|
|
41850
|
-
|
|
41851
|
-
/**
|
|
41852
|
-
* Generated bundle index. Do not edit.
|
|
41853
|
-
*/
|
|
41854
|
-
|
|
41855
|
-
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, 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 };
|
|
40526
|
+
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 };
|
|
41856
40527
|
//# sourceMappingURL=core.mjs.map
|