@angular/core 22.0.0-next.7 → 22.0.0-next.9
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/_attribute-chunk.mjs +1 -1
- package/fesm2022/_debug_node-chunk.mjs +967 -872
- package/fesm2022/_debug_node-chunk.mjs.map +1 -1
- package/fesm2022/_effect-chunk.mjs +1 -1
- package/fesm2022/_not_found-chunk.mjs +1 -1
- package/fesm2022/_pending_tasks-chunk.mjs +10 -8
- package/fesm2022/_pending_tasks-chunk.mjs.map +1 -1
- package/fesm2022/_resource-chunk.mjs +25 -11
- package/fesm2022/_resource-chunk.mjs.map +1 -1
- package/fesm2022/_untracked-chunk.mjs +1 -1
- package/fesm2022/_weak_ref-chunk.mjs +1 -1
- package/fesm2022/core.mjs +350 -6
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives-di.mjs +1 -1
- package/fesm2022/primitives-event-dispatch.mjs +1 -1
- package/fesm2022/primitives-signals.mjs +1 -1
- package/fesm2022/rxjs-interop.mjs +4 -1
- package/fesm2022/rxjs-interop.mjs.map +1 -1
- package/fesm2022/testing.mjs +2 -12
- package/fesm2022/testing.mjs.map +1 -1
- package/package.json +2 -2
- package/schematics/bundles/apply_import_manager-CxA_YYgB.cjs +1 -1
- package/schematics/bundles/can-match-snapshot-required.cjs +1 -1
- package/schematics/bundles/change-detection-eager.cjs +1 -1
- package/schematics/bundles/cleanup-unused-imports.cjs +1 -1
- package/schematics/bundles/common-to-standalone-migration.cjs +1 -1
- package/schematics/bundles/compiler_host-CY14HvaP.cjs +1 -1
- package/schematics/bundles/control-flow-migration.cjs +1 -1
- package/schematics/bundles/http-xhr-backend.cjs +1 -1
- package/schematics/bundles/imports-CKV-ITqD.cjs +1 -1
- package/schematics/bundles/incremental-hydration.cjs +91 -0
- package/schematics/bundles/index-DADA7AvC.cjs +1 -1
- package/schematics/bundles/inject-migration.cjs +1 -1
- package/schematics/bundles/json-file-Drblb4E1.cjs +1916 -0
- package/schematics/bundles/leading_space-BTPRV0wu.cjs +1 -1
- package/schematics/bundles/migrate_ts_type_references-B9LlDDUg.cjs +1 -1
- package/schematics/bundles/ng_component_template-DPAF1aEA.cjs +1 -1
- package/schematics/bundles/ng_decorators-IVztR9rk.cjs +1 -1
- package/schematics/bundles/ngclass-to-class-migration.cjs +14 -6
- package/schematics/bundles/ngstyle-to-style-migration.cjs +1 -1
- package/schematics/bundles/nodes-ZSQ7WZRB.cjs +1 -1
- package/schematics/bundles/output-migration.cjs +1 -1
- package/schematics/bundles/parse_html-C8eKA9px.cjs +1 -1
- package/schematics/bundles/project_paths-D2V-Uh2L.cjs +1 -1
- package/schematics/bundles/project_tsconfig_paths-DkkMibv-.cjs +1 -1
- package/schematics/bundles/property_name-BCpALNpZ.cjs +1 -1
- package/schematics/bundles/route-lazy-loading.cjs +1 -1
- package/schematics/bundles/router-testing-module-migration.cjs +1 -1
- package/schematics/bundles/self-closing-tags-migration.cjs +1 -1
- package/schematics/bundles/signal-input-migration.cjs +1 -1
- package/schematics/bundles/signal-queries-migration.cjs +1 -1
- package/schematics/bundles/signals.cjs +1 -1
- package/schematics/bundles/standalone-migration.cjs +1 -1
- package/schematics/bundles/strict-safe-navigation-narrow.cjs +32 -0
- package/schematics/bundles/strict-templates-default.cjs +63 -0
- package/schematics/migrations.json +13 -3
- package/types/_api-chunk.d.ts +9 -3
- package/types/_chrome_dev_tools_performance-chunk.d.ts +2 -2
- package/types/_debug_node-chunk.d.ts +132 -212
- package/types/_effect-chunk.d.ts +1 -1
- package/types/_event_dispatcher-chunk.d.ts +1 -1
- package/types/_formatter-chunk.d.ts +1 -1
- package/types/_weak_ref-chunk.d.ts +1 -1
- package/types/core.d.ts +876 -749
- package/types/primitives-di.d.ts +1 -1
- package/types/primitives-event-dispatch.d.ts +1 -1
- package/types/primitives-signals.d.ts +1 -1
- package/types/rxjs-interop.d.ts +1 -1
- package/types/testing.d.ts +2 -2
- package/schematics/bundles/strict-templates.cjs +0 -55
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v22.0.0-next.
|
|
2
|
+
* @license Angular v22.0.0-next.9
|
|
3
3
|
* (c) 2010-2026 Google LLC. https://angular.dev/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { attachInjectFlag, _global, resolveForwardRef, ɵɵinvalidFactoryDep as __invalidFactoryDep, ɵɵinject as __inject, ɵɵdefineInjector as __defineInjector, ɵɵdefineInjectable as __defineInjectable, newArray, assertString, EMPTY_OBJ, assertFirstCreatePass, assertDefined, assertNotEqual, FLAGS, assertEqual, isInCheckNoChangesMode, PREORDER_HOOK_FLAGS, throwError, assertNumber, assertGreaterThan, HEADER_OFFSET, DECLARATION_VIEW, NG_FACTORY_DEF, isForwardRef, getFactoryDef, convertToBitFlags, isRootView, assertTNodeForLView, enterDI, runInInjectorProfilerContext, getCurrentTNode, getLView, emitInjectorToCreateInstanceEvent, emitInstanceCreatedByInjectorEvent, throwProviderNotFoundError, leaveDI, assertNodeInjector, setInjectImplementation, injectRootLimpMode, stringifyForError, cyclicDependencyErrorWithDetails, cyclicDependencyError, setInjectorProfilerContext, assertDirectiveDef, EMBEDDED_VIEW_INJECTOR, T_HOST, NG_ELEMENT_ID, assertIndexInRange, INJECTOR
|
|
7
|
+
import { attachInjectFlag, _global, resolveForwardRef, ɵɵinvalidFactoryDep as __invalidFactoryDep, ɵɵinject as __inject, ɵɵdefineInjector as __defineInjector, ɵɵdefineInjectable as __defineInjectable, newArray, assertString, EMPTY_OBJ, assertFirstCreatePass, assertDefined, assertNotEqual, FLAGS, assertEqual, isInCheckNoChangesMode, PREORDER_HOOK_FLAGS, throwError, assertNumber, assertGreaterThan, HEADER_OFFSET, DECLARATION_VIEW, NG_FACTORY_DEF, isForwardRef, getFactoryDef, convertToBitFlags, isRootView, assertTNodeForLView, enterDI, runInInjectorProfilerContext, getCurrentTNode, getLView, emitInjectorToCreateInstanceEvent, emitInstanceCreatedByInjectorEvent, throwProviderNotFoundError, leaveDI, assertNodeInjector, setInjectImplementation, injectRootLimpMode, stringifyForError, cyclicDependencyErrorWithDetails, cyclicDependencyError, setInjectorProfilerContext, assertDirectiveDef, EMBEDDED_VIEW_INJECTOR, T_HOST, NG_ELEMENT_ID, assertIndexInRange, INJECTOR, TVIEW, isComponentDef, isComponentHost, DECLARATION_COMPONENT_VIEW, RuntimeError, NG_PROV_DEF, getClosureSafeProperty, getNativeByTNode, flatten, arrayEquals, ID, isLView, assertDomNode, EMPTY_ARRAY, getComponentLViewByIndex, CONTEXT, unwrapRNode, assertLView, HOST, getLViewParent, isLContainer, CONTAINER_HEADER_OFFSET, CHILD_HEAD, NEXT, Injector, CLEANUP, getComponentDef, getDirectiveDef, InjectionToken, inject, ENVIRONMENT_INITIALIZER, DOCUMENT as DOCUMENT$1, formatRuntimeError, isInSkipHydrationBlock as isInSkipHydrationBlock$1, HYDRATION, isContentQueryHost, setCurrentQueryIndex, isDirectiveHost, XSS_SECURITY_URL, RENDERER, renderStringify, getSelectedTNode, ENVIRONMENT, makeEnvironmentProviders, resetPreOrderHookFlags, PARENT, CHILD_TAIL, assertSame, assertFirstUpdatePass, getSelectedIndex, getTView, assertIndexInDeclRange, setSelectedIndex, stringify, ANIMATIONS, AFTER_RENDER_SEQUENCES_TO_ADD, markAncestorsForTraversal, NgZone, ChangeDetectionScheduler, ErrorHandler, assertNotInReactiveContext, assertInInjectionContext, DestroyRef, ViewContext, EnvironmentInjector, INJECTOR$1, isDestroyed, assertLContainer, MOVED_VIEWS, assertProjectionSlots, NATIVE, REACTIVE_TEMPLATE_CONSUMER, DECLARATION_LCONTAINER, QUERIES, assertParentView, assertNotReactive, ON_DESTROY_HOOKS, assertFunction, EFFECTS, INTERNAL_APPLICATION_ERROR_HANDLER, assertNotSame, isCurrentTNodeParent, setCurrentTNodeAsNotParent, assertHasParent, setCurrentTNode, getElementDepthCount, increaseElementDepthCount, wasLastNodeCreated, setCurrentDirectiveIndex, getCurrentDirectiveIndex, unwrapLView, enterView, leaveView, isCreationMode, markViewForRefresh, setIsInCheckNoChangesMode, setIsRefreshingViews, isExhaustiveCheckNoChanges, requiresRefreshOrTraversal, setBindingIndex, EFFECTS_TO_SCHEDULE, setBindingRootForHostBindings, viewAttachedToChangeDetector, CheckNoChangesMode, isRefreshingViews, removeFromArray, addToArray, updateAncestorTraversalFlagsOnAttach, storeLViewOnDestroy, VIEW_REFS, DOC_PAGE_BASE_URL, assertGreaterThanOrEqual, isInI18nBlock, assertTNodeForTView, getCurrentParentTNode, getCurrentTNodePlaceholderOk, assertTNode, assertTIcu, assertNumberInRange, DEHYDRATED_VIEWS, getNgModuleDef, getPipeDef as getPipeDef$1, getNgModuleDefOrThrow, isStandalone, getTNode, assertLessThan, getOrCreateTViewCleanup, getOrCreateLViewCleanup, debugStringifyTypeForError, assertNotDefined, nextBindingIndex, concatStringsWithSpace, assertInjectImplementationNotEqual, emitInjectEvent, getConstant, getDirectiveDefOrThrow, SVG_NAMESPACE, MATH_ML_NAMESPACE, viewAttachedToContainer, storeCleanupWithContext, signal, createInjectorWithoutInjectorInstances, R3Injector, getNullInjector, internalImportProvidersFrom, initNgDevMode, runInInjectionContext, fillProperties, getBindingsEnabled, lastNodeWasCreated, removeLViewOnDestroy, walkUpViews, getNativeByIndex, assertElement, setInjectorProfiler, EffectRefImpl, NullInjector, INJECTOR_DEF_TYPES, walkProviderTree, getInjectorDef, deepForEach, isTypeProvider, VERSION, isSignal, isInInjectionContext, PendingTasksInternal, ZONELESS_ENABLED, EffectScheduler, arrayInsert2, arraySplice, PendingTasks, decreaseElementDepthCount, assertTNodeCreationIndex, getNamespace, enterSkipHydrationBlock, isSkipHydrationRootTNode, leaveSkipHydrationBlock, getCurrentDirectiveDef, assertIndexInExpandoRange, getBindingIndex, assertOneOf, setInI18nBlock, nextContextImpl, getCurrentQueryIndex, getContextLView, load, keyValueArrayIndexOf, incrementBindingIndex, keyValueArrayGet, keyValueArraySet, isWritableSignal, store, getBindingRoot, providerToFactory, emitProviderConfiguredEvent, isClassProvider, NG_COMP_DEF, forwardRef, ɵɵrestoreView as __restoreView, ɵɵdisableBindings as __disableBindings, ɵɵenableBindings as __enableBindings, ɵɵnamespaceSVG as __namespaceSVG, ɵɵnamespaceMathML as __namespaceMathML, ɵɵnamespaceHTML as __namespaceHTML, ɵɵresetView as __resetView, NG_MOD_DEF, NG_INJ_DEF, NG_DIR_DEF, NG_PIPE_DEF, PROVIDED_ZONELESS, NoopNgZone, angularZoneInstanceIdProperty, scheduleCallbackWithMicrotask, scheduleCallbackWithRafRace, SCHEDULE_IN_ROOT_ZONE, getNativeByTNodeOrNull } from './_pending_tasks-chunk.mjs';
|
|
8
8
|
import { setActiveConsumer as setActiveConsumer$1 } from '@angular/core/primitives/signals';
|
|
9
9
|
import { setActiveConsumer, SIGNAL, consumerDestroy, REACTIVE_NODE, consumerPollProducersForChange, consumerBeforeComputation, getActiveConsumer, consumerAfterComputation, createComputed, setThrowInvalidWriteToSignalError } from './_effect-chunk.mjs';
|
|
10
10
|
import { Subject, Subscription } from 'rxjs';
|
|
@@ -146,9 +146,19 @@ function getCompilerFacade(request) {
|
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
+
function ɵɵdefineService(opts) {
|
|
150
|
+
return {
|
|
151
|
+
token: opts.token,
|
|
152
|
+
providedIn: opts.autoProvided === false ? null : 'root',
|
|
153
|
+
factory: opts.factory,
|
|
154
|
+
value: undefined
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
|
|
149
158
|
const angularCoreDiEnv = {
|
|
150
159
|
'ɵɵdefineInjectable': __defineInjectable,
|
|
151
160
|
'ɵɵdefineInjector': __defineInjector,
|
|
161
|
+
'ɵɵdefineService': ɵɵdefineService,
|
|
152
162
|
'ɵɵinject': __inject,
|
|
153
163
|
'ɵɵinvalidFactoryDep': __invalidFactoryDep,
|
|
154
164
|
'resolveForwardRef': resolveForwardRef
|
|
@@ -1711,6 +1721,57 @@ function getNearestLContainer(viewOrContainer) {
|
|
|
1711
1721
|
}
|
|
1712
1722
|
return viewOrContainer;
|
|
1713
1723
|
}
|
|
1724
|
+
function* walkLViewChildren(tNode, lView) {
|
|
1725
|
+
let child = tNode.child;
|
|
1726
|
+
while (child) {
|
|
1727
|
+
yield [child, lView];
|
|
1728
|
+
child = child.next;
|
|
1729
|
+
}
|
|
1730
|
+
if (tNode.componentOffset > -1) {
|
|
1731
|
+
const componentLView = getComponentLViewByIndex(tNode.index, lView);
|
|
1732
|
+
if (isLView(componentLView)) {
|
|
1733
|
+
const componentTView = componentLView[TVIEW];
|
|
1734
|
+
let componentChild = componentTView.firstChild;
|
|
1735
|
+
while (componentChild) {
|
|
1736
|
+
yield [componentChild, componentLView];
|
|
1737
|
+
componentChild = componentChild.next;
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
}
|
|
1741
|
+
const slot = lView[tNode.index];
|
|
1742
|
+
if (isLContainer(slot)) {
|
|
1743
|
+
for (let i = CONTAINER_HEADER_OFFSET; i < slot.length; i++) {
|
|
1744
|
+
const embeddedLView = slot[i];
|
|
1745
|
+
const embeddedTView = embeddedLView[TVIEW];
|
|
1746
|
+
let embeddedChild = embeddedTView.firstChild;
|
|
1747
|
+
while (embeddedChild) {
|
|
1748
|
+
yield [embeddedChild, embeddedLView];
|
|
1749
|
+
embeddedChild = embeddedChild.next;
|
|
1750
|
+
}
|
|
1751
|
+
}
|
|
1752
|
+
}
|
|
1753
|
+
}
|
|
1754
|
+
function* walkLViewDescendants(lView) {
|
|
1755
|
+
const tView = lView[TVIEW];
|
|
1756
|
+
let child = tView.firstChild;
|
|
1757
|
+
while (child) {
|
|
1758
|
+
yield* walkTNodeDescendants(child, lView);
|
|
1759
|
+
child = child.next;
|
|
1760
|
+
}
|
|
1761
|
+
}
|
|
1762
|
+
function* walkTNodeDescendants(tNode, lView) {
|
|
1763
|
+
yield [tNode, lView];
|
|
1764
|
+
for (const [childTNode, childLView] of walkLViewChildren(tNode, lView)) {
|
|
1765
|
+
yield* walkTNodeDescendants(childTNode, childLView);
|
|
1766
|
+
}
|
|
1767
|
+
}
|
|
1768
|
+
function* walkLViewDirectives(lView) {
|
|
1769
|
+
for (const [tNode, currentLView] of walkLViewDescendants(lView)) {
|
|
1770
|
+
if (tNode.directiveEnd > tNode.directiveStart) {
|
|
1771
|
+
yield [tNode, currentLView];
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1774
|
+
}
|
|
1714
1775
|
|
|
1715
1776
|
function getComponent(element) {
|
|
1716
1777
|
ngDevMode && assertDomElement(element);
|
|
@@ -1997,7 +2058,7 @@ class TransferState {
|
|
|
1997
2058
|
}
|
|
1998
2059
|
}
|
|
1999
2060
|
}
|
|
2000
|
-
return JSON.stringify(this.store).replace(/</g, '\\u003C');
|
|
2061
|
+
return JSON.stringify(this.store).replace(/</g, '\\u003C').replace(/\//g, '\\u002F');
|
|
2001
2062
|
}
|
|
2002
2063
|
}
|
|
2003
2064
|
function retrieveTransferredState(doc, appId) {
|
|
@@ -2496,7 +2557,7 @@ function resetIncrementalHydrationEnabledWarnedForTests() {
|
|
|
2496
2557
|
function warnIncrementalHydrationNotConfigured() {
|
|
2497
2558
|
if (!incrementalHydrationEnabledWarned) {
|
|
2498
2559
|
incrementalHydrationEnabledWarned = true;
|
|
2499
|
-
console.warn(formatRuntimeError(508, 'Angular has detected that some `@defer` blocks use `hydrate` triggers, ' + 'but incremental hydration was not enabled.
|
|
2560
|
+
console.warn(formatRuntimeError(508, 'Angular has detected that some `@defer` blocks use `hydrate` triggers, ' + 'but incremental hydration was not enabled. Incremental hydration is enabled by default ' + 'with `provideClientHydration()`. Make sure `provideClientHydration()` is included in ' + 'your application config and that you have not opted out using `withNoIncrementalHydration()`.'));
|
|
2500
2561
|
}
|
|
2501
2562
|
}
|
|
2502
2563
|
function assertSsrIdDefined(ssrUniqueId) {
|
|
@@ -6315,6 +6376,7 @@ function createTemplateRef(hostTNode, hostLView) {
|
|
|
6315
6376
|
}
|
|
6316
6377
|
|
|
6317
6378
|
const AT_THIS_LOCATION = '<-- AT THIS LOCATION';
|
|
6379
|
+
const THIRD_PARTY_SCRIPTS_URL = `/guide/hydration#third-party-scripts-with-dom-manipulation`;
|
|
6318
6380
|
function getFriendlyStringFromTNodeType(tNodeType) {
|
|
6319
6381
|
switch (tNodeType) {
|
|
6320
6382
|
case 4:
|
|
@@ -6358,7 +6420,10 @@ function validateMatchingNode(node, nodeType, tagName, lView, tNode, isViewConta
|
|
|
6358
6420
|
markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom, actualDom);
|
|
6359
6421
|
}
|
|
6360
6422
|
const footer = getHydrationErrorFooter(componentClassName);
|
|
6361
|
-
|
|
6423
|
+
let message = header + expected + actual + getHydrationAttributeNote() + footer;
|
|
6424
|
+
if (!node || node && isLikelyExternalSourceNode(node)) {
|
|
6425
|
+
message += `Note: It looks like this mismatch may have been caused by a third-party script or ` + `browser extension that modified the DOM outside of Angular's control. ` + `Angular hydration does not support nodes injected or removed outside of the Angular-managed DOM. ` + `Note: If you know which element in the DOM this will be inserted, consider adding ngSkipHydration to prevent this error. \n\n`;
|
|
6426
|
+
}
|
|
6362
6427
|
throw new RuntimeError(-500, message);
|
|
6363
6428
|
}
|
|
6364
6429
|
}
|
|
@@ -6523,7 +6588,17 @@ function shortRNodeDescription(nodeType, tagName, textContent) {
|
|
|
6523
6588
|
}
|
|
6524
6589
|
function getHydrationErrorFooter(componentClassName) {
|
|
6525
6590
|
const componentInfo = componentClassName ? `the "${componentClassName}"` : 'corresponding';
|
|
6526
|
-
return `To fix this problem:\n` + ` * check ${componentInfo} component for hydration-related issues\n` + ` * check to see if your template has valid HTML structure\n` + ` * or skip hydration by adding the \`ngSkipHydration\` attribute ` + `to its host node in a template\n\n`;
|
|
6591
|
+
return `To fix this problem:\n` + ` * check ${componentInfo} component for hydration-related issues\n` + ` * check to see if your template has valid HTML structure\n` + ` * check if there are any third-party scripts that manipulate the DOM. More info: ${DOC_PAGE_BASE_URL}${THIRD_PARTY_SCRIPTS_URL}\n` + ` * or skip hydration by adding the \`ngSkipHydration\` attribute ` + `to its host node in a template\n\n`;
|
|
6592
|
+
}
|
|
6593
|
+
function isLikelyExternalSourceNode(rNode) {
|
|
6594
|
+
const node = rNode;
|
|
6595
|
+
if (node.nodeType !== Node.ELEMENT_NODE) {
|
|
6596
|
+
return false;
|
|
6597
|
+
}
|
|
6598
|
+
if (readPatchedData(node)) {
|
|
6599
|
+
return false;
|
|
6600
|
+
}
|
|
6601
|
+
return true;
|
|
6527
6602
|
}
|
|
6528
6603
|
function getHydrationAttributeNote() {
|
|
6529
6604
|
return 'Note: attributes are only displayed to better represent the DOM' + ' but have no effect on hydration mismatches.\n\n';
|
|
@@ -7560,16 +7635,6 @@ function cleanupMatchingDehydratedViews(hostLView, currentTNode) {
|
|
|
7560
7635
|
}
|
|
7561
7636
|
|
|
7562
7637
|
let ComponentRef$1 = class ComponentRef {};
|
|
7563
|
-
let ComponentFactory$1 = class ComponentFactory {};
|
|
7564
|
-
|
|
7565
|
-
class _NullComponentFactoryResolver {
|
|
7566
|
-
resolveComponentFactory(component) {
|
|
7567
|
-
throw new RuntimeError(917, typeof ngDevMode !== 'undefined' && ngDevMode && `No component factory found for ${stringify(component)}.`);
|
|
7568
|
-
}
|
|
7569
|
-
}
|
|
7570
|
-
let ComponentFactoryResolver$1 = class ComponentFactoryResolver {
|
|
7571
|
-
static NULL = new _NullComponentFactoryResolver();
|
|
7572
|
-
};
|
|
7573
7638
|
|
|
7574
7639
|
class RendererFactory2 {}
|
|
7575
7640
|
class Renderer2 {
|
|
@@ -7828,6 +7893,37 @@ function addSet(sourceSet, targetSet) {
|
|
|
7828
7893
|
}
|
|
7829
7894
|
const depsTracker = new DepsTracker();
|
|
7830
7895
|
|
|
7896
|
+
function getClosestComponentName(node) {
|
|
7897
|
+
let currentNode = node;
|
|
7898
|
+
while (currentNode) {
|
|
7899
|
+
const lView = readPatchedLView(currentNode);
|
|
7900
|
+
if (lView !== null) {
|
|
7901
|
+
for (let i = HEADER_OFFSET; i < lView.length; i++) {
|
|
7902
|
+
const current = lView[i];
|
|
7903
|
+
if (!isLView(current) && !isLContainer(current) || current[HOST] !== currentNode) {
|
|
7904
|
+
continue;
|
|
7905
|
+
}
|
|
7906
|
+
const tView = lView[TVIEW];
|
|
7907
|
+
const tNode = getTNode(tView, i);
|
|
7908
|
+
if (isComponentHost(tNode)) {
|
|
7909
|
+
const def = tView.data[tNode.directiveStart + tNode.componentOffset];
|
|
7910
|
+
const name = getComponentName(def);
|
|
7911
|
+
if (name !== null) {
|
|
7912
|
+
return name;
|
|
7913
|
+
} else {
|
|
7914
|
+
break;
|
|
7915
|
+
}
|
|
7916
|
+
}
|
|
7917
|
+
}
|
|
7918
|
+
}
|
|
7919
|
+
currentNode = currentNode.parentNode;
|
|
7920
|
+
}
|
|
7921
|
+
return null;
|
|
7922
|
+
}
|
|
7923
|
+
function getComponentName(def) {
|
|
7924
|
+
return def.debugInfo?.className || def.type.name || null;
|
|
7925
|
+
}
|
|
7926
|
+
|
|
7831
7927
|
const NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};
|
|
7832
7928
|
|
|
7833
7929
|
class ChainedInjector {
|
|
@@ -7846,482 +7942,130 @@ class ChainedInjector {
|
|
|
7846
7942
|
}
|
|
7847
7943
|
}
|
|
7848
7944
|
|
|
7849
|
-
function
|
|
7850
|
-
|
|
7851
|
-
|
|
7852
|
-
|
|
7853
|
-
|
|
7854
|
-
|
|
7855
|
-
|
|
7856
|
-
|
|
7857
|
-
|
|
7858
|
-
|
|
7859
|
-
|
|
7860
|
-
|
|
7861
|
-
|
|
7862
|
-
|
|
7863
|
-
|
|
7864
|
-
|
|
7865
|
-
|
|
7945
|
+
function isListLikeIterable(obj) {
|
|
7946
|
+
if (!isJsObject(obj)) return false;
|
|
7947
|
+
return Array.isArray(obj) || !(obj instanceof Map) && Symbol.iterator in obj;
|
|
7948
|
+
}
|
|
7949
|
+
function areIterablesEqual(a, b, comparator) {
|
|
7950
|
+
const iterator1 = a[Symbol.iterator]();
|
|
7951
|
+
const iterator2 = b[Symbol.iterator]();
|
|
7952
|
+
while (true) {
|
|
7953
|
+
const item1 = iterator1.next();
|
|
7954
|
+
const item2 = iterator2.next();
|
|
7955
|
+
if (item1.done && item2.done) return true;
|
|
7956
|
+
if (item1.done || item2.done) return false;
|
|
7957
|
+
if (!comparator(item1.value, item2.value)) return false;
|
|
7958
|
+
}
|
|
7959
|
+
}
|
|
7960
|
+
function iterateListLike(obj, fn) {
|
|
7961
|
+
if (Array.isArray(obj)) {
|
|
7962
|
+
for (let i = 0; i < obj.length; i++) {
|
|
7963
|
+
fn(obj[i]);
|
|
7964
|
+
}
|
|
7965
|
+
} else {
|
|
7966
|
+
const iterator = obj[Symbol.iterator]();
|
|
7967
|
+
let item;
|
|
7968
|
+
while (!(item = iterator.next()).done) {
|
|
7969
|
+
fn(item.value);
|
|
7866
7970
|
}
|
|
7867
7971
|
}
|
|
7868
|
-
|
|
7869
|
-
|
|
7972
|
+
}
|
|
7973
|
+
function isJsObject(o) {
|
|
7974
|
+
return o !== null && (typeof o === 'function' || typeof o === 'object');
|
|
7870
7975
|
}
|
|
7871
7976
|
|
|
7872
|
-
function
|
|
7873
|
-
const
|
|
7874
|
-
|
|
7875
|
-
|
|
7876
|
-
return
|
|
7977
|
+
function devModeEqual(a, b) {
|
|
7978
|
+
const isListLikeIterableA = isListLikeIterable(a);
|
|
7979
|
+
const isListLikeIterableB = isListLikeIterable(b);
|
|
7980
|
+
if (isListLikeIterableA && isListLikeIterableB) {
|
|
7981
|
+
return areIterablesEqual(a, b, devModeEqual);
|
|
7982
|
+
} else {
|
|
7983
|
+
const isAObject = a && (typeof a === 'object' || typeof a === 'function');
|
|
7984
|
+
const isBObject = b && (typeof b === 'object' || typeof b === 'function');
|
|
7985
|
+
if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {
|
|
7986
|
+
return true;
|
|
7987
|
+
} else {
|
|
7988
|
+
return Object.is(a, b);
|
|
7989
|
+
}
|
|
7877
7990
|
}
|
|
7878
|
-
const tNode = getCurrentTNode();
|
|
7879
|
-
const value = getOrCreateInjectable(tNode, lView, resolveForwardRef(token), flags);
|
|
7880
|
-
ngDevMode && emitInjectEvent(token, value, flags);
|
|
7881
|
-
return value;
|
|
7882
|
-
}
|
|
7883
|
-
function ɵɵinvalidFactory() {
|
|
7884
|
-
const msg = ngDevMode ? `This constructor was not compatible with Dependency Injection.` : 'invalid';
|
|
7885
|
-
throw new Error(msg);
|
|
7886
7991
|
}
|
|
7887
7992
|
|
|
7888
|
-
function
|
|
7889
|
-
|
|
7890
|
-
|
|
7891
|
-
|
|
7892
|
-
|
|
7893
|
-
|
|
7894
|
-
|
|
7895
|
-
|
|
7896
|
-
|
|
7897
|
-
|
|
7898
|
-
|
|
7899
|
-
|
|
7900
|
-
|
|
7901
|
-
|
|
7993
|
+
function updateBinding(lView, bindingIndex, value) {
|
|
7994
|
+
return lView[bindingIndex] = value;
|
|
7995
|
+
}
|
|
7996
|
+
function getBinding(lView, bindingIndex) {
|
|
7997
|
+
ngDevMode && assertIndexInRange(lView, bindingIndex);
|
|
7998
|
+
ngDevMode && assertNotSame(lView[bindingIndex], NO_CHANGE, 'Stored value should never be NO_CHANGE.');
|
|
7999
|
+
return lView[bindingIndex];
|
|
8000
|
+
}
|
|
8001
|
+
function bindingUpdated(lView, bindingIndex, value) {
|
|
8002
|
+
ngDevMode && assertLessThan(bindingIndex, lView.length, `Slot should have been initialized to NO_CHANGE`);
|
|
8003
|
+
if (value === NO_CHANGE) {
|
|
8004
|
+
return false;
|
|
8005
|
+
}
|
|
8006
|
+
const oldValue = lView[bindingIndex];
|
|
8007
|
+
if (Object.is(oldValue, value)) {
|
|
8008
|
+
return false;
|
|
8009
|
+
} else {
|
|
8010
|
+
if (ngDevMode && isInCheckNoChangesMode()) {
|
|
8011
|
+
const oldValueToCompare = oldValue !== NO_CHANGE ? oldValue : undefined;
|
|
8012
|
+
if (!devModeEqual(oldValueToCompare, value)) {
|
|
8013
|
+
const details = getExpressionChangedErrorDetails(lView, bindingIndex, oldValueToCompare, value);
|
|
8014
|
+
throwErrorIfNoChangesMode(oldValue === NO_CHANGE, details.oldValue, details.newValue, details.propName, lView);
|
|
7902
8015
|
}
|
|
8016
|
+
return false;
|
|
7903
8017
|
}
|
|
7904
|
-
|
|
7905
|
-
|
|
7906
|
-
}
|
|
7907
|
-
if (exportsMap !== null && localRefs !== null) {
|
|
7908
|
-
cacheMatchingLocalNames(tNode, localRefs, exportsMap);
|
|
8018
|
+
lView[bindingIndex] = value;
|
|
8019
|
+
return true;
|
|
7909
8020
|
}
|
|
7910
8021
|
}
|
|
7911
|
-
function
|
|
7912
|
-
const
|
|
7913
|
-
|
|
7914
|
-
const index = exportsMap[localRefs[i + 1]];
|
|
7915
|
-
if (index == null) throw new RuntimeError(-301, ngDevMode && `Export of name '${localRefs[i + 1]}' not found!`);
|
|
7916
|
-
localNames.push(localRefs[i], index);
|
|
7917
|
-
}
|
|
8022
|
+
function bindingUpdated2(lView, bindingIndex, exp1, exp2) {
|
|
8023
|
+
const different = bindingUpdated(lView, bindingIndex, exp1);
|
|
8024
|
+
return bindingUpdated(lView, bindingIndex + 1, exp2) || different;
|
|
7918
8025
|
}
|
|
7919
|
-
function
|
|
7920
|
-
|
|
7921
|
-
|
|
7922
|
-
hostTNode.componentOffset = componentOffset;
|
|
7923
|
-
(tView.components ??= []).push(hostTNode.index);
|
|
8026
|
+
function bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) {
|
|
8027
|
+
const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);
|
|
8028
|
+
return bindingUpdated(lView, bindingIndex + 2, exp3) || different;
|
|
7924
8029
|
}
|
|
7925
|
-
function
|
|
7926
|
-
|
|
7927
|
-
|
|
7928
|
-
|
|
7929
|
-
|
|
7930
|
-
|
|
7931
|
-
|
|
7932
|
-
|
|
7933
|
-
|
|
8030
|
+
function bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {
|
|
8031
|
+
const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);
|
|
8032
|
+
return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;
|
|
8033
|
+
}
|
|
8034
|
+
|
|
8035
|
+
function wrapListener(tNode, lView, listenerFn) {
|
|
8036
|
+
return function wrapListenerIn_markDirtyAndPreventDefault(event) {
|
|
8037
|
+
const startView = isComponentHost(tNode) ? getComponentLViewByIndex(tNode.index, lView) : lView;
|
|
8038
|
+
markViewDirty(startView, 5);
|
|
8039
|
+
const context = lView[CONTEXT];
|
|
8040
|
+
let result = executeListenerWithErrorHandling(lView, context, listenerFn, event);
|
|
8041
|
+
let nextListenerFn = wrapListenerIn_markDirtyAndPreventDefault.__ngNextListenerFn__;
|
|
8042
|
+
while (nextListenerFn) {
|
|
8043
|
+
result = executeListenerWithErrorHandling(lView, context, nextListenerFn, event) && result;
|
|
8044
|
+
nextListenerFn = nextListenerFn.__ngNextListenerFn__;
|
|
7934
8045
|
}
|
|
7935
|
-
|
|
8046
|
+
return result;
|
|
8047
|
+
};
|
|
8048
|
+
}
|
|
8049
|
+
function executeListenerWithErrorHandling(lView, context, listenerFn, e) {
|
|
8050
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
8051
|
+
try {
|
|
8052
|
+
profiler(ProfilerEvent.OutputStart, context, listenerFn);
|
|
8053
|
+
return listenerFn(e) !== false;
|
|
8054
|
+
} catch (error) {
|
|
8055
|
+
handleUncaughtError(lView, error);
|
|
8056
|
+
return false;
|
|
8057
|
+
} finally {
|
|
8058
|
+
profiler(ProfilerEvent.OutputEnd, context, listenerFn);
|
|
8059
|
+
setActiveConsumer$1(prevConsumer);
|
|
7936
8060
|
}
|
|
7937
|
-
|
|
7938
|
-
|
|
7939
|
-
|
|
7940
|
-
|
|
7941
|
-
|
|
7942
|
-
|
|
7943
|
-
|
|
7944
|
-
|
|
7945
|
-
}
|
|
7946
|
-
}
|
|
7947
|
-
let preOrderHooksFound = false;
|
|
7948
|
-
let preOrderCheckHooksFound = false;
|
|
7949
|
-
let directiveIdx = allocExpando(tView, lView, directivesLength, null);
|
|
7950
|
-
ngDevMode && assertSame(directiveIdx, tNode.directiveStart, 'TNode.directiveStart should point to just allocated space');
|
|
7951
|
-
if (directivesLength > 0) {
|
|
7952
|
-
tNode.directiveToIndex = new Map();
|
|
7953
|
-
}
|
|
7954
|
-
for (let i = 0; i < directivesLength; i++) {
|
|
7955
|
-
const def = directives[i];
|
|
7956
|
-
tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);
|
|
7957
|
-
configureViewWithDirective(tView, tNode, lView, directiveIdx, def);
|
|
7958
|
-
saveNameToExportMap(directiveIdx, def, exportsMap);
|
|
7959
|
-
if (hostDirectiveRanges !== null && hostDirectiveRanges.has(def)) {
|
|
7960
|
-
const [start, end] = hostDirectiveRanges.get(def);
|
|
7961
|
-
tNode.directiveToIndex.set(def.type, [directiveIdx, start + tNode.directiveStart, end + tNode.directiveStart]);
|
|
7962
|
-
} else if (hostDirectiveDefs === null || !hostDirectiveDefs.has(def)) {
|
|
7963
|
-
tNode.directiveToIndex.set(def.type, directiveIdx);
|
|
7964
|
-
}
|
|
7965
|
-
if (def.contentQueries !== null) tNode.flags |= 4;
|
|
7966
|
-
if (def.hostBindings !== null || def.hostAttrs !== null || def.hostVars !== 0) tNode.flags |= 64;
|
|
7967
|
-
const lifeCycleHooks = def.type.prototype;
|
|
7968
|
-
if (!preOrderHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngOnInit || lifeCycleHooks.ngDoCheck)) {
|
|
7969
|
-
(tView.preOrderHooks ??= []).push(tNode.index);
|
|
7970
|
-
preOrderHooksFound = true;
|
|
7971
|
-
}
|
|
7972
|
-
if (!preOrderCheckHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngDoCheck)) {
|
|
7973
|
-
(tView.preOrderCheckHooks ??= []).push(tNode.index);
|
|
7974
|
-
preOrderCheckHooksFound = true;
|
|
7975
|
-
}
|
|
7976
|
-
directiveIdx++;
|
|
7977
|
-
}
|
|
7978
|
-
initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs);
|
|
7979
|
-
}
|
|
7980
|
-
function initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs) {
|
|
7981
|
-
ngDevMode && assertFirstCreatePass(tView);
|
|
7982
|
-
for (let index = tNode.directiveStart; index < tNode.directiveEnd; index++) {
|
|
7983
|
-
const directiveDef = tView.data[index];
|
|
7984
|
-
if (hostDirectiveDefs === null || !hostDirectiveDefs.has(directiveDef)) {
|
|
7985
|
-
setupSelectorMatchedInputsOrOutputs(0, tNode, directiveDef, index);
|
|
7986
|
-
setupSelectorMatchedInputsOrOutputs(1, tNode, directiveDef, index);
|
|
7987
|
-
setupInitialInputs(tNode, index, false);
|
|
7988
|
-
} else {
|
|
7989
|
-
const hostDirectiveDef = hostDirectiveDefs.get(directiveDef);
|
|
7990
|
-
setupHostDirectiveInputsOrOutputs(0, tNode, hostDirectiveDef, index);
|
|
7991
|
-
setupHostDirectiveInputsOrOutputs(1, tNode, hostDirectiveDef, index);
|
|
7992
|
-
setupInitialInputs(tNode, index, true);
|
|
7993
|
-
}
|
|
7994
|
-
}
|
|
7995
|
-
}
|
|
7996
|
-
function setupSelectorMatchedInputsOrOutputs(mode, tNode, def, directiveIndex) {
|
|
7997
|
-
const aliasMap = mode === 0 ? def.inputs : def.outputs;
|
|
7998
|
-
for (const publicName in aliasMap) {
|
|
7999
|
-
if (aliasMap.hasOwnProperty(publicName)) {
|
|
8000
|
-
let bindings;
|
|
8001
|
-
if (mode === 0) {
|
|
8002
|
-
bindings = tNode.inputs ??= {};
|
|
8003
|
-
} else {
|
|
8004
|
-
bindings = tNode.outputs ??= {};
|
|
8005
|
-
}
|
|
8006
|
-
bindings[publicName] ??= [];
|
|
8007
|
-
bindings[publicName].push(directiveIndex);
|
|
8008
|
-
setShadowStylingInputFlags(tNode, publicName);
|
|
8009
|
-
}
|
|
8010
|
-
}
|
|
8011
|
-
}
|
|
8012
|
-
function setupHostDirectiveInputsOrOutputs(mode, tNode, config, directiveIndex) {
|
|
8013
|
-
const aliasMap = mode === 0 ? config.inputs : config.outputs;
|
|
8014
|
-
for (const initialName in aliasMap) {
|
|
8015
|
-
if (aliasMap.hasOwnProperty(initialName)) {
|
|
8016
|
-
const publicName = aliasMap[initialName];
|
|
8017
|
-
let bindings;
|
|
8018
|
-
if (mode === 0) {
|
|
8019
|
-
bindings = tNode.hostDirectiveInputs ??= {};
|
|
8020
|
-
} else {
|
|
8021
|
-
bindings = tNode.hostDirectiveOutputs ??= {};
|
|
8022
|
-
}
|
|
8023
|
-
bindings[publicName] ??= [];
|
|
8024
|
-
bindings[publicName].push(directiveIndex, initialName);
|
|
8025
|
-
setShadowStylingInputFlags(tNode, publicName);
|
|
8026
|
-
}
|
|
8027
|
-
}
|
|
8028
|
-
}
|
|
8029
|
-
function setShadowStylingInputFlags(tNode, publicName) {
|
|
8030
|
-
if (publicName === 'class') {
|
|
8031
|
-
tNode.flags |= 8;
|
|
8032
|
-
} else if (publicName === 'style') {
|
|
8033
|
-
tNode.flags |= 16;
|
|
8034
|
-
}
|
|
8035
|
-
}
|
|
8036
|
-
function setupInitialInputs(tNode, directiveIndex, isHostDirective) {
|
|
8037
|
-
const {
|
|
8038
|
-
attrs,
|
|
8039
|
-
inputs,
|
|
8040
|
-
hostDirectiveInputs
|
|
8041
|
-
} = tNode;
|
|
8042
|
-
if (attrs === null || !isHostDirective && inputs === null || isHostDirective && hostDirectiveInputs === null || isInlineTemplate(tNode)) {
|
|
8043
|
-
tNode.initialInputs ??= [];
|
|
8044
|
-
tNode.initialInputs.push(null);
|
|
8045
|
-
return;
|
|
8046
|
-
}
|
|
8047
|
-
let inputsToStore = null;
|
|
8048
|
-
let i = 0;
|
|
8049
|
-
while (i < attrs.length) {
|
|
8050
|
-
const attrName = attrs[i];
|
|
8051
|
-
if (attrName === 0) {
|
|
8052
|
-
i += 4;
|
|
8053
|
-
continue;
|
|
8054
|
-
} else if (attrName === 5) {
|
|
8055
|
-
i += 2;
|
|
8056
|
-
continue;
|
|
8057
|
-
} else if (typeof attrName === 'number') {
|
|
8058
|
-
break;
|
|
8059
|
-
}
|
|
8060
|
-
if (!isHostDirective && inputs.hasOwnProperty(attrName)) {
|
|
8061
|
-
const inputConfig = inputs[attrName];
|
|
8062
|
-
for (const index of inputConfig) {
|
|
8063
|
-
if (index === directiveIndex) {
|
|
8064
|
-
inputsToStore ??= [];
|
|
8065
|
-
inputsToStore.push(attrName, attrs[i + 1]);
|
|
8066
|
-
break;
|
|
8067
|
-
}
|
|
8068
|
-
}
|
|
8069
|
-
} else if (isHostDirective && hostDirectiveInputs.hasOwnProperty(attrName)) {
|
|
8070
|
-
const config = hostDirectiveInputs[attrName];
|
|
8071
|
-
for (let j = 0; j < config.length; j += 2) {
|
|
8072
|
-
if (config[j] === directiveIndex) {
|
|
8073
|
-
inputsToStore ??= [];
|
|
8074
|
-
inputsToStore.push(config[j + 1], attrs[i + 1]);
|
|
8075
|
-
break;
|
|
8076
|
-
}
|
|
8077
|
-
}
|
|
8078
|
-
}
|
|
8079
|
-
i += 2;
|
|
8080
|
-
}
|
|
8081
|
-
tNode.initialInputs ??= [];
|
|
8082
|
-
tNode.initialInputs.push(inputsToStore);
|
|
8083
|
-
}
|
|
8084
|
-
function configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {
|
|
8085
|
-
ngDevMode && assertGreaterThanOrEqual(directiveIndex, HEADER_OFFSET, 'Must be in Expando section');
|
|
8086
|
-
tView.data[directiveIndex] = def;
|
|
8087
|
-
const directiveFactory = def.factory || (def.factory = getFactoryDef(def.type, true));
|
|
8088
|
-
const nodeInjectorFactory = new NodeInjectorFactory(directiveFactory, isComponentDef(def), ɵɵdirectiveInject, ngDevMode ? def.type.name : null);
|
|
8089
|
-
tView.blueprint[directiveIndex] = nodeInjectorFactory;
|
|
8090
|
-
lView[directiveIndex] = nodeInjectorFactory;
|
|
8091
|
-
registerHostBindingOpCodes(tView, tNode, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);
|
|
8092
|
-
}
|
|
8093
|
-
function registerHostBindingOpCodes(tView, tNode, directiveIdx, directiveVarsIdx, def) {
|
|
8094
|
-
ngDevMode && assertFirstCreatePass(tView);
|
|
8095
|
-
const hostBindings = def.hostBindings;
|
|
8096
|
-
if (hostBindings) {
|
|
8097
|
-
let hostBindingOpCodes = tView.hostBindingOpCodes;
|
|
8098
|
-
if (hostBindingOpCodes === null) {
|
|
8099
|
-
hostBindingOpCodes = tView.hostBindingOpCodes = [];
|
|
8100
|
-
}
|
|
8101
|
-
const elementIndx = ~tNode.index;
|
|
8102
|
-
if (lastSelectedElementIdx(hostBindingOpCodes) != elementIndx) {
|
|
8103
|
-
hostBindingOpCodes.push(elementIndx);
|
|
8104
|
-
}
|
|
8105
|
-
hostBindingOpCodes.push(directiveIdx, directiveVarsIdx, hostBindings);
|
|
8106
|
-
}
|
|
8107
|
-
}
|
|
8108
|
-
function lastSelectedElementIdx(hostBindingOpCodes) {
|
|
8109
|
-
let i = hostBindingOpCodes.length;
|
|
8110
|
-
while (i > 0) {
|
|
8111
|
-
const value = hostBindingOpCodes[--i];
|
|
8112
|
-
if (typeof value === 'number' && value < 0) {
|
|
8113
|
-
return value;
|
|
8114
|
-
}
|
|
8115
|
-
}
|
|
8116
|
-
return 0;
|
|
8117
|
-
}
|
|
8118
|
-
function saveNameToExportMap(directiveIdx, def, exportsMap) {
|
|
8119
|
-
if (exportsMap) {
|
|
8120
|
-
if (def.exportAs) {
|
|
8121
|
-
for (let i = 0; i < def.exportAs.length; i++) {
|
|
8122
|
-
exportsMap[def.exportAs[i]] = directiveIdx;
|
|
8123
|
-
}
|
|
8124
|
-
}
|
|
8125
|
-
if (isComponentDef(def)) exportsMap[''] = directiveIdx;
|
|
8126
|
-
}
|
|
8127
|
-
}
|
|
8128
|
-
function initTNodeFlags(tNode, index, numberOfDirectives) {
|
|
8129
|
-
ngDevMode && assertNotEqual(numberOfDirectives, tNode.directiveEnd - tNode.directiveStart, 'Reached the max number of directives');
|
|
8130
|
-
tNode.flags |= 1;
|
|
8131
|
-
tNode.directiveStart = index;
|
|
8132
|
-
tNode.directiveEnd = index + numberOfDirectives;
|
|
8133
|
-
tNode.providerIndexes = index;
|
|
8134
|
-
}
|
|
8135
|
-
function assertNoDuplicateDirectives(directives) {
|
|
8136
|
-
if (directives.length < 2) {
|
|
8137
|
-
return;
|
|
8138
|
-
}
|
|
8139
|
-
const seenDirectives = new Set();
|
|
8140
|
-
for (const current of directives) {
|
|
8141
|
-
if (seenDirectives.has(current)) {
|
|
8142
|
-
throw new RuntimeError(309, `Directive ${current.type.name} matches multiple times on the same element. ` + `Directives can only match an element once.`);
|
|
8143
|
-
}
|
|
8144
|
-
seenDirectives.add(current);
|
|
8145
|
-
}
|
|
8146
|
-
}
|
|
8147
|
-
|
|
8148
|
-
function directiveHostFirstCreatePass(index, lView, type, name, directiveMatcher, bindingsEnabled, attrsIndex, localRefsIndex) {
|
|
8149
|
-
const tView = lView[TVIEW];
|
|
8150
|
-
ngDevMode && assertFirstCreatePass(tView);
|
|
8151
|
-
const tViewConsts = tView.consts;
|
|
8152
|
-
const attrs = getConstant(tViewConsts, attrsIndex);
|
|
8153
|
-
const tNode = getOrCreateTNode(tView, index, type, name, attrs);
|
|
8154
|
-
if (bindingsEnabled) {
|
|
8155
|
-
resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex), directiveMatcher);
|
|
8156
|
-
}
|
|
8157
|
-
tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);
|
|
8158
|
-
if (tNode.attrs !== null) {
|
|
8159
|
-
computeStaticStyling(tNode, tNode.attrs, false);
|
|
8160
|
-
}
|
|
8161
|
-
if (tNode.mergedAttrs !== null) {
|
|
8162
|
-
computeStaticStyling(tNode, tNode.mergedAttrs, true);
|
|
8163
|
-
}
|
|
8164
|
-
if (tView.queries !== null) {
|
|
8165
|
-
tView.queries.elementStart(tView, tNode);
|
|
8166
|
-
}
|
|
8167
|
-
return tNode;
|
|
8168
|
-
}
|
|
8169
|
-
function directiveHostEndFirstCreatePass(tView, tNode) {
|
|
8170
|
-
ngDevMode && assertFirstCreatePass(tView);
|
|
8171
|
-
registerPostOrderHooks(tView, tNode);
|
|
8172
|
-
if (isContentQueryHost(tNode)) {
|
|
8173
|
-
tView.queries.elementEnd(tNode);
|
|
8174
|
-
}
|
|
8175
|
-
}
|
|
8176
|
-
function domOnlyFirstCreatePass(index, tView, type, name, attrsIndex, localRefsIndex) {
|
|
8177
|
-
ngDevMode && assertFirstCreatePass(tView);
|
|
8178
|
-
const tViewConsts = tView.consts;
|
|
8179
|
-
const attrs = getConstant(tViewConsts, attrsIndex);
|
|
8180
|
-
const tNode = getOrCreateTNode(tView, index, type, name, attrs);
|
|
8181
|
-
tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);
|
|
8182
|
-
if (localRefsIndex != null) {
|
|
8183
|
-
const refs = getConstant(tViewConsts, localRefsIndex);
|
|
8184
|
-
tNode.localNames = [];
|
|
8185
|
-
for (let i = 0; i < refs.length; i += 2) {
|
|
8186
|
-
tNode.localNames.push(refs[i], -1);
|
|
8187
|
-
}
|
|
8188
|
-
}
|
|
8189
|
-
if (tNode.attrs !== null) {
|
|
8190
|
-
computeStaticStyling(tNode, tNode.attrs, false);
|
|
8191
|
-
}
|
|
8192
|
-
if (tNode.mergedAttrs !== null) {
|
|
8193
|
-
computeStaticStyling(tNode, tNode.mergedAttrs, true);
|
|
8194
|
-
}
|
|
8195
|
-
if (tView.queries !== null) {
|
|
8196
|
-
tView.queries.elementStart(tView, tNode);
|
|
8197
|
-
}
|
|
8198
|
-
return tNode;
|
|
8199
|
-
}
|
|
8200
|
-
|
|
8201
|
-
function isListLikeIterable(obj) {
|
|
8202
|
-
if (!isJsObject(obj)) return false;
|
|
8203
|
-
return Array.isArray(obj) || !(obj instanceof Map) && Symbol.iterator in obj;
|
|
8204
|
-
}
|
|
8205
|
-
function areIterablesEqual(a, b, comparator) {
|
|
8206
|
-
const iterator1 = a[Symbol.iterator]();
|
|
8207
|
-
const iterator2 = b[Symbol.iterator]();
|
|
8208
|
-
while (true) {
|
|
8209
|
-
const item1 = iterator1.next();
|
|
8210
|
-
const item2 = iterator2.next();
|
|
8211
|
-
if (item1.done && item2.done) return true;
|
|
8212
|
-
if (item1.done || item2.done) return false;
|
|
8213
|
-
if (!comparator(item1.value, item2.value)) return false;
|
|
8214
|
-
}
|
|
8215
|
-
}
|
|
8216
|
-
function iterateListLike(obj, fn) {
|
|
8217
|
-
if (Array.isArray(obj)) {
|
|
8218
|
-
for (let i = 0; i < obj.length; i++) {
|
|
8219
|
-
fn(obj[i]);
|
|
8220
|
-
}
|
|
8221
|
-
} else {
|
|
8222
|
-
const iterator = obj[Symbol.iterator]();
|
|
8223
|
-
let item;
|
|
8224
|
-
while (!(item = iterator.next()).done) {
|
|
8225
|
-
fn(item.value);
|
|
8226
|
-
}
|
|
8227
|
-
}
|
|
8228
|
-
}
|
|
8229
|
-
function isJsObject(o) {
|
|
8230
|
-
return o !== null && (typeof o === 'function' || typeof o === 'object');
|
|
8231
|
-
}
|
|
8232
|
-
|
|
8233
|
-
function devModeEqual(a, b) {
|
|
8234
|
-
const isListLikeIterableA = isListLikeIterable(a);
|
|
8235
|
-
const isListLikeIterableB = isListLikeIterable(b);
|
|
8236
|
-
if (isListLikeIterableA && isListLikeIterableB) {
|
|
8237
|
-
return areIterablesEqual(a, b, devModeEqual);
|
|
8238
|
-
} else {
|
|
8239
|
-
const isAObject = a && (typeof a === 'object' || typeof a === 'function');
|
|
8240
|
-
const isBObject = b && (typeof b === 'object' || typeof b === 'function');
|
|
8241
|
-
if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {
|
|
8242
|
-
return true;
|
|
8243
|
-
} else {
|
|
8244
|
-
return Object.is(a, b);
|
|
8245
|
-
}
|
|
8246
|
-
}
|
|
8247
|
-
}
|
|
8248
|
-
|
|
8249
|
-
function updateBinding(lView, bindingIndex, value) {
|
|
8250
|
-
return lView[bindingIndex] = value;
|
|
8251
|
-
}
|
|
8252
|
-
function getBinding(lView, bindingIndex) {
|
|
8253
|
-
ngDevMode && assertIndexInRange(lView, bindingIndex);
|
|
8254
|
-
ngDevMode && assertNotSame(lView[bindingIndex], NO_CHANGE, 'Stored value should never be NO_CHANGE.');
|
|
8255
|
-
return lView[bindingIndex];
|
|
8256
|
-
}
|
|
8257
|
-
function bindingUpdated(lView, bindingIndex, value) {
|
|
8258
|
-
ngDevMode && assertLessThan(bindingIndex, lView.length, `Slot should have been initialized to NO_CHANGE`);
|
|
8259
|
-
if (value === NO_CHANGE) {
|
|
8260
|
-
return false;
|
|
8261
|
-
}
|
|
8262
|
-
const oldValue = lView[bindingIndex];
|
|
8263
|
-
if (Object.is(oldValue, value)) {
|
|
8264
|
-
return false;
|
|
8265
|
-
} else {
|
|
8266
|
-
if (ngDevMode && isInCheckNoChangesMode()) {
|
|
8267
|
-
const oldValueToCompare = oldValue !== NO_CHANGE ? oldValue : undefined;
|
|
8268
|
-
if (!devModeEqual(oldValueToCompare, value)) {
|
|
8269
|
-
const details = getExpressionChangedErrorDetails(lView, bindingIndex, oldValueToCompare, value);
|
|
8270
|
-
throwErrorIfNoChangesMode(oldValue === NO_CHANGE, details.oldValue, details.newValue, details.propName, lView);
|
|
8271
|
-
}
|
|
8272
|
-
return false;
|
|
8273
|
-
}
|
|
8274
|
-
lView[bindingIndex] = value;
|
|
8275
|
-
return true;
|
|
8276
|
-
}
|
|
8277
|
-
}
|
|
8278
|
-
function bindingUpdated2(lView, bindingIndex, exp1, exp2) {
|
|
8279
|
-
const different = bindingUpdated(lView, bindingIndex, exp1);
|
|
8280
|
-
return bindingUpdated(lView, bindingIndex + 1, exp2) || different;
|
|
8281
|
-
}
|
|
8282
|
-
function bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) {
|
|
8283
|
-
const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);
|
|
8284
|
-
return bindingUpdated(lView, bindingIndex + 2, exp3) || different;
|
|
8285
|
-
}
|
|
8286
|
-
function bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {
|
|
8287
|
-
const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);
|
|
8288
|
-
return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;
|
|
8289
|
-
}
|
|
8290
|
-
|
|
8291
|
-
function wrapListener(tNode, lView, listenerFn) {
|
|
8292
|
-
return function wrapListenerIn_markDirtyAndPreventDefault(event) {
|
|
8293
|
-
const startView = isComponentHost(tNode) ? getComponentLViewByIndex(tNode.index, lView) : lView;
|
|
8294
|
-
markViewDirty(startView, 5);
|
|
8295
|
-
const context = lView[CONTEXT];
|
|
8296
|
-
let result = executeListenerWithErrorHandling(lView, context, listenerFn, event);
|
|
8297
|
-
let nextListenerFn = wrapListenerIn_markDirtyAndPreventDefault.__ngNextListenerFn__;
|
|
8298
|
-
while (nextListenerFn) {
|
|
8299
|
-
result = executeListenerWithErrorHandling(lView, context, nextListenerFn, event) && result;
|
|
8300
|
-
nextListenerFn = nextListenerFn.__ngNextListenerFn__;
|
|
8301
|
-
}
|
|
8302
|
-
return result;
|
|
8303
|
-
};
|
|
8304
|
-
}
|
|
8305
|
-
function executeListenerWithErrorHandling(lView, context, listenerFn, e) {
|
|
8306
|
-
const prevConsumer = setActiveConsumer$1(null);
|
|
8307
|
-
try {
|
|
8308
|
-
profiler(ProfilerEvent.OutputStart, context, listenerFn);
|
|
8309
|
-
return listenerFn(e) !== false;
|
|
8310
|
-
} catch (error) {
|
|
8311
|
-
handleUncaughtError(lView, error);
|
|
8312
|
-
return false;
|
|
8313
|
-
} finally {
|
|
8314
|
-
profiler(ProfilerEvent.OutputEnd, context, listenerFn);
|
|
8315
|
-
setActiveConsumer$1(prevConsumer);
|
|
8316
|
-
}
|
|
8317
|
-
}
|
|
8318
|
-
function listenToDomEvent(tNode, tView, lView, eventTargetResolver, renderer, eventName, originalListener, wrappedListener) {
|
|
8319
|
-
ngDevMode && assertNotSame(wrappedListener, originalListener, 'Expected wrapped and original listeners to be different.');
|
|
8320
|
-
const isTNodeDirectiveHost = isDirectiveHost(tNode);
|
|
8321
|
-
let hasCoalesced = false;
|
|
8322
|
-
let existingListener = null;
|
|
8323
|
-
if (!eventTargetResolver && isTNodeDirectiveHost) {
|
|
8324
|
-
existingListener = findExistingListener(tView, lView, eventName, tNode.index);
|
|
8061
|
+
}
|
|
8062
|
+
function listenToDomEvent(tNode, tView, lView, eventTargetResolver, renderer, eventName, originalListener, wrappedListener) {
|
|
8063
|
+
ngDevMode && assertNotSame(wrappedListener, originalListener, 'Expected wrapped and original listeners to be different.');
|
|
8064
|
+
const isTNodeDirectiveHost = isDirectiveHost(tNode);
|
|
8065
|
+
let hasCoalesced = false;
|
|
8066
|
+
let existingListener = null;
|
|
8067
|
+
if (!eventTargetResolver && isTNodeDirectiveHost) {
|
|
8068
|
+
existingListener = findExistingListener(tView, lView, eventName, tNode.index);
|
|
8325
8069
|
}
|
|
8326
8070
|
if (existingListener !== null) {
|
|
8327
8071
|
const lastListenerFn = existingListener.__ngLastListenerFn__ || existingListener;
|
|
@@ -8402,404 +8146,717 @@ function listenToDirectiveOutput(tNode, lView, target, eventName, listenerFn) {
|
|
|
8402
8146
|
}
|
|
8403
8147
|
}
|
|
8404
8148
|
}
|
|
8405
|
-
if (target.outputs.hasOwnProperty(eventName)) {
|
|
8406
|
-
ngDevMode && assertIndexInRange(lView, hostIndex);
|
|
8407
|
-
hasOutput = true;
|
|
8408
|
-
listenToOutput(tNode, lView, hostIndex, eventName, eventName, listenerFn);
|
|
8409
|
-
}
|
|
8410
|
-
return hasOutput;
|
|
8149
|
+
if (target.outputs.hasOwnProperty(eventName)) {
|
|
8150
|
+
ngDevMode && assertIndexInRange(lView, hostIndex);
|
|
8151
|
+
hasOutput = true;
|
|
8152
|
+
listenToOutput(tNode, lView, hostIndex, eventName, eventName, listenerFn);
|
|
8153
|
+
}
|
|
8154
|
+
return hasOutput;
|
|
8155
|
+
}
|
|
8156
|
+
function listenToOutput(tNode, lView, directiveIndex, lookupName, eventName, listenerFn) {
|
|
8157
|
+
ngDevMode && assertIndexInRange(lView, directiveIndex);
|
|
8158
|
+
const instance = lView[directiveIndex];
|
|
8159
|
+
const tView = lView[TVIEW];
|
|
8160
|
+
const def = tView.data[directiveIndex];
|
|
8161
|
+
const propertyName = def.outputs[lookupName];
|
|
8162
|
+
const output = instance[propertyName];
|
|
8163
|
+
if (ngDevMode && !isOutputSubscribable(output)) {
|
|
8164
|
+
throw new Error(`@Output ${propertyName} not initialized in '${instance.constructor.name}'.`);
|
|
8165
|
+
}
|
|
8166
|
+
const subscription = output.subscribe(listenerFn);
|
|
8167
|
+
storeListenerCleanup(tNode.index, tView, lView, eventName, listenerFn, subscription, true);
|
|
8168
|
+
}
|
|
8169
|
+
function isOutputSubscribable(value) {
|
|
8170
|
+
return value != null && typeof value.subscribe === 'function';
|
|
8171
|
+
}
|
|
8172
|
+
|
|
8173
|
+
function ɵɵcontrolCreate() {
|
|
8174
|
+
controlCreateInternal();
|
|
8175
|
+
}
|
|
8176
|
+
function controlCreateInternal() {
|
|
8177
|
+
const lView = getLView();
|
|
8178
|
+
const tView = getTView();
|
|
8179
|
+
const tNode = getCurrentTNode();
|
|
8180
|
+
if (tView.firstCreatePass) {
|
|
8181
|
+
initializeControlFirstCreatePass(tView, tNode);
|
|
8182
|
+
}
|
|
8183
|
+
if (tNode.controlDirectiveIndex === -1) {
|
|
8184
|
+
return;
|
|
8185
|
+
}
|
|
8186
|
+
performanceMarkFeature('NgSignalForms');
|
|
8187
|
+
const instance = lView[tNode.controlDirectiveIndex];
|
|
8188
|
+
const controlDef = tView.data[tNode.controlDirectiveIndex].controlDef;
|
|
8189
|
+
controlDef.create(instance, new ControlDirectiveHostImpl(lView, tView, tNode));
|
|
8190
|
+
}
|
|
8191
|
+
function ɵɵcontrol() {
|
|
8192
|
+
controlUpdateInternal();
|
|
8193
|
+
}
|
|
8194
|
+
function controlUpdateInternal() {
|
|
8195
|
+
if (ngDevMode && isInCheckNoChangesMode()) {
|
|
8196
|
+
return;
|
|
8197
|
+
}
|
|
8198
|
+
const lView = getLView();
|
|
8199
|
+
const tView = getTView();
|
|
8200
|
+
const tNode = getSelectedTNode();
|
|
8201
|
+
if (tNode.controlDirectiveIndex === -1) {
|
|
8202
|
+
return;
|
|
8203
|
+
}
|
|
8204
|
+
const controlDef = tView.data[tNode.controlDirectiveIndex].controlDef;
|
|
8205
|
+
const instance = lView[tNode.controlDirectiveIndex];
|
|
8206
|
+
controlDef.update(instance, new ControlDirectiveHostImpl(lView, tView, tNode));
|
|
8207
|
+
}
|
|
8208
|
+
class ControlDirectiveHostImpl {
|
|
8209
|
+
lView;
|
|
8210
|
+
tView;
|
|
8211
|
+
tNode;
|
|
8212
|
+
hasPassThrough;
|
|
8213
|
+
constructor(lView, tView, tNode) {
|
|
8214
|
+
this.lView = lView;
|
|
8215
|
+
this.tView = tView;
|
|
8216
|
+
this.tNode = tNode;
|
|
8217
|
+
this.hasPassThrough = !!(tNode.flags & 4096);
|
|
8218
|
+
}
|
|
8219
|
+
get customControl() {
|
|
8220
|
+
return this.tNode.customControlIndex !== -1 ? this.lView[this.tNode.customControlIndex] : undefined;
|
|
8221
|
+
}
|
|
8222
|
+
get nativeElement() {
|
|
8223
|
+
return getNativeByTNode(this.tNode, this.lView);
|
|
8224
|
+
}
|
|
8225
|
+
get descriptor() {
|
|
8226
|
+
if (ngDevMode && isComponentHost(this.tNode)) {
|
|
8227
|
+
const componentIndex = this.tNode.directiveStart + this.tNode.componentOffset;
|
|
8228
|
+
const componentDef = this.tView.data[componentIndex];
|
|
8229
|
+
return `Component ${debugStringifyTypeForError(componentDef.type)}`;
|
|
8230
|
+
}
|
|
8231
|
+
return `<${this.tNode.value}>`;
|
|
8232
|
+
}
|
|
8233
|
+
listenToCustomControlOutput(outputName, callback) {
|
|
8234
|
+
const directiveDef = this.tView.data[this.tNode.customControlIndex];
|
|
8235
|
+
listenToDirectiveOutput(this.tNode, this.lView, directiveDef, outputName, wrapListener(this.tNode, this.lView, callback));
|
|
8236
|
+
}
|
|
8237
|
+
listenToCustomControlModel(listener) {
|
|
8238
|
+
const modelName = this.tNode.flags & 1024 ? 'valueChange' : 'checkedChange';
|
|
8239
|
+
const directiveDef = this.tView.data[this.tNode.customControlIndex];
|
|
8240
|
+
listenToDirectiveOutput(this.tNode, this.lView, directiveDef, modelName, wrapListener(this.tNode, this.lView, listener));
|
|
8241
|
+
}
|
|
8242
|
+
listenToDom(eventName, listener) {
|
|
8243
|
+
listenToDomEvent(this.tNode, this.tView, this.lView, undefined, this.lView[RENDERER], eventName, listener, wrapListener(this.tNode, this.lView, listener));
|
|
8244
|
+
}
|
|
8245
|
+
setInputOnDirectives(inputName, value) {
|
|
8246
|
+
const directiveIndices = this.tNode.inputs?.[inputName];
|
|
8247
|
+
const hostDirectiveInputs = this.tNode.hostDirectiveInputs?.[inputName];
|
|
8248
|
+
if (!directiveIndices && !hostDirectiveInputs) {
|
|
8249
|
+
return false;
|
|
8250
|
+
}
|
|
8251
|
+
let wasSet = false;
|
|
8252
|
+
if (directiveIndices) {
|
|
8253
|
+
for (const index of directiveIndices) {
|
|
8254
|
+
if (index === this.tNode.controlDirectiveIndex) {
|
|
8255
|
+
continue;
|
|
8256
|
+
}
|
|
8257
|
+
const directiveDef = this.tView.data[index];
|
|
8258
|
+
const directive = this.lView[index];
|
|
8259
|
+
writeToDirectiveInput(directiveDef, directive, inputName, value);
|
|
8260
|
+
wasSet = true;
|
|
8261
|
+
}
|
|
8262
|
+
}
|
|
8263
|
+
if (hostDirectiveInputs) {
|
|
8264
|
+
for (let i = 0; i < hostDirectiveInputs.length; i += 2) {
|
|
8265
|
+
const index = hostDirectiveInputs[i];
|
|
8266
|
+
if (index === this.tNode.controlDirectiveIndex) {
|
|
8267
|
+
continue;
|
|
8268
|
+
}
|
|
8269
|
+
const internalName = hostDirectiveInputs[i + 1];
|
|
8270
|
+
const directiveDef = this.tView.data[index];
|
|
8271
|
+
const directive = this.lView[index];
|
|
8272
|
+
writeToDirectiveInput(directiveDef, directive, internalName, value);
|
|
8273
|
+
wasSet = true;
|
|
8274
|
+
}
|
|
8275
|
+
}
|
|
8276
|
+
return wasSet;
|
|
8277
|
+
}
|
|
8278
|
+
setCustomControlModelInput(value) {
|
|
8279
|
+
const directiveDef = this.tView.data[this.tNode.customControlIndex];
|
|
8280
|
+
const modelName = this.tNode.flags & 1024 ? 'value' : 'checked';
|
|
8281
|
+
setDirectiveInput(this.tNode, this.tView, this.lView, directiveDef, modelName, value);
|
|
8282
|
+
}
|
|
8283
|
+
customControlHasInput(inputName) {
|
|
8284
|
+
if (this.tNode.customControlIndex === -1) {
|
|
8285
|
+
return false;
|
|
8286
|
+
}
|
|
8287
|
+
const directiveDef = this.tView.data[this.tNode.customControlIndex];
|
|
8288
|
+
const presence = directiveDef.signalFormsInputPresence ??= this._buildCustomControlInputCache(directiveDef);
|
|
8289
|
+
return presence[inputName] === true;
|
|
8290
|
+
}
|
|
8291
|
+
_buildCustomControlInputCache(directiveDef) {
|
|
8292
|
+
const cache = {};
|
|
8293
|
+
for (const key in directiveDef.inputs) {
|
|
8294
|
+
cache[key] = true;
|
|
8295
|
+
}
|
|
8296
|
+
if (directiveDef.hostDirectives !== null) {
|
|
8297
|
+
const queue = [...directiveDef.hostDirectives];
|
|
8298
|
+
while (queue.length > 0) {
|
|
8299
|
+
const hostDir = queue.shift();
|
|
8300
|
+
if (typeof hostDir !== 'function') {
|
|
8301
|
+
for (const key in hostDir.inputs) {
|
|
8302
|
+
cache[hostDir.inputs[key]] = true;
|
|
8303
|
+
}
|
|
8304
|
+
const hostDirectives = getHostDirectives(hostDir.directive);
|
|
8305
|
+
if (hostDirectives !== null) {
|
|
8306
|
+
queue.push(...hostDirectives);
|
|
8307
|
+
}
|
|
8308
|
+
continue;
|
|
8309
|
+
}
|
|
8310
|
+
for (const config of hostDir()) {
|
|
8311
|
+
if (typeof config === 'function') {
|
|
8312
|
+
continue;
|
|
8313
|
+
}
|
|
8314
|
+
if (config.inputs) {
|
|
8315
|
+
for (let i = 0; i < config.inputs.length; i += 2) {
|
|
8316
|
+
const exposedName = config.inputs[i + 1] || config.inputs[i];
|
|
8317
|
+
cache[exposedName] = true;
|
|
8318
|
+
}
|
|
8319
|
+
}
|
|
8320
|
+
const hostDirectives = getHostDirectives(config.directive);
|
|
8321
|
+
if (hostDirectives !== null) {
|
|
8322
|
+
queue.push(...hostDirectives);
|
|
8323
|
+
}
|
|
8324
|
+
}
|
|
8325
|
+
}
|
|
8326
|
+
}
|
|
8327
|
+
return cache;
|
|
8328
|
+
}
|
|
8329
|
+
}
|
|
8330
|
+
function getHostDirectives(directiveType) {
|
|
8331
|
+
if (typeof directiveType === 'function' && 'ɵdir' in directiveType) {
|
|
8332
|
+
return directiveType.ɵdir.hostDirectives ?? null;
|
|
8333
|
+
}
|
|
8334
|
+
return null;
|
|
8335
|
+
}
|
|
8336
|
+
function initializeControlFirstCreatePass(tView, tNode, lView) {
|
|
8337
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
8338
|
+
for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {
|
|
8339
|
+
const directiveDef = tView.data[i];
|
|
8340
|
+
if (directiveDef.controlDef) {
|
|
8341
|
+
tNode.controlDirectiveIndex = i;
|
|
8342
|
+
break;
|
|
8343
|
+
}
|
|
8344
|
+
}
|
|
8345
|
+
if (tNode.controlDirectiveIndex === -1) {
|
|
8346
|
+
return;
|
|
8347
|
+
}
|
|
8348
|
+
const controlDef = tView.data[tNode.controlDirectiveIndex].controlDef;
|
|
8349
|
+
if (controlDef.passThroughInput) {
|
|
8350
|
+
if ((tNode.inputs?.[controlDef.passThroughInput]?.length ?? 0) > 1) {
|
|
8351
|
+
tNode.flags |= 4096;
|
|
8352
|
+
return;
|
|
8353
|
+
}
|
|
8354
|
+
}
|
|
8355
|
+
initializeCustomControlStatus(tView, tNode);
|
|
8356
|
+
}
|
|
8357
|
+
function initializeCustomControlStatus(tView, tNode) {
|
|
8358
|
+
for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {
|
|
8359
|
+
const directiveDef = tView.data[i];
|
|
8360
|
+
if (tNode.directiveToIndex && !tNode.directiveToIndex.has(directiveDef.type)) {
|
|
8361
|
+
continue;
|
|
8362
|
+
}
|
|
8363
|
+
if (hasModelInput(directiveDef, 'value')) {
|
|
8364
|
+
tNode.flags |= 1024;
|
|
8365
|
+
tNode.customControlIndex = i;
|
|
8366
|
+
return;
|
|
8367
|
+
}
|
|
8368
|
+
if (hasModelInput(directiveDef, 'checked')) {
|
|
8369
|
+
tNode.flags |= 2048;
|
|
8370
|
+
tNode.customControlIndex = i;
|
|
8371
|
+
return;
|
|
8372
|
+
}
|
|
8373
|
+
}
|
|
8374
|
+
if (tNode.hostDirectiveInputs !== null && tNode.hostDirectiveOutputs !== null && tNode.directiveToIndex !== null) {
|
|
8375
|
+
const checkModel = (modelName, flag) => {
|
|
8376
|
+
const inputs = tNode.hostDirectiveInputs[modelName];
|
|
8377
|
+
const outputs = tNode.hostDirectiveOutputs[modelName + 'Change'];
|
|
8378
|
+
if (!inputs || !outputs) {
|
|
8379
|
+
return false;
|
|
8380
|
+
}
|
|
8381
|
+
for (let i = 0; i < inputs.length; i += 2) {
|
|
8382
|
+
const inputIndex = inputs[i];
|
|
8383
|
+
for (let j = 0; j < outputs.length; j += 2) {
|
|
8384
|
+
const outputIndex = outputs[j];
|
|
8385
|
+
if (inputIndex !== outputIndex) {
|
|
8386
|
+
continue;
|
|
8387
|
+
}
|
|
8388
|
+
for (const data of tNode.directiveToIndex.values()) {
|
|
8389
|
+
if (!Array.isArray(data)) {
|
|
8390
|
+
continue;
|
|
8391
|
+
}
|
|
8392
|
+
const [hostIndex, start, end] = data;
|
|
8393
|
+
if (inputIndex >= start && inputIndex <= end) {
|
|
8394
|
+
tNode.flags |= flag;
|
|
8395
|
+
tNode.customControlIndex = hostIndex;
|
|
8396
|
+
return true;
|
|
8397
|
+
}
|
|
8398
|
+
}
|
|
8399
|
+
}
|
|
8400
|
+
}
|
|
8401
|
+
return false;
|
|
8402
|
+
};
|
|
8403
|
+
if (checkModel('value', 1024)) {
|
|
8404
|
+
return;
|
|
8405
|
+
}
|
|
8406
|
+
if (checkModel('checked', 2048)) {
|
|
8407
|
+
return;
|
|
8408
|
+
}
|
|
8409
|
+
}
|
|
8411
8410
|
}
|
|
8412
|
-
function
|
|
8413
|
-
|
|
8414
|
-
const instance = lView[directiveIndex];
|
|
8415
|
-
const tView = lView[TVIEW];
|
|
8416
|
-
const def = tView.data[directiveIndex];
|
|
8417
|
-
const propertyName = def.outputs[lookupName];
|
|
8418
|
-
const output = instance[propertyName];
|
|
8419
|
-
if (ngDevMode && !isOutputSubscribable(output)) {
|
|
8420
|
-
throw new Error(`@Output ${propertyName} not initialized in '${instance.constructor.name}'.`);
|
|
8421
|
-
}
|
|
8422
|
-
const subscription = output.subscribe(listenerFn);
|
|
8423
|
-
storeListenerCleanup(tNode.index, tView, lView, eventName, listenerFn, subscription, true);
|
|
8411
|
+
function hasModelInput(directiveDef, name) {
|
|
8412
|
+
return hasInput(directiveDef, name) && hasOutput(directiveDef, name + 'Change');
|
|
8424
8413
|
}
|
|
8425
|
-
function
|
|
8426
|
-
return
|
|
8414
|
+
function hasInput(directiveDef, name) {
|
|
8415
|
+
return name in directiveDef.inputs;
|
|
8427
8416
|
}
|
|
8428
|
-
|
|
8429
|
-
|
|
8430
|
-
controlCreateInternal();
|
|
8417
|
+
function hasOutput(directiveDef, name) {
|
|
8418
|
+
return name in directiveDef.outputs;
|
|
8431
8419
|
}
|
|
8432
|
-
|
|
8420
|
+
|
|
8421
|
+
const BINDING = /* @__PURE__ */Symbol('BINDING');
|
|
8422
|
+
const INPUT_BINDING_METADATA = {
|
|
8423
|
+
kind: 'input',
|
|
8424
|
+
requiredVars: 1
|
|
8425
|
+
};
|
|
8426
|
+
const OUTPUT_BINDING_METADATA = {
|
|
8427
|
+
kind: 'output',
|
|
8428
|
+
requiredVars: 0
|
|
8429
|
+
};
|
|
8430
|
+
function inputBindingUpdate(targetDirectiveIdx, publicName, value) {
|
|
8433
8431
|
const lView = getLView();
|
|
8434
|
-
const
|
|
8435
|
-
|
|
8436
|
-
|
|
8437
|
-
|
|
8432
|
+
const bindingIndex = nextBindingIndex();
|
|
8433
|
+
if (bindingUpdated(lView, bindingIndex, value)) {
|
|
8434
|
+
const tView = lView[TVIEW];
|
|
8435
|
+
const tNode = getSelectedTNode();
|
|
8436
|
+
const componentLView = getComponentLViewByIndex(tNode.index, lView);
|
|
8437
|
+
markViewDirty(componentLView, 1);
|
|
8438
|
+
const targetDef = tView.directiveRegistry[targetDirectiveIdx];
|
|
8439
|
+
if (ngDevMode && !targetDef) {
|
|
8440
|
+
throw new RuntimeError(315, `Input binding to property "${publicName}" does not have a target.`);
|
|
8441
|
+
}
|
|
8442
|
+
const hasSet = setDirectiveInput(tNode, tView, lView, targetDef, publicName, value);
|
|
8443
|
+
if (ngDevMode) {
|
|
8444
|
+
if (!hasSet) {
|
|
8445
|
+
throw new RuntimeError(315, `${stringifyForError(targetDef.type)} does not have an input with a public name of "${publicName}".`);
|
|
8446
|
+
}
|
|
8447
|
+
storePropertyBindingMetadata(tView.data, tNode, publicName, bindingIndex);
|
|
8448
|
+
}
|
|
8438
8449
|
}
|
|
8439
|
-
|
|
8440
|
-
|
|
8450
|
+
}
|
|
8451
|
+
function inputBinding(publicName, value) {
|
|
8452
|
+
if (publicName === 'formField') {
|
|
8453
|
+
const binding = {
|
|
8454
|
+
[BINDING]: INPUT_BINDING_METADATA,
|
|
8455
|
+
create: () => {
|
|
8456
|
+
controlCreateInternal();
|
|
8457
|
+
},
|
|
8458
|
+
update: () => {
|
|
8459
|
+
inputBindingUpdate(binding.targetIdx, publicName, value());
|
|
8460
|
+
controlUpdateInternal();
|
|
8461
|
+
}
|
|
8462
|
+
};
|
|
8463
|
+
return binding;
|
|
8441
8464
|
}
|
|
8442
|
-
|
|
8443
|
-
|
|
8444
|
-
|
|
8445
|
-
|
|
8465
|
+
const binding = {
|
|
8466
|
+
[BINDING]: INPUT_BINDING_METADATA,
|
|
8467
|
+
update: () => inputBindingUpdate(binding.targetIdx, publicName, value())
|
|
8468
|
+
};
|
|
8469
|
+
return binding;
|
|
8446
8470
|
}
|
|
8447
|
-
function
|
|
8448
|
-
|
|
8471
|
+
function outputBinding(eventName, listener) {
|
|
8472
|
+
const binding = {
|
|
8473
|
+
[BINDING]: OUTPUT_BINDING_METADATA,
|
|
8474
|
+
create: () => {
|
|
8475
|
+
const lView = getLView();
|
|
8476
|
+
const tNode = getCurrentTNode();
|
|
8477
|
+
const tView = lView[TVIEW];
|
|
8478
|
+
const targetDef = tView.directiveRegistry[binding.targetIdx];
|
|
8479
|
+
createOutputListener(tNode, lView, listener, targetDef, eventName);
|
|
8480
|
+
}
|
|
8481
|
+
};
|
|
8482
|
+
return binding;
|
|
8449
8483
|
}
|
|
8450
|
-
function
|
|
8451
|
-
|
|
8452
|
-
|
|
8484
|
+
function twoWayBinding(publicName, value) {
|
|
8485
|
+
const input = inputBinding(publicName, value);
|
|
8486
|
+
const output = outputBinding(publicName + 'Change', eventValue => value.set(eventValue));
|
|
8487
|
+
ngDevMode && assertNotDefined(input.create, 'Unexpected `create` callback in inputBinding');
|
|
8488
|
+
ngDevMode && assertNotDefined(output.update, 'Unexpected `update` callback in outputBinding');
|
|
8489
|
+
const binding = {
|
|
8490
|
+
[BINDING]: {
|
|
8491
|
+
kind: 'twoWay',
|
|
8492
|
+
requiredVars: input[BINDING].requiredVars + output[BINDING].requiredVars
|
|
8493
|
+
},
|
|
8494
|
+
set targetIdx(idx) {
|
|
8495
|
+
input.targetIdx = idx;
|
|
8496
|
+
output.targetIdx = idx;
|
|
8497
|
+
},
|
|
8498
|
+
create: output.create,
|
|
8499
|
+
update: input.update
|
|
8500
|
+
};
|
|
8501
|
+
return binding;
|
|
8502
|
+
}
|
|
8503
|
+
|
|
8504
|
+
const SHARED_STYLES_HOST = new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'SHARED_STYLES_HOST' : '');
|
|
8505
|
+
|
|
8506
|
+
function computeStaticStyling(tNode, attrs, writeToHost) {
|
|
8507
|
+
ngDevMode && assertFirstCreatePass(getTView(), 'Expecting to be called in first template pass only');
|
|
8508
|
+
let styles = writeToHost ? tNode.styles : null;
|
|
8509
|
+
let classes = writeToHost ? tNode.classes : null;
|
|
8510
|
+
let mode = 0;
|
|
8511
|
+
if (attrs !== null) {
|
|
8512
|
+
for (let i = 0; i < attrs.length; i++) {
|
|
8513
|
+
const value = attrs[i];
|
|
8514
|
+
if (typeof value === 'number') {
|
|
8515
|
+
mode = value;
|
|
8516
|
+
} else if (mode == 1) {
|
|
8517
|
+
classes = concatStringsWithSpace(classes, value);
|
|
8518
|
+
} else if (mode == 2) {
|
|
8519
|
+
const style = value;
|
|
8520
|
+
const styleValue = attrs[++i];
|
|
8521
|
+
styles = concatStringsWithSpace(styles, style + ': ' + styleValue + ';');
|
|
8522
|
+
}
|
|
8523
|
+
}
|
|
8453
8524
|
}
|
|
8525
|
+
writeToHost ? tNode.styles = styles : tNode.stylesWithoutHost = styles;
|
|
8526
|
+
writeToHost ? tNode.classes = classes : tNode.classesWithoutHost = classes;
|
|
8527
|
+
}
|
|
8528
|
+
|
|
8529
|
+
function ɵɵdirectiveInject(token, flags = 0) {
|
|
8454
8530
|
const lView = getLView();
|
|
8455
|
-
|
|
8456
|
-
|
|
8457
|
-
|
|
8458
|
-
return;
|
|
8531
|
+
if (lView === null) {
|
|
8532
|
+
ngDevMode && assertInjectImplementationNotEqual(ɵɵdirectiveInject);
|
|
8533
|
+
return __inject(token, flags);
|
|
8459
8534
|
}
|
|
8460
|
-
const
|
|
8461
|
-
const
|
|
8462
|
-
|
|
8535
|
+
const tNode = getCurrentTNode();
|
|
8536
|
+
const value = getOrCreateInjectable(tNode, lView, resolveForwardRef(token), flags);
|
|
8537
|
+
ngDevMode && emitInjectEvent(token, value, flags);
|
|
8538
|
+
return value;
|
|
8463
8539
|
}
|
|
8464
|
-
|
|
8465
|
-
|
|
8466
|
-
|
|
8467
|
-
|
|
8468
|
-
|
|
8469
|
-
|
|
8470
|
-
|
|
8471
|
-
|
|
8472
|
-
|
|
8473
|
-
|
|
8540
|
+
function ɵɵinvalidFactory() {
|
|
8541
|
+
const msg = ngDevMode ? `This constructor was not compatible with Dependency Injection.` : 'invalid';
|
|
8542
|
+
throw new Error(msg);
|
|
8543
|
+
}
|
|
8544
|
+
|
|
8545
|
+
function resolveDirectives(tView, lView, tNode, localRefs, directiveMatcher) {
|
|
8546
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
8547
|
+
const exportsMap = localRefs === null ? null : {
|
|
8548
|
+
'': -1
|
|
8549
|
+
};
|
|
8550
|
+
const matchedDirectiveDefs = directiveMatcher(tView, tNode);
|
|
8551
|
+
if (matchedDirectiveDefs !== null) {
|
|
8552
|
+
let directiveDefs = matchedDirectiveDefs;
|
|
8553
|
+
let hostDirectiveDefs = null;
|
|
8554
|
+
let hostDirectiveRanges = null;
|
|
8555
|
+
for (const def of matchedDirectiveDefs) {
|
|
8556
|
+
if (def.resolveHostDirectives !== null) {
|
|
8557
|
+
[directiveDefs, hostDirectiveDefs, hostDirectiveRanges] = def.resolveHostDirectives(matchedDirectiveDefs);
|
|
8558
|
+
break;
|
|
8559
|
+
}
|
|
8560
|
+
}
|
|
8561
|
+
ngDevMode && assertNoDuplicateDirectives(directiveDefs);
|
|
8562
|
+
initializeDirectives(tView, lView, tNode, directiveDefs, exportsMap, hostDirectiveDefs, hostDirectiveRanges);
|
|
8474
8563
|
}
|
|
8475
|
-
|
|
8476
|
-
|
|
8564
|
+
if (exportsMap !== null && localRefs !== null) {
|
|
8565
|
+
cacheMatchingLocalNames(tNode, localRefs, exportsMap);
|
|
8477
8566
|
}
|
|
8478
|
-
|
|
8479
|
-
|
|
8567
|
+
}
|
|
8568
|
+
function cacheMatchingLocalNames(tNode, localRefs, exportsMap) {
|
|
8569
|
+
const localNames = tNode.localNames = [];
|
|
8570
|
+
for (let i = 0; i < localRefs.length; i += 2) {
|
|
8571
|
+
const index = exportsMap[localRefs[i + 1]];
|
|
8572
|
+
if (index == null) throw new RuntimeError(-301, ngDevMode && `Export of name '${localRefs[i + 1]}' not found!`);
|
|
8573
|
+
localNames.push(localRefs[i], index);
|
|
8480
8574
|
}
|
|
8481
|
-
|
|
8482
|
-
|
|
8483
|
-
|
|
8484
|
-
|
|
8485
|
-
|
|
8575
|
+
}
|
|
8576
|
+
function markAsComponentHost(tView, hostTNode, componentOffset) {
|
|
8577
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
8578
|
+
ngDevMode && assertGreaterThan(componentOffset, -1, 'componentOffset must be great than -1');
|
|
8579
|
+
hostTNode.componentOffset = componentOffset;
|
|
8580
|
+
(tView.components ??= []).push(hostTNode.index);
|
|
8581
|
+
}
|
|
8582
|
+
function initializeDirectives(tView, lView, tNode, directives, exportsMap, hostDirectiveDefs, hostDirectiveRanges) {
|
|
8583
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
8584
|
+
const directivesLength = directives.length;
|
|
8585
|
+
let componentDef = null;
|
|
8586
|
+
for (let i = 0; i < directivesLength; i++) {
|
|
8587
|
+
const def = directives[i];
|
|
8588
|
+
if (componentDef === null && isComponentDef(def)) {
|
|
8589
|
+
componentDef = def;
|
|
8590
|
+
markAsComponentHost(tView, tNode, i);
|
|
8486
8591
|
}
|
|
8487
|
-
|
|
8592
|
+
diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, def.type);
|
|
8488
8593
|
}
|
|
8489
|
-
|
|
8490
|
-
|
|
8491
|
-
|
|
8594
|
+
initTNodeFlags(tNode, tView.data.length, directivesLength);
|
|
8595
|
+
if (componentDef?.viewProvidersResolver) {
|
|
8596
|
+
componentDef.viewProvidersResolver(componentDef);
|
|
8492
8597
|
}
|
|
8493
|
-
|
|
8494
|
-
const
|
|
8495
|
-
|
|
8496
|
-
|
|
8598
|
+
for (let i = 0; i < directivesLength; i++) {
|
|
8599
|
+
const def = directives[i];
|
|
8600
|
+
if (def.providersResolver) {
|
|
8601
|
+
def.providersResolver(def);
|
|
8602
|
+
}
|
|
8497
8603
|
}
|
|
8498
|
-
|
|
8499
|
-
|
|
8604
|
+
let preOrderHooksFound = false;
|
|
8605
|
+
let preOrderCheckHooksFound = false;
|
|
8606
|
+
let directiveIdx = allocExpando(tView, lView, directivesLength, null);
|
|
8607
|
+
ngDevMode && assertSame(directiveIdx, tNode.directiveStart, 'TNode.directiveStart should point to just allocated space');
|
|
8608
|
+
if (directivesLength > 0) {
|
|
8609
|
+
tNode.directiveToIndex = new Map();
|
|
8500
8610
|
}
|
|
8501
|
-
|
|
8502
|
-
const
|
|
8503
|
-
|
|
8504
|
-
|
|
8505
|
-
|
|
8611
|
+
for (let i = 0; i < directivesLength; i++) {
|
|
8612
|
+
const def = directives[i];
|
|
8613
|
+
tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);
|
|
8614
|
+
configureViewWithDirective(tView, tNode, lView, directiveIdx, def);
|
|
8615
|
+
saveNameToExportMap(directiveIdx, def, exportsMap);
|
|
8616
|
+
if (hostDirectiveRanges !== null && hostDirectiveRanges.has(def)) {
|
|
8617
|
+
const [start, end] = hostDirectiveRanges.get(def);
|
|
8618
|
+
tNode.directiveToIndex.set(def.type, [directiveIdx, start + tNode.directiveStart, end + tNode.directiveStart]);
|
|
8619
|
+
} else if (hostDirectiveDefs === null || !hostDirectiveDefs.has(def)) {
|
|
8620
|
+
tNode.directiveToIndex.set(def.type, directiveIdx);
|
|
8506
8621
|
}
|
|
8507
|
-
|
|
8508
|
-
if (
|
|
8509
|
-
|
|
8510
|
-
|
|
8511
|
-
|
|
8512
|
-
|
|
8513
|
-
const directiveDef = this.tView.data[index];
|
|
8514
|
-
const directive = this.lView[index];
|
|
8515
|
-
writeToDirectiveInput(directiveDef, directive, inputName, value);
|
|
8516
|
-
wasSet = true;
|
|
8517
|
-
}
|
|
8622
|
+
if (def.contentQueries !== null) tNode.flags |= 4;
|
|
8623
|
+
if (def.hostBindings !== null || def.hostAttrs !== null || def.hostVars !== 0) tNode.flags |= 64;
|
|
8624
|
+
const lifeCycleHooks = def.type.prototype;
|
|
8625
|
+
if (!preOrderHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngOnInit || lifeCycleHooks.ngDoCheck)) {
|
|
8626
|
+
(tView.preOrderHooks ??= []).push(tNode.index);
|
|
8627
|
+
preOrderHooksFound = true;
|
|
8518
8628
|
}
|
|
8519
|
-
if (
|
|
8520
|
-
|
|
8521
|
-
|
|
8522
|
-
if (index === this.tNode.controlDirectiveIndex) {
|
|
8523
|
-
continue;
|
|
8524
|
-
}
|
|
8525
|
-
const internalName = hostDirectiveInputs[i + 1];
|
|
8526
|
-
const directiveDef = this.tView.data[index];
|
|
8527
|
-
const directive = this.lView[index];
|
|
8528
|
-
writeToDirectiveInput(directiveDef, directive, internalName, value);
|
|
8529
|
-
wasSet = true;
|
|
8530
|
-
}
|
|
8629
|
+
if (!preOrderCheckHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngDoCheck)) {
|
|
8630
|
+
(tView.preOrderCheckHooks ??= []).push(tNode.index);
|
|
8631
|
+
preOrderCheckHooksFound = true;
|
|
8531
8632
|
}
|
|
8532
|
-
|
|
8533
|
-
}
|
|
8534
|
-
setCustomControlModelInput(value) {
|
|
8535
|
-
const directiveDef = this.tView.data[this.tNode.customControlIndex];
|
|
8536
|
-
const modelName = this.tNode.flags & 1024 ? 'value' : 'checked';
|
|
8537
|
-
setDirectiveInput(this.tNode, this.tView, this.lView, directiveDef, modelName, value);
|
|
8633
|
+
directiveIdx++;
|
|
8538
8634
|
}
|
|
8539
|
-
|
|
8540
|
-
|
|
8541
|
-
|
|
8635
|
+
initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs);
|
|
8636
|
+
}
|
|
8637
|
+
function initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs) {
|
|
8638
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
8639
|
+
for (let index = tNode.directiveStart; index < tNode.directiveEnd; index++) {
|
|
8640
|
+
const directiveDef = tView.data[index];
|
|
8641
|
+
if (hostDirectiveDefs === null || !hostDirectiveDefs.has(directiveDef)) {
|
|
8642
|
+
setupSelectorMatchedInputsOrOutputs(0, tNode, directiveDef, index);
|
|
8643
|
+
setupSelectorMatchedInputsOrOutputs(1, tNode, directiveDef, index);
|
|
8644
|
+
setupInitialInputs(tNode, index, false);
|
|
8645
|
+
} else {
|
|
8646
|
+
const hostDirectiveDef = hostDirectiveDefs.get(directiveDef);
|
|
8647
|
+
setupHostDirectiveInputsOrOutputs(0, tNode, hostDirectiveDef, index);
|
|
8648
|
+
setupHostDirectiveInputsOrOutputs(1, tNode, hostDirectiveDef, index);
|
|
8649
|
+
setupInitialInputs(tNode, index, true);
|
|
8542
8650
|
}
|
|
8543
|
-
const directiveDef = this.tView.data[this.tNode.customControlIndex];
|
|
8544
|
-
const presence = directiveDef.signalFormsInputPresence ??= this._buildCustomControlInputCache(directiveDef);
|
|
8545
|
-
return presence[inputName] === true;
|
|
8546
8651
|
}
|
|
8547
|
-
|
|
8548
|
-
|
|
8549
|
-
|
|
8550
|
-
|
|
8551
|
-
|
|
8552
|
-
|
|
8553
|
-
|
|
8554
|
-
|
|
8555
|
-
|
|
8556
|
-
|
|
8557
|
-
for (const key in hostDir.inputs) {
|
|
8558
|
-
cache[hostDir.inputs[key]] = true;
|
|
8559
|
-
}
|
|
8560
|
-
const hostDirectives = getHostDirectives(hostDir.directive);
|
|
8561
|
-
if (hostDirectives !== null) {
|
|
8562
|
-
queue.push(...hostDirectives);
|
|
8563
|
-
}
|
|
8564
|
-
continue;
|
|
8565
|
-
}
|
|
8566
|
-
for (const config of hostDir()) {
|
|
8567
|
-
if (typeof config === 'function') {
|
|
8568
|
-
continue;
|
|
8569
|
-
}
|
|
8570
|
-
if (config.inputs) {
|
|
8571
|
-
for (let i = 0; i < config.inputs.length; i += 2) {
|
|
8572
|
-
const exposedName = config.inputs[i + 1] || config.inputs[i];
|
|
8573
|
-
cache[exposedName] = true;
|
|
8574
|
-
}
|
|
8575
|
-
}
|
|
8576
|
-
const hostDirectives = getHostDirectives(config.directive);
|
|
8577
|
-
if (hostDirectives !== null) {
|
|
8578
|
-
queue.push(...hostDirectives);
|
|
8579
|
-
}
|
|
8580
|
-
}
|
|
8652
|
+
}
|
|
8653
|
+
function setupSelectorMatchedInputsOrOutputs(mode, tNode, def, directiveIndex) {
|
|
8654
|
+
const aliasMap = mode === 0 ? def.inputs : def.outputs;
|
|
8655
|
+
for (const publicName in aliasMap) {
|
|
8656
|
+
if (aliasMap.hasOwnProperty(publicName)) {
|
|
8657
|
+
let bindings;
|
|
8658
|
+
if (mode === 0) {
|
|
8659
|
+
bindings = tNode.inputs ??= {};
|
|
8660
|
+
} else {
|
|
8661
|
+
bindings = tNode.outputs ??= {};
|
|
8581
8662
|
}
|
|
8663
|
+
bindings[publicName] ??= [];
|
|
8664
|
+
bindings[publicName].push(directiveIndex);
|
|
8665
|
+
setShadowStylingInputFlags(tNode, publicName);
|
|
8582
8666
|
}
|
|
8583
|
-
return cache;
|
|
8584
8667
|
}
|
|
8585
8668
|
}
|
|
8586
|
-
function
|
|
8587
|
-
|
|
8588
|
-
|
|
8669
|
+
function setupHostDirectiveInputsOrOutputs(mode, tNode, config, directiveIndex) {
|
|
8670
|
+
const aliasMap = mode === 0 ? config.inputs : config.outputs;
|
|
8671
|
+
for (const initialName in aliasMap) {
|
|
8672
|
+
if (aliasMap.hasOwnProperty(initialName)) {
|
|
8673
|
+
const publicName = aliasMap[initialName];
|
|
8674
|
+
let bindings;
|
|
8675
|
+
if (mode === 0) {
|
|
8676
|
+
bindings = tNode.hostDirectiveInputs ??= {};
|
|
8677
|
+
} else {
|
|
8678
|
+
bindings = tNode.hostDirectiveOutputs ??= {};
|
|
8679
|
+
}
|
|
8680
|
+
bindings[publicName] ??= [];
|
|
8681
|
+
bindings[publicName].push(directiveIndex, initialName);
|
|
8682
|
+
setShadowStylingInputFlags(tNode, publicName);
|
|
8683
|
+
}
|
|
8589
8684
|
}
|
|
8590
|
-
return null;
|
|
8591
8685
|
}
|
|
8592
|
-
function
|
|
8593
|
-
|
|
8594
|
-
|
|
8595
|
-
|
|
8596
|
-
|
|
8597
|
-
tNode.controlDirectiveIndex = i;
|
|
8598
|
-
break;
|
|
8599
|
-
}
|
|
8686
|
+
function setShadowStylingInputFlags(tNode, publicName) {
|
|
8687
|
+
if (publicName === 'class') {
|
|
8688
|
+
tNode.flags |= 8;
|
|
8689
|
+
} else if (publicName === 'style') {
|
|
8690
|
+
tNode.flags |= 16;
|
|
8600
8691
|
}
|
|
8601
|
-
|
|
8692
|
+
}
|
|
8693
|
+
function setupInitialInputs(tNode, directiveIndex, isHostDirective) {
|
|
8694
|
+
const {
|
|
8695
|
+
attrs,
|
|
8696
|
+
inputs,
|
|
8697
|
+
hostDirectiveInputs
|
|
8698
|
+
} = tNode;
|
|
8699
|
+
if (attrs === null || !isHostDirective && inputs === null || isHostDirective && hostDirectiveInputs === null || isInlineTemplate(tNode)) {
|
|
8700
|
+
tNode.initialInputs ??= [];
|
|
8701
|
+
tNode.initialInputs.push(null);
|
|
8602
8702
|
return;
|
|
8603
8703
|
}
|
|
8604
|
-
|
|
8605
|
-
|
|
8606
|
-
|
|
8607
|
-
|
|
8608
|
-
|
|
8609
|
-
|
|
8610
|
-
}
|
|
8611
|
-
initializeCustomControlStatus(tView, tNode);
|
|
8612
|
-
}
|
|
8613
|
-
function initializeCustomControlStatus(tView, tNode) {
|
|
8614
|
-
for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {
|
|
8615
|
-
const directiveDef = tView.data[i];
|
|
8616
|
-
if (tNode.directiveToIndex && !tNode.directiveToIndex.has(directiveDef.type)) {
|
|
8704
|
+
let inputsToStore = null;
|
|
8705
|
+
let i = 0;
|
|
8706
|
+
while (i < attrs.length) {
|
|
8707
|
+
const attrName = attrs[i];
|
|
8708
|
+
if (attrName === 0) {
|
|
8709
|
+
i += 4;
|
|
8617
8710
|
continue;
|
|
8711
|
+
} else if (attrName === 5) {
|
|
8712
|
+
i += 2;
|
|
8713
|
+
continue;
|
|
8714
|
+
} else if (typeof attrName === 'number') {
|
|
8715
|
+
break;
|
|
8618
8716
|
}
|
|
8619
|
-
if (
|
|
8620
|
-
|
|
8621
|
-
|
|
8622
|
-
|
|
8623
|
-
|
|
8624
|
-
|
|
8625
|
-
|
|
8626
|
-
|
|
8627
|
-
|
|
8628
|
-
}
|
|
8629
|
-
|
|
8630
|
-
|
|
8631
|
-
|
|
8632
|
-
|
|
8633
|
-
|
|
8634
|
-
|
|
8635
|
-
return false;
|
|
8636
|
-
}
|
|
8637
|
-
for (let i = 0; i < inputs.length; i += 2) {
|
|
8638
|
-
const inputIndex = inputs[i];
|
|
8639
|
-
for (let j = 0; j < outputs.length; j += 2) {
|
|
8640
|
-
const outputIndex = outputs[j];
|
|
8641
|
-
if (inputIndex !== outputIndex) {
|
|
8642
|
-
continue;
|
|
8643
|
-
}
|
|
8644
|
-
for (const data of tNode.directiveToIndex.values()) {
|
|
8645
|
-
if (!Array.isArray(data)) {
|
|
8646
|
-
continue;
|
|
8647
|
-
}
|
|
8648
|
-
const [hostIndex, start, end] = data;
|
|
8649
|
-
if (inputIndex >= start && inputIndex <= end) {
|
|
8650
|
-
tNode.flags |= flag;
|
|
8651
|
-
tNode.customControlIndex = hostIndex;
|
|
8652
|
-
return true;
|
|
8653
|
-
}
|
|
8654
|
-
}
|
|
8717
|
+
if (!isHostDirective && inputs.hasOwnProperty(attrName)) {
|
|
8718
|
+
const inputConfig = inputs[attrName];
|
|
8719
|
+
for (const index of inputConfig) {
|
|
8720
|
+
if (index === directiveIndex) {
|
|
8721
|
+
inputsToStore ??= [];
|
|
8722
|
+
inputsToStore.push(attrName, attrs[i + 1]);
|
|
8723
|
+
break;
|
|
8724
|
+
}
|
|
8725
|
+
}
|
|
8726
|
+
} else if (isHostDirective && hostDirectiveInputs.hasOwnProperty(attrName)) {
|
|
8727
|
+
const config = hostDirectiveInputs[attrName];
|
|
8728
|
+
for (let j = 0; j < config.length; j += 2) {
|
|
8729
|
+
if (config[j] === directiveIndex) {
|
|
8730
|
+
inputsToStore ??= [];
|
|
8731
|
+
inputsToStore.push(config[j + 1], attrs[i + 1]);
|
|
8732
|
+
break;
|
|
8655
8733
|
}
|
|
8656
8734
|
}
|
|
8657
|
-
return false;
|
|
8658
|
-
};
|
|
8659
|
-
if (checkModel('value', 1024)) {
|
|
8660
|
-
return;
|
|
8661
|
-
}
|
|
8662
|
-
if (checkModel('checked', 2048)) {
|
|
8663
|
-
return;
|
|
8664
8735
|
}
|
|
8736
|
+
i += 2;
|
|
8665
8737
|
}
|
|
8738
|
+
tNode.initialInputs ??= [];
|
|
8739
|
+
tNode.initialInputs.push(inputsToStore);
|
|
8666
8740
|
}
|
|
8667
|
-
function
|
|
8668
|
-
|
|
8669
|
-
|
|
8670
|
-
|
|
8671
|
-
|
|
8672
|
-
|
|
8673
|
-
|
|
8674
|
-
|
|
8741
|
+
function configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {
|
|
8742
|
+
ngDevMode && assertGreaterThanOrEqual(directiveIndex, HEADER_OFFSET, 'Must be in Expando section');
|
|
8743
|
+
tView.data[directiveIndex] = def;
|
|
8744
|
+
const directiveFactory = def.factory || (def.factory = getFactoryDef(def.type, true));
|
|
8745
|
+
const nodeInjectorFactory = new NodeInjectorFactory(directiveFactory, isComponentDef(def), ɵɵdirectiveInject, ngDevMode ? def.type.name : null);
|
|
8746
|
+
tView.blueprint[directiveIndex] = nodeInjectorFactory;
|
|
8747
|
+
lView[directiveIndex] = nodeInjectorFactory;
|
|
8748
|
+
registerHostBindingOpCodes(tView, tNode, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);
|
|
8675
8749
|
}
|
|
8676
|
-
|
|
8677
|
-
|
|
8678
|
-
const
|
|
8679
|
-
|
|
8680
|
-
|
|
8681
|
-
|
|
8682
|
-
|
|
8683
|
-
kind: 'output',
|
|
8684
|
-
requiredVars: 0
|
|
8685
|
-
};
|
|
8686
|
-
function inputBindingUpdate(targetDirectiveIdx, publicName, value) {
|
|
8687
|
-
const lView = getLView();
|
|
8688
|
-
const bindingIndex = nextBindingIndex();
|
|
8689
|
-
if (bindingUpdated(lView, bindingIndex, value)) {
|
|
8690
|
-
const tView = lView[TVIEW];
|
|
8691
|
-
const tNode = getSelectedTNode();
|
|
8692
|
-
const componentLView = getComponentLViewByIndex(tNode.index, lView);
|
|
8693
|
-
markViewDirty(componentLView, 1);
|
|
8694
|
-
const targetDef = tView.directiveRegistry[targetDirectiveIdx];
|
|
8695
|
-
if (ngDevMode && !targetDef) {
|
|
8696
|
-
throw new RuntimeError(315, `Input binding to property "${publicName}" does not have a target.`);
|
|
8750
|
+
function registerHostBindingOpCodes(tView, tNode, directiveIdx, directiveVarsIdx, def) {
|
|
8751
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
8752
|
+
const hostBindings = def.hostBindings;
|
|
8753
|
+
if (hostBindings) {
|
|
8754
|
+
let hostBindingOpCodes = tView.hostBindingOpCodes;
|
|
8755
|
+
if (hostBindingOpCodes === null) {
|
|
8756
|
+
hostBindingOpCodes = tView.hostBindingOpCodes = [];
|
|
8697
8757
|
}
|
|
8698
|
-
const
|
|
8699
|
-
if (
|
|
8700
|
-
|
|
8701
|
-
throw new RuntimeError(315, `${stringifyForError(targetDef.type)} does not have an input with a public name of "${publicName}".`);
|
|
8702
|
-
}
|
|
8703
|
-
storePropertyBindingMetadata(tView.data, tNode, publicName, bindingIndex);
|
|
8758
|
+
const elementIndx = ~tNode.index;
|
|
8759
|
+
if (lastSelectedElementIdx(hostBindingOpCodes) != elementIndx) {
|
|
8760
|
+
hostBindingOpCodes.push(elementIndx);
|
|
8704
8761
|
}
|
|
8762
|
+
hostBindingOpCodes.push(directiveIdx, directiveVarsIdx, hostBindings);
|
|
8705
8763
|
}
|
|
8706
8764
|
}
|
|
8707
|
-
function
|
|
8708
|
-
|
|
8709
|
-
|
|
8710
|
-
|
|
8711
|
-
|
|
8712
|
-
|
|
8713
|
-
|
|
8714
|
-
update: () => {
|
|
8715
|
-
inputBindingUpdate(binding.targetIdx, publicName, value());
|
|
8716
|
-
controlUpdateInternal();
|
|
8717
|
-
}
|
|
8718
|
-
};
|
|
8719
|
-
return binding;
|
|
8765
|
+
function lastSelectedElementIdx(hostBindingOpCodes) {
|
|
8766
|
+
let i = hostBindingOpCodes.length;
|
|
8767
|
+
while (i > 0) {
|
|
8768
|
+
const value = hostBindingOpCodes[--i];
|
|
8769
|
+
if (typeof value === 'number' && value < 0) {
|
|
8770
|
+
return value;
|
|
8771
|
+
}
|
|
8720
8772
|
}
|
|
8721
|
-
|
|
8722
|
-
[BINDING]: INPUT_BINDING_METADATA,
|
|
8723
|
-
update: () => inputBindingUpdate(binding.targetIdx, publicName, value())
|
|
8724
|
-
};
|
|
8725
|
-
return binding;
|
|
8773
|
+
return 0;
|
|
8726
8774
|
}
|
|
8727
|
-
function
|
|
8728
|
-
|
|
8729
|
-
|
|
8730
|
-
|
|
8731
|
-
|
|
8732
|
-
|
|
8733
|
-
const tView = lView[TVIEW];
|
|
8734
|
-
const targetDef = tView.directiveRegistry[binding.targetIdx];
|
|
8735
|
-
createOutputListener(tNode, lView, listener, targetDef, eventName);
|
|
8775
|
+
function saveNameToExportMap(directiveIdx, def, exportsMap) {
|
|
8776
|
+
if (exportsMap) {
|
|
8777
|
+
if (def.exportAs) {
|
|
8778
|
+
for (let i = 0; i < def.exportAs.length; i++) {
|
|
8779
|
+
exportsMap[def.exportAs[i]] = directiveIdx;
|
|
8780
|
+
}
|
|
8736
8781
|
}
|
|
8737
|
-
|
|
8738
|
-
|
|
8782
|
+
if (isComponentDef(def)) exportsMap[''] = directiveIdx;
|
|
8783
|
+
}
|
|
8739
8784
|
}
|
|
8740
|
-
function
|
|
8741
|
-
|
|
8742
|
-
|
|
8743
|
-
|
|
8744
|
-
|
|
8745
|
-
|
|
8746
|
-
[BINDING]: {
|
|
8747
|
-
kind: 'twoWay',
|
|
8748
|
-
requiredVars: input[BINDING].requiredVars + output[BINDING].requiredVars
|
|
8749
|
-
},
|
|
8750
|
-
set targetIdx(idx) {
|
|
8751
|
-
input.targetIdx = idx;
|
|
8752
|
-
output.targetIdx = idx;
|
|
8753
|
-
},
|
|
8754
|
-
create: output.create,
|
|
8755
|
-
update: input.update
|
|
8756
|
-
};
|
|
8757
|
-
return binding;
|
|
8785
|
+
function initTNodeFlags(tNode, index, numberOfDirectives) {
|
|
8786
|
+
ngDevMode && assertNotEqual(numberOfDirectives, tNode.directiveEnd - tNode.directiveStart, 'Reached the max number of directives');
|
|
8787
|
+
tNode.flags |= 1;
|
|
8788
|
+
tNode.directiveStart = index;
|
|
8789
|
+
tNode.directiveEnd = index + numberOfDirectives;
|
|
8790
|
+
tNode.providerIndexes = index;
|
|
8758
8791
|
}
|
|
8759
|
-
|
|
8760
|
-
|
|
8761
|
-
|
|
8762
|
-
|
|
8763
|
-
|
|
8764
|
-
|
|
8765
|
-
|
|
8766
|
-
|
|
8767
|
-
if (!isLView(current) && !isLContainer(current) || current[HOST] !== currentNode) {
|
|
8768
|
-
continue;
|
|
8769
|
-
}
|
|
8770
|
-
const tView = lView[TVIEW];
|
|
8771
|
-
const tNode = getTNode(tView, i);
|
|
8772
|
-
if (isComponentHost(tNode)) {
|
|
8773
|
-
const def = tView.data[tNode.directiveStart + tNode.componentOffset];
|
|
8774
|
-
const name = getComponentName(def);
|
|
8775
|
-
if (name !== null) {
|
|
8776
|
-
return name;
|
|
8777
|
-
} else {
|
|
8778
|
-
break;
|
|
8779
|
-
}
|
|
8780
|
-
}
|
|
8781
|
-
}
|
|
8792
|
+
function assertNoDuplicateDirectives(directives) {
|
|
8793
|
+
if (directives.length < 2) {
|
|
8794
|
+
return;
|
|
8795
|
+
}
|
|
8796
|
+
const seenDirectives = new Set();
|
|
8797
|
+
for (const current of directives) {
|
|
8798
|
+
if (seenDirectives.has(current)) {
|
|
8799
|
+
throw new RuntimeError(309, `Directive ${current.type.name} matches multiple times on the same element. ` + `Directives can only match an element once.`);
|
|
8782
8800
|
}
|
|
8783
|
-
|
|
8801
|
+
seenDirectives.add(current);
|
|
8784
8802
|
}
|
|
8785
|
-
return null;
|
|
8786
|
-
}
|
|
8787
|
-
function getComponentName(def) {
|
|
8788
|
-
return def.debugInfo?.className || def.type.name || null;
|
|
8789
8803
|
}
|
|
8790
8804
|
|
|
8791
|
-
|
|
8792
|
-
|
|
8793
|
-
|
|
8794
|
-
|
|
8795
|
-
|
|
8805
|
+
function directiveHostFirstCreatePass(index, lView, type, name, directiveMatcher, bindingsEnabled, attrsIndex, localRefsIndex) {
|
|
8806
|
+
const tView = lView[TVIEW];
|
|
8807
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
8808
|
+
const tViewConsts = tView.consts;
|
|
8809
|
+
const attrs = getConstant(tViewConsts, attrsIndex);
|
|
8810
|
+
const tNode = getOrCreateTNode(tView, index, type, name, attrs);
|
|
8811
|
+
if (bindingsEnabled) {
|
|
8812
|
+
resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex), directiveMatcher);
|
|
8813
|
+
}
|
|
8814
|
+
tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);
|
|
8815
|
+
if (tNode.attrs !== null) {
|
|
8816
|
+
computeStaticStyling(tNode, tNode.attrs, false);
|
|
8817
|
+
}
|
|
8818
|
+
if (tNode.mergedAttrs !== null) {
|
|
8819
|
+
computeStaticStyling(tNode, tNode.mergedAttrs, true);
|
|
8820
|
+
}
|
|
8821
|
+
if (tView.queries !== null) {
|
|
8822
|
+
tView.queries.elementStart(tView, tNode);
|
|
8823
|
+
}
|
|
8824
|
+
return tNode;
|
|
8825
|
+
}
|
|
8826
|
+
function directiveHostEndFirstCreatePass(tView, tNode) {
|
|
8827
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
8828
|
+
registerPostOrderHooks(tView, tNode);
|
|
8829
|
+
if (isContentQueryHost(tNode)) {
|
|
8830
|
+
tView.queries.elementEnd(tNode);
|
|
8831
|
+
}
|
|
8832
|
+
}
|
|
8833
|
+
function domOnlyFirstCreatePass(index, tView, type, name, attrsIndex, localRefsIndex) {
|
|
8834
|
+
ngDevMode && assertFirstCreatePass(tView);
|
|
8835
|
+
const tViewConsts = tView.consts;
|
|
8836
|
+
const attrs = getConstant(tViewConsts, attrsIndex);
|
|
8837
|
+
const tNode = getOrCreateTNode(tView, index, type, name, attrs);
|
|
8838
|
+
tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);
|
|
8839
|
+
if (localRefsIndex != null) {
|
|
8840
|
+
const refs = getConstant(tViewConsts, localRefsIndex);
|
|
8841
|
+
tNode.localNames = [];
|
|
8842
|
+
for (let i = 0; i < refs.length; i += 2) {
|
|
8843
|
+
tNode.localNames.push(refs[i], -1);
|
|
8844
|
+
}
|
|
8845
|
+
}
|
|
8846
|
+
if (tNode.attrs !== null) {
|
|
8847
|
+
computeStaticStyling(tNode, tNode.attrs, false);
|
|
8848
|
+
}
|
|
8849
|
+
if (tNode.mergedAttrs !== null) {
|
|
8850
|
+
computeStaticStyling(tNode, tNode.mergedAttrs, true);
|
|
8796
8851
|
}
|
|
8797
|
-
|
|
8798
|
-
|
|
8799
|
-
const componentDef = getComponentDef(component);
|
|
8800
|
-
return new ComponentFactory(componentDef, this.ngModule);
|
|
8852
|
+
if (tView.queries !== null) {
|
|
8853
|
+
tView.queries.elementStart(tView, tNode);
|
|
8801
8854
|
}
|
|
8855
|
+
return tNode;
|
|
8802
8856
|
}
|
|
8857
|
+
|
|
8858
|
+
const shadowRootSupported = typeof ShadowRoot !== 'undefined';
|
|
8859
|
+
const documentSupported = typeof Document !== 'undefined';
|
|
8803
8860
|
function toInputRefArray(map) {
|
|
8804
8861
|
return Object.keys(map).map(name => {
|
|
8805
8862
|
const [propName, flags, transform] = map[name];
|
|
@@ -8865,7 +8922,7 @@ function createHostElement(componentDef, renderer) {
|
|
|
8865
8922
|
function inferTagNameFromDefinition(componentDef) {
|
|
8866
8923
|
return (componentDef.selectors[0][0] || 'div').toLowerCase();
|
|
8867
8924
|
}
|
|
8868
|
-
class ComponentFactory
|
|
8925
|
+
class ComponentFactory {
|
|
8869
8926
|
componentDef;
|
|
8870
8927
|
ngModule;
|
|
8871
8928
|
selector;
|
|
@@ -8883,7 +8940,6 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
8883
8940
|
return this.cachedOutputs;
|
|
8884
8941
|
}
|
|
8885
8942
|
constructor(componentDef, ngModule) {
|
|
8886
|
-
super();
|
|
8887
8943
|
this.componentDef = componentDef;
|
|
8888
8944
|
this.ngModule = ngModule;
|
|
8889
8945
|
this.componentType = componentDef.type;
|
|
@@ -8914,8 +8970,16 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
8914
8970
|
const rootTView = createRootTView(rootSelectorOrNode, cmpDef, componentBindings, directives);
|
|
8915
8971
|
const hostRenderer = environment.rendererFactory.createRenderer(null, cmpDef);
|
|
8916
8972
|
const hostElement = rootSelectorOrNode ? locateHostElement(hostRenderer, rootSelectorOrNode, cmpDef.encapsulation, rootViewInjector) : createHostElement(cmpDef, hostRenderer);
|
|
8973
|
+
const sharedStylesHost = rootViewInjector.get(SHARED_STYLES_HOST, null);
|
|
8974
|
+
const styleHost = getStyleHost(hostElement, () => rootViewInjector.get(DOCUMENT$1, null) ?? getDocument());
|
|
8975
|
+
if (sharedStylesHost) sharedStylesHost.addHost(styleHost);
|
|
8917
8976
|
const hasInputBindings = componentBindings?.some(isInputBinding) || directives?.some(d => typeof d !== 'function' && d.bindings.some(isInputBinding));
|
|
8918
8977
|
const rootLView = createLView(null, rootTView, null, 512 | getInitialLViewFlagsFromDef(cmpDef), null, null, environment, hostRenderer, rootViewInjector, null, retrieveHydrationInfo(hostElement, rootViewInjector, true));
|
|
8978
|
+
if (sharedStylesHost && shadowRootSupported && styleHost instanceof ShadowRoot) {
|
|
8979
|
+
storeLViewOnDestroy(rootLView, () => {
|
|
8980
|
+
sharedStylesHost.removeHost(styleHost);
|
|
8981
|
+
});
|
|
8982
|
+
}
|
|
8919
8983
|
rootLView[HEADER_OFFSET] = hostElement;
|
|
8920
8984
|
enterView(rootLView);
|
|
8921
8985
|
let componentView = null;
|
|
@@ -8946,7 +9010,7 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
8946
9010
|
}
|
|
8947
9011
|
}
|
|
8948
9012
|
function createRootTView(rootSelectorOrNode, componentDef, componentBindings, directives) {
|
|
8949
|
-
const tAttributes = rootSelectorOrNode ? ['ng-version', '22.0.0-next.
|
|
9013
|
+
const tAttributes = rootSelectorOrNode ? ['ng-version', '22.0.0-next.9'] : extractAttrsAndClassesFromSelector(componentDef.selectors[0]);
|
|
8950
9014
|
let creationBindings = null;
|
|
8951
9015
|
let updateBindings = null;
|
|
8952
9016
|
let varsToAllocate = 0;
|
|
@@ -8996,6 +9060,18 @@ function createRootTView(rootSelectorOrNode, componentDef, componentBindings, di
|
|
|
8996
9060
|
const rootTView = createTView(0, null, getRootTViewTemplate(creationBindings, updateBindings), 1, varsToAllocate, directivesToApply, null, null, null, [tAttributes], null);
|
|
8997
9061
|
return rootTView;
|
|
8998
9062
|
}
|
|
9063
|
+
function getStyleHost(node, doc) {
|
|
9064
|
+
const rootNode = node.getRootNode?.();
|
|
9065
|
+
if (documentSupported && rootNode instanceof Document) {
|
|
9066
|
+
return rootNode.head;
|
|
9067
|
+
} else if (!rootNode) {
|
|
9068
|
+
return doc().head;
|
|
9069
|
+
} else if (shadowRootSupported && rootNode instanceof ShadowRoot) {
|
|
9070
|
+
return rootNode;
|
|
9071
|
+
} else {
|
|
9072
|
+
return doc().head;
|
|
9073
|
+
}
|
|
9074
|
+
}
|
|
8999
9075
|
function getRootTViewTemplate(creationBindings, updateBindings) {
|
|
9000
9076
|
if (!creationBindings && !updateBindings) {
|
|
9001
9077
|
return null;
|
|
@@ -9731,7 +9807,6 @@ class NgModuleRef extends NgModuleRef$1 {
|
|
|
9731
9807
|
_r3Injector;
|
|
9732
9808
|
instance;
|
|
9733
9809
|
destroyCbs = [];
|
|
9734
|
-
componentFactoryResolver = new ComponentFactoryResolver(this);
|
|
9735
9810
|
constructor(ngModuleType, _parent, additionalProviders, runInjectorInitializers = true) {
|
|
9736
9811
|
super();
|
|
9737
9812
|
this.ngModuleType = ngModuleType;
|
|
@@ -9742,9 +9817,6 @@ class NgModuleRef extends NgModuleRef$1 {
|
|
|
9742
9817
|
this._r3Injector = createInjectorWithoutInjectorInstances(ngModuleType, _parent, [{
|
|
9743
9818
|
provide: NgModuleRef$1,
|
|
9744
9819
|
useValue: this
|
|
9745
|
-
}, {
|
|
9746
|
-
provide: ComponentFactoryResolver$1,
|
|
9747
|
-
useValue: this.componentFactoryResolver
|
|
9748
9820
|
}, ...additionalProviders], stringify(ngModuleType), new Set(['environment']));
|
|
9749
9821
|
if (runInjectorInitializers) {
|
|
9750
9822
|
this.resolveInjectorInitializers();
|
|
@@ -9784,16 +9856,12 @@ function createNgModuleRefWithProviders(moduleType, parentInjector, additionalPr
|
|
|
9784
9856
|
}
|
|
9785
9857
|
class EnvironmentNgModuleRefAdapter extends NgModuleRef$1 {
|
|
9786
9858
|
injector;
|
|
9787
|
-
componentFactoryResolver = new ComponentFactoryResolver(this);
|
|
9788
9859
|
instance = null;
|
|
9789
9860
|
constructor(config) {
|
|
9790
9861
|
super();
|
|
9791
9862
|
const injector = new R3Injector([...config.providers, {
|
|
9792
9863
|
provide: NgModuleRef$1,
|
|
9793
9864
|
useValue: this
|
|
9794
|
-
}, {
|
|
9795
|
-
provide: ComponentFactoryResolver$1,
|
|
9796
|
-
useValue: this.componentFactoryResolver
|
|
9797
9865
|
}], config.parent || getNullInjector(), config.debugName, new Set(['environment']));
|
|
9798
9866
|
this.injector = injector;
|
|
9799
9867
|
if (config.runEnvironmentInitializers) {
|
|
@@ -11113,13 +11181,6 @@ function canBeHeldWeakly(value) {
|
|
|
11113
11181
|
return value !== null && (typeof value === 'object' || typeof value === 'function' || typeof value === 'symbol');
|
|
11114
11182
|
}
|
|
11115
11183
|
|
|
11116
|
-
function isSignal(value) {
|
|
11117
|
-
return typeof value === 'function' && value[SIGNAL] !== undefined;
|
|
11118
|
-
}
|
|
11119
|
-
function isWritableSignal(value) {
|
|
11120
|
-
return isSignal(value) && typeof value.set === 'function';
|
|
11121
|
-
}
|
|
11122
|
-
|
|
11123
11184
|
function applyChanges(component) {
|
|
11124
11185
|
ngDevMode && assertDefined(component, 'component');
|
|
11125
11186
|
markViewDirty(getComponentViewByInstance(component), 3);
|
|
@@ -11736,6 +11797,39 @@ let changeDetectionRuns = 0;
|
|
|
11736
11797
|
let changeDetectionSyncRuns = 0;
|
|
11737
11798
|
let counter = 0;
|
|
11738
11799
|
const eventsStack = [];
|
|
11800
|
+
function getBaseDocUrl() {
|
|
11801
|
+
const full = VERSION.full;
|
|
11802
|
+
const isPreRelease = full.includes('-next') || full.includes('-rc') || full === '22.0.0-next.9';
|
|
11803
|
+
const prefix = isPreRelease ? 'next' : `v${VERSION.major}`;
|
|
11804
|
+
return `https://${prefix}.angular.dev`;
|
|
11805
|
+
}
|
|
11806
|
+
function getLifecycleHookDocUrl(hookName) {
|
|
11807
|
+
const match = hookName.match(/:(ng\w+)$/);
|
|
11808
|
+
if (!match) return undefined;
|
|
11809
|
+
const lifecycleHook = match[1].toLowerCase();
|
|
11810
|
+
const baseUrl = getBaseDocUrl();
|
|
11811
|
+
return `${baseUrl}/guide/components/lifecycle#${lifecycleHook}`;
|
|
11812
|
+
}
|
|
11813
|
+
function getProfilerEventDocUrl(event, entryName) {
|
|
11814
|
+
const baseUrl = getBaseDocUrl();
|
|
11815
|
+
switch (event) {
|
|
11816
|
+
case ProfilerEvent.ChangeDetectionStart:
|
|
11817
|
+
case ProfilerEvent.ChangeDetectionEnd:
|
|
11818
|
+
case ProfilerEvent.ChangeDetectionSyncStart:
|
|
11819
|
+
case ProfilerEvent.ChangeDetectionSyncEnd:
|
|
11820
|
+
return `${baseUrl}/best-practices/runtime-performance`;
|
|
11821
|
+
case ProfilerEvent.AfterRenderHooksStart:
|
|
11822
|
+
case ProfilerEvent.AfterRenderHooksEnd:
|
|
11823
|
+
return `${baseUrl}/guide/components/lifecycle#aftereveryrender-and-afternextrender`;
|
|
11824
|
+
case ProfilerEvent.DeferBlockStateStart:
|
|
11825
|
+
case ProfilerEvent.DeferBlockStateEnd:
|
|
11826
|
+
return `${baseUrl}/guide/defer`;
|
|
11827
|
+
case ProfilerEvent.LifecycleHookStart:
|
|
11828
|
+
return getLifecycleHookDocUrl(entryName);
|
|
11829
|
+
default:
|
|
11830
|
+
return undefined;
|
|
11831
|
+
}
|
|
11832
|
+
}
|
|
11739
11833
|
function measureStart(startEvent) {
|
|
11740
11834
|
eventsStack.push([startEvent, counter]);
|
|
11741
11835
|
console.timeStamp('Event_' + startEvent + '_' + counter++);
|
|
@@ -11746,7 +11840,11 @@ function measureEnd(startEvent, entryName, color) {
|
|
|
11746
11840
|
top = eventsStack.pop();
|
|
11747
11841
|
assertDefined(top, 'Profiling error: could not find start event entry ' + startEvent);
|
|
11748
11842
|
} while (top[0] !== startEvent);
|
|
11749
|
-
|
|
11843
|
+
const docUrl = getProfilerEventDocUrl(startEvent, entryName);
|
|
11844
|
+
console.timeStamp(entryName, 'Event_' + top[0] + '_' + top[1], undefined, '\u{1F170}\uFE0F Angular', undefined, color, docUrl ? {
|
|
11845
|
+
description: 'Documentation',
|
|
11846
|
+
url: docUrl
|
|
11847
|
+
} : undefined);
|
|
11750
11848
|
}
|
|
11751
11849
|
const chromeDevToolsInjectorProfiler = event => {
|
|
11752
11850
|
const eventType = event.type;
|
|
@@ -11939,6 +12037,10 @@ function publishUtil(name, fn) {
|
|
|
11939
12037
|
|
|
11940
12038
|
const TESTABILITY = new InjectionToken('');
|
|
11941
12039
|
const TESTABILITY_GETTER = new InjectionToken('');
|
|
12040
|
+
const USE_PENDING_TASKS = new InjectionToken('USE_PENDING_TASKS', {
|
|
12041
|
+
providedIn: 'root',
|
|
12042
|
+
factory: () => typeof Zone === 'undefined'
|
|
12043
|
+
});
|
|
11942
12044
|
class Testability {
|
|
11943
12045
|
_ngZone;
|
|
11944
12046
|
registry;
|
|
@@ -11946,6 +12048,8 @@ class Testability {
|
|
|
11946
12048
|
_callbacks = [];
|
|
11947
12049
|
_taskTrackingZone = null;
|
|
11948
12050
|
_destroyRef;
|
|
12051
|
+
pendingTasksInternal = inject(PendingTasksInternal);
|
|
12052
|
+
_usePendingTasks = inject(USE_PENDING_TASKS);
|
|
11949
12053
|
constructor(_ngZone, registry, testabilityGetter) {
|
|
11950
12054
|
this._ngZone = _ngZone;
|
|
11951
12055
|
this.registry = registry;
|
|
@@ -11969,22 +12073,36 @@ class Testability {
|
|
|
11969
12073
|
this._isZoneStable = false;
|
|
11970
12074
|
}
|
|
11971
12075
|
});
|
|
11972
|
-
|
|
11973
|
-
|
|
11974
|
-
|
|
11975
|
-
|
|
11976
|
-
|
|
11977
|
-
this.
|
|
12076
|
+
let pendingTasksSubscription;
|
|
12077
|
+
let onStableSubscription;
|
|
12078
|
+
this._ngZone.runOutsideAngular(() => {
|
|
12079
|
+
if (this._usePendingTasks) {
|
|
12080
|
+
pendingTasksSubscription = this.pendingTasksInternal.hasPendingTasksObservable.subscribe(() => {
|
|
12081
|
+
if (this.isStable()) {
|
|
12082
|
+
this._ngZone.runOutsideAngular(() => {
|
|
12083
|
+
this._runCallbacksIfReady();
|
|
12084
|
+
});
|
|
12085
|
+
}
|
|
11978
12086
|
});
|
|
11979
12087
|
}
|
|
11980
|
-
|
|
12088
|
+
onStableSubscription = this._ngZone.onStable.subscribe({
|
|
12089
|
+
next: () => {
|
|
12090
|
+
NgZone.assertNotInAngularZone();
|
|
12091
|
+
queueMicrotask(() => {
|
|
12092
|
+
this._isZoneStable = true;
|
|
12093
|
+
this._runCallbacksIfReady();
|
|
12094
|
+
});
|
|
12095
|
+
}
|
|
12096
|
+
});
|
|
12097
|
+
});
|
|
11981
12098
|
this._destroyRef?.onDestroy(() => {
|
|
11982
12099
|
onUnstableSubscription.unsubscribe();
|
|
12100
|
+
pendingTasksSubscription?.unsubscribe();
|
|
11983
12101
|
onStableSubscription.unsubscribe();
|
|
11984
12102
|
});
|
|
11985
12103
|
}
|
|
11986
12104
|
isStable() {
|
|
11987
|
-
return this._isZoneStable && !this._ngZone.hasPendingMacrotasks;
|
|
12105
|
+
return this._isZoneStable && !this._ngZone.hasPendingMacrotasks && (!this._usePendingTasks || !this.pendingTasksInternal.hasPendingTasks);
|
|
11988
12106
|
}
|
|
11989
12107
|
_runCallbacksIfReady() {
|
|
11990
12108
|
if (this.isStable()) {
|
|
@@ -12130,9 +12248,6 @@ function publishSignalConfiguration() {
|
|
|
12130
12248
|
throw new RuntimeError(600, errorMessage);
|
|
12131
12249
|
});
|
|
12132
12250
|
}
|
|
12133
|
-
function isBoundToModule(cf) {
|
|
12134
|
-
return cf.isBoundToModule;
|
|
12135
|
-
}
|
|
12136
12251
|
const MAXIMUM_REFRESH_RERUNS = 10;
|
|
12137
12252
|
function optionsReducer(dst, objs) {
|
|
12138
12253
|
if (Array.isArray(objs)) {
|
|
@@ -12211,17 +12326,17 @@ class ApplicationRef {
|
|
|
12211
12326
|
}
|
|
12212
12327
|
throw new RuntimeError(405, errorMessage);
|
|
12213
12328
|
}
|
|
12214
|
-
const
|
|
12215
|
-
const
|
|
12216
|
-
|
|
12217
|
-
|
|
12329
|
+
const componentDef = getComponentDef(component);
|
|
12330
|
+
const ngModule = this._injector.get(NgModuleRef$1);
|
|
12331
|
+
const componentFactory = new ComponentFactory(componentDef, ngModule);
|
|
12332
|
+
this.componentTypes.push(component);
|
|
12218
12333
|
const {
|
|
12219
12334
|
hostElement,
|
|
12220
12335
|
directives,
|
|
12221
12336
|
bindings
|
|
12222
12337
|
} = normalizeBootstrapOptions(hostElementOrOptions);
|
|
12223
12338
|
const selectorOrNode = hostElement || componentFactory.selector;
|
|
12224
|
-
const compRef = componentFactory.create(injector, [], selectorOrNode, ngModule, directives, bindings);
|
|
12339
|
+
const compRef = componentFactory.create(injector, [], selectorOrNode, ngModule.injector, directives, bindings);
|
|
12225
12340
|
const nativeElement = compRef.location.nativeElement;
|
|
12226
12341
|
const testability = compRef.injector.get(TESTABILITY, null);
|
|
12227
12342
|
testability?.registerApplication(nativeElement);
|
|
@@ -17431,6 +17546,7 @@ const angularCoreEnv = (() => ({
|
|
|
17431
17546
|
'ɵɵdefineInjectable': __defineInjectable,
|
|
17432
17547
|
'ɵɵdefineInjector': __defineInjector,
|
|
17433
17548
|
'ɵɵdefineNgModule': ɵɵdefineNgModule,
|
|
17549
|
+
'ɵɵdefineService': ɵɵdefineService,
|
|
17434
17550
|
'ɵɵdefinePipe': ɵɵdefinePipe,
|
|
17435
17551
|
'ɵɵdirectiveInject': ɵɵdirectiveInject,
|
|
17436
17552
|
'ɵɵgetInheritedFactory': ɵɵgetInheritedFactory,
|
|
@@ -18591,14 +18707,6 @@ function provideZonelessChangeDetectionInternal() {
|
|
|
18591
18707
|
}];
|
|
18592
18708
|
}
|
|
18593
18709
|
|
|
18594
|
-
class ModuleWithComponentFactories {
|
|
18595
|
-
ngModuleFactory;
|
|
18596
|
-
componentFactories;
|
|
18597
|
-
constructor(ngModuleFactory, componentFactories) {
|
|
18598
|
-
this.ngModuleFactory = ngModuleFactory;
|
|
18599
|
-
this.componentFactories = componentFactories;
|
|
18600
|
-
}
|
|
18601
|
-
}
|
|
18602
18710
|
class Compiler {
|
|
18603
18711
|
compileModuleSync(moduleType) {
|
|
18604
18712
|
return new NgModuleFactory(moduleType);
|
|
@@ -18606,19 +18714,6 @@ class Compiler {
|
|
|
18606
18714
|
compileModuleAsync(moduleType) {
|
|
18607
18715
|
return Promise.resolve(this.compileModuleSync(moduleType));
|
|
18608
18716
|
}
|
|
18609
|
-
compileModuleAndAllComponentsSync(moduleType) {
|
|
18610
|
-
const ngModuleFactory = this.compileModuleSync(moduleType);
|
|
18611
|
-
const moduleDef = getNgModuleDef(moduleType);
|
|
18612
|
-
const componentFactories = maybeUnwrapFn(moduleDef.declarations).reduce((factories, declaration) => {
|
|
18613
|
-
const componentDef = getComponentDef(declaration);
|
|
18614
|
-
componentDef && factories.push(new ComponentFactory(componentDef));
|
|
18615
|
-
return factories;
|
|
18616
|
-
}, []);
|
|
18617
|
-
return new ModuleWithComponentFactories(ngModuleFactory, componentFactories);
|
|
18618
|
-
}
|
|
18619
|
-
compileModuleAndAllComponentsAsync(moduleType) {
|
|
18620
|
-
return Promise.resolve(this.compileModuleAndAllComponentsSync(moduleType));
|
|
18621
|
-
}
|
|
18622
18717
|
clearCache() {}
|
|
18623
18718
|
clearCacheFor(type) {}
|
|
18624
18719
|
getModuleId(moduleType) {
|
|
@@ -19016,5 +19111,5 @@ function getDebugNode(nativeNode) {
|
|
|
19016
19111
|
return null;
|
|
19017
19112
|
}
|
|
19018
19113
|
|
|
19019
|
-
export { AFTER_RENDER_PHASES, ANIMATIONS_DISABLED, ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AcxChangeDetectionStrategy, AcxViewEncapsulation, AfterRenderImpl, AfterRenderManager, AfterRenderSequence, ApplicationInitStatus, ApplicationRef, Attribute, COMPILER_OPTIONS, CONTAINERS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionSchedulerImpl, ChangeDetectionStrategy, Compiler, CompilerFactory, Component, ComponentFactory,
|
|
19114
|
+
export { AFTER_RENDER_PHASES, ANIMATIONS_DISABLED, ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AcxChangeDetectionStrategy, AcxViewEncapsulation, AfterRenderImpl, AfterRenderManager, AfterRenderSequence, ApplicationInitStatus, ApplicationRef, Attribute, COMPILER_OPTIONS, CONTAINERS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChainedInjector, ChangeDetectionSchedulerImpl, ChangeDetectionStrategy, Compiler, CompilerFactory, Component, ComponentFactory, ComponentRef$1 as ComponentRef, ComponentRef as ComponentRef$1, Console, ControlFlowBlockType, DEFAULT_CURRENCY_CODE, DEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DEFER_BLOCK_ID, DEFER_BLOCK_SSR_ID_ATTRIBUTE, DEFER_BLOCK_STATE$1 as DEFER_BLOCK_STATE, DEFER_BLOCK_STATE as DEFER_BLOCK_STATE$1, DEFER_HYDRATE_TRIGGERS, DEFER_PARENT_BLOCK_ID, DEHYDRATED_BLOCK_REGISTRY, DISCONNECTED_NODES, DebugElement, DebugEventListener, DebugNode, DeferBlockBehavior, DeferBlockState, DehydratedBlockRegistry, Directive, ELEMENT_CONTAINERS, EVENT_REPLAY_ENABLED_DEFAULT, EVENT_REPLAY_QUEUE, ElementRef, EnvironmentNgModuleRefAdapter, Host, HostBinding, HostListener, HydrationStatus, I18N_DATA, IMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS, IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, IS_EVENT_REPLAY_ENABLED, IS_HYDRATION_DOM_REUSE_ENABLED, IS_I18N_HYDRATION_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED, Inject, Injectable, Input, JSACTION_BLOCK_ELEMENT_MAP, JSACTION_EVENT_CONTRACT, LContext, LOCALE_ID, LocaleDataIndex, MAX_ANIMATION_TIMEOUT, MULTIPLIER, MissingTranslationStrategy, NGH_ATTR_NAME, NGH_DATA_KEY, NGH_DEFER_BLOCKS_KEY, NODES, NOOP_AFTER_RENDER_REF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE, NO_ERRORS_SCHEMA, NUM_ROOT_NODES, NgModule, NgModuleFactory, NgModuleFactory$1, NgModuleRef, NgModuleRef$1, NodeInjector, Optional, Output, PLATFORM_ID, PLATFORM_INITIALIZER, PRESERVE_HOST_CONTENT, Pipe, ProfilerEvent, QueryList, ReflectionCapabilities, Renderer2, RendererFactory2, RendererStyleFlags2, SHARED_STYLES_HOST, SKIP_HYDRATION_ATTR_NAME, SSR_CONTENT_INTEGRITY_MARKER, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TEMPLATES, TEMPLATE_ID, TESTABILITY, TESTABILITY_GETTER, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TimerScheduler, TracingAction, TracingService, TransferState, Type, USE_PENDING_TASKS, UseExhaustiveCheckNoChanges, ViewContainerRef, ViewEncapsulation, ViewRef, _sanitizeHtml, _sanitizeUrl, afterEveryRender, afterNextRender, allLeavingAnimations, allowSanitizationBypassAndThrow, angularCoreDiEnv, angularCoreEnv, appendDeferBlocksToJSActionMap, asNativeElements, assertComponentDef, assertStandaloneComponentType, bypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript, bypassSanitizationTrustStyle, bypassSanitizationTrustUrl, calcPathForNode, checkNoChangesInternal, cleanupDehydratedViews, clearResolutionOfComponentResourcesQueue, collectNativeNodes, collectNativeNodesInLContainer, compileComponent, compileDirective, compileNgModule, compileNgModuleDefs, compilePipe, convertHydrateTriggersToJsAction, countBlocksSkippedByHydration, createEnvironmentInjector, createMultiResultQuerySignalFn, createNgModule, createNgModuleRefWithProviders, createSingleResultOptionalQuerySignalFn, createSingleResultRequiredQuerySignalFn, depsTracker, devModeEqual, enableApplyRootElementTransformImpl, enableClaimDehydratedIcuCaseImpl, enableFindMatchingDehydratedViewImpl, enableLocateOrCreateContainerAnchorImpl, enableLocateOrCreateContainerRefImpl, enableLocateOrCreateElementContainerNodeImpl, enableLocateOrCreateElementNodeImpl, enableLocateOrCreateI18nNodeImpl, enableLocateOrCreateTextNodeImpl, enablePrepareI18nBlockForHydrationImpl, enableProfiling, enableRetrieveDeferBlockDataImpl, enableRetrieveHydrationInfoImpl, enableStashEventListenerImpl, findLocaleData, flushModuleScopingQueueAsMuchAsPossible, gatherDeferBlocksCommentNodes, generateStandaloneInDeclarationsError, getAsyncClassMetadataFn, getClosestComponentName, getCompilerFacade, getDebugNode, getDeferBlocks, getDirectives, getDocument, getHostElement, getInjector, getInjectorMetadata, getInjectorProviders, getLContext, getLDeferBlockDetails, getLNodeForHydration, getLocaleCurrencyCode, getLocalePluralCase, getNodeInjectorTNode, getOrComputeI18nChildren, getRegisteredNgModuleType, getSanitizationBypassType, getSignalGraph, getTDeferBlockDetails, getTransferState, inferTagNameFromDefinition, inputBinding, invokeListeners, isComponentDefPendingResolution, isComponentResourceResolutionQueueEmpty, isDeferBlock, isDetachedByI18n, isDisconnectedNode, isI18nHydrationEnabled, isI18nHydrationSupportEnabled, isInSkipHydrationBlock, isIncrementalHydrationEnabled, isJsObject, isLetDeclaration, isListLikeIterable, isNgModule, isPromise, isSubscribable, isTNodeShape, isViewDirty, iterateListLike, makeDecorator, makePropDecorator, makeStateKey, markForRefresh, noSideEffects, optionsReducer, outputBinding, patchComponentDefWithScope, performanceMarkFeature, processAndInitTriggers, processBlockData, processTextNodeBeforeSerialization, profiler, promiseWithResolvers, provideAppInitializer, provideIdleServiceWith, provideNgReflectAttributes, provideZonelessChangeDetection, provideZonelessChangeDetectionInternal, publishDefaultGlobalUtils, publishExternalGlobalUtil, publishSignalConfiguration, readHydrationInfo, reflectDependencies, registerLocaleData, registerNgModuleType, remove, removeListeners, renderDeferBlockState, resetCompiledComponents, resetIncrementalHydrationEnabledWarnedForTests, resetJitOptions, resolveComponentResources, restoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest, setClassMetadata, setClassMetadataAsync, setDocument, setIsI18nHydrationSupportEnabled, setJSActionAttributes, setJitOptions, setLocaleId, setStashFn, setTestabilityGetter, sharedMapFunction, sharedStashFunction, transitiveScopesFor, triggerHydrationFromBlockName, triggerResourceLoading, trySerializeI18nBlock, twoWayBinding, unregisterAllLocaleData, unsupportedProjectionOfDomNodes, unwrapSafeValue, validAppIdInitializer, validateMatchingNode, validateNodeExists, verifySsrContentsIntegrity, walkLViewDirectives, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, ɵsetClassDebugInfo, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, ɵɵControlFeature, ɵɵExternalStylesFeature, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵanimateEnter, ɵɵanimateEnterListener, ɵɵanimateLeave, ɵɵanimateLeaveListener, ɵɵariaProperty, ɵɵarrowFunction, ɵɵattachSourceLocations, ɵɵattribute, ɵɵclassMap, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵconditionalBranchCreate, ɵɵconditionalCreate, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵcontrol, ɵɵcontrolCreate, ɵɵ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, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdefineService, ɵɵdirectiveInject, ɵɵdomElement, ɵɵdomElementContainer, ɵɵdomElementContainerEnd, ɵɵdomElementContainerStart, ɵɵdomElementEnd, ɵɵdomElementStart, ɵɵdomListener, ɵɵdomProperty, ɵɵdomTemplate, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵgetReplaceMetadataURL, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinjectAttribute, ɵɵinterpolate, ɵɵinterpolate1, ɵɵinterpolate2, ɵɵinterpolate3, ɵɵinterpolate4, ɵɵinterpolate5, ɵɵinterpolate6, ɵɵinterpolate7, ɵɵinterpolate8, ɵɵinterpolateV, ɵɵinvalidFactory, ɵɵlistener, ɵɵloadQuery, ɵɵnextContext, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleProp, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
|
|
19020
19115
|
//# sourceMappingURL=_debug_node-chunk.mjs.map
|