@angular/core 17.1.0-next.4 → 17.1.0-rc.0
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/esm2022/primitives/signals/index.mjs +2 -2
- package/esm2022/primitives/signals/src/signal.mjs +2 -10
- package/esm2022/src/application/application_ref.mjs +24 -12
- package/esm2022/src/application/create_application.mjs +2 -2
- package/esm2022/src/authoring/input.mjs +12 -5
- package/esm2022/src/authoring/input_signal.mjs +28 -1
- package/esm2022/src/authoring/input_signal_node.mjs +22 -0
- package/esm2022/src/authoring.mjs +1 -4
- package/esm2022/src/change_detection/flags.mjs +16 -0
- package/esm2022/src/change_detection/scheduling/ng_zone_scheduling.mjs +164 -0
- package/esm2022/src/change_detection/scheduling/zoneless_scheduling.mjs +13 -0
- package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +56 -0
- package/esm2022/src/compiler/compiler_facade_interface.mjs +1 -1
- package/esm2022/src/core.mjs +3 -3
- package/esm2022/src/core_private_export.mjs +5 -2
- package/esm2022/src/core_render3_private_export.mjs +2 -2
- package/esm2022/src/defer/dom_triggers.mjs +1 -5
- package/esm2022/src/di/inject_switch.mjs +2 -3
- package/esm2022/src/di/r3_injector.mjs +8 -6
- package/esm2022/src/errors.mjs +1 -1
- package/esm2022/src/event_emitter.mjs +1 -2
- package/esm2022/src/hydration/utils.mjs +2 -2
- package/esm2022/src/hydration/views.mjs +2 -2
- package/esm2022/src/linker/view_container_ref.mjs +2 -2
- package/esm2022/src/metadata/directives.mjs +1 -1
- package/esm2022/src/pending_tasks.mjs +57 -0
- package/esm2022/src/platform/platform_ref.mjs +2 -2
- package/esm2022/src/render3/after_render_hooks.mjs +16 -34
- package/esm2022/src/render3/apply_value_input_field.mjs +16 -0
- package/esm2022/src/render3/collect_native_nodes.mjs +2 -3
- package/esm2022/src/render3/component_ref.mjs +24 -13
- package/esm2022/src/render3/debug/injector_profiler.mjs +1 -1
- package/esm2022/src/render3/definition.mjs +27 -68
- package/esm2022/src/render3/errors_di.mjs +4 -3
- package/esm2022/src/render3/features/host_directives_feature.mjs +2 -3
- package/esm2022/src/render3/features/inherit_definition_feature.mjs +31 -9
- package/esm2022/src/render3/features/input_transforms_feature.mjs +4 -5
- package/esm2022/src/render3/features/ng_onchanges_feature.mjs +4 -3
- package/esm2022/src/render3/instructions/advance.mjs +2 -2
- package/esm2022/src/render3/instructions/change_detection.mjs +1 -6
- package/esm2022/src/render3/instructions/control_flow.mjs +5 -3
- package/esm2022/src/render3/instructions/listener.mjs +1 -1
- package/esm2022/src/render3/instructions/mark_view_dirty.mjs +4 -3
- package/esm2022/src/render3/instructions/shared.mjs +63 -59
- package/esm2022/src/render3/instructions/write_to_directive_input.mjs +43 -0
- package/esm2022/src/render3/interfaces/container.mjs +1 -6
- package/esm2022/src/render3/interfaces/definition.mjs +8 -2
- package/esm2022/src/render3/interfaces/node.mjs +1 -1
- package/esm2022/src/render3/interfaces/view.mjs +1 -1
- package/esm2022/src/render3/jit/environment.mjs +3 -1
- package/esm2022/src/render3/node_manipulation.mjs +8 -8
- package/esm2022/src/render3/reactivity/effect.mjs +8 -6
- package/esm2022/src/render3/reactivity/signal.mjs +1 -1
- package/esm2022/src/render3/styling/style_binding_list.mjs +4 -4
- package/esm2022/src/render3/util/discovery_utils.mjs +37 -5
- package/esm2022/src/render3/util/global_utils.mjs +28 -28
- package/esm2022/src/render3/util/injector_discovery_utils.mjs +1 -1
- package/esm2022/src/render3/util/injector_utils.mjs +6 -5
- package/esm2022/src/render3/util/view_traversal_utils.mjs +3 -12
- package/esm2022/src/render3/util/view_utils.mjs +36 -19
- package/esm2022/src/render3/view_ref.mjs +2 -1
- package/esm2022/src/testability/testability.mjs +3 -15
- package/esm2022/src/util/empty.mjs +1 -1
- package/esm2022/src/version.mjs +6 -5
- package/esm2022/src/zone/ng_zone.mjs +1 -61
- package/esm2022/testing/src/component_fixture.mjs +62 -58
- package/esm2022/testing/src/logger.mjs +3 -3
- package/fesm2022/core.mjs +699 -542
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/signals.mjs +2 -10
- package/fesm2022/primitives/signals.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/testing.mjs +62 -58
- package/fesm2022/testing.mjs.map +1 -1
- package/index.d.ts +677 -252
- package/package.json +1 -1
- package/primitives/signals/index.d.ts +3 -4
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/migrations/block-template-entities/bundle.js +497 -392
- package/schematics/migrations/block-template-entities/bundle.js.map +4 -4
- package/schematics/ng-generate/control-flow-migration/bundle.js +663 -459
- package/schematics/ng-generate/control-flow-migration/bundle.js.map +4 -4
- package/schematics/ng-generate/standalone-migration/bundle.js +816 -616
- package/schematics/ng-generate/standalone-migration/bundle.js.map +4 -4
- package/testing/index.d.ts +6 -2
- package/esm2022/src/change_detection/scheduling.mjs +0 -103
- package/esm2022/src/initial_render_pending_tasks.mjs +0 -49
package/fesm2022/core.mjs
CHANGED
|
@@ -1,20 +1,118 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v17.1.0-
|
|
2
|
+
* @license Angular v17.1.0-rc.0
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import { Subject, Subscription,
|
|
9
|
-
import {
|
|
7
|
+
import { SIGNAL_NODE as SIGNAL_NODE$1, signalSetFn as signalSetFn$1, producerAccessed as producerAccessed$1, SIGNAL as SIGNAL$1, setActiveConsumer as setActiveConsumer$1, consumerDestroy as consumerDestroy$1, createComputed as createComputed$1, createSignal as createSignal$1, signalUpdateFn as signalUpdateFn$1, REACTIVE_NODE as REACTIVE_NODE$1, consumerBeforeComputation as consumerBeforeComputation$1, consumerAfterComputation as consumerAfterComputation$1, consumerPollProducersForChange as consumerPollProducersForChange$1, getActiveConsumer as getActiveConsumer$1, createWatch as createWatch$1, setThrowInvalidWriteToSignalError as setThrowInvalidWriteToSignalError$1 } from '@angular/core/primitives/signals';
|
|
8
|
+
import { Subject, Subscription, BehaviorSubject } from 'rxjs';
|
|
9
|
+
import { map, first } from 'rxjs/operators';
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Base URL for the error details page.
|
|
13
|
+
*
|
|
14
|
+
* Keep this constant in sync across:
|
|
15
|
+
* - packages/compiler-cli/src/ngtsc/diagnostics/src/error_details_base_url.ts
|
|
16
|
+
* - packages/core/src/error_details_base_url.ts
|
|
17
|
+
*/
|
|
18
|
+
const ERROR_DETAILS_PAGE_BASE_URL = 'https://angular.io/errors';
|
|
19
|
+
/**
|
|
20
|
+
* URL for the XSS security documentation.
|
|
21
|
+
*/
|
|
22
|
+
const XSS_SECURITY_URL = 'https://g.co/ng/security#xss';
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Class that represents a runtime error.
|
|
26
|
+
* Formats and outputs the error message in a consistent way.
|
|
27
|
+
*
|
|
28
|
+
* Example:
|
|
29
|
+
* ```
|
|
30
|
+
* throw new RuntimeError(
|
|
31
|
+
* RuntimeErrorCode.INJECTOR_ALREADY_DESTROYED,
|
|
32
|
+
* ngDevMode && 'Injector has already been destroyed.');
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* Note: the `message` argument contains a descriptive error message as a string in development
|
|
36
|
+
* mode (when the `ngDevMode` is defined). In production mode (after tree-shaking pass), the
|
|
37
|
+
* `message` argument becomes `false`, thus we account for it in the typings and the runtime
|
|
38
|
+
* logic.
|
|
39
|
+
*/
|
|
40
|
+
class RuntimeError extends Error {
|
|
41
|
+
constructor(code, message) {
|
|
42
|
+
super(formatRuntimeError(code, message));
|
|
43
|
+
this.code = code;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Called to format a runtime error.
|
|
48
|
+
* See additional info on the `message` argument type in the `RuntimeError` class description.
|
|
49
|
+
*/
|
|
50
|
+
function formatRuntimeError(code, message) {
|
|
51
|
+
// Error code might be a negative number, which is a special marker that instructs the logic to
|
|
52
|
+
// generate a link to the error details page on angular.io.
|
|
53
|
+
// We also prepend `0` to non-compile-time errors.
|
|
54
|
+
const fullCode = `NG0${Math.abs(code)}`;
|
|
55
|
+
let errorMessage = `${fullCode}${message ? ': ' + message : ''}`;
|
|
56
|
+
if (ngDevMode && code < 0) {
|
|
57
|
+
const addPeriodSeparator = !errorMessage.match(/[.,;!?\n]$/);
|
|
58
|
+
const separator = addPeriodSeparator ? '.' : '';
|
|
59
|
+
errorMessage =
|
|
60
|
+
`${errorMessage}${separator} Find more at ${ERROR_DETAILS_PAGE_BASE_URL}/${fullCode}`;
|
|
61
|
+
}
|
|
62
|
+
return errorMessage;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const REQUIRED_UNSET_VALUE = /* @__PURE__ */ Symbol('InputSignalNode#UNSET');
|
|
66
|
+
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
67
|
+
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
68
|
+
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
69
|
+
const INPUT_SIGNAL_NODE = /* @__PURE__ */ (() => {
|
|
70
|
+
return {
|
|
71
|
+
...SIGNAL_NODE$1,
|
|
72
|
+
transformFn: undefined,
|
|
73
|
+
applyValueToInputSignal(node, value) {
|
|
74
|
+
signalSetFn$1(node, value);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
})();
|
|
78
|
+
|
|
79
|
+
const ɵINPUT_SIGNAL_BRAND_READ_TYPE = /* @__PURE__ */ Symbol();
|
|
80
|
+
const ɵINPUT_SIGNAL_BRAND_WRITE_TYPE = /* @__PURE__ */ Symbol();
|
|
81
|
+
/**
|
|
82
|
+
* Creates an input signal.
|
|
83
|
+
*
|
|
84
|
+
* @param initialValue The initial value.
|
|
85
|
+
* Can be set to {@link REQUIRED_UNSET_VALUE} for required inputs.
|
|
86
|
+
* @param options Additional options for the input. e.g. a transform, or an alias.
|
|
87
|
+
*/
|
|
88
|
+
function createInputSignal(initialValue, options) {
|
|
89
|
+
const node = Object.create(INPUT_SIGNAL_NODE);
|
|
90
|
+
node.value = initialValue;
|
|
91
|
+
// Perf note: Always set `transformFn` here to ensure that `node` always
|
|
92
|
+
// has the same v8 class shape, allowing monomorphic reads on input signals.
|
|
93
|
+
node.transformFn = options?.transform;
|
|
94
|
+
function inputValueFn() {
|
|
95
|
+
// Record that someone looked at this signal.
|
|
96
|
+
producerAccessed$1(node);
|
|
97
|
+
if (node.value === REQUIRED_UNSET_VALUE) {
|
|
98
|
+
throw new RuntimeError(-950 /* RuntimeErrorCode.REQUIRED_INPUT_NO_VALUE */, ngDevMode && 'Input is required but no value is available yet.');
|
|
99
|
+
}
|
|
100
|
+
return node.value;
|
|
101
|
+
}
|
|
102
|
+
inputValueFn[SIGNAL$1] = node;
|
|
103
|
+
return inputValueFn;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function inputFunction(initialValue, opts) {
|
|
107
|
+
return createInputSignal(initialValue, opts);
|
|
13
108
|
}
|
|
14
|
-
function inputRequiredFunction(
|
|
15
|
-
|
|
109
|
+
function inputRequiredFunction(opts) {
|
|
110
|
+
return createInputSignal(REQUIRED_UNSET_VALUE, opts);
|
|
16
111
|
}
|
|
17
112
|
/**
|
|
113
|
+
* The `input` function allows declaration of inputs in directives and
|
|
114
|
+
* components.
|
|
115
|
+
*
|
|
18
116
|
* Initializes an input with an initial value. If no explicit value
|
|
19
117
|
* is specified, Angular will use `undefined`.
|
|
20
118
|
*
|
|
@@ -33,6 +131,8 @@ function inputRequiredFunction(_opts) {
|
|
|
33
131
|
* age = input(0); // number
|
|
34
132
|
* }
|
|
35
133
|
* ```
|
|
134
|
+
*
|
|
135
|
+
* @developerPreview
|
|
36
136
|
*/
|
|
37
137
|
const input = (() => {
|
|
38
138
|
// Note: This may be considered a side-effect, but nothing will depend on
|
|
@@ -42,11 +142,6 @@ const input = (() => {
|
|
|
42
142
|
return inputFunction;
|
|
43
143
|
})();
|
|
44
144
|
|
|
45
|
-
const ɵINPUT_SIGNAL_BRAND_READ_TYPE = /* @__PURE__ */ Symbol();
|
|
46
|
-
const ɵINPUT_SIGNAL_BRAND_WRITE_TYPE = /* @__PURE__ */ Symbol();
|
|
47
|
-
|
|
48
|
-
// Note: `input` is exported in `core.ts` due to:
|
|
49
|
-
|
|
50
145
|
function getClosureSafeProperty(objWithPropertyToExtract) {
|
|
51
146
|
for (let key in objWithPropertyToExtract) {
|
|
52
147
|
if (objWithPropertyToExtract[key] === getClosureSafeProperty) {
|
|
@@ -194,60 +289,6 @@ function isEnvironmentProviders(value) {
|
|
|
194
289
|
return value && !!value.ɵproviders;
|
|
195
290
|
}
|
|
196
291
|
|
|
197
|
-
/**
|
|
198
|
-
* Base URL for the error details page.
|
|
199
|
-
*
|
|
200
|
-
* Keep this constant in sync across:
|
|
201
|
-
* - packages/compiler-cli/src/ngtsc/diagnostics/src/error_details_base_url.ts
|
|
202
|
-
* - packages/core/src/error_details_base_url.ts
|
|
203
|
-
*/
|
|
204
|
-
const ERROR_DETAILS_PAGE_BASE_URL = 'https://angular.io/errors';
|
|
205
|
-
/**
|
|
206
|
-
* URL for the XSS security documentation.
|
|
207
|
-
*/
|
|
208
|
-
const XSS_SECURITY_URL = 'https://g.co/ng/security#xss';
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Class that represents a runtime error.
|
|
212
|
-
* Formats and outputs the error message in a consistent way.
|
|
213
|
-
*
|
|
214
|
-
* Example:
|
|
215
|
-
* ```
|
|
216
|
-
* throw new RuntimeError(
|
|
217
|
-
* RuntimeErrorCode.INJECTOR_ALREADY_DESTROYED,
|
|
218
|
-
* ngDevMode && 'Injector has already been destroyed.');
|
|
219
|
-
* ```
|
|
220
|
-
*
|
|
221
|
-
* Note: the `message` argument contains a descriptive error message as a string in development
|
|
222
|
-
* mode (when the `ngDevMode` is defined). In production mode (after tree-shaking pass), the
|
|
223
|
-
* `message` argument becomes `false`, thus we account for it in the typings and the runtime
|
|
224
|
-
* logic.
|
|
225
|
-
*/
|
|
226
|
-
class RuntimeError extends Error {
|
|
227
|
-
constructor(code, message) {
|
|
228
|
-
super(formatRuntimeError(code, message));
|
|
229
|
-
this.code = code;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Called to format a runtime error.
|
|
234
|
-
* See additional info on the `message` argument type in the `RuntimeError` class description.
|
|
235
|
-
*/
|
|
236
|
-
function formatRuntimeError(code, message) {
|
|
237
|
-
// Error code might be a negative number, which is a special marker that instructs the logic to
|
|
238
|
-
// generate a link to the error details page on angular.io.
|
|
239
|
-
// We also prepend `0` to non-compile-time errors.
|
|
240
|
-
const fullCode = `NG0${Math.abs(code)}`;
|
|
241
|
-
let errorMessage = `${fullCode}${message ? ': ' + message : ''}`;
|
|
242
|
-
if (ngDevMode && code < 0) {
|
|
243
|
-
const addPeriodSeparator = !errorMessage.match(/[.,;!?\n]$/);
|
|
244
|
-
const separator = addPeriodSeparator ? '.' : '';
|
|
245
|
-
errorMessage =
|
|
246
|
-
`${errorMessage}${separator} Find more at ${ERROR_DETAILS_PAGE_BASE_URL}/${fullCode}`;
|
|
247
|
-
}
|
|
248
|
-
return errorMessage;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
292
|
const NG_COMP_DEF = getClosureSafeProperty({ ɵcmp: getClosureSafeProperty });
|
|
252
293
|
const NG_DIR_DEF = getClosureSafeProperty({ ɵdir: getClosureSafeProperty });
|
|
253
294
|
const NG_PIPE_DEF = getClosureSafeProperty({ ɵpipe: getClosureSafeProperty });
|
|
@@ -352,8 +393,9 @@ function throwInvalidProviderError(ngModuleType, providers, provider) {
|
|
|
352
393
|
}
|
|
353
394
|
/** Throws an error when a token is not found in DI. */
|
|
354
395
|
function throwProviderNotFoundError(token, injectorName) {
|
|
355
|
-
const
|
|
356
|
-
|
|
396
|
+
const errorMessage = ngDevMode &&
|
|
397
|
+
`No provider for ${stringifyForError(token)} found${injectorName ? ` in ${injectorName}` : ''}`;
|
|
398
|
+
throw new RuntimeError(-201 /* RuntimeErrorCode.PROVIDER_NOT_FOUND */, errorMessage);
|
|
357
399
|
}
|
|
358
400
|
|
|
359
401
|
// The functions in this file verify that the assumptions we are making
|
|
@@ -624,7 +666,7 @@ function injectRootLimpMode(token, notFoundValue, flags) {
|
|
|
624
666
|
return null;
|
|
625
667
|
if (notFoundValue !== undefined)
|
|
626
668
|
return notFoundValue;
|
|
627
|
-
throwProviderNotFoundError(
|
|
669
|
+
throwProviderNotFoundError(token, 'Injector');
|
|
628
670
|
}
|
|
629
671
|
/**
|
|
630
672
|
* Assert that `_injectImplementation` is not `fn`.
|
|
@@ -1234,6 +1276,14 @@ if ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) {
|
|
|
1234
1276
|
Object.freeze(EMPTY_ARRAY);
|
|
1235
1277
|
}
|
|
1236
1278
|
|
|
1279
|
+
/** Flags describing an input for a directive. */
|
|
1280
|
+
var InputFlags;
|
|
1281
|
+
(function (InputFlags) {
|
|
1282
|
+
InputFlags[InputFlags["None"] = 0] = "None";
|
|
1283
|
+
InputFlags[InputFlags["SignalBased"] = 1] = "SignalBased";
|
|
1284
|
+
InputFlags[InputFlags["HasDecoratorInputTransform"] = 2] = "HasDecoratorInputTransform";
|
|
1285
|
+
})(InputFlags || (InputFlags = {}));
|
|
1286
|
+
|
|
1237
1287
|
/**
|
|
1238
1288
|
* Returns an index of `classToSearch` in `className` taking token boundaries into account.
|
|
1239
1289
|
*
|
|
@@ -1955,76 +2005,34 @@ function ɵɵdefineNgModule(def) {
|
|
|
1955
2005
|
return res;
|
|
1956
2006
|
});
|
|
1957
2007
|
}
|
|
1958
|
-
|
|
1959
|
-
* Inverts an inputs or outputs lookup such that the keys, which were the
|
|
1960
|
-
* minified keys, are part of the values, and the values are parsed so that
|
|
1961
|
-
* the publicName of the property is the new key
|
|
1962
|
-
*
|
|
1963
|
-
* e.g. for
|
|
1964
|
-
*
|
|
1965
|
-
* ```
|
|
1966
|
-
* class Comp {
|
|
1967
|
-
* @Input()
|
|
1968
|
-
* propName1: string;
|
|
1969
|
-
*
|
|
1970
|
-
* @Input('publicName2')
|
|
1971
|
-
* declaredPropName2: number;
|
|
1972
|
-
* }
|
|
1973
|
-
* ```
|
|
1974
|
-
*
|
|
1975
|
-
* will be serialized as
|
|
1976
|
-
*
|
|
1977
|
-
* ```
|
|
1978
|
-
* {
|
|
1979
|
-
* propName1: 'propName1',
|
|
1980
|
-
* declaredPropName2: ['publicName2', 'declaredPropName2'],
|
|
1981
|
-
* }
|
|
1982
|
-
* ```
|
|
1983
|
-
*
|
|
1984
|
-
* which is than translated by the minifier as:
|
|
1985
|
-
*
|
|
1986
|
-
* ```
|
|
1987
|
-
* {
|
|
1988
|
-
* minifiedPropName1: 'propName1',
|
|
1989
|
-
* minifiedPropName2: ['publicName2', 'declaredPropName2'],
|
|
1990
|
-
* }
|
|
1991
|
-
* ```
|
|
1992
|
-
*
|
|
1993
|
-
* becomes: (public name => minifiedName)
|
|
1994
|
-
*
|
|
1995
|
-
* ```
|
|
1996
|
-
* {
|
|
1997
|
-
* 'propName1': 'minifiedPropName1',
|
|
1998
|
-
* 'publicName2': 'minifiedPropName2',
|
|
1999
|
-
* }
|
|
2000
|
-
* ```
|
|
2001
|
-
*
|
|
2002
|
-
* Optionally the function can take `secondary` which will result in: (public name => declared name)
|
|
2003
|
-
*
|
|
2004
|
-
* ```
|
|
2005
|
-
* {
|
|
2006
|
-
* 'propName1': 'propName1',
|
|
2007
|
-
* 'publicName2': 'declaredPropName2',
|
|
2008
|
-
* }
|
|
2009
|
-
* ```
|
|
2010
|
-
*
|
|
2011
|
-
|
|
2012
|
-
*/
|
|
2013
|
-
function invertObject(obj, secondary) {
|
|
2008
|
+
function parseAndConvertBindingsForDefinition(obj, declaredInputs) {
|
|
2014
2009
|
if (obj == null)
|
|
2015
2010
|
return EMPTY_OBJ;
|
|
2016
2011
|
const newLookup = {};
|
|
2017
2012
|
for (const minifiedKey in obj) {
|
|
2018
2013
|
if (obj.hasOwnProperty(minifiedKey)) {
|
|
2019
|
-
|
|
2020
|
-
let
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2014
|
+
const value = obj[minifiedKey];
|
|
2015
|
+
let publicName;
|
|
2016
|
+
let declaredName;
|
|
2017
|
+
let inputFlags = InputFlags.None;
|
|
2018
|
+
if (Array.isArray(value)) {
|
|
2019
|
+
inputFlags = value[0];
|
|
2020
|
+
publicName = value[1];
|
|
2021
|
+
declaredName = value[2] ?? publicName; // declared name might not be set to save bytes.
|
|
2024
2022
|
}
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2023
|
+
else {
|
|
2024
|
+
publicName = value;
|
|
2025
|
+
declaredName = value;
|
|
2026
|
+
}
|
|
2027
|
+
// For inputs, capture the declared name, or if some flags are set.
|
|
2028
|
+
if (declaredInputs) {
|
|
2029
|
+
// Perf note: An array is only allocated for the input if there are flags.
|
|
2030
|
+
newLookup[publicName] =
|
|
2031
|
+
inputFlags !== InputFlags.None ? [minifiedKey, inputFlags] : minifiedKey;
|
|
2032
|
+
declaredInputs[publicName] = declaredName;
|
|
2033
|
+
}
|
|
2034
|
+
else {
|
|
2035
|
+
newLookup[publicName] = minifiedKey;
|
|
2028
2036
|
}
|
|
2029
2037
|
}
|
|
2030
2038
|
}
|
|
@@ -2122,7 +2130,7 @@ function getNgDirectiveDef(directiveDefinition) {
|
|
|
2122
2130
|
hostVars: directiveDefinition.hostVars || 0,
|
|
2123
2131
|
hostAttrs: directiveDefinition.hostAttrs || null,
|
|
2124
2132
|
contentQueries: directiveDefinition.contentQueries || null,
|
|
2125
|
-
declaredInputs,
|
|
2133
|
+
declaredInputs: declaredInputs,
|
|
2126
2134
|
inputTransforms: null,
|
|
2127
2135
|
inputConfig: directiveDefinition.inputs || EMPTY_OBJ,
|
|
2128
2136
|
exportAs: directiveDefinition.exportAs || null,
|
|
@@ -2134,8 +2142,8 @@ function getNgDirectiveDef(directiveDefinition) {
|
|
|
2134
2142
|
setInput: null,
|
|
2135
2143
|
findHostDirectiveDefs: null,
|
|
2136
2144
|
hostDirectives: null,
|
|
2137
|
-
inputs:
|
|
2138
|
-
outputs:
|
|
2145
|
+
inputs: parseAndConvertBindingsForDefinition(directiveDefinition.inputs, declaredInputs),
|
|
2146
|
+
outputs: parseAndConvertBindingsForDefinition(directiveDefinition.outputs),
|
|
2139
2147
|
debugInfo: null,
|
|
2140
2148
|
};
|
|
2141
2149
|
}
|
|
@@ -2286,11 +2294,6 @@ var LContainerFlags;
|
|
|
2286
2294
|
* This flag, once set, is never unset for the `LContainer`.
|
|
2287
2295
|
*/
|
|
2288
2296
|
LContainerFlags[LContainerFlags["HasTransplantedViews"] = 2] = "HasTransplantedViews";
|
|
2289
|
-
/**
|
|
2290
|
-
* Indicates that this LContainer has a view underneath it that needs to be refreshed during
|
|
2291
|
-
* change detection.
|
|
2292
|
-
*/
|
|
2293
|
-
LContainerFlags[LContainerFlags["HasChildViewsToRefresh"] = 4] = "HasChildViewsToRefresh";
|
|
2294
2297
|
})(LContainerFlags || (LContainerFlags = {}));
|
|
2295
2298
|
|
|
2296
2299
|
/**
|
|
@@ -2488,6 +2491,15 @@ class SimpleChange {
|
|
|
2488
2491
|
}
|
|
2489
2492
|
}
|
|
2490
2493
|
|
|
2494
|
+
function applyValueToInputField(instance, inputSignalNode, privateName, value) {
|
|
2495
|
+
if (inputSignalNode !== null) {
|
|
2496
|
+
inputSignalNode.applyValueToInputSignal(inputSignalNode, value);
|
|
2497
|
+
}
|
|
2498
|
+
else {
|
|
2499
|
+
instance[privateName] = value;
|
|
2500
|
+
}
|
|
2501
|
+
}
|
|
2502
|
+
|
|
2491
2503
|
/**
|
|
2492
2504
|
* The NgOnChangesFeature decorates a component with support for the ngOnChanges
|
|
2493
2505
|
* lifecycle hook, so it should be included in any component that implements
|
|
@@ -2553,7 +2565,7 @@ function rememberChangeHistoryAndInvokeOnChangesHook() {
|
|
|
2553
2565
|
this.ngOnChanges(current);
|
|
2554
2566
|
}
|
|
2555
2567
|
}
|
|
2556
|
-
function ngOnChangesSetInput(instance, value, publicName, privateName) {
|
|
2568
|
+
function ngOnChangesSetInput(instance, inputSignalNode, value, publicName, privateName) {
|
|
2557
2569
|
const declaredName = this.declaredInputs[publicName];
|
|
2558
2570
|
ngDevMode && assertString(declaredName, 'Name of input in ngOnChanges has to be a string');
|
|
2559
2571
|
const simpleChangesStore = getSimpleChangesStore(instance) ||
|
|
@@ -2562,7 +2574,7 @@ function ngOnChangesSetInput(instance, value, publicName, privateName) {
|
|
|
2562
2574
|
const previous = simpleChangesStore.previous;
|
|
2563
2575
|
const previousChange = previous[declaredName];
|
|
2564
2576
|
current[declaredName] = new SimpleChange(previousChange && previousChange.currentValue, value, previous === EMPTY_OBJ);
|
|
2565
|
-
instance
|
|
2577
|
+
applyValueToInputField(instance, inputSignalNode, privateName, value);
|
|
2566
2578
|
}
|
|
2567
2579
|
const SIMPLE_CHANGES_STORE = '__ngSimpleChanges__';
|
|
2568
2580
|
function getSimpleChangesStore(instance) {
|
|
@@ -2604,6 +2616,15 @@ const profiler = function (event, instance, hookOrListener) {
|
|
|
2604
2616
|
const SVG_NAMESPACE = 'svg';
|
|
2605
2617
|
const MATH_ML_NAMESPACE = 'math';
|
|
2606
2618
|
|
|
2619
|
+
// TODO(atscott): flip default internally ASAP and externally for v18 (#52928)
|
|
2620
|
+
let _ensureDirtyViewsAreAlwaysReachable = false;
|
|
2621
|
+
function getEnsureDirtyViewsAreAlwaysReachable() {
|
|
2622
|
+
return _ensureDirtyViewsAreAlwaysReachable;
|
|
2623
|
+
}
|
|
2624
|
+
function setEnsureDirtyViewsAreAlwaysReachable(v) {
|
|
2625
|
+
_ensureDirtyViewsAreAlwaysReachable = v;
|
|
2626
|
+
}
|
|
2627
|
+
|
|
2607
2628
|
/**
|
|
2608
2629
|
* For efficiency reasons we often put several different data types (`RNode`, `LView`, `LContainer`)
|
|
2609
2630
|
* in same location in `LView`. This is because we don't want to pre-allocate space for it
|
|
@@ -2770,10 +2791,21 @@ function requiresRefreshOrTraversal(lView) {
|
|
|
2770
2791
|
* parents above.
|
|
2771
2792
|
*/
|
|
2772
2793
|
function updateAncestorTraversalFlagsOnAttach(lView) {
|
|
2773
|
-
|
|
2774
|
-
|
|
2794
|
+
// TODO(atscott): Simplify if...else cases once getEnsureDirtyViewsAreAlwaysReachable is always
|
|
2795
|
+
// `true`. When we attach a view that's marked `Dirty`, we should ensure that it is reached during
|
|
2796
|
+
// the next CD traversal so we add the `RefreshView` flag and mark ancestors accordingly.
|
|
2797
|
+
if (requiresRefreshOrTraversal(lView)) {
|
|
2798
|
+
markAncestorsForTraversal(lView);
|
|
2799
|
+
}
|
|
2800
|
+
else if (lView[FLAGS] & 64 /* LViewFlags.Dirty */) {
|
|
2801
|
+
if (getEnsureDirtyViewsAreAlwaysReachable()) {
|
|
2802
|
+
lView[FLAGS] |= 1024 /* LViewFlags.RefreshView */;
|
|
2803
|
+
markAncestorsForTraversal(lView);
|
|
2804
|
+
}
|
|
2805
|
+
else {
|
|
2806
|
+
lView[ENVIRONMENT].changeDetectionScheduler?.notify();
|
|
2807
|
+
}
|
|
2775
2808
|
}
|
|
2776
|
-
markAncestorsForTraversal(lView);
|
|
2777
2809
|
}
|
|
2778
2810
|
/**
|
|
2779
2811
|
* Ensures views above the given `lView` are traversed during change detection even when they are
|
|
@@ -2783,24 +2815,19 @@ function updateAncestorTraversalFlagsOnAttach(lView) {
|
|
|
2783
2815
|
* flag is already `true` or the `lView` is detached.
|
|
2784
2816
|
*/
|
|
2785
2817
|
function markAncestorsForTraversal(lView) {
|
|
2786
|
-
|
|
2818
|
+
lView[ENVIRONMENT].changeDetectionScheduler?.notify();
|
|
2819
|
+
let parent = getLViewParent(lView);
|
|
2787
2820
|
while (parent !== null) {
|
|
2788
2821
|
// We stop adding markers to the ancestors once we reach one that already has the marker. This
|
|
2789
2822
|
// is to avoid needlessly traversing all the way to the root when the marker already exists.
|
|
2790
|
-
if (
|
|
2791
|
-
(isLView(parent) && parent[FLAGS] & 8192 /* LViewFlags.HasChildViewsToRefresh */))) {
|
|
2823
|
+
if (parent[FLAGS] & 8192 /* LViewFlags.HasChildViewsToRefresh */) {
|
|
2792
2824
|
break;
|
|
2793
2825
|
}
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
|
|
2797
|
-
else {
|
|
2798
|
-
parent[FLAGS] |= 8192 /* LViewFlags.HasChildViewsToRefresh */;
|
|
2799
|
-
if (!viewAttachedToChangeDetector(parent)) {
|
|
2800
|
-
break;
|
|
2801
|
-
}
|
|
2826
|
+
parent[FLAGS] |= 8192 /* LViewFlags.HasChildViewsToRefresh */;
|
|
2827
|
+
if (!viewAttachedToChangeDetector(parent)) {
|
|
2828
|
+
break;
|
|
2802
2829
|
}
|
|
2803
|
-
parent = parent
|
|
2830
|
+
parent = getLViewParent(parent);
|
|
2804
2831
|
}
|
|
2805
2832
|
}
|
|
2806
2833
|
/**
|
|
@@ -2826,6 +2853,16 @@ function removeLViewOnDestroy(lView, onDestroyCallback) {
|
|
|
2826
2853
|
lView[ON_DESTROY_HOOKS].splice(destroyCBIdx, 1);
|
|
2827
2854
|
}
|
|
2828
2855
|
}
|
|
2856
|
+
/**
|
|
2857
|
+
* Gets the parent LView of the passed LView, if the PARENT is an LContainer, will get the parent of
|
|
2858
|
+
* that LContainer, which is an LView
|
|
2859
|
+
* @param lView the lView whose parent to get
|
|
2860
|
+
*/
|
|
2861
|
+
function getLViewParent(lView) {
|
|
2862
|
+
ngDevMode && assertLView(lView);
|
|
2863
|
+
const parent = lView[PARENT];
|
|
2864
|
+
return isLContainer(parent) ? parent[PARENT] : parent;
|
|
2865
|
+
}
|
|
2829
2866
|
|
|
2830
2867
|
const instructionState = {
|
|
2831
2868
|
lFrame: createLFrame(null),
|
|
@@ -3818,11 +3855,12 @@ function hasParentInjector(parentLocation) {
|
|
|
3818
3855
|
return parentLocation !== NO_PARENT_INJECTOR;
|
|
3819
3856
|
}
|
|
3820
3857
|
function getParentInjectorIndex(parentLocation) {
|
|
3821
|
-
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3858
|
+
if (ngDevMode) {
|
|
3859
|
+
assertNumber(parentLocation, 'Number expected');
|
|
3860
|
+
assertNotEqual(parentLocation, -1, 'Not a valid state.');
|
|
3861
|
+
const parentInjectorIndex = parentLocation & 32767 /* RelativeInjectorLocationFlags.InjectorIndexMask */;
|
|
3825
3862
|
assertGreaterThan(parentInjectorIndex, HEADER_OFFSET, 'Parent injector must be pointing past HEADER_OFFSET.');
|
|
3863
|
+
}
|
|
3826
3864
|
return parentLocation & 32767 /* RelativeInjectorLocationFlags.InjectorIndexMask */;
|
|
3827
3865
|
}
|
|
3828
3866
|
function getParentInjectorViewOffset(parentLocation) {
|
|
@@ -6189,9 +6227,11 @@ class R3Injector extends EnvironmentInjector {
|
|
|
6189
6227
|
multiRecord.multi.push(provider);
|
|
6190
6228
|
}
|
|
6191
6229
|
else {
|
|
6192
|
-
|
|
6193
|
-
|
|
6194
|
-
|
|
6230
|
+
if (ngDevMode) {
|
|
6231
|
+
const existing = this.records.get(token);
|
|
6232
|
+
if (existing && existing.multi !== undefined) {
|
|
6233
|
+
throwMixedMultiProviderError();
|
|
6234
|
+
}
|
|
6195
6235
|
}
|
|
6196
6236
|
}
|
|
6197
6237
|
this.records.set(token, record);
|
|
@@ -6259,8 +6299,8 @@ function getUndecoratedInjectableFactory(token) {
|
|
|
6259
6299
|
// If the token has parameters then it has dependencies that we cannot resolve implicitly.
|
|
6260
6300
|
const paramLength = token.length;
|
|
6261
6301
|
if (paramLength > 0) {
|
|
6262
|
-
|
|
6263
|
-
|
|
6302
|
+
throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode &&
|
|
6303
|
+
`Can't resolve all parameters for ${stringify(token)}: (${newArray(paramLength, '?').join(', ')}).`);
|
|
6264
6304
|
}
|
|
6265
6305
|
// The constructor function appears to have no parameters.
|
|
6266
6306
|
// This might be because it inherits from a super-class. In which case, use an injectable
|
|
@@ -7954,63 +7994,6 @@ function ensureIcuContainerVisitorLoaded(loader) {
|
|
|
7954
7994
|
}
|
|
7955
7995
|
}
|
|
7956
7996
|
|
|
7957
|
-
/**
|
|
7958
|
-
* Gets the parent LView of the passed LView, if the PARENT is an LContainer, will get the parent of
|
|
7959
|
-
* that LContainer, which is an LView
|
|
7960
|
-
* @param lView the lView whose parent to get
|
|
7961
|
-
*/
|
|
7962
|
-
function getLViewParent(lView) {
|
|
7963
|
-
ngDevMode && assertLView(lView);
|
|
7964
|
-
const parent = lView[PARENT];
|
|
7965
|
-
return isLContainer(parent) ? parent[PARENT] : parent;
|
|
7966
|
-
}
|
|
7967
|
-
/**
|
|
7968
|
-
* Retrieve the root view from any component or `LView` by walking the parent `LView` until
|
|
7969
|
-
* reaching the root `LView`.
|
|
7970
|
-
*
|
|
7971
|
-
* @param componentOrLView any component or `LView`
|
|
7972
|
-
*/
|
|
7973
|
-
function getRootView(componentOrLView) {
|
|
7974
|
-
ngDevMode && assertDefined(componentOrLView, 'component');
|
|
7975
|
-
let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);
|
|
7976
|
-
while (lView && !(lView[FLAGS] & 512 /* LViewFlags.IsRoot */)) {
|
|
7977
|
-
lView = getLViewParent(lView);
|
|
7978
|
-
}
|
|
7979
|
-
ngDevMode && assertLView(lView);
|
|
7980
|
-
return lView;
|
|
7981
|
-
}
|
|
7982
|
-
/**
|
|
7983
|
-
* Returns the context information associated with the application where the target is situated. It
|
|
7984
|
-
* does this by walking the parent views until it gets to the root view, then getting the context
|
|
7985
|
-
* off of that.
|
|
7986
|
-
*
|
|
7987
|
-
* @param viewOrComponent the `LView` or component to get the root context for.
|
|
7988
|
-
*/
|
|
7989
|
-
function getRootContext(viewOrComponent) {
|
|
7990
|
-
const rootView = getRootView(viewOrComponent);
|
|
7991
|
-
ngDevMode &&
|
|
7992
|
-
assertDefined(rootView[CONTEXT], 'Root view has no context. Perhaps it is disconnected?');
|
|
7993
|
-
return rootView[CONTEXT];
|
|
7994
|
-
}
|
|
7995
|
-
/**
|
|
7996
|
-
* Gets the first `LContainer` in the LView or `null` if none exists.
|
|
7997
|
-
*/
|
|
7998
|
-
function getFirstLContainer(lView) {
|
|
7999
|
-
return getNearestLContainer(lView[CHILD_HEAD]);
|
|
8000
|
-
}
|
|
8001
|
-
/**
|
|
8002
|
-
* Gets the next `LContainer` that is a sibling of the given container.
|
|
8003
|
-
*/
|
|
8004
|
-
function getNextLContainer(container) {
|
|
8005
|
-
return getNearestLContainer(container[NEXT]);
|
|
8006
|
-
}
|
|
8007
|
-
function getNearestLContainer(viewOrContainer) {
|
|
8008
|
-
while (viewOrContainer !== null && !isLContainer(viewOrContainer)) {
|
|
8009
|
-
viewOrContainer = viewOrContainer[NEXT];
|
|
8010
|
-
}
|
|
8011
|
-
return viewOrContainer;
|
|
8012
|
-
}
|
|
8013
|
-
|
|
8014
7997
|
/**
|
|
8015
7998
|
* NOTE: for performance reasons, the possible actions are inlined within the function instead of
|
|
8016
7999
|
* being passed as an argument.
|
|
@@ -8093,8 +8076,7 @@ function createElementNode(renderer, name, namespace) {
|
|
|
8093
8076
|
* @param lView The view from which elements should be added or removed
|
|
8094
8077
|
*/
|
|
8095
8078
|
function removeViewFromDOM(tView, lView) {
|
|
8096
|
-
|
|
8097
|
-
applyView(tView, lView, renderer, 2 /* WalkTNodeTreeAction.Detach */, null, null);
|
|
8079
|
+
detachViewFromDOM(tView, lView);
|
|
8098
8080
|
lView[HOST] = null;
|
|
8099
8081
|
lView[T_HOST] = null;
|
|
8100
8082
|
}
|
|
@@ -8124,6 +8106,9 @@ function addViewToDOM(tView, parentTNode, renderer, lView, parentNativeNode, bef
|
|
|
8124
8106
|
* @param lView the `LView` to be detached.
|
|
8125
8107
|
*/
|
|
8126
8108
|
function detachViewFromDOM(tView, lView) {
|
|
8109
|
+
// The scheduler must be notified because the animation engine is what actually does the DOM
|
|
8110
|
+
// removal and only runs at the end of change detection.
|
|
8111
|
+
lView[ENVIRONMENT].changeDetectionScheduler?.notify();
|
|
8127
8112
|
applyView(tView, lView, lView[RENDERER], 2 /* WalkTNodeTreeAction.Detach */, null, null);
|
|
8128
8113
|
}
|
|
8129
8114
|
/**
|
|
@@ -8255,8 +8240,7 @@ function detachMovedView(declarationContainer, lView) {
|
|
|
8255
8240
|
assertDefined(declarationContainer[MOVED_VIEWS], 'A projected view should belong to a non-empty projected views collection');
|
|
8256
8241
|
const movedViews = declarationContainer[MOVED_VIEWS];
|
|
8257
8242
|
const declarationViewIndex = movedViews.indexOf(lView);
|
|
8258
|
-
|
|
8259
|
-
ngDevMode && assertLContainer(insertionLContainer);
|
|
8243
|
+
ngDevMode && assertLContainer(lView[PARENT]);
|
|
8260
8244
|
movedViews.splice(declarationViewIndex, 1);
|
|
8261
8245
|
}
|
|
8262
8246
|
/**
|
|
@@ -9880,6 +9864,12 @@ function getSanitizer() {
|
|
|
9880
9864
|
return lView && lView[ENVIRONMENT].sanitizer;
|
|
9881
9865
|
}
|
|
9882
9866
|
|
|
9867
|
+
/**
|
|
9868
|
+
* Injectable that is notified when an `LView` is made aware of changes to application state.
|
|
9869
|
+
*/
|
|
9870
|
+
class ChangeDetectionScheduler {
|
|
9871
|
+
}
|
|
9872
|
+
|
|
9883
9873
|
/**
|
|
9884
9874
|
* Create a `StateKey<T>` that can be used to store value of type T with `TransferState`.
|
|
9885
9875
|
*
|
|
@@ -10060,7 +10050,7 @@ const SSR_CONTENT_INTEGRITY_MARKER = 'nghm';
|
|
|
10060
10050
|
* @param injector Injector that this component has access to.
|
|
10061
10051
|
* @param isRootView Specifies whether we trying to read hydration info for the root view.
|
|
10062
10052
|
*/
|
|
10063
|
-
let _retrieveHydrationInfoImpl = (
|
|
10053
|
+
let _retrieveHydrationInfoImpl = () => null;
|
|
10064
10054
|
function retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {
|
|
10065
10055
|
let nghAttrValue = rNode.getAttribute(NGH_ATTR_NAME);
|
|
10066
10056
|
if (nghAttrValue == null)
|
|
@@ -10450,24 +10440,6 @@ class Sanitizer {
|
|
|
10450
10440
|
}); }
|
|
10451
10441
|
}
|
|
10452
10442
|
|
|
10453
|
-
/**
|
|
10454
|
-
* @description Represents the version of Angular
|
|
10455
|
-
*
|
|
10456
|
-
* @publicApi
|
|
10457
|
-
*/
|
|
10458
|
-
class Version {
|
|
10459
|
-
constructor(full) {
|
|
10460
|
-
this.full = full;
|
|
10461
|
-
this.major = full.split('.')[0];
|
|
10462
|
-
this.minor = full.split('.')[1];
|
|
10463
|
-
this.patch = full.split('.').slice(2).join('.');
|
|
10464
|
-
}
|
|
10465
|
-
}
|
|
10466
|
-
/**
|
|
10467
|
-
* @publicApi
|
|
10468
|
-
*/
|
|
10469
|
-
const VERSION = new Version('17.1.0-next.4');
|
|
10470
|
-
|
|
10471
10443
|
// This default value is when checking the hierarchy for a token.
|
|
10472
10444
|
//
|
|
10473
10445
|
// It means both:
|
|
@@ -11742,6 +11714,53 @@ const REACTIVE_LVIEW_CONSUMER_NODE = {
|
|
|
11742
11714
|
},
|
|
11743
11715
|
};
|
|
11744
11716
|
|
|
11717
|
+
/**
|
|
11718
|
+
* Retrieve the root view from any component or `LView` by walking the parent `LView` until
|
|
11719
|
+
* reaching the root `LView`.
|
|
11720
|
+
*
|
|
11721
|
+
* @param componentOrLView any component or `LView`
|
|
11722
|
+
*/
|
|
11723
|
+
function getRootView(componentOrLView) {
|
|
11724
|
+
ngDevMode && assertDefined(componentOrLView, 'component');
|
|
11725
|
+
let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);
|
|
11726
|
+
while (lView && !(lView[FLAGS] & 512 /* LViewFlags.IsRoot */)) {
|
|
11727
|
+
lView = getLViewParent(lView);
|
|
11728
|
+
}
|
|
11729
|
+
ngDevMode && assertLView(lView);
|
|
11730
|
+
return lView;
|
|
11731
|
+
}
|
|
11732
|
+
/**
|
|
11733
|
+
* Returns the context information associated with the application where the target is situated. It
|
|
11734
|
+
* does this by walking the parent views until it gets to the root view, then getting the context
|
|
11735
|
+
* off of that.
|
|
11736
|
+
*
|
|
11737
|
+
* @param viewOrComponent the `LView` or component to get the root context for.
|
|
11738
|
+
*/
|
|
11739
|
+
function getRootContext(viewOrComponent) {
|
|
11740
|
+
const rootView = getRootView(viewOrComponent);
|
|
11741
|
+
ngDevMode &&
|
|
11742
|
+
assertDefined(rootView[CONTEXT], 'Root view has no context. Perhaps it is disconnected?');
|
|
11743
|
+
return rootView[CONTEXT];
|
|
11744
|
+
}
|
|
11745
|
+
/**
|
|
11746
|
+
* Gets the first `LContainer` in the LView or `null` if none exists.
|
|
11747
|
+
*/
|
|
11748
|
+
function getFirstLContainer(lView) {
|
|
11749
|
+
return getNearestLContainer(lView[CHILD_HEAD]);
|
|
11750
|
+
}
|
|
11751
|
+
/**
|
|
11752
|
+
* Gets the next `LContainer` that is a sibling of the given container.
|
|
11753
|
+
*/
|
|
11754
|
+
function getNextLContainer(container) {
|
|
11755
|
+
return getNearestLContainer(container[NEXT]);
|
|
11756
|
+
}
|
|
11757
|
+
function getNearestLContainer(viewOrContainer) {
|
|
11758
|
+
while (viewOrContainer !== null && !isLContainer(viewOrContainer)) {
|
|
11759
|
+
viewOrContainer = viewOrContainer[NEXT];
|
|
11760
|
+
}
|
|
11761
|
+
return viewOrContainer;
|
|
11762
|
+
}
|
|
11763
|
+
|
|
11745
11764
|
const ERROR_ORIGINAL_ERROR = 'ngOriginalError';
|
|
11746
11765
|
function wrappedError(message, originalError) {
|
|
11747
11766
|
const msg = `${message} caused by: ${originalError instanceof Error ? originalError.message : originalError}`;
|
|
@@ -11983,7 +12002,7 @@ const NO_CHANGE = (typeof ngDevMode === 'undefined' || ngDevMode) ? { __brand__:
|
|
|
11983
12002
|
*
|
|
11984
12003
|
* @codeGenApi
|
|
11985
12004
|
*/
|
|
11986
|
-
function ɵɵadvance(delta) {
|
|
12005
|
+
function ɵɵadvance(delta = 1) {
|
|
11987
12006
|
ngDevMode && assertGreaterThan(delta, 0, 'Can only advance forward');
|
|
11988
12007
|
selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, !!ngDevMode && isInCheckNoChangesMode());
|
|
11989
12008
|
}
|
|
@@ -12044,6 +12063,39 @@ function ɵɵinvalidFactory() {
|
|
|
12044
12063
|
throw new Error(msg);
|
|
12045
12064
|
}
|
|
12046
12065
|
|
|
12066
|
+
function writeToDirectiveInput(def, instance, publicName, privateName, flags, value) {
|
|
12067
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
12068
|
+
try {
|
|
12069
|
+
// If we know we are dealing with a signal input, we cache its reference
|
|
12070
|
+
// in a tree-shakable way. The input signal node can then be used for
|
|
12071
|
+
// value transform execution or actual value updates without introducing
|
|
12072
|
+
// additional megamorphic accesses for accessing the instance field.
|
|
12073
|
+
let inputSignalNode = null;
|
|
12074
|
+
if ((flags & InputFlags.SignalBased) !== 0) {
|
|
12075
|
+
const field = instance[privateName];
|
|
12076
|
+
inputSignalNode = field[SIGNAL$1];
|
|
12077
|
+
}
|
|
12078
|
+
// If there is a signal node and a transform, run it before potentially
|
|
12079
|
+
// delegating to features like `NgOnChanges`.
|
|
12080
|
+
if (inputSignalNode !== null && inputSignalNode.transformFn !== undefined) {
|
|
12081
|
+
value = inputSignalNode.transformFn(value);
|
|
12082
|
+
}
|
|
12083
|
+
// If there is a decorator input transform, run it.
|
|
12084
|
+
if ((flags & InputFlags.HasDecoratorInputTransform) !== 0) {
|
|
12085
|
+
value = def.inputTransforms[privateName].call(instance, value);
|
|
12086
|
+
}
|
|
12087
|
+
if (def.setInput !== null) {
|
|
12088
|
+
def.setInput(instance, inputSignalNode, value, publicName, privateName);
|
|
12089
|
+
}
|
|
12090
|
+
else {
|
|
12091
|
+
applyValueToInputField(instance, inputSignalNode, privateName, value);
|
|
12092
|
+
}
|
|
12093
|
+
}
|
|
12094
|
+
finally {
|
|
12095
|
+
setActiveConsumer$1(prevConsumer);
|
|
12096
|
+
}
|
|
12097
|
+
}
|
|
12098
|
+
|
|
12047
12099
|
/**
|
|
12048
12100
|
* Invoke `HostBindingsFunction`s for view.
|
|
12049
12101
|
*
|
|
@@ -12082,7 +12134,8 @@ function processHostBindingOpCodes(tView, lView) {
|
|
|
12082
12134
|
function createLView(parentLView, tView, context, flags, host, tHostNode, environment, renderer, injector, embeddedViewInjector, hydrationInfo) {
|
|
12083
12135
|
const lView = tView.blueprint.slice();
|
|
12084
12136
|
lView[HOST] = host;
|
|
12085
|
-
lView[FLAGS] = flags | 4 /* LViewFlags.CreationMode */ | 128 /* LViewFlags.Attached */ | 8 /* LViewFlags.FirstLViewPass
|
|
12137
|
+
lView[FLAGS] = flags | 4 /* LViewFlags.CreationMode */ | 128 /* LViewFlags.Attached */ | 8 /* LViewFlags.FirstLViewPass */ |
|
|
12138
|
+
64 /* LViewFlags.Dirty */;
|
|
12086
12139
|
if (embeddedViewInjector !== null ||
|
|
12087
12140
|
(parentLView && (parentLView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */))) {
|
|
12088
12141
|
lView[FLAGS] |= 2048 /* LViewFlags.HasEmbeddedViewInjector */;
|
|
@@ -12392,7 +12445,7 @@ function applyRootElementTransform(rootElement) {
|
|
|
12392
12445
|
*
|
|
12393
12446
|
* @param rootElement the app root HTML Element
|
|
12394
12447
|
*/
|
|
12395
|
-
let _applyRootElementTransformImpl = (
|
|
12448
|
+
let _applyRootElementTransformImpl = () => null;
|
|
12396
12449
|
/**
|
|
12397
12450
|
* Processes text node markers before hydration begins. This replaces any special comment
|
|
12398
12451
|
* nodes that were added prior to serialization are swapped out to restore proper text
|
|
@@ -12499,42 +12552,61 @@ function createTNode(tView, tParent, type, index, value, attrs) {
|
|
|
12499
12552
|
}
|
|
12500
12553
|
return tNode;
|
|
12501
12554
|
}
|
|
12502
|
-
|
|
12503
|
-
* Generates the `PropertyAliases` data structure from the provided input/output mapping.
|
|
12504
|
-
* @param aliasMap Input/output mapping from the directive definition.
|
|
12505
|
-
* @param directiveIndex Index of the directive.
|
|
12506
|
-
* @param propertyAliases Object in which to store the results.
|
|
12507
|
-
* @param hostDirectiveAliasMap Object used to alias or filter out properties for host directives.
|
|
12508
|
-
* If the mapping is provided, it'll act as an allowlist, as well as a mapping of what public
|
|
12509
|
-
* name inputs/outputs should be exposed under.
|
|
12510
|
-
*/
|
|
12511
|
-
function generatePropertyAliases(aliasMap, directiveIndex, propertyAliases, hostDirectiveAliasMap) {
|
|
12555
|
+
function captureNodeBindings(mode, aliasMap, directiveIndex, bindingsResult, hostDirectiveAliasMap) {
|
|
12512
12556
|
for (let publicName in aliasMap) {
|
|
12513
|
-
if (aliasMap.hasOwnProperty(publicName)) {
|
|
12514
|
-
|
|
12515
|
-
|
|
12516
|
-
|
|
12517
|
-
|
|
12518
|
-
|
|
12519
|
-
|
|
12520
|
-
|
|
12521
|
-
|
|
12522
|
-
|
|
12523
|
-
|
|
12524
|
-
|
|
12525
|
-
|
|
12526
|
-
|
|
12557
|
+
if (!aliasMap.hasOwnProperty(publicName)) {
|
|
12558
|
+
continue;
|
|
12559
|
+
}
|
|
12560
|
+
const value = aliasMap[publicName];
|
|
12561
|
+
if (value === undefined) {
|
|
12562
|
+
continue;
|
|
12563
|
+
}
|
|
12564
|
+
bindingsResult ??= {};
|
|
12565
|
+
let internalName;
|
|
12566
|
+
let inputFlags = InputFlags.None;
|
|
12567
|
+
// For inputs, the value might be an array capturing additional
|
|
12568
|
+
// input flags.
|
|
12569
|
+
if (Array.isArray(value)) {
|
|
12570
|
+
internalName = value[0];
|
|
12571
|
+
inputFlags = value[1];
|
|
12572
|
+
}
|
|
12573
|
+
else {
|
|
12574
|
+
internalName = value;
|
|
12575
|
+
}
|
|
12576
|
+
// If there are no host directive mappings, we want to remap using the alias map from the
|
|
12577
|
+
// definition itself. If there is an alias map, it has two functions:
|
|
12578
|
+
// 1. It serves as an allowlist of bindings that are exposed by the host directives. Only the
|
|
12579
|
+
// ones inside the host directive map will be exposed on the host.
|
|
12580
|
+
// 2. The public name of the property is aliased using the host directive alias map, rather
|
|
12581
|
+
// than the alias map from the definition.
|
|
12582
|
+
let finalPublicName = publicName;
|
|
12583
|
+
if (hostDirectiveAliasMap !== null) {
|
|
12584
|
+
// If there is no mapping, it's not part of the allowlist and this input/output
|
|
12585
|
+
// is not captured and should be ignored.
|
|
12586
|
+
if (!hostDirectiveAliasMap.hasOwnProperty(publicName)) {
|
|
12587
|
+
continue;
|
|
12527
12588
|
}
|
|
12589
|
+
finalPublicName = hostDirectiveAliasMap[publicName];
|
|
12590
|
+
}
|
|
12591
|
+
if (mode === 0 /* CaptureNodeBindingMode.Inputs */) {
|
|
12592
|
+
addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName, inputFlags);
|
|
12593
|
+
}
|
|
12594
|
+
else {
|
|
12595
|
+
addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName);
|
|
12528
12596
|
}
|
|
12529
12597
|
}
|
|
12530
|
-
return
|
|
12598
|
+
return bindingsResult;
|
|
12531
12599
|
}
|
|
12532
|
-
function
|
|
12533
|
-
|
|
12534
|
-
|
|
12600
|
+
function addPropertyBinding(bindings, directiveIndex, publicName, internalName, inputFlags) {
|
|
12601
|
+
let values;
|
|
12602
|
+
if (bindings.hasOwnProperty(publicName)) {
|
|
12603
|
+
(values = bindings[publicName]).push(directiveIndex, internalName);
|
|
12535
12604
|
}
|
|
12536
12605
|
else {
|
|
12537
|
-
|
|
12606
|
+
values = bindings[publicName] = [directiveIndex, internalName];
|
|
12607
|
+
}
|
|
12608
|
+
if (inputFlags !== undefined) {
|
|
12609
|
+
values.push(inputFlags);
|
|
12538
12610
|
}
|
|
12539
12611
|
}
|
|
12540
12612
|
/**
|
|
@@ -12555,10 +12627,8 @@ function initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefinitionMa
|
|
|
12555
12627
|
const aliasData = hostDirectiveDefinitionMap ? hostDirectiveDefinitionMap.get(directiveDef) : null;
|
|
12556
12628
|
const aliasedInputs = aliasData ? aliasData.inputs : null;
|
|
12557
12629
|
const aliasedOutputs = aliasData ? aliasData.outputs : null;
|
|
12558
|
-
inputsStore =
|
|
12559
|
-
|
|
12560
|
-
outputsStore =
|
|
12561
|
-
generatePropertyAliases(directiveDef.outputs, directiveIndex, outputsStore, aliasedOutputs);
|
|
12630
|
+
inputsStore = captureNodeBindings(0 /* CaptureNodeBindingMode.Inputs */, directiveDef.inputs, directiveIndex, inputsStore, aliasedInputs);
|
|
12631
|
+
outputsStore = captureNodeBindings(1 /* CaptureNodeBindingMode.Outputs */, directiveDef.outputs, directiveIndex, outputsStore, aliasedOutputs);
|
|
12562
12632
|
// Do not use unbound attributes as inputs to structural directives, since structural
|
|
12563
12633
|
// directive inputs can only be set using microsyntax (e.g. `<div *dir="exp">`).
|
|
12564
12634
|
// TODO(FW-1930): microsyntax expressions may also contain unbound/static attributes, which
|
|
@@ -12675,7 +12745,7 @@ function setNgReflectProperties(lView, element, type, dataValue, value) {
|
|
|
12675
12745
|
* e.g. [0, 'change', 'change-minified']
|
|
12676
12746
|
* we want to set the reflected property with the privateName: dataValue[i+1]
|
|
12677
12747
|
*/
|
|
12678
|
-
for (let i = 0; i < dataValue.length; i +=
|
|
12748
|
+
for (let i = 0; i < dataValue.length; i += 3) {
|
|
12679
12749
|
setNgReflectProperty(lView, element, type, dataValue[i + 1], value);
|
|
12680
12750
|
}
|
|
12681
12751
|
}
|
|
@@ -13067,8 +13137,9 @@ function setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initial
|
|
|
13067
13137
|
for (let i = 0; i < initialInputs.length;) {
|
|
13068
13138
|
const publicName = initialInputs[i++];
|
|
13069
13139
|
const privateName = initialInputs[i++];
|
|
13140
|
+
const flags = initialInputs[i++];
|
|
13070
13141
|
const value = initialInputs[i++];
|
|
13071
|
-
writeToDirectiveInput(def, instance, publicName, privateName, value);
|
|
13142
|
+
writeToDirectiveInput(def, instance, publicName, privateName, flags, value);
|
|
13072
13143
|
if (ngDevMode) {
|
|
13073
13144
|
const nativeElement = getNativeByTNode(tNode, lView);
|
|
13074
13145
|
setNgReflectProperty(lView, nativeElement, tNode.type, privateName, value);
|
|
@@ -13076,24 +13147,6 @@ function setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initial
|
|
|
13076
13147
|
}
|
|
13077
13148
|
}
|
|
13078
13149
|
}
|
|
13079
|
-
function writeToDirectiveInput(def, instance, publicName, privateName, value) {
|
|
13080
|
-
const prevConsumer = setActiveConsumer$1(null);
|
|
13081
|
-
try {
|
|
13082
|
-
const inputTransforms = def.inputTransforms;
|
|
13083
|
-
if (inputTransforms !== null && inputTransforms.hasOwnProperty(privateName)) {
|
|
13084
|
-
value = inputTransforms[privateName].call(instance, value);
|
|
13085
|
-
}
|
|
13086
|
-
if (def.setInput !== null) {
|
|
13087
|
-
def.setInput(instance, value, publicName, privateName);
|
|
13088
|
-
}
|
|
13089
|
-
else {
|
|
13090
|
-
instance[privateName] = value;
|
|
13091
|
-
}
|
|
13092
|
-
}
|
|
13093
|
-
finally {
|
|
13094
|
-
setActiveConsumer$1(prevConsumer);
|
|
13095
|
-
}
|
|
13096
|
-
}
|
|
13097
13150
|
/**
|
|
13098
13151
|
* Generates initialInputData for a node and stores it in the template's static storage
|
|
13099
13152
|
* so subsequent template invocations don't have to recalculate it.
|
|
@@ -13134,9 +13187,9 @@ function generateInitialInputs(inputs, directiveIndex, attrs) {
|
|
|
13134
13187
|
// through the directive def, but we want to do it using the inputs store so that it can
|
|
13135
13188
|
// account for host directive aliases.
|
|
13136
13189
|
const inputConfig = inputs[attrName];
|
|
13137
|
-
for (let j = 0; j < inputConfig.length; j +=
|
|
13190
|
+
for (let j = 0; j < inputConfig.length; j += 3) {
|
|
13138
13191
|
if (inputConfig[j] === directiveIndex) {
|
|
13139
|
-
inputsToStore.push(attrName, inputConfig[j + 1], attrs[i + 1]);
|
|
13192
|
+
inputsToStore.push(attrName, inputConfig[j + 1], inputConfig[j + 2], attrs[i + 1]);
|
|
13140
13193
|
// A directive can't have multiple inputs with the same name so we can break here.
|
|
13141
13194
|
break;
|
|
13142
13195
|
}
|
|
@@ -13323,10 +13376,11 @@ function setInputsForProperty(tView, lView, inputs, publicName, value) {
|
|
|
13323
13376
|
for (let i = 0; i < inputs.length;) {
|
|
13324
13377
|
const index = inputs[i++];
|
|
13325
13378
|
const privateName = inputs[i++];
|
|
13379
|
+
const flags = inputs[i++];
|
|
13326
13380
|
const instance = lView[index];
|
|
13327
13381
|
ngDevMode && assertIndexInRange(lView, index);
|
|
13328
13382
|
const def = tView.data[index];
|
|
13329
|
-
writeToDirectiveInput(def, instance, publicName, privateName, value);
|
|
13383
|
+
writeToDirectiveInput(def, instance, publicName, privateName, flags, value);
|
|
13330
13384
|
}
|
|
13331
13385
|
}
|
|
13332
13386
|
/**
|
|
@@ -13348,14 +13402,12 @@ const MAXIMUM_REFRESH_RERUNS = 100;
|
|
|
13348
13402
|
function detectChangesInternal(lView, notifyErrorHandler = true) {
|
|
13349
13403
|
const environment = lView[ENVIRONMENT];
|
|
13350
13404
|
const rendererFactory = environment.rendererFactory;
|
|
13351
|
-
const afterRenderEventManager = environment.afterRenderEventManager;
|
|
13352
13405
|
// Check no changes mode is a dev only mode used to verify that bindings have not changed
|
|
13353
13406
|
// since they were assigned. We do not want to invoke renderer factory functions in that mode
|
|
13354
13407
|
// to avoid any possible side-effects.
|
|
13355
13408
|
const checkNoChangesMode = !!ngDevMode && isInCheckNoChangesMode();
|
|
13356
13409
|
if (!checkNoChangesMode) {
|
|
13357
13410
|
rendererFactory.begin?.();
|
|
13358
|
-
afterRenderEventManager?.begin();
|
|
13359
13411
|
}
|
|
13360
13412
|
try {
|
|
13361
13413
|
detectChangesInViewWhileDirty(lView);
|
|
@@ -13372,8 +13424,6 @@ function detectChangesInternal(lView, notifyErrorHandler = true) {
|
|
|
13372
13424
|
// One final flush of the effects queue to catch any effects created in `ngAfterViewInit` or
|
|
13373
13425
|
// other post-order hooks.
|
|
13374
13426
|
environment.inlineEffectRunner?.flush();
|
|
13375
|
-
// Invoke all callbacks registered via `after*Render`, if needed.
|
|
13376
|
-
afterRenderEventManager?.end();
|
|
13377
13427
|
}
|
|
13378
13428
|
}
|
|
13379
13429
|
}
|
|
@@ -13579,7 +13629,6 @@ function viewShouldHaveReactiveConsumer(tView) {
|
|
|
13579
13629
|
*/
|
|
13580
13630
|
function detectChangesInEmbeddedViews(lView, mode) {
|
|
13581
13631
|
for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {
|
|
13582
|
-
lContainer[FLAGS] &= ~LContainerFlags.HasChildViewsToRefresh;
|
|
13583
13632
|
for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
|
|
13584
13633
|
const embeddedLView = lContainer[i];
|
|
13585
13634
|
detectChangesInViewIfAttached(embeddedLView, mode);
|
|
@@ -13691,6 +13740,7 @@ function detectChangesInChildComponents(hostLView, components, mode) {
|
|
|
13691
13740
|
* @returns the root LView
|
|
13692
13741
|
*/
|
|
13693
13742
|
function markViewDirty(lView) {
|
|
13743
|
+
lView[ENVIRONMENT].changeDetectionScheduler?.notify();
|
|
13694
13744
|
while (lView) {
|
|
13695
13745
|
lView[FLAGS] |= 64 /* LViewFlags.Dirty */;
|
|
13696
13746
|
const parent = getLViewParent(lView);
|
|
@@ -13984,6 +14034,7 @@ class ViewRef$1 {
|
|
|
13984
14034
|
throw new RuntimeError(902 /* RuntimeErrorCode.VIEW_ALREADY_ATTACHED */, ngDevMode && 'This view is already attached to a ViewContainer!');
|
|
13985
14035
|
}
|
|
13986
14036
|
this._appRef = appRef;
|
|
14037
|
+
updateAncestorTraversalFlagsOnAttach(this._lView);
|
|
13987
14038
|
}
|
|
13988
14039
|
}
|
|
13989
14040
|
|
|
@@ -14243,11 +14294,11 @@ class ZoneAwareMicrotaskScheduler {
|
|
|
14243
14294
|
* available/requested.
|
|
14244
14295
|
*/
|
|
14245
14296
|
class EffectHandle {
|
|
14246
|
-
constructor(scheduler, effectFn, creationZone, destroyRef,
|
|
14297
|
+
constructor(scheduler, effectFn, creationZone, destroyRef, injector, allowSignalWrites) {
|
|
14247
14298
|
this.scheduler = scheduler;
|
|
14248
14299
|
this.effectFn = effectFn;
|
|
14249
14300
|
this.creationZone = creationZone;
|
|
14250
|
-
this.
|
|
14301
|
+
this.injector = injector;
|
|
14251
14302
|
this.watcher = createWatch$1((onCleanup) => this.runEffect(onCleanup), () => this.schedule(), allowSignalWrites);
|
|
14252
14303
|
this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
|
|
14253
14304
|
}
|
|
@@ -14256,7 +14307,10 @@ class EffectHandle {
|
|
|
14256
14307
|
this.effectFn(onCleanup);
|
|
14257
14308
|
}
|
|
14258
14309
|
catch (err) {
|
|
14259
|
-
|
|
14310
|
+
// Inject the `ErrorHandler` here in order to avoid circular DI error
|
|
14311
|
+
// if the effect is used inside of a custom `ErrorHandler`.
|
|
14312
|
+
const errorHandler = this.injector.get(ErrorHandler, null, { optional: true });
|
|
14313
|
+
errorHandler?.handleError(err);
|
|
14260
14314
|
}
|
|
14261
14315
|
}
|
|
14262
14316
|
run() {
|
|
@@ -14283,9 +14337,8 @@ function effect(effectFn, options) {
|
|
|
14283
14337
|
'effect inside the component constructor.');
|
|
14284
14338
|
!options?.injector && assertInInjectionContext(effect);
|
|
14285
14339
|
const injector = options?.injector ?? inject(Injector);
|
|
14286
|
-
const errorHandler = injector.get(ErrorHandler, null, { optional: true });
|
|
14287
14340
|
const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
|
|
14288
|
-
const handle = new EffectHandle(injector.get(APP_EFFECT_SCHEDULER), effectFn, (typeof Zone === 'undefined') ? null : Zone.current, destroyRef,
|
|
14341
|
+
const handle = new EffectHandle(injector.get(APP_EFFECT_SCHEDULER), effectFn, (typeof Zone === 'undefined') ? null : Zone.current, destroyRef, injector, options?.allowSignalWrites ?? false);
|
|
14289
14342
|
// Effects need to be marked dirty manually to trigger their initial run. The timing of this
|
|
14290
14343
|
// marking matters, because the effects may read signals that track component inputs, which are
|
|
14291
14344
|
// only available after those components have had their first update pass.
|
|
@@ -14328,7 +14381,6 @@ function performanceMarkFeature(feature) {
|
|
|
14328
14381
|
performance?.mark?.('mark_feature_usage', { detail: { feature } });
|
|
14329
14382
|
}
|
|
14330
14383
|
|
|
14331
|
-
/// <reference types="rxjs" />
|
|
14332
14384
|
class EventEmitter_ extends Subject {
|
|
14333
14385
|
constructor(isAsync = false) {
|
|
14334
14386
|
super();
|
|
@@ -14827,63 +14879,6 @@ class NoopNgZone {
|
|
|
14827
14879
|
return fn.apply(applyThis, applyArgs);
|
|
14828
14880
|
}
|
|
14829
14881
|
}
|
|
14830
|
-
/**
|
|
14831
|
-
* Token used to drive ApplicationRef.isStable
|
|
14832
|
-
*
|
|
14833
|
-
* TODO: This should be moved entirely to NgZone (as a breaking change) so it can be tree-shakeable
|
|
14834
|
-
* for `NoopNgZone` which is always just an `Observable` of `true`. Additionally, we should consider
|
|
14835
|
-
* whether the property on `NgZone` should be `Observable` or `Signal`.
|
|
14836
|
-
*/
|
|
14837
|
-
const ZONE_IS_STABLE_OBSERVABLE = new InjectionToken(ngDevMode ? 'isStable Observable' : '', {
|
|
14838
|
-
providedIn: 'root',
|
|
14839
|
-
// TODO(atscott): Replace this with a suitable default like `new
|
|
14840
|
-
// BehaviorSubject(true).asObservable`. Again, long term this won't exist on ApplicationRef at
|
|
14841
|
-
// all but until we can remove it, we need a default value zoneless.
|
|
14842
|
-
factory: isStableFactory,
|
|
14843
|
-
});
|
|
14844
|
-
function isStableFactory() {
|
|
14845
|
-
const zone = inject(NgZone);
|
|
14846
|
-
let _stable = true;
|
|
14847
|
-
const isCurrentlyStable = new Observable((observer) => {
|
|
14848
|
-
_stable = zone.isStable && !zone.hasPendingMacrotasks && !zone.hasPendingMicrotasks;
|
|
14849
|
-
zone.runOutsideAngular(() => {
|
|
14850
|
-
observer.next(_stable);
|
|
14851
|
-
observer.complete();
|
|
14852
|
-
});
|
|
14853
|
-
});
|
|
14854
|
-
const isStable = new Observable((observer) => {
|
|
14855
|
-
// Create the subscription to onStable outside the Angular Zone so that
|
|
14856
|
-
// the callback is run outside the Angular Zone.
|
|
14857
|
-
let stableSub;
|
|
14858
|
-
zone.runOutsideAngular(() => {
|
|
14859
|
-
stableSub = zone.onStable.subscribe(() => {
|
|
14860
|
-
NgZone.assertNotInAngularZone();
|
|
14861
|
-
// Check whether there are no pending macro/micro tasks in the next tick
|
|
14862
|
-
// to allow for NgZone to update the state.
|
|
14863
|
-
queueMicrotask(() => {
|
|
14864
|
-
if (!_stable && !zone.hasPendingMacrotasks && !zone.hasPendingMicrotasks) {
|
|
14865
|
-
_stable = true;
|
|
14866
|
-
observer.next(true);
|
|
14867
|
-
}
|
|
14868
|
-
});
|
|
14869
|
-
});
|
|
14870
|
-
});
|
|
14871
|
-
const unstableSub = zone.onUnstable.subscribe(() => {
|
|
14872
|
-
NgZone.assertInAngularZone();
|
|
14873
|
-
if (_stable) {
|
|
14874
|
-
_stable = false;
|
|
14875
|
-
zone.runOutsideAngular(() => {
|
|
14876
|
-
observer.next(false);
|
|
14877
|
-
});
|
|
14878
|
-
}
|
|
14879
|
-
});
|
|
14880
|
-
return () => {
|
|
14881
|
-
stableSub.unsubscribe();
|
|
14882
|
-
unstableSub.unsubscribe();
|
|
14883
|
-
};
|
|
14884
|
-
});
|
|
14885
|
-
return merge$1(isCurrentlyStable, isStable.pipe(share()));
|
|
14886
|
-
}
|
|
14887
14882
|
function shouldBeIgnoredByZone(applyArgs) {
|
|
14888
14883
|
if (!Array.isArray(applyArgs)) {
|
|
14889
14884
|
return false;
|
|
@@ -14906,8 +14901,6 @@ function getNgZone(ngZoneToUse = 'zone.js', options) {
|
|
|
14906
14901
|
return ngZoneToUse;
|
|
14907
14902
|
}
|
|
14908
14903
|
|
|
14909
|
-
// Public API for Zone
|
|
14910
|
-
|
|
14911
14904
|
/**
|
|
14912
14905
|
* The phase to run an `afterRender` or `afterNextRender` callback in.
|
|
14913
14906
|
*
|
|
@@ -15176,13 +15169,6 @@ class AfterRenderCallbackHandlerImpl {
|
|
|
15176
15169
|
};
|
|
15177
15170
|
this.deferredCallbacks = new Set();
|
|
15178
15171
|
}
|
|
15179
|
-
validateBegin() {
|
|
15180
|
-
if (this.executingCallbacks) {
|
|
15181
|
-
throw new RuntimeError(102 /* RuntimeErrorCode.RECURSIVE_APPLICATION_RENDER */, ngDevMode &&
|
|
15182
|
-
'A new render operation began before the previous operation ended. ' +
|
|
15183
|
-
'Did you trigger change detection from afterRender or afterNextRender?');
|
|
15184
|
-
}
|
|
15185
|
-
}
|
|
15186
15172
|
register(callback) {
|
|
15187
15173
|
// If we're currently running callbacks, new callbacks should be deferred
|
|
15188
15174
|
// until the next render operation.
|
|
@@ -15194,9 +15180,11 @@ class AfterRenderCallbackHandlerImpl {
|
|
|
15194
15180
|
this.deferredCallbacks.delete(callback);
|
|
15195
15181
|
}
|
|
15196
15182
|
execute() {
|
|
15183
|
+
let callbacksExecuted = false;
|
|
15197
15184
|
this.executingCallbacks = true;
|
|
15198
15185
|
for (const bucket of Object.values(this.buckets)) {
|
|
15199
15186
|
for (const callback of bucket) {
|
|
15187
|
+
callbacksExecuted = true;
|
|
15200
15188
|
callback.invoke();
|
|
15201
15189
|
}
|
|
15202
15190
|
}
|
|
@@ -15205,6 +15193,7 @@ class AfterRenderCallbackHandlerImpl {
|
|
|
15205
15193
|
this.buckets[callback.phase].add(callback);
|
|
15206
15194
|
}
|
|
15207
15195
|
this.deferredCallbacks.clear();
|
|
15196
|
+
return callbacksExecuted;
|
|
15208
15197
|
}
|
|
15209
15198
|
destroy() {
|
|
15210
15199
|
for (const bucket of Object.values(this.buckets)) {
|
|
@@ -15219,37 +15208,25 @@ class AfterRenderCallbackHandlerImpl {
|
|
|
15219
15208
|
*/
|
|
15220
15209
|
class AfterRenderEventManager {
|
|
15221
15210
|
constructor() {
|
|
15222
|
-
this.renderDepth = 0;
|
|
15223
15211
|
/* @internal */
|
|
15224
15212
|
this.handler = null;
|
|
15225
15213
|
/* @internal */
|
|
15226
15214
|
this.internalCallbacks = [];
|
|
15227
15215
|
}
|
|
15228
15216
|
/**
|
|
15229
|
-
*
|
|
15230
|
-
* Throws if called while executing callbacks.
|
|
15217
|
+
* Executes callbacks. Returns `true` if any callbacks executed.
|
|
15231
15218
|
*/
|
|
15232
|
-
|
|
15233
|
-
|
|
15234
|
-
|
|
15235
|
-
|
|
15236
|
-
|
|
15237
|
-
|
|
15238
|
-
|
|
15239
|
-
|
|
15240
|
-
end() {
|
|
15241
|
-
ngDevMode && assertGreaterThan(this.renderDepth, 0, 'renderDepth must be greater than 0');
|
|
15242
|
-
this.renderDepth--;
|
|
15243
|
-
if (this.renderDepth === 0) {
|
|
15244
|
-
// Note: internal callbacks power `internalAfterNextRender`. Since internal callbacks
|
|
15245
|
-
// are fairly trivial, they are kept separate so that `AfterRenderCallbackHandlerImpl`
|
|
15246
|
-
// can still be tree-shaken unless used by the application.
|
|
15247
|
-
for (const callback of this.internalCallbacks) {
|
|
15248
|
-
callback();
|
|
15249
|
-
}
|
|
15250
|
-
this.internalCallbacks.length = 0;
|
|
15251
|
-
this.handler?.execute();
|
|
15219
|
+
execute() {
|
|
15220
|
+
// Note: internal callbacks power `internalAfterNextRender`. Since internal callbacks
|
|
15221
|
+
// are fairly trivial, they are kept separate so that `AfterRenderCallbackHandlerImpl`
|
|
15222
|
+
// can still be tree-shaken unless used by the application.
|
|
15223
|
+
const callbacks = [...this.internalCallbacks];
|
|
15224
|
+
this.internalCallbacks.length = 0;
|
|
15225
|
+
for (const callback of callbacks) {
|
|
15226
|
+
callback();
|
|
15252
15227
|
}
|
|
15228
|
+
const handlerCallbacksExecuted = this.handler?.execute();
|
|
15229
|
+
return !!handlerCallbacksExecuted || callbacks.length > 0;
|
|
15253
15230
|
}
|
|
15254
15231
|
ngOnDestroy() {
|
|
15255
15232
|
this.handler?.destroy();
|
|
@@ -15429,11 +15406,18 @@ class ComponentFactoryResolver extends ComponentFactoryResolver$1 {
|
|
|
15429
15406
|
}
|
|
15430
15407
|
function toRefArray(map) {
|
|
15431
15408
|
const array = [];
|
|
15432
|
-
for (
|
|
15433
|
-
if (map.hasOwnProperty(
|
|
15434
|
-
|
|
15435
|
-
array.push({ propName: minified, templateName: nonMinified });
|
|
15409
|
+
for (const publicName in map) {
|
|
15410
|
+
if (!map.hasOwnProperty(publicName)) {
|
|
15411
|
+
continue;
|
|
15436
15412
|
}
|
|
15413
|
+
const value = map[publicName];
|
|
15414
|
+
if (value === undefined) {
|
|
15415
|
+
continue;
|
|
15416
|
+
}
|
|
15417
|
+
array.push({
|
|
15418
|
+
propName: Array.isArray(value) ? value[0] : value,
|
|
15419
|
+
templateName: publicName,
|
|
15420
|
+
});
|
|
15437
15421
|
}
|
|
15438
15422
|
return array;
|
|
15439
15423
|
}
|
|
@@ -15525,12 +15509,14 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
15525
15509
|
}
|
|
15526
15510
|
const sanitizer = rootViewInjector.get(Sanitizer, null);
|
|
15527
15511
|
const afterRenderEventManager = rootViewInjector.get(AfterRenderEventManager, null);
|
|
15512
|
+
const changeDetectionScheduler = rootViewInjector.get(ChangeDetectionScheduler, null);
|
|
15528
15513
|
const environment = {
|
|
15529
15514
|
rendererFactory,
|
|
15530
15515
|
sanitizer,
|
|
15531
15516
|
// We don't use inline effects (yet).
|
|
15532
15517
|
inlineEffectRunner: null,
|
|
15533
15518
|
afterRenderEventManager,
|
|
15519
|
+
changeDetectionScheduler,
|
|
15534
15520
|
};
|
|
15535
15521
|
const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);
|
|
15536
15522
|
// Determine a tag name used for creating host elements when this component is created
|
|
@@ -15539,12 +15525,13 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
15539
15525
|
const hostRNode = rootSelectorOrNode ?
|
|
15540
15526
|
locateHostElement(hostRenderer, rootSelectorOrNode, this.componentDef.encapsulation, rootViewInjector) :
|
|
15541
15527
|
createElementNode(hostRenderer, elementName, getNamespace(elementName));
|
|
15542
|
-
|
|
15543
|
-
|
|
15544
|
-
|
|
15545
|
-
|
|
15546
|
-
|
|
15547
|
-
|
|
15528
|
+
let rootFlags = 512 /* LViewFlags.IsRoot */;
|
|
15529
|
+
if (this.componentDef.signals) {
|
|
15530
|
+
rootFlags |= 4096 /* LViewFlags.SignalView */;
|
|
15531
|
+
}
|
|
15532
|
+
else if (!this.componentDef.onPush) {
|
|
15533
|
+
rootFlags |= 16 /* LViewFlags.CheckAlways */;
|
|
15534
|
+
}
|
|
15548
15535
|
let hydrationInfo = null;
|
|
15549
15536
|
if (hostRNode !== null) {
|
|
15550
15537
|
hydrationInfo = retrieveHydrationInfo(hostRNode, rootViewInjector, true /* isRootView */);
|
|
@@ -15751,7 +15738,8 @@ function createRootComponent(componentView, rootComponentDef, rootDirectives, ho
|
|
|
15751
15738
|
/** Sets the static attributes on a root component. */
|
|
15752
15739
|
function setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {
|
|
15753
15740
|
if (rootSelectorOrNode) {
|
|
15754
|
-
|
|
15741
|
+
// The placeholder will be replaced with the actual version at build time.
|
|
15742
|
+
setUpAttributes(hostRenderer, hostRNode, ['ng-version', '17.1.0-rc.0']);
|
|
15755
15743
|
}
|
|
15756
15744
|
else {
|
|
15757
15745
|
// If host element is created as a part of this function call (i.e. `rootSelectorOrNode`
|
|
@@ -15844,15 +15832,8 @@ function ɵɵInheritDefinitionFeature(definition) {
|
|
|
15844
15832
|
superViewQuery && inheritViewQuery(definition, superViewQuery);
|
|
15845
15833
|
superContentQueries && inheritContentQueries(definition, superContentQueries);
|
|
15846
15834
|
// Merge inputs and outputs
|
|
15847
|
-
|
|
15848
|
-
fillProperties(definition.declaredInputs, superDef.declaredInputs);
|
|
15835
|
+
mergeInputsWithTransforms(definition, superDef);
|
|
15849
15836
|
fillProperties(definition.outputs, superDef.outputs);
|
|
15850
|
-
if (superDef.inputTransforms !== null) {
|
|
15851
|
-
if (writeableDef.inputTransforms === null) {
|
|
15852
|
-
writeableDef.inputTransforms = {};
|
|
15853
|
-
}
|
|
15854
|
-
fillProperties(writeableDef.inputTransforms, superDef.inputTransforms);
|
|
15855
|
-
}
|
|
15856
15837
|
// Merge animations metadata.
|
|
15857
15838
|
// If `superDef` is a Component, the `data` field is present (defaults to an empty object).
|
|
15858
15839
|
if (isComponentDef(superDef) && superDef.data.animation) {
|
|
@@ -15887,6 +15868,35 @@ function ɵɵInheritDefinitionFeature(definition) {
|
|
|
15887
15868
|
}
|
|
15888
15869
|
mergeHostAttrsAcrossInheritance(inheritanceChain);
|
|
15889
15870
|
}
|
|
15871
|
+
function mergeInputsWithTransforms(target, source) {
|
|
15872
|
+
for (const key in source.inputs) {
|
|
15873
|
+
if (!source.inputs.hasOwnProperty(key)) {
|
|
15874
|
+
continue;
|
|
15875
|
+
}
|
|
15876
|
+
if (target.inputs.hasOwnProperty(key)) {
|
|
15877
|
+
continue;
|
|
15878
|
+
}
|
|
15879
|
+
const value = source.inputs[key];
|
|
15880
|
+
if (value === undefined) {
|
|
15881
|
+
continue;
|
|
15882
|
+
}
|
|
15883
|
+
target.inputs[key] = value;
|
|
15884
|
+
target.declaredInputs[key] = source.declaredInputs[key];
|
|
15885
|
+
// If the input is inherited, and we have a transform for it, we also inherit it.
|
|
15886
|
+
// Note that transforms should not be inherited if the input has its own metadata
|
|
15887
|
+
// in the `source` directive itself already (i.e. the input is re-declared/overridden).
|
|
15888
|
+
if (source.inputTransforms !== null) {
|
|
15889
|
+
// Note: transforms are stored with their minified names.
|
|
15890
|
+
// Perf: only access the minified name when there are source transforms.
|
|
15891
|
+
const minifiedName = Array.isArray(value) ? value[0] : value;
|
|
15892
|
+
if (!source.inputTransforms.hasOwnProperty(minifiedName)) {
|
|
15893
|
+
continue;
|
|
15894
|
+
}
|
|
15895
|
+
target.inputTransforms ??= {};
|
|
15896
|
+
target.inputTransforms[minifiedName] = source.inputTransforms[minifiedName];
|
|
15897
|
+
}
|
|
15898
|
+
}
|
|
15899
|
+
}
|
|
15890
15900
|
/**
|
|
15891
15901
|
* Merge the `hostAttrs` and `hostVars` from the inherited parent to the base class.
|
|
15892
15902
|
*
|
|
@@ -16172,8 +16182,7 @@ function validateMappings(bindingType, def, hostDirectiveBindings) {
|
|
|
16172
16182
|
throw new RuntimeError(311 /* RuntimeErrorCode.HOST_DIRECTIVE_UNDEFINED_BINDING */, `Directive ${className} does not have an ${bindingType} with a public name of ${publicName}.`);
|
|
16173
16183
|
}
|
|
16174
16184
|
const remappedPublicName = hostDirectiveBindings[publicName];
|
|
16175
|
-
if (bindings.hasOwnProperty(remappedPublicName) && remappedPublicName !== publicName
|
|
16176
|
-
bindings[remappedPublicName] !== publicName) {
|
|
16185
|
+
if (bindings.hasOwnProperty(remappedPublicName) && remappedPublicName !== publicName) {
|
|
16177
16186
|
throw new RuntimeError(312 /* RuntimeErrorCode.HOST_DIRECTIVE_CONFLICTING_ALIAS */, `Cannot alias ${bindingType} ${publicName} of host directive ${className} to ${remappedPublicName}, because it already has a different ${bindingType} with the same public name.`);
|
|
16178
16187
|
}
|
|
16179
16188
|
}
|
|
@@ -16196,13 +16205,12 @@ function ɵɵInputTransformsFeature(definition) {
|
|
|
16196
16205
|
// Note: the private names are used for the keys, rather than the public ones, because public
|
|
16197
16206
|
// names can be re-aliased in host directives which would invalidate the lookup.
|
|
16198
16207
|
const value = inputs[minifiedKey];
|
|
16199
|
-
if (Array.isArray(value) && value[
|
|
16200
|
-
inputTransforms[minifiedKey] = value[
|
|
16208
|
+
if (Array.isArray(value) && value[3]) {
|
|
16209
|
+
inputTransforms[minifiedKey] = value[3];
|
|
16201
16210
|
}
|
|
16202
16211
|
}
|
|
16203
16212
|
}
|
|
16204
|
-
definition.inputTransforms =
|
|
16205
|
-
inputTransforms;
|
|
16213
|
+
definition.inputTransforms = inputTransforms;
|
|
16206
16214
|
}
|
|
16207
16215
|
|
|
16208
16216
|
// TODO(misko): consider inlining
|
|
@@ -17103,8 +17111,8 @@ function insertTStylingBinding(tData, tNode, tStylingKeyWithStatic, index, isHos
|
|
|
17103
17111
|
if (isKeyDuplicateOfStatic) {
|
|
17104
17112
|
tData[index + 1] = setTStylingRangePrevDuplicate(tData[index + 1]);
|
|
17105
17113
|
}
|
|
17106
|
-
markDuplicates(tData, tStylingKey, index, true
|
|
17107
|
-
markDuplicates(tData, tStylingKey, index, false
|
|
17114
|
+
markDuplicates(tData, tStylingKey, index, true);
|
|
17115
|
+
markDuplicates(tData, tStylingKey, index, false);
|
|
17108
17116
|
markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding);
|
|
17109
17117
|
tBindings = toTStylingRange(tmplHead, tmplTail);
|
|
17110
17118
|
if (isClassBinding) {
|
|
@@ -17188,7 +17196,7 @@ function markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClas
|
|
|
17188
17196
|
* - `true` for previous (lower priority);
|
|
17189
17197
|
* - `false` for next (higher priority).
|
|
17190
17198
|
*/
|
|
17191
|
-
function markDuplicates(tData, tStylingKey, index, isPrevDir
|
|
17199
|
+
function markDuplicates(tData, tStylingKey, index, isPrevDir) {
|
|
17192
17200
|
const tStylingAtIndex = tData[index + 1];
|
|
17193
17201
|
const isMap = tStylingKey === null;
|
|
17194
17202
|
let cursor = isPrevDir ? getTStylingRangePrev(tStylingAtIndex) : getTStylingRangeNext(tStylingAtIndex);
|
|
@@ -19490,7 +19498,7 @@ function locateDehydratedViewsInContainer(currentRNode, serializedViews) {
|
|
|
19490
19498
|
* stored on a given lContainer.
|
|
19491
19499
|
* Returns `null` by default, when hydration is not enabled.
|
|
19492
19500
|
*/
|
|
19493
|
-
let _findMatchingDehydratedViewImpl = (
|
|
19501
|
+
let _findMatchingDehydratedViewImpl = () => null;
|
|
19494
19502
|
/**
|
|
19495
19503
|
* Retrieves the next dehydrated view from the LContainer and verifies that
|
|
19496
19504
|
* it matches a given template id (from the TView that was used to create this
|
|
@@ -20230,7 +20238,7 @@ function insertAnchorNode(hostLView, hostTNode) {
|
|
|
20230
20238
|
return commentNode;
|
|
20231
20239
|
}
|
|
20232
20240
|
let _locateOrCreateAnchorNode = createAnchorNode;
|
|
20233
|
-
let _populateDehydratedViewsInLContainer = (
|
|
20241
|
+
let _populateDehydratedViewsInLContainer = () => false; // noop by default
|
|
20234
20242
|
/**
|
|
20235
20243
|
* Looks up dehydrated views that belong to a given LContainer and populates
|
|
20236
20244
|
* this information into the `LContainer[DEHYDRATED_VIEWS]` slot. When running
|
|
@@ -20545,10 +20553,12 @@ class RepeaterMetadata {
|
|
|
20545
20553
|
* @param emptyTemplateFn Reference to the template function of the empty block.
|
|
20546
20554
|
* @param emptyDecls The number of nodes, local refs, and pipes for the empty block.
|
|
20547
20555
|
* @param emptyVars The number of bindings for the empty block.
|
|
20556
|
+
* @param emptyTagName The name of the empty block container element, if applicable
|
|
20557
|
+
* @param emptyAttrsIndex Index of the empty block template attributes in the `consts` array.
|
|
20548
20558
|
*
|
|
20549
20559
|
* @codeGenApi
|
|
20550
20560
|
*/
|
|
20551
|
-
function ɵɵrepeaterCreate(index, templateFn, decls, vars, tagName, attrsIndex, trackByFn, trackByUsesComponentInstance, emptyTemplateFn, emptyDecls, emptyVars) {
|
|
20561
|
+
function ɵɵrepeaterCreate(index, templateFn, decls, vars, tagName, attrsIndex, trackByFn, trackByUsesComponentInstance, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, emptyAttrsIndex) {
|
|
20552
20562
|
performanceMarkFeature('NgControlFlow');
|
|
20553
20563
|
const hasEmptyBlock = emptyTemplateFn !== undefined;
|
|
20554
20564
|
const hostLView = getLView();
|
|
@@ -20565,7 +20575,7 @@ function ɵɵrepeaterCreate(index, templateFn, decls, vars, tagName, attrsIndex,
|
|
|
20565
20575
|
assertDefined(emptyDecls, 'Missing number of declarations for the empty repeater block.');
|
|
20566
20576
|
ngDevMode &&
|
|
20567
20577
|
assertDefined(emptyVars, 'Missing number of bindings for the empty repeater block.');
|
|
20568
|
-
ɵɵtemplate(index + 2, emptyTemplateFn, emptyDecls, emptyVars);
|
|
20578
|
+
ɵɵtemplate(index + 2, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, emptyAttrsIndex);
|
|
20569
20579
|
}
|
|
20570
20580
|
}
|
|
20571
20581
|
class LiveCollectionLContainerImpl extends LiveCollection {
|
|
@@ -20806,6 +20816,8 @@ function invokeAllTriggerCleanupFns(lDetails) {
|
|
|
20806
20816
|
invokeTriggerCleanupFns(0 /* TriggerType.Regular */, lDetails);
|
|
20807
20817
|
}
|
|
20808
20818
|
|
|
20819
|
+
// Public API for Zone
|
|
20820
|
+
|
|
20809
20821
|
/**
|
|
20810
20822
|
* Calculates a data slot index for defer block info (either static or
|
|
20811
20823
|
* instance-specific), given an index of a defer instruction.
|
|
@@ -20975,8 +20987,6 @@ function onInteraction(trigger, callback) {
|
|
|
20975
20987
|
// are referencing it.
|
|
20976
20988
|
entry = new DeferEventEntry();
|
|
20977
20989
|
interactionTriggers.set(trigger, entry);
|
|
20978
|
-
// Ensure that the handler runs in the NgZone
|
|
20979
|
-
ngDevMode && NgZone.assertInAngularZone();
|
|
20980
20990
|
for (const name of interactionEventNames) {
|
|
20981
20991
|
trigger.addEventListener(name, entry.listener, eventListenerOptions);
|
|
20982
20992
|
}
|
|
@@ -21004,8 +21014,6 @@ function onHover(trigger, callback) {
|
|
|
21004
21014
|
if (!entry) {
|
|
21005
21015
|
entry = new DeferEventEntry();
|
|
21006
21016
|
hoverTriggers.set(trigger, entry);
|
|
21007
|
-
// Ensure that the handler runs in the NgZone
|
|
21008
|
-
ngDevMode && NgZone.assertInAngularZone();
|
|
21009
21017
|
for (const name of hoverEventNames) {
|
|
21010
21018
|
trigger.addEventListener(name, entry.listener, eventListenerOptions);
|
|
21011
21019
|
}
|
|
@@ -27134,8 +27142,9 @@ function getDirectiveMetadata$1(directiveOrComponentInstance) {
|
|
|
27134
27142
|
// To ensure we don't get the metadata of the directive, we want to call `getComponentDef` first.
|
|
27135
27143
|
const componentDef = getComponentDef(constructor);
|
|
27136
27144
|
if (componentDef) {
|
|
27145
|
+
const inputs = extractInputDebugMetadata(componentDef.inputs);
|
|
27137
27146
|
return {
|
|
27138
|
-
inputs
|
|
27147
|
+
inputs,
|
|
27139
27148
|
outputs: componentDef.outputs,
|
|
27140
27149
|
encapsulation: componentDef.encapsulation,
|
|
27141
27150
|
changeDetection: componentDef.onPush ? ChangeDetectionStrategy.OnPush :
|
|
@@ -27144,7 +27153,8 @@ function getDirectiveMetadata$1(directiveOrComponentInstance) {
|
|
|
27144
27153
|
}
|
|
27145
27154
|
const directiveDef = getDirectiveDef(constructor);
|
|
27146
27155
|
if (directiveDef) {
|
|
27147
|
-
|
|
27156
|
+
const inputs = extractInputDebugMetadata(directiveDef.inputs);
|
|
27157
|
+
return { inputs, outputs: directiveDef.outputs };
|
|
27148
27158
|
}
|
|
27149
27159
|
return null;
|
|
27150
27160
|
}
|
|
@@ -27298,6 +27308,36 @@ function assertDomElement(value) {
|
|
|
27298
27308
|
throw new Error('Expecting instance of DOM Element');
|
|
27299
27309
|
}
|
|
27300
27310
|
}
|
|
27311
|
+
/**
|
|
27312
|
+
* A directive definition holds additional metadata using bitwise flags to indicate
|
|
27313
|
+
* for example whether it is signal based.
|
|
27314
|
+
*
|
|
27315
|
+
* This information needs to be separate from the `publicName -> minifiedName`
|
|
27316
|
+
* mappings for backwards compatibility.
|
|
27317
|
+
*/
|
|
27318
|
+
function extractInputDebugMetadata(inputs) {
|
|
27319
|
+
const res = {};
|
|
27320
|
+
for (const key in inputs) {
|
|
27321
|
+
if (!inputs.hasOwnProperty(key)) {
|
|
27322
|
+
continue;
|
|
27323
|
+
}
|
|
27324
|
+
const value = inputs[key];
|
|
27325
|
+
if (value === undefined) {
|
|
27326
|
+
continue;
|
|
27327
|
+
}
|
|
27328
|
+
let minifiedName;
|
|
27329
|
+
if (Array.isArray(value)) {
|
|
27330
|
+
minifiedName = value[0];
|
|
27331
|
+
// flags are not used for now.
|
|
27332
|
+
// TODO: Consider exposing flag information in discovery.
|
|
27333
|
+
}
|
|
27334
|
+
else {
|
|
27335
|
+
minifiedName = value;
|
|
27336
|
+
}
|
|
27337
|
+
res[key] = minifiedName;
|
|
27338
|
+
}
|
|
27339
|
+
return res;
|
|
27340
|
+
}
|
|
27301
27341
|
|
|
27302
27342
|
/**
|
|
27303
27343
|
* The name of a field that Angular monkey-patches onto a component
|
|
@@ -28842,6 +28882,7 @@ const angularCoreEnv = (() => ({
|
|
|
28842
28882
|
'ɵɵvalidateIframeAttribute': ɵɵvalidateIframeAttribute,
|
|
28843
28883
|
'forwardRef': forwardRef,
|
|
28844
28884
|
'resolveForwardRef': resolveForwardRef,
|
|
28885
|
+
'ɵɵInputFlags': InputFlags,
|
|
28845
28886
|
}))();
|
|
28846
28887
|
|
|
28847
28888
|
let jitOptions = null;
|
|
@@ -30008,6 +30049,25 @@ const NgModule = makeDecorator('NgModule', (ngModule) => ngModule, undefined, un
|
|
|
30008
30049
|
* to be used by the decorator versions of these annotations.
|
|
30009
30050
|
*/
|
|
30010
30051
|
|
|
30052
|
+
/**
|
|
30053
|
+
* @description Represents the version of Angular
|
|
30054
|
+
*
|
|
30055
|
+
* @publicApi
|
|
30056
|
+
*/
|
|
30057
|
+
class Version {
|
|
30058
|
+
constructor(full) {
|
|
30059
|
+
this.full = full;
|
|
30060
|
+
const parts = full.split('.');
|
|
30061
|
+
this.major = parts[0];
|
|
30062
|
+
this.minor = parts[1];
|
|
30063
|
+
this.patch = parts.slice(2).join('.');
|
|
30064
|
+
}
|
|
30065
|
+
}
|
|
30066
|
+
/**
|
|
30067
|
+
* @publicApi
|
|
30068
|
+
*/
|
|
30069
|
+
const VERSION = new Version('17.1.0-rc.0');
|
|
30070
|
+
|
|
30011
30071
|
/*
|
|
30012
30072
|
* This file exists to support compilation of @angular/core in Ivy mode.
|
|
30013
30073
|
*
|
|
@@ -30046,45 +30106,6 @@ class Console {
|
|
|
30046
30106
|
args: [{ providedIn: 'platform' }]
|
|
30047
30107
|
}], null, null); })();
|
|
30048
30108
|
|
|
30049
|
-
/**
|
|
30050
|
-
* *Internal* service that keeps track of pending tasks happening in the system
|
|
30051
|
-
* during the initial rendering. No tasks are tracked after an initial
|
|
30052
|
-
* rendering.
|
|
30053
|
-
*
|
|
30054
|
-
* This information is needed to make sure that the serialization on the server
|
|
30055
|
-
* is delayed until all tasks in the queue (such as an initial navigation or a
|
|
30056
|
-
* pending HTTP request) are completed.
|
|
30057
|
-
*/
|
|
30058
|
-
class InitialRenderPendingTasks {
|
|
30059
|
-
constructor() {
|
|
30060
|
-
this.taskId = 0;
|
|
30061
|
-
this.pendingTasks = new Set();
|
|
30062
|
-
this.hasPendingTasks = new BehaviorSubject(false);
|
|
30063
|
-
}
|
|
30064
|
-
add() {
|
|
30065
|
-
this.hasPendingTasks.next(true);
|
|
30066
|
-
const taskId = this.taskId++;
|
|
30067
|
-
this.pendingTasks.add(taskId);
|
|
30068
|
-
return taskId;
|
|
30069
|
-
}
|
|
30070
|
-
remove(taskId) {
|
|
30071
|
-
this.pendingTasks.delete(taskId);
|
|
30072
|
-
if (this.pendingTasks.size === 0) {
|
|
30073
|
-
this.hasPendingTasks.next(false);
|
|
30074
|
-
}
|
|
30075
|
-
}
|
|
30076
|
-
ngOnDestroy() {
|
|
30077
|
-
this.pendingTasks.clear();
|
|
30078
|
-
this.hasPendingTasks.next(false);
|
|
30079
|
-
}
|
|
30080
|
-
static { this.ɵfac = function InitialRenderPendingTasks_Factory(t) { return new (t || InitialRenderPendingTasks)(); }; }
|
|
30081
|
-
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: InitialRenderPendingTasks, factory: InitialRenderPendingTasks.ɵfac, providedIn: 'root' }); }
|
|
30082
|
-
}
|
|
30083
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(InitialRenderPendingTasks, [{
|
|
30084
|
-
type: Injectable,
|
|
30085
|
-
args: [{ providedIn: 'root' }]
|
|
30086
|
-
}], null, null); })();
|
|
30087
|
-
|
|
30088
30109
|
/**
|
|
30089
30110
|
* Combination of NgModuleFactory and ComponentFactories.
|
|
30090
30111
|
*
|
|
@@ -30191,6 +30212,53 @@ const COMPILER_OPTIONS = new InjectionToken('compilerOptions');
|
|
|
30191
30212
|
class CompilerFactory {
|
|
30192
30213
|
}
|
|
30193
30214
|
|
|
30215
|
+
/**
|
|
30216
|
+
* *Internal* service that keeps track of pending tasks happening in the system.
|
|
30217
|
+
*
|
|
30218
|
+
* This information is needed to make sure that the serialization on the server
|
|
30219
|
+
* is delayed until all tasks in the queue (such as an initial navigation or a
|
|
30220
|
+
* pending HTTP request) are completed.
|
|
30221
|
+
*
|
|
30222
|
+
* Pending tasks continue to contribute to the stableness of `ApplicationRef`
|
|
30223
|
+
* throughout the lifetime of the application.
|
|
30224
|
+
*/
|
|
30225
|
+
class PendingTasks {
|
|
30226
|
+
constructor() {
|
|
30227
|
+
this.taskId = 0;
|
|
30228
|
+
this.pendingTasks = new Set();
|
|
30229
|
+
this.hasPendingTasks = new BehaviorSubject(false);
|
|
30230
|
+
}
|
|
30231
|
+
get _hasPendingTasks() {
|
|
30232
|
+
return this.hasPendingTasks.value;
|
|
30233
|
+
}
|
|
30234
|
+
add() {
|
|
30235
|
+
if (!this._hasPendingTasks) {
|
|
30236
|
+
this.hasPendingTasks.next(true);
|
|
30237
|
+
}
|
|
30238
|
+
const taskId = this.taskId++;
|
|
30239
|
+
this.pendingTasks.add(taskId);
|
|
30240
|
+
return taskId;
|
|
30241
|
+
}
|
|
30242
|
+
remove(taskId) {
|
|
30243
|
+
this.pendingTasks.delete(taskId);
|
|
30244
|
+
if (this.pendingTasks.size === 0 && this._hasPendingTasks) {
|
|
30245
|
+
this.hasPendingTasks.next(false);
|
|
30246
|
+
}
|
|
30247
|
+
}
|
|
30248
|
+
ngOnDestroy() {
|
|
30249
|
+
this.pendingTasks.clear();
|
|
30250
|
+
if (this._hasPendingTasks) {
|
|
30251
|
+
this.hasPendingTasks.next(false);
|
|
30252
|
+
}
|
|
30253
|
+
}
|
|
30254
|
+
static { this.ɵfac = function PendingTasks_Factory(t) { return new (t || PendingTasks)(); }; }
|
|
30255
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: PendingTasks, factory: PendingTasks.ɵfac, providedIn: 'root' }); }
|
|
30256
|
+
}
|
|
30257
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PendingTasks, [{
|
|
30258
|
+
type: Injectable,
|
|
30259
|
+
args: [{ providedIn: 'root' }]
|
|
30260
|
+
}], null, null); })();
|
|
30261
|
+
|
|
30194
30262
|
/**
|
|
30195
30263
|
* These are the data structures that our framework injector profiler will fill with data in order
|
|
30196
30264
|
* to support DI debugging APIs.
|
|
@@ -30996,6 +31064,28 @@ function getModuleInjectorOfNodeInjector(injector) {
|
|
|
30996
31064
|
* tools are patched (window.ng).
|
|
30997
31065
|
* */
|
|
30998
31066
|
const GLOBAL_PUBLISH_EXPANDO_KEY = 'ng';
|
|
31067
|
+
const globalUtilsFunctions = {
|
|
31068
|
+
/**
|
|
31069
|
+
* Warning: functions that start with `ɵ` are considered *INTERNAL* and should not be relied upon
|
|
31070
|
+
* in application's code. The contract of those functions might be changed in any release and/or a
|
|
31071
|
+
* function can be removed completely.
|
|
31072
|
+
*/
|
|
31073
|
+
'ɵgetDependenciesFromInjectable': getDependenciesFromInjectable,
|
|
31074
|
+
'ɵgetInjectorProviders': getInjectorProviders,
|
|
31075
|
+
'ɵgetInjectorResolutionPath': getInjectorResolutionPath,
|
|
31076
|
+
'ɵgetInjectorMetadata': getInjectorMetadata,
|
|
31077
|
+
'ɵsetProfiler': setProfiler,
|
|
31078
|
+
'getDirectiveMetadata': getDirectiveMetadata$1,
|
|
31079
|
+
'getComponent': getComponent,
|
|
31080
|
+
'getContext': getContext,
|
|
31081
|
+
'getListeners': getListeners,
|
|
31082
|
+
'getOwningComponent': getOwningComponent,
|
|
31083
|
+
'getHostElement': getHostElement,
|
|
31084
|
+
'getInjector': getInjector,
|
|
31085
|
+
'getRootComponents': getRootComponents,
|
|
31086
|
+
'getDirectives': getDirectives,
|
|
31087
|
+
'applyChanges': applyChanges,
|
|
31088
|
+
};
|
|
30999
31089
|
let _published = false;
|
|
31000
31090
|
/**
|
|
31001
31091
|
* Publishes a collection of default debug tools onto`window.ng`.
|
|
@@ -31007,26 +31097,9 @@ function publishDefaultGlobalUtils$1() {
|
|
|
31007
31097
|
if (!_published) {
|
|
31008
31098
|
_published = true;
|
|
31009
31099
|
setupFrameworkInjectorProfiler();
|
|
31010
|
-
|
|
31011
|
-
|
|
31012
|
-
|
|
31013
|
-
publishGlobalUtil('ɵgetInjectorMetadata', getInjectorMetadata);
|
|
31014
|
-
/**
|
|
31015
|
-
* Warning: this function is *INTERNAL* and should not be relied upon in application's code.
|
|
31016
|
-
* The contract of the function might be changed in any release and/or the function can be
|
|
31017
|
-
* removed completely.
|
|
31018
|
-
*/
|
|
31019
|
-
publishGlobalUtil('ɵsetProfiler', setProfiler);
|
|
31020
|
-
publishGlobalUtil('getDirectiveMetadata', getDirectiveMetadata$1);
|
|
31021
|
-
publishGlobalUtil('getComponent', getComponent);
|
|
31022
|
-
publishGlobalUtil('getContext', getContext);
|
|
31023
|
-
publishGlobalUtil('getListeners', getListeners);
|
|
31024
|
-
publishGlobalUtil('getOwningComponent', getOwningComponent);
|
|
31025
|
-
publishGlobalUtil('getHostElement', getHostElement);
|
|
31026
|
-
publishGlobalUtil('getInjector', getInjector);
|
|
31027
|
-
publishGlobalUtil('getRootComponents', getRootComponents);
|
|
31028
|
-
publishGlobalUtil('getDirectives', getDirectives);
|
|
31029
|
-
publishGlobalUtil('applyChanges', applyChanges);
|
|
31100
|
+
for (const [methodName, method] of Object.entries(globalUtilsFunctions)) {
|
|
31101
|
+
publishGlobalUtil(methodName, method);
|
|
31102
|
+
}
|
|
31030
31103
|
}
|
|
31031
31104
|
}
|
|
31032
31105
|
/**
|
|
@@ -31041,13 +31114,8 @@ function publishGlobalUtil(name, fn) {
|
|
|
31041
31114
|
// for typings for AngularJS (via `goog.provide('ng....')`).
|
|
31042
31115
|
const w = _global;
|
|
31043
31116
|
ngDevMode && assertDefined(fn, 'function not defined');
|
|
31044
|
-
|
|
31045
|
-
|
|
31046
|
-
if (!container) {
|
|
31047
|
-
container = w[GLOBAL_PUBLISH_EXPANDO_KEY] = {};
|
|
31048
|
-
}
|
|
31049
|
-
container[name] = fn;
|
|
31050
|
-
}
|
|
31117
|
+
w[GLOBAL_PUBLISH_EXPANDO_KEY] ??= {};
|
|
31118
|
+
w[GLOBAL_PUBLISH_EXPANDO_KEY][name] = fn;
|
|
31051
31119
|
}
|
|
31052
31120
|
}
|
|
31053
31121
|
|
|
@@ -31091,13 +31159,6 @@ class Testability {
|
|
|
31091
31159
|
this.registry = registry;
|
|
31092
31160
|
this._pendingCount = 0;
|
|
31093
31161
|
this._isZoneStable = true;
|
|
31094
|
-
/**
|
|
31095
|
-
* Whether any work was done since the last 'whenStable' callback. This is
|
|
31096
|
-
* useful to detect if this could have potentially destabilized another
|
|
31097
|
-
* component while it is stabilizing.
|
|
31098
|
-
* @internal
|
|
31099
|
-
*/
|
|
31100
|
-
this._didWork = false;
|
|
31101
31162
|
this._callbacks = [];
|
|
31102
31163
|
this.taskTrackingZone = null;
|
|
31103
31164
|
// If there was no Testability logic registered in the global scope
|
|
@@ -31115,7 +31176,6 @@ class Testability {
|
|
|
31115
31176
|
_watchAngularEvents() {
|
|
31116
31177
|
this._ngZone.onUnstable.subscribe({
|
|
31117
31178
|
next: () => {
|
|
31118
|
-
this._didWork = true;
|
|
31119
31179
|
this._isZoneStable = false;
|
|
31120
31180
|
}
|
|
31121
31181
|
});
|
|
@@ -31137,7 +31197,6 @@ class Testability {
|
|
|
31137
31197
|
*/
|
|
31138
31198
|
increasePendingRequestCount() {
|
|
31139
31199
|
this._pendingCount += 1;
|
|
31140
|
-
this._didWork = true;
|
|
31141
31200
|
return this._pendingCount;
|
|
31142
31201
|
}
|
|
31143
31202
|
/**
|
|
@@ -31165,9 +31224,8 @@ class Testability {
|
|
|
31165
31224
|
while (this._callbacks.length !== 0) {
|
|
31166
31225
|
let cb = this._callbacks.pop();
|
|
31167
31226
|
clearTimeout(cb.timeoutId);
|
|
31168
|
-
cb.doneCb(
|
|
31227
|
+
cb.doneCb();
|
|
31169
31228
|
}
|
|
31170
|
-
this._didWork = false;
|
|
31171
31229
|
});
|
|
31172
31230
|
}
|
|
31173
31231
|
else {
|
|
@@ -31180,7 +31238,6 @@ class Testability {
|
|
|
31180
31238
|
}
|
|
31181
31239
|
return true;
|
|
31182
31240
|
});
|
|
31183
|
-
this._didWork = true;
|
|
31184
31241
|
}
|
|
31185
31242
|
}
|
|
31186
31243
|
getPendingTasks() {
|
|
@@ -31203,7 +31260,7 @@ class Testability {
|
|
|
31203
31260
|
if (timeout && timeout > 0) {
|
|
31204
31261
|
timeoutId = setTimeout(() => {
|
|
31205
31262
|
this._callbacks = this._callbacks.filter((cb) => cb.timeoutId !== timeoutId);
|
|
31206
|
-
cb(
|
|
31263
|
+
cb();
|
|
31207
31264
|
}, timeout);
|
|
31208
31265
|
}
|
|
31209
31266
|
this._callbacks.push({ doneCb: cb, timeoutId: timeoutId, updateCb: updateCb });
|
|
@@ -31225,7 +31282,6 @@ class Testability {
|
|
|
31225
31282
|
throw new Error('Task tracking zone is required when passing an update callback to ' +
|
|
31226
31283
|
'whenStable(). Is "zone.js/plugins/task-tracking" loaded?');
|
|
31227
31284
|
}
|
|
31228
|
-
// These arguments are 'Function' above to keep the public API simple.
|
|
31229
31285
|
this.addCallback(doneCb, timeout, updateCb);
|
|
31230
31286
|
this._runCallbacksIfReady();
|
|
31231
31287
|
}
|
|
@@ -31734,7 +31790,7 @@ class ApplicationRef {
|
|
|
31734
31790
|
/** @internal */
|
|
31735
31791
|
this._views = [];
|
|
31736
31792
|
this.internalErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);
|
|
31737
|
-
this.
|
|
31793
|
+
this.afterRenderEffectManager = inject(AfterRenderEventManager);
|
|
31738
31794
|
/**
|
|
31739
31795
|
* Get a list of component types registered to this application.
|
|
31740
31796
|
* This list is populated even before the component is created.
|
|
@@ -31747,8 +31803,7 @@ class ApplicationRef {
|
|
|
31747
31803
|
/**
|
|
31748
31804
|
* Returns an Observable that indicates when the application is stable or unstable.
|
|
31749
31805
|
*/
|
|
31750
|
-
this.isStable = inject(
|
|
31751
|
-
.hasPendingTasks.pipe(switchMap(hasPendingTasks => hasPendingTasks ? of(false) : this.zoneIsStable), distinctUntilChanged());
|
|
31806
|
+
this.isStable = inject(PendingTasks).hasPendingTasks.pipe(map(pending => !pending));
|
|
31752
31807
|
this._injector = inject(EnvironmentInjector);
|
|
31753
31808
|
}
|
|
31754
31809
|
/**
|
|
@@ -31806,10 +31861,12 @@ class ApplicationRef {
|
|
|
31806
31861
|
const initStatus = this._injector.get(ApplicationInitStatus);
|
|
31807
31862
|
if (!initStatus.done) {
|
|
31808
31863
|
const standalone = !isComponentFactory && isStandalone(componentOrFactory);
|
|
31809
|
-
const errorMessage =
|
|
31810
|
-
|
|
31811
|
-
|
|
31812
|
-
|
|
31864
|
+
const errorMessage = (typeof ngDevMode === 'undefined' || ngDevMode) &&
|
|
31865
|
+
'Cannot bootstrap as there are still asynchronous initializers running.' +
|
|
31866
|
+
(standalone ?
|
|
31867
|
+
'' :
|
|
31868
|
+
' Bootstrap components in the `ngDoBootstrap` method of the root module.');
|
|
31869
|
+
throw new RuntimeError(405 /* RuntimeErrorCode.ASYNC_INITIALIZERS_STILL_RUNNING */, errorMessage);
|
|
31813
31870
|
}
|
|
31814
31871
|
let componentFactory;
|
|
31815
31872
|
if (isComponentFactory) {
|
|
@@ -31870,6 +31927,18 @@ class ApplicationRef {
|
|
|
31870
31927
|
this.internalErrorHandler(e);
|
|
31871
31928
|
}
|
|
31872
31929
|
finally {
|
|
31930
|
+
// Catch any `ExpressionChanged...` errors and report them to error handler like above
|
|
31931
|
+
try {
|
|
31932
|
+
const callbacksExecuted = this.afterRenderEffectManager.execute();
|
|
31933
|
+
if ((typeof ngDevMode === 'undefined' || ngDevMode) && callbacksExecuted) {
|
|
31934
|
+
for (let view of this._views) {
|
|
31935
|
+
view.checkNoChanges();
|
|
31936
|
+
}
|
|
31937
|
+
}
|
|
31938
|
+
}
|
|
31939
|
+
catch (e) {
|
|
31940
|
+
this.internalErrorHandler(e);
|
|
31941
|
+
}
|
|
31873
31942
|
this._runningTick = false;
|
|
31874
31943
|
}
|
|
31875
31944
|
}
|
|
@@ -32052,8 +32121,17 @@ function internalProvideZoneChangeDetection(ngZoneFactory) {
|
|
|
32052
32121
|
return () => ngZoneChangeDetectionScheduler.initialize();
|
|
32053
32122
|
},
|
|
32054
32123
|
},
|
|
32124
|
+
{
|
|
32125
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
32126
|
+
multi: true,
|
|
32127
|
+
useFactory: () => {
|
|
32128
|
+
const service = inject(ZoneStablePendingTask);
|
|
32129
|
+
return () => {
|
|
32130
|
+
service.initialize();
|
|
32131
|
+
};
|
|
32132
|
+
}
|
|
32133
|
+
},
|
|
32055
32134
|
{ provide: INTERNAL_APPLICATION_ERROR_HANDLER, useFactory: ngZoneApplicationErrorHandlerFactory },
|
|
32056
|
-
{ provide: ZONE_IS_STABLE_OBSERVABLE, useFactory: isStableFactory },
|
|
32057
32135
|
];
|
|
32058
32136
|
}
|
|
32059
32137
|
function ngZoneApplicationErrorHandlerFactory() {
|
|
@@ -32099,6 +32177,50 @@ function getNgZoneOptions(options) {
|
|
|
32099
32177
|
shouldCoalesceRunChangeDetection: options?.runCoalescing ?? false,
|
|
32100
32178
|
};
|
|
32101
32179
|
}
|
|
32180
|
+
class ZoneStablePendingTask {
|
|
32181
|
+
constructor() {
|
|
32182
|
+
this.subscription = new Subscription();
|
|
32183
|
+
this.initialized = false;
|
|
32184
|
+
this.zone = inject(NgZone);
|
|
32185
|
+
this.pendingTasks = inject(PendingTasks);
|
|
32186
|
+
}
|
|
32187
|
+
initialize() {
|
|
32188
|
+
if (this.initialized) {
|
|
32189
|
+
return;
|
|
32190
|
+
}
|
|
32191
|
+
this.initialized = true;
|
|
32192
|
+
let task = null;
|
|
32193
|
+
if (!this.zone.isStable && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {
|
|
32194
|
+
task = this.pendingTasks.add();
|
|
32195
|
+
}
|
|
32196
|
+
this.zone.runOutsideAngular(() => {
|
|
32197
|
+
this.subscription.add(this.zone.onStable.subscribe(() => {
|
|
32198
|
+
NgZone.assertNotInAngularZone();
|
|
32199
|
+
// Check whether there are no pending macro/micro tasks in the next tick
|
|
32200
|
+
// to allow for NgZone to update the state.
|
|
32201
|
+
queueMicrotask(() => {
|
|
32202
|
+
if (task !== null && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {
|
|
32203
|
+
this.pendingTasks.remove(task);
|
|
32204
|
+
task = null;
|
|
32205
|
+
}
|
|
32206
|
+
});
|
|
32207
|
+
}));
|
|
32208
|
+
});
|
|
32209
|
+
this.subscription.add(this.zone.onUnstable.subscribe(() => {
|
|
32210
|
+
NgZone.assertInAngularZone();
|
|
32211
|
+
task ??= this.pendingTasks.add();
|
|
32212
|
+
}));
|
|
32213
|
+
}
|
|
32214
|
+
ngOnDestroy() {
|
|
32215
|
+
this.subscription.unsubscribe();
|
|
32216
|
+
}
|
|
32217
|
+
static { this.ɵfac = function ZoneStablePendingTask_Factory(t) { return new (t || ZoneStablePendingTask)(); }; }
|
|
32218
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ZoneStablePendingTask, factory: ZoneStablePendingTask.ɵfac, providedIn: 'root' }); }
|
|
32219
|
+
}
|
|
32220
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ZoneStablePendingTask, [{
|
|
32221
|
+
type: Injectable,
|
|
32222
|
+
args: [{ providedIn: 'root' }]
|
|
32223
|
+
}], null, null); })();
|
|
32102
32224
|
|
|
32103
32225
|
/**
|
|
32104
32226
|
* Work out the locale from the potential global properties.
|
|
@@ -33720,14 +33842,6 @@ function signalUpdateFn(node, updater) {
|
|
|
33720
33842
|
}
|
|
33721
33843
|
signalSetFn(node, updater(node.value));
|
|
33722
33844
|
}
|
|
33723
|
-
function signalMutateFn(node, mutator) {
|
|
33724
|
-
if (!producerUpdatesAllowed()) {
|
|
33725
|
-
throwInvalidWriteToSignalError();
|
|
33726
|
-
}
|
|
33727
|
-
// Mutate bypasses equality checks as it's by definition changing the value.
|
|
33728
|
-
mutator(node.value);
|
|
33729
|
-
signalValueChanged(node);
|
|
33730
|
-
}
|
|
33731
33845
|
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
33732
33846
|
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
33733
33847
|
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
@@ -34061,6 +34175,49 @@ function internalCreateApplication(config) {
|
|
|
34061
34175
|
}
|
|
34062
34176
|
}
|
|
34063
34177
|
|
|
34178
|
+
class ChangeDetectionSchedulerImpl {
|
|
34179
|
+
constructor() {
|
|
34180
|
+
this.appRef = inject(ApplicationRef);
|
|
34181
|
+
this.taskService = inject(PendingTasks);
|
|
34182
|
+
this.pendingRenderTaskId = null;
|
|
34183
|
+
}
|
|
34184
|
+
notify() {
|
|
34185
|
+
if (this.pendingRenderTaskId !== null)
|
|
34186
|
+
return;
|
|
34187
|
+
this.pendingRenderTaskId = this.taskService.add();
|
|
34188
|
+
setTimeout(() => {
|
|
34189
|
+
try {
|
|
34190
|
+
if (!this.appRef.destroyed) {
|
|
34191
|
+
this.appRef.tick();
|
|
34192
|
+
}
|
|
34193
|
+
}
|
|
34194
|
+
finally {
|
|
34195
|
+
// If this is the last task, the service will synchronously emit a stable notification. If
|
|
34196
|
+
// there is a subscriber that then acts in a way that tries to notify the scheduler again,
|
|
34197
|
+
// we need to be able to respond to schedule a new change detection. Therefore, we should
|
|
34198
|
+
// clear the task ID before removing it from the pending tasks (or the tasks service should
|
|
34199
|
+
// not synchronously emit stable, similar to how Zone stableness only happens if it's still
|
|
34200
|
+
// stable after a microtask).
|
|
34201
|
+
const taskId = this.pendingRenderTaskId;
|
|
34202
|
+
this.pendingRenderTaskId = null;
|
|
34203
|
+
this.taskService.remove(taskId);
|
|
34204
|
+
}
|
|
34205
|
+
});
|
|
34206
|
+
}
|
|
34207
|
+
static { this.ɵfac = function ChangeDetectionSchedulerImpl_Factory(t) { return new (t || ChangeDetectionSchedulerImpl)(); }; }
|
|
34208
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ChangeDetectionSchedulerImpl, factory: ChangeDetectionSchedulerImpl.ɵfac, providedIn: 'root' }); }
|
|
34209
|
+
}
|
|
34210
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ChangeDetectionSchedulerImpl, [{
|
|
34211
|
+
type: Injectable,
|
|
34212
|
+
args: [{ providedIn: 'root' }]
|
|
34213
|
+
}], null, null); })();
|
|
34214
|
+
function provideZonelessChangeDetection() {
|
|
34215
|
+
return makeEnvironmentProviders([
|
|
34216
|
+
{ provide: ChangeDetectionScheduler, useExisting: ChangeDetectionSchedulerImpl },
|
|
34217
|
+
{ provide: NgZone, useClass: NoopNgZone },
|
|
34218
|
+
]);
|
|
34219
|
+
}
|
|
34220
|
+
|
|
34064
34221
|
/**
|
|
34065
34222
|
* Retrieves all defer blocks in a given LView.
|
|
34066
34223
|
*
|
|
@@ -35113,5 +35270,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
|
35113
35270
|
* Generated bundle index. Do not edit.
|
|
35114
35271
|
*/
|
|
35115
35272
|
|
|
35116
|
-
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, HostBinding, HostListener, 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, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, afterNextRender, afterRender, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, numberAttribute, platformCore, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderEventManager as ɵAfterRenderEventManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, InitialRenderPendingTasks as ɵInitialRenderPendingTasks, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, 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, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZoneAwareQueueingScheduler as ɵZoneAwareQueueingScheduler, _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, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, input as ɵinput, inputFunction as ɵinputFunctionForApiGuard, inputRequiredFunction as ɵinputFunctionRequiredForApiGuard, internalAfterNextRender as ɵinternalAfterNextRender, internalCreateApplication as ɵinternalCreateApplication, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, publishDefaultGlobalUtils$1 as ɵpublishDefaultGlobalUtils, publishGlobalUtil as ɵpublishGlobalUtil, 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, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, whenStable as ɵwhenStable, withDomHydration as ɵwithDomHydration, ɵɵCopyDefinitionFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵStandaloneFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵ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, ɵɵ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, ɵɵqueryRefresh, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵ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, ɵɵvalidateIframeAttribute, ɵɵviewQuery };
|
|
35273
|
+
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, HostBinding, HostListener, 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, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, afterNextRender, afterRender, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, numberAttribute, platformCore, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderEventManager as ɵAfterRenderEventManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, 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, PendingTasks as ɵPendingTasks, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZoneAwareQueueingScheduler as ɵZoneAwareQueueingScheduler, _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, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getEnsureDirtyViewsAreAlwaysReachable as ɵgetEnsureDirtyViewsAreAlwaysReachable, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalAfterNextRender as ɵinternalAfterNextRender, internalCreateApplication as ɵinternalCreateApplication, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, provideZonelessChangeDetection as ɵprovideZonelessChangeDetection, 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, setEnsureDirtyViewsAreAlwaysReachable as ɵsetEnsureDirtyViewsAreAlwaysReachable, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, whenStable as ɵwhenStable, withDomHydration as ɵwithDomHydration, ɵɵCopyDefinitionFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, InputFlags as ɵɵInputFlags, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵStandaloneFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵ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, ɵɵ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, ɵɵqueryRefresh, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵ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, ɵɵvalidateIframeAttribute, ɵɵviewQuery };
|
|
35117
35274
|
//# sourceMappingURL=core.mjs.map
|