@angular/core 19.1.3 → 19.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/core.mjs +800 -968
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +2 -1
- package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
- package/fesm2022/primitives/signals.mjs +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/testing.mjs +4 -4
- package/index.d.ts +6 -21
- package/package.json +1 -1
- package/primitives/event-dispatch/index.d.ts +1 -1
- package/primitives/signals/index.d.ts +1 -1
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/bundles/{apply_import_manager-40cd5384.js → apply_import_manager-57619f3c.js} +3 -3
- package/schematics/bundles/{checker-ca858016.js → checker-ce908760.js} +6 -5
- package/schematics/bundles/cleanup-unused-imports.js +6 -6
- package/schematics/bundles/{compiler_host-68e159d5.js → compiler_host-33b24174.js} +2 -2
- package/schematics/bundles/control-flow-migration.js +3 -3
- package/schematics/bundles/explicit-standalone-flag.js +5 -5
- package/schematics/bundles/{imports-abe29092.js → imports-31a38653.js} +1 -1
- package/schematics/bundles/{index-761b9f6f.js → index-59a1204f.js} +4 -4
- package/schematics/bundles/{index-d05029f9.js → index-d6e51169.js} +4 -4
- package/schematics/bundles/inject-migration.js +6 -6
- package/schematics/bundles/{leading_space-d190b83b.js → leading_space-6e7a8ec6.js} +1 -1
- package/schematics/bundles/{migrate_ts_type_references-8d015538.js → migrate_ts_type_references-2c37e645.js} +6 -6
- package/schematics/bundles/{nodes-a9f0b985.js → nodes-88c2157f.js} +2 -2
- package/schematics/bundles/output-migration.js +6 -6
- package/schematics/bundles/pending-tasks.js +5 -5
- package/schematics/bundles/{program-8e222816.js → program-5512058c.js} +100 -26
- package/schematics/bundles/{project_tsconfig_paths-e9ccccbf.js → project_tsconfig_paths-6c9cde78.js} +1 -1
- package/schematics/bundles/provide-initializer.js +5 -5
- package/schematics/bundles/route-lazy-loading.js +4 -4
- package/schematics/bundles/signal-input-migration.js +8 -8
- package/schematics/bundles/signal-queries-migration.js +8 -8
- package/schematics/bundles/signals.js +8 -8
- package/schematics/bundles/standalone-migration.js +8 -8
- package/testing/index.d.ts +1 -1
package/fesm2022/core.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v19.1.
|
|
2
|
+
* @license Angular v19.1.5
|
|
3
3
|
* (c) 2010-2024 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { SIGNAL_NODE as SIGNAL_NODE$1, signalSetFn as signalSetFn$1, producerAccessed as producerAccessed$1, SIGNAL as SIGNAL$1, getActiveConsumer as getActiveConsumer$1, setActiveConsumer as setActiveConsumer$1, createSignal as createSignal$1, signalUpdateFn as signalUpdateFn$1, consumerDestroy as consumerDestroy$1, REACTIVE_NODE as REACTIVE_NODE$1, consumerBeforeComputation as consumerBeforeComputation$1, consumerAfterComputation as consumerAfterComputation$1, consumerPollProducersForChange as consumerPollProducersForChange$1, createComputed as createComputed$1, setThrowInvalidWriteToSignalError as setThrowInvalidWriteToSignalError$1,
|
|
7
|
+
import { SIGNAL_NODE as SIGNAL_NODE$1, signalSetFn as signalSetFn$1, producerAccessed as producerAccessed$1, SIGNAL as SIGNAL$1, getActiveConsumer as getActiveConsumer$1, setActiveConsumer as setActiveConsumer$1, createSignal as createSignal$1, signalUpdateFn as signalUpdateFn$1, consumerDestroy as consumerDestroy$1, REACTIVE_NODE as REACTIVE_NODE$1, consumerBeforeComputation as consumerBeforeComputation$1, consumerAfterComputation as consumerAfterComputation$1, consumerPollProducersForChange as consumerPollProducersForChange$1, createComputed as createComputed$1, setThrowInvalidWriteToSignalError as setThrowInvalidWriteToSignalError$1, createLinkedSignal as createLinkedSignal$1, linkedSignalSetFn as linkedSignalSetFn$1, linkedSignalUpdateFn as linkedSignalUpdateFn$1, createWatch as createWatch$1, isInNotificationPhase as isInNotificationPhase$1 } from '@angular/core/primitives/signals';
|
|
8
8
|
export { SIGNAL as ɵSIGNAL } from '@angular/core/primitives/signals';
|
|
9
9
|
import { BehaviorSubject, Subject, Subscription } from 'rxjs';
|
|
10
10
|
import { Attribute as Attribute$1, clearAppScopedEarlyEventContract, EventContract, EventContractContainer, getAppScopedQueuedEventInfos, EventDispatcher, registerDispatcher, isEarlyEventType, isCaptureEventType, EventPhase } from '@angular/core/primitives/event-dispatch';
|
|
@@ -2963,6 +2963,7 @@ function isComponentDef(def) {
|
|
|
2963
2963
|
return !!def.template;
|
|
2964
2964
|
}
|
|
2965
2965
|
function isRootView(target) {
|
|
2966
|
+
// Determines whether a given LView is marked as a root view.
|
|
2966
2967
|
return (target[FLAGS] & 512 /* LViewFlags.IsRoot */) !== 0;
|
|
2967
2968
|
}
|
|
2968
2969
|
function isProjectionTNode(tNode) {
|
|
@@ -3066,7 +3067,7 @@ function assertProjectionSlots(lView, errMessage) {
|
|
|
3066
3067
|
function assertParentView(lView, errMessage) {
|
|
3067
3068
|
assertDefined(lView, errMessage || "Component views should always have a parent view (component's host view)");
|
|
3068
3069
|
}
|
|
3069
|
-
function assertNoDuplicateDirectives(directives) {
|
|
3070
|
+
function assertNoDuplicateDirectives$1(directives) {
|
|
3070
3071
|
// The array needs at least two elements in order to have duplicates.
|
|
3071
3072
|
if (directives.length < 2) {
|
|
3072
3073
|
return;
|
|
@@ -4059,7 +4060,7 @@ function ɵɵnamespaceHTML() {
|
|
|
4059
4060
|
function namespaceHTMLInternal() {
|
|
4060
4061
|
instructionState.lFrame.currentNamespace = null;
|
|
4061
4062
|
}
|
|
4062
|
-
function getNamespace
|
|
4063
|
+
function getNamespace() {
|
|
4063
4064
|
return instructionState.lFrame.currentNamespace;
|
|
4064
4065
|
}
|
|
4065
4066
|
let _wasLastNodeCreated = true;
|
|
@@ -5617,7 +5618,7 @@ function lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundVa
|
|
|
5617
5618
|
while (currentTNode !== null &&
|
|
5618
5619
|
currentLView !== null &&
|
|
5619
5620
|
currentLView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */ &&
|
|
5620
|
-
!(currentLView
|
|
5621
|
+
!isRootView(currentLView)) {
|
|
5621
5622
|
ngDevMode && assertTNodeForLView(currentTNode, currentLView);
|
|
5622
5623
|
// Note that this lookup on the node injector is using the `Self` flag, because
|
|
5623
5624
|
// we don't want the node injector to look at any parent injectors since we
|
|
@@ -7799,8 +7800,7 @@ function getDirectivesAtNodeIndex(nodeIndex, lView) {
|
|
|
7799
7800
|
}
|
|
7800
7801
|
function getComponentAtNodeIndex(nodeIndex, lView) {
|
|
7801
7802
|
const tNode = lView[TVIEW].data[nodeIndex];
|
|
7802
|
-
|
|
7803
|
-
return componentOffset > -1 ? lView[directiveStart + componentOffset] : null;
|
|
7803
|
+
return isComponentHost(tNode) ? lView[tNode.directiveStart + tNode.componentOffset] : null;
|
|
7804
7804
|
}
|
|
7805
7805
|
/**
|
|
7806
7806
|
* Returns a map of local references (local reference name => element or directive instance) that
|
|
@@ -7829,7 +7829,7 @@ function discoverLocalRefs(lView, nodeIndex) {
|
|
|
7829
7829
|
function getRootView(componentOrLView) {
|
|
7830
7830
|
ngDevMode && assertDefined(componentOrLView, 'component');
|
|
7831
7831
|
let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);
|
|
7832
|
-
while (lView && !(lView
|
|
7832
|
+
while (lView && !isRootView(lView)) {
|
|
7833
7833
|
lView = getLViewParent(lView);
|
|
7834
7834
|
}
|
|
7835
7835
|
ngDevMode && assertLView(lView);
|
|
@@ -7947,7 +7947,7 @@ function getOwningComponent(elementOrDir) {
|
|
|
7947
7947
|
while (lView[TVIEW].type === 2 /* TViewType.Embedded */ && (parent = getLViewParent(lView))) {
|
|
7948
7948
|
lView = parent;
|
|
7949
7949
|
}
|
|
7950
|
-
return lView
|
|
7950
|
+
return isRootView(lView) ? null : lView[CONTEXT];
|
|
7951
7951
|
}
|
|
7952
7952
|
/**
|
|
7953
7953
|
* Retrieves all root components associated with a DOM element, directive or component instance.
|
|
@@ -11637,14 +11637,6 @@ function getExpressionChangedErrorDetails(lView, bindingIndex, oldValue, newValu
|
|
|
11637
11637
|
return { propName: undefined, oldValue, newValue };
|
|
11638
11638
|
}
|
|
11639
11639
|
|
|
11640
|
-
/** Flags describing an input for a directive. */
|
|
11641
|
-
var InputFlags;
|
|
11642
|
-
(function (InputFlags) {
|
|
11643
|
-
InputFlags[InputFlags["None"] = 0] = "None";
|
|
11644
|
-
InputFlags[InputFlags["SignalBased"] = 1] = "SignalBased";
|
|
11645
|
-
InputFlags[InputFlags["HasDecoratorInputTransform"] = 2] = "HasDecoratorInputTransform";
|
|
11646
|
-
})(InputFlags || (InputFlags = {}));
|
|
11647
|
-
|
|
11648
11640
|
/**
|
|
11649
11641
|
* Returns an index of `classToSearch` in `className` taking token boundaries into account.
|
|
11650
11642
|
*
|
|
@@ -12076,131 +12068,15 @@ function extractAttrsAndClassesFromSelector(selector) {
|
|
|
12076
12068
|
}
|
|
12077
12069
|
i++;
|
|
12078
12070
|
}
|
|
12079
|
-
|
|
12071
|
+
if (classes.length) {
|
|
12072
|
+
attrs.push(1 /* AttributeMarker.Classes */, ...classes);
|
|
12073
|
+
}
|
|
12074
|
+
return attrs;
|
|
12080
12075
|
}
|
|
12081
12076
|
|
|
12082
12077
|
/** A special value which designates that a value has not changed. */
|
|
12083
12078
|
const NO_CHANGE = typeof ngDevMode === 'undefined' || ngDevMode ? { __brand__: 'NO_CHANGE' } : {};
|
|
12084
12079
|
|
|
12085
|
-
/**
|
|
12086
|
-
* Advances to an element for later binding instructions.
|
|
12087
|
-
*
|
|
12088
|
-
* Used in conjunction with instructions like {@link property} to act on elements with specified
|
|
12089
|
-
* indices, for example those created with {@link element} or {@link elementStart}.
|
|
12090
|
-
*
|
|
12091
|
-
* ```ts
|
|
12092
|
-
* (rf: RenderFlags, ctx: any) => {
|
|
12093
|
-
* if (rf & 1) {
|
|
12094
|
-
* text(0, 'Hello');
|
|
12095
|
-
* text(1, 'Goodbye')
|
|
12096
|
-
* element(2, 'div');
|
|
12097
|
-
* }
|
|
12098
|
-
* if (rf & 2) {
|
|
12099
|
-
* advance(2); // Advance twice to the <div>.
|
|
12100
|
-
* property('title', 'test');
|
|
12101
|
-
* }
|
|
12102
|
-
* }
|
|
12103
|
-
* ```
|
|
12104
|
-
* @param delta Number of elements to advance forwards by.
|
|
12105
|
-
*
|
|
12106
|
-
* @codeGenApi
|
|
12107
|
-
*/
|
|
12108
|
-
function ɵɵadvance(delta = 1) {
|
|
12109
|
-
ngDevMode && assertGreaterThan(delta, 0, 'Can only advance forward');
|
|
12110
|
-
selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, !!ngDevMode && isInCheckNoChangesMode());
|
|
12111
|
-
}
|
|
12112
|
-
function selectIndexInternal(tView, lView, index, checkNoChangesMode) {
|
|
12113
|
-
ngDevMode && assertIndexInDeclRange(lView[TVIEW], index);
|
|
12114
|
-
// Flush the initial hooks for elements in the view that have been added up to this point.
|
|
12115
|
-
// PERF WARNING: do NOT extract this to a separate function without running benchmarks
|
|
12116
|
-
if (!checkNoChangesMode) {
|
|
12117
|
-
const hooksInitPhaseCompleted = (lView[FLAGS] & 3 /* LViewFlags.InitPhaseStateMask */) === 3 /* InitPhaseState.InitPhaseCompleted */;
|
|
12118
|
-
if (hooksInitPhaseCompleted) {
|
|
12119
|
-
const preOrderCheckHooks = tView.preOrderCheckHooks;
|
|
12120
|
-
if (preOrderCheckHooks !== null) {
|
|
12121
|
-
executeCheckHooks(lView, preOrderCheckHooks, index);
|
|
12122
|
-
}
|
|
12123
|
-
}
|
|
12124
|
-
else {
|
|
12125
|
-
const preOrderHooks = tView.preOrderHooks;
|
|
12126
|
-
if (preOrderHooks !== null) {
|
|
12127
|
-
executeInitAndCheckHooks(lView, preOrderHooks, 0 /* InitPhaseState.OnInitHooksToBeRun */, index);
|
|
12128
|
-
}
|
|
12129
|
-
}
|
|
12130
|
-
}
|
|
12131
|
-
// We must set the selected index *after* running the hooks, because hooks may have side-effects
|
|
12132
|
-
// that cause other template functions to run, thus updating the selected index, which is global
|
|
12133
|
-
// state. If we run `setSelectedIndex` *before* we run the hooks, in some cases the selected index
|
|
12134
|
-
// will be altered by the time we leave the `ɵɵadvance` instruction.
|
|
12135
|
-
setSelectedIndex(index);
|
|
12136
|
-
}
|
|
12137
|
-
|
|
12138
|
-
function ɵɵdirectiveInject(token, flags = InjectFlags.Default) {
|
|
12139
|
-
const lView = getLView();
|
|
12140
|
-
// Fall back to inject() if view hasn't been created. This situation can happen in tests
|
|
12141
|
-
// if inject utilities are used before bootstrapping.
|
|
12142
|
-
if (lView === null) {
|
|
12143
|
-
// Verify that we will not get into infinite loop.
|
|
12144
|
-
ngDevMode && assertInjectImplementationNotEqual(ɵɵdirectiveInject);
|
|
12145
|
-
return ɵɵinject(token, flags);
|
|
12146
|
-
}
|
|
12147
|
-
const tNode = getCurrentTNode();
|
|
12148
|
-
const value = getOrCreateInjectable(tNode, lView, resolveForwardRef(token), flags);
|
|
12149
|
-
ngDevMode && emitInjectEvent(token, value, flags);
|
|
12150
|
-
return value;
|
|
12151
|
-
}
|
|
12152
|
-
/**
|
|
12153
|
-
* Throws an error indicating that a factory function could not be generated by the compiler for a
|
|
12154
|
-
* particular class.
|
|
12155
|
-
*
|
|
12156
|
-
* This instruction allows the actual error message to be optimized away when ngDevMode is turned
|
|
12157
|
-
* off, saving bytes of generated code while still providing a good experience in dev mode.
|
|
12158
|
-
*
|
|
12159
|
-
* The name of the class is not mentioned here, but will be in the generated factory function name
|
|
12160
|
-
* and thus in the stack trace.
|
|
12161
|
-
*
|
|
12162
|
-
* @codeGenApi
|
|
12163
|
-
*/
|
|
12164
|
-
function ɵɵinvalidFactory() {
|
|
12165
|
-
const msg = ngDevMode
|
|
12166
|
-
? `This constructor was not compatible with Dependency Injection.`
|
|
12167
|
-
: 'invalid';
|
|
12168
|
-
throw new Error(msg);
|
|
12169
|
-
}
|
|
12170
|
-
|
|
12171
|
-
function writeToDirectiveInput(def, instance, publicName, privateName, flags, value) {
|
|
12172
|
-
const prevConsumer = setActiveConsumer$1(null);
|
|
12173
|
-
try {
|
|
12174
|
-
// If we know we are dealing with a signal input, we cache its reference
|
|
12175
|
-
// in a tree-shakable way. The input signal node can then be used for
|
|
12176
|
-
// value transform execution or actual value updates without introducing
|
|
12177
|
-
// additional megamorphic accesses for accessing the instance field.
|
|
12178
|
-
let inputSignalNode = null;
|
|
12179
|
-
if ((flags & InputFlags.SignalBased) !== 0) {
|
|
12180
|
-
const field = instance[privateName];
|
|
12181
|
-
inputSignalNode = field[SIGNAL$1];
|
|
12182
|
-
}
|
|
12183
|
-
// If there is a signal node and a transform, run it before potentially
|
|
12184
|
-
// delegating to features like `NgOnChanges`.
|
|
12185
|
-
if (inputSignalNode !== null && inputSignalNode.transformFn !== undefined) {
|
|
12186
|
-
value = inputSignalNode.transformFn(value);
|
|
12187
|
-
}
|
|
12188
|
-
// If there is a decorator input transform, run it.
|
|
12189
|
-
if ((flags & InputFlags.HasDecoratorInputTransform) !== 0) {
|
|
12190
|
-
value = def.inputTransforms[privateName].call(instance, value);
|
|
12191
|
-
}
|
|
12192
|
-
if (def.setInput !== null) {
|
|
12193
|
-
def.setInput(instance, inputSignalNode, value, publicName, privateName);
|
|
12194
|
-
}
|
|
12195
|
-
else {
|
|
12196
|
-
applyValueToInputField(instance, inputSignalNode, privateName, value);
|
|
12197
|
-
}
|
|
12198
|
-
}
|
|
12199
|
-
finally {
|
|
12200
|
-
setActiveConsumer$1(prevConsumer);
|
|
12201
|
-
}
|
|
12202
|
-
}
|
|
12203
|
-
|
|
12204
12080
|
function createTextNode(renderer, value) {
|
|
12205
12081
|
ngDevMode && ngDevMode.rendererCreateTextNode++;
|
|
12206
12082
|
ngDevMode && ngDevMode.rendererSetText++;
|
|
@@ -12317,6 +12193,100 @@ function setupStaticAttributes(renderer, element, tNode) {
|
|
|
12317
12193
|
}
|
|
12318
12194
|
}
|
|
12319
12195
|
|
|
12196
|
+
/**
|
|
12197
|
+
* Advances to an element for later binding instructions.
|
|
12198
|
+
*
|
|
12199
|
+
* Used in conjunction with instructions like {@link property} to act on elements with specified
|
|
12200
|
+
* indices, for example those created with {@link element} or {@link elementStart}.
|
|
12201
|
+
*
|
|
12202
|
+
* ```ts
|
|
12203
|
+
* (rf: RenderFlags, ctx: any) => {
|
|
12204
|
+
* if (rf & 1) {
|
|
12205
|
+
* text(0, 'Hello');
|
|
12206
|
+
* text(1, 'Goodbye')
|
|
12207
|
+
* element(2, 'div');
|
|
12208
|
+
* }
|
|
12209
|
+
* if (rf & 2) {
|
|
12210
|
+
* advance(2); // Advance twice to the <div>.
|
|
12211
|
+
* property('title', 'test');
|
|
12212
|
+
* }
|
|
12213
|
+
* }
|
|
12214
|
+
* ```
|
|
12215
|
+
* @param delta Number of elements to advance forwards by.
|
|
12216
|
+
*
|
|
12217
|
+
* @codeGenApi
|
|
12218
|
+
*/
|
|
12219
|
+
function ɵɵadvance(delta = 1) {
|
|
12220
|
+
ngDevMode && assertGreaterThan(delta, 0, 'Can only advance forward');
|
|
12221
|
+
selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, !!ngDevMode && isInCheckNoChangesMode());
|
|
12222
|
+
}
|
|
12223
|
+
function selectIndexInternal(tView, lView, index, checkNoChangesMode) {
|
|
12224
|
+
ngDevMode && assertIndexInDeclRange(lView[TVIEW], index);
|
|
12225
|
+
// Flush the initial hooks for elements in the view that have been added up to this point.
|
|
12226
|
+
// PERF WARNING: do NOT extract this to a separate function without running benchmarks
|
|
12227
|
+
if (!checkNoChangesMode) {
|
|
12228
|
+
const hooksInitPhaseCompleted = (lView[FLAGS] & 3 /* LViewFlags.InitPhaseStateMask */) === 3 /* InitPhaseState.InitPhaseCompleted */;
|
|
12229
|
+
if (hooksInitPhaseCompleted) {
|
|
12230
|
+
const preOrderCheckHooks = tView.preOrderCheckHooks;
|
|
12231
|
+
if (preOrderCheckHooks !== null) {
|
|
12232
|
+
executeCheckHooks(lView, preOrderCheckHooks, index);
|
|
12233
|
+
}
|
|
12234
|
+
}
|
|
12235
|
+
else {
|
|
12236
|
+
const preOrderHooks = tView.preOrderHooks;
|
|
12237
|
+
if (preOrderHooks !== null) {
|
|
12238
|
+
executeInitAndCheckHooks(lView, preOrderHooks, 0 /* InitPhaseState.OnInitHooksToBeRun */, index);
|
|
12239
|
+
}
|
|
12240
|
+
}
|
|
12241
|
+
}
|
|
12242
|
+
// We must set the selected index *after* running the hooks, because hooks may have side-effects
|
|
12243
|
+
// that cause other template functions to run, thus updating the selected index, which is global
|
|
12244
|
+
// state. If we run `setSelectedIndex` *before* we run the hooks, in some cases the selected index
|
|
12245
|
+
// will be altered by the time we leave the `ɵɵadvance` instruction.
|
|
12246
|
+
setSelectedIndex(index);
|
|
12247
|
+
}
|
|
12248
|
+
|
|
12249
|
+
/** Flags describing an input for a directive. */
|
|
12250
|
+
var InputFlags;
|
|
12251
|
+
(function (InputFlags) {
|
|
12252
|
+
InputFlags[InputFlags["None"] = 0] = "None";
|
|
12253
|
+
InputFlags[InputFlags["SignalBased"] = 1] = "SignalBased";
|
|
12254
|
+
InputFlags[InputFlags["HasDecoratorInputTransform"] = 2] = "HasDecoratorInputTransform";
|
|
12255
|
+
})(InputFlags || (InputFlags = {}));
|
|
12256
|
+
|
|
12257
|
+
function writeToDirectiveInput(def, instance, publicName, privateName, flags, value) {
|
|
12258
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
12259
|
+
try {
|
|
12260
|
+
// If we know we are dealing with a signal input, we cache its reference
|
|
12261
|
+
// in a tree-shakable way. The input signal node can then be used for
|
|
12262
|
+
// value transform execution or actual value updates without introducing
|
|
12263
|
+
// additional megamorphic accesses for accessing the instance field.
|
|
12264
|
+
let inputSignalNode = null;
|
|
12265
|
+
if ((flags & InputFlags.SignalBased) !== 0) {
|
|
12266
|
+
const field = instance[privateName];
|
|
12267
|
+
inputSignalNode = field[SIGNAL$1];
|
|
12268
|
+
}
|
|
12269
|
+
// If there is a signal node and a transform, run it before potentially
|
|
12270
|
+
// delegating to features like `NgOnChanges`.
|
|
12271
|
+
if (inputSignalNode !== null && inputSignalNode.transformFn !== undefined) {
|
|
12272
|
+
value = inputSignalNode.transformFn(value);
|
|
12273
|
+
}
|
|
12274
|
+
// If there is a decorator input transform, run it.
|
|
12275
|
+
if ((flags & InputFlags.HasDecoratorInputTransform) !== 0) {
|
|
12276
|
+
value = def.inputTransforms[privateName].call(instance, value);
|
|
12277
|
+
}
|
|
12278
|
+
if (def.setInput !== null) {
|
|
12279
|
+
def.setInput(instance, inputSignalNode, value, publicName, privateName);
|
|
12280
|
+
}
|
|
12281
|
+
else {
|
|
12282
|
+
applyValueToInputField(instance, inputSignalNode, privateName, value);
|
|
12283
|
+
}
|
|
12284
|
+
}
|
|
12285
|
+
finally {
|
|
12286
|
+
setActiveConsumer$1(prevConsumer);
|
|
12287
|
+
}
|
|
12288
|
+
}
|
|
12289
|
+
|
|
12320
12290
|
function createLView(parentLView, tView, context, flags, host, tHostNode, environment, renderer, injector, embeddedViewInjector, hydrationInfo) {
|
|
12321
12291
|
const lView = tView.blueprint.slice();
|
|
12322
12292
|
lView[HOST] = host;
|
|
@@ -12350,34 +12320,6 @@ function createLView(parentLView, tView, context, flags, host, tHostNode, enviro
|
|
|
12350
12320
|
tView.type == 2 /* TViewType.Embedded */ ? parentLView[DECLARATION_COMPONENT_VIEW] : lView;
|
|
12351
12321
|
return lView;
|
|
12352
12322
|
}
|
|
12353
|
-
/**
|
|
12354
|
-
* When elements are created dynamically after a view blueprint is created (e.g. through
|
|
12355
|
-
* i18nApply()), we need to adjust the blueprint for future
|
|
12356
|
-
* template passes.
|
|
12357
|
-
*
|
|
12358
|
-
* @param tView `TView` associated with `LView`
|
|
12359
|
-
* @param lView The `LView` containing the blueprint to adjust
|
|
12360
|
-
* @param numSlotsToAlloc The number of slots to alloc in the LView, should be >0
|
|
12361
|
-
* @param initialValue Initial value to store in blueprint
|
|
12362
|
-
*/
|
|
12363
|
-
function allocExpando(tView, lView, numSlotsToAlloc, initialValue) {
|
|
12364
|
-
if (numSlotsToAlloc === 0)
|
|
12365
|
-
return -1;
|
|
12366
|
-
if (ngDevMode) {
|
|
12367
|
-
assertFirstCreatePass(tView);
|
|
12368
|
-
assertSame(tView, lView[TVIEW], '`LView` must be associated with `TView`!');
|
|
12369
|
-
assertEqual(tView.data.length, lView.length, 'Expecting LView to be same size as TView');
|
|
12370
|
-
assertEqual(tView.data.length, tView.blueprint.length, 'Expecting Blueprint to be same size as TView');
|
|
12371
|
-
assertFirstUpdatePass(tView);
|
|
12372
|
-
}
|
|
12373
|
-
const allocIdx = lView.length;
|
|
12374
|
-
for (let i = 0; i < numSlotsToAlloc; i++) {
|
|
12375
|
-
lView.push(initialValue);
|
|
12376
|
-
tView.blueprint.push(initialValue);
|
|
12377
|
-
tView.data.push(null);
|
|
12378
|
-
}
|
|
12379
|
-
return allocIdx;
|
|
12380
|
-
}
|
|
12381
12323
|
function executeTemplate(tView, lView, templateFn, rf, context) {
|
|
12382
12324
|
const prevSelectedIndex = getSelectedIndex();
|
|
12383
12325
|
const isUpdatePhase = rf & 2 /* RenderFlags.Update */;
|
|
@@ -12405,10 +12347,17 @@ function executeTemplate(tView, lView, templateFn, rf, context) {
|
|
|
12405
12347
|
/**
|
|
12406
12348
|
* Creates directive instances.
|
|
12407
12349
|
*/
|
|
12408
|
-
function
|
|
12350
|
+
function createDirectivesInstancesInInstruction(tView, lView, tNode) {
|
|
12409
12351
|
if (!getBindingsEnabled())
|
|
12410
12352
|
return;
|
|
12411
|
-
|
|
12353
|
+
attachPatchData(getNativeByTNode(tNode, lView), lView);
|
|
12354
|
+
createDirectivesInstances(tView, lView, tNode);
|
|
12355
|
+
}
|
|
12356
|
+
/**
|
|
12357
|
+
* Creates directive instances.
|
|
12358
|
+
*/
|
|
12359
|
+
function createDirectivesInstances(tView, lView, tNode) {
|
|
12360
|
+
instantiateAllDirectives(tView, lView, tNode);
|
|
12412
12361
|
if ((tNode.flags & 64 /* TNodeFlags.hasHostBindings */) === 64 /* TNodeFlags.hasHostBindings */) {
|
|
12413
12362
|
invokeDirectivesHostBindings(tView, lView, tNode);
|
|
12414
12363
|
}
|
|
@@ -12583,106 +12532,6 @@ function applyRootElementTransformImpl(rootElement) {
|
|
|
12583
12532
|
function enableApplyRootElementTransformImpl() {
|
|
12584
12533
|
_applyRootElementTransformImpl = applyRootElementTransformImpl;
|
|
12585
12534
|
}
|
|
12586
|
-
function captureNodeBindings(mode, aliasMap, directiveIndex, bindingsResult, hostDirectiveAliasMap) {
|
|
12587
|
-
for (let publicName in aliasMap) {
|
|
12588
|
-
if (!aliasMap.hasOwnProperty(publicName)) {
|
|
12589
|
-
continue;
|
|
12590
|
-
}
|
|
12591
|
-
const value = aliasMap[publicName];
|
|
12592
|
-
if (value === undefined) {
|
|
12593
|
-
continue;
|
|
12594
|
-
}
|
|
12595
|
-
bindingsResult ??= {};
|
|
12596
|
-
let internalName;
|
|
12597
|
-
let inputFlags = InputFlags.None;
|
|
12598
|
-
// For inputs, the value might be an array capturing additional
|
|
12599
|
-
// input flags.
|
|
12600
|
-
if (Array.isArray(value)) {
|
|
12601
|
-
internalName = value[0];
|
|
12602
|
-
inputFlags = value[1];
|
|
12603
|
-
}
|
|
12604
|
-
else {
|
|
12605
|
-
internalName = value;
|
|
12606
|
-
}
|
|
12607
|
-
// If there are no host directive mappings, we want to remap using the alias map from the
|
|
12608
|
-
// definition itself. If there is an alias map, it has two functions:
|
|
12609
|
-
// 1. It serves as an allowlist of bindings that are exposed by the host directives. Only the
|
|
12610
|
-
// ones inside the host directive map will be exposed on the host.
|
|
12611
|
-
// 2. The public name of the property is aliased using the host directive alias map, rather
|
|
12612
|
-
// than the alias map from the definition.
|
|
12613
|
-
let finalPublicName = publicName;
|
|
12614
|
-
if (hostDirectiveAliasMap !== null) {
|
|
12615
|
-
// If there is no mapping, it's not part of the allowlist and this input/output
|
|
12616
|
-
// is not captured and should be ignored.
|
|
12617
|
-
if (!hostDirectiveAliasMap.hasOwnProperty(publicName)) {
|
|
12618
|
-
continue;
|
|
12619
|
-
}
|
|
12620
|
-
finalPublicName = hostDirectiveAliasMap[publicName];
|
|
12621
|
-
}
|
|
12622
|
-
if (mode === 0 /* CaptureNodeBindingMode.Inputs */) {
|
|
12623
|
-
addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName, inputFlags);
|
|
12624
|
-
}
|
|
12625
|
-
else {
|
|
12626
|
-
addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName);
|
|
12627
|
-
}
|
|
12628
|
-
}
|
|
12629
|
-
return bindingsResult;
|
|
12630
|
-
}
|
|
12631
|
-
function addPropertyBinding(bindings, directiveIndex, publicName, internalName, inputFlags) {
|
|
12632
|
-
let values;
|
|
12633
|
-
if (bindings.hasOwnProperty(publicName)) {
|
|
12634
|
-
(values = bindings[publicName]).push(directiveIndex, internalName);
|
|
12635
|
-
}
|
|
12636
|
-
else {
|
|
12637
|
-
values = bindings[publicName] = [directiveIndex, internalName];
|
|
12638
|
-
}
|
|
12639
|
-
if (inputFlags !== undefined) {
|
|
12640
|
-
values.push(inputFlags);
|
|
12641
|
-
}
|
|
12642
|
-
}
|
|
12643
|
-
/**
|
|
12644
|
-
* Initializes data structures required to work with directive inputs and outputs.
|
|
12645
|
-
* Initialization is done for all directives matched on a given TNode.
|
|
12646
|
-
*/
|
|
12647
|
-
function initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefinitionMap) {
|
|
12648
|
-
ngDevMode && assertFirstCreatePass(tView);
|
|
12649
|
-
const start = tNode.directiveStart;
|
|
12650
|
-
const end = tNode.directiveEnd;
|
|
12651
|
-
const tViewData = tView.data;
|
|
12652
|
-
const tNodeAttrs = tNode.attrs;
|
|
12653
|
-
const inputsFromAttrs = [];
|
|
12654
|
-
let inputsStore = null;
|
|
12655
|
-
let outputsStore = null;
|
|
12656
|
-
for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {
|
|
12657
|
-
const directiveDef = tViewData[directiveIndex];
|
|
12658
|
-
const aliasData = hostDirectiveDefinitionMap
|
|
12659
|
-
? hostDirectiveDefinitionMap.get(directiveDef)
|
|
12660
|
-
: null;
|
|
12661
|
-
const aliasedInputs = aliasData ? aliasData.inputs : null;
|
|
12662
|
-
const aliasedOutputs = aliasData ? aliasData.outputs : null;
|
|
12663
|
-
inputsStore = captureNodeBindings(0 /* CaptureNodeBindingMode.Inputs */, directiveDef.inputs, directiveIndex, inputsStore, aliasedInputs);
|
|
12664
|
-
outputsStore = captureNodeBindings(1 /* CaptureNodeBindingMode.Outputs */, directiveDef.outputs, directiveIndex, outputsStore, aliasedOutputs);
|
|
12665
|
-
// Do not use unbound attributes as inputs to structural directives, since structural
|
|
12666
|
-
// directive inputs can only be set using microsyntax (e.g. `<div *dir="exp">`).
|
|
12667
|
-
// TODO(FW-1930): microsyntax expressions may also contain unbound/static attributes, which
|
|
12668
|
-
// should be set for inline templates.
|
|
12669
|
-
const initialInputs = inputsStore !== null && tNodeAttrs !== null && !isInlineTemplate(tNode)
|
|
12670
|
-
? generateInitialInputs(inputsStore, directiveIndex, tNodeAttrs)
|
|
12671
|
-
: null;
|
|
12672
|
-
inputsFromAttrs.push(initialInputs);
|
|
12673
|
-
}
|
|
12674
|
-
if (inputsStore !== null) {
|
|
12675
|
-
if (inputsStore.hasOwnProperty('class')) {
|
|
12676
|
-
tNode.flags |= 8 /* TNodeFlags.hasClassInput */;
|
|
12677
|
-
}
|
|
12678
|
-
if (inputsStore.hasOwnProperty('style')) {
|
|
12679
|
-
tNode.flags |= 16 /* TNodeFlags.hasStyleInput */;
|
|
12680
|
-
}
|
|
12681
|
-
}
|
|
12682
|
-
tNode.initialInputs = inputsFromAttrs;
|
|
12683
|
-
tNode.inputs = inputsStore;
|
|
12684
|
-
tNode.outputs = outputsStore;
|
|
12685
|
-
}
|
|
12686
12535
|
/**
|
|
12687
12536
|
* Mapping between attributes names that don't correspond to their element property names.
|
|
12688
12537
|
*
|
|
@@ -12783,149 +12632,21 @@ function setNgReflectProperties(lView, element, type, dataValue, value) {
|
|
|
12783
12632
|
}
|
|
12784
12633
|
}
|
|
12785
12634
|
}
|
|
12786
|
-
/**
|
|
12787
|
-
* Resolve the matched directives on a node.
|
|
12788
|
-
*/
|
|
12789
|
-
function resolveDirectives(tView, lView, tNode, localRefs) {
|
|
12790
|
-
// Please make sure to have explicit type for `exportsMap`. Inferred type triggers bug in
|
|
12791
|
-
// tsickle.
|
|
12792
|
-
ngDevMode && assertFirstCreatePass(tView);
|
|
12793
|
-
if (getBindingsEnabled()) {
|
|
12794
|
-
const exportsMap = localRefs === null ? null : { '': -1 };
|
|
12795
|
-
const matchResult = findDirectiveDefMatches(tView, tNode);
|
|
12796
|
-
let directiveDefs;
|
|
12797
|
-
let hostDirectiveDefs;
|
|
12798
|
-
if (matchResult === null) {
|
|
12799
|
-
directiveDefs = hostDirectiveDefs = null;
|
|
12800
|
-
}
|
|
12801
|
-
else {
|
|
12802
|
-
[directiveDefs, hostDirectiveDefs] = matchResult;
|
|
12803
|
-
}
|
|
12804
|
-
if (directiveDefs !== null) {
|
|
12805
|
-
initializeDirectives(tView, lView, tNode, directiveDefs, exportsMap, hostDirectiveDefs);
|
|
12806
|
-
}
|
|
12807
|
-
if (exportsMap)
|
|
12808
|
-
cacheMatchingLocalNames(tNode, localRefs, exportsMap);
|
|
12809
|
-
}
|
|
12810
|
-
// Merge the template attrs last so that they have the highest priority.
|
|
12811
|
-
tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);
|
|
12812
|
-
}
|
|
12813
|
-
/** Initializes the data structures necessary for a list of directives to be instantiated. */
|
|
12814
|
-
function initializeDirectives(tView, lView, tNode, directives, exportsMap, hostDirectiveDefs) {
|
|
12815
|
-
ngDevMode && assertFirstCreatePass(tView);
|
|
12816
|
-
// Publishes the directive types to DI so they can be injected. Needs to
|
|
12817
|
-
// happen in a separate pass before the TNode flags have been initialized.
|
|
12818
|
-
for (let i = 0; i < directives.length; i++) {
|
|
12819
|
-
diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, directives[i].type);
|
|
12820
|
-
}
|
|
12821
|
-
initTNodeFlags(tNode, tView.data.length, directives.length);
|
|
12822
|
-
// When the same token is provided by several directives on the same node, some rules apply in
|
|
12823
|
-
// the viewEngine:
|
|
12824
|
-
// - viewProviders have priority over providers
|
|
12825
|
-
// - the last directive in NgModule.declarations has priority over the previous one
|
|
12826
|
-
// So to match these rules, the order in which providers are added in the arrays is very
|
|
12827
|
-
// important.
|
|
12828
|
-
for (let i = 0; i < directives.length; i++) {
|
|
12829
|
-
const def = directives[i];
|
|
12830
|
-
if (def.providersResolver)
|
|
12831
|
-
def.providersResolver(def);
|
|
12832
|
-
}
|
|
12833
|
-
let preOrderHooksFound = false;
|
|
12834
|
-
let preOrderCheckHooksFound = false;
|
|
12835
|
-
let directiveIdx = allocExpando(tView, lView, directives.length, null);
|
|
12836
|
-
ngDevMode &&
|
|
12837
|
-
assertSame(directiveIdx, tNode.directiveStart, 'TNode.directiveStart should point to just allocated space');
|
|
12838
|
-
for (let i = 0; i < directives.length; i++) {
|
|
12839
|
-
const def = directives[i];
|
|
12840
|
-
// Merge the attrs in the order of matches. This assumes that the first directive is the
|
|
12841
|
-
// component itself, so that the component has the least priority.
|
|
12842
|
-
tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);
|
|
12843
|
-
configureViewWithDirective(tView, tNode, lView, directiveIdx, def);
|
|
12844
|
-
saveNameToExportMap(directiveIdx, def, exportsMap);
|
|
12845
|
-
if (def.contentQueries !== null)
|
|
12846
|
-
tNode.flags |= 4 /* TNodeFlags.hasContentQuery */;
|
|
12847
|
-
if (def.hostBindings !== null || def.hostAttrs !== null || def.hostVars !== 0)
|
|
12848
|
-
tNode.flags |= 64 /* TNodeFlags.hasHostBindings */;
|
|
12849
|
-
const lifeCycleHooks = def.type.prototype;
|
|
12850
|
-
// Only push a node index into the preOrderHooks array if this is the first
|
|
12851
|
-
// pre-order hook found on this node.
|
|
12852
|
-
if (!preOrderHooksFound &&
|
|
12853
|
-
(lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngOnInit || lifeCycleHooks.ngDoCheck)) {
|
|
12854
|
-
// We will push the actual hook function into this array later during dir instantiation.
|
|
12855
|
-
// We cannot do it now because we must ensure hooks are registered in the same
|
|
12856
|
-
// order that directives are created (i.e. injection order).
|
|
12857
|
-
(tView.preOrderHooks ??= []).push(tNode.index);
|
|
12858
|
-
preOrderHooksFound = true;
|
|
12859
|
-
}
|
|
12860
|
-
if (!preOrderCheckHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngDoCheck)) {
|
|
12861
|
-
(tView.preOrderCheckHooks ??= []).push(tNode.index);
|
|
12862
|
-
preOrderCheckHooksFound = true;
|
|
12863
|
-
}
|
|
12864
|
-
directiveIdx++;
|
|
12865
|
-
}
|
|
12866
|
-
initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs);
|
|
12867
|
-
}
|
|
12868
|
-
/**
|
|
12869
|
-
* Add `hostBindings` to the `TView.hostBindingOpCodes`.
|
|
12870
|
-
*
|
|
12871
|
-
* @param tView `TView` to which the `hostBindings` should be added.
|
|
12872
|
-
* @param tNode `TNode` the element which contains the directive
|
|
12873
|
-
* @param directiveIdx Directive index in view.
|
|
12874
|
-
* @param directiveVarsIdx Where will the directive's vars be stored
|
|
12875
|
-
* @param def `ComponentDef`/`DirectiveDef`, which contains the `hostVars`/`hostBindings` to add.
|
|
12876
|
-
*/
|
|
12877
|
-
function registerHostBindingOpCodes(tView, tNode, directiveIdx, directiveVarsIdx, def) {
|
|
12878
|
-
ngDevMode && assertFirstCreatePass(tView);
|
|
12879
|
-
const hostBindings = def.hostBindings;
|
|
12880
|
-
if (hostBindings) {
|
|
12881
|
-
let hostBindingOpCodes = tView.hostBindingOpCodes;
|
|
12882
|
-
if (hostBindingOpCodes === null) {
|
|
12883
|
-
hostBindingOpCodes = tView.hostBindingOpCodes = [];
|
|
12884
|
-
}
|
|
12885
|
-
const elementIndx = ~tNode.index;
|
|
12886
|
-
if (lastSelectedElementIdx(hostBindingOpCodes) != elementIndx) {
|
|
12887
|
-
// Conditionally add select element so that we are more efficient in execution.
|
|
12888
|
-
// NOTE: this is strictly not necessary and it trades code size for runtime perf.
|
|
12889
|
-
// (We could just always add it.)
|
|
12890
|
-
hostBindingOpCodes.push(elementIndx);
|
|
12891
|
-
}
|
|
12892
|
-
hostBindingOpCodes.push(directiveIdx, directiveVarsIdx, hostBindings);
|
|
12893
|
-
}
|
|
12894
|
-
}
|
|
12895
|
-
/**
|
|
12896
|
-
* Returns the last selected element index in the `HostBindingOpCodes`
|
|
12897
|
-
*
|
|
12898
|
-
* For perf reasons we don't need to update the selected element index in `HostBindingOpCodes` only
|
|
12899
|
-
* if it changes. This method returns the last index (or '0' if not found.)
|
|
12900
|
-
*
|
|
12901
|
-
* Selected element index are only the ones which are negative.
|
|
12902
|
-
*/
|
|
12903
|
-
function lastSelectedElementIdx(hostBindingOpCodes) {
|
|
12904
|
-
let i = hostBindingOpCodes.length;
|
|
12905
|
-
while (i > 0) {
|
|
12906
|
-
const value = hostBindingOpCodes[--i];
|
|
12907
|
-
if (typeof value === 'number' && value < 0) {
|
|
12908
|
-
return value;
|
|
12909
|
-
}
|
|
12910
|
-
}
|
|
12911
|
-
return 0;
|
|
12912
|
-
}
|
|
12913
12635
|
/**
|
|
12914
12636
|
* Instantiate all the directives that were previously resolved on the current node.
|
|
12915
12637
|
*/
|
|
12916
|
-
function instantiateAllDirectives(tView, lView, tNode
|
|
12638
|
+
function instantiateAllDirectives(tView, lView, tNode) {
|
|
12917
12639
|
const start = tNode.directiveStart;
|
|
12918
12640
|
const end = tNode.directiveEnd;
|
|
12919
12641
|
// The component view needs to be created before creating the node injector
|
|
12920
12642
|
// since it is used to inject some special symbols like `ChangeDetectorRef`.
|
|
12921
12643
|
if (isComponentHost(tNode)) {
|
|
12922
12644
|
ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */);
|
|
12923
|
-
|
|
12645
|
+
createComponentLView(lView, tNode, tView.data[start + tNode.componentOffset]);
|
|
12924
12646
|
}
|
|
12925
12647
|
if (!tView.firstCreatePass) {
|
|
12926
12648
|
getOrCreateNodeInjectorForNode(tNode, lView);
|
|
12927
12649
|
}
|
|
12928
|
-
attachPatchData(native, lView);
|
|
12929
12650
|
const initialInputs = tNode.initialInputs;
|
|
12930
12651
|
for (let i = start; i < end; i++) {
|
|
12931
12652
|
const def = tView.data[i];
|
|
@@ -12981,140 +12702,28 @@ function findDirectiveDefMatches(tView, tNode) {
|
|
|
12981
12702
|
ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */);
|
|
12982
12703
|
const registry = tView.directiveRegistry;
|
|
12983
12704
|
let matches = null;
|
|
12984
|
-
let hostDirectiveDefs = null;
|
|
12985
12705
|
if (registry) {
|
|
12986
12706
|
for (let i = 0; i < registry.length; i++) {
|
|
12987
12707
|
const def = registry[i];
|
|
12988
12708
|
if (isNodeMatchingSelectorList(tNode, def.selectors, /* isProjectionMode */ false)) {
|
|
12989
|
-
matches
|
|
12709
|
+
matches ??= [];
|
|
12990
12710
|
if (isComponentDef(def)) {
|
|
12991
12711
|
if (ngDevMode) {
|
|
12992
12712
|
assertTNodeType(tNode, 2 /* TNodeType.Element */, `"${tNode.value}" tags cannot be used as component hosts. ` +
|
|
12993
12713
|
`Please use a different tag to activate the ${stringify(def.type)} component.`);
|
|
12994
|
-
if (
|
|
12714
|
+
if (matches.length && isComponentDef(matches[0])) {
|
|
12995
12715
|
throwMultipleComponentError(tNode, matches.find(isComponentDef).type, def.type);
|
|
12996
12716
|
}
|
|
12997
12717
|
}
|
|
12998
|
-
|
|
12999
|
-
// hooks run before any directive lifecycle hooks. This appears to be for ViewEngine
|
|
13000
|
-
// compatibility. This logic doesn't make sense with host directives, because it
|
|
13001
|
-
// would allow the host directives to undo any overrides the host may have made.
|
|
13002
|
-
// To handle this case, the host directives of components are inserted at the beginning
|
|
13003
|
-
// of the array, followed by the component. As such, the insertion order is as follows:
|
|
13004
|
-
// 1. Host directives belonging to the selector-matched component.
|
|
13005
|
-
// 2. Selector-matched component.
|
|
13006
|
-
// 3. Host directives belonging to selector-matched directives.
|
|
13007
|
-
// 4. Selector-matched directives.
|
|
13008
|
-
if (def.findHostDirectiveDefs !== null) {
|
|
13009
|
-
const hostDirectiveMatches = [];
|
|
13010
|
-
hostDirectiveDefs = hostDirectiveDefs || new Map();
|
|
13011
|
-
def.findHostDirectiveDefs(def, hostDirectiveMatches, hostDirectiveDefs);
|
|
13012
|
-
// Add all host directives declared on this component, followed by the component itself.
|
|
13013
|
-
// Host directives should execute first so the host has a chance to override changes
|
|
13014
|
-
// to the DOM made by them.
|
|
13015
|
-
matches.unshift(...hostDirectiveMatches, def);
|
|
13016
|
-
// Component is offset starting from the beginning of the host directives array.
|
|
13017
|
-
const componentOffset = hostDirectiveMatches.length;
|
|
13018
|
-
markAsComponentHost(tView, tNode, componentOffset);
|
|
13019
|
-
}
|
|
13020
|
-
else {
|
|
13021
|
-
// No host directives on this component, just add the
|
|
13022
|
-
// component def to the beginning of the matches.
|
|
13023
|
-
matches.unshift(def);
|
|
13024
|
-
markAsComponentHost(tView, tNode, 0);
|
|
13025
|
-
}
|
|
12718
|
+
matches.unshift(def);
|
|
13026
12719
|
}
|
|
13027
12720
|
else {
|
|
13028
|
-
// Append any host directives to the matches first.
|
|
13029
|
-
hostDirectiveDefs = hostDirectiveDefs || new Map();
|
|
13030
|
-
def.findHostDirectiveDefs?.(def, matches, hostDirectiveDefs);
|
|
13031
12721
|
matches.push(def);
|
|
13032
12722
|
}
|
|
13033
12723
|
}
|
|
13034
12724
|
}
|
|
13035
12725
|
}
|
|
13036
|
-
|
|
13037
|
-
return matches === null ? null : [matches, hostDirectiveDefs];
|
|
13038
|
-
}
|
|
13039
|
-
/**
|
|
13040
|
-
* Marks a given TNode as a component's host. This consists of:
|
|
13041
|
-
* - setting the component offset on the TNode.
|
|
13042
|
-
* - storing index of component's host element so it will be queued for view refresh during CD.
|
|
13043
|
-
*/
|
|
13044
|
-
function markAsComponentHost(tView, hostTNode, componentOffset) {
|
|
13045
|
-
ngDevMode && assertFirstCreatePass(tView);
|
|
13046
|
-
ngDevMode && assertGreaterThan(componentOffset, -1, 'componentOffset must be great than -1');
|
|
13047
|
-
hostTNode.componentOffset = componentOffset;
|
|
13048
|
-
(tView.components ??= []).push(hostTNode.index);
|
|
13049
|
-
}
|
|
13050
|
-
/** Caches local names and their matching directive indices for query and template lookups. */
|
|
13051
|
-
function cacheMatchingLocalNames(tNode, localRefs, exportsMap) {
|
|
13052
|
-
if (localRefs) {
|
|
13053
|
-
const localNames = (tNode.localNames = []);
|
|
13054
|
-
// Local names must be stored in tNode in the same order that localRefs are defined
|
|
13055
|
-
// in the template to ensure the data is loaded in the same slots as their refs
|
|
13056
|
-
// in the template (for template queries).
|
|
13057
|
-
for (let i = 0; i < localRefs.length; i += 2) {
|
|
13058
|
-
const index = exportsMap[localRefs[i + 1]];
|
|
13059
|
-
if (index == null)
|
|
13060
|
-
throw new RuntimeError(-301 /* RuntimeErrorCode.EXPORT_NOT_FOUND */, ngDevMode && `Export of name '${localRefs[i + 1]}' not found!`);
|
|
13061
|
-
localNames.push(localRefs[i], index);
|
|
13062
|
-
}
|
|
13063
|
-
}
|
|
13064
|
-
}
|
|
13065
|
-
/**
|
|
13066
|
-
* Builds up an export map as directives are created, so local refs can be quickly mapped
|
|
13067
|
-
* to their directive instances.
|
|
13068
|
-
*/
|
|
13069
|
-
function saveNameToExportMap(directiveIdx, def, exportsMap) {
|
|
13070
|
-
if (exportsMap) {
|
|
13071
|
-
if (def.exportAs) {
|
|
13072
|
-
for (let i = 0; i < def.exportAs.length; i++) {
|
|
13073
|
-
exportsMap[def.exportAs[i]] = directiveIdx;
|
|
13074
|
-
}
|
|
13075
|
-
}
|
|
13076
|
-
if (isComponentDef(def))
|
|
13077
|
-
exportsMap[''] = directiveIdx;
|
|
13078
|
-
}
|
|
13079
|
-
}
|
|
13080
|
-
/**
|
|
13081
|
-
* Initializes the flags on the current node, setting all indices to the initial index,
|
|
13082
|
-
* the directive count to 0, and adding the isComponent flag.
|
|
13083
|
-
* @param index the initial index
|
|
13084
|
-
*/
|
|
13085
|
-
function initTNodeFlags(tNode, index, numberOfDirectives) {
|
|
13086
|
-
ngDevMode &&
|
|
13087
|
-
assertNotEqual(numberOfDirectives, tNode.directiveEnd - tNode.directiveStart, 'Reached the max number of directives');
|
|
13088
|
-
tNode.flags |= 1 /* TNodeFlags.isDirectiveHost */;
|
|
13089
|
-
// When the first directive is created on a node, save the index
|
|
13090
|
-
tNode.directiveStart = index;
|
|
13091
|
-
tNode.directiveEnd = index + numberOfDirectives;
|
|
13092
|
-
tNode.providerIndexes = index;
|
|
13093
|
-
}
|
|
13094
|
-
/**
|
|
13095
|
-
* Setup directive for instantiation.
|
|
13096
|
-
*
|
|
13097
|
-
* We need to create a `NodeInjectorFactory` which is then inserted in both the `Blueprint` as well
|
|
13098
|
-
* as `LView`. `TView` gets the `DirectiveDef`.
|
|
13099
|
-
*
|
|
13100
|
-
* @param tView `TView`
|
|
13101
|
-
* @param tNode `TNode`
|
|
13102
|
-
* @param lView `LView`
|
|
13103
|
-
* @param directiveIndex Index where the directive will be stored in the Expando.
|
|
13104
|
-
* @param def `DirectiveDef`
|
|
13105
|
-
*/
|
|
13106
|
-
function configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {
|
|
13107
|
-
ngDevMode &&
|
|
13108
|
-
assertGreaterThanOrEqual(directiveIndex, HEADER_OFFSET, 'Must be in Expando section');
|
|
13109
|
-
tView.data[directiveIndex] = def;
|
|
13110
|
-
const directiveFactory = def.factory || (def.factory = getFactoryDef(def.type, true));
|
|
13111
|
-
// Even though `directiveFactory` will already be using `ɵɵdirectiveInject` in its generated code,
|
|
13112
|
-
// we also want to support `inject()` directly from the directive constructor context so we set
|
|
13113
|
-
// `ɵɵdirectiveInject` as the inject implementation here too.
|
|
13114
|
-
const nodeInjectorFactory = new NodeInjectorFactory(directiveFactory, isComponentDef(def), ɵɵdirectiveInject);
|
|
13115
|
-
tView.blueprint[directiveIndex] = nodeInjectorFactory;
|
|
13116
|
-
lView[directiveIndex] = nodeInjectorFactory;
|
|
13117
|
-
registerHostBindingOpCodes(tView, tNode, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);
|
|
12726
|
+
return matches;
|
|
13118
12727
|
}
|
|
13119
12728
|
/**
|
|
13120
12729
|
* Gets the initial set of LView flags based on the component definition that the LView represents.
|
|
@@ -13130,7 +12739,7 @@ function getInitialLViewFlagsFromDef(def) {
|
|
|
13130
12739
|
}
|
|
13131
12740
|
return flags;
|
|
13132
12741
|
}
|
|
13133
|
-
function
|
|
12742
|
+
function createComponentLView(lView, hostTNode, def) {
|
|
13134
12743
|
const native = getNativeByTNode(hostTNode, lView);
|
|
13135
12744
|
const tView = getOrCreateComponentTView(def);
|
|
13136
12745
|
// Only component views should be added to the view tree directly. Embedded views are
|
|
@@ -13139,7 +12748,7 @@ function addComponentLogic(lView, hostTNode, def) {
|
|
|
13139
12748
|
const componentView = addToEndOfViewTree(lView, createLView(lView, tView, null, getInitialLViewFlagsFromDef(def), native, hostTNode, null, rendererFactory.createRenderer(native, def), null, null, null));
|
|
13140
12749
|
// Component view will always be created before any injected LContainers,
|
|
13141
12750
|
// so this is a regular element, wrap it with the component view
|
|
13142
|
-
lView[hostTNode.index] = componentView;
|
|
12751
|
+
return (lView[hostTNode.index] = componentView);
|
|
13143
12752
|
}
|
|
13144
12753
|
function elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace) {
|
|
13145
12754
|
if (ngDevMode) {
|
|
@@ -13187,58 +12796,6 @@ function setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initial
|
|
|
13187
12796
|
}
|
|
13188
12797
|
}
|
|
13189
12798
|
}
|
|
13190
|
-
/**
|
|
13191
|
-
* Generates initialInputData for a node and stores it in the template's static storage
|
|
13192
|
-
* so subsequent template invocations don't have to recalculate it.
|
|
13193
|
-
*
|
|
13194
|
-
* initialInputData is an array containing values that need to be set as input properties
|
|
13195
|
-
* for directives on this node, but only once on creation. We need this array to support
|
|
13196
|
-
* the case where you set an @Input property of a directive using attribute-like syntax.
|
|
13197
|
-
* e.g. if you have a `name` @Input, you can set it once like this:
|
|
13198
|
-
*
|
|
13199
|
-
* <my-component name="Bess"></my-component>
|
|
13200
|
-
*
|
|
13201
|
-
* @param inputs Input alias map that was generated from the directive def inputs.
|
|
13202
|
-
* @param directiveIndex Index of the directive that is currently being processed.
|
|
13203
|
-
* @param attrs Static attrs on this node.
|
|
13204
|
-
*/
|
|
13205
|
-
function generateInitialInputs(inputs, directiveIndex, attrs) {
|
|
13206
|
-
let inputsToStore = null;
|
|
13207
|
-
let i = 0;
|
|
13208
|
-
while (i < attrs.length) {
|
|
13209
|
-
const attrName = attrs[i];
|
|
13210
|
-
if (attrName === 0 /* AttributeMarker.NamespaceURI */) {
|
|
13211
|
-
// We do not allow inputs on namespaced attributes.
|
|
13212
|
-
i += 4;
|
|
13213
|
-
continue;
|
|
13214
|
-
}
|
|
13215
|
-
else if (attrName === 5 /* AttributeMarker.ProjectAs */) {
|
|
13216
|
-
// Skip over the `ngProjectAs` value.
|
|
13217
|
-
i += 2;
|
|
13218
|
-
continue;
|
|
13219
|
-
}
|
|
13220
|
-
// If we hit any other attribute markers, we're done anyway. None of those are valid inputs.
|
|
13221
|
-
if (typeof attrName === 'number')
|
|
13222
|
-
break;
|
|
13223
|
-
if (inputs.hasOwnProperty(attrName)) {
|
|
13224
|
-
if (inputsToStore === null)
|
|
13225
|
-
inputsToStore = [];
|
|
13226
|
-
// Find the input's public name from the input store. Note that we can be found easier
|
|
13227
|
-
// through the directive def, but we want to do it using the inputs store so that it can
|
|
13228
|
-
// account for host directive aliases.
|
|
13229
|
-
const inputConfig = inputs[attrName];
|
|
13230
|
-
for (let j = 0; j < inputConfig.length; j += 3) {
|
|
13231
|
-
if (inputConfig[j] === directiveIndex) {
|
|
13232
|
-
inputsToStore.push(attrName, inputConfig[j + 1], inputConfig[j + 2], attrs[i + 1]);
|
|
13233
|
-
// A directive can't have multiple inputs with the same name so we can break here.
|
|
13234
|
-
break;
|
|
13235
|
-
}
|
|
13236
|
-
}
|
|
13237
|
-
}
|
|
13238
|
-
i += 2;
|
|
13239
|
-
}
|
|
13240
|
-
return inputsToStore;
|
|
13241
|
-
}
|
|
13242
12799
|
//////////////////////////
|
|
13243
12800
|
//// ViewContainer & View
|
|
13244
12801
|
//////////////////////////
|
|
@@ -13535,6 +13092,15 @@ function ensureIcuContainerVisitorLoaded(loader) {
|
|
|
13535
13092
|
}
|
|
13536
13093
|
}
|
|
13537
13094
|
|
|
13095
|
+
/**
|
|
13096
|
+
* Checks whether a TNode is considered detached, i.e. not present in the
|
|
13097
|
+
* translated i18n template. We should not attempt hydration for such nodes
|
|
13098
|
+
* and instead, use a regular "creation mode".
|
|
13099
|
+
*/
|
|
13100
|
+
function isDetachedByI18n(tNode) {
|
|
13101
|
+
return (tNode.flags & 32 /* TNodeFlags.isDetached */) === 32 /* TNodeFlags.isDetached */;
|
|
13102
|
+
}
|
|
13103
|
+
|
|
13538
13104
|
/**
|
|
13539
13105
|
* NOTE: for performance reasons, the possible actions are inlined within the function instead of
|
|
13540
13106
|
* being passed as an argument.
|
|
@@ -14011,10 +13577,9 @@ function getClosestRElement(tView, tNode, lView) {
|
|
|
14011
13577
|
}
|
|
14012
13578
|
else {
|
|
14013
13579
|
ngDevMode && assertTNodeType(parentTNode, 3 /* TNodeType.AnyRNode */ | 4 /* TNodeType.Container */);
|
|
14014
|
-
|
|
14015
|
-
if (componentOffset > -1) {
|
|
13580
|
+
if (isComponentHost(parentTNode)) {
|
|
14016
13581
|
ngDevMode && assertTNodeForLView(parentTNode, lView);
|
|
14017
|
-
const { encapsulation } = tView.data[parentTNode.directiveStart + componentOffset];
|
|
13582
|
+
const { encapsulation } = tView.data[parentTNode.directiveStart + parentTNode.componentOffset];
|
|
14018
13583
|
// We've got a parent which is an element in the current view. We just need to verify if the
|
|
14019
13584
|
// parent element is not a component. Component's content nodes are not inserted immediately
|
|
14020
13585
|
// because they will be projected, and so doing insert at this point would be wasteful.
|
|
@@ -14205,7 +13770,7 @@ function applyNodes(renderer, action, tNode, lView, parentRElement, beforeNode,
|
|
|
14205
13770
|
tNode.flags |= 2 /* TNodeFlags.isProjected */;
|
|
14206
13771
|
}
|
|
14207
13772
|
}
|
|
14208
|
-
if ((tNode
|
|
13773
|
+
if (!isDetachedByI18n(tNode)) {
|
|
14209
13774
|
if (tNodeType & 8 /* TNodeType.ElementContainer */) {
|
|
14210
13775
|
applyNodes(renderer, action, tNode.child, lView, parentRElement, beforeNode, false);
|
|
14211
13776
|
applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
|
|
@@ -17765,6 +17330,492 @@ function computeStaticStyling(tNode, attrs, writeToHost) {
|
|
|
17765
17330
|
writeToHost ? (tNode.classes = classes) : (tNode.classesWithoutHost = classes);
|
|
17766
17331
|
}
|
|
17767
17332
|
|
|
17333
|
+
function ɵɵdirectiveInject(token, flags = InjectFlags.Default) {
|
|
17334
|
+
const lView = getLView();
|
|
17335
|
+
// Fall back to inject() if view hasn't been created. This situation can happen in tests
|
|
17336
|
+
// if inject utilities are used before bootstrapping.
|
|
17337
|
+
if (lView === null) {
|
|
17338
|
+
// Verify that we will not get into infinite loop.
|
|
17339
|
+
ngDevMode && assertInjectImplementationNotEqual(ɵɵdirectiveInject);
|
|
17340
|
+
return ɵɵinject(token, flags);
|
|
17341
|
+
}
|
|
17342
|
+
const tNode = getCurrentTNode();
|
|
17343
|
+
const value = getOrCreateInjectable(tNode, lView, resolveForwardRef(token), flags);
|
|
17344
|
+
ngDevMode && emitInjectEvent(token, value, flags);
|
|
17345
|
+
return value;
|
|
17346
|
+
}
|
|
17347
|
+
/**
|
|
17348
|
+
* Throws an error indicating that a factory function could not be generated by the compiler for a
|
|
17349
|
+
* particular class.
|
|
17350
|
+
*
|
|
17351
|
+
* This instruction allows the actual error message to be optimized away when ngDevMode is turned
|
|
17352
|
+
* off, saving bytes of generated code while still providing a good experience in dev mode.
|
|
17353
|
+
*
|
|
17354
|
+
* The name of the class is not mentioned here, but will be in the generated factory function name
|
|
17355
|
+
* and thus in the stack trace.
|
|
17356
|
+
*
|
|
17357
|
+
* @codeGenApi
|
|
17358
|
+
*/
|
|
17359
|
+
function ɵɵinvalidFactory() {
|
|
17360
|
+
const msg = ngDevMode
|
|
17361
|
+
? `This constructor was not compatible with Dependency Injection.`
|
|
17362
|
+
: 'invalid';
|
|
17363
|
+
throw new Error(msg);
|
|
17364
|
+
}
|
|
17365
|
+
|
|
17366
|
+
/**
|
|
17367
|
+
* When elements are created dynamically after a view blueprint is created (e.g. through
|
|
17368
|
+
* i18nApply()), we need to adjust the blueprint for future template passes.
|
|
17369
|
+
*
|
|
17370
|
+
* @param tView `TView` associated with `LView`
|
|
17371
|
+
* @param lView The `LView` containing the blueprint to adjust
|
|
17372
|
+
* @param numSlotsToAlloc The number of slots to alloc in the LView, should be >0
|
|
17373
|
+
* @param initialValue Initial value to store in blueprint
|
|
17374
|
+
*/
|
|
17375
|
+
function allocExpando(tView, lView, numSlotsToAlloc, initialValue) {
|
|
17376
|
+
if (numSlotsToAlloc === 0)
|
|
17377
|
+
return -1;
|
|
17378
|
+
if (ngDevMode) {
|
|
17379
|
+
assertFirstCreatePass(tView);
|
|
17380
|
+
assertSame(tView, lView[TVIEW], '`LView` must be associated with `TView`!');
|
|
17381
|
+
assertEqual(tView.data.length, lView.length, 'Expecting LView to be same size as TView');
|
|
17382
|
+
assertEqual(tView.data.length, tView.blueprint.length, 'Expecting Blueprint to be same size as TView');
|
|
17383
|
+
assertFirstUpdatePass(tView);
|
|
17384
|
+
}
|
|
17385
|
+
const allocIdx = lView.length;
|
|
17386
|
+
for (let i = 0; i < numSlotsToAlloc; i++) {
|
|
17387
|
+
lView.push(initialValue);
|
|
17388
|
+
tView.blueprint.push(initialValue);
|
|
17389
|
+
tView.data.push(null);
|
|
17390
|
+
}
|
|
17391
|
+
return allocIdx;
|
|
17392
|
+
}
|
|
17393
|
+
|
|
17394
|
+
/**
|
|
17395
|
+
* Resolve the matched directives on a node.
|
|
17396
|
+
*/
|
|
17397
|
+
function resolveDirectives(tView, lView, tNode, localRefs, directiveMatcher) {
|
|
17398
|
+
// Please make sure to have explicit type for `exportsMap`. Inferred type triggers bug in
|
|
17399
|
+
// tsickle.
|
|
17400
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
17401
|
+
const exportsMap = localRefs === null ? null : { '': -1 };
|
|
17402
|
+
const matchedDirectiveDefs = directiveMatcher(tView, tNode);
|
|
17403
|
+
if (matchedDirectiveDefs !== null) {
|
|
17404
|
+
const [directiveDefs, hostDirectiveDefs] = resolveHostDirectives(tView, tNode, matchedDirectiveDefs);
|
|
17405
|
+
initializeDirectives(tView, lView, tNode, directiveDefs, exportsMap, hostDirectiveDefs);
|
|
17406
|
+
}
|
|
17407
|
+
if (exportsMap !== null && localRefs !== null) {
|
|
17408
|
+
cacheMatchingLocalNames(tNode, localRefs, exportsMap);
|
|
17409
|
+
}
|
|
17410
|
+
}
|
|
17411
|
+
/** Caches local names and their matching directive indices for query and template lookups. */
|
|
17412
|
+
function cacheMatchingLocalNames(tNode, localRefs, exportsMap) {
|
|
17413
|
+
const localNames = (tNode.localNames = []);
|
|
17414
|
+
// Local names must be stored in tNode in the same order that localRefs are defined
|
|
17415
|
+
// in the template to ensure the data is loaded in the same slots as their refs
|
|
17416
|
+
// in the template (for template queries).
|
|
17417
|
+
for (let i = 0; i < localRefs.length; i += 2) {
|
|
17418
|
+
const index = exportsMap[localRefs[i + 1]];
|
|
17419
|
+
if (index == null)
|
|
17420
|
+
throw new RuntimeError(-301 /* RuntimeErrorCode.EXPORT_NOT_FOUND */, ngDevMode && `Export of name '${localRefs[i + 1]}' not found!`);
|
|
17421
|
+
localNames.push(localRefs[i], index);
|
|
17422
|
+
}
|
|
17423
|
+
}
|
|
17424
|
+
function resolveHostDirectives(tView, tNode, matches) {
|
|
17425
|
+
const allDirectiveDefs = [];
|
|
17426
|
+
let hostDirectiveDefs = null;
|
|
17427
|
+
for (const def of matches) {
|
|
17428
|
+
if (def.findHostDirectiveDefs !== null) {
|
|
17429
|
+
// TODO(pk): probably could return matches instead of taking in an array to fill in?
|
|
17430
|
+
hostDirectiveDefs ??= new Map();
|
|
17431
|
+
// Components are inserted at the front of the matches array so that their lifecycle
|
|
17432
|
+
// hooks run before any directive lifecycle hooks. This appears to be for ViewEngine
|
|
17433
|
+
// compatibility. This logic doesn't make sense with host directives, because it
|
|
17434
|
+
// would allow the host directives to undo any overrides the host may have made.
|
|
17435
|
+
// To handle this case, the host directives of components are inserted at the beginning
|
|
17436
|
+
// of the array, followed by the component. As such, the insertion order is as follows:
|
|
17437
|
+
// 1. Host directives belonging to the selector-matched component.
|
|
17438
|
+
// 2. Selector-matched component.
|
|
17439
|
+
// 3. Host directives belonging to selector-matched directives.
|
|
17440
|
+
// 4. Selector-matched directives.
|
|
17441
|
+
def.findHostDirectiveDefs(def, allDirectiveDefs, hostDirectiveDefs);
|
|
17442
|
+
}
|
|
17443
|
+
if (isComponentDef(def)) {
|
|
17444
|
+
allDirectiveDefs.push(def);
|
|
17445
|
+
markAsComponentHost(tView, tNode, allDirectiveDefs.length - 1);
|
|
17446
|
+
}
|
|
17447
|
+
}
|
|
17448
|
+
if (isComponentHost(tNode)) {
|
|
17449
|
+
allDirectiveDefs.push(...matches.slice(1));
|
|
17450
|
+
}
|
|
17451
|
+
else {
|
|
17452
|
+
allDirectiveDefs.push(...matches);
|
|
17453
|
+
}
|
|
17454
|
+
if (ngDevMode) {
|
|
17455
|
+
assertNoDuplicateDirectives(allDirectiveDefs);
|
|
17456
|
+
}
|
|
17457
|
+
return [allDirectiveDefs, hostDirectiveDefs];
|
|
17458
|
+
}
|
|
17459
|
+
/**
|
|
17460
|
+
* Marks a given TNode as a component's host. This consists of:
|
|
17461
|
+
* - setting the component offset on the TNode.
|
|
17462
|
+
* - storing index of component's host element so it will be queued for view refresh during CD.
|
|
17463
|
+
*/
|
|
17464
|
+
function markAsComponentHost(tView, hostTNode, componentOffset) {
|
|
17465
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
17466
|
+
ngDevMode && assertGreaterThan(componentOffset, -1, 'componentOffset must be great than -1');
|
|
17467
|
+
hostTNode.componentOffset = componentOffset;
|
|
17468
|
+
(tView.components ??= []).push(hostTNode.index);
|
|
17469
|
+
}
|
|
17470
|
+
/** Initializes the data structures necessary for a list of directives to be instantiated. */
|
|
17471
|
+
function initializeDirectives(tView, lView, tNode, directives, exportsMap, hostDirectiveDefs) {
|
|
17472
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
17473
|
+
// Publishes the directive types to DI so they can be injected. Needs to
|
|
17474
|
+
// happen in a separate pass before the TNode flags have been initialized.
|
|
17475
|
+
for (let i = 0; i < directives.length; i++) {
|
|
17476
|
+
diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, directives[i].type);
|
|
17477
|
+
}
|
|
17478
|
+
initTNodeFlags(tNode, tView.data.length, directives.length);
|
|
17479
|
+
// When the same token is provided by several directives on the same node, some rules apply in
|
|
17480
|
+
// the viewEngine:
|
|
17481
|
+
// - viewProviders have priority over providers
|
|
17482
|
+
// - the last directive in NgModule.declarations has priority over the previous one
|
|
17483
|
+
// So to match these rules, the order in which providers are added in the arrays is very
|
|
17484
|
+
// important.
|
|
17485
|
+
for (let i = 0; i < directives.length; i++) {
|
|
17486
|
+
const def = directives[i];
|
|
17487
|
+
if (def.providersResolver)
|
|
17488
|
+
def.providersResolver(def);
|
|
17489
|
+
}
|
|
17490
|
+
let preOrderHooksFound = false;
|
|
17491
|
+
let preOrderCheckHooksFound = false;
|
|
17492
|
+
let directiveIdx = allocExpando(tView, lView, directives.length, null);
|
|
17493
|
+
ngDevMode &&
|
|
17494
|
+
assertSame(directiveIdx, tNode.directiveStart, 'TNode.directiveStart should point to just allocated space');
|
|
17495
|
+
for (let i = 0; i < directives.length; i++) {
|
|
17496
|
+
const def = directives[i];
|
|
17497
|
+
// Merge the attrs in the order of matches. This assumes that the first directive is the
|
|
17498
|
+
// component itself, so that the component has the least priority.
|
|
17499
|
+
tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);
|
|
17500
|
+
configureViewWithDirective(tView, tNode, lView, directiveIdx, def);
|
|
17501
|
+
saveNameToExportMap(directiveIdx, def, exportsMap);
|
|
17502
|
+
if (def.contentQueries !== null)
|
|
17503
|
+
tNode.flags |= 4 /* TNodeFlags.hasContentQuery */;
|
|
17504
|
+
if (def.hostBindings !== null || def.hostAttrs !== null || def.hostVars !== 0)
|
|
17505
|
+
tNode.flags |= 64 /* TNodeFlags.hasHostBindings */;
|
|
17506
|
+
const lifeCycleHooks = def.type.prototype;
|
|
17507
|
+
// Only push a node index into the preOrderHooks array if this is the first
|
|
17508
|
+
// pre-order hook found on this node.
|
|
17509
|
+
if (!preOrderHooksFound &&
|
|
17510
|
+
(lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngOnInit || lifeCycleHooks.ngDoCheck)) {
|
|
17511
|
+
// We will push the actual hook function into this array later during dir instantiation.
|
|
17512
|
+
// We cannot do it now because we must ensure hooks are registered in the same
|
|
17513
|
+
// order that directives are created (i.e. injection order).
|
|
17514
|
+
(tView.preOrderHooks ??= []).push(tNode.index);
|
|
17515
|
+
preOrderHooksFound = true;
|
|
17516
|
+
}
|
|
17517
|
+
if (!preOrderCheckHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngDoCheck)) {
|
|
17518
|
+
(tView.preOrderCheckHooks ??= []).push(tNode.index);
|
|
17519
|
+
preOrderCheckHooksFound = true;
|
|
17520
|
+
}
|
|
17521
|
+
directiveIdx++;
|
|
17522
|
+
}
|
|
17523
|
+
initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs);
|
|
17524
|
+
}
|
|
17525
|
+
/**
|
|
17526
|
+
* Initializes data structures required to work with directive inputs and outputs.
|
|
17527
|
+
* Initialization is done for all directives matched on a given TNode.
|
|
17528
|
+
*/
|
|
17529
|
+
function initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefinitionMap) {
|
|
17530
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
17531
|
+
const start = tNode.directiveStart;
|
|
17532
|
+
const end = tNode.directiveEnd;
|
|
17533
|
+
const tViewData = tView.data;
|
|
17534
|
+
const tNodeAttrs = tNode.attrs;
|
|
17535
|
+
const inputsFromAttrs = [];
|
|
17536
|
+
let inputsStore = null;
|
|
17537
|
+
let outputsStore = null;
|
|
17538
|
+
for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {
|
|
17539
|
+
const directiveDef = tViewData[directiveIndex];
|
|
17540
|
+
const aliasData = hostDirectiveDefinitionMap
|
|
17541
|
+
? hostDirectiveDefinitionMap.get(directiveDef)
|
|
17542
|
+
: null;
|
|
17543
|
+
const aliasedInputs = aliasData ? aliasData.inputs : null;
|
|
17544
|
+
const aliasedOutputs = aliasData ? aliasData.outputs : null;
|
|
17545
|
+
inputsStore = captureNodeBindings(0 /* CaptureNodeBindingMode.Inputs */, directiveDef.inputs, directiveIndex, inputsStore, aliasedInputs);
|
|
17546
|
+
outputsStore = captureNodeBindings(1 /* CaptureNodeBindingMode.Outputs */, directiveDef.outputs, directiveIndex, outputsStore, aliasedOutputs);
|
|
17547
|
+
// Do not use unbound attributes as inputs to structural directives, since structural
|
|
17548
|
+
// directive inputs can only be set using microsyntax (e.g. `<div *dir="exp">`).
|
|
17549
|
+
const initialInputs = inputsStore !== null && tNodeAttrs !== null && !isInlineTemplate(tNode)
|
|
17550
|
+
? generateInitialInputs(inputsStore, directiveIndex, tNodeAttrs)
|
|
17551
|
+
: null;
|
|
17552
|
+
inputsFromAttrs.push(initialInputs);
|
|
17553
|
+
}
|
|
17554
|
+
if (inputsStore !== null) {
|
|
17555
|
+
if (inputsStore.hasOwnProperty('class')) {
|
|
17556
|
+
tNode.flags |= 8 /* TNodeFlags.hasClassInput */;
|
|
17557
|
+
}
|
|
17558
|
+
if (inputsStore.hasOwnProperty('style')) {
|
|
17559
|
+
tNode.flags |= 16 /* TNodeFlags.hasStyleInput */;
|
|
17560
|
+
}
|
|
17561
|
+
}
|
|
17562
|
+
tNode.initialInputs = inputsFromAttrs;
|
|
17563
|
+
tNode.inputs = inputsStore;
|
|
17564
|
+
tNode.outputs = outputsStore;
|
|
17565
|
+
}
|
|
17566
|
+
function captureNodeBindings(mode, aliasMap, directiveIndex, bindingsResult, hostDirectiveAliasMap) {
|
|
17567
|
+
for (let publicName in aliasMap) {
|
|
17568
|
+
if (!aliasMap.hasOwnProperty(publicName)) {
|
|
17569
|
+
continue;
|
|
17570
|
+
}
|
|
17571
|
+
const value = aliasMap[publicName];
|
|
17572
|
+
if (value === undefined) {
|
|
17573
|
+
continue;
|
|
17574
|
+
}
|
|
17575
|
+
bindingsResult ??= {};
|
|
17576
|
+
let internalName;
|
|
17577
|
+
let inputFlags = InputFlags.None;
|
|
17578
|
+
// For inputs, the value might be an array capturing additional
|
|
17579
|
+
// input flags.
|
|
17580
|
+
if (Array.isArray(value)) {
|
|
17581
|
+
internalName = value[0];
|
|
17582
|
+
inputFlags = value[1];
|
|
17583
|
+
}
|
|
17584
|
+
else {
|
|
17585
|
+
internalName = value;
|
|
17586
|
+
}
|
|
17587
|
+
// If there are no host directive mappings, we want to remap using the alias map from the
|
|
17588
|
+
// definition itself. If there is an alias map, it has two functions:
|
|
17589
|
+
// 1. It serves as an allowlist of bindings that are exposed by the host directives. Only the
|
|
17590
|
+
// ones inside the host directive map will be exposed on the host.
|
|
17591
|
+
// 2. The public name of the property is aliased using the host directive alias map, rather
|
|
17592
|
+
// than the alias map from the definition.
|
|
17593
|
+
let finalPublicName = publicName;
|
|
17594
|
+
if (hostDirectiveAliasMap !== null) {
|
|
17595
|
+
// If there is no mapping, it's not part of the allowlist and this input/output
|
|
17596
|
+
// is not captured and should be ignored.
|
|
17597
|
+
if (!hostDirectiveAliasMap.hasOwnProperty(publicName)) {
|
|
17598
|
+
continue;
|
|
17599
|
+
}
|
|
17600
|
+
finalPublicName = hostDirectiveAliasMap[publicName];
|
|
17601
|
+
}
|
|
17602
|
+
if (mode === 0 /* CaptureNodeBindingMode.Inputs */) {
|
|
17603
|
+
addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName, inputFlags);
|
|
17604
|
+
}
|
|
17605
|
+
else {
|
|
17606
|
+
addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName);
|
|
17607
|
+
}
|
|
17608
|
+
}
|
|
17609
|
+
return bindingsResult;
|
|
17610
|
+
}
|
|
17611
|
+
function addPropertyBinding(bindings, directiveIndex, publicName, internalName, inputFlags) {
|
|
17612
|
+
let values;
|
|
17613
|
+
if (bindings.hasOwnProperty(publicName)) {
|
|
17614
|
+
(values = bindings[publicName]).push(directiveIndex, internalName);
|
|
17615
|
+
}
|
|
17616
|
+
else {
|
|
17617
|
+
values = bindings[publicName] = [directiveIndex, internalName];
|
|
17618
|
+
}
|
|
17619
|
+
if (inputFlags !== undefined) {
|
|
17620
|
+
values.push(inputFlags);
|
|
17621
|
+
}
|
|
17622
|
+
}
|
|
17623
|
+
/**
|
|
17624
|
+
* Generates initialInputData for a node and stores it in the template's static storage
|
|
17625
|
+
* so subsequent template invocations don't have to recalculate it.
|
|
17626
|
+
*
|
|
17627
|
+
* initialInputData is an array containing values that need to be set as input properties
|
|
17628
|
+
* for directives on this node, but only once on creation. We need this array to support
|
|
17629
|
+
* the case where you set an @Input property of a directive using attribute-like syntax.
|
|
17630
|
+
* e.g. if you have a `name` @Input, you can set it once like this:
|
|
17631
|
+
*
|
|
17632
|
+
* <my-component name="Bess"></my-component>
|
|
17633
|
+
*
|
|
17634
|
+
* @param inputs Input alias map that was generated from the directive def inputs.
|
|
17635
|
+
* @param directiveIndex Index of the directive that is currently being processed.
|
|
17636
|
+
* @param attrs Static attrs on this node.
|
|
17637
|
+
*/
|
|
17638
|
+
function generateInitialInputs(inputs, directiveIndex, attrs) {
|
|
17639
|
+
let inputsToStore = null;
|
|
17640
|
+
let i = 0;
|
|
17641
|
+
while (i < attrs.length) {
|
|
17642
|
+
const attrName = attrs[i];
|
|
17643
|
+
if (attrName === 0 /* AttributeMarker.NamespaceURI */) {
|
|
17644
|
+
// We do not allow inputs on namespaced attributes.
|
|
17645
|
+
i += 4;
|
|
17646
|
+
continue;
|
|
17647
|
+
}
|
|
17648
|
+
else if (attrName === 5 /* AttributeMarker.ProjectAs */) {
|
|
17649
|
+
// Skip over the `ngProjectAs` value.
|
|
17650
|
+
i += 2;
|
|
17651
|
+
continue;
|
|
17652
|
+
}
|
|
17653
|
+
// If we hit any other attribute markers, we're done anyway. None of those are valid inputs.
|
|
17654
|
+
if (typeof attrName === 'number')
|
|
17655
|
+
break;
|
|
17656
|
+
if (inputs.hasOwnProperty(attrName)) {
|
|
17657
|
+
if (inputsToStore === null)
|
|
17658
|
+
inputsToStore = [];
|
|
17659
|
+
// Find the input's public name from the input store. Note that we can be found easier
|
|
17660
|
+
// through the directive def, but we want to do it using the inputs store so that it can
|
|
17661
|
+
// account for host directive aliases.
|
|
17662
|
+
const inputConfig = inputs[attrName];
|
|
17663
|
+
for (let j = 0; j < inputConfig.length; j += 3) {
|
|
17664
|
+
if (inputConfig[j] === directiveIndex) {
|
|
17665
|
+
inputsToStore.push(attrName, inputConfig[j + 1], inputConfig[j + 2], attrs[i + 1]);
|
|
17666
|
+
// A directive can't have multiple inputs with the same name so we can break here.
|
|
17667
|
+
break;
|
|
17668
|
+
}
|
|
17669
|
+
}
|
|
17670
|
+
}
|
|
17671
|
+
i += 2;
|
|
17672
|
+
}
|
|
17673
|
+
return inputsToStore;
|
|
17674
|
+
}
|
|
17675
|
+
/**
|
|
17676
|
+
* Setup directive for instantiation.
|
|
17677
|
+
*
|
|
17678
|
+
* We need to create a `NodeInjectorFactory` which is then inserted in both the `Blueprint` as well
|
|
17679
|
+
* as `LView`. `TView` gets the `DirectiveDef`.
|
|
17680
|
+
*
|
|
17681
|
+
* @param tView `TView`
|
|
17682
|
+
* @param tNode `TNode`
|
|
17683
|
+
* @param lView `LView`
|
|
17684
|
+
* @param directiveIndex Index where the directive will be stored in the Expando.
|
|
17685
|
+
* @param def `DirectiveDef`
|
|
17686
|
+
*/
|
|
17687
|
+
function configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {
|
|
17688
|
+
ngDevMode &&
|
|
17689
|
+
assertGreaterThanOrEqual(directiveIndex, HEADER_OFFSET, 'Must be in Expando section');
|
|
17690
|
+
tView.data[directiveIndex] = def;
|
|
17691
|
+
const directiveFactory = def.factory || (def.factory = getFactoryDef(def.type, true));
|
|
17692
|
+
// Even though `directiveFactory` will already be using `ɵɵdirectiveInject` in its generated code,
|
|
17693
|
+
// we also want to support `inject()` directly from the directive constructor context so we set
|
|
17694
|
+
// `ɵɵdirectiveInject` as the inject implementation here too.
|
|
17695
|
+
const nodeInjectorFactory = new NodeInjectorFactory(directiveFactory, isComponentDef(def), ɵɵdirectiveInject);
|
|
17696
|
+
tView.blueprint[directiveIndex] = nodeInjectorFactory;
|
|
17697
|
+
lView[directiveIndex] = nodeInjectorFactory;
|
|
17698
|
+
registerHostBindingOpCodes(tView, tNode, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);
|
|
17699
|
+
}
|
|
17700
|
+
/**
|
|
17701
|
+
* Add `hostBindings` to the `TView.hostBindingOpCodes`.
|
|
17702
|
+
*
|
|
17703
|
+
* @param tView `TView` to which the `hostBindings` should be added.
|
|
17704
|
+
* @param tNode `TNode` the element which contains the directive
|
|
17705
|
+
* @param directiveIdx Directive index in view.
|
|
17706
|
+
* @param directiveVarsIdx Where will the directive's vars be stored
|
|
17707
|
+
* @param def `ComponentDef`/`DirectiveDef`, which contains the `hostVars`/`hostBindings` to add.
|
|
17708
|
+
*/
|
|
17709
|
+
function registerHostBindingOpCodes(tView, tNode, directiveIdx, directiveVarsIdx, def) {
|
|
17710
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
17711
|
+
const hostBindings = def.hostBindings;
|
|
17712
|
+
if (hostBindings) {
|
|
17713
|
+
let hostBindingOpCodes = tView.hostBindingOpCodes;
|
|
17714
|
+
if (hostBindingOpCodes === null) {
|
|
17715
|
+
hostBindingOpCodes = tView.hostBindingOpCodes = [];
|
|
17716
|
+
}
|
|
17717
|
+
const elementIndx = ~tNode.index;
|
|
17718
|
+
if (lastSelectedElementIdx(hostBindingOpCodes) != elementIndx) {
|
|
17719
|
+
// Conditionally add select element so that we are more efficient in execution.
|
|
17720
|
+
// NOTE: this is strictly not necessary and it trades code size for runtime perf.
|
|
17721
|
+
// (We could just always add it.)
|
|
17722
|
+
hostBindingOpCodes.push(elementIndx);
|
|
17723
|
+
}
|
|
17724
|
+
hostBindingOpCodes.push(directiveIdx, directiveVarsIdx, hostBindings);
|
|
17725
|
+
}
|
|
17726
|
+
}
|
|
17727
|
+
/**
|
|
17728
|
+
* Returns the last selected element index in the `HostBindingOpCodes`
|
|
17729
|
+
*
|
|
17730
|
+
* For perf reasons we don't need to update the selected element index in `HostBindingOpCodes` only
|
|
17731
|
+
* if it changes. This method returns the last index (or '0' if not found.)
|
|
17732
|
+
*
|
|
17733
|
+
* Selected element index are only the ones which are negative.
|
|
17734
|
+
*/
|
|
17735
|
+
function lastSelectedElementIdx(hostBindingOpCodes) {
|
|
17736
|
+
let i = hostBindingOpCodes.length;
|
|
17737
|
+
while (i > 0) {
|
|
17738
|
+
const value = hostBindingOpCodes[--i];
|
|
17739
|
+
if (typeof value === 'number' && value < 0) {
|
|
17740
|
+
return value;
|
|
17741
|
+
}
|
|
17742
|
+
}
|
|
17743
|
+
return 0;
|
|
17744
|
+
}
|
|
17745
|
+
/**
|
|
17746
|
+
* Builds up an export map as directives are created, so local refs can be quickly mapped
|
|
17747
|
+
* to their directive instances.
|
|
17748
|
+
*/
|
|
17749
|
+
function saveNameToExportMap(directiveIdx, def, exportsMap) {
|
|
17750
|
+
if (exportsMap) {
|
|
17751
|
+
if (def.exportAs) {
|
|
17752
|
+
for (let i = 0; i < def.exportAs.length; i++) {
|
|
17753
|
+
exportsMap[def.exportAs[i]] = directiveIdx;
|
|
17754
|
+
}
|
|
17755
|
+
}
|
|
17756
|
+
if (isComponentDef(def))
|
|
17757
|
+
exportsMap[''] = directiveIdx;
|
|
17758
|
+
}
|
|
17759
|
+
}
|
|
17760
|
+
/**
|
|
17761
|
+
* Initializes the flags on the current node, setting all indices to the initial index,
|
|
17762
|
+
* the directive count to 0, and adding the isComponent flag.
|
|
17763
|
+
* @param index the initial index
|
|
17764
|
+
*/
|
|
17765
|
+
function initTNodeFlags(tNode, index, numberOfDirectives) {
|
|
17766
|
+
ngDevMode &&
|
|
17767
|
+
assertNotEqual(numberOfDirectives, tNode.directiveEnd - tNode.directiveStart, 'Reached the max number of directives');
|
|
17768
|
+
tNode.flags |= 1 /* TNodeFlags.isDirectiveHost */;
|
|
17769
|
+
// When the first directive is created on a node, save the index
|
|
17770
|
+
tNode.directiveStart = index;
|
|
17771
|
+
tNode.directiveEnd = index + numberOfDirectives;
|
|
17772
|
+
tNode.providerIndexes = index;
|
|
17773
|
+
}
|
|
17774
|
+
function assertNoDuplicateDirectives(directives) {
|
|
17775
|
+
// The array needs at least two elements in order to have duplicates.
|
|
17776
|
+
if (directives.length < 2) {
|
|
17777
|
+
return;
|
|
17778
|
+
}
|
|
17779
|
+
const seenDirectives = new Set();
|
|
17780
|
+
for (const current of directives) {
|
|
17781
|
+
if (seenDirectives.has(current)) {
|
|
17782
|
+
throw new RuntimeError(309 /* RuntimeErrorCode.DUPLICATE_DIRECTIVE */, `Directive ${current.type.name} matches multiple times on the same element. ` +
|
|
17783
|
+
`Directives can only match an element once.`);
|
|
17784
|
+
}
|
|
17785
|
+
seenDirectives.add(current);
|
|
17786
|
+
}
|
|
17787
|
+
}
|
|
17788
|
+
|
|
17789
|
+
function elementStartFirstCreatePass(index, tView, lView, name, directiveMatcher, bindingsEnabled, attrsIndex, localRefsIndex) {
|
|
17790
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
17791
|
+
ngDevMode && ngDevMode.firstCreatePass++;
|
|
17792
|
+
const tViewConsts = tView.consts;
|
|
17793
|
+
const attrs = getConstant(tViewConsts, attrsIndex);
|
|
17794
|
+
const tNode = getOrCreateTNode(tView, index, 2 /* TNodeType.Element */, name, attrs);
|
|
17795
|
+
if (bindingsEnabled) {
|
|
17796
|
+
resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex), directiveMatcher);
|
|
17797
|
+
}
|
|
17798
|
+
// Merge the template attrs last so that they have the highest priority.
|
|
17799
|
+
tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);
|
|
17800
|
+
if (tNode.attrs !== null) {
|
|
17801
|
+
computeStaticStyling(tNode, tNode.attrs, false);
|
|
17802
|
+
}
|
|
17803
|
+
if (tNode.mergedAttrs !== null) {
|
|
17804
|
+
computeStaticStyling(tNode, tNode.mergedAttrs, true);
|
|
17805
|
+
}
|
|
17806
|
+
if (tView.queries !== null) {
|
|
17807
|
+
tView.queries.elementStart(tView, tNode);
|
|
17808
|
+
}
|
|
17809
|
+
return tNode;
|
|
17810
|
+
}
|
|
17811
|
+
function elementEndFirstCreatePass(tView, tNode) {
|
|
17812
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
17813
|
+
registerPostOrderHooks(tView, tNode);
|
|
17814
|
+
if (isContentQueryHost(tNode)) {
|
|
17815
|
+
tView.queries.elementEnd(tNode);
|
|
17816
|
+
}
|
|
17817
|
+
}
|
|
17818
|
+
|
|
17768
17819
|
class ComponentFactoryResolver extends ComponentFactoryResolver$1 {
|
|
17769
17820
|
ngModule;
|
|
17770
17821
|
/**
|
|
@@ -17809,18 +17860,51 @@ function toRefArray(map, isInputMap) {
|
|
|
17809
17860
|
}
|
|
17810
17861
|
return array;
|
|
17811
17862
|
}
|
|
17812
|
-
function
|
|
17813
|
-
|
|
17814
|
-
|
|
17863
|
+
function verifyNotAnOrphanComponent(componentDef) {
|
|
17864
|
+
// TODO(pk): create assert that verifies ngDevMode
|
|
17865
|
+
if ((typeof ngJitMode === 'undefined' || ngJitMode) &&
|
|
17866
|
+
componentDef.debugInfo?.forbidOrphanRendering) {
|
|
17867
|
+
if (depsTracker.isOrphanComponent(componentDef.type)) {
|
|
17868
|
+
throw new RuntimeError(981 /* RuntimeErrorCode.RUNTIME_DEPS_ORPHAN_COMPONENT */, `Orphan component found! Trying to render the component ${debugStringifyTypeForError(componentDef.type)} without first loading the NgModule that declares it. It is recommended to make this component standalone in order to avoid this error. If this is not possible now, import the component's NgModule in the appropriate NgModule, or the standalone component in which you are trying to render this component. If this is a lazy import, load the NgModule lazily as well and use its module injector.`);
|
|
17869
|
+
}
|
|
17870
|
+
}
|
|
17871
|
+
}
|
|
17872
|
+
function createRootViewInjector(componentDef, environmentInjector, injector) {
|
|
17873
|
+
let realEnvironmentInjector = environmentInjector instanceof EnvironmentInjector
|
|
17874
|
+
? environmentInjector
|
|
17875
|
+
: environmentInjector?.injector;
|
|
17876
|
+
if (realEnvironmentInjector && componentDef.getStandaloneInjector !== null) {
|
|
17877
|
+
realEnvironmentInjector =
|
|
17878
|
+
componentDef.getStandaloneInjector(realEnvironmentInjector) || realEnvironmentInjector;
|
|
17879
|
+
}
|
|
17880
|
+
const rootViewInjector = realEnvironmentInjector
|
|
17881
|
+
? new ChainedInjector(injector, realEnvironmentInjector)
|
|
17882
|
+
: injector;
|
|
17883
|
+
return rootViewInjector;
|
|
17884
|
+
}
|
|
17885
|
+
function createRootLViewEnvironment(rootLViewInjector) {
|
|
17886
|
+
const rendererFactory = rootLViewInjector.get(RendererFactory2, null);
|
|
17887
|
+
if (rendererFactory === null) {
|
|
17888
|
+
throw new RuntimeError(407 /* RuntimeErrorCode.RENDERER_NOT_FOUND */, ngDevMode &&
|
|
17889
|
+
'Angular was not able to inject a renderer (RendererFactory2). ' +
|
|
17890
|
+
'Likely this is due to a broken DI hierarchy. ' +
|
|
17891
|
+
'Make sure that any injector used to create this component has a correct parent.');
|
|
17892
|
+
}
|
|
17893
|
+
const sanitizer = rootLViewInjector.get(Sanitizer, null);
|
|
17894
|
+
const changeDetectionScheduler = rootLViewInjector.get(ChangeDetectionScheduler, null);
|
|
17895
|
+
return {
|
|
17896
|
+
rendererFactory,
|
|
17897
|
+
sanitizer,
|
|
17898
|
+
changeDetectionScheduler,
|
|
17899
|
+
};
|
|
17815
17900
|
}
|
|
17816
|
-
|
|
17817
|
-
|
|
17818
|
-
|
|
17819
|
-
|
|
17820
|
-
|
|
17821
|
-
|
|
17822
|
-
|
|
17823
|
-
return tAtts;
|
|
17901
|
+
function createHostElement(componentDef, render) {
|
|
17902
|
+
// Determine a tag name used for creating host elements when this component is created
|
|
17903
|
+
// dynamically. Default to 'div' if this component did not specify any tag name in its
|
|
17904
|
+
// selector.
|
|
17905
|
+
const tagName = (componentDef.selectors[0][0] || 'div').toLowerCase();
|
|
17906
|
+
const namespace = tagName === 'svg' ? SVG_NAMESPACE : tagName === 'math' ? MATH_ML_NAMESPACE : null;
|
|
17907
|
+
return createElementNode(render, tagName, namespace);
|
|
17824
17908
|
}
|
|
17825
17909
|
/**
|
|
17826
17910
|
* ComponentFactory interface implementation.
|
|
@@ -17858,118 +17942,55 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
17858
17942
|
this.ngModule = ngModule;
|
|
17859
17943
|
this.componentType = componentDef.type;
|
|
17860
17944
|
this.selector = stringifyCSSSelectorList(componentDef.selectors);
|
|
17861
|
-
this.ngContentSelectors = componentDef.ngContentSelectors
|
|
17862
|
-
? componentDef.ngContentSelectors
|
|
17863
|
-
: [];
|
|
17945
|
+
this.ngContentSelectors = componentDef.ngContentSelectors ?? [];
|
|
17864
17946
|
this.isBoundToModule = !!ngModule;
|
|
17865
17947
|
}
|
|
17866
17948
|
create(injector, projectableNodes, rootSelectorOrNode, environmentInjector) {
|
|
17867
17949
|
const prevConsumer = setActiveConsumer$1(null);
|
|
17868
17950
|
try {
|
|
17869
|
-
|
|
17870
|
-
|
|
17871
|
-
|
|
17872
|
-
|
|
17873
|
-
|
|
17874
|
-
|
|
17875
|
-
}
|
|
17876
|
-
}
|
|
17877
|
-
environmentInjector = environmentInjector || this.ngModule;
|
|
17878
|
-
let realEnvironmentInjector = environmentInjector instanceof EnvironmentInjector
|
|
17879
|
-
? environmentInjector
|
|
17880
|
-
: environmentInjector?.injector;
|
|
17881
|
-
if (realEnvironmentInjector && this.componentDef.getStandaloneInjector !== null) {
|
|
17882
|
-
realEnvironmentInjector =
|
|
17883
|
-
this.componentDef.getStandaloneInjector(realEnvironmentInjector) ||
|
|
17884
|
-
realEnvironmentInjector;
|
|
17885
|
-
}
|
|
17886
|
-
const rootViewInjector = realEnvironmentInjector
|
|
17887
|
-
? new ChainedInjector(injector, realEnvironmentInjector)
|
|
17888
|
-
: injector;
|
|
17889
|
-
const rendererFactory = rootViewInjector.get(RendererFactory2, null);
|
|
17890
|
-
if (rendererFactory === null) {
|
|
17891
|
-
throw new RuntimeError(407 /* RuntimeErrorCode.RENDERER_NOT_FOUND */, ngDevMode &&
|
|
17892
|
-
'Angular was not able to inject a renderer (RendererFactory2). ' +
|
|
17893
|
-
'Likely this is due to a broken DI hierarchy. ' +
|
|
17894
|
-
'Make sure that any injector used to create this component has a correct parent.');
|
|
17895
|
-
}
|
|
17896
|
-
const sanitizer = rootViewInjector.get(Sanitizer, null);
|
|
17897
|
-
const changeDetectionScheduler = rootViewInjector.get(ChangeDetectionScheduler, null);
|
|
17898
|
-
const environment = {
|
|
17899
|
-
rendererFactory,
|
|
17900
|
-
sanitizer,
|
|
17901
|
-
changeDetectionScheduler,
|
|
17902
|
-
};
|
|
17903
|
-
const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);
|
|
17904
|
-
// Determine a tag name used for creating host elements when this component is created
|
|
17905
|
-
// dynamically. Default to 'div' if this component did not specify any tag name in its
|
|
17906
|
-
// selector.
|
|
17907
|
-
const elementName = this.componentDef.selectors[0][0] || 'div';
|
|
17908
|
-
const hostRNode = rootSelectorOrNode
|
|
17909
|
-
? locateHostElement(hostRenderer, rootSelectorOrNode, this.componentDef.encapsulation, rootViewInjector)
|
|
17910
|
-
: createElementNode(hostRenderer, elementName, getNamespace(elementName));
|
|
17911
|
-
let rootFlags = 512 /* LViewFlags.IsRoot */;
|
|
17912
|
-
if (this.componentDef.signals) {
|
|
17913
|
-
rootFlags |= 4096 /* LViewFlags.SignalView */;
|
|
17914
|
-
}
|
|
17915
|
-
else if (!this.componentDef.onPush) {
|
|
17916
|
-
rootFlags |= 16 /* LViewFlags.CheckAlways */;
|
|
17917
|
-
}
|
|
17918
|
-
let hydrationInfo = null;
|
|
17919
|
-
if (hostRNode !== null) {
|
|
17920
|
-
hydrationInfo = retrieveHydrationInfo(hostRNode, rootViewInjector, true /* isRootView */);
|
|
17921
|
-
}
|
|
17951
|
+
const cmpDef = this.componentDef;
|
|
17952
|
+
ngDevMode && verifyNotAnOrphanComponent(cmpDef);
|
|
17953
|
+
const tAttributes = rootSelectorOrNode
|
|
17954
|
+
? ['ng-version', '19.1.5']
|
|
17955
|
+
: // Extract attributes and classes from the first selector only to match VE behavior.
|
|
17956
|
+
extractAttrsAndClassesFromSelector(this.componentDef.selectors[0]);
|
|
17922
17957
|
// Create the root view. Uses empty TView and ContentTemplate.
|
|
17923
|
-
const rootTView = createTView(0 /* TViewType.Root */, null, null, 1, 0, null, null, null, null,
|
|
17924
|
-
const
|
|
17925
|
-
|
|
17958
|
+
const rootTView = createTView(0 /* TViewType.Root */, null, null, 1, 0, null, null, null, null, [tAttributes], null);
|
|
17959
|
+
const rootViewInjector = createRootViewInjector(cmpDef, environmentInjector || this.ngModule, injector);
|
|
17960
|
+
const environment = createRootLViewEnvironment(rootViewInjector);
|
|
17961
|
+
const hostRenderer = environment.rendererFactory.createRenderer(null, cmpDef);
|
|
17962
|
+
const hostElement = rootSelectorOrNode
|
|
17963
|
+
? locateHostElement(hostRenderer, rootSelectorOrNode, cmpDef.encapsulation, rootViewInjector)
|
|
17964
|
+
: createHostElement(cmpDef, hostRenderer);
|
|
17965
|
+
const rootLView = createLView(null, rootTView, null, 512 /* LViewFlags.IsRoot */ | getInitialLViewFlagsFromDef(cmpDef), null, null, environment, hostRenderer, rootViewInjector, null, retrieveHydrationInfo(hostElement, rootViewInjector, true /* isRootView */));
|
|
17966
|
+
rootLView[HEADER_OFFSET] = hostElement;
|
|
17926
17967
|
// rootView is the parent when bootstrapping
|
|
17927
17968
|
// TODO(misko): it looks like we are entering view here but we don't really need to as
|
|
17928
17969
|
// `renderView` does that. However as the code is written it is needed because
|
|
17929
17970
|
// `createRootComponentView` and `createRootComponent` both read global state. Fixing those
|
|
17930
17971
|
// issues would allow us to drop this.
|
|
17931
17972
|
enterView(rootLView);
|
|
17932
|
-
let component;
|
|
17933
17973
|
let componentView = null;
|
|
17934
17974
|
try {
|
|
17935
|
-
const
|
|
17936
|
-
|
|
17937
|
-
let hostDirectiveDefs = null;
|
|
17938
|
-
if (rootComponentDef.findHostDirectiveDefs) {
|
|
17939
|
-
rootDirectives = [];
|
|
17940
|
-
hostDirectiveDefs = new Map();
|
|
17941
|
-
rootComponentDef.findHostDirectiveDefs(rootComponentDef, rootDirectives, hostDirectiveDefs);
|
|
17942
|
-
rootDirectives.push(rootComponentDef);
|
|
17943
|
-
ngDevMode && assertNoDuplicateDirectives(rootDirectives);
|
|
17944
|
-
}
|
|
17945
|
-
else {
|
|
17946
|
-
rootDirectives = [rootComponentDef];
|
|
17947
|
-
}
|
|
17948
|
-
// If host dom element is created (instead of being provided as part of the dynamic component creation), also apply attributes and classes extracted from component selector.
|
|
17949
|
-
const tAttributes = rootSelectorOrNode
|
|
17950
|
-
? ['ng-version', '19.1.3']
|
|
17951
|
-
: // Extract attributes and classes from the first selector only to match VE behavior.
|
|
17952
|
-
getRootTAttributesFromSelector(this.componentDef.selectors[0]);
|
|
17953
|
-
// TODO: this logic is shared with the element instruction first create pass
|
|
17954
|
-
const hostTNode = getOrCreateTNode(rootTView, HEADER_OFFSET, 2 /* TNodeType.Element */, '#host', tAttributes);
|
|
17955
|
-
for (const def of rootDirectives) {
|
|
17956
|
-
hostTNode.mergedAttrs = mergeHostAttrs(hostTNode.mergedAttrs, def.hostAttrs);
|
|
17957
|
-
}
|
|
17958
|
-
hostTNode.mergedAttrs = mergeHostAttrs(hostTNode.mergedAttrs, tAttributes);
|
|
17959
|
-
computeStaticStyling(hostTNode, hostTNode.mergedAttrs, true);
|
|
17975
|
+
const hostTNode = elementStartFirstCreatePass(HEADER_OFFSET, rootTView, rootLView, '#host', () => [this.componentDef], true, 0);
|
|
17976
|
+
// ---- element instruction
|
|
17960
17977
|
// TODO(crisbeto): in practice `hostRNode` should always be defined, but there are some
|
|
17961
17978
|
// tests where the renderer is mocked out and `undefined` is returned. We should update the
|
|
17962
17979
|
// tests so that this check can be removed.
|
|
17963
|
-
if (
|
|
17964
|
-
setupStaticAttributes(hostRenderer,
|
|
17980
|
+
if (hostElement) {
|
|
17981
|
+
setupStaticAttributes(hostRenderer, hostElement, hostTNode);
|
|
17982
|
+
attachPatchData(hostElement, rootLView);
|
|
17965
17983
|
}
|
|
17966
|
-
|
|
17984
|
+
// TODO(pk): this logic is similar to the instruction code where a node can have directives
|
|
17985
|
+
createDirectivesInstances(rootTView, rootLView, hostTNode);
|
|
17986
|
+
executeContentQueries(rootTView, hostTNode, rootLView);
|
|
17987
|
+
elementEndFirstCreatePass(rootTView, hostTNode);
|
|
17967
17988
|
if (projectableNodes !== undefined) {
|
|
17968
17989
|
projectNodes(hostTNode, this.ngContentSelectors, projectableNodes);
|
|
17969
17990
|
}
|
|
17970
|
-
|
|
17971
|
-
//
|
|
17972
|
-
|
|
17991
|
+
componentView = getComponentLViewByIndex(hostTNode.index, rootLView);
|
|
17992
|
+
// TODO(pk): why do we need this logic?
|
|
17993
|
+
rootLView[CONTEXT] = componentView[CONTEXT];
|
|
17973
17994
|
renderView(rootTView, rootLView, null);
|
|
17974
17995
|
}
|
|
17975
17996
|
catch (e) {
|
|
@@ -17984,8 +18005,7 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
17984
18005
|
finally {
|
|
17985
18006
|
leaveView();
|
|
17986
18007
|
}
|
|
17987
|
-
|
|
17988
|
-
return new ComponentRef(this.componentType, component, createElementRef(hostTNode, rootLView), rootLView, hostTNode);
|
|
18008
|
+
return new ComponentRef(this.componentType, rootLView);
|
|
17989
18009
|
}
|
|
17990
18010
|
finally {
|
|
17991
18011
|
setActiveConsumer$1(prevConsumer);
|
|
@@ -18001,20 +18021,20 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
18001
18021
|
*
|
|
18002
18022
|
*/
|
|
18003
18023
|
class ComponentRef extends ComponentRef$1 {
|
|
18004
|
-
location;
|
|
18005
18024
|
_rootLView;
|
|
18006
|
-
_tNode;
|
|
18007
18025
|
instance;
|
|
18008
18026
|
hostView;
|
|
18009
18027
|
changeDetectorRef;
|
|
18010
18028
|
componentType;
|
|
18029
|
+
location;
|
|
18011
18030
|
previousInputValues = null;
|
|
18012
|
-
|
|
18031
|
+
_tNode;
|
|
18032
|
+
constructor(componentType, _rootLView) {
|
|
18013
18033
|
super();
|
|
18014
|
-
this.location = location;
|
|
18015
18034
|
this._rootLView = _rootLView;
|
|
18016
|
-
this._tNode =
|
|
18017
|
-
this.
|
|
18035
|
+
this._tNode = getTNode(_rootLView[TVIEW], HEADER_OFFSET);
|
|
18036
|
+
this.location = createElementRef(this._tNode, _rootLView);
|
|
18037
|
+
this.instance = getComponentLViewByIndex(this._tNode.index, _rootLView)[CONTEXT];
|
|
18018
18038
|
this.hostView = this.changeDetectorRef = new ViewRef$1(_rootLView, undefined /* _cdRefInjectingView */, false /* notifyErrorHandler */);
|
|
18019
18039
|
this.componentType = componentType;
|
|
18020
18040
|
}
|
|
@@ -18054,70 +18074,6 @@ class ComponentRef extends ComponentRef$1 {
|
|
|
18054
18074
|
this.hostView.onDestroy(callback);
|
|
18055
18075
|
}
|
|
18056
18076
|
}
|
|
18057
|
-
/**
|
|
18058
|
-
* Creates the root component view and the root component node.
|
|
18059
|
-
*
|
|
18060
|
-
* @param hostRNode Render host element.
|
|
18061
|
-
* @param rootComponentDef ComponentDef
|
|
18062
|
-
* @param rootView The parent view where the host node is stored
|
|
18063
|
-
* @param rendererFactory Factory to be used for creating child renderers.
|
|
18064
|
-
* @param hostRenderer The current renderer
|
|
18065
|
-
* @param sanitizer The sanitizer, if provided
|
|
18066
|
-
*
|
|
18067
|
-
* @returns Component view created
|
|
18068
|
-
*/
|
|
18069
|
-
function createRootComponentView(tNode, hostRNode, rootComponentDef, rootDirectives, rootView, environment) {
|
|
18070
|
-
const tView = rootView[TVIEW];
|
|
18071
|
-
// Hydration info is on the host element and needs to be retrieved
|
|
18072
|
-
// and passed to the component LView.
|
|
18073
|
-
let hydrationInfo = null;
|
|
18074
|
-
if (hostRNode !== null) {
|
|
18075
|
-
hydrationInfo = retrieveHydrationInfo(hostRNode, rootView[INJECTOR]);
|
|
18076
|
-
}
|
|
18077
|
-
const viewRenderer = environment.rendererFactory.createRenderer(hostRNode, rootComponentDef);
|
|
18078
|
-
const componentView = createLView(rootView, getOrCreateComponentTView(rootComponentDef), null, getInitialLViewFlagsFromDef(rootComponentDef), rootView[tNode.index], tNode, environment, viewRenderer, null, null, hydrationInfo);
|
|
18079
|
-
if (tView.firstCreatePass) {
|
|
18080
|
-
markAsComponentHost(tView, tNode, rootDirectives.length - 1);
|
|
18081
|
-
}
|
|
18082
|
-
addToEndOfViewTree(rootView, componentView);
|
|
18083
|
-
// Store component view at node index, with node as the HOST
|
|
18084
|
-
return (rootView[tNode.index] = componentView);
|
|
18085
|
-
}
|
|
18086
|
-
/**
|
|
18087
|
-
* Creates a root component and sets it up with features and host bindings.Shared by
|
|
18088
|
-
* renderComponent() and ViewContainerRef.createComponent().
|
|
18089
|
-
*/
|
|
18090
|
-
function createRootComponent(componentView, rootComponentDef, rootDirectives, hostDirectiveDefs, rootLView, hostFeatures) {
|
|
18091
|
-
const rootTNode = getCurrentTNode();
|
|
18092
|
-
ngDevMode && assertDefined(rootTNode, 'tNode should have been already created');
|
|
18093
|
-
const tView = rootLView[TVIEW];
|
|
18094
|
-
const native = getNativeByTNode(rootTNode, rootLView);
|
|
18095
|
-
initializeDirectives(tView, rootLView, rootTNode, rootDirectives, null, hostDirectiveDefs);
|
|
18096
|
-
for (let i = 0; i < rootDirectives.length; i++) {
|
|
18097
|
-
const directiveIndex = rootTNode.directiveStart + i;
|
|
18098
|
-
const directiveInstance = getNodeInjectable(rootLView, tView, directiveIndex, rootTNode);
|
|
18099
|
-
attachPatchData(directiveInstance, rootLView);
|
|
18100
|
-
}
|
|
18101
|
-
invokeDirectivesHostBindings(tView, rootLView, rootTNode);
|
|
18102
|
-
if (native) {
|
|
18103
|
-
attachPatchData(native, rootLView);
|
|
18104
|
-
}
|
|
18105
|
-
// We're guaranteed for the `componentOffset` to be positive here
|
|
18106
|
-
// since a root component always matches a component def.
|
|
18107
|
-
ngDevMode &&
|
|
18108
|
-
assertGreaterThan(rootTNode.componentOffset, -1, 'componentOffset must be great than -1');
|
|
18109
|
-
const component = getNodeInjectable(rootLView, tView, rootTNode.directiveStart + rootTNode.componentOffset, rootTNode);
|
|
18110
|
-
componentView[CONTEXT] = rootLView[CONTEXT] = component;
|
|
18111
|
-
if (hostFeatures !== null) {
|
|
18112
|
-
for (const feature of hostFeatures) {
|
|
18113
|
-
feature(component, rootComponentDef);
|
|
18114
|
-
}
|
|
18115
|
-
}
|
|
18116
|
-
// We want to generate an empty QueryList for root content queries for backwards
|
|
18117
|
-
// compatibility with ViewEngine.
|
|
18118
|
-
executeContentQueries(tView, rootTNode, rootLView);
|
|
18119
|
-
return component;
|
|
18120
|
-
}
|
|
18121
18077
|
/** Projects the `projectableNodes` that were specified when creating a root component. */
|
|
18122
18078
|
function projectNodes(tNode, ngContentSelectors, projectableNodes) {
|
|
18123
18079
|
const projection = (tNode.projection = []);
|
|
@@ -18131,24 +18087,6 @@ function projectNodes(tNode, ngContentSelectors, projectableNodes) {
|
|
|
18131
18087
|
projection.push(nodesforSlot != null && nodesforSlot.length ? Array.from(nodesforSlot) : null);
|
|
18132
18088
|
}
|
|
18133
18089
|
}
|
|
18134
|
-
/**
|
|
18135
|
-
* Used to enable lifecycle hooks on the root component.
|
|
18136
|
-
*
|
|
18137
|
-
* Include this feature when calling `renderComponent` if the root component
|
|
18138
|
-
* you are rendering has lifecycle hooks defined. Otherwise, the hooks won't
|
|
18139
|
-
* be called properly.
|
|
18140
|
-
*
|
|
18141
|
-
* Example:
|
|
18142
|
-
*
|
|
18143
|
-
* ```ts
|
|
18144
|
-
* renderComponent(AppComponent, {hostFeatures: [LifecycleHooksFeature]});
|
|
18145
|
-
* ```
|
|
18146
|
-
*/
|
|
18147
|
-
function LifecycleHooksFeature() {
|
|
18148
|
-
const tNode = getCurrentTNode();
|
|
18149
|
-
ngDevMode && assertDefined(tNode, 'TNode is required');
|
|
18150
|
-
registerPostOrderHooks(getLView()[TVIEW], tNode);
|
|
18151
|
-
}
|
|
18152
18090
|
|
|
18153
18091
|
/**
|
|
18154
18092
|
* Represents a container where one or more views can be attached to a component.
|
|
@@ -20658,22 +20596,17 @@ function bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {
|
|
|
20658
20596
|
return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;
|
|
20659
20597
|
}
|
|
20660
20598
|
|
|
20661
|
-
/**
|
|
20662
|
-
* Checks whether a TNode is considered detached, i.e. not present in the
|
|
20663
|
-
* translated i18n template. We should not attempt hydration for such nodes
|
|
20664
|
-
* and instead, use a regular "creation mode".
|
|
20665
|
-
*/
|
|
20666
|
-
function isDetachedByI18n(tNode) {
|
|
20667
|
-
return (tNode.flags & 32 /* TNodeFlags.isDetached */) === 32 /* TNodeFlags.isDetached */;
|
|
20668
|
-
}
|
|
20669
|
-
|
|
20670
20599
|
function templateFirstCreatePass(index, tView, lView, templateFn, decls, vars, tagName, attrs, localRefsIndex) {
|
|
20671
20600
|
ngDevMode && assertFirstCreatePass(tView);
|
|
20672
20601
|
ngDevMode && ngDevMode.firstCreatePass++;
|
|
20673
20602
|
const tViewConsts = tView.consts;
|
|
20674
20603
|
// TODO(pk): refactor getOrCreateTNode to have the "create" only version
|
|
20675
20604
|
const tNode = getOrCreateTNode(tView, index, 4 /* TNodeType.Container */, tagName || null, attrs || null);
|
|
20676
|
-
|
|
20605
|
+
if (getBindingsEnabled()) {
|
|
20606
|
+
resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex), findDirectiveDefMatches);
|
|
20607
|
+
}
|
|
20608
|
+
// Merge the template attrs last so that they have the highest priority.
|
|
20609
|
+
tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);
|
|
20677
20610
|
registerPostOrderHooks(tView, tNode);
|
|
20678
20611
|
const embeddedTView = (tNode.tView = createTView(2 /* TViewType.Embedded */, tNode, templateFn, decls, vars, tView.directiveRegistry, tView.pipeRegistry, null, tView.schemas, tViewConsts, null /* ssrId */));
|
|
20679
20612
|
if (tView.queries !== null) {
|
|
@@ -20716,7 +20649,7 @@ function declareTemplate(declarationLView, declarationTView, index, templateFn,
|
|
|
20716
20649
|
// In client-only mode, this function is a noop.
|
|
20717
20650
|
populateDehydratedViewsInLContainer(lContainer, tNode, declarationLView);
|
|
20718
20651
|
if (isDirectiveHost(tNode)) {
|
|
20719
|
-
|
|
20652
|
+
createDirectivesInstancesInInstruction(declarationTView, declarationLView, tNode);
|
|
20720
20653
|
}
|
|
20721
20654
|
if (localRefsIndex != null) {
|
|
20722
20655
|
saveResolvedLocalsInData(declarationLView, tNode, localRefExtractor);
|
|
@@ -23345,24 +23278,6 @@ class NgProbeToken {
|
|
|
23345
23278
|
}
|
|
23346
23279
|
/** Maximum number of times ApplicationRef will refresh all attached views in a single tick. */
|
|
23347
23280
|
const MAXIMUM_REFRESH_RERUNS = 10;
|
|
23348
|
-
function _callAndReportToErrorHandler(errorHandler, ngZone, callback) {
|
|
23349
|
-
try {
|
|
23350
|
-
const result = callback();
|
|
23351
|
-
if (isPromise(result)) {
|
|
23352
|
-
return result.catch((e) => {
|
|
23353
|
-
ngZone.runOutsideAngular(() => errorHandler.handleError(e));
|
|
23354
|
-
// rethrow as the exception handler might not do it
|
|
23355
|
-
throw e;
|
|
23356
|
-
});
|
|
23357
|
-
}
|
|
23358
|
-
return result;
|
|
23359
|
-
}
|
|
23360
|
-
catch (e) {
|
|
23361
|
-
ngZone.runOutsideAngular(() => errorHandler.handleError(e));
|
|
23362
|
-
// rethrow as the exception handler might not do it
|
|
23363
|
-
throw e;
|
|
23364
|
-
}
|
|
23365
|
-
}
|
|
23366
23281
|
function optionsReducer(dst, objs) {
|
|
23367
23282
|
if (Array.isArray(objs)) {
|
|
23368
23283
|
return objs.reduce(optionsReducer, dst);
|
|
@@ -28049,24 +27964,6 @@ function getExistingTNode(tView, index) {
|
|
|
28049
27964
|
return tNode;
|
|
28050
27965
|
}
|
|
28051
27966
|
|
|
28052
|
-
function elementStartFirstCreatePass(index, tView, lView, name, attrsIndex, localRefsIndex) {
|
|
28053
|
-
ngDevMode && assertFirstCreatePass(tView);
|
|
28054
|
-
ngDevMode && ngDevMode.firstCreatePass++;
|
|
28055
|
-
const tViewConsts = tView.consts;
|
|
28056
|
-
const attrs = getConstant(tViewConsts, attrsIndex);
|
|
28057
|
-
const tNode = getOrCreateTNode(tView, index, 2 /* TNodeType.Element */, name, attrs);
|
|
28058
|
-
resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));
|
|
28059
|
-
if (tNode.attrs !== null) {
|
|
28060
|
-
computeStaticStyling(tNode, tNode.attrs, false);
|
|
28061
|
-
}
|
|
28062
|
-
if (tNode.mergedAttrs !== null) {
|
|
28063
|
-
computeStaticStyling(tNode, tNode.mergedAttrs, true);
|
|
28064
|
-
}
|
|
28065
|
-
if (tView.queries !== null) {
|
|
28066
|
-
tView.queries.elementStart(tView, tNode);
|
|
28067
|
-
}
|
|
28068
|
-
return tNode;
|
|
28069
|
-
}
|
|
28070
27967
|
/**
|
|
28071
27968
|
* Create DOM element. The instruction must later be followed by `elementEnd()` call.
|
|
28072
27969
|
*
|
|
@@ -28091,7 +27988,7 @@ function ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {
|
|
|
28091
27988
|
ngDevMode && assertIndexInRange(lView, adjustedIndex);
|
|
28092
27989
|
const renderer = lView[RENDERER];
|
|
28093
27990
|
const tNode = tView.firstCreatePass
|
|
28094
|
-
? elementStartFirstCreatePass(adjustedIndex, tView, lView, name, attrsIndex, localRefsIndex)
|
|
27991
|
+
? elementStartFirstCreatePass(adjustedIndex, tView, lView, name, findDirectiveDefMatches, getBindingsEnabled(), attrsIndex, localRefsIndex)
|
|
28095
27992
|
: tView.data[adjustedIndex];
|
|
28096
27993
|
const native = _locateOrCreateElementNode(tView, lView, tNode, renderer, name, index);
|
|
28097
27994
|
lView[adjustedIndex] = native;
|
|
@@ -28114,7 +28011,7 @@ function ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {
|
|
|
28114
28011
|
}
|
|
28115
28012
|
increaseElementDepthCount();
|
|
28116
28013
|
if (hasDirectives) {
|
|
28117
|
-
|
|
28014
|
+
createDirectivesInstancesInInstruction(tView, lView, tNode);
|
|
28118
28015
|
executeContentQueries(tView, tNode, lView);
|
|
28119
28016
|
}
|
|
28120
28017
|
if (localRefsIndex !== null) {
|
|
@@ -28147,10 +28044,7 @@ function ɵɵelementEnd() {
|
|
|
28147
28044
|
decreaseElementDepthCount();
|
|
28148
28045
|
const tView = getTView();
|
|
28149
28046
|
if (tView.firstCreatePass) {
|
|
28150
|
-
|
|
28151
|
-
if (isContentQueryHost(currentTNode)) {
|
|
28152
|
-
tView.queries.elementEnd(currentTNode);
|
|
28153
|
-
}
|
|
28047
|
+
elementEndFirstCreatePass(tView, tNode);
|
|
28154
28048
|
}
|
|
28155
28049
|
if (tNode.classesWithoutHost != null && hasClassInput(tNode)) {
|
|
28156
28050
|
setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.classesWithoutHost, true);
|
|
@@ -28178,7 +28072,7 @@ function ɵɵelement(index, name, attrsIndex, localRefsIndex) {
|
|
|
28178
28072
|
}
|
|
28179
28073
|
let _locateOrCreateElementNode = (tView, lView, tNode, renderer, name, index) => {
|
|
28180
28074
|
lastNodeWasCreated(true);
|
|
28181
|
-
return createElementNode(renderer, name, getNamespace
|
|
28075
|
+
return createElementNode(renderer, name, getNamespace());
|
|
28182
28076
|
};
|
|
28183
28077
|
/**
|
|
28184
28078
|
* Enables hydration code path (to lookup existing elements in DOM)
|
|
@@ -28193,7 +28087,7 @@ function locateOrCreateElementNodeImpl(tView, lView, tNode, renderer, name, inde
|
|
|
28193
28087
|
lastNodeWasCreated(isNodeCreationMode);
|
|
28194
28088
|
// Regular creation mode.
|
|
28195
28089
|
if (isNodeCreationMode) {
|
|
28196
|
-
return createElementNode(renderer, name, getNamespace
|
|
28090
|
+
return createElementNode(renderer, name, getNamespace());
|
|
28197
28091
|
}
|
|
28198
28092
|
// Hydration mode, looking up an existing element in DOM.
|
|
28199
28093
|
const native = locateNextRNode(hydrationInfo, tView, lView, tNode);
|
|
@@ -28246,7 +28140,11 @@ function elementContainerStartFirstCreatePass(index, tView, lView, attrsIndex, l
|
|
|
28246
28140
|
computeStaticStyling(tNode, attrs, true);
|
|
28247
28141
|
}
|
|
28248
28142
|
const localRefs = getConstant(tViewConsts, localRefsIndex);
|
|
28249
|
-
|
|
28143
|
+
if (getBindingsEnabled()) {
|
|
28144
|
+
resolveDirectives(tView, lView, tNode, localRefs, findDirectiveDefMatches);
|
|
28145
|
+
}
|
|
28146
|
+
// Merge the template attrs last so that they have the highest priority.
|
|
28147
|
+
tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);
|
|
28250
28148
|
if (tView.queries !== null) {
|
|
28251
28149
|
tView.queries.elementStart(tView, tNode);
|
|
28252
28150
|
}
|
|
@@ -28285,7 +28183,7 @@ function ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {
|
|
|
28285
28183
|
}
|
|
28286
28184
|
attachPatchData(comment, lView);
|
|
28287
28185
|
if (isDirectiveHost(tNode)) {
|
|
28288
|
-
|
|
28186
|
+
createDirectivesInstancesInInstruction(tView, lView, tNode);
|
|
28289
28187
|
executeContentQueries(tView, tNode, lView);
|
|
28290
28188
|
}
|
|
28291
28189
|
if (localRefsIndex != null) {
|
|
@@ -30465,7 +30363,7 @@ function wrapListener(tNode, lView, context, listenerFn) {
|
|
|
30465
30363
|
}
|
|
30466
30364
|
// In order to be backwards compatible with View Engine, events on component host nodes
|
|
30467
30365
|
// must also mark the component view itself dirty (i.e. the view that it owns).
|
|
30468
|
-
const startView = tNode
|
|
30366
|
+
const startView = isComponentHost(tNode) ? getComponentLViewByIndex(tNode.index, lView) : lView;
|
|
30469
30367
|
markViewDirty(startView, 5 /* NotificationSource.Listener */);
|
|
30470
30368
|
let result = executeListenerWithErrorHandling(lView, context, listenerFn, e);
|
|
30471
30369
|
// A just-invoked listener function might have coalesced listeners so we need to check for
|
|
@@ -30629,8 +30527,7 @@ function ɵɵprojection(nodeIndex, selectorIndex = 0, attrs, fallbackTemplateFn,
|
|
|
30629
30527
|
if (isEmpty && fallbackIndex !== null) {
|
|
30630
30528
|
insertFallbackContent(lView, tView, fallbackIndex);
|
|
30631
30529
|
}
|
|
30632
|
-
else if (isNodeCreationMode &&
|
|
30633
|
-
(tProjectionNode.flags & 32 /* TNodeFlags.isDetached */) !== 32 /* TNodeFlags.isDetached */) {
|
|
30530
|
+
else if (isNodeCreationMode && !isDetachedByI18n(tProjectionNode)) {
|
|
30634
30531
|
// re-distribution of projectable nodes is stored on a component's view level
|
|
30635
30532
|
applyProjection(tView, lView, tProjectionNode);
|
|
30636
30533
|
}
|
|
@@ -33431,7 +33328,7 @@ function ɵɵreplaceMetadata(type, applyMetadata, namespaces, locals) {
|
|
|
33431
33328
|
for (const root of trackedViews) {
|
|
33432
33329
|
// Note: we have the additional check, because `IsRoot` can also indicate
|
|
33433
33330
|
// a component created through something like `createComponent`.
|
|
33434
|
-
if (root
|
|
33331
|
+
if (isRootView(root) && root[PARENT] === null) {
|
|
33435
33332
|
recreateMatchingLViews(newDef, oldDef, root);
|
|
33436
33333
|
}
|
|
33437
33334
|
}
|
|
@@ -33458,6 +33355,10 @@ function mergeWithExistingDefinition(currentDef, newDef) {
|
|
|
33458
33355
|
// Preserve the old `setInput` function, because it has some state.
|
|
33459
33356
|
// This is fine, because the component instance is preserved as well.
|
|
33460
33357
|
setInput: clone.setInput,
|
|
33358
|
+
// Externally this is redundant since we redeclare the definition using the original type.
|
|
33359
|
+
// Internally we may receive a definition with an alternate, but identical, type so we have
|
|
33360
|
+
// to ensure that the original one is preserved.
|
|
33361
|
+
type: clone.type,
|
|
33461
33362
|
});
|
|
33462
33363
|
ngDevMode && assertEqual(replacement, currentDef, 'Expected definition to be merged in place');
|
|
33463
33364
|
return { newDef: replacement, oldDef: clone };
|
|
@@ -34996,7 +34897,7 @@ class Version {
|
|
|
34996
34897
|
/**
|
|
34997
34898
|
* @publicApi
|
|
34998
34899
|
*/
|
|
34999
|
-
const VERSION = new Version('19.1.
|
|
34900
|
+
const VERSION = new Version('19.1.5');
|
|
35000
34901
|
|
|
35001
34902
|
/**
|
|
35002
34903
|
* Combination of NgModuleFactory and ComponentFactories.
|
|
@@ -36145,6 +36046,24 @@ function moduleDoBootstrap(moduleRef, allPlatformModules) {
|
|
|
36145
36046
|
}
|
|
36146
36047
|
allPlatformModules.push(moduleRef);
|
|
36147
36048
|
}
|
|
36049
|
+
function _callAndReportToErrorHandler(errorHandler, ngZone, callback) {
|
|
36050
|
+
try {
|
|
36051
|
+
const result = callback();
|
|
36052
|
+
if (isPromise(result)) {
|
|
36053
|
+
return result.catch((e) => {
|
|
36054
|
+
ngZone.runOutsideAngular(() => errorHandler.handleError(e));
|
|
36055
|
+
// rethrow as the exception handler might not do it
|
|
36056
|
+
throw e;
|
|
36057
|
+
});
|
|
36058
|
+
}
|
|
36059
|
+
return result;
|
|
36060
|
+
}
|
|
36061
|
+
catch (e) {
|
|
36062
|
+
ngZone.runOutsideAngular(() => errorHandler.handleError(e));
|
|
36063
|
+
// rethrow as the exception handler might not do it
|
|
36064
|
+
throw e;
|
|
36065
|
+
}
|
|
36066
|
+
}
|
|
36148
36067
|
|
|
36149
36068
|
/**
|
|
36150
36069
|
* The Angular platform is the entry point for Angular on a web page.
|
|
@@ -38747,7 +38666,7 @@ function createComputed(computation) {
|
|
|
38747
38666
|
producerUpdateValueVersion(node);
|
|
38748
38667
|
// Record that someone looked at this signal.
|
|
38749
38668
|
producerAccessed(node);
|
|
38750
|
-
if (node.value === ERRORED
|
|
38669
|
+
if (node.value === ERRORED) {
|
|
38751
38670
|
throw node.error;
|
|
38752
38671
|
}
|
|
38753
38672
|
return node.value;
|
|
@@ -38759,26 +38678,26 @@ function createComputed(computation) {
|
|
|
38759
38678
|
* A dedicated symbol used before a computed value has been calculated for the first time.
|
|
38760
38679
|
* Explicitly typed as `any` so we can use it as signal's value.
|
|
38761
38680
|
*/
|
|
38762
|
-
const UNSET
|
|
38681
|
+
const UNSET = /* @__PURE__ */ Symbol('UNSET');
|
|
38763
38682
|
/**
|
|
38764
38683
|
* A dedicated symbol used in place of a computed signal value to indicate that a given computation
|
|
38765
38684
|
* is in progress. Used to detect cycles in computation chains.
|
|
38766
38685
|
* Explicitly typed as `any` so we can use it as signal's value.
|
|
38767
38686
|
*/
|
|
38768
|
-
const COMPUTING
|
|
38687
|
+
const COMPUTING = /* @__PURE__ */ Symbol('COMPUTING');
|
|
38769
38688
|
/**
|
|
38770
38689
|
* A dedicated symbol used in place of a computed signal value to indicate that a given computation
|
|
38771
38690
|
* failed. The thrown error is cached until the computation gets dirty again.
|
|
38772
38691
|
* Explicitly typed as `any` so we can use it as signal's value.
|
|
38773
38692
|
*/
|
|
38774
|
-
const ERRORED
|
|
38693
|
+
const ERRORED = /* @__PURE__ */ Symbol('ERRORED');
|
|
38775
38694
|
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
38776
38695
|
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
38777
38696
|
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
38778
38697
|
const COMPUTED_NODE = /* @__PURE__ */ (() => {
|
|
38779
38698
|
return {
|
|
38780
38699
|
...REACTIVE_NODE,
|
|
38781
|
-
value: UNSET
|
|
38700
|
+
value: UNSET,
|
|
38782
38701
|
dirty: true,
|
|
38783
38702
|
error: null,
|
|
38784
38703
|
equal: defaultEquals,
|
|
@@ -38786,15 +38705,15 @@ const COMPUTED_NODE = /* @__PURE__ */ (() => {
|
|
|
38786
38705
|
producerMustRecompute(node) {
|
|
38787
38706
|
// Force a recomputation if there's no current value, or if the current value is in the
|
|
38788
38707
|
// process of being calculated (which should throw an error).
|
|
38789
|
-
return node.value === UNSET
|
|
38708
|
+
return node.value === UNSET || node.value === COMPUTING;
|
|
38790
38709
|
},
|
|
38791
38710
|
producerRecomputeValue(node) {
|
|
38792
|
-
if (node.value === COMPUTING
|
|
38711
|
+
if (node.value === COMPUTING) {
|
|
38793
38712
|
// Our computation somehow led to a cyclic read of itself.
|
|
38794
38713
|
throw new Error('Detected cycle in computations.');
|
|
38795
38714
|
}
|
|
38796
38715
|
const oldValue = node.value;
|
|
38797
|
-
node.value = COMPUTING
|
|
38716
|
+
node.value = COMPUTING;
|
|
38798
38717
|
const prevConsumer = consumerBeforeComputation(node);
|
|
38799
38718
|
let newValue;
|
|
38800
38719
|
let wasEqual = false;
|
|
@@ -38804,13 +38723,13 @@ const COMPUTED_NODE = /* @__PURE__ */ (() => {
|
|
|
38804
38723
|
// to track any reactive reads inside `equal`.
|
|
38805
38724
|
setActiveConsumer(null);
|
|
38806
38725
|
wasEqual =
|
|
38807
|
-
oldValue !== UNSET
|
|
38808
|
-
oldValue !== ERRORED
|
|
38809
|
-
newValue !== ERRORED
|
|
38726
|
+
oldValue !== UNSET &&
|
|
38727
|
+
oldValue !== ERRORED &&
|
|
38728
|
+
newValue !== ERRORED &&
|
|
38810
38729
|
node.equal(oldValue, newValue);
|
|
38811
38730
|
}
|
|
38812
38731
|
catch (err) {
|
|
38813
|
-
newValue = ERRORED
|
|
38732
|
+
newValue = ERRORED;
|
|
38814
38733
|
node.error = err;
|
|
38815
38734
|
}
|
|
38816
38735
|
finally {
|
|
@@ -38904,8 +38823,8 @@ function signalValueChanged(node) {
|
|
|
38904
38823
|
postSignalSetFn?.();
|
|
38905
38824
|
}
|
|
38906
38825
|
|
|
38907
|
-
function createLinkedSignal
|
|
38908
|
-
const node = Object.create(LINKED_SIGNAL_NODE
|
|
38826
|
+
function createLinkedSignal(sourceFn, computationFn, equalityFn) {
|
|
38827
|
+
const node = Object.create(LINKED_SIGNAL_NODE);
|
|
38909
38828
|
node.source = sourceFn;
|
|
38910
38829
|
node.computation = computationFn;
|
|
38911
38830
|
if (equalityFn != undefined) {
|
|
@@ -38916,7 +38835,7 @@ function createLinkedSignal$1(sourceFn, computationFn, equalityFn) {
|
|
|
38916
38835
|
producerUpdateValueVersion(node);
|
|
38917
38836
|
// Record that someone looked at this signal.
|
|
38918
38837
|
producerAccessed(node);
|
|
38919
|
-
if (node.value === ERRORED
|
|
38838
|
+
if (node.value === ERRORED) {
|
|
38920
38839
|
throw node.error;
|
|
38921
38840
|
}
|
|
38922
38841
|
return node.value;
|
|
@@ -38938,30 +38857,30 @@ function linkedSignalUpdateFn(node, updater) {
|
|
|
38938
38857
|
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
38939
38858
|
// a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`.
|
|
38940
38859
|
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
38941
|
-
const LINKED_SIGNAL_NODE
|
|
38860
|
+
const LINKED_SIGNAL_NODE = /* @__PURE__ */ (() => {
|
|
38942
38861
|
return {
|
|
38943
38862
|
...REACTIVE_NODE,
|
|
38944
|
-
value: UNSET
|
|
38863
|
+
value: UNSET,
|
|
38945
38864
|
dirty: true,
|
|
38946
38865
|
error: null,
|
|
38947
38866
|
equal: defaultEquals,
|
|
38948
38867
|
producerMustRecompute(node) {
|
|
38949
38868
|
// Force a recomputation if there's no current value, or if the current value is in the
|
|
38950
38869
|
// process of being calculated (which should throw an error).
|
|
38951
|
-
return node.value === UNSET
|
|
38870
|
+
return node.value === UNSET || node.value === COMPUTING;
|
|
38952
38871
|
},
|
|
38953
38872
|
producerRecomputeValue(node) {
|
|
38954
|
-
if (node.value === COMPUTING
|
|
38873
|
+
if (node.value === COMPUTING) {
|
|
38955
38874
|
// Our computation somehow led to a cyclic read of itself.
|
|
38956
38875
|
throw new Error('Detected cycle in computations.');
|
|
38957
38876
|
}
|
|
38958
38877
|
const oldValue = node.value;
|
|
38959
|
-
node.value = COMPUTING
|
|
38878
|
+
node.value = COMPUTING;
|
|
38960
38879
|
const prevConsumer = consumerBeforeComputation(node);
|
|
38961
38880
|
let newValue;
|
|
38962
38881
|
try {
|
|
38963
38882
|
const newSourceValue = node.source();
|
|
38964
|
-
const prev = oldValue === UNSET
|
|
38883
|
+
const prev = oldValue === UNSET || oldValue === ERRORED
|
|
38965
38884
|
? undefined
|
|
38966
38885
|
: {
|
|
38967
38886
|
source: node.sourceValue,
|
|
@@ -38971,13 +38890,13 @@ const LINKED_SIGNAL_NODE$1 = /* @__PURE__ */ (() => {
|
|
|
38971
38890
|
node.sourceValue = newSourceValue;
|
|
38972
38891
|
}
|
|
38973
38892
|
catch (err) {
|
|
38974
|
-
newValue = ERRORED
|
|
38893
|
+
newValue = ERRORED;
|
|
38975
38894
|
node.error = err;
|
|
38976
38895
|
}
|
|
38977
38896
|
finally {
|
|
38978
38897
|
consumerAfterComputation(node, prevConsumer);
|
|
38979
38898
|
}
|
|
38980
|
-
if (oldValue !== UNSET
|
|
38899
|
+
if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {
|
|
38981
38900
|
// No change to `valueVersion` - old and new values are
|
|
38982
38901
|
// semantically equivalent.
|
|
38983
38902
|
node.value = oldValue;
|
|
@@ -40073,12 +39992,12 @@ function printHydrationStats(injector) {
|
|
|
40073
39992
|
/**
|
|
40074
39993
|
* Returns a Promise that is resolved when an application becomes stable.
|
|
40075
39994
|
*/
|
|
40076
|
-
function whenStableWithTimeout(appRef
|
|
39995
|
+
function whenStableWithTimeout(appRef) {
|
|
40077
39996
|
const whenStablePromise = appRef.whenStable();
|
|
40078
39997
|
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
40079
39998
|
const timeoutTime = APPLICATION_IS_STABLE_TIMEOUT;
|
|
40080
|
-
const console = injector.get(Console);
|
|
40081
|
-
const ngZone = injector.get(NgZone);
|
|
39999
|
+
const console = appRef.injector.get(Console);
|
|
40000
|
+
const ngZone = appRef.injector.get(NgZone);
|
|
40082
40001
|
// The following call should not and does not prevent the app to become stable
|
|
40083
40002
|
// We cannot use RxJS timer here because the app would remain unstable.
|
|
40084
40003
|
// This also avoids an extra change detection cycle.
|
|
@@ -40176,7 +40095,6 @@ function withDomHydration() {
|
|
|
40176
40095
|
useFactory: () => {
|
|
40177
40096
|
if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
|
|
40178
40097
|
const appRef = inject(ApplicationRef);
|
|
40179
|
-
const injector = inject(Injector);
|
|
40180
40098
|
return () => {
|
|
40181
40099
|
// Wait until an app becomes stable and cleanup all views that
|
|
40182
40100
|
// were not claimed during the application bootstrap process.
|
|
@@ -40185,11 +40103,20 @@ function withDomHydration() {
|
|
|
40185
40103
|
//
|
|
40186
40104
|
// Note: the cleanup task *MUST* be scheduled within the Angular zone in Zone apps
|
|
40187
40105
|
// to ensure that change detection is properly run afterward.
|
|
40188
|
-
whenStableWithTimeout(appRef
|
|
40106
|
+
whenStableWithTimeout(appRef).then(() => {
|
|
40107
|
+
// Note: we have to check whether the application is destroyed before
|
|
40108
|
+
// performing other operations with the `injector`.
|
|
40109
|
+
// The application may be destroyed **before** it becomes stable, so when
|
|
40110
|
+
// the `whenStableWithTimeout` resolves, the injector might already be in
|
|
40111
|
+
// a destroyed state. Thus, calling `injector.get` would throw an error
|
|
40112
|
+
// indicating that the injector has already been destroyed.
|
|
40113
|
+
if (appRef.destroyed) {
|
|
40114
|
+
return;
|
|
40115
|
+
}
|
|
40189
40116
|
cleanupDehydratedViews(appRef);
|
|
40190
40117
|
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
40191
|
-
countBlocksSkippedByHydration(injector);
|
|
40192
|
-
printHydrationStats(injector);
|
|
40118
|
+
countBlocksSkippedByHydration(appRef.injector);
|
|
40119
|
+
printHydrationStats(appRef.injector);
|
|
40193
40120
|
}
|
|
40194
40121
|
});
|
|
40195
40122
|
};
|
|
@@ -40591,123 +40518,28 @@ function computed(computation, options) {
|
|
|
40591
40518
|
}
|
|
40592
40519
|
|
|
40593
40520
|
const identityFn = (v) => v;
|
|
40594
|
-
/**
|
|
40595
|
-
* Create a linked signal which represents state that is (re)set from a linked reactive expression.
|
|
40596
|
-
*/
|
|
40597
|
-
function createLinkedSignal(node) {
|
|
40598
|
-
const linkedSignalGetter = () => {
|
|
40599
|
-
// Check if the value needs updating before returning it.
|
|
40600
|
-
producerUpdateValueVersion$1(node);
|
|
40601
|
-
// Record that someone looked at this signal.
|
|
40602
|
-
producerAccessed$1(node);
|
|
40603
|
-
if (node.value === ERRORED) {
|
|
40604
|
-
throw node.error;
|
|
40605
|
-
}
|
|
40606
|
-
return node.value;
|
|
40607
|
-
};
|
|
40608
|
-
const getter = linkedSignalGetter;
|
|
40609
|
-
getter[SIGNAL$1] = node;
|
|
40610
|
-
if (ngDevMode) {
|
|
40611
|
-
getter.toString = () => `[LinkedSignal: ${getter()}]`;
|
|
40612
|
-
}
|
|
40613
|
-
getter.set = (newValue) => {
|
|
40614
|
-
producerUpdateValueVersion$1(node);
|
|
40615
|
-
signalSetFn$1(node, newValue);
|
|
40616
|
-
producerMarkClean$1(node);
|
|
40617
|
-
};
|
|
40618
|
-
getter.update = (updateFn) => {
|
|
40619
|
-
producerUpdateValueVersion$1(node);
|
|
40620
|
-
signalUpdateFn$1(node, updateFn);
|
|
40621
|
-
producerMarkClean$1(node);
|
|
40622
|
-
};
|
|
40623
|
-
getter.asReadonly = signalAsReadonlyFn.bind(getter);
|
|
40624
|
-
return getter;
|
|
40625
|
-
}
|
|
40626
40521
|
function linkedSignal(optionsOrComputation, options) {
|
|
40627
40522
|
performanceMarkFeature('NgSignals');
|
|
40628
|
-
|
|
40629
|
-
|
|
40630
|
-
|
|
40631
|
-
if (!isShorthand) {
|
|
40632
|
-
node.computation = optionsOrComputation.computation;
|
|
40523
|
+
if (typeof optionsOrComputation === 'function') {
|
|
40524
|
+
const getter = createLinkedSignal$1(optionsOrComputation, (identityFn), options?.equal);
|
|
40525
|
+
return upgradeLinkedSignalGetter(getter);
|
|
40633
40526
|
}
|
|
40634
|
-
|
|
40635
|
-
|
|
40636
|
-
|
|
40527
|
+
else {
|
|
40528
|
+
const getter = createLinkedSignal$1(optionsOrComputation.source, optionsOrComputation.computation, optionsOrComputation.equal);
|
|
40529
|
+
return upgradeLinkedSignalGetter(getter);
|
|
40637
40530
|
}
|
|
40638
|
-
return createLinkedSignal(node);
|
|
40639
40531
|
}
|
|
40640
|
-
|
|
40641
|
-
|
|
40642
|
-
|
|
40643
|
-
|
|
40644
|
-
const
|
|
40645
|
-
|
|
40646
|
-
|
|
40647
|
-
|
|
40648
|
-
|
|
40649
|
-
|
|
40650
|
-
|
|
40651
|
-
/**
|
|
40652
|
-
* A dedicated symbol used in place of a linked signal value to indicate that a given computation
|
|
40653
|
-
* failed. The thrown error is cached until the computation gets dirty again or the state is set.
|
|
40654
|
-
* Explicitly typed as `any` so we can use it as signal's value.
|
|
40655
|
-
*/
|
|
40656
|
-
const ERRORED = /* @__PURE__ */ Symbol('ERRORED');
|
|
40657
|
-
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
40658
|
-
// a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`.
|
|
40659
|
-
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
40660
|
-
const LINKED_SIGNAL_NODE = /* @__PURE__ */ (() => {
|
|
40661
|
-
return {
|
|
40662
|
-
...REACTIVE_NODE$1,
|
|
40663
|
-
value: UNSET,
|
|
40664
|
-
dirty: true,
|
|
40665
|
-
error: null,
|
|
40666
|
-
equal: defaultEquals$1,
|
|
40667
|
-
computation: identityFn,
|
|
40668
|
-
producerMustRecompute(node) {
|
|
40669
|
-
// Force a recomputation if there's no current value, or if the current value is in the
|
|
40670
|
-
// process of being calculated (which should throw an error).
|
|
40671
|
-
return node.value === UNSET || node.value === COMPUTING;
|
|
40672
|
-
},
|
|
40673
|
-
producerRecomputeValue(node) {
|
|
40674
|
-
if (node.value === COMPUTING) {
|
|
40675
|
-
// Our computation somehow led to a cyclic read of itself.
|
|
40676
|
-
throw new Error('Detected cycle in computations.');
|
|
40677
|
-
}
|
|
40678
|
-
const oldValue = node.value;
|
|
40679
|
-
node.value = COMPUTING;
|
|
40680
|
-
const prevConsumer = consumerBeforeComputation$1(node);
|
|
40681
|
-
let newValue;
|
|
40682
|
-
try {
|
|
40683
|
-
const newSourceValue = node.source();
|
|
40684
|
-
const prev = oldValue === UNSET || oldValue === ERRORED
|
|
40685
|
-
? undefined
|
|
40686
|
-
: {
|
|
40687
|
-
source: node.sourceValue,
|
|
40688
|
-
value: oldValue,
|
|
40689
|
-
};
|
|
40690
|
-
newValue = node.computation(newSourceValue, prev);
|
|
40691
|
-
node.sourceValue = newSourceValue;
|
|
40692
|
-
}
|
|
40693
|
-
catch (err) {
|
|
40694
|
-
newValue = ERRORED;
|
|
40695
|
-
node.error = err;
|
|
40696
|
-
}
|
|
40697
|
-
finally {
|
|
40698
|
-
consumerAfterComputation$1(node, prevConsumer);
|
|
40699
|
-
}
|
|
40700
|
-
if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {
|
|
40701
|
-
// No change to `valueVersion` - old and new values are
|
|
40702
|
-
// semantically equivalent.
|
|
40703
|
-
node.value = oldValue;
|
|
40704
|
-
return;
|
|
40705
|
-
}
|
|
40706
|
-
node.value = newValue;
|
|
40707
|
-
node.version++;
|
|
40708
|
-
},
|
|
40709
|
-
};
|
|
40710
|
-
})();
|
|
40532
|
+
function upgradeLinkedSignalGetter(getter) {
|
|
40533
|
+
if (ngDevMode) {
|
|
40534
|
+
getter.toString = () => `[LinkedSignal: ${getter()}]`;
|
|
40535
|
+
}
|
|
40536
|
+
const node = getter[SIGNAL$1];
|
|
40537
|
+
const upgradedGetter = getter;
|
|
40538
|
+
upgradedGetter.set = (newValue) => linkedSignalSetFn$1(node, newValue);
|
|
40539
|
+
upgradedGetter.update = (updateFn) => linkedSignalUpdateFn$1(node, updateFn);
|
|
40540
|
+
upgradedGetter.asReadonly = signalAsReadonlyFn.bind(getter);
|
|
40541
|
+
return upgradedGetter;
|
|
40542
|
+
}
|
|
40711
40543
|
|
|
40712
40544
|
/**
|
|
40713
40545
|
* Execute an arbitrary function in a non-reactive (non-tracking) context. The executed function
|
|
@@ -41742,5 +41574,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
|
41742
41574
|
* Generated bundle index. Do not edit.
|
|
41743
41575
|
*/
|
|
41744
41576
|
|
|
41745
|
-
export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, PendingTasks, Pipe, PlatformRef, Query, QueryList, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, Renderer2, RendererFactory2, RendererStyleFlags2, ResourceStatus, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, ViewRef, afterNextRender, afterRender, afterRenderEffect, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideEnvironmentInitializer, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, providePlatformInitializer, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, resource, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderManager as ɵAfterRenderManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, MicrotaskEffectScheduler as ɵMicrotaskEffectScheduler, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PendingTasksInternal as ɵPendingTasksInternal, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, TracingAction as ɵTracingAction, TracingService as ɵTracingService, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, disableProfiling as ɵdisableProfiling, enableProfiling as ɵenableProfiling, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getClosestComponentName as ɵgetClosestComponentName, getDebugNode as ɵgetDebugNode, getDeferBlocks$1 as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, microtaskEffect as ɵmicrotaskEffect, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, publishExternalGlobalUtil as ɵpublishExternalGlobalUtil, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, startMeasuring as ɵstartMeasuring, stopMeasuring as ɵstopMeasuring, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, withIncrementalHydration as ɵwithIncrementalHydration, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattachSourceLocations, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdeclareLet, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferHydrateNever, ɵɵdeferHydrateOnHover, ɵɵdeferHydrateOnIdle, ɵɵdeferHydrateOnImmediate, ɵɵdeferHydrateOnInteraction, ɵɵdeferHydrateOnTimer, ɵɵdeferHydrateOnViewport, ɵɵdeferHydrateWhen, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
|
|
41577
|
+
export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, PendingTasks, Pipe, PlatformRef, Query, QueryList, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, Renderer2, RendererFactory2, RendererStyleFlags2, ResourceStatus, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, ViewRef, afterNextRender, afterRender, afterRenderEffect, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideEnvironmentInitializer, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, providePlatformInitializer, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, resource, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderManager as ɵAfterRenderManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, LContext as ɵLContext, LocaleDataIndex as ɵLocaleDataIndex, MicrotaskEffectScheduler as ɵMicrotaskEffectScheduler, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PendingTasksInternal as ɵPendingTasksInternal, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, TracingAction as ɵTracingAction, TracingService as ɵTracingService, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, disableProfiling as ɵdisableProfiling, enableProfiling as ɵenableProfiling, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getClosestComponentName as ɵgetClosestComponentName, getDebugNode as ɵgetDebugNode, getDeferBlocks$1 as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, microtaskEffect as ɵmicrotaskEffect, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, publishExternalGlobalUtil as ɵpublishExternalGlobalUtil, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, startMeasuring as ɵstartMeasuring, stopMeasuring as ɵstopMeasuring, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, withIncrementalHydration as ɵwithIncrementalHydration, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattachSourceLocations, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdeclareLet, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferHydrateNever, ɵɵdeferHydrateOnHover, ɵɵdeferHydrateOnIdle, ɵɵdeferHydrateOnImmediate, ɵɵdeferHydrateOnInteraction, ɵɵdeferHydrateOnTimer, ɵɵdeferHydrateOnViewport, ɵɵdeferHydrateWhen, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
|
|
41746
41578
|
//# sourceMappingURL=core.mjs.map
|