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