@angular/core 17.1.0-next.5 → 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 +21 -5
- 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/scheduling/zoneless_scheduling_impl.mjs +56 -0
- package/esm2022/src/compiler/compiler_facade_interface.mjs +1 -1
- package/esm2022/src/core.mjs +2 -2
- package/esm2022/src/core_private_export.mjs +2 -1
- 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/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/render3/after_render_hooks.mjs +15 -33
- 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 +13 -6
- 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/listener.mjs +1 -1
- package/esm2022/src/render3/instructions/mark_view_dirty.mjs +2 -2
- package/esm2022/src/render3/instructions/shared.mjs +61 -58
- 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/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 +19 -15
- package/esm2022/src/testability/testability.mjs +3 -15
- package/esm2022/src/util/empty.mjs +1 -1
- package/esm2022/src/version.mjs +1 -1
- package/esm2022/testing/src/component_fixture.mjs +62 -58
- package/esm2022/testing/src/logger.mjs +3 -3
- package/fesm2022/core.mjs +527 -408
- 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 +637 -230
- 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 +121 -116
- package/schematics/migrations/block-template-entities/bundle.js.map +4 -4
- package/schematics/ng-generate/control-flow-migration/bundle.js +122 -117
- package/schematics/ng-generate/control-flow-migration/bundle.js.map +4 -4
- package/schematics/ng-generate/standalone-migration/bundle.js +414 -360
- package/schematics/ng-generate/standalone-migration/bundle.js.map +4 -4
- package/testing/index.d.ts +6 -2
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 {
|
|
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
8
|
import { Subject, Subscription, BehaviorSubject } from 'rxjs';
|
|
9
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;
|
|
13
104
|
}
|
|
14
|
-
|
|
15
|
-
|
|
105
|
+
|
|
106
|
+
function inputFunction(initialValue, opts) {
|
|
107
|
+
return createInputSignal(initialValue, opts);
|
|
108
|
+
}
|
|
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.
|
|
2022
|
+
}
|
|
2023
|
+
else {
|
|
2024
|
+
publicName = value;
|
|
2025
|
+
declaredName = value;
|
|
2024
2026
|
}
|
|
2025
|
-
|
|
2026
|
-
if (
|
|
2027
|
-
|
|
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) {
|
|
@@ -2804,24 +2816,18 @@ function updateAncestorTraversalFlagsOnAttach(lView) {
|
|
|
2804
2816
|
*/
|
|
2805
2817
|
function markAncestorsForTraversal(lView) {
|
|
2806
2818
|
lView[ENVIRONMENT].changeDetectionScheduler?.notify();
|
|
2807
|
-
let parent = lView
|
|
2819
|
+
let parent = getLViewParent(lView);
|
|
2808
2820
|
while (parent !== null) {
|
|
2809
2821
|
// We stop adding markers to the ancestors once we reach one that already has the marker. This
|
|
2810
2822
|
// is to avoid needlessly traversing all the way to the root when the marker already exists.
|
|
2811
|
-
if (
|
|
2812
|
-
(isLView(parent) && parent[FLAGS] & 8192 /* LViewFlags.HasChildViewsToRefresh */))) {
|
|
2823
|
+
if (parent[FLAGS] & 8192 /* LViewFlags.HasChildViewsToRefresh */) {
|
|
2813
2824
|
break;
|
|
2814
2825
|
}
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
|
|
2818
|
-
else {
|
|
2819
|
-
parent[FLAGS] |= 8192 /* LViewFlags.HasChildViewsToRefresh */;
|
|
2820
|
-
if (!viewAttachedToChangeDetector(parent)) {
|
|
2821
|
-
break;
|
|
2822
|
-
}
|
|
2826
|
+
parent[FLAGS] |= 8192 /* LViewFlags.HasChildViewsToRefresh */;
|
|
2827
|
+
if (!viewAttachedToChangeDetector(parent)) {
|
|
2828
|
+
break;
|
|
2823
2829
|
}
|
|
2824
|
-
parent = parent
|
|
2830
|
+
parent = getLViewParent(parent);
|
|
2825
2831
|
}
|
|
2826
2832
|
}
|
|
2827
2833
|
/**
|
|
@@ -2847,6 +2853,16 @@ function removeLViewOnDestroy(lView, onDestroyCallback) {
|
|
|
2847
2853
|
lView[ON_DESTROY_HOOKS].splice(destroyCBIdx, 1);
|
|
2848
2854
|
}
|
|
2849
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
|
+
}
|
|
2850
2866
|
|
|
2851
2867
|
const instructionState = {
|
|
2852
2868
|
lFrame: createLFrame(null),
|
|
@@ -3839,11 +3855,12 @@ function hasParentInjector(parentLocation) {
|
|
|
3839
3855
|
return parentLocation !== NO_PARENT_INJECTOR;
|
|
3840
3856
|
}
|
|
3841
3857
|
function getParentInjectorIndex(parentLocation) {
|
|
3842
|
-
|
|
3843
|
-
|
|
3844
|
-
|
|
3845
|
-
|
|
3858
|
+
if (ngDevMode) {
|
|
3859
|
+
assertNumber(parentLocation, 'Number expected');
|
|
3860
|
+
assertNotEqual(parentLocation, -1, 'Not a valid state.');
|
|
3861
|
+
const parentInjectorIndex = parentLocation & 32767 /* RelativeInjectorLocationFlags.InjectorIndexMask */;
|
|
3846
3862
|
assertGreaterThan(parentInjectorIndex, HEADER_OFFSET, 'Parent injector must be pointing past HEADER_OFFSET.');
|
|
3863
|
+
}
|
|
3847
3864
|
return parentLocation & 32767 /* RelativeInjectorLocationFlags.InjectorIndexMask */;
|
|
3848
3865
|
}
|
|
3849
3866
|
function getParentInjectorViewOffset(parentLocation) {
|
|
@@ -6210,9 +6227,11 @@ class R3Injector extends EnvironmentInjector {
|
|
|
6210
6227
|
multiRecord.multi.push(provider);
|
|
6211
6228
|
}
|
|
6212
6229
|
else {
|
|
6213
|
-
|
|
6214
|
-
|
|
6215
|
-
|
|
6230
|
+
if (ngDevMode) {
|
|
6231
|
+
const existing = this.records.get(token);
|
|
6232
|
+
if (existing && existing.multi !== undefined) {
|
|
6233
|
+
throwMixedMultiProviderError();
|
|
6234
|
+
}
|
|
6216
6235
|
}
|
|
6217
6236
|
}
|
|
6218
6237
|
this.records.set(token, record);
|
|
@@ -6280,8 +6299,8 @@ function getUndecoratedInjectableFactory(token) {
|
|
|
6280
6299
|
// If the token has parameters then it has dependencies that we cannot resolve implicitly.
|
|
6281
6300
|
const paramLength = token.length;
|
|
6282
6301
|
if (paramLength > 0) {
|
|
6283
|
-
|
|
6284
|
-
|
|
6302
|
+
throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode &&
|
|
6303
|
+
`Can't resolve all parameters for ${stringify(token)}: (${newArray(paramLength, '?').join(', ')}).`);
|
|
6285
6304
|
}
|
|
6286
6305
|
// The constructor function appears to have no parameters.
|
|
6287
6306
|
// This might be because it inherits from a super-class. In which case, use an injectable
|
|
@@ -7975,63 +7994,6 @@ function ensureIcuContainerVisitorLoaded(loader) {
|
|
|
7975
7994
|
}
|
|
7976
7995
|
}
|
|
7977
7996
|
|
|
7978
|
-
/**
|
|
7979
|
-
* Gets the parent LView of the passed LView, if the PARENT is an LContainer, will get the parent of
|
|
7980
|
-
* that LContainer, which is an LView
|
|
7981
|
-
* @param lView the lView whose parent to get
|
|
7982
|
-
*/
|
|
7983
|
-
function getLViewParent(lView) {
|
|
7984
|
-
ngDevMode && assertLView(lView);
|
|
7985
|
-
const parent = lView[PARENT];
|
|
7986
|
-
return isLContainer(parent) ? parent[PARENT] : parent;
|
|
7987
|
-
}
|
|
7988
|
-
/**
|
|
7989
|
-
* Retrieve the root view from any component or `LView` by walking the parent `LView` until
|
|
7990
|
-
* reaching the root `LView`.
|
|
7991
|
-
*
|
|
7992
|
-
* @param componentOrLView any component or `LView`
|
|
7993
|
-
*/
|
|
7994
|
-
function getRootView(componentOrLView) {
|
|
7995
|
-
ngDevMode && assertDefined(componentOrLView, 'component');
|
|
7996
|
-
let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);
|
|
7997
|
-
while (lView && !(lView[FLAGS] & 512 /* LViewFlags.IsRoot */)) {
|
|
7998
|
-
lView = getLViewParent(lView);
|
|
7999
|
-
}
|
|
8000
|
-
ngDevMode && assertLView(lView);
|
|
8001
|
-
return lView;
|
|
8002
|
-
}
|
|
8003
|
-
/**
|
|
8004
|
-
* Returns the context information associated with the application where the target is situated. It
|
|
8005
|
-
* does this by walking the parent views until it gets to the root view, then getting the context
|
|
8006
|
-
* off of that.
|
|
8007
|
-
*
|
|
8008
|
-
* @param viewOrComponent the `LView` or component to get the root context for.
|
|
8009
|
-
*/
|
|
8010
|
-
function getRootContext(viewOrComponent) {
|
|
8011
|
-
const rootView = getRootView(viewOrComponent);
|
|
8012
|
-
ngDevMode &&
|
|
8013
|
-
assertDefined(rootView[CONTEXT], 'Root view has no context. Perhaps it is disconnected?');
|
|
8014
|
-
return rootView[CONTEXT];
|
|
8015
|
-
}
|
|
8016
|
-
/**
|
|
8017
|
-
* Gets the first `LContainer` in the LView or `null` if none exists.
|
|
8018
|
-
*/
|
|
8019
|
-
function getFirstLContainer(lView) {
|
|
8020
|
-
return getNearestLContainer(lView[CHILD_HEAD]);
|
|
8021
|
-
}
|
|
8022
|
-
/**
|
|
8023
|
-
* Gets the next `LContainer` that is a sibling of the given container.
|
|
8024
|
-
*/
|
|
8025
|
-
function getNextLContainer(container) {
|
|
8026
|
-
return getNearestLContainer(container[NEXT]);
|
|
8027
|
-
}
|
|
8028
|
-
function getNearestLContainer(viewOrContainer) {
|
|
8029
|
-
while (viewOrContainer !== null && !isLContainer(viewOrContainer)) {
|
|
8030
|
-
viewOrContainer = viewOrContainer[NEXT];
|
|
8031
|
-
}
|
|
8032
|
-
return viewOrContainer;
|
|
8033
|
-
}
|
|
8034
|
-
|
|
8035
7997
|
/**
|
|
8036
7998
|
* NOTE: for performance reasons, the possible actions are inlined within the function instead of
|
|
8037
7999
|
* being passed as an argument.
|
|
@@ -8114,8 +8076,7 @@ function createElementNode(renderer, name, namespace) {
|
|
|
8114
8076
|
* @param lView The view from which elements should be added or removed
|
|
8115
8077
|
*/
|
|
8116
8078
|
function removeViewFromDOM(tView, lView) {
|
|
8117
|
-
|
|
8118
|
-
applyView(tView, lView, renderer, 2 /* WalkTNodeTreeAction.Detach */, null, null);
|
|
8079
|
+
detachViewFromDOM(tView, lView);
|
|
8119
8080
|
lView[HOST] = null;
|
|
8120
8081
|
lView[T_HOST] = null;
|
|
8121
8082
|
}
|
|
@@ -8145,6 +8106,9 @@ function addViewToDOM(tView, parentTNode, renderer, lView, parentNativeNode, bef
|
|
|
8145
8106
|
* @param lView the `LView` to be detached.
|
|
8146
8107
|
*/
|
|
8147
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();
|
|
8148
8112
|
applyView(tView, lView, lView[RENDERER], 2 /* WalkTNodeTreeAction.Detach */, null, null);
|
|
8149
8113
|
}
|
|
8150
8114
|
/**
|
|
@@ -8276,8 +8240,7 @@ function detachMovedView(declarationContainer, lView) {
|
|
|
8276
8240
|
assertDefined(declarationContainer[MOVED_VIEWS], 'A projected view should belong to a non-empty projected views collection');
|
|
8277
8241
|
const movedViews = declarationContainer[MOVED_VIEWS];
|
|
8278
8242
|
const declarationViewIndex = movedViews.indexOf(lView);
|
|
8279
|
-
|
|
8280
|
-
ngDevMode && assertLContainer(insertionLContainer);
|
|
8243
|
+
ngDevMode && assertLContainer(lView[PARENT]);
|
|
8281
8244
|
movedViews.splice(declarationViewIndex, 1);
|
|
8282
8245
|
}
|
|
8283
8246
|
/**
|
|
@@ -10087,7 +10050,7 @@ const SSR_CONTENT_INTEGRITY_MARKER = 'nghm';
|
|
|
10087
10050
|
* @param injector Injector that this component has access to.
|
|
10088
10051
|
* @param isRootView Specifies whether we trying to read hydration info for the root view.
|
|
10089
10052
|
*/
|
|
10090
|
-
let _retrieveHydrationInfoImpl = (
|
|
10053
|
+
let _retrieveHydrationInfoImpl = () => null;
|
|
10091
10054
|
function retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {
|
|
10092
10055
|
let nghAttrValue = rNode.getAttribute(NGH_ATTR_NAME);
|
|
10093
10056
|
if (nghAttrValue == null)
|
|
@@ -11751,6 +11714,53 @@ const REACTIVE_LVIEW_CONSUMER_NODE = {
|
|
|
11751
11714
|
},
|
|
11752
11715
|
};
|
|
11753
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
|
+
|
|
11754
11764
|
const ERROR_ORIGINAL_ERROR = 'ngOriginalError';
|
|
11755
11765
|
function wrappedError(message, originalError) {
|
|
11756
11766
|
const msg = `${message} caused by: ${originalError instanceof Error ? originalError.message : originalError}`;
|
|
@@ -11992,7 +12002,7 @@ const NO_CHANGE = (typeof ngDevMode === 'undefined' || ngDevMode) ? { __brand__:
|
|
|
11992
12002
|
*
|
|
11993
12003
|
* @codeGenApi
|
|
11994
12004
|
*/
|
|
11995
|
-
function ɵɵadvance(delta) {
|
|
12005
|
+
function ɵɵadvance(delta = 1) {
|
|
11996
12006
|
ngDevMode && assertGreaterThan(delta, 0, 'Can only advance forward');
|
|
11997
12007
|
selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, !!ngDevMode && isInCheckNoChangesMode());
|
|
11998
12008
|
}
|
|
@@ -12053,6 +12063,39 @@ function ɵɵinvalidFactory() {
|
|
|
12053
12063
|
throw new Error(msg);
|
|
12054
12064
|
}
|
|
12055
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
|
+
|
|
12056
12099
|
/**
|
|
12057
12100
|
* Invoke `HostBindingsFunction`s for view.
|
|
12058
12101
|
*
|
|
@@ -12402,7 +12445,7 @@ function applyRootElementTransform(rootElement) {
|
|
|
12402
12445
|
*
|
|
12403
12446
|
* @param rootElement the app root HTML Element
|
|
12404
12447
|
*/
|
|
12405
|
-
let _applyRootElementTransformImpl = (
|
|
12448
|
+
let _applyRootElementTransformImpl = () => null;
|
|
12406
12449
|
/**
|
|
12407
12450
|
* Processes text node markers before hydration begins. This replaces any special comment
|
|
12408
12451
|
* nodes that were added prior to serialization are swapped out to restore proper text
|
|
@@ -12509,42 +12552,61 @@ function createTNode(tView, tParent, type, index, value, attrs) {
|
|
|
12509
12552
|
}
|
|
12510
12553
|
return tNode;
|
|
12511
12554
|
}
|
|
12512
|
-
|
|
12513
|
-
* Generates the `PropertyAliases` data structure from the provided input/output mapping.
|
|
12514
|
-
* @param aliasMap Input/output mapping from the directive definition.
|
|
12515
|
-
* @param directiveIndex Index of the directive.
|
|
12516
|
-
* @param propertyAliases Object in which to store the results.
|
|
12517
|
-
* @param hostDirectiveAliasMap Object used to alias or filter out properties for host directives.
|
|
12518
|
-
* If the mapping is provided, it'll act as an allowlist, as well as a mapping of what public
|
|
12519
|
-
* name inputs/outputs should be exposed under.
|
|
12520
|
-
*/
|
|
12521
|
-
function generatePropertyAliases(aliasMap, directiveIndex, propertyAliases, hostDirectiveAliasMap) {
|
|
12555
|
+
function captureNodeBindings(mode, aliasMap, directiveIndex, bindingsResult, hostDirectiveAliasMap) {
|
|
12522
12556
|
for (let publicName in aliasMap) {
|
|
12523
|
-
if (aliasMap.hasOwnProperty(publicName)) {
|
|
12524
|
-
|
|
12525
|
-
|
|
12526
|
-
|
|
12527
|
-
|
|
12528
|
-
|
|
12529
|
-
|
|
12530
|
-
|
|
12531
|
-
|
|
12532
|
-
|
|
12533
|
-
|
|
12534
|
-
|
|
12535
|
-
|
|
12536
|
-
|
|
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;
|
|
12537
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);
|
|
12538
12596
|
}
|
|
12539
12597
|
}
|
|
12540
|
-
return
|
|
12598
|
+
return bindingsResult;
|
|
12541
12599
|
}
|
|
12542
|
-
function
|
|
12543
|
-
|
|
12544
|
-
|
|
12600
|
+
function addPropertyBinding(bindings, directiveIndex, publicName, internalName, inputFlags) {
|
|
12601
|
+
let values;
|
|
12602
|
+
if (bindings.hasOwnProperty(publicName)) {
|
|
12603
|
+
(values = bindings[publicName]).push(directiveIndex, internalName);
|
|
12545
12604
|
}
|
|
12546
12605
|
else {
|
|
12547
|
-
|
|
12606
|
+
values = bindings[publicName] = [directiveIndex, internalName];
|
|
12607
|
+
}
|
|
12608
|
+
if (inputFlags !== undefined) {
|
|
12609
|
+
values.push(inputFlags);
|
|
12548
12610
|
}
|
|
12549
12611
|
}
|
|
12550
12612
|
/**
|
|
@@ -12565,10 +12627,8 @@ function initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefinitionMa
|
|
|
12565
12627
|
const aliasData = hostDirectiveDefinitionMap ? hostDirectiveDefinitionMap.get(directiveDef) : null;
|
|
12566
12628
|
const aliasedInputs = aliasData ? aliasData.inputs : null;
|
|
12567
12629
|
const aliasedOutputs = aliasData ? aliasData.outputs : null;
|
|
12568
|
-
inputsStore =
|
|
12569
|
-
|
|
12570
|
-
outputsStore =
|
|
12571
|
-
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);
|
|
12572
12632
|
// Do not use unbound attributes as inputs to structural directives, since structural
|
|
12573
12633
|
// directive inputs can only be set using microsyntax (e.g. `<div *dir="exp">`).
|
|
12574
12634
|
// TODO(FW-1930): microsyntax expressions may also contain unbound/static attributes, which
|
|
@@ -12685,7 +12745,7 @@ function setNgReflectProperties(lView, element, type, dataValue, value) {
|
|
|
12685
12745
|
* e.g. [0, 'change', 'change-minified']
|
|
12686
12746
|
* we want to set the reflected property with the privateName: dataValue[i+1]
|
|
12687
12747
|
*/
|
|
12688
|
-
for (let i = 0; i < dataValue.length; i +=
|
|
12748
|
+
for (let i = 0; i < dataValue.length; i += 3) {
|
|
12689
12749
|
setNgReflectProperty(lView, element, type, dataValue[i + 1], value);
|
|
12690
12750
|
}
|
|
12691
12751
|
}
|
|
@@ -13077,8 +13137,9 @@ function setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initial
|
|
|
13077
13137
|
for (let i = 0; i < initialInputs.length;) {
|
|
13078
13138
|
const publicName = initialInputs[i++];
|
|
13079
13139
|
const privateName = initialInputs[i++];
|
|
13140
|
+
const flags = initialInputs[i++];
|
|
13080
13141
|
const value = initialInputs[i++];
|
|
13081
|
-
writeToDirectiveInput(def, instance, publicName, privateName, value);
|
|
13142
|
+
writeToDirectiveInput(def, instance, publicName, privateName, flags, value);
|
|
13082
13143
|
if (ngDevMode) {
|
|
13083
13144
|
const nativeElement = getNativeByTNode(tNode, lView);
|
|
13084
13145
|
setNgReflectProperty(lView, nativeElement, tNode.type, privateName, value);
|
|
@@ -13086,24 +13147,6 @@ function setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initial
|
|
|
13086
13147
|
}
|
|
13087
13148
|
}
|
|
13088
13149
|
}
|
|
13089
|
-
function writeToDirectiveInput(def, instance, publicName, privateName, value) {
|
|
13090
|
-
const prevConsumer = setActiveConsumer$1(null);
|
|
13091
|
-
try {
|
|
13092
|
-
const inputTransforms = def.inputTransforms;
|
|
13093
|
-
if (inputTransforms !== null && inputTransforms.hasOwnProperty(privateName)) {
|
|
13094
|
-
value = inputTransforms[privateName].call(instance, value);
|
|
13095
|
-
}
|
|
13096
|
-
if (def.setInput !== null) {
|
|
13097
|
-
def.setInput(instance, value, publicName, privateName);
|
|
13098
|
-
}
|
|
13099
|
-
else {
|
|
13100
|
-
instance[privateName] = value;
|
|
13101
|
-
}
|
|
13102
|
-
}
|
|
13103
|
-
finally {
|
|
13104
|
-
setActiveConsumer$1(prevConsumer);
|
|
13105
|
-
}
|
|
13106
|
-
}
|
|
13107
13150
|
/**
|
|
13108
13151
|
* Generates initialInputData for a node and stores it in the template's static storage
|
|
13109
13152
|
* so subsequent template invocations don't have to recalculate it.
|
|
@@ -13144,9 +13187,9 @@ function generateInitialInputs(inputs, directiveIndex, attrs) {
|
|
|
13144
13187
|
// through the directive def, but we want to do it using the inputs store so that it can
|
|
13145
13188
|
// account for host directive aliases.
|
|
13146
13189
|
const inputConfig = inputs[attrName];
|
|
13147
|
-
for (let j = 0; j < inputConfig.length; j +=
|
|
13190
|
+
for (let j = 0; j < inputConfig.length; j += 3) {
|
|
13148
13191
|
if (inputConfig[j] === directiveIndex) {
|
|
13149
|
-
inputsToStore.push(attrName, inputConfig[j + 1], attrs[i + 1]);
|
|
13192
|
+
inputsToStore.push(attrName, inputConfig[j + 1], inputConfig[j + 2], attrs[i + 1]);
|
|
13150
13193
|
// A directive can't have multiple inputs with the same name so we can break here.
|
|
13151
13194
|
break;
|
|
13152
13195
|
}
|
|
@@ -13333,10 +13376,11 @@ function setInputsForProperty(tView, lView, inputs, publicName, value) {
|
|
|
13333
13376
|
for (let i = 0; i < inputs.length;) {
|
|
13334
13377
|
const index = inputs[i++];
|
|
13335
13378
|
const privateName = inputs[i++];
|
|
13379
|
+
const flags = inputs[i++];
|
|
13336
13380
|
const instance = lView[index];
|
|
13337
13381
|
ngDevMode && assertIndexInRange(lView, index);
|
|
13338
13382
|
const def = tView.data[index];
|
|
13339
|
-
writeToDirectiveInput(def, instance, publicName, privateName, value);
|
|
13383
|
+
writeToDirectiveInput(def, instance, publicName, privateName, flags, value);
|
|
13340
13384
|
}
|
|
13341
13385
|
}
|
|
13342
13386
|
/**
|
|
@@ -13358,14 +13402,12 @@ const MAXIMUM_REFRESH_RERUNS = 100;
|
|
|
13358
13402
|
function detectChangesInternal(lView, notifyErrorHandler = true) {
|
|
13359
13403
|
const environment = lView[ENVIRONMENT];
|
|
13360
13404
|
const rendererFactory = environment.rendererFactory;
|
|
13361
|
-
const afterRenderEventManager = environment.afterRenderEventManager;
|
|
13362
13405
|
// Check no changes mode is a dev only mode used to verify that bindings have not changed
|
|
13363
13406
|
// since they were assigned. We do not want to invoke renderer factory functions in that mode
|
|
13364
13407
|
// to avoid any possible side-effects.
|
|
13365
13408
|
const checkNoChangesMode = !!ngDevMode && isInCheckNoChangesMode();
|
|
13366
13409
|
if (!checkNoChangesMode) {
|
|
13367
13410
|
rendererFactory.begin?.();
|
|
13368
|
-
afterRenderEventManager?.begin();
|
|
13369
13411
|
}
|
|
13370
13412
|
try {
|
|
13371
13413
|
detectChangesInViewWhileDirty(lView);
|
|
@@ -13382,8 +13424,6 @@ function detectChangesInternal(lView, notifyErrorHandler = true) {
|
|
|
13382
13424
|
// One final flush of the effects queue to catch any effects created in `ngAfterViewInit` or
|
|
13383
13425
|
// other post-order hooks.
|
|
13384
13426
|
environment.inlineEffectRunner?.flush();
|
|
13385
|
-
// Invoke all callbacks registered via `after*Render`, if needed.
|
|
13386
|
-
afterRenderEventManager?.end();
|
|
13387
13427
|
}
|
|
13388
13428
|
}
|
|
13389
13429
|
}
|
|
@@ -13589,7 +13629,6 @@ function viewShouldHaveReactiveConsumer(tView) {
|
|
|
13589
13629
|
*/
|
|
13590
13630
|
function detectChangesInEmbeddedViews(lView, mode) {
|
|
13591
13631
|
for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {
|
|
13592
|
-
lContainer[FLAGS] &= ~LContainerFlags.HasChildViewsToRefresh;
|
|
13593
13632
|
for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
|
|
13594
13633
|
const embeddedLView = lContainer[i];
|
|
13595
13634
|
detectChangesInViewIfAttached(embeddedLView, mode);
|
|
@@ -14255,11 +14294,11 @@ class ZoneAwareMicrotaskScheduler {
|
|
|
14255
14294
|
* available/requested.
|
|
14256
14295
|
*/
|
|
14257
14296
|
class EffectHandle {
|
|
14258
|
-
constructor(scheduler, effectFn, creationZone, destroyRef,
|
|
14297
|
+
constructor(scheduler, effectFn, creationZone, destroyRef, injector, allowSignalWrites) {
|
|
14259
14298
|
this.scheduler = scheduler;
|
|
14260
14299
|
this.effectFn = effectFn;
|
|
14261
14300
|
this.creationZone = creationZone;
|
|
14262
|
-
this.
|
|
14301
|
+
this.injector = injector;
|
|
14263
14302
|
this.watcher = createWatch$1((onCleanup) => this.runEffect(onCleanup), () => this.schedule(), allowSignalWrites);
|
|
14264
14303
|
this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
|
|
14265
14304
|
}
|
|
@@ -14268,7 +14307,10 @@ class EffectHandle {
|
|
|
14268
14307
|
this.effectFn(onCleanup);
|
|
14269
14308
|
}
|
|
14270
14309
|
catch (err) {
|
|
14271
|
-
|
|
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);
|
|
14272
14314
|
}
|
|
14273
14315
|
}
|
|
14274
14316
|
run() {
|
|
@@ -14295,9 +14337,8 @@ function effect(effectFn, options) {
|
|
|
14295
14337
|
'effect inside the component constructor.');
|
|
14296
14338
|
!options?.injector && assertInInjectionContext(effect);
|
|
14297
14339
|
const injector = options?.injector ?? inject(Injector);
|
|
14298
|
-
const errorHandler = injector.get(ErrorHandler, null, { optional: true });
|
|
14299
14340
|
const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
|
|
14300
|
-
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);
|
|
14301
14342
|
// Effects need to be marked dirty manually to trigger their initial run. The timing of this
|
|
14302
14343
|
// marking matters, because the effects may read signals that track component inputs, which are
|
|
14303
14344
|
// only available after those components have had their first update pass.
|
|
@@ -15128,13 +15169,6 @@ class AfterRenderCallbackHandlerImpl {
|
|
|
15128
15169
|
};
|
|
15129
15170
|
this.deferredCallbacks = new Set();
|
|
15130
15171
|
}
|
|
15131
|
-
validateBegin() {
|
|
15132
|
-
if (this.executingCallbacks) {
|
|
15133
|
-
throw new RuntimeError(102 /* RuntimeErrorCode.RECURSIVE_APPLICATION_RENDER */, ngDevMode &&
|
|
15134
|
-
'A new render operation began before the previous operation ended. ' +
|
|
15135
|
-
'Did you trigger change detection from afterRender or afterNextRender?');
|
|
15136
|
-
}
|
|
15137
|
-
}
|
|
15138
15172
|
register(callback) {
|
|
15139
15173
|
// If we're currently running callbacks, new callbacks should be deferred
|
|
15140
15174
|
// until the next render operation.
|
|
@@ -15146,9 +15180,11 @@ class AfterRenderCallbackHandlerImpl {
|
|
|
15146
15180
|
this.deferredCallbacks.delete(callback);
|
|
15147
15181
|
}
|
|
15148
15182
|
execute() {
|
|
15183
|
+
let callbacksExecuted = false;
|
|
15149
15184
|
this.executingCallbacks = true;
|
|
15150
15185
|
for (const bucket of Object.values(this.buckets)) {
|
|
15151
15186
|
for (const callback of bucket) {
|
|
15187
|
+
callbacksExecuted = true;
|
|
15152
15188
|
callback.invoke();
|
|
15153
15189
|
}
|
|
15154
15190
|
}
|
|
@@ -15157,6 +15193,7 @@ class AfterRenderCallbackHandlerImpl {
|
|
|
15157
15193
|
this.buckets[callback.phase].add(callback);
|
|
15158
15194
|
}
|
|
15159
15195
|
this.deferredCallbacks.clear();
|
|
15196
|
+
return callbacksExecuted;
|
|
15160
15197
|
}
|
|
15161
15198
|
destroy() {
|
|
15162
15199
|
for (const bucket of Object.values(this.buckets)) {
|
|
@@ -15171,37 +15208,25 @@ class AfterRenderCallbackHandlerImpl {
|
|
|
15171
15208
|
*/
|
|
15172
15209
|
class AfterRenderEventManager {
|
|
15173
15210
|
constructor() {
|
|
15174
|
-
this.renderDepth = 0;
|
|
15175
15211
|
/* @internal */
|
|
15176
15212
|
this.handler = null;
|
|
15177
15213
|
/* @internal */
|
|
15178
15214
|
this.internalCallbacks = [];
|
|
15179
15215
|
}
|
|
15180
15216
|
/**
|
|
15181
|
-
*
|
|
15182
|
-
* Throws if called while executing callbacks.
|
|
15217
|
+
* Executes callbacks. Returns `true` if any callbacks executed.
|
|
15183
15218
|
*/
|
|
15184
|
-
|
|
15185
|
-
|
|
15186
|
-
|
|
15187
|
-
|
|
15188
|
-
|
|
15189
|
-
|
|
15190
|
-
|
|
15191
|
-
|
|
15192
|
-
end() {
|
|
15193
|
-
ngDevMode && assertGreaterThan(this.renderDepth, 0, 'renderDepth must be greater than 0');
|
|
15194
|
-
this.renderDepth--;
|
|
15195
|
-
if (this.renderDepth === 0) {
|
|
15196
|
-
// Note: internal callbacks power `internalAfterNextRender`. Since internal callbacks
|
|
15197
|
-
// are fairly trivial, they are kept separate so that `AfterRenderCallbackHandlerImpl`
|
|
15198
|
-
// can still be tree-shaken unless used by the application.
|
|
15199
|
-
for (const callback of this.internalCallbacks) {
|
|
15200
|
-
callback();
|
|
15201
|
-
}
|
|
15202
|
-
this.internalCallbacks.length = 0;
|
|
15203
|
-
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();
|
|
15204
15227
|
}
|
|
15228
|
+
const handlerCallbacksExecuted = this.handler?.execute();
|
|
15229
|
+
return !!handlerCallbacksExecuted || callbacks.length > 0;
|
|
15205
15230
|
}
|
|
15206
15231
|
ngOnDestroy() {
|
|
15207
15232
|
this.handler?.destroy();
|
|
@@ -15381,11 +15406,18 @@ class ComponentFactoryResolver extends ComponentFactoryResolver$1 {
|
|
|
15381
15406
|
}
|
|
15382
15407
|
function toRefArray(map) {
|
|
15383
15408
|
const array = [];
|
|
15384
|
-
for (
|
|
15385
|
-
if (map.hasOwnProperty(
|
|
15386
|
-
|
|
15387
|
-
array.push({ propName: minified, templateName: nonMinified });
|
|
15409
|
+
for (const publicName in map) {
|
|
15410
|
+
if (!map.hasOwnProperty(publicName)) {
|
|
15411
|
+
continue;
|
|
15388
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
|
+
});
|
|
15389
15421
|
}
|
|
15390
15422
|
return array;
|
|
15391
15423
|
}
|
|
@@ -15707,7 +15739,7 @@ function createRootComponent(componentView, rootComponentDef, rootDirectives, ho
|
|
|
15707
15739
|
function setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {
|
|
15708
15740
|
if (rootSelectorOrNode) {
|
|
15709
15741
|
// The placeholder will be replaced with the actual version at build time.
|
|
15710
|
-
setUpAttributes(hostRenderer, hostRNode, ['ng-version', '17.1.0-
|
|
15742
|
+
setUpAttributes(hostRenderer, hostRNode, ['ng-version', '17.1.0-rc.0']);
|
|
15711
15743
|
}
|
|
15712
15744
|
else {
|
|
15713
15745
|
// If host element is created as a part of this function call (i.e. `rootSelectorOrNode`
|
|
@@ -15800,15 +15832,8 @@ function ɵɵInheritDefinitionFeature(definition) {
|
|
|
15800
15832
|
superViewQuery && inheritViewQuery(definition, superViewQuery);
|
|
15801
15833
|
superContentQueries && inheritContentQueries(definition, superContentQueries);
|
|
15802
15834
|
// Merge inputs and outputs
|
|
15803
|
-
|
|
15804
|
-
fillProperties(definition.declaredInputs, superDef.declaredInputs);
|
|
15835
|
+
mergeInputsWithTransforms(definition, superDef);
|
|
15805
15836
|
fillProperties(definition.outputs, superDef.outputs);
|
|
15806
|
-
if (superDef.inputTransforms !== null) {
|
|
15807
|
-
if (writeableDef.inputTransforms === null) {
|
|
15808
|
-
writeableDef.inputTransforms = {};
|
|
15809
|
-
}
|
|
15810
|
-
fillProperties(writeableDef.inputTransforms, superDef.inputTransforms);
|
|
15811
|
-
}
|
|
15812
15837
|
// Merge animations metadata.
|
|
15813
15838
|
// If `superDef` is a Component, the `data` field is present (defaults to an empty object).
|
|
15814
15839
|
if (isComponentDef(superDef) && superDef.data.animation) {
|
|
@@ -15843,6 +15868,35 @@ function ɵɵInheritDefinitionFeature(definition) {
|
|
|
15843
15868
|
}
|
|
15844
15869
|
mergeHostAttrsAcrossInheritance(inheritanceChain);
|
|
15845
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
|
+
}
|
|
15846
15900
|
/**
|
|
15847
15901
|
* Merge the `hostAttrs` and `hostVars` from the inherited parent to the base class.
|
|
15848
15902
|
*
|
|
@@ -16128,8 +16182,7 @@ function validateMappings(bindingType, def, hostDirectiveBindings) {
|
|
|
16128
16182
|
throw new RuntimeError(311 /* RuntimeErrorCode.HOST_DIRECTIVE_UNDEFINED_BINDING */, `Directive ${className} does not have an ${bindingType} with a public name of ${publicName}.`);
|
|
16129
16183
|
}
|
|
16130
16184
|
const remappedPublicName = hostDirectiveBindings[publicName];
|
|
16131
|
-
if (bindings.hasOwnProperty(remappedPublicName) && remappedPublicName !== publicName
|
|
16132
|
-
bindings[remappedPublicName] !== publicName) {
|
|
16185
|
+
if (bindings.hasOwnProperty(remappedPublicName) && remappedPublicName !== publicName) {
|
|
16133
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.`);
|
|
16134
16187
|
}
|
|
16135
16188
|
}
|
|
@@ -16152,13 +16205,12 @@ function ɵɵInputTransformsFeature(definition) {
|
|
|
16152
16205
|
// Note: the private names are used for the keys, rather than the public ones, because public
|
|
16153
16206
|
// names can be re-aliased in host directives which would invalidate the lookup.
|
|
16154
16207
|
const value = inputs[minifiedKey];
|
|
16155
|
-
if (Array.isArray(value) && value[
|
|
16156
|
-
inputTransforms[minifiedKey] = value[
|
|
16208
|
+
if (Array.isArray(value) && value[3]) {
|
|
16209
|
+
inputTransforms[minifiedKey] = value[3];
|
|
16157
16210
|
}
|
|
16158
16211
|
}
|
|
16159
16212
|
}
|
|
16160
|
-
definition.inputTransforms =
|
|
16161
|
-
inputTransforms;
|
|
16213
|
+
definition.inputTransforms = inputTransforms;
|
|
16162
16214
|
}
|
|
16163
16215
|
|
|
16164
16216
|
// TODO(misko): consider inlining
|
|
@@ -17059,8 +17111,8 @@ function insertTStylingBinding(tData, tNode, tStylingKeyWithStatic, index, isHos
|
|
|
17059
17111
|
if (isKeyDuplicateOfStatic) {
|
|
17060
17112
|
tData[index + 1] = setTStylingRangePrevDuplicate(tData[index + 1]);
|
|
17061
17113
|
}
|
|
17062
|
-
markDuplicates(tData, tStylingKey, index, true
|
|
17063
|
-
markDuplicates(tData, tStylingKey, index, false
|
|
17114
|
+
markDuplicates(tData, tStylingKey, index, true);
|
|
17115
|
+
markDuplicates(tData, tStylingKey, index, false);
|
|
17064
17116
|
markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding);
|
|
17065
17117
|
tBindings = toTStylingRange(tmplHead, tmplTail);
|
|
17066
17118
|
if (isClassBinding) {
|
|
@@ -17144,7 +17196,7 @@ function markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClas
|
|
|
17144
17196
|
* - `true` for previous (lower priority);
|
|
17145
17197
|
* - `false` for next (higher priority).
|
|
17146
17198
|
*/
|
|
17147
|
-
function markDuplicates(tData, tStylingKey, index, isPrevDir
|
|
17199
|
+
function markDuplicates(tData, tStylingKey, index, isPrevDir) {
|
|
17148
17200
|
const tStylingAtIndex = tData[index + 1];
|
|
17149
17201
|
const isMap = tStylingKey === null;
|
|
17150
17202
|
let cursor = isPrevDir ? getTStylingRangePrev(tStylingAtIndex) : getTStylingRangeNext(tStylingAtIndex);
|
|
@@ -19446,7 +19498,7 @@ function locateDehydratedViewsInContainer(currentRNode, serializedViews) {
|
|
|
19446
19498
|
* stored on a given lContainer.
|
|
19447
19499
|
* Returns `null` by default, when hydration is not enabled.
|
|
19448
19500
|
*/
|
|
19449
|
-
let _findMatchingDehydratedViewImpl = (
|
|
19501
|
+
let _findMatchingDehydratedViewImpl = () => null;
|
|
19450
19502
|
/**
|
|
19451
19503
|
* Retrieves the next dehydrated view from the LContainer and verifies that
|
|
19452
19504
|
* it matches a given template id (from the TView that was used to create this
|
|
@@ -20186,7 +20238,7 @@ function insertAnchorNode(hostLView, hostTNode) {
|
|
|
20186
20238
|
return commentNode;
|
|
20187
20239
|
}
|
|
20188
20240
|
let _locateOrCreateAnchorNode = createAnchorNode;
|
|
20189
|
-
let _populateDehydratedViewsInLContainer = (
|
|
20241
|
+
let _populateDehydratedViewsInLContainer = () => false; // noop by default
|
|
20190
20242
|
/**
|
|
20191
20243
|
* Looks up dehydrated views that belong to a given LContainer and populates
|
|
20192
20244
|
* this information into the `LContainer[DEHYDRATED_VIEWS]` slot. When running
|
|
@@ -20935,8 +20987,6 @@ function onInteraction(trigger, callback) {
|
|
|
20935
20987
|
// are referencing it.
|
|
20936
20988
|
entry = new DeferEventEntry();
|
|
20937
20989
|
interactionTriggers.set(trigger, entry);
|
|
20938
|
-
// Ensure that the handler runs in the NgZone
|
|
20939
|
-
ngDevMode && NgZone.assertInAngularZone();
|
|
20940
20990
|
for (const name of interactionEventNames) {
|
|
20941
20991
|
trigger.addEventListener(name, entry.listener, eventListenerOptions);
|
|
20942
20992
|
}
|
|
@@ -20964,8 +21014,6 @@ function onHover(trigger, callback) {
|
|
|
20964
21014
|
if (!entry) {
|
|
20965
21015
|
entry = new DeferEventEntry();
|
|
20966
21016
|
hoverTriggers.set(trigger, entry);
|
|
20967
|
-
// Ensure that the handler runs in the NgZone
|
|
20968
|
-
ngDevMode && NgZone.assertInAngularZone();
|
|
20969
21017
|
for (const name of hoverEventNames) {
|
|
20970
21018
|
trigger.addEventListener(name, entry.listener, eventListenerOptions);
|
|
20971
21019
|
}
|
|
@@ -27094,8 +27142,9 @@ function getDirectiveMetadata$1(directiveOrComponentInstance) {
|
|
|
27094
27142
|
// To ensure we don't get the metadata of the directive, we want to call `getComponentDef` first.
|
|
27095
27143
|
const componentDef = getComponentDef(constructor);
|
|
27096
27144
|
if (componentDef) {
|
|
27145
|
+
const inputs = extractInputDebugMetadata(componentDef.inputs);
|
|
27097
27146
|
return {
|
|
27098
|
-
inputs
|
|
27147
|
+
inputs,
|
|
27099
27148
|
outputs: componentDef.outputs,
|
|
27100
27149
|
encapsulation: componentDef.encapsulation,
|
|
27101
27150
|
changeDetection: componentDef.onPush ? ChangeDetectionStrategy.OnPush :
|
|
@@ -27104,7 +27153,8 @@ function getDirectiveMetadata$1(directiveOrComponentInstance) {
|
|
|
27104
27153
|
}
|
|
27105
27154
|
const directiveDef = getDirectiveDef(constructor);
|
|
27106
27155
|
if (directiveDef) {
|
|
27107
|
-
|
|
27156
|
+
const inputs = extractInputDebugMetadata(directiveDef.inputs);
|
|
27157
|
+
return { inputs, outputs: directiveDef.outputs };
|
|
27108
27158
|
}
|
|
27109
27159
|
return null;
|
|
27110
27160
|
}
|
|
@@ -27258,6 +27308,36 @@ function assertDomElement(value) {
|
|
|
27258
27308
|
throw new Error('Expecting instance of DOM Element');
|
|
27259
27309
|
}
|
|
27260
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
|
+
}
|
|
27261
27341
|
|
|
27262
27342
|
/**
|
|
27263
27343
|
* The name of a field that Angular monkey-patches onto a component
|
|
@@ -28802,6 +28882,7 @@ const angularCoreEnv = (() => ({
|
|
|
28802
28882
|
'ɵɵvalidateIframeAttribute': ɵɵvalidateIframeAttribute,
|
|
28803
28883
|
'forwardRef': forwardRef,
|
|
28804
28884
|
'resolveForwardRef': resolveForwardRef,
|
|
28885
|
+
'ɵɵInputFlags': InputFlags,
|
|
28805
28886
|
}))();
|
|
28806
28887
|
|
|
28807
28888
|
let jitOptions = null;
|
|
@@ -29985,7 +30066,7 @@ class Version {
|
|
|
29985
30066
|
/**
|
|
29986
30067
|
* @publicApi
|
|
29987
30068
|
*/
|
|
29988
|
-
const VERSION = new Version('17.1.0-
|
|
30069
|
+
const VERSION = new Version('17.1.0-rc.0');
|
|
29989
30070
|
|
|
29990
30071
|
/*
|
|
29991
30072
|
* This file exists to support compilation of @angular/core in Ivy mode.
|
|
@@ -30983,6 +31064,28 @@ function getModuleInjectorOfNodeInjector(injector) {
|
|
|
30983
31064
|
* tools are patched (window.ng).
|
|
30984
31065
|
* */
|
|
30985
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
|
+
};
|
|
30986
31089
|
let _published = false;
|
|
30987
31090
|
/**
|
|
30988
31091
|
* Publishes a collection of default debug tools onto`window.ng`.
|
|
@@ -30994,26 +31097,9 @@ function publishDefaultGlobalUtils$1() {
|
|
|
30994
31097
|
if (!_published) {
|
|
30995
31098
|
_published = true;
|
|
30996
31099
|
setupFrameworkInjectorProfiler();
|
|
30997
|
-
|
|
30998
|
-
|
|
30999
|
-
|
|
31000
|
-
publishGlobalUtil('ɵgetInjectorMetadata', getInjectorMetadata);
|
|
31001
|
-
/**
|
|
31002
|
-
* Warning: this function is *INTERNAL* and should not be relied upon in application's code.
|
|
31003
|
-
* The contract of the function might be changed in any release and/or the function can be
|
|
31004
|
-
* removed completely.
|
|
31005
|
-
*/
|
|
31006
|
-
publishGlobalUtil('ɵsetProfiler', setProfiler);
|
|
31007
|
-
publishGlobalUtil('getDirectiveMetadata', getDirectiveMetadata$1);
|
|
31008
|
-
publishGlobalUtil('getComponent', getComponent);
|
|
31009
|
-
publishGlobalUtil('getContext', getContext);
|
|
31010
|
-
publishGlobalUtil('getListeners', getListeners);
|
|
31011
|
-
publishGlobalUtil('getOwningComponent', getOwningComponent);
|
|
31012
|
-
publishGlobalUtil('getHostElement', getHostElement);
|
|
31013
|
-
publishGlobalUtil('getInjector', getInjector);
|
|
31014
|
-
publishGlobalUtil('getRootComponents', getRootComponents);
|
|
31015
|
-
publishGlobalUtil('getDirectives', getDirectives);
|
|
31016
|
-
publishGlobalUtil('applyChanges', applyChanges);
|
|
31100
|
+
for (const [methodName, method] of Object.entries(globalUtilsFunctions)) {
|
|
31101
|
+
publishGlobalUtil(methodName, method);
|
|
31102
|
+
}
|
|
31017
31103
|
}
|
|
31018
31104
|
}
|
|
31019
31105
|
/**
|
|
@@ -31028,13 +31114,8 @@ function publishGlobalUtil(name, fn) {
|
|
|
31028
31114
|
// for typings for AngularJS (via `goog.provide('ng....')`).
|
|
31029
31115
|
const w = _global;
|
|
31030
31116
|
ngDevMode && assertDefined(fn, 'function not defined');
|
|
31031
|
-
|
|
31032
|
-
|
|
31033
|
-
if (!container) {
|
|
31034
|
-
container = w[GLOBAL_PUBLISH_EXPANDO_KEY] = {};
|
|
31035
|
-
}
|
|
31036
|
-
container[name] = fn;
|
|
31037
|
-
}
|
|
31117
|
+
w[GLOBAL_PUBLISH_EXPANDO_KEY] ??= {};
|
|
31118
|
+
w[GLOBAL_PUBLISH_EXPANDO_KEY][name] = fn;
|
|
31038
31119
|
}
|
|
31039
31120
|
}
|
|
31040
31121
|
|
|
@@ -31078,13 +31159,6 @@ class Testability {
|
|
|
31078
31159
|
this.registry = registry;
|
|
31079
31160
|
this._pendingCount = 0;
|
|
31080
31161
|
this._isZoneStable = true;
|
|
31081
|
-
/**
|
|
31082
|
-
* Whether any work was done since the last 'whenStable' callback. This is
|
|
31083
|
-
* useful to detect if this could have potentially destabilized another
|
|
31084
|
-
* component while it is stabilizing.
|
|
31085
|
-
* @internal
|
|
31086
|
-
*/
|
|
31087
|
-
this._didWork = false;
|
|
31088
31162
|
this._callbacks = [];
|
|
31089
31163
|
this.taskTrackingZone = null;
|
|
31090
31164
|
// If there was no Testability logic registered in the global scope
|
|
@@ -31102,7 +31176,6 @@ class Testability {
|
|
|
31102
31176
|
_watchAngularEvents() {
|
|
31103
31177
|
this._ngZone.onUnstable.subscribe({
|
|
31104
31178
|
next: () => {
|
|
31105
|
-
this._didWork = true;
|
|
31106
31179
|
this._isZoneStable = false;
|
|
31107
31180
|
}
|
|
31108
31181
|
});
|
|
@@ -31124,7 +31197,6 @@ class Testability {
|
|
|
31124
31197
|
*/
|
|
31125
31198
|
increasePendingRequestCount() {
|
|
31126
31199
|
this._pendingCount += 1;
|
|
31127
|
-
this._didWork = true;
|
|
31128
31200
|
return this._pendingCount;
|
|
31129
31201
|
}
|
|
31130
31202
|
/**
|
|
@@ -31152,9 +31224,8 @@ class Testability {
|
|
|
31152
31224
|
while (this._callbacks.length !== 0) {
|
|
31153
31225
|
let cb = this._callbacks.pop();
|
|
31154
31226
|
clearTimeout(cb.timeoutId);
|
|
31155
|
-
cb.doneCb(
|
|
31227
|
+
cb.doneCb();
|
|
31156
31228
|
}
|
|
31157
|
-
this._didWork = false;
|
|
31158
31229
|
});
|
|
31159
31230
|
}
|
|
31160
31231
|
else {
|
|
@@ -31167,7 +31238,6 @@ class Testability {
|
|
|
31167
31238
|
}
|
|
31168
31239
|
return true;
|
|
31169
31240
|
});
|
|
31170
|
-
this._didWork = true;
|
|
31171
31241
|
}
|
|
31172
31242
|
}
|
|
31173
31243
|
getPendingTasks() {
|
|
@@ -31190,7 +31260,7 @@ class Testability {
|
|
|
31190
31260
|
if (timeout && timeout > 0) {
|
|
31191
31261
|
timeoutId = setTimeout(() => {
|
|
31192
31262
|
this._callbacks = this._callbacks.filter((cb) => cb.timeoutId !== timeoutId);
|
|
31193
|
-
cb(
|
|
31263
|
+
cb();
|
|
31194
31264
|
}, timeout);
|
|
31195
31265
|
}
|
|
31196
31266
|
this._callbacks.push({ doneCb: cb, timeoutId: timeoutId, updateCb: updateCb });
|
|
@@ -31212,7 +31282,6 @@ class Testability {
|
|
|
31212
31282
|
throw new Error('Task tracking zone is required when passing an update callback to ' +
|
|
31213
31283
|
'whenStable(). Is "zone.js/plugins/task-tracking" loaded?');
|
|
31214
31284
|
}
|
|
31215
|
-
// These arguments are 'Function' above to keep the public API simple.
|
|
31216
31285
|
this.addCallback(doneCb, timeout, updateCb);
|
|
31217
31286
|
this._runCallbacksIfReady();
|
|
31218
31287
|
}
|
|
@@ -31721,6 +31790,7 @@ class ApplicationRef {
|
|
|
31721
31790
|
/** @internal */
|
|
31722
31791
|
this._views = [];
|
|
31723
31792
|
this.internalErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);
|
|
31793
|
+
this.afterRenderEffectManager = inject(AfterRenderEventManager);
|
|
31724
31794
|
/**
|
|
31725
31795
|
* Get a list of component types registered to this application.
|
|
31726
31796
|
* This list is populated even before the component is created.
|
|
@@ -31791,10 +31861,12 @@ class ApplicationRef {
|
|
|
31791
31861
|
const initStatus = this._injector.get(ApplicationInitStatus);
|
|
31792
31862
|
if (!initStatus.done) {
|
|
31793
31863
|
const standalone = !isComponentFactory && isStandalone(componentOrFactory);
|
|
31794
|
-
const errorMessage =
|
|
31795
|
-
|
|
31796
|
-
|
|
31797
|
-
|
|
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);
|
|
31798
31870
|
}
|
|
31799
31871
|
let componentFactory;
|
|
31800
31872
|
if (isComponentFactory) {
|
|
@@ -31855,6 +31927,18 @@ class ApplicationRef {
|
|
|
31855
31927
|
this.internalErrorHandler(e);
|
|
31856
31928
|
}
|
|
31857
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
|
+
}
|
|
31858
31942
|
this._runningTick = false;
|
|
31859
31943
|
}
|
|
31860
31944
|
}
|
|
@@ -33758,14 +33842,6 @@ function signalUpdateFn(node, updater) {
|
|
|
33758
33842
|
}
|
|
33759
33843
|
signalSetFn(node, updater(node.value));
|
|
33760
33844
|
}
|
|
33761
|
-
function signalMutateFn(node, mutator) {
|
|
33762
|
-
if (!producerUpdatesAllowed()) {
|
|
33763
|
-
throwInvalidWriteToSignalError();
|
|
33764
|
-
}
|
|
33765
|
-
// Mutate bypasses equality checks as it's by definition changing the value.
|
|
33766
|
-
mutator(node.value);
|
|
33767
|
-
signalValueChanged(node);
|
|
33768
|
-
}
|
|
33769
33845
|
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
33770
33846
|
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
33771
33847
|
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
@@ -34099,6 +34175,49 @@ function internalCreateApplication(config) {
|
|
|
34099
34175
|
}
|
|
34100
34176
|
}
|
|
34101
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
|
+
|
|
34102
34221
|
/**
|
|
34103
34222
|
* Retrieves all defer blocks in a given LView.
|
|
34104
34223
|
*
|
|
@@ -35151,5 +35270,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
|
35151
35270
|
* Generated bundle index. Do not edit.
|
|
35152
35271
|
*/
|
|
35153
35272
|
|
|
35154
|
-
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, 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, 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, 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, ɵɵ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 };
|
|
35155
35274
|
//# sourceMappingURL=core.mjs.map
|