@angular/core 19.1.2 → 19.1.4
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 +529 -594
- 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 +87 -2
- package/fesm2022/primitives/signals.mjs.map +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 +42 -1
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/bundles/{apply_import_manager-bb1a82ec.js → apply_import_manager-3ba5d1bb.js} +3 -3
- package/schematics/bundles/{checker-aa999c96.js → checker-ca858016.js} +40 -7
- package/schematics/bundles/cleanup-unused-imports.js +53 -20
- package/schematics/bundles/{compiler_host-f0b570c8.js → compiler_host-c26ed2d0.js} +2 -2
- package/schematics/bundles/control-flow-migration.js +3 -3
- package/schematics/bundles/explicit-standalone-flag.js +3 -3
- package/schematics/bundles/imports-31a38653.js +1 -1
- package/schematics/bundles/{index-4830663b.js → index-761b9f6f.js} +4 -4
- package/schematics/bundles/{index-4e3d512c.js → index-aa0e0065.js} +4 -4
- package/schematics/bundles/inject-migration.js +3 -3
- package/schematics/bundles/leading_space-6e7a8ec6.js +1 -1
- package/schematics/bundles/{migrate_ts_type_references-21d5d831.js → migrate_ts_type_references-c6d4443c.js} +5 -5
- package/schematics/bundles/nodes-88c2157f.js +1 -1
- package/schematics/bundles/output-migration.js +5 -5
- package/schematics/bundles/pending-tasks.js +3 -3
- package/schematics/bundles/{program-57240d08.js → program-8e222816.js} +34 -15
- package/schematics/bundles/project_tsconfig_paths-6c9cde78.js +1 -1
- package/schematics/bundles/provide-initializer.js +3 -3
- package/schematics/bundles/route-lazy-loading.js +3 -3
- package/schematics/bundles/signal-input-migration.js +6 -6
- package/schematics/bundles/signal-queries-migration.js +6 -6
- package/schematics/bundles/signals.js +6 -6
- package/schematics/bundles/standalone-migration.js +5 -5
- 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.4
|
|
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) {
|
|
@@ -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.
|
|
@@ -12076,12 +12076,131 @@ function extractAttrsAndClassesFromSelector(selector) {
|
|
|
12076
12076
|
}
|
|
12077
12077
|
i++;
|
|
12078
12078
|
}
|
|
12079
|
-
|
|
12079
|
+
if (classes.length) {
|
|
12080
|
+
attrs.push(1 /* AttributeMarker.Classes */, ...classes);
|
|
12081
|
+
}
|
|
12082
|
+
return attrs;
|
|
12080
12083
|
}
|
|
12081
12084
|
|
|
12082
12085
|
/** A special value which designates that a value has not changed. */
|
|
12083
12086
|
const NO_CHANGE = typeof ngDevMode === 'undefined' || ngDevMode ? { __brand__: 'NO_CHANGE' } : {};
|
|
12084
12087
|
|
|
12088
|
+
function createTextNode(renderer, value) {
|
|
12089
|
+
ngDevMode && ngDevMode.rendererCreateTextNode++;
|
|
12090
|
+
ngDevMode && ngDevMode.rendererSetText++;
|
|
12091
|
+
return renderer.createText(value);
|
|
12092
|
+
}
|
|
12093
|
+
function updateTextNode(renderer, rNode, value) {
|
|
12094
|
+
ngDevMode && ngDevMode.rendererSetText++;
|
|
12095
|
+
renderer.setValue(rNode, value);
|
|
12096
|
+
}
|
|
12097
|
+
function createCommentNode(renderer, value) {
|
|
12098
|
+
ngDevMode && ngDevMode.rendererCreateComment++;
|
|
12099
|
+
return renderer.createComment(escapeCommentText(value));
|
|
12100
|
+
}
|
|
12101
|
+
/**
|
|
12102
|
+
* Creates a native element from a tag name, using a renderer.
|
|
12103
|
+
* @param renderer A renderer to use
|
|
12104
|
+
* @param name the tag name
|
|
12105
|
+
* @param namespace Optional namespace for element.
|
|
12106
|
+
* @returns the element created
|
|
12107
|
+
*/
|
|
12108
|
+
function createElementNode(renderer, name, namespace) {
|
|
12109
|
+
ngDevMode && ngDevMode.rendererCreateElement++;
|
|
12110
|
+
return renderer.createElement(name, namespace);
|
|
12111
|
+
}
|
|
12112
|
+
/**
|
|
12113
|
+
* Inserts a native node before another native node for a given parent.
|
|
12114
|
+
* This is a utility function that can be used when native nodes were determined.
|
|
12115
|
+
*/
|
|
12116
|
+
function nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {
|
|
12117
|
+
ngDevMode && ngDevMode.rendererInsertBefore++;
|
|
12118
|
+
renderer.insertBefore(parent, child, beforeNode, isMove);
|
|
12119
|
+
}
|
|
12120
|
+
function nativeAppendChild(renderer, parent, child) {
|
|
12121
|
+
ngDevMode && ngDevMode.rendererAppendChild++;
|
|
12122
|
+
ngDevMode && assertDefined(parent, 'parent node must be defined');
|
|
12123
|
+
renderer.appendChild(parent, child);
|
|
12124
|
+
}
|
|
12125
|
+
function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {
|
|
12126
|
+
if (beforeNode !== null) {
|
|
12127
|
+
nativeInsertBefore(renderer, parent, child, beforeNode, isMove);
|
|
12128
|
+
}
|
|
12129
|
+
else {
|
|
12130
|
+
nativeAppendChild(renderer, parent, child);
|
|
12131
|
+
}
|
|
12132
|
+
}
|
|
12133
|
+
/**
|
|
12134
|
+
* Removes a native node itself using a given renderer. To remove the node we are looking up its
|
|
12135
|
+
* parent from the native tree as not all platforms / browsers support the equivalent of
|
|
12136
|
+
* node.remove().
|
|
12137
|
+
*
|
|
12138
|
+
* @param renderer A renderer to be used
|
|
12139
|
+
* @param rNode The native node that should be removed
|
|
12140
|
+
* @param isHostElement A flag indicating if a node to be removed is a host of a component.
|
|
12141
|
+
*/
|
|
12142
|
+
function nativeRemoveNode(renderer, rNode, isHostElement) {
|
|
12143
|
+
ngDevMode && ngDevMode.rendererRemoveNode++;
|
|
12144
|
+
renderer.removeChild(null, rNode, isHostElement);
|
|
12145
|
+
}
|
|
12146
|
+
/**
|
|
12147
|
+
* Clears the contents of a given RElement.
|
|
12148
|
+
*
|
|
12149
|
+
* @param rElement the native RElement to be cleared
|
|
12150
|
+
*/
|
|
12151
|
+
function clearElementContents(rElement) {
|
|
12152
|
+
rElement.textContent = '';
|
|
12153
|
+
}
|
|
12154
|
+
/**
|
|
12155
|
+
* Write `cssText` to `RElement`.
|
|
12156
|
+
*
|
|
12157
|
+
* This function does direct write without any reconciliation. Used for writing initial values, so
|
|
12158
|
+
* that static styling values do not pull in the style parser.
|
|
12159
|
+
*
|
|
12160
|
+
* @param renderer Renderer to use
|
|
12161
|
+
* @param element The element which needs to be updated.
|
|
12162
|
+
* @param newValue The new class list to write.
|
|
12163
|
+
*/
|
|
12164
|
+
function writeDirectStyle(renderer, element, newValue) {
|
|
12165
|
+
ngDevMode && assertString(newValue, "'newValue' should be a string");
|
|
12166
|
+
renderer.setAttribute(element, 'style', newValue);
|
|
12167
|
+
ngDevMode && ngDevMode.rendererSetStyle++;
|
|
12168
|
+
}
|
|
12169
|
+
/**
|
|
12170
|
+
* Write `className` to `RElement`.
|
|
12171
|
+
*
|
|
12172
|
+
* This function does direct write without any reconciliation. Used for writing initial values, so
|
|
12173
|
+
* that static styling values do not pull in the style parser.
|
|
12174
|
+
*
|
|
12175
|
+
* @param renderer Renderer to use
|
|
12176
|
+
* @param element The element which needs to be updated.
|
|
12177
|
+
* @param newValue The new class list to write.
|
|
12178
|
+
*/
|
|
12179
|
+
function writeDirectClass(renderer, element, newValue) {
|
|
12180
|
+
ngDevMode && assertString(newValue, "'newValue' should be a string");
|
|
12181
|
+
if (newValue === '') {
|
|
12182
|
+
// There are tests in `google3` which expect `element.getAttribute('class')` to be `null`.
|
|
12183
|
+
renderer.removeAttribute(element, 'class');
|
|
12184
|
+
}
|
|
12185
|
+
else {
|
|
12186
|
+
renderer.setAttribute(element, 'class', newValue);
|
|
12187
|
+
}
|
|
12188
|
+
ngDevMode && ngDevMode.rendererSetClassName++;
|
|
12189
|
+
}
|
|
12190
|
+
/** Sets up the static DOM attributes on an `RNode`. */
|
|
12191
|
+
function setupStaticAttributes(renderer, element, tNode) {
|
|
12192
|
+
const { mergedAttrs, classes, styles } = tNode;
|
|
12193
|
+
if (mergedAttrs !== null) {
|
|
12194
|
+
setUpAttributes(renderer, element, mergedAttrs);
|
|
12195
|
+
}
|
|
12196
|
+
if (classes !== null) {
|
|
12197
|
+
writeDirectClass(renderer, element, classes);
|
|
12198
|
+
}
|
|
12199
|
+
if (styles !== null) {
|
|
12200
|
+
writeDirectStyle(renderer, element, styles);
|
|
12201
|
+
}
|
|
12202
|
+
}
|
|
12203
|
+
|
|
12085
12204
|
/**
|
|
12086
12205
|
* Advances to an element for later binding instructions.
|
|
12087
12206
|
*
|
|
@@ -12201,73 +12320,6 @@ function writeToDirectiveInput(def, instance, publicName, privateName, flags, va
|
|
|
12201
12320
|
}
|
|
12202
12321
|
}
|
|
12203
12322
|
|
|
12204
|
-
function createTextNode(renderer, value) {
|
|
12205
|
-
ngDevMode && ngDevMode.rendererCreateTextNode++;
|
|
12206
|
-
ngDevMode && ngDevMode.rendererSetText++;
|
|
12207
|
-
return renderer.createText(value);
|
|
12208
|
-
}
|
|
12209
|
-
function updateTextNode(renderer, rNode, value) {
|
|
12210
|
-
ngDevMode && ngDevMode.rendererSetText++;
|
|
12211
|
-
renderer.setValue(rNode, value);
|
|
12212
|
-
}
|
|
12213
|
-
function createCommentNode(renderer, value) {
|
|
12214
|
-
ngDevMode && ngDevMode.rendererCreateComment++;
|
|
12215
|
-
return renderer.createComment(escapeCommentText(value));
|
|
12216
|
-
}
|
|
12217
|
-
/**
|
|
12218
|
-
* Creates a native element from a tag name, using a renderer.
|
|
12219
|
-
* @param renderer A renderer to use
|
|
12220
|
-
* @param name the tag name
|
|
12221
|
-
* @param namespace Optional namespace for element.
|
|
12222
|
-
* @returns the element created
|
|
12223
|
-
*/
|
|
12224
|
-
function createElementNode(renderer, name, namespace) {
|
|
12225
|
-
ngDevMode && ngDevMode.rendererCreateElement++;
|
|
12226
|
-
return renderer.createElement(name, namespace);
|
|
12227
|
-
}
|
|
12228
|
-
/**
|
|
12229
|
-
* Inserts a native node before another native node for a given parent.
|
|
12230
|
-
* This is a utility function that can be used when native nodes were determined.
|
|
12231
|
-
*/
|
|
12232
|
-
function nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {
|
|
12233
|
-
ngDevMode && ngDevMode.rendererInsertBefore++;
|
|
12234
|
-
renderer.insertBefore(parent, child, beforeNode, isMove);
|
|
12235
|
-
}
|
|
12236
|
-
function nativeAppendChild(renderer, parent, child) {
|
|
12237
|
-
ngDevMode && ngDevMode.rendererAppendChild++;
|
|
12238
|
-
ngDevMode && assertDefined(parent, 'parent node must be defined');
|
|
12239
|
-
renderer.appendChild(parent, child);
|
|
12240
|
-
}
|
|
12241
|
-
function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {
|
|
12242
|
-
if (beforeNode !== null) {
|
|
12243
|
-
nativeInsertBefore(renderer, parent, child, beforeNode, isMove);
|
|
12244
|
-
}
|
|
12245
|
-
else {
|
|
12246
|
-
nativeAppendChild(renderer, parent, child);
|
|
12247
|
-
}
|
|
12248
|
-
}
|
|
12249
|
-
/**
|
|
12250
|
-
* Removes a native node itself using a given renderer. To remove the node we are looking up its
|
|
12251
|
-
* parent from the native tree as not all platforms / browsers support the equivalent of
|
|
12252
|
-
* node.remove().
|
|
12253
|
-
*
|
|
12254
|
-
* @param renderer A renderer to be used
|
|
12255
|
-
* @param rNode The native node that should be removed
|
|
12256
|
-
* @param isHostElement A flag indicating if a node to be removed is a host of a component.
|
|
12257
|
-
*/
|
|
12258
|
-
function nativeRemoveNode(renderer, rNode, isHostElement) {
|
|
12259
|
-
ngDevMode && ngDevMode.rendererRemoveNode++;
|
|
12260
|
-
renderer.removeChild(null, rNode, isHostElement);
|
|
12261
|
-
}
|
|
12262
|
-
/**
|
|
12263
|
-
* Clears the contents of a given RElement.
|
|
12264
|
-
*
|
|
12265
|
-
* @param rElement the native RElement to be cleared
|
|
12266
|
-
*/
|
|
12267
|
-
function clearElementContents(rElement) {
|
|
12268
|
-
rElement.textContent = '';
|
|
12269
|
-
}
|
|
12270
|
-
|
|
12271
12323
|
function createLView(parentLView, tView, context, flags, host, tHostNode, environment, renderer, injector, embeddedViewInjector, hydrationInfo) {
|
|
12272
12324
|
const lView = tView.blueprint.slice();
|
|
12273
12325
|
lView[HOST] = host;
|
|
@@ -12301,67 +12353,6 @@ function createLView(parentLView, tView, context, flags, host, tHostNode, enviro
|
|
|
12301
12353
|
tView.type == 2 /* TViewType.Embedded */ ? parentLView[DECLARATION_COMPONENT_VIEW] : lView;
|
|
12302
12354
|
return lView;
|
|
12303
12355
|
}
|
|
12304
|
-
function getOrCreateTNode(tView, index, type, name, attrs) {
|
|
12305
|
-
ngDevMode &&
|
|
12306
|
-
index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
|
|
12307
|
-
// `view_engine_compatibility` for additional context.
|
|
12308
|
-
assertGreaterThanOrEqual(index, HEADER_OFFSET, "TNodes can't be in the LView header.");
|
|
12309
|
-
// Keep this function short, so that the VM will inline it.
|
|
12310
|
-
ngDevMode && assertPureTNodeType(type);
|
|
12311
|
-
let tNode = tView.data[index];
|
|
12312
|
-
if (tNode === null) {
|
|
12313
|
-
tNode = createTNodeAtIndex(tView, index, type, name, attrs);
|
|
12314
|
-
if (isInI18nBlock()) {
|
|
12315
|
-
// If we are in i18n block then all elements should be pre declared through `Placeholder`
|
|
12316
|
-
// See `TNodeType.Placeholder` and `LFrame.inI18n` for more context.
|
|
12317
|
-
// If the `TNode` was not pre-declared than it means it was not mentioned which means it was
|
|
12318
|
-
// removed, so we mark it as detached.
|
|
12319
|
-
tNode.flags |= 32 /* TNodeFlags.isDetached */;
|
|
12320
|
-
}
|
|
12321
|
-
}
|
|
12322
|
-
else if (tNode.type & 64 /* TNodeType.Placeholder */) {
|
|
12323
|
-
tNode.type = type;
|
|
12324
|
-
tNode.value = name;
|
|
12325
|
-
tNode.attrs = attrs;
|
|
12326
|
-
const parent = getCurrentParentTNode();
|
|
12327
|
-
tNode.injectorIndex = parent === null ? -1 : parent.injectorIndex;
|
|
12328
|
-
ngDevMode && assertTNodeForTView(tNode, tView);
|
|
12329
|
-
ngDevMode && assertEqual(index, tNode.index, 'Expecting same index');
|
|
12330
|
-
}
|
|
12331
|
-
setCurrentTNode(tNode, true);
|
|
12332
|
-
return tNode;
|
|
12333
|
-
}
|
|
12334
|
-
function createTNodeAtIndex(tView, index, type, name, attrs) {
|
|
12335
|
-
const currentTNode = getCurrentTNodePlaceholderOk();
|
|
12336
|
-
const isParent = isCurrentTNodeParent();
|
|
12337
|
-
const parent = isParent ? currentTNode : currentTNode && currentTNode.parent;
|
|
12338
|
-
// Parents cannot cross component boundaries because components will be used in multiple places.
|
|
12339
|
-
const tNode = (tView.data[index] = createTNode(tView, parent, type, index, name, attrs));
|
|
12340
|
-
// Assign a pointer to the first child node of a given view. The first node is not always the one
|
|
12341
|
-
// at index 0, in case of i18n, index 0 can be the instruction `i18nStart` and the first node has
|
|
12342
|
-
// the index 1 or more, so we can't just check node index.
|
|
12343
|
-
if (tView.firstChild === null) {
|
|
12344
|
-
tView.firstChild = tNode;
|
|
12345
|
-
}
|
|
12346
|
-
if (currentTNode !== null) {
|
|
12347
|
-
if (isParent) {
|
|
12348
|
-
// FIXME(misko): This logic looks unnecessarily complicated. Could we simplify?
|
|
12349
|
-
if (currentTNode.child == null && tNode.parent !== null) {
|
|
12350
|
-
// We are in the same view, which means we are adding content node to the parent view.
|
|
12351
|
-
currentTNode.child = tNode;
|
|
12352
|
-
}
|
|
12353
|
-
}
|
|
12354
|
-
else {
|
|
12355
|
-
if (currentTNode.next === null) {
|
|
12356
|
-
// In the case of i18n the `currentTNode` may already be linked, in which case we don't want
|
|
12357
|
-
// to break the links which i18n created.
|
|
12358
|
-
currentTNode.next = tNode;
|
|
12359
|
-
tNode.prev = currentTNode;
|
|
12360
|
-
}
|
|
12361
|
-
}
|
|
12362
|
-
}
|
|
12363
|
-
return tNode;
|
|
12364
|
-
}
|
|
12365
12356
|
/**
|
|
12366
12357
|
* When elements are created dynamically after a view blueprint is created (e.g. through
|
|
12367
12358
|
* i18nApply()), we need to adjust the blueprint for future
|
|
@@ -12417,10 +12408,17 @@ function executeTemplate(tView, lView, templateFn, rf, context) {
|
|
|
12417
12408
|
/**
|
|
12418
12409
|
* Creates directive instances.
|
|
12419
12410
|
*/
|
|
12420
|
-
function
|
|
12411
|
+
function createDirectivesInstancesInInstruction(tView, lView, tNode) {
|
|
12421
12412
|
if (!getBindingsEnabled())
|
|
12422
12413
|
return;
|
|
12423
|
-
|
|
12414
|
+
attachPatchData(getNativeByTNode(tNode, lView), lView);
|
|
12415
|
+
createDirectivesInstances(tView, lView, tNode);
|
|
12416
|
+
}
|
|
12417
|
+
/**
|
|
12418
|
+
* Creates directive instances.
|
|
12419
|
+
*/
|
|
12420
|
+
function createDirectivesInstances(tView, lView, tNode) {
|
|
12421
|
+
instantiateAllDirectives(tView, lView, tNode);
|
|
12424
12422
|
if ((tNode.flags & 64 /* TNodeFlags.hasHostBindings */) === 64 /* TNodeFlags.hasHostBindings */) {
|
|
12425
12423
|
invokeDirectivesHostBindings(tView, lView, tNode);
|
|
12426
12424
|
}
|
|
@@ -12595,62 +12593,6 @@ function applyRootElementTransformImpl(rootElement) {
|
|
|
12595
12593
|
function enableApplyRootElementTransformImpl() {
|
|
12596
12594
|
_applyRootElementTransformImpl = applyRootElementTransformImpl;
|
|
12597
12595
|
}
|
|
12598
|
-
function createTNode(tView, tParent, type, index, value, attrs) {
|
|
12599
|
-
ngDevMode &&
|
|
12600
|
-
index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
|
|
12601
|
-
// `view_engine_compatibility` for additional context.
|
|
12602
|
-
assertGreaterThanOrEqual(index, HEADER_OFFSET, "TNodes can't be in the LView header.");
|
|
12603
|
-
ngDevMode && assertNotSame(attrs, undefined, "'undefined' is not valid value for 'attrs'");
|
|
12604
|
-
ngDevMode && ngDevMode.tNode++;
|
|
12605
|
-
ngDevMode && tParent && assertTNodeForTView(tParent, tView);
|
|
12606
|
-
let injectorIndex = tParent ? tParent.injectorIndex : -1;
|
|
12607
|
-
let flags = 0;
|
|
12608
|
-
if (isInSkipHydrationBlock$1()) {
|
|
12609
|
-
flags |= 128 /* TNodeFlags.inSkipHydrationBlock */;
|
|
12610
|
-
}
|
|
12611
|
-
const tNode = {
|
|
12612
|
-
type,
|
|
12613
|
-
index,
|
|
12614
|
-
insertBeforeIndex: null,
|
|
12615
|
-
injectorIndex,
|
|
12616
|
-
directiveStart: -1,
|
|
12617
|
-
directiveEnd: -1,
|
|
12618
|
-
directiveStylingLast: -1,
|
|
12619
|
-
componentOffset: -1,
|
|
12620
|
-
propertyBindings: null,
|
|
12621
|
-
flags,
|
|
12622
|
-
providerIndexes: 0,
|
|
12623
|
-
value: value,
|
|
12624
|
-
attrs: attrs,
|
|
12625
|
-
mergedAttrs: null,
|
|
12626
|
-
localNames: null,
|
|
12627
|
-
initialInputs: undefined,
|
|
12628
|
-
inputs: null,
|
|
12629
|
-
outputs: null,
|
|
12630
|
-
tView: null,
|
|
12631
|
-
next: null,
|
|
12632
|
-
prev: null,
|
|
12633
|
-
projectionNext: null,
|
|
12634
|
-
child: null,
|
|
12635
|
-
parent: tParent,
|
|
12636
|
-
projection: null,
|
|
12637
|
-
styles: null,
|
|
12638
|
-
stylesWithoutHost: null,
|
|
12639
|
-
residualStyles: undefined,
|
|
12640
|
-
classes: null,
|
|
12641
|
-
classesWithoutHost: null,
|
|
12642
|
-
residualClasses: undefined,
|
|
12643
|
-
classBindings: 0,
|
|
12644
|
-
styleBindings: 0,
|
|
12645
|
-
};
|
|
12646
|
-
if (ngDevMode) {
|
|
12647
|
-
// For performance reasons it is important that the tNode retains the same shape during runtime.
|
|
12648
|
-
// (To make sure that all of the code is monomorphic.) For this reason we seal the object to
|
|
12649
|
-
// prevent class transitions.
|
|
12650
|
-
Object.seal(tNode);
|
|
12651
|
-
}
|
|
12652
|
-
return tNode;
|
|
12653
|
-
}
|
|
12654
12596
|
function captureNodeBindings(mode, aliasMap, directiveIndex, bindingsResult, hostDirectiveAliasMap) {
|
|
12655
12597
|
for (let publicName in aliasMap) {
|
|
12656
12598
|
if (!aliasMap.hasOwnProperty(publicName)) {
|
|
@@ -12860,16 +12802,9 @@ function resolveDirectives(tView, lView, tNode, localRefs) {
|
|
|
12860
12802
|
ngDevMode && assertFirstCreatePass(tView);
|
|
12861
12803
|
if (getBindingsEnabled()) {
|
|
12862
12804
|
const exportsMap = localRefs === null ? null : { '': -1 };
|
|
12863
|
-
const
|
|
12864
|
-
|
|
12865
|
-
|
|
12866
|
-
if (matchResult === null) {
|
|
12867
|
-
directiveDefs = hostDirectiveDefs = null;
|
|
12868
|
-
}
|
|
12869
|
-
else {
|
|
12870
|
-
[directiveDefs, hostDirectiveDefs] = matchResult;
|
|
12871
|
-
}
|
|
12872
|
-
if (directiveDefs !== null) {
|
|
12805
|
+
const matchedDirectiveDefs = findDirectiveDefMatches(tView, tNode);
|
|
12806
|
+
if (matchedDirectiveDefs !== null) {
|
|
12807
|
+
const [directiveDefs, hostDirectiveDefs] = resolveHostDirectives(tView, tNode, matchedDirectiveDefs);
|
|
12873
12808
|
initializeDirectives(tView, lView, tNode, directiveDefs, exportsMap, hostDirectiveDefs);
|
|
12874
12809
|
}
|
|
12875
12810
|
if (exportsMap)
|
|
@@ -12981,19 +12916,18 @@ function lastSelectedElementIdx(hostBindingOpCodes) {
|
|
|
12981
12916
|
/**
|
|
12982
12917
|
* Instantiate all the directives that were previously resolved on the current node.
|
|
12983
12918
|
*/
|
|
12984
|
-
function instantiateAllDirectives(tView, lView, tNode
|
|
12919
|
+
function instantiateAllDirectives(tView, lView, tNode) {
|
|
12985
12920
|
const start = tNode.directiveStart;
|
|
12986
12921
|
const end = tNode.directiveEnd;
|
|
12987
12922
|
// The component view needs to be created before creating the node injector
|
|
12988
12923
|
// since it is used to inject some special symbols like `ChangeDetectorRef`.
|
|
12989
12924
|
if (isComponentHost(tNode)) {
|
|
12990
12925
|
ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */);
|
|
12991
|
-
|
|
12926
|
+
createComponentLView(lView, tNode, tView.data[start + tNode.componentOffset]);
|
|
12992
12927
|
}
|
|
12993
12928
|
if (!tView.firstCreatePass) {
|
|
12994
12929
|
getOrCreateNodeInjectorForNode(tNode, lView);
|
|
12995
12930
|
}
|
|
12996
|
-
attachPatchData(native, lView);
|
|
12997
12931
|
const initialInputs = tNode.initialInputs;
|
|
12998
12932
|
for (let i = start; i < end; i++) {
|
|
12999
12933
|
const def = tView.data[i];
|
|
@@ -13049,60 +12983,63 @@ function findDirectiveDefMatches(tView, tNode) {
|
|
|
13049
12983
|
ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */);
|
|
13050
12984
|
const registry = tView.directiveRegistry;
|
|
13051
12985
|
let matches = null;
|
|
13052
|
-
let hostDirectiveDefs = null;
|
|
13053
12986
|
if (registry) {
|
|
13054
12987
|
for (let i = 0; i < registry.length; i++) {
|
|
13055
12988
|
const def = registry[i];
|
|
13056
12989
|
if (isNodeMatchingSelectorList(tNode, def.selectors, /* isProjectionMode */ false)) {
|
|
13057
|
-
matches
|
|
12990
|
+
matches ??= [];
|
|
13058
12991
|
if (isComponentDef(def)) {
|
|
13059
12992
|
if (ngDevMode) {
|
|
13060
12993
|
assertTNodeType(tNode, 2 /* TNodeType.Element */, `"${tNode.value}" tags cannot be used as component hosts. ` +
|
|
13061
12994
|
`Please use a different tag to activate the ${stringify(def.type)} component.`);
|
|
13062
|
-
if (
|
|
12995
|
+
if (matches.length && isComponentDef(matches[0])) {
|
|
13063
12996
|
throwMultipleComponentError(tNode, matches.find(isComponentDef).type, def.type);
|
|
13064
12997
|
}
|
|
13065
12998
|
}
|
|
13066
|
-
|
|
13067
|
-
// hooks run before any directive lifecycle hooks. This appears to be for ViewEngine
|
|
13068
|
-
// compatibility. This logic doesn't make sense with host directives, because it
|
|
13069
|
-
// would allow the host directives to undo any overrides the host may have made.
|
|
13070
|
-
// To handle this case, the host directives of components are inserted at the beginning
|
|
13071
|
-
// of the array, followed by the component. As such, the insertion order is as follows:
|
|
13072
|
-
// 1. Host directives belonging to the selector-matched component.
|
|
13073
|
-
// 2. Selector-matched component.
|
|
13074
|
-
// 3. Host directives belonging to selector-matched directives.
|
|
13075
|
-
// 4. Selector-matched directives.
|
|
13076
|
-
if (def.findHostDirectiveDefs !== null) {
|
|
13077
|
-
const hostDirectiveMatches = [];
|
|
13078
|
-
hostDirectiveDefs = hostDirectiveDefs || new Map();
|
|
13079
|
-
def.findHostDirectiveDefs(def, hostDirectiveMatches, hostDirectiveDefs);
|
|
13080
|
-
// Add all host directives declared on this component, followed by the component itself.
|
|
13081
|
-
// Host directives should execute first so the host has a chance to override changes
|
|
13082
|
-
// to the DOM made by them.
|
|
13083
|
-
matches.unshift(...hostDirectiveMatches, def);
|
|
13084
|
-
// Component is offset starting from the beginning of the host directives array.
|
|
13085
|
-
const componentOffset = hostDirectiveMatches.length;
|
|
13086
|
-
markAsComponentHost(tView, tNode, componentOffset);
|
|
13087
|
-
}
|
|
13088
|
-
else {
|
|
13089
|
-
// No host directives on this component, just add the
|
|
13090
|
-
// component def to the beginning of the matches.
|
|
13091
|
-
matches.unshift(def);
|
|
13092
|
-
markAsComponentHost(tView, tNode, 0);
|
|
13093
|
-
}
|
|
12999
|
+
matches.unshift(def);
|
|
13094
13000
|
}
|
|
13095
13001
|
else {
|
|
13096
|
-
// Append any host directives to the matches first.
|
|
13097
|
-
hostDirectiveDefs = hostDirectiveDefs || new Map();
|
|
13098
|
-
def.findHostDirectiveDefs?.(def, matches, hostDirectiveDefs);
|
|
13099
13002
|
matches.push(def);
|
|
13100
13003
|
}
|
|
13101
13004
|
}
|
|
13102
13005
|
}
|
|
13103
13006
|
}
|
|
13104
|
-
|
|
13105
|
-
|
|
13007
|
+
return matches;
|
|
13008
|
+
}
|
|
13009
|
+
function resolveHostDirectives(tView, tNode, matches) {
|
|
13010
|
+
const allDirectiveDefs = [];
|
|
13011
|
+
let hostDirectiveDefs = null;
|
|
13012
|
+
for (const def of matches) {
|
|
13013
|
+
if (def.findHostDirectiveDefs !== null) {
|
|
13014
|
+
// TODO(pk): probably could return matches instead of taking in an array to fill in?
|
|
13015
|
+
hostDirectiveDefs ??= new Map();
|
|
13016
|
+
// Components are inserted at the front of the matches array so that their lifecycle
|
|
13017
|
+
// hooks run before any directive lifecycle hooks. This appears to be for ViewEngine
|
|
13018
|
+
// compatibility. This logic doesn't make sense with host directives, because it
|
|
13019
|
+
// would allow the host directives to undo any overrides the host may have made.
|
|
13020
|
+
// To handle this case, the host directives of components are inserted at the beginning
|
|
13021
|
+
// of the array, followed by the component. As such, the insertion order is as follows:
|
|
13022
|
+
// 1. Host directives belonging to the selector-matched component.
|
|
13023
|
+
// 2. Selector-matched component.
|
|
13024
|
+
// 3. Host directives belonging to selector-matched directives.
|
|
13025
|
+
// 4. Selector-matched directives.
|
|
13026
|
+
def.findHostDirectiveDefs(def, allDirectiveDefs, hostDirectiveDefs);
|
|
13027
|
+
}
|
|
13028
|
+
if (isComponentDef(def)) {
|
|
13029
|
+
allDirectiveDefs.push(def);
|
|
13030
|
+
markAsComponentHost(tView, tNode, allDirectiveDefs.length - 1);
|
|
13031
|
+
}
|
|
13032
|
+
}
|
|
13033
|
+
if (isComponentHost(tNode)) {
|
|
13034
|
+
allDirectiveDefs.push(...matches.slice(1));
|
|
13035
|
+
}
|
|
13036
|
+
else {
|
|
13037
|
+
allDirectiveDefs.push(...matches);
|
|
13038
|
+
}
|
|
13039
|
+
if (ngDevMode) {
|
|
13040
|
+
assertNoDuplicateDirectives(allDirectiveDefs);
|
|
13041
|
+
}
|
|
13042
|
+
return [allDirectiveDefs, hostDirectiveDefs];
|
|
13106
13043
|
}
|
|
13107
13044
|
/**
|
|
13108
13045
|
* Marks a given TNode as a component's host. This consists of:
|
|
@@ -13198,7 +13135,7 @@ function getInitialLViewFlagsFromDef(def) {
|
|
|
13198
13135
|
}
|
|
13199
13136
|
return flags;
|
|
13200
13137
|
}
|
|
13201
|
-
function
|
|
13138
|
+
function createComponentLView(lView, hostTNode, def) {
|
|
13202
13139
|
const native = getNativeByTNode(hostTNode, lView);
|
|
13203
13140
|
const tView = getOrCreateComponentTView(def);
|
|
13204
13141
|
// Only component views should be added to the view tree directly. Embedded views are
|
|
@@ -13207,7 +13144,7 @@ function addComponentLogic(lView, hostTNode, def) {
|
|
|
13207
13144
|
const componentView = addToEndOfViewTree(lView, createLView(lView, tView, null, getInitialLViewFlagsFromDef(def), native, hostTNode, null, rendererFactory.createRenderer(native, def), null, null, null));
|
|
13208
13145
|
// Component view will always be created before any injected LContainers,
|
|
13209
13146
|
// so this is a regular element, wrap it with the component view
|
|
13210
|
-
lView[hostTNode.index] = componentView;
|
|
13147
|
+
return (lView[hostTNode.index] = componentView);
|
|
13211
13148
|
}
|
|
13212
13149
|
function elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace) {
|
|
13213
13150
|
if (ngDevMode) {
|
|
@@ -13603,6 +13540,15 @@ function ensureIcuContainerVisitorLoaded(loader) {
|
|
|
13603
13540
|
}
|
|
13604
13541
|
}
|
|
13605
13542
|
|
|
13543
|
+
/**
|
|
13544
|
+
* Checks whether a TNode is considered detached, i.e. not present in the
|
|
13545
|
+
* translated i18n template. We should not attempt hydration for such nodes
|
|
13546
|
+
* and instead, use a regular "creation mode".
|
|
13547
|
+
*/
|
|
13548
|
+
function isDetachedByI18n(tNode) {
|
|
13549
|
+
return (tNode.flags & 32 /* TNodeFlags.isDetached */) === 32 /* TNodeFlags.isDetached */;
|
|
13550
|
+
}
|
|
13551
|
+
|
|
13606
13552
|
/**
|
|
13607
13553
|
* NOTE: for performance reasons, the possible actions are inlined within the function instead of
|
|
13608
13554
|
* being passed as an argument.
|
|
@@ -14079,10 +14025,9 @@ function getClosestRElement(tView, tNode, lView) {
|
|
|
14079
14025
|
}
|
|
14080
14026
|
else {
|
|
14081
14027
|
ngDevMode && assertTNodeType(parentTNode, 3 /* TNodeType.AnyRNode */ | 4 /* TNodeType.Container */);
|
|
14082
|
-
|
|
14083
|
-
if (componentOffset > -1) {
|
|
14028
|
+
if (isComponentHost(parentTNode)) {
|
|
14084
14029
|
ngDevMode && assertTNodeForLView(parentTNode, lView);
|
|
14085
|
-
const { encapsulation } = tView.data[parentTNode.directiveStart + componentOffset];
|
|
14030
|
+
const { encapsulation } = tView.data[parentTNode.directiveStart + parentTNode.componentOffset];
|
|
14086
14031
|
// We've got a parent which is an element in the current view. We just need to verify if the
|
|
14087
14032
|
// parent element is not a component. Component's content nodes are not inserted immediately
|
|
14088
14033
|
// because they will be projected, and so doing insert at this point would be wasteful.
|
|
@@ -14273,7 +14218,7 @@ function applyNodes(renderer, action, tNode, lView, parentRElement, beforeNode,
|
|
|
14273
14218
|
tNode.flags |= 2 /* TNodeFlags.isProjected */;
|
|
14274
14219
|
}
|
|
14275
14220
|
}
|
|
14276
|
-
if ((tNode
|
|
14221
|
+
if (!isDetachedByI18n(tNode)) {
|
|
14277
14222
|
if (tNodeType & 8 /* TNodeType.ElementContainer */) {
|
|
14278
14223
|
applyNodes(renderer, action, tNode.child, lView, parentRElement, beforeNode, false);
|
|
14279
14224
|
applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
|
|
@@ -14436,55 +14381,6 @@ function applyStyling(renderer, isClassBased, rNode, prop, value) {
|
|
|
14436
14381
|
}
|
|
14437
14382
|
}
|
|
14438
14383
|
}
|
|
14439
|
-
/**
|
|
14440
|
-
* Write `cssText` to `RElement`.
|
|
14441
|
-
*
|
|
14442
|
-
* This function does direct write without any reconciliation. Used for writing initial values, so
|
|
14443
|
-
* that static styling values do not pull in the style parser.
|
|
14444
|
-
*
|
|
14445
|
-
* @param renderer Renderer to use
|
|
14446
|
-
* @param element The element which needs to be updated.
|
|
14447
|
-
* @param newValue The new class list to write.
|
|
14448
|
-
*/
|
|
14449
|
-
function writeDirectStyle(renderer, element, newValue) {
|
|
14450
|
-
ngDevMode && assertString(newValue, "'newValue' should be a string");
|
|
14451
|
-
renderer.setAttribute(element, 'style', newValue);
|
|
14452
|
-
ngDevMode && ngDevMode.rendererSetStyle++;
|
|
14453
|
-
}
|
|
14454
|
-
/**
|
|
14455
|
-
* Write `className` to `RElement`.
|
|
14456
|
-
*
|
|
14457
|
-
* This function does direct write without any reconciliation. Used for writing initial values, so
|
|
14458
|
-
* that static styling values do not pull in the style parser.
|
|
14459
|
-
*
|
|
14460
|
-
* @param renderer Renderer to use
|
|
14461
|
-
* @param element The element which needs to be updated.
|
|
14462
|
-
* @param newValue The new class list to write.
|
|
14463
|
-
*/
|
|
14464
|
-
function writeDirectClass(renderer, element, newValue) {
|
|
14465
|
-
ngDevMode && assertString(newValue, "'newValue' should be a string");
|
|
14466
|
-
if (newValue === '') {
|
|
14467
|
-
// There are tests in `google3` which expect `element.getAttribute('class')` to be `null`.
|
|
14468
|
-
renderer.removeAttribute(element, 'class');
|
|
14469
|
-
}
|
|
14470
|
-
else {
|
|
14471
|
-
renderer.setAttribute(element, 'class', newValue);
|
|
14472
|
-
}
|
|
14473
|
-
ngDevMode && ngDevMode.rendererSetClassName++;
|
|
14474
|
-
}
|
|
14475
|
-
/** Sets up the static DOM attributes on an `RNode`. */
|
|
14476
|
-
function setupStaticAttributes(renderer, element, tNode) {
|
|
14477
|
-
const { mergedAttrs, classes, styles } = tNode;
|
|
14478
|
-
if (mergedAttrs !== null) {
|
|
14479
|
-
setUpAttributes(renderer, element, mergedAttrs);
|
|
14480
|
-
}
|
|
14481
|
-
if (classes !== null) {
|
|
14482
|
-
writeDirectClass(renderer, element, classes);
|
|
14483
|
-
}
|
|
14484
|
-
if (styles !== null) {
|
|
14485
|
-
writeDirectStyle(renderer, element, styles);
|
|
14486
|
-
}
|
|
14487
|
-
}
|
|
14488
14384
|
|
|
14489
14385
|
function createAndRenderEmbeddedLView(declarationLView, templateTNode, context, options) {
|
|
14490
14386
|
const prevConsumer = setActiveConsumer$1(null);
|
|
@@ -15996,6 +15892,128 @@ function processI18nInsertBefore(renderer, childTNode, lView, childRNode, parent
|
|
|
15996
15892
|
}
|
|
15997
15893
|
}
|
|
15998
15894
|
|
|
15895
|
+
function getOrCreateTNode(tView, index, type, name, attrs) {
|
|
15896
|
+
ngDevMode &&
|
|
15897
|
+
index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
|
|
15898
|
+
// `view_engine_compatibility` for additional context.
|
|
15899
|
+
assertGreaterThanOrEqual(index, HEADER_OFFSET, "TNodes can't be in the LView header.");
|
|
15900
|
+
// Keep this function short, so that the VM will inline it.
|
|
15901
|
+
ngDevMode && assertPureTNodeType(type);
|
|
15902
|
+
let tNode = tView.data[index];
|
|
15903
|
+
if (tNode === null) {
|
|
15904
|
+
tNode = createTNodeAtIndex(tView, index, type, name, attrs);
|
|
15905
|
+
if (isInI18nBlock()) {
|
|
15906
|
+
// If we are in i18n block then all elements should be pre declared through `Placeholder`
|
|
15907
|
+
// See `TNodeType.Placeholder` and `LFrame.inI18n` for more context.
|
|
15908
|
+
// If the `TNode` was not pre-declared than it means it was not mentioned which means it was
|
|
15909
|
+
// removed, so we mark it as detached.
|
|
15910
|
+
tNode.flags |= 32 /* TNodeFlags.isDetached */;
|
|
15911
|
+
}
|
|
15912
|
+
}
|
|
15913
|
+
else if (tNode.type & 64 /* TNodeType.Placeholder */) {
|
|
15914
|
+
tNode.type = type;
|
|
15915
|
+
tNode.value = name;
|
|
15916
|
+
tNode.attrs = attrs;
|
|
15917
|
+
const parent = getCurrentParentTNode();
|
|
15918
|
+
tNode.injectorIndex = parent === null ? -1 : parent.injectorIndex;
|
|
15919
|
+
ngDevMode && assertTNodeForTView(tNode, tView);
|
|
15920
|
+
ngDevMode && assertEqual(index, tNode.index, 'Expecting same index');
|
|
15921
|
+
}
|
|
15922
|
+
setCurrentTNode(tNode, true);
|
|
15923
|
+
return tNode;
|
|
15924
|
+
}
|
|
15925
|
+
function createTNodeAtIndex(tView, index, type, name, attrs) {
|
|
15926
|
+
const currentTNode = getCurrentTNodePlaceholderOk();
|
|
15927
|
+
const isParent = isCurrentTNodeParent();
|
|
15928
|
+
const parent = isParent ? currentTNode : currentTNode && currentTNode.parent;
|
|
15929
|
+
// Parents cannot cross component boundaries because components will be used in multiple places.
|
|
15930
|
+
const tNode = (tView.data[index] = createTNode(tView, parent, type, index, name, attrs));
|
|
15931
|
+
// Assign a pointer to the first child node of a given view. The first node is not always the one
|
|
15932
|
+
// at index 0, in case of i18n, index 0 can be the instruction `i18nStart` and the first node has
|
|
15933
|
+
// the index 1 or more, so we can't just check node index.
|
|
15934
|
+
linkTNodeInTView(tView, tNode, currentTNode, isParent);
|
|
15935
|
+
return tNode;
|
|
15936
|
+
}
|
|
15937
|
+
function linkTNodeInTView(tView, tNode, currentTNode, isParent) {
|
|
15938
|
+
if (tView.firstChild === null) {
|
|
15939
|
+
tView.firstChild = tNode;
|
|
15940
|
+
}
|
|
15941
|
+
if (currentTNode !== null) {
|
|
15942
|
+
if (isParent) {
|
|
15943
|
+
// FIXME(misko): This logic looks unnecessarily complicated. Could we simplify?
|
|
15944
|
+
if (currentTNode.child == null && tNode.parent !== null) {
|
|
15945
|
+
// We are in the same view, which means we are adding content node to the parent view.
|
|
15946
|
+
currentTNode.child = tNode;
|
|
15947
|
+
}
|
|
15948
|
+
}
|
|
15949
|
+
else {
|
|
15950
|
+
if (currentTNode.next === null) {
|
|
15951
|
+
// In the case of i18n the `currentTNode` may already be linked, in which case we don't want
|
|
15952
|
+
// to break the links which i18n created.
|
|
15953
|
+
currentTNode.next = tNode;
|
|
15954
|
+
tNode.prev = currentTNode;
|
|
15955
|
+
}
|
|
15956
|
+
}
|
|
15957
|
+
}
|
|
15958
|
+
}
|
|
15959
|
+
function createTNode(tView, tParent, type, index, value, attrs) {
|
|
15960
|
+
ngDevMode &&
|
|
15961
|
+
index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
|
|
15962
|
+
// `view_engine_compatibility` for additional context.
|
|
15963
|
+
assertGreaterThanOrEqual(index, HEADER_OFFSET, "TNodes can't be in the LView header.");
|
|
15964
|
+
ngDevMode && assertNotSame(attrs, undefined, "'undefined' is not valid value for 'attrs'");
|
|
15965
|
+
ngDevMode && ngDevMode.tNode++;
|
|
15966
|
+
ngDevMode && tParent && assertTNodeForTView(tParent, tView);
|
|
15967
|
+
let injectorIndex = tParent ? tParent.injectorIndex : -1;
|
|
15968
|
+
let flags = 0;
|
|
15969
|
+
if (isInSkipHydrationBlock$1()) {
|
|
15970
|
+
flags |= 128 /* TNodeFlags.inSkipHydrationBlock */;
|
|
15971
|
+
}
|
|
15972
|
+
// TODO: would it be helpful to use a prototypal inheritance here, similar to the way we do so with signals?
|
|
15973
|
+
const tNode = {
|
|
15974
|
+
type,
|
|
15975
|
+
index,
|
|
15976
|
+
insertBeforeIndex: null,
|
|
15977
|
+
injectorIndex,
|
|
15978
|
+
directiveStart: -1,
|
|
15979
|
+
directiveEnd: -1,
|
|
15980
|
+
directiveStylingLast: -1,
|
|
15981
|
+
componentOffset: -1,
|
|
15982
|
+
propertyBindings: null,
|
|
15983
|
+
flags,
|
|
15984
|
+
providerIndexes: 0,
|
|
15985
|
+
value: value,
|
|
15986
|
+
attrs: attrs,
|
|
15987
|
+
mergedAttrs: null,
|
|
15988
|
+
localNames: null,
|
|
15989
|
+
initialInputs: undefined,
|
|
15990
|
+
inputs: null,
|
|
15991
|
+
outputs: null,
|
|
15992
|
+
tView: null,
|
|
15993
|
+
next: null,
|
|
15994
|
+
prev: null,
|
|
15995
|
+
projectionNext: null,
|
|
15996
|
+
child: null,
|
|
15997
|
+
parent: tParent,
|
|
15998
|
+
projection: null,
|
|
15999
|
+
styles: null,
|
|
16000
|
+
stylesWithoutHost: null,
|
|
16001
|
+
residualStyles: undefined,
|
|
16002
|
+
classes: null,
|
|
16003
|
+
classesWithoutHost: null,
|
|
16004
|
+
residualClasses: undefined,
|
|
16005
|
+
classBindings: 0,
|
|
16006
|
+
styleBindings: 0,
|
|
16007
|
+
};
|
|
16008
|
+
if (ngDevMode) {
|
|
16009
|
+
// For performance reasons it is important that the tNode retains the same shape during runtime.
|
|
16010
|
+
// (To make sure that all of the code is monomorphic.) For this reason we seal the object to
|
|
16011
|
+
// prevent class transitions.
|
|
16012
|
+
Object.seal(tNode);
|
|
16013
|
+
}
|
|
16014
|
+
return tNode;
|
|
16015
|
+
}
|
|
16016
|
+
|
|
15999
16017
|
/**
|
|
16000
16018
|
* Add `tNode` to `previousTNodes` list and update relevant `TNode`s in `previousTNodes` list
|
|
16001
16019
|
* `tNode.insertBeforeIndex`.
|
|
@@ -17808,15 +17826,6 @@ function getNamespace(elementName) {
|
|
|
17808
17826
|
const name = elementName.toLowerCase();
|
|
17809
17827
|
return name === 'svg' ? SVG_NAMESPACE : name === 'math' ? MATH_ML_NAMESPACE : null;
|
|
17810
17828
|
}
|
|
17811
|
-
// TODO(pk): change the extractAttrsAndClassesFromSelector so it returns TAttributes already?
|
|
17812
|
-
function getRootTAttributesFromSelector(selector) {
|
|
17813
|
-
const { attrs, classes } = extractAttrsAndClassesFromSelector(selector);
|
|
17814
|
-
const tAtts = attrs;
|
|
17815
|
-
if (classes.length) {
|
|
17816
|
-
tAtts.push(1 /* AttributeMarker.Classes */, ...classes);
|
|
17817
|
-
}
|
|
17818
|
-
return tAtts;
|
|
17819
|
-
}
|
|
17820
17829
|
/**
|
|
17821
17830
|
* ComponentFactory interface implementation.
|
|
17822
17831
|
*/
|
|
@@ -17853,9 +17862,7 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
17853
17862
|
this.ngModule = ngModule;
|
|
17854
17863
|
this.componentType = componentDef.type;
|
|
17855
17864
|
this.selector = stringifyCSSSelectorList(componentDef.selectors);
|
|
17856
|
-
this.ngContentSelectors = componentDef.ngContentSelectors
|
|
17857
|
-
? componentDef.ngContentSelectors
|
|
17858
|
-
: [];
|
|
17865
|
+
this.ngContentSelectors = componentDef.ngContentSelectors ?? [];
|
|
17859
17866
|
this.isBoundToModule = !!ngModule;
|
|
17860
17867
|
}
|
|
17861
17868
|
create(injector, projectableNodes, rootSelectorOrNode, environmentInjector) {
|
|
@@ -17917,36 +17924,27 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
17917
17924
|
// Create the root view. Uses empty TView and ContentTemplate.
|
|
17918
17925
|
const rootTView = createTView(0 /* TViewType.Root */, null, null, 1, 0, null, null, null, null, null, null);
|
|
17919
17926
|
const rootLView = createLView(null, rootTView, null, rootFlags, null, null, environment, hostRenderer, rootViewInjector, null, hydrationInfo);
|
|
17927
|
+
rootLView[HEADER_OFFSET] = hostRNode;
|
|
17920
17928
|
// rootView is the parent when bootstrapping
|
|
17921
17929
|
// TODO(misko): it looks like we are entering view here but we don't really need to as
|
|
17922
17930
|
// `renderView` does that. However as the code is written it is needed because
|
|
17923
17931
|
// `createRootComponentView` and `createRootComponent` both read global state. Fixing those
|
|
17924
17932
|
// issues would allow us to drop this.
|
|
17925
17933
|
enterView(rootLView);
|
|
17926
|
-
let component;
|
|
17927
|
-
let tElementNode;
|
|
17928
17934
|
let componentView = null;
|
|
17929
17935
|
try {
|
|
17930
|
-
const rootComponentDef = this.componentDef;
|
|
17931
|
-
let rootDirectives;
|
|
17932
|
-
let hostDirectiveDefs = null;
|
|
17933
|
-
if (rootComponentDef.findHostDirectiveDefs) {
|
|
17934
|
-
rootDirectives = [];
|
|
17935
|
-
hostDirectiveDefs = new Map();
|
|
17936
|
-
rootComponentDef.findHostDirectiveDefs(rootComponentDef, rootDirectives, hostDirectiveDefs);
|
|
17937
|
-
rootDirectives.push(rootComponentDef);
|
|
17938
|
-
ngDevMode && assertNoDuplicateDirectives(rootDirectives);
|
|
17939
|
-
}
|
|
17940
|
-
else {
|
|
17941
|
-
rootDirectives = [rootComponentDef];
|
|
17942
|
-
}
|
|
17943
|
-
const hostTNode = createRootComponentTNode(rootLView, hostRNode);
|
|
17944
17936
|
// 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.
|
|
17945
17937
|
const tAttributes = rootSelectorOrNode
|
|
17946
|
-
? ['ng-version', '19.1.
|
|
17938
|
+
? ['ng-version', '19.1.4']
|
|
17947
17939
|
: // Extract attributes and classes from the first selector only to match VE behavior.
|
|
17948
|
-
|
|
17949
|
-
|
|
17940
|
+
extractAttrsAndClassesFromSelector(this.componentDef.selectors[0]);
|
|
17941
|
+
// TODO: this logic is shared with the element instruction first create pass
|
|
17942
|
+
const hostTNode = getOrCreateTNode(rootTView, HEADER_OFFSET, 2 /* TNodeType.Element */, '#host', tAttributes);
|
|
17943
|
+
const [directiveDefs, hostDirectiveDefs] = resolveHostDirectives(rootTView, hostTNode, [
|
|
17944
|
+
this.componentDef,
|
|
17945
|
+
]);
|
|
17946
|
+
initializeDirectives(rootTView, rootLView, hostTNode, directiveDefs, {}, hostDirectiveDefs);
|
|
17947
|
+
for (const def of directiveDefs) {
|
|
17950
17948
|
hostTNode.mergedAttrs = mergeHostAttrs(hostTNode.mergedAttrs, def.hostAttrs);
|
|
17951
17949
|
}
|
|
17952
17950
|
hostTNode.mergedAttrs = mergeHostAttrs(hostTNode.mergedAttrs, tAttributes);
|
|
@@ -17956,15 +17954,19 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
17956
17954
|
// tests so that this check can be removed.
|
|
17957
17955
|
if (hostRNode) {
|
|
17958
17956
|
setupStaticAttributes(hostRenderer, hostRNode, hostTNode);
|
|
17957
|
+
attachPatchData(hostRNode, rootLView);
|
|
17959
17958
|
}
|
|
17960
|
-
componentView = createRootComponentView(hostTNode, hostRNode, rootComponentDef, rootDirectives, rootLView, environment);
|
|
17961
|
-
tElementNode = getTNode(rootTView, HEADER_OFFSET);
|
|
17962
17959
|
if (projectableNodes !== undefined) {
|
|
17963
17960
|
projectNodes(hostTNode, this.ngContentSelectors, projectableNodes);
|
|
17964
17961
|
}
|
|
17965
|
-
// TODO:
|
|
17966
|
-
|
|
17967
|
-
|
|
17962
|
+
// TODO(pk): this logic is similar to the instruction code where a node can have directives
|
|
17963
|
+
createDirectivesInstances(rootTView, rootLView, hostTNode);
|
|
17964
|
+
executeContentQueries(rootTView, hostTNode, rootLView);
|
|
17965
|
+
// TODO(pk): code / logic duplication with the elementEnd and similar instructions
|
|
17966
|
+
registerPostOrderHooks(rootTView, hostTNode);
|
|
17967
|
+
componentView = getComponentLViewByIndex(hostTNode.index, rootLView);
|
|
17968
|
+
// TODO(pk): why do we need this logic?
|
|
17969
|
+
rootLView[CONTEXT] = componentView[CONTEXT];
|
|
17968
17970
|
renderView(rootTView, rootLView, null);
|
|
17969
17971
|
}
|
|
17970
17972
|
catch (e) {
|
|
@@ -17979,7 +17981,7 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
17979
17981
|
finally {
|
|
17980
17982
|
leaveView();
|
|
17981
17983
|
}
|
|
17982
|
-
return new ComponentRef(this.componentType,
|
|
17984
|
+
return new ComponentRef(this.componentType, rootLView);
|
|
17983
17985
|
}
|
|
17984
17986
|
finally {
|
|
17985
17987
|
setActiveConsumer$1(prevConsumer);
|
|
@@ -17995,20 +17997,20 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
17995
17997
|
*
|
|
17996
17998
|
*/
|
|
17997
17999
|
class ComponentRef extends ComponentRef$1 {
|
|
17998
|
-
location;
|
|
17999
18000
|
_rootLView;
|
|
18000
|
-
_tNode;
|
|
18001
18001
|
instance;
|
|
18002
18002
|
hostView;
|
|
18003
18003
|
changeDetectorRef;
|
|
18004
18004
|
componentType;
|
|
18005
|
+
location;
|
|
18005
18006
|
previousInputValues = null;
|
|
18006
|
-
|
|
18007
|
+
_tNode;
|
|
18008
|
+
constructor(componentType, _rootLView) {
|
|
18007
18009
|
super();
|
|
18008
|
-
this.location = location;
|
|
18009
18010
|
this._rootLView = _rootLView;
|
|
18010
|
-
this._tNode =
|
|
18011
|
-
this.
|
|
18011
|
+
this._tNode = getTNode(_rootLView[TVIEW], HEADER_OFFSET);
|
|
18012
|
+
this.location = createElementRef(this._tNode, _rootLView);
|
|
18013
|
+
this.instance = getComponentLViewByIndex(this._tNode.index, _rootLView)[CONTEXT];
|
|
18012
18014
|
this.hostView = this.changeDetectorRef = new ViewRef$1(_rootLView, undefined /* _cdRefInjectingView */, false /* notifyErrorHandler */);
|
|
18013
18015
|
this.componentType = componentType;
|
|
18014
18016
|
}
|
|
@@ -18048,81 +18050,6 @@ class ComponentRef extends ComponentRef$1 {
|
|
|
18048
18050
|
this.hostView.onDestroy(callback);
|
|
18049
18051
|
}
|
|
18050
18052
|
}
|
|
18051
|
-
/** Creates a TNode that can be used to instantiate a root component. */
|
|
18052
|
-
function createRootComponentTNode(lView, rNode) {
|
|
18053
|
-
const tView = lView[TVIEW];
|
|
18054
|
-
const index = HEADER_OFFSET;
|
|
18055
|
-
ngDevMode && assertIndexInRange(lView, index);
|
|
18056
|
-
lView[index] = rNode;
|
|
18057
|
-
// '#host' is added here as we don't know the real host DOM name (we don't want to read it) and at
|
|
18058
|
-
// the same time we want to communicate the debug `TNode` that this is a special `TNode`
|
|
18059
|
-
// representing a host element.
|
|
18060
|
-
return getOrCreateTNode(tView, index, 2 /* TNodeType.Element */, '#host', null);
|
|
18061
|
-
}
|
|
18062
|
-
/**
|
|
18063
|
-
* Creates the root component view and the root component node.
|
|
18064
|
-
*
|
|
18065
|
-
* @param hostRNode Render host element.
|
|
18066
|
-
* @param rootComponentDef ComponentDef
|
|
18067
|
-
* @param rootView The parent view where the host node is stored
|
|
18068
|
-
* @param rendererFactory Factory to be used for creating child renderers.
|
|
18069
|
-
* @param hostRenderer The current renderer
|
|
18070
|
-
* @param sanitizer The sanitizer, if provided
|
|
18071
|
-
*
|
|
18072
|
-
* @returns Component view created
|
|
18073
|
-
*/
|
|
18074
|
-
function createRootComponentView(tNode, hostRNode, rootComponentDef, rootDirectives, rootView, environment) {
|
|
18075
|
-
const tView = rootView[TVIEW];
|
|
18076
|
-
// Hydration info is on the host element and needs to be retrieved
|
|
18077
|
-
// and passed to the component LView.
|
|
18078
|
-
let hydrationInfo = null;
|
|
18079
|
-
if (hostRNode !== null) {
|
|
18080
|
-
hydrationInfo = retrieveHydrationInfo(hostRNode, rootView[INJECTOR]);
|
|
18081
|
-
}
|
|
18082
|
-
const viewRenderer = environment.rendererFactory.createRenderer(hostRNode, rootComponentDef);
|
|
18083
|
-
const componentView = createLView(rootView, getOrCreateComponentTView(rootComponentDef), null, getInitialLViewFlagsFromDef(rootComponentDef), rootView[tNode.index], tNode, environment, viewRenderer, null, null, hydrationInfo);
|
|
18084
|
-
if (tView.firstCreatePass) {
|
|
18085
|
-
markAsComponentHost(tView, tNode, rootDirectives.length - 1);
|
|
18086
|
-
}
|
|
18087
|
-
addToEndOfViewTree(rootView, componentView);
|
|
18088
|
-
// Store component view at node index, with node as the HOST
|
|
18089
|
-
return (rootView[tNode.index] = componentView);
|
|
18090
|
-
}
|
|
18091
|
-
/**
|
|
18092
|
-
* Creates a root component and sets it up with features and host bindings.Shared by
|
|
18093
|
-
* renderComponent() and ViewContainerRef.createComponent().
|
|
18094
|
-
*/
|
|
18095
|
-
function createRootComponent(componentView, rootComponentDef, rootDirectives, hostDirectiveDefs, rootLView, hostFeatures) {
|
|
18096
|
-
const rootTNode = getCurrentTNode();
|
|
18097
|
-
ngDevMode && assertDefined(rootTNode, 'tNode should have been already created');
|
|
18098
|
-
const tView = rootLView[TVIEW];
|
|
18099
|
-
const native = getNativeByTNode(rootTNode, rootLView);
|
|
18100
|
-
initializeDirectives(tView, rootLView, rootTNode, rootDirectives, null, hostDirectiveDefs);
|
|
18101
|
-
for (let i = 0; i < rootDirectives.length; i++) {
|
|
18102
|
-
const directiveIndex = rootTNode.directiveStart + i;
|
|
18103
|
-
const directiveInstance = getNodeInjectable(rootLView, tView, directiveIndex, rootTNode);
|
|
18104
|
-
attachPatchData(directiveInstance, rootLView);
|
|
18105
|
-
}
|
|
18106
|
-
invokeDirectivesHostBindings(tView, rootLView, rootTNode);
|
|
18107
|
-
if (native) {
|
|
18108
|
-
attachPatchData(native, rootLView);
|
|
18109
|
-
}
|
|
18110
|
-
// We're guaranteed for the `componentOffset` to be positive here
|
|
18111
|
-
// since a root component always matches a component def.
|
|
18112
|
-
ngDevMode &&
|
|
18113
|
-
assertGreaterThan(rootTNode.componentOffset, -1, 'componentOffset must be great than -1');
|
|
18114
|
-
const component = getNodeInjectable(rootLView, tView, rootTNode.directiveStart + rootTNode.componentOffset, rootTNode);
|
|
18115
|
-
componentView[CONTEXT] = rootLView[CONTEXT] = component;
|
|
18116
|
-
if (hostFeatures !== null) {
|
|
18117
|
-
for (const feature of hostFeatures) {
|
|
18118
|
-
feature(component, rootComponentDef);
|
|
18119
|
-
}
|
|
18120
|
-
}
|
|
18121
|
-
// We want to generate an empty QueryList for root content queries for backwards
|
|
18122
|
-
// compatibility with ViewEngine.
|
|
18123
|
-
executeContentQueries(tView, rootTNode, rootLView);
|
|
18124
|
-
return component;
|
|
18125
|
-
}
|
|
18126
18053
|
/** Projects the `projectableNodes` that were specified when creating a root component. */
|
|
18127
18054
|
function projectNodes(tNode, ngContentSelectors, projectableNodes) {
|
|
18128
18055
|
const projection = (tNode.projection = []);
|
|
@@ -18136,24 +18063,6 @@ function projectNodes(tNode, ngContentSelectors, projectableNodes) {
|
|
|
18136
18063
|
projection.push(nodesforSlot != null && nodesforSlot.length ? Array.from(nodesforSlot) : null);
|
|
18137
18064
|
}
|
|
18138
18065
|
}
|
|
18139
|
-
/**
|
|
18140
|
-
* Used to enable lifecycle hooks on the root component.
|
|
18141
|
-
*
|
|
18142
|
-
* Include this feature when calling `renderComponent` if the root component
|
|
18143
|
-
* you are rendering has lifecycle hooks defined. Otherwise, the hooks won't
|
|
18144
|
-
* be called properly.
|
|
18145
|
-
*
|
|
18146
|
-
* Example:
|
|
18147
|
-
*
|
|
18148
|
-
* ```ts
|
|
18149
|
-
* renderComponent(AppComponent, {hostFeatures: [LifecycleHooksFeature]});
|
|
18150
|
-
* ```
|
|
18151
|
-
*/
|
|
18152
|
-
function LifecycleHooksFeature() {
|
|
18153
|
-
const tNode = getCurrentTNode();
|
|
18154
|
-
ngDevMode && assertDefined(tNode, 'TNode is required');
|
|
18155
|
-
registerPostOrderHooks(getLView()[TVIEW], tNode);
|
|
18156
|
-
}
|
|
18157
18066
|
|
|
18158
18067
|
/**
|
|
18159
18068
|
* Represents a container where one or more views can be attached to a component.
|
|
@@ -20072,7 +19981,11 @@ function getComponentId(componentDef) {
|
|
|
20072
19981
|
// 2147483647 = equivalent of Integer.MAX_VALUE.
|
|
20073
19982
|
hash += 2147483647 + 1;
|
|
20074
19983
|
const compId = 'c' + hash;
|
|
20075
|
-
if (typeof ngDevMode === 'undefined' || ngDevMode)
|
|
19984
|
+
if ((typeof ngDevMode === 'undefined' || ngDevMode) &&
|
|
19985
|
+
// Skip the check on the server since we can't guarantee the same component instance between
|
|
19986
|
+
// requests. Note that we can't use DI to check if we're on the server, because the component
|
|
19987
|
+
// hasn't been instantiated yet.
|
|
19988
|
+
(typeof ngServerMode === 'undefined' || !ngServerMode)) {
|
|
20076
19989
|
if (GENERATED_COMP_IDS.has(compId)) {
|
|
20077
19990
|
const previousCompDefType = GENERATED_COMP_IDS.get(compId);
|
|
20078
19991
|
if (previousCompDefType !== componentDef.type) {
|
|
@@ -20659,15 +20572,6 @@ function bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {
|
|
|
20659
20572
|
return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;
|
|
20660
20573
|
}
|
|
20661
20574
|
|
|
20662
|
-
/**
|
|
20663
|
-
* Checks whether a TNode is considered detached, i.e. not present in the
|
|
20664
|
-
* translated i18n template. We should not attempt hydration for such nodes
|
|
20665
|
-
* and instead, use a regular "creation mode".
|
|
20666
|
-
*/
|
|
20667
|
-
function isDetachedByI18n(tNode) {
|
|
20668
|
-
return (tNode.flags & 32 /* TNodeFlags.isDetached */) === 32 /* TNodeFlags.isDetached */;
|
|
20669
|
-
}
|
|
20670
|
-
|
|
20671
20575
|
function templateFirstCreatePass(index, tView, lView, templateFn, decls, vars, tagName, attrs, localRefsIndex) {
|
|
20672
20576
|
ngDevMode && assertFirstCreatePass(tView);
|
|
20673
20577
|
ngDevMode && ngDevMode.firstCreatePass++;
|
|
@@ -20717,7 +20621,7 @@ function declareTemplate(declarationLView, declarationTView, index, templateFn,
|
|
|
20717
20621
|
// In client-only mode, this function is a noop.
|
|
20718
20622
|
populateDehydratedViewsInLContainer(lContainer, tNode, declarationLView);
|
|
20719
20623
|
if (isDirectiveHost(tNode)) {
|
|
20720
|
-
|
|
20624
|
+
createDirectivesInstancesInInstruction(declarationTView, declarationLView, tNode);
|
|
20721
20625
|
}
|
|
20722
20626
|
if (localRefsIndex != null) {
|
|
20723
20627
|
saveResolvedLocalsInData(declarationLView, tNode, localRefExtractor);
|
|
@@ -28115,7 +28019,7 @@ function ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {
|
|
|
28115
28019
|
}
|
|
28116
28020
|
increaseElementDepthCount();
|
|
28117
28021
|
if (hasDirectives) {
|
|
28118
|
-
|
|
28022
|
+
createDirectivesInstancesInInstruction(tView, lView, tNode);
|
|
28119
28023
|
executeContentQueries(tView, tNode, lView);
|
|
28120
28024
|
}
|
|
28121
28025
|
if (localRefsIndex !== null) {
|
|
@@ -28286,7 +28190,7 @@ function ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {
|
|
|
28286
28190
|
}
|
|
28287
28191
|
attachPatchData(comment, lView);
|
|
28288
28192
|
if (isDirectiveHost(tNode)) {
|
|
28289
|
-
|
|
28193
|
+
createDirectivesInstancesInInstruction(tView, lView, tNode);
|
|
28290
28194
|
executeContentQueries(tView, tNode, lView);
|
|
28291
28195
|
}
|
|
28292
28196
|
if (localRefsIndex != null) {
|
|
@@ -30466,7 +30370,7 @@ function wrapListener(tNode, lView, context, listenerFn) {
|
|
|
30466
30370
|
}
|
|
30467
30371
|
// In order to be backwards compatible with View Engine, events on component host nodes
|
|
30468
30372
|
// must also mark the component view itself dirty (i.e. the view that it owns).
|
|
30469
|
-
const startView = tNode
|
|
30373
|
+
const startView = isComponentHost(tNode) ? getComponentLViewByIndex(tNode.index, lView) : lView;
|
|
30470
30374
|
markViewDirty(startView, 5 /* NotificationSource.Listener */);
|
|
30471
30375
|
let result = executeListenerWithErrorHandling(lView, context, listenerFn, e);
|
|
30472
30376
|
// A just-invoked listener function might have coalesced listeners so we need to check for
|
|
@@ -30630,8 +30534,7 @@ function ɵɵprojection(nodeIndex, selectorIndex = 0, attrs, fallbackTemplateFn,
|
|
|
30630
30534
|
if (isEmpty && fallbackIndex !== null) {
|
|
30631
30535
|
insertFallbackContent(lView, tView, fallbackIndex);
|
|
30632
30536
|
}
|
|
30633
|
-
else if (isNodeCreationMode &&
|
|
30634
|
-
(tProjectionNode.flags & 32 /* TNodeFlags.isDetached */) !== 32 /* TNodeFlags.isDetached */) {
|
|
30537
|
+
else if (isNodeCreationMode && !isDetachedByI18n(tProjectionNode)) {
|
|
30635
30538
|
// re-distribution of projectable nodes is stored on a component's view level
|
|
30636
30539
|
applyProjection(tView, lView, tProjectionNode);
|
|
30637
30540
|
}
|
|
@@ -33413,13 +33316,18 @@ function ɵsetClassDebugInfo(type, debugInfo) {
|
|
|
33413
33316
|
*/
|
|
33414
33317
|
function ɵɵreplaceMetadata(type, applyMetadata, namespaces, locals) {
|
|
33415
33318
|
ngDevMode && assertComponentDef(type);
|
|
33416
|
-
const
|
|
33319
|
+
const currentDef = getComponentDef(type);
|
|
33417
33320
|
// The reason `applyMetadata` is a callback that is invoked (almost) immediately is because
|
|
33418
33321
|
// the compiler usually produces more code than just the component definition, e.g. there
|
|
33419
33322
|
// can be functions for embedded views, the variables for the constant pool and `setClassMetadata`
|
|
33420
33323
|
// calls. The callback allows us to keep them isolate from the rest of the app and to invoke
|
|
33421
33324
|
// them at the right time.
|
|
33422
33325
|
applyMetadata.apply(null, [type, namespaces, ...locals]);
|
|
33326
|
+
const { newDef, oldDef } = mergeWithExistingDefinition(currentDef, getComponentDef(type));
|
|
33327
|
+
// TODO(crisbeto): the `applyMetadata` call above will replace the definition on the type.
|
|
33328
|
+
// Ideally we should adjust the compiler output so the metadata is returned, however that'll
|
|
33329
|
+
// require some internal changes. We re-add the metadata here manually.
|
|
33330
|
+
type[NG_COMP_DEF] = newDef;
|
|
33423
33331
|
// If a `tView` hasn't been created yet, it means that this component hasn't been instantianted
|
|
33424
33332
|
// before. In this case there's nothing left for us to do aside from patching it in.
|
|
33425
33333
|
if (oldDef.tView) {
|
|
@@ -33427,18 +33335,47 @@ function ɵɵreplaceMetadata(type, applyMetadata, namespaces, locals) {
|
|
|
33427
33335
|
for (const root of trackedViews) {
|
|
33428
33336
|
// Note: we have the additional check, because `IsRoot` can also indicate
|
|
33429
33337
|
// a component created through something like `createComponent`.
|
|
33430
|
-
if (root
|
|
33431
|
-
recreateMatchingLViews(oldDef, root);
|
|
33432
|
-
}
|
|
33433
|
-
}
|
|
33434
|
-
}
|
|
33338
|
+
if (isRootView(root) && root[PARENT] === null) {
|
|
33339
|
+
recreateMatchingLViews(newDef, oldDef, root);
|
|
33340
|
+
}
|
|
33341
|
+
}
|
|
33342
|
+
}
|
|
33343
|
+
}
|
|
33344
|
+
/**
|
|
33345
|
+
* Merges two component definitions while preseving the original one in place.
|
|
33346
|
+
* @param currentDef Definition that should receive the new metadata.
|
|
33347
|
+
* @param newDef Source of the new metadata.
|
|
33348
|
+
*/
|
|
33349
|
+
function mergeWithExistingDefinition(currentDef, newDef) {
|
|
33350
|
+
// Clone the current definition since we reference its original data further
|
|
33351
|
+
// down in the replacement process (e.g. when destroying the renderer).
|
|
33352
|
+
const clone = { ...currentDef };
|
|
33353
|
+
// Assign the new metadata in place while preserving the object literal. It's important to
|
|
33354
|
+
// Keep the object in place, because there can be references to it, for example in the
|
|
33355
|
+
// `directiveDefs` of another definition.
|
|
33356
|
+
const replacement = Object.assign(currentDef, newDef, {
|
|
33357
|
+
// We need to keep the existing directive and pipe defs, because they can get patched on
|
|
33358
|
+
// by a call to `setComponentScope` from a module file. That call won't make it into the
|
|
33359
|
+
// HMR replacement function, because it lives in an entirely different file.
|
|
33360
|
+
directiveDefs: clone.directiveDefs,
|
|
33361
|
+
pipeDefs: clone.pipeDefs,
|
|
33362
|
+
// Preserve the old `setInput` function, because it has some state.
|
|
33363
|
+
// This is fine, because the component instance is preserved as well.
|
|
33364
|
+
setInput: clone.setInput,
|
|
33365
|
+
// Externally this is redundant since we redeclare the definition using the original type.
|
|
33366
|
+
// Internally we may receive a definition with an alternate, but identical, type so we have
|
|
33367
|
+
// to ensure that the original one is preserved.
|
|
33368
|
+
type: clone.type,
|
|
33369
|
+
});
|
|
33370
|
+
ngDevMode && assertEqual(replacement, currentDef, 'Expected definition to be merged in place');
|
|
33371
|
+
return { newDef: replacement, oldDef: clone };
|
|
33435
33372
|
}
|
|
33436
33373
|
/**
|
|
33437
33374
|
* Finds all LViews matching a specific component definition and recreates them.
|
|
33438
33375
|
* @param oldDef Component definition to search for.
|
|
33439
33376
|
* @param rootLView View from which to start the search.
|
|
33440
33377
|
*/
|
|
33441
|
-
function recreateMatchingLViews(oldDef, rootLView) {
|
|
33378
|
+
function recreateMatchingLViews(newDef, oldDef, rootLView) {
|
|
33442
33379
|
ngDevMode &&
|
|
33443
33380
|
assertDefined(oldDef.tView, 'Expected a component definition that has been instantiated at least once');
|
|
33444
33381
|
const tView = rootLView[TVIEW];
|
|
@@ -33446,7 +33383,7 @@ function recreateMatchingLViews(oldDef, rootLView) {
|
|
|
33446
33383
|
// produce false positives when using inheritance.
|
|
33447
33384
|
if (tView === oldDef.tView) {
|
|
33448
33385
|
ngDevMode && assertComponentDef(oldDef.type);
|
|
33449
|
-
recreateLView(
|
|
33386
|
+
recreateLView(newDef, oldDef, rootLView);
|
|
33450
33387
|
return;
|
|
33451
33388
|
}
|
|
33452
33389
|
for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
|
|
@@ -33454,14 +33391,14 @@ function recreateMatchingLViews(oldDef, rootLView) {
|
|
|
33454
33391
|
if (isLContainer(current)) {
|
|
33455
33392
|
// The host can be an LView if a component is injecting `ViewContainerRef`.
|
|
33456
33393
|
if (isLView(current[HOST])) {
|
|
33457
|
-
recreateMatchingLViews(oldDef, current[HOST]);
|
|
33394
|
+
recreateMatchingLViews(newDef, oldDef, current[HOST]);
|
|
33458
33395
|
}
|
|
33459
33396
|
for (let j = CONTAINER_HEADER_OFFSET; j < current.length; j++) {
|
|
33460
|
-
recreateMatchingLViews(oldDef, current[j]);
|
|
33397
|
+
recreateMatchingLViews(newDef, oldDef, current[j]);
|
|
33461
33398
|
}
|
|
33462
33399
|
}
|
|
33463
33400
|
else if (isLView(current)) {
|
|
33464
|
-
recreateMatchingLViews(oldDef, current);
|
|
33401
|
+
recreateMatchingLViews(newDef, oldDef, current);
|
|
33465
33402
|
}
|
|
33466
33403
|
}
|
|
33467
33404
|
}
|
|
@@ -34967,7 +34904,7 @@ class Version {
|
|
|
34967
34904
|
/**
|
|
34968
34905
|
* @publicApi
|
|
34969
34906
|
*/
|
|
34970
|
-
const VERSION = new Version('19.1.
|
|
34907
|
+
const VERSION = new Version('19.1.4');
|
|
34971
34908
|
|
|
34972
34909
|
/**
|
|
34973
34910
|
* Combination of NgModuleFactory and ComponentFactories.
|
|
@@ -38718,7 +38655,7 @@ function createComputed(computation) {
|
|
|
38718
38655
|
producerUpdateValueVersion(node);
|
|
38719
38656
|
// Record that someone looked at this signal.
|
|
38720
38657
|
producerAccessed(node);
|
|
38721
|
-
if (node.value === ERRORED
|
|
38658
|
+
if (node.value === ERRORED) {
|
|
38722
38659
|
throw node.error;
|
|
38723
38660
|
}
|
|
38724
38661
|
return node.value;
|
|
@@ -38730,26 +38667,26 @@ function createComputed(computation) {
|
|
|
38730
38667
|
* A dedicated symbol used before a computed value has been calculated for the first time.
|
|
38731
38668
|
* Explicitly typed as `any` so we can use it as signal's value.
|
|
38732
38669
|
*/
|
|
38733
|
-
const UNSET
|
|
38670
|
+
const UNSET = /* @__PURE__ */ Symbol('UNSET');
|
|
38734
38671
|
/**
|
|
38735
38672
|
* A dedicated symbol used in place of a computed signal value to indicate that a given computation
|
|
38736
38673
|
* is in progress. Used to detect cycles in computation chains.
|
|
38737
38674
|
* Explicitly typed as `any` so we can use it as signal's value.
|
|
38738
38675
|
*/
|
|
38739
|
-
const COMPUTING
|
|
38676
|
+
const COMPUTING = /* @__PURE__ */ Symbol('COMPUTING');
|
|
38740
38677
|
/**
|
|
38741
38678
|
* A dedicated symbol used in place of a computed signal value to indicate that a given computation
|
|
38742
38679
|
* failed. The thrown error is cached until the computation gets dirty again.
|
|
38743
38680
|
* Explicitly typed as `any` so we can use it as signal's value.
|
|
38744
38681
|
*/
|
|
38745
|
-
const ERRORED
|
|
38682
|
+
const ERRORED = /* @__PURE__ */ Symbol('ERRORED');
|
|
38746
38683
|
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
38747
38684
|
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
38748
38685
|
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
38749
38686
|
const COMPUTED_NODE = /* @__PURE__ */ (() => {
|
|
38750
38687
|
return {
|
|
38751
38688
|
...REACTIVE_NODE,
|
|
38752
|
-
value: UNSET
|
|
38689
|
+
value: UNSET,
|
|
38753
38690
|
dirty: true,
|
|
38754
38691
|
error: null,
|
|
38755
38692
|
equal: defaultEquals,
|
|
@@ -38757,15 +38694,15 @@ const COMPUTED_NODE = /* @__PURE__ */ (() => {
|
|
|
38757
38694
|
producerMustRecompute(node) {
|
|
38758
38695
|
// Force a recomputation if there's no current value, or if the current value is in the
|
|
38759
38696
|
// process of being calculated (which should throw an error).
|
|
38760
|
-
return node.value === UNSET
|
|
38697
|
+
return node.value === UNSET || node.value === COMPUTING;
|
|
38761
38698
|
},
|
|
38762
38699
|
producerRecomputeValue(node) {
|
|
38763
|
-
if (node.value === COMPUTING
|
|
38700
|
+
if (node.value === COMPUTING) {
|
|
38764
38701
|
// Our computation somehow led to a cyclic read of itself.
|
|
38765
38702
|
throw new Error('Detected cycle in computations.');
|
|
38766
38703
|
}
|
|
38767
38704
|
const oldValue = node.value;
|
|
38768
|
-
node.value = COMPUTING
|
|
38705
|
+
node.value = COMPUTING;
|
|
38769
38706
|
const prevConsumer = consumerBeforeComputation(node);
|
|
38770
38707
|
let newValue;
|
|
38771
38708
|
let wasEqual = false;
|
|
@@ -38775,13 +38712,13 @@ const COMPUTED_NODE = /* @__PURE__ */ (() => {
|
|
|
38775
38712
|
// to track any reactive reads inside `equal`.
|
|
38776
38713
|
setActiveConsumer(null);
|
|
38777
38714
|
wasEqual =
|
|
38778
|
-
oldValue !== UNSET
|
|
38779
|
-
oldValue !== ERRORED
|
|
38780
|
-
newValue !== ERRORED
|
|
38715
|
+
oldValue !== UNSET &&
|
|
38716
|
+
oldValue !== ERRORED &&
|
|
38717
|
+
newValue !== ERRORED &&
|
|
38781
38718
|
node.equal(oldValue, newValue);
|
|
38782
38719
|
}
|
|
38783
38720
|
catch (err) {
|
|
38784
|
-
newValue = ERRORED
|
|
38721
|
+
newValue = ERRORED;
|
|
38785
38722
|
node.error = err;
|
|
38786
38723
|
}
|
|
38787
38724
|
finally {
|
|
@@ -38875,6 +38812,91 @@ function signalValueChanged(node) {
|
|
|
38875
38812
|
postSignalSetFn?.();
|
|
38876
38813
|
}
|
|
38877
38814
|
|
|
38815
|
+
function createLinkedSignal(sourceFn, computationFn, equalityFn) {
|
|
38816
|
+
const node = Object.create(LINKED_SIGNAL_NODE);
|
|
38817
|
+
node.source = sourceFn;
|
|
38818
|
+
node.computation = computationFn;
|
|
38819
|
+
if (equalityFn != undefined) {
|
|
38820
|
+
node.equal = equalityFn;
|
|
38821
|
+
}
|
|
38822
|
+
const linkedSignalGetter = () => {
|
|
38823
|
+
// Check if the value needs updating before returning it.
|
|
38824
|
+
producerUpdateValueVersion(node);
|
|
38825
|
+
// Record that someone looked at this signal.
|
|
38826
|
+
producerAccessed(node);
|
|
38827
|
+
if (node.value === ERRORED) {
|
|
38828
|
+
throw node.error;
|
|
38829
|
+
}
|
|
38830
|
+
return node.value;
|
|
38831
|
+
};
|
|
38832
|
+
const getter = linkedSignalGetter;
|
|
38833
|
+
getter[SIGNAL] = node;
|
|
38834
|
+
return getter;
|
|
38835
|
+
}
|
|
38836
|
+
function linkedSignalSetFn(node, newValue) {
|
|
38837
|
+
producerUpdateValueVersion(node);
|
|
38838
|
+
signalSetFn(node, newValue);
|
|
38839
|
+
producerMarkClean(node);
|
|
38840
|
+
}
|
|
38841
|
+
function linkedSignalUpdateFn(node, updater) {
|
|
38842
|
+
producerUpdateValueVersion(node);
|
|
38843
|
+
signalUpdateFn(node, updater);
|
|
38844
|
+
producerMarkClean(node);
|
|
38845
|
+
}
|
|
38846
|
+
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
38847
|
+
// a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`.
|
|
38848
|
+
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
38849
|
+
const LINKED_SIGNAL_NODE = /* @__PURE__ */ (() => {
|
|
38850
|
+
return {
|
|
38851
|
+
...REACTIVE_NODE,
|
|
38852
|
+
value: UNSET,
|
|
38853
|
+
dirty: true,
|
|
38854
|
+
error: null,
|
|
38855
|
+
equal: defaultEquals,
|
|
38856
|
+
producerMustRecompute(node) {
|
|
38857
|
+
// Force a recomputation if there's no current value, or if the current value is in the
|
|
38858
|
+
// process of being calculated (which should throw an error).
|
|
38859
|
+
return node.value === UNSET || node.value === COMPUTING;
|
|
38860
|
+
},
|
|
38861
|
+
producerRecomputeValue(node) {
|
|
38862
|
+
if (node.value === COMPUTING) {
|
|
38863
|
+
// Our computation somehow led to a cyclic read of itself.
|
|
38864
|
+
throw new Error('Detected cycle in computations.');
|
|
38865
|
+
}
|
|
38866
|
+
const oldValue = node.value;
|
|
38867
|
+
node.value = COMPUTING;
|
|
38868
|
+
const prevConsumer = consumerBeforeComputation(node);
|
|
38869
|
+
let newValue;
|
|
38870
|
+
try {
|
|
38871
|
+
const newSourceValue = node.source();
|
|
38872
|
+
const prev = oldValue === UNSET || oldValue === ERRORED
|
|
38873
|
+
? undefined
|
|
38874
|
+
: {
|
|
38875
|
+
source: node.sourceValue,
|
|
38876
|
+
value: oldValue,
|
|
38877
|
+
};
|
|
38878
|
+
newValue = node.computation(newSourceValue, prev);
|
|
38879
|
+
node.sourceValue = newSourceValue;
|
|
38880
|
+
}
|
|
38881
|
+
catch (err) {
|
|
38882
|
+
newValue = ERRORED;
|
|
38883
|
+
node.error = err;
|
|
38884
|
+
}
|
|
38885
|
+
finally {
|
|
38886
|
+
consumerAfterComputation(node, prevConsumer);
|
|
38887
|
+
}
|
|
38888
|
+
if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {
|
|
38889
|
+
// No change to `valueVersion` - old and new values are
|
|
38890
|
+
// semantically equivalent.
|
|
38891
|
+
node.value = oldValue;
|
|
38892
|
+
return;
|
|
38893
|
+
}
|
|
38894
|
+
node.value = newValue;
|
|
38895
|
+
node.version++;
|
|
38896
|
+
},
|
|
38897
|
+
};
|
|
38898
|
+
})();
|
|
38899
|
+
|
|
38878
38900
|
function createWatch(fn, schedule, allowSignalWrites) {
|
|
38879
38901
|
const node = Object.create(WATCH_NODE);
|
|
38880
38902
|
if (allowSignalWrites) {
|
|
@@ -39959,12 +39981,12 @@ function printHydrationStats(injector) {
|
|
|
39959
39981
|
/**
|
|
39960
39982
|
* Returns a Promise that is resolved when an application becomes stable.
|
|
39961
39983
|
*/
|
|
39962
|
-
function whenStableWithTimeout(appRef
|
|
39984
|
+
function whenStableWithTimeout(appRef) {
|
|
39963
39985
|
const whenStablePromise = appRef.whenStable();
|
|
39964
39986
|
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
39965
39987
|
const timeoutTime = APPLICATION_IS_STABLE_TIMEOUT;
|
|
39966
|
-
const console = injector.get(Console);
|
|
39967
|
-
const ngZone = injector.get(NgZone);
|
|
39988
|
+
const console = appRef.injector.get(Console);
|
|
39989
|
+
const ngZone = appRef.injector.get(NgZone);
|
|
39968
39990
|
// The following call should not and does not prevent the app to become stable
|
|
39969
39991
|
// We cannot use RxJS timer here because the app would remain unstable.
|
|
39970
39992
|
// This also avoids an extra change detection cycle.
|
|
@@ -40062,7 +40084,6 @@ function withDomHydration() {
|
|
|
40062
40084
|
useFactory: () => {
|
|
40063
40085
|
if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
|
|
40064
40086
|
const appRef = inject(ApplicationRef);
|
|
40065
|
-
const injector = inject(Injector);
|
|
40066
40087
|
return () => {
|
|
40067
40088
|
// Wait until an app becomes stable and cleanup all views that
|
|
40068
40089
|
// were not claimed during the application bootstrap process.
|
|
@@ -40071,11 +40092,20 @@ function withDomHydration() {
|
|
|
40071
40092
|
//
|
|
40072
40093
|
// Note: the cleanup task *MUST* be scheduled within the Angular zone in Zone apps
|
|
40073
40094
|
// to ensure that change detection is properly run afterward.
|
|
40074
|
-
whenStableWithTimeout(appRef
|
|
40095
|
+
whenStableWithTimeout(appRef).then(() => {
|
|
40096
|
+
// Note: we have to check whether the application is destroyed before
|
|
40097
|
+
// performing other operations with the `injector`.
|
|
40098
|
+
// The application may be destroyed **before** it becomes stable, so when
|
|
40099
|
+
// the `whenStableWithTimeout` resolves, the injector might already be in
|
|
40100
|
+
// a destroyed state. Thus, calling `injector.get` would throw an error
|
|
40101
|
+
// indicating that the injector has already been destroyed.
|
|
40102
|
+
if (appRef.destroyed) {
|
|
40103
|
+
return;
|
|
40104
|
+
}
|
|
40075
40105
|
cleanupDehydratedViews(appRef);
|
|
40076
40106
|
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
40077
|
-
countBlocksSkippedByHydration(injector);
|
|
40078
|
-
printHydrationStats(injector);
|
|
40107
|
+
countBlocksSkippedByHydration(appRef.injector);
|
|
40108
|
+
printHydrationStats(appRef.injector);
|
|
40079
40109
|
}
|
|
40080
40110
|
});
|
|
40081
40111
|
};
|
|
@@ -40477,123 +40507,28 @@ function computed(computation, options) {
|
|
|
40477
40507
|
}
|
|
40478
40508
|
|
|
40479
40509
|
const identityFn = (v) => v;
|
|
40480
|
-
/**
|
|
40481
|
-
* Create a linked signal which represents state that is (re)set from a linked reactive expression.
|
|
40482
|
-
*/
|
|
40483
|
-
function createLinkedSignal(node) {
|
|
40484
|
-
const linkedSignalGetter = () => {
|
|
40485
|
-
// Check if the value needs updating before returning it.
|
|
40486
|
-
producerUpdateValueVersion$1(node);
|
|
40487
|
-
// Record that someone looked at this signal.
|
|
40488
|
-
producerAccessed$1(node);
|
|
40489
|
-
if (node.value === ERRORED) {
|
|
40490
|
-
throw node.error;
|
|
40491
|
-
}
|
|
40492
|
-
return node.value;
|
|
40493
|
-
};
|
|
40494
|
-
const getter = linkedSignalGetter;
|
|
40495
|
-
getter[SIGNAL$1] = node;
|
|
40496
|
-
if (ngDevMode) {
|
|
40497
|
-
getter.toString = () => `[LinkedSignal: ${getter()}]`;
|
|
40498
|
-
}
|
|
40499
|
-
getter.set = (newValue) => {
|
|
40500
|
-
producerUpdateValueVersion$1(node);
|
|
40501
|
-
signalSetFn$1(node, newValue);
|
|
40502
|
-
producerMarkClean$1(node);
|
|
40503
|
-
};
|
|
40504
|
-
getter.update = (updateFn) => {
|
|
40505
|
-
producerUpdateValueVersion$1(node);
|
|
40506
|
-
signalUpdateFn$1(node, updateFn);
|
|
40507
|
-
producerMarkClean$1(node);
|
|
40508
|
-
};
|
|
40509
|
-
getter.asReadonly = signalAsReadonlyFn.bind(getter);
|
|
40510
|
-
return getter;
|
|
40511
|
-
}
|
|
40512
40510
|
function linkedSignal(optionsOrComputation, options) {
|
|
40513
40511
|
performanceMarkFeature('NgSignals');
|
|
40514
|
-
|
|
40515
|
-
|
|
40516
|
-
|
|
40517
|
-
if (!isShorthand) {
|
|
40518
|
-
node.computation = optionsOrComputation.computation;
|
|
40512
|
+
if (typeof optionsOrComputation === 'function') {
|
|
40513
|
+
const getter = createLinkedSignal$1(optionsOrComputation, (identityFn), options?.equal);
|
|
40514
|
+
return upgradeLinkedSignalGetter(getter);
|
|
40519
40515
|
}
|
|
40520
|
-
|
|
40521
|
-
|
|
40522
|
-
|
|
40516
|
+
else {
|
|
40517
|
+
const getter = createLinkedSignal$1(optionsOrComputation.source, optionsOrComputation.computation, optionsOrComputation.equal);
|
|
40518
|
+
return upgradeLinkedSignalGetter(getter);
|
|
40523
40519
|
}
|
|
40524
|
-
return createLinkedSignal(node);
|
|
40525
40520
|
}
|
|
40526
|
-
|
|
40527
|
-
|
|
40528
|
-
|
|
40529
|
-
|
|
40530
|
-
const
|
|
40531
|
-
|
|
40532
|
-
|
|
40533
|
-
|
|
40534
|
-
|
|
40535
|
-
|
|
40536
|
-
|
|
40537
|
-
/**
|
|
40538
|
-
* A dedicated symbol used in place of a linked signal value to indicate that a given computation
|
|
40539
|
-
* failed. The thrown error is cached until the computation gets dirty again or the state is set.
|
|
40540
|
-
* Explicitly typed as `any` so we can use it as signal's value.
|
|
40541
|
-
*/
|
|
40542
|
-
const ERRORED = /* @__PURE__ */ Symbol('ERRORED');
|
|
40543
|
-
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
40544
|
-
// a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`.
|
|
40545
|
-
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
40546
|
-
const LINKED_SIGNAL_NODE = /* @__PURE__ */ (() => {
|
|
40547
|
-
return {
|
|
40548
|
-
...REACTIVE_NODE$1,
|
|
40549
|
-
value: UNSET,
|
|
40550
|
-
dirty: true,
|
|
40551
|
-
error: null,
|
|
40552
|
-
equal: defaultEquals$1,
|
|
40553
|
-
computation: identityFn,
|
|
40554
|
-
producerMustRecompute(node) {
|
|
40555
|
-
// Force a recomputation if there's no current value, or if the current value is in the
|
|
40556
|
-
// process of being calculated (which should throw an error).
|
|
40557
|
-
return node.value === UNSET || node.value === COMPUTING;
|
|
40558
|
-
},
|
|
40559
|
-
producerRecomputeValue(node) {
|
|
40560
|
-
if (node.value === COMPUTING) {
|
|
40561
|
-
// Our computation somehow led to a cyclic read of itself.
|
|
40562
|
-
throw new Error('Detected cycle in computations.');
|
|
40563
|
-
}
|
|
40564
|
-
const oldValue = node.value;
|
|
40565
|
-
node.value = COMPUTING;
|
|
40566
|
-
const prevConsumer = consumerBeforeComputation$1(node);
|
|
40567
|
-
let newValue;
|
|
40568
|
-
try {
|
|
40569
|
-
const newSourceValue = node.source();
|
|
40570
|
-
const prev = oldValue === UNSET || oldValue === ERRORED
|
|
40571
|
-
? undefined
|
|
40572
|
-
: {
|
|
40573
|
-
source: node.sourceValue,
|
|
40574
|
-
value: oldValue,
|
|
40575
|
-
};
|
|
40576
|
-
newValue = node.computation(newSourceValue, prev);
|
|
40577
|
-
node.sourceValue = newSourceValue;
|
|
40578
|
-
}
|
|
40579
|
-
catch (err) {
|
|
40580
|
-
newValue = ERRORED;
|
|
40581
|
-
node.error = err;
|
|
40582
|
-
}
|
|
40583
|
-
finally {
|
|
40584
|
-
consumerAfterComputation$1(node, prevConsumer);
|
|
40585
|
-
}
|
|
40586
|
-
if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {
|
|
40587
|
-
// No change to `valueVersion` - old and new values are
|
|
40588
|
-
// semantically equivalent.
|
|
40589
|
-
node.value = oldValue;
|
|
40590
|
-
return;
|
|
40591
|
-
}
|
|
40592
|
-
node.value = newValue;
|
|
40593
|
-
node.version++;
|
|
40594
|
-
},
|
|
40595
|
-
};
|
|
40596
|
-
})();
|
|
40521
|
+
function upgradeLinkedSignalGetter(getter) {
|
|
40522
|
+
if (ngDevMode) {
|
|
40523
|
+
getter.toString = () => `[LinkedSignal: ${getter()}]`;
|
|
40524
|
+
}
|
|
40525
|
+
const node = getter[SIGNAL$1];
|
|
40526
|
+
const upgradedGetter = getter;
|
|
40527
|
+
upgradedGetter.set = (newValue) => linkedSignalSetFn$1(node, newValue);
|
|
40528
|
+
upgradedGetter.update = (updateFn) => linkedSignalUpdateFn$1(node, updateFn);
|
|
40529
|
+
upgradedGetter.asReadonly = signalAsReadonlyFn.bind(getter);
|
|
40530
|
+
return upgradedGetter;
|
|
40531
|
+
}
|
|
40597
40532
|
|
|
40598
40533
|
/**
|
|
40599
40534
|
* Execute an arbitrary function in a non-reactive (non-tracking) context. The executed function
|
|
@@ -41628,5 +41563,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
|
41628
41563
|
* Generated bundle index. Do not edit.
|
|
41629
41564
|
*/
|
|
41630
41565
|
|
|
41631
|
-
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 };
|
|
41566
|
+
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 };
|
|
41632
41567
|
//# sourceMappingURL=core.mjs.map
|