@angular/core 22.0.0-next.1 → 22.0.0-next.11
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/_attribute-chunk.mjs.map +1 -1
- package/fesm2022/_debug_node-chunk.mjs +2440 -2014
- package/fesm2022/_debug_node-chunk.mjs.map +1 -1
- package/fesm2022/_effect-chunk.mjs +3 -5
- package/fesm2022/_effect-chunk.mjs.map +1 -1
- package/fesm2022/_not_found-chunk.mjs +1 -1
- package/fesm2022/_not_found-chunk.mjs.map +1 -1
- package/fesm2022/_pending_tasks-chunk.mjs +145 -44
- package/fesm2022/_pending_tasks-chunk.mjs.map +1 -1
- package/fesm2022/_resource-chunk.mjs +108 -33
- package/fesm2022/_resource-chunk.mjs.map +1 -1
- package/fesm2022/_untracked-chunk.mjs +10 -7
- package/fesm2022/_untracked-chunk.mjs.map +1 -1
- package/fesm2022/_weak_ref-chunk.mjs +1 -1
- package/fesm2022/_weak_ref-chunk.mjs.map +1 -1
- package/fesm2022/core.mjs +2368 -1892
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives-di.mjs +1 -1
- package/fesm2022/primitives-di.mjs.map +1 -1
- package/fesm2022/primitives-event-dispatch.mjs +2 -24
- package/fesm2022/primitives-event-dispatch.mjs.map +1 -1
- package/fesm2022/primitives-signals.mjs +2 -2
- package/fesm2022/primitives-signals.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +6 -3
- package/fesm2022/rxjs-interop.mjs.map +1 -1
- package/fesm2022/testing.mjs +56 -25
- package/fesm2022/testing.mjs.map +1 -1
- package/package.json +7 -3
- package/schematics/bundles/apply_import_manager-CxA_YYgB.cjs +1 -1
- package/schematics/bundles/can-match-snapshot-required.cjs +104 -0
- 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 +6 -11
- package/schematics/bundles/imports-CKV-ITqD.cjs +1 -1
- package/schematics/bundles/incremental-hydration.cjs +94 -0
- package/schematics/bundles/{index-BtLcQH8g.cjs → index-DcezkXLN.cjs} +10 -3
- package/schematics/bundles/inject-migration.cjs +26 -18
- 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-MWoZx-Cb.cjs → migrate_ts_type_references-xRTTASnu.cjs} +48 -28
- package/schematics/bundles/model-output.cjs +200 -0
- 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 +14 -6
- package/schematics/bundles/nodes-ZSQ7WZRB.cjs +1 -1
- package/schematics/bundles/output-migration.cjs +2 -2
- 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 +22 -2
- package/schematics/bundles/router-testing-module-migration.cjs +1 -1
- package/schematics/bundles/safe-optional-chaining.cjs +571 -0
- package/schematics/bundles/self-closing-tags-migration.cjs +1 -1
- package/schematics/bundles/signal-input-migration.cjs +3 -3
- package/schematics/bundles/signal-queries-migration.cjs +3 -3
- package/schematics/bundles/signals.cjs +3 -3
- package/schematics/bundles/standalone-migration.cjs +29 -17
- package/schematics/bundles/strict-safe-navigation-narrow.cjs +32 -0
- package/schematics/bundles/strict-templates-default.cjs +63 -0
- package/schematics/migrations.json +30 -0
- package/third_party/@mcp-b/webmcp-types/LICENSE +21 -0
- package/third_party/@mcp-b/webmcp-types/dist/common.d.ts +297 -0
- package/third_party/@mcp-b/webmcp-types/dist/json-schema.d.ts +196 -0
- package/third_party/@mcp-b/webmcp-types/index.d.ts +9 -0
- package/types/_api-chunk.d.ts +44 -17
- package/types/_chrome_dev_tools_performance-chunk.d.ts +4 -3
- package/types/{_discovery-chunk.d.ts → _debug_node-chunk.d.ts} +2157 -2258
- 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 +6833 -6485
- 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 +5 -4
- package/types/testing.d.ts +6 -6
package/fesm2022/core.mjs
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v22.0.0-next.
|
|
2
|
+
* @license Angular v22.0.0-next.11
|
|
3
3
|
* (c) 2010-2026 Google LLC. https://angular.dev/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { RuntimeError, InjectionToken, getCurrentTNode, assertInInjectionContext,
|
|
8
|
-
export { EnvironmentInjector, EventEmitter, INJECTOR, PendingTasks, VERSION, Version,
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export { ResourceDependencyError, ResourceParamsStatus, linkedSignal, resource, untracked, ResourceImpl as ɵResourceImpl, encapsulateResourceError as ɵencapsulateResourceError, getOutputDestroyRef as ɵgetOutputDestroyRef } from './_resource-chunk.mjs';
|
|
7
|
+
import { RuntimeError, InjectionToken, getCurrentTNode, assertInInjectionContext, inject, Injector, NG_PROV_DEF, NG_FACTORY_DEF, signalAsReadonlyFn, ɵɵinject as __inject, ɵɵdefineInjector as __defineInjector, ENVIRONMENT_INITIALIZER, APP_ID, unwrapRNode, CLEANUP, makeEnvironmentProviders, formatRuntimeError, TransferState, DOCUMENT, ChangeDetectionScheduler, NgZone, DOC_PAGE_BASE_URL, DEBUG_TASK_TRACKER, stringify, ɵɵdefineInjectable as __defineInjectable, isComponentHost, getComponentLViewByIndex, DECLARATION_COMPONENT_VIEW, getLView, provideEnvironmentInitializer, ErrorHandler, ZONELESS_ENABLED, SCHEDULE_IN_ROOT_ZONE_DEFAULT, SCHEDULE_IN_ROOT_ZONE, INTERNAL_APPLICATION_ERROR_HANDLER, PendingTasksInternal, assertNgModuleType, IMAGE_CONFIG, ERROR_DETAILS_PAGE_BASE_URL, PROVIDED_ZONELESS, errorHandlerEnvironmentInitializer, validAppIdInitializer, TVIEW, getLViewParent, R3Injector, NullInjector, INJECTOR, T_HOST, PLATFORM_INITIALIZER, runInInjectionContext, INJECTOR_SCOPE, isLContainer, hasI18n, RENDERER, unwrapLView, HOST, getComponentDef, assertTNode, isProjectionTNode, PARENT, CONTEXT, HEADER_OFFSET, isRootView, CONTAINER_HEADER_OFFSET, assertNotInReactiveContext, ViewContext, DestroyRef, setInjectorProfilerContext, emitAfterRenderEffectPhaseCreatedEvent, getNullInjector, isSignal, effect, _global } from './_pending_tasks-chunk.mjs';
|
|
8
|
+
export { ANIMATION_MODULE_TYPE, CSP_NONCE, EnvironmentInjector, EventEmitter, INJECTOR$1 as INJECTOR, PLATFORM_ID, PendingTasks, VERSION, Version, forwardRef, importProvidersFrom, isStandalone, isWritableSignal, makeStateKey, provideBrowserGlobalErrorListeners, resolveForwardRef, signal, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NoopNgZone as ɵNoopNgZone, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, getInjectableDef as ɵgetInjectableDef, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, store as ɵstore, truncateMiddle as ɵtruncateMiddle, ɵunwrapWritableSignal, ɵɵdisableBindings, ɵɵenableBindings, ɵɵinvalidFactoryDep, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵresetView, ɵɵrestoreView } from './_pending_tasks-chunk.mjs';
|
|
9
|
+
import { ɵɵinjectAttribute as __injectAttribute, promiseWithResolvers, IDLE_SERVICE, getCompilerFacade, angularCoreDiEnv, reflectDependencies, makeDecorator, createMultiResultQuerySignalFn, createSingleResultRequiredQuerySignalFn, createSingleResultOptionalQuerySignalFn, makePropDecorator, ɵɵdefineNgModule as __defineNgModule, ApplicationRef, setClassMetadata, NgModule, IS_EVENT_REPLAY_ENABLED, setStashFn, APP_BOOTSTRAP_LISTENER, JSACTION_EVENT_CONTRACT, JSACTION_BLOCK_ELEMENT_MAP, removeListeners, isIncrementalHydrationEnabled, performanceMarkFeature, EVENT_REPLAY_ENABLED_DEFAULT, sharedStashFunction, sharedMapFunction, DEFER_BLOCK_SSR_ID_ATTRIBUTE, invokeListeners, EVENT_REPLAY_QUEUE, triggerHydrationFromBlockName, enableStashEventListenerImpl, IS_HYDRATION_DOM_REUSE_ENABLED, IS_I18N_HYDRATION_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED, createDehydratedBlockRegistry, DEHYDRATED_BLOCK_REGISTRY, NGH_DATA_KEY, verifySsrContentsIntegrity, enableRetrieveHydrationInfoImpl, enableLocateOrCreateElementNodeImpl, enableLocateOrCreateTextNodeImpl, enableLocateOrCreateContainerRefImpl, enableFindMatchingDehydratedViewImpl, enableLocateOrCreateElementContainerNodeImpl, enableLocateOrCreateContainerAnchorImpl, enableApplyRootElementTransformImpl, setIsI18nHydrationSupportEnabled, Console, PRESERVE_HOST_CONTENT, cleanupDehydratedViews, countBlocksSkippedByHydration, runIncrementalHydrationBootstrap, enableLocateOrCreateI18nNodeImpl, enablePrepareI18nBlockForHydrationImpl, enableClaimDehydratedIcuCaseImpl, provideAppInitializer, isListLikeIterable, iterateListLike, isJsObject, ViewRef as ViewRef$1, checkNoChangesInternal, ChangeDetectionSchedulerImpl, UseExhaustiveCheckNoChanges, Injectable, NgModuleFactory, COMPILER_OPTIONS, setJitOptions, isComponentResourceResolutionQueueEmpty, resolveComponentResources, getDocument, remove, isPromise, ApplicationInitStatus, LOCALE_ID, DEFAULT_LOCALE_ID, setLocaleId, createNgModuleRefWithProviders, optionsReducer, provideZonelessChangeDetectionInternal, getInjectorMetadata, getInjectorProviders, getNodeInjectorTNode, getLContext, walkLViewDirectives, NodeInjector, ChainedInjector, getInjector, getSignalGraph, publishDefaultGlobalUtils, publishSignalConfiguration, profiler, assertStandaloneComponentType, EnvironmentNgModuleRefAdapter, ProfilerEvent, isI18nHydrationEnabled, NGH_DEFER_BLOCKS_KEY, getLNodeForHydration, NGH_ATTR_NAME, SKIP_HYDRATION_ATTR_NAME, isI18nHydrationSupportEnabled, ViewEncapsulation as ViewEncapsulation$1, getOrComputeI18nChildren, trySerializeI18nBlock, I18N_DATA, isTNodeShape, isDetachedByI18n, TEMPLATES, isDisconnectedNode, isInSkipHydrationBlock, unsupportedProjectionOfDomNodes, CONTAINERS, isLetDeclaration, ELEMENT_CONTAINERS, processTextNodeBeforeSerialization, setJSActionAttributes, DISCONNECTED_NODES, NODES, calcPathForNode, NUM_ROOT_NODES, TEMPLATE_ID, isDeferBlock, getLDeferBlockDetails, getTDeferBlockDetails, collectNativeNodesInLContainer, validateNodeExists, validateMatchingNode, DEFER_BLOCK_ID, DEFER_BLOCK_STATE, DEFER_BLOCK_STATE$1, MULTIPLIER, collectNativeNodes, convertHydrateTriggersToJsAction, DEFER_HYDRATE_TRIGGERS, DEFER_PARENT_BLOCK_ID, NOOP_AFTER_RENDER_REF, AfterRenderManager, TracingService, AfterRenderImpl, AfterRenderSequence, AFTER_RENDER_PHASES, setClassMetadataAsync, angularCoreEnv, getRegisteredNgModuleType, assertComponentDef, ComponentFactory } from './_debug_node-chunk.mjs';
|
|
10
|
+
export { APP_INITIALIZER, Attribute, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Compiler, CompilerFactory, Component, ComponentRef, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, Directive, ElementRef, Host, HostBinding, HostListener, Inject, Input, MAX_ANIMATION_TIMEOUT, MissingTranslationStrategy, NO_ERRORS_SCHEMA, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, Optional, Output, Pipe, QueryList, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, Type, ViewContainerRef, afterEveryRender, afterNextRender, asNativeElements, createEnvironmentInjector, createNgModule, enableProfiling, getDebugNode, inputBinding, outputBinding, provideIdleServiceWith, provideNgReflectAttributes, provideZonelessChangeDetection, setTestabilityGetter, twoWayBinding, ANIMATIONS_DISABLED as ɵANIMATIONS_DISABLED, AcxChangeDetectionStrategy as ɵAcxChangeDetectionStrategy, AcxViewEncapsulation as ɵAcxViewEncapsulation, ControlFlowBlockType as ɵControlFlowBlockType, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, HydrationStatus as ɵHydrationStatus, IS_ENABLED_BLOCKING_INITIAL_NAVIGATION as ɵIS_ENABLED_BLOCKING_INITIAL_NAVIGATION, LContext as ɵLContext, LocaleDataIndex as ɵLocaleDataIndex, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, ReflectionCapabilities as ɵReflectionCapabilities, ComponentRef$1 as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, SHARED_STYLES_HOST as ɵSHARED_STYLES_HOST, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, TimerScheduler as ɵTimerScheduler, TracingAction as ɵTracingAction, USE_PENDING_TASKS as ɵUSE_PENDING_TASKS, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allLeavingAnimations as ɵallLeavingAnimations, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compilePipe as ɵcompilePipe, depsTracker as ɵdepsTracker, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getClosestComponentName as ɵgetClosestComponentName, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getSanitizationBypassType as ɵgetSanitizationBypassType, getTransferState as ɵgetTransferState, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, inferTagNameFromDefinition as ɵinferTagNameFromDefinition, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isNgModule as ɵisNgModule, isSubscribable as ɵisSubscribable, isViewDirty as ɵisViewDirty, markForRefresh as ɵmarkForRefresh, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, publishExternalGlobalUtil as ɵpublishExternalGlobalUtil, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetIncrementalHydrationEnabledWarnedForTests as ɵresetIncrementalHydrationEnabledWarnedForTests, resetJitOptions as ɵresetJitOptions, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, ɵsetClassDebugInfo, setDocument as ɵsetDocument, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵɵ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, ɵɵdefinePipe, ɵɵdefineService, ɵɵdirectiveInject, ɵɵdomElement, ɵɵdomElementContainer, ɵɵdomElementContainerEnd, ɵɵdomElementContainerStart, ɵɵdomElementEnd, ɵɵdomElementStart, ɵɵdomListener, ɵɵdomProperty, ɵɵdomTemplate, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableIncrementalHydrationRuntime, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵgetReplaceMetadataURL, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵ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, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵ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 } from './_debug_node-chunk.mjs';
|
|
11
|
+
import { OutputEmitterRef, computed, ResourceValueError, linkedSignal, isInParamsFunction, invalidResourceCreationInParams, setInParamsFunction, rethrowFatalErrors, untracked } from './_resource-chunk.mjs';
|
|
12
|
+
export { ResourceDependencyError, ResourceParamsStatus, resource, CACHE_ACTIVE as ɵCACHE_ACTIVE, ResourceImpl as ɵResourceImpl, chain as ɵchain, encapsulateResourceError as ɵencapsulateResourceError, getOutputDestroyRef as ɵgetOutputDestroyRef } from './_resource-chunk.mjs';
|
|
14
13
|
import { Subscription } from 'rxjs';
|
|
15
|
-
import {
|
|
14
|
+
import { SIGNAL_NODE, signalSetFn, SIGNAL, producerAccessed, consumerDestroy, consumerPollProducersForChange, consumerBeforeComputation, consumerAfterComputation } from './_effect-chunk.mjs';
|
|
15
|
+
import { clearAppScopedEarlyEventContract, EventContract, EventContractContainer, EventDispatcher, registerDispatcher, getAppScopedQueuedEventInfos, EventPhase, isEarlyEventType, isCaptureEventType } from './primitives-event-dispatch.mjs';
|
|
16
16
|
export { setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl } from './_weak_ref-chunk.mjs';
|
|
17
17
|
export { setCurrentInjector as ɵsetCurrentInjector } from './_not_found-chunk.mjs';
|
|
18
18
|
import '@angular/core/primitives/signals';
|
|
@@ -57,28 +57,6 @@ function createInputSignal(initialValue, options) {
|
|
|
57
57
|
return inputValueFn;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
var FactoryTarget;
|
|
61
|
-
(function (FactoryTarget) {
|
|
62
|
-
FactoryTarget[FactoryTarget["Directive"] = 0] = "Directive";
|
|
63
|
-
FactoryTarget[FactoryTarget["Component"] = 1] = "Component";
|
|
64
|
-
FactoryTarget[FactoryTarget["Injectable"] = 2] = "Injectable";
|
|
65
|
-
FactoryTarget[FactoryTarget["Pipe"] = 3] = "Pipe";
|
|
66
|
-
FactoryTarget[FactoryTarget["NgModule"] = 4] = "NgModule";
|
|
67
|
-
})(FactoryTarget || (FactoryTarget = {}));
|
|
68
|
-
var R3TemplateDependencyKind;
|
|
69
|
-
(function (R3TemplateDependencyKind) {
|
|
70
|
-
R3TemplateDependencyKind[R3TemplateDependencyKind["Directive"] = 0] = "Directive";
|
|
71
|
-
R3TemplateDependencyKind[R3TemplateDependencyKind["Pipe"] = 1] = "Pipe";
|
|
72
|
-
R3TemplateDependencyKind[R3TemplateDependencyKind["NgModule"] = 2] = "NgModule";
|
|
73
|
-
})(R3TemplateDependencyKind || (R3TemplateDependencyKind = {}));
|
|
74
|
-
var ViewEncapsulation;
|
|
75
|
-
(function (ViewEncapsulation) {
|
|
76
|
-
ViewEncapsulation[ViewEncapsulation["Emulated"] = 0] = "Emulated";
|
|
77
|
-
ViewEncapsulation[ViewEncapsulation["None"] = 2] = "None";
|
|
78
|
-
ViewEncapsulation[ViewEncapsulation["ShadowDom"] = 3] = "ShadowDom";
|
|
79
|
-
ViewEncapsulation[ViewEncapsulation["ExperimentalIsolatedShadowDom"] = 4] = "ExperimentalIsolatedShadowDom";
|
|
80
|
-
})(ViewEncapsulation || (ViewEncapsulation = {}));
|
|
81
|
-
|
|
82
60
|
var Framework;
|
|
83
61
|
(function (Framework) {
|
|
84
62
|
Framework["Angular"] = "angular";
|
|
@@ -127,6 +105,120 @@ function getDevModeNodeName(tNode) {
|
|
|
127
105
|
}
|
|
128
106
|
}
|
|
129
107
|
|
|
108
|
+
function maybeUnwrapDefaultExport(input) {
|
|
109
|
+
return isWrappedDefaultExport(input) ? input['default'] : input;
|
|
110
|
+
}
|
|
111
|
+
function isWrappedDefaultExport(value) {
|
|
112
|
+
return value && typeof value === 'object' && 'default' in value;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function injectAsync(loader, options) {
|
|
116
|
+
if (ngDevMode) {
|
|
117
|
+
assertInInjectionContext(injectAsync);
|
|
118
|
+
}
|
|
119
|
+
const injector = inject(Injector);
|
|
120
|
+
let loadedPromise = null;
|
|
121
|
+
const load = () => {
|
|
122
|
+
if (!loadedPromise) {
|
|
123
|
+
loadedPromise = loader();
|
|
124
|
+
}
|
|
125
|
+
return loadedPromise;
|
|
126
|
+
};
|
|
127
|
+
if (options?.prefetch) {
|
|
128
|
+
options.prefetch().then(() => load());
|
|
129
|
+
}
|
|
130
|
+
return () => load().then(loadedToken => injector.get(maybeUnwrapDefaultExport(loadedToken)));
|
|
131
|
+
}
|
|
132
|
+
function onIdle(options) {
|
|
133
|
+
if (ngDevMode) {
|
|
134
|
+
assertInInjectionContext(injectAsync);
|
|
135
|
+
}
|
|
136
|
+
const idleService = inject(IDLE_SERVICE);
|
|
137
|
+
const {
|
|
138
|
+
promise,
|
|
139
|
+
resolve
|
|
140
|
+
} = promiseWithResolvers();
|
|
141
|
+
idleService.requestOnIdle(() => resolve(), options);
|
|
142
|
+
return promise;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
var FactoryTarget;
|
|
146
|
+
(function (FactoryTarget) {
|
|
147
|
+
FactoryTarget[FactoryTarget["Directive"] = 0] = "Directive";
|
|
148
|
+
FactoryTarget[FactoryTarget["Component"] = 1] = "Component";
|
|
149
|
+
FactoryTarget[FactoryTarget["Injectable"] = 2] = "Injectable";
|
|
150
|
+
FactoryTarget[FactoryTarget["Pipe"] = 3] = "Pipe";
|
|
151
|
+
FactoryTarget[FactoryTarget["NgModule"] = 4] = "NgModule";
|
|
152
|
+
FactoryTarget[FactoryTarget["Service"] = 5] = "Service";
|
|
153
|
+
})(FactoryTarget || (FactoryTarget = {}));
|
|
154
|
+
var R3TemplateDependencyKind;
|
|
155
|
+
(function (R3TemplateDependencyKind) {
|
|
156
|
+
R3TemplateDependencyKind[R3TemplateDependencyKind["Directive"] = 0] = "Directive";
|
|
157
|
+
R3TemplateDependencyKind[R3TemplateDependencyKind["Pipe"] = 1] = "Pipe";
|
|
158
|
+
R3TemplateDependencyKind[R3TemplateDependencyKind["NgModule"] = 2] = "NgModule";
|
|
159
|
+
})(R3TemplateDependencyKind || (R3TemplateDependencyKind = {}));
|
|
160
|
+
var ViewEncapsulation;
|
|
161
|
+
(function (ViewEncapsulation) {
|
|
162
|
+
ViewEncapsulation[ViewEncapsulation["Emulated"] = 0] = "Emulated";
|
|
163
|
+
ViewEncapsulation[ViewEncapsulation["None"] = 2] = "None";
|
|
164
|
+
ViewEncapsulation[ViewEncapsulation["ShadowDom"] = 3] = "ShadowDom";
|
|
165
|
+
ViewEncapsulation[ViewEncapsulation["ExperimentalIsolatedShadowDom"] = 4] = "ExperimentalIsolatedShadowDom";
|
|
166
|
+
})(ViewEncapsulation || (ViewEncapsulation = {}));
|
|
167
|
+
|
|
168
|
+
function compileService(type, meta) {
|
|
169
|
+
let def = null;
|
|
170
|
+
let factoryDef = null;
|
|
171
|
+
if (!type.hasOwnProperty(NG_PROV_DEF)) {
|
|
172
|
+
Object.defineProperty(type, NG_PROV_DEF, {
|
|
173
|
+
get: () => {
|
|
174
|
+
if (def === null) {
|
|
175
|
+
const compiler = getCompilerFacade({
|
|
176
|
+
usage: 0,
|
|
177
|
+
kind: 'service',
|
|
178
|
+
type
|
|
179
|
+
});
|
|
180
|
+
def = compiler.compileService(angularCoreDiEnv, `ng:///${type.name}/ɵprov.js`, getServiceMetadata(type, meta));
|
|
181
|
+
}
|
|
182
|
+
return def;
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
if (!type.hasOwnProperty(NG_FACTORY_DEF)) {
|
|
187
|
+
Object.defineProperty(type, NG_FACTORY_DEF, {
|
|
188
|
+
get: () => {
|
|
189
|
+
if (factoryDef === null) {
|
|
190
|
+
const compiler = getCompilerFacade({
|
|
191
|
+
usage: 0,
|
|
192
|
+
kind: 'service',
|
|
193
|
+
type
|
|
194
|
+
});
|
|
195
|
+
factoryDef = compiler.compileFactory(angularCoreDiEnv, `ng:///${type.name}/ɵfac.js`, {
|
|
196
|
+
name: type.name,
|
|
197
|
+
type,
|
|
198
|
+
typeArgumentCount: 0,
|
|
199
|
+
deps: reflectDependencies(type),
|
|
200
|
+
target: compiler.FactoryTarget.Service
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
return factoryDef;
|
|
204
|
+
},
|
|
205
|
+
configurable: true
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function getServiceMetadata(type, srcMeta) {
|
|
210
|
+
const compilerMeta = {
|
|
211
|
+
name: type.name,
|
|
212
|
+
type: type,
|
|
213
|
+
typeArgumentCount: 0,
|
|
214
|
+
autoProvided: srcMeta?.autoProvided,
|
|
215
|
+
factory: srcMeta?.factory
|
|
216
|
+
};
|
|
217
|
+
return compilerMeta;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const Service = makeDecorator('Service', undefined, undefined, undefined, (type, meta) => compileService(type, meta));
|
|
221
|
+
|
|
130
222
|
function output(opts) {
|
|
131
223
|
ngDevMode && assertInInjectionContext(output);
|
|
132
224
|
return new OutputEmitterRef();
|
|
@@ -145,38 +237,6 @@ const input = (() => {
|
|
|
145
237
|
return inputFunction;
|
|
146
238
|
})();
|
|
147
239
|
|
|
148
|
-
function viewChildFn(locator, opts) {
|
|
149
|
-
ngDevMode && assertInInjectionContext(viewChild);
|
|
150
|
-
return createSingleResultOptionalQuerySignalFn(opts);
|
|
151
|
-
}
|
|
152
|
-
function viewChildRequiredFn(locator, opts) {
|
|
153
|
-
ngDevMode && assertInInjectionContext(viewChild);
|
|
154
|
-
return createSingleResultRequiredQuerySignalFn(opts);
|
|
155
|
-
}
|
|
156
|
-
const viewChild = (() => {
|
|
157
|
-
viewChildFn.required = viewChildRequiredFn;
|
|
158
|
-
return viewChildFn;
|
|
159
|
-
})();
|
|
160
|
-
function viewChildren(locator, opts) {
|
|
161
|
-
ngDevMode && assertInInjectionContext(viewChildren);
|
|
162
|
-
return createMultiResultQuerySignalFn(opts);
|
|
163
|
-
}
|
|
164
|
-
function contentChildFn(locator, opts) {
|
|
165
|
-
ngDevMode && assertInInjectionContext(contentChild);
|
|
166
|
-
return createSingleResultOptionalQuerySignalFn(opts);
|
|
167
|
-
}
|
|
168
|
-
function contentChildRequiredFn(locator, opts) {
|
|
169
|
-
ngDevMode && assertInInjectionContext(contentChildren);
|
|
170
|
-
return createSingleResultRequiredQuerySignalFn(opts);
|
|
171
|
-
}
|
|
172
|
-
const contentChild = (() => {
|
|
173
|
-
contentChildFn.required = contentChildRequiredFn;
|
|
174
|
-
return contentChildFn;
|
|
175
|
-
})();
|
|
176
|
-
function contentChildren(locator, opts) {
|
|
177
|
-
return createMultiResultQuerySignalFn(opts);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
240
|
function createModelSignal(initialValue, opts) {
|
|
181
241
|
const node = Object.create(INPUT_SIGNAL_NODE);
|
|
182
242
|
const emitterRef = new OutputEmitterRef();
|
|
@@ -225,6 +285,48 @@ const model = (() => {
|
|
|
225
285
|
return modelFunction;
|
|
226
286
|
})();
|
|
227
287
|
|
|
288
|
+
function viewChildFn(locator, opts) {
|
|
289
|
+
ngDevMode && assertInInjectionContext(viewChild);
|
|
290
|
+
return createSingleResultOptionalQuerySignalFn(opts);
|
|
291
|
+
}
|
|
292
|
+
function viewChildRequiredFn(locator, opts) {
|
|
293
|
+
ngDevMode && assertInInjectionContext(viewChild);
|
|
294
|
+
return createSingleResultRequiredQuerySignalFn(opts);
|
|
295
|
+
}
|
|
296
|
+
const viewChild = (() => {
|
|
297
|
+
viewChildFn.required = viewChildRequiredFn;
|
|
298
|
+
return viewChildFn;
|
|
299
|
+
})();
|
|
300
|
+
function viewChildren(locator, opts) {
|
|
301
|
+
ngDevMode && assertInInjectionContext(viewChildren);
|
|
302
|
+
return createMultiResultQuerySignalFn(opts);
|
|
303
|
+
}
|
|
304
|
+
function contentChildFn(locator, opts) {
|
|
305
|
+
ngDevMode && assertInInjectionContext(contentChild);
|
|
306
|
+
return createSingleResultOptionalQuerySignalFn(opts);
|
|
307
|
+
}
|
|
308
|
+
function contentChildRequiredFn(locator, opts) {
|
|
309
|
+
ngDevMode && assertInInjectionContext(contentChildren);
|
|
310
|
+
return createSingleResultRequiredQuerySignalFn(opts);
|
|
311
|
+
}
|
|
312
|
+
const contentChild = (() => {
|
|
313
|
+
contentChildFn.required = contentChildRequiredFn;
|
|
314
|
+
return contentChildFn;
|
|
315
|
+
})();
|
|
316
|
+
function contentChildren(locator, opts) {
|
|
317
|
+
return createMultiResultQuerySignalFn(opts);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
function mergeApplicationConfig(...configs) {
|
|
321
|
+
return configs.reduce((prev, curr) => {
|
|
322
|
+
return Object.assign(prev, curr, {
|
|
323
|
+
providers: [...prev.providers, ...curr.providers]
|
|
324
|
+
});
|
|
325
|
+
}, {
|
|
326
|
+
providers: []
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
|
|
228
330
|
const emitDistinctChangesOnlyDefaultValue = true;
|
|
229
331
|
class Query {}
|
|
230
332
|
const ContentChildren = makePropDecorator('ContentChildren', (selector, opts = {}) => ({
|
|
@@ -258,1174 +360,920 @@ const ViewChild = makePropDecorator('ViewChild', (selector, opts) => ({
|
|
|
258
360
|
...opts
|
|
259
361
|
}), Query);
|
|
260
362
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
return Promise.resolve(moduleFactory);
|
|
266
|
-
}
|
|
267
|
-
const compilerOptions = injector.get(COMPILER_OPTIONS, []).concat(options);
|
|
268
|
-
setJitOptions({
|
|
269
|
-
defaultEncapsulation: _lastDefined(compilerOptions.map(opts => opts.defaultEncapsulation)),
|
|
270
|
-
preserveWhitespaces: _lastDefined(compilerOptions.map(opts => opts.preserveWhitespaces))
|
|
271
|
-
});
|
|
272
|
-
if (isComponentResourceResolutionQueueEmpty()) {
|
|
273
|
-
return Promise.resolve(moduleFactory);
|
|
274
|
-
}
|
|
275
|
-
const compilerProviders = compilerOptions.flatMap(option => option.providers ?? []);
|
|
276
|
-
if (compilerProviders.length === 0) {
|
|
277
|
-
return Promise.resolve(moduleFactory);
|
|
278
|
-
}
|
|
279
|
-
const compiler = getCompilerFacade({
|
|
280
|
-
usage: 0,
|
|
281
|
-
kind: 'NgModule',
|
|
282
|
-
type: moduleType
|
|
283
|
-
});
|
|
284
|
-
const compilerInjector = Injector.create({
|
|
285
|
-
providers: compilerProviders
|
|
286
|
-
});
|
|
287
|
-
const resourceLoader = compilerInjector.get(compiler.ResourceLoader);
|
|
288
|
-
return resolveComponentResources(url => Promise.resolve(resourceLoader.get(url))).then(() => moduleFactory);
|
|
289
|
-
}
|
|
290
|
-
function _lastDefined(args) {
|
|
291
|
-
for (let i = args.length - 1; i >= 0; i--) {
|
|
292
|
-
if (args[i] !== undefined) {
|
|
293
|
-
return args[i];
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
return undefined;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
class NgZoneChangeDetectionScheduler {
|
|
300
|
-
zone = inject(NgZone);
|
|
301
|
-
changeDetectionScheduler = inject(ChangeDetectionScheduler);
|
|
302
|
-
applicationRef = inject(ApplicationRef);
|
|
303
|
-
applicationErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);
|
|
304
|
-
_onMicrotaskEmptySubscription;
|
|
305
|
-
initialize() {
|
|
306
|
-
if (this._onMicrotaskEmptySubscription) {
|
|
307
|
-
return;
|
|
308
|
-
}
|
|
309
|
-
this._onMicrotaskEmptySubscription = this.zone.onMicrotaskEmpty.subscribe({
|
|
310
|
-
next: () => {
|
|
311
|
-
if (this.changeDetectionScheduler.runningTick) {
|
|
312
|
-
return;
|
|
313
|
-
}
|
|
314
|
-
this.zone.run(() => {
|
|
315
|
-
try {
|
|
316
|
-
this.applicationRef.dirtyFlags |= 1;
|
|
317
|
-
this.applicationRef._tick();
|
|
318
|
-
} catch (e) {
|
|
319
|
-
this.applicationErrorHandler(e);
|
|
320
|
-
}
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
ngOnDestroy() {
|
|
326
|
-
this._onMicrotaskEmptySubscription?.unsubscribe();
|
|
327
|
-
}
|
|
328
|
-
static ɵfac = function NgZoneChangeDetectionScheduler_Factory(__ngFactoryType__) {
|
|
329
|
-
return new (__ngFactoryType__ || NgZoneChangeDetectionScheduler)();
|
|
363
|
+
class ApplicationModule {
|
|
364
|
+
constructor(appRef) {}
|
|
365
|
+
static ɵfac = function ApplicationModule_Factory(__ngFactoryType__) {
|
|
366
|
+
return new (__ngFactoryType__ || ApplicationModule)(__inject(ApplicationRef));
|
|
330
367
|
};
|
|
331
|
-
static
|
|
332
|
-
|
|
333
|
-
factory: NgZoneChangeDetectionScheduler.ɵfac,
|
|
334
|
-
providedIn: 'root'
|
|
368
|
+
static ɵmod = /*@__PURE__*/__defineNgModule({
|
|
369
|
+
type: ApplicationModule
|
|
335
370
|
});
|
|
371
|
+
static ɵinj = /*@__PURE__*/__defineInjector({});
|
|
336
372
|
}
|
|
337
373
|
(() => {
|
|
338
|
-
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(
|
|
339
|
-
type:
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
}], null, null);
|
|
374
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationModule, [{
|
|
375
|
+
type: NgModule
|
|
376
|
+
}], () => [{
|
|
377
|
+
type: ApplicationRef
|
|
378
|
+
}], null);
|
|
344
379
|
})();
|
|
345
|
-
|
|
346
|
-
|
|
380
|
+
|
|
381
|
+
const REQUEST = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'REQUEST' : '', {
|
|
382
|
+
providedIn: 'platform',
|
|
383
|
+
factory: () => null
|
|
347
384
|
});
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
})
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
385
|
+
const RESPONSE_INIT = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'RESPONSE_INIT' : '', {
|
|
386
|
+
providedIn: 'platform',
|
|
387
|
+
factory: () => null
|
|
388
|
+
});
|
|
389
|
+
const REQUEST_CONTEXT = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'REQUEST_CONTEXT' : '', {
|
|
390
|
+
providedIn: 'platform',
|
|
391
|
+
factory: () => null
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
const appsWithEventReplay = new WeakSet();
|
|
395
|
+
const EAGER_CONTENT_LISTENERS_KEY = '';
|
|
396
|
+
function shouldEnableEventReplay(injector) {
|
|
397
|
+
return injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);
|
|
398
|
+
}
|
|
399
|
+
function withEventReplay() {
|
|
400
|
+
const providers = [{
|
|
401
|
+
provide: IS_EVENT_REPLAY_ENABLED,
|
|
365
402
|
useFactory: () => {
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
throw new RuntimeError(402, `A required Injectable was not found in the dependency injection tree. ` + 'If you are bootstrapping an NgModule, make sure that the `BrowserModule` is imported.');
|
|
403
|
+
let isEnabled = true;
|
|
404
|
+
if (typeof ngServerMode === 'undefined' || !ngServerMode) {
|
|
405
|
+
const appId = inject(APP_ID);
|
|
406
|
+
isEnabled = !!window._ejsas?.[appId];
|
|
371
407
|
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
multi: true,
|
|
377
|
-
useFactory: () => {
|
|
378
|
-
const service = inject(ZoneStablePendingTask);
|
|
379
|
-
return () => {
|
|
380
|
-
service.initialize();
|
|
381
|
-
};
|
|
408
|
+
if (isEnabled) {
|
|
409
|
+
performanceMarkFeature('NgEventReplay');
|
|
410
|
+
}
|
|
411
|
+
return isEnabled;
|
|
382
412
|
}
|
|
383
|
-
}, {
|
|
384
|
-
provide: SCHEDULE_IN_ROOT_ZONE,
|
|
385
|
-
useValue: scheduleInRootZone ?? SCHEDULE_IN_ROOT_ZONE_DEFAULT
|
|
386
413
|
}];
|
|
414
|
+
if (typeof ngServerMode === 'undefined' || !ngServerMode) {
|
|
415
|
+
providers.push({
|
|
416
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
417
|
+
useValue: () => {
|
|
418
|
+
const appRef = inject(ApplicationRef);
|
|
419
|
+
const {
|
|
420
|
+
injector
|
|
421
|
+
} = appRef;
|
|
422
|
+
if (!appsWithEventReplay.has(appRef)) {
|
|
423
|
+
const jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);
|
|
424
|
+
if (shouldEnableEventReplay(injector)) {
|
|
425
|
+
enableStashEventListenerImpl();
|
|
426
|
+
const appId = injector.get(APP_ID);
|
|
427
|
+
const clearStashFn = setStashFn(appId, (rEl, eventName, listenerFn) => {
|
|
428
|
+
if (rEl.nodeType !== Node.ELEMENT_NODE) return;
|
|
429
|
+
sharedStashFunction(rEl, eventName, listenerFn);
|
|
430
|
+
sharedMapFunction(rEl, jsActionMap);
|
|
431
|
+
});
|
|
432
|
+
appRef.onDestroy(clearStashFn);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
},
|
|
436
|
+
multi: true
|
|
437
|
+
}, {
|
|
438
|
+
provide: APP_BOOTSTRAP_LISTENER,
|
|
439
|
+
useFactory: () => {
|
|
440
|
+
const appRef = inject(ApplicationRef);
|
|
441
|
+
const {
|
|
442
|
+
injector
|
|
443
|
+
} = appRef;
|
|
444
|
+
return () => {
|
|
445
|
+
if (!shouldEnableEventReplay(injector) || appsWithEventReplay.has(appRef)) {
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
appsWithEventReplay.add(appRef);
|
|
449
|
+
const appId = injector.get(APP_ID);
|
|
450
|
+
appRef.onDestroy(() => {
|
|
451
|
+
appsWithEventReplay.delete(appRef);
|
|
452
|
+
if (typeof ngServerMode !== 'undefined' && !ngServerMode) {
|
|
453
|
+
clearAppScopedEarlyEventContract(appId);
|
|
454
|
+
}
|
|
455
|
+
});
|
|
456
|
+
appRef.whenStable().then(() => {
|
|
457
|
+
if (appRef.destroyed) {
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
const eventContractDetails = injector.get(JSACTION_EVENT_CONTRACT);
|
|
461
|
+
initEventReplay(eventContractDetails, injector);
|
|
462
|
+
const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);
|
|
463
|
+
jsActionMap.get(EAGER_CONTENT_LISTENERS_KEY)?.forEach(removeListeners);
|
|
464
|
+
jsActionMap.delete(EAGER_CONTENT_LISTENERS_KEY);
|
|
465
|
+
const eventContract = eventContractDetails.instance;
|
|
466
|
+
if (isIncrementalHydrationEnabled(injector)) {
|
|
467
|
+
appRef.onDestroy(() => eventContract.cleanUp());
|
|
468
|
+
} else {
|
|
469
|
+
eventContract.cleanUp();
|
|
470
|
+
}
|
|
471
|
+
});
|
|
472
|
+
};
|
|
473
|
+
},
|
|
474
|
+
multi: true
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
return providers;
|
|
387
478
|
}
|
|
388
|
-
|
|
389
|
-
const
|
|
390
|
-
const
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
479
|
+
const initEventReplay = (eventDelegation, injector) => {
|
|
480
|
+
const appId = injector.get(APP_ID);
|
|
481
|
+
const earlyJsactionData = window._ejsas[appId];
|
|
482
|
+
const eventContract = eventDelegation.instance = new EventContract(new EventContractContainer(earlyJsactionData.c));
|
|
483
|
+
for (const et of earlyJsactionData.et) {
|
|
484
|
+
eventContract.addEvent(et);
|
|
485
|
+
}
|
|
486
|
+
for (const et of earlyJsactionData.etc) {
|
|
487
|
+
eventContract.addEvent(et);
|
|
488
|
+
}
|
|
489
|
+
const eventInfos = getAppScopedQueuedEventInfos(appId);
|
|
490
|
+
eventContract.replayEarlyEventInfos(eventInfos);
|
|
491
|
+
clearAppScopedEarlyEventContract(appId);
|
|
492
|
+
const dispatcher = new EventDispatcher(event => {
|
|
493
|
+
invokeRegisteredReplayListeners(injector, event, event.currentTarget);
|
|
400
494
|
});
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
initialized = false;
|
|
416
|
-
zone = inject(NgZone);
|
|
417
|
-
pendingTasks = inject(PendingTasksInternal);
|
|
418
|
-
initialize() {
|
|
419
|
-
if (this.initialized) {
|
|
420
|
-
return;
|
|
495
|
+
registerDispatcher(eventContract, dispatcher);
|
|
496
|
+
};
|
|
497
|
+
function collectDomEventsInfo(tView, lView, eventTypesToReplay) {
|
|
498
|
+
const domEventsInfo = new Map();
|
|
499
|
+
const lCleanup = lView[CLEANUP];
|
|
500
|
+
const tCleanup = tView.cleanup;
|
|
501
|
+
if (!tCleanup || !lCleanup) {
|
|
502
|
+
return domEventsInfo;
|
|
503
|
+
}
|
|
504
|
+
for (let i = 0; i < tCleanup.length;) {
|
|
505
|
+
const firstParam = tCleanup[i++];
|
|
506
|
+
const secondParam = tCleanup[i++];
|
|
507
|
+
if (typeof firstParam !== 'string') {
|
|
508
|
+
continue;
|
|
421
509
|
}
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
510
|
+
const eventType = firstParam;
|
|
511
|
+
if (!isEarlyEventType(eventType)) {
|
|
512
|
+
continue;
|
|
513
|
+
}
|
|
514
|
+
if (isCaptureEventType(eventType)) {
|
|
515
|
+
eventTypesToReplay.capture.add(eventType);
|
|
516
|
+
} else {
|
|
517
|
+
eventTypesToReplay.regular.add(eventType);
|
|
518
|
+
}
|
|
519
|
+
const listenerElement = unwrapRNode(lView[secondParam]);
|
|
520
|
+
i++;
|
|
521
|
+
const useCaptureOrIndx = tCleanup[i++];
|
|
522
|
+
const isDomEvent = typeof useCaptureOrIndx === 'boolean' || useCaptureOrIndx >= 0;
|
|
523
|
+
if (!isDomEvent) {
|
|
524
|
+
continue;
|
|
525
|
+
}
|
|
526
|
+
if (!domEventsInfo.has(listenerElement)) {
|
|
527
|
+
domEventsInfo.set(listenerElement, [eventType]);
|
|
528
|
+
} else {
|
|
529
|
+
domEventsInfo.get(listenerElement).push(eventType);
|
|
426
530
|
}
|
|
427
|
-
this.zone.runOutsideAngular(() => {
|
|
428
|
-
this.subscription.add(this.zone.onStable.subscribe(() => {
|
|
429
|
-
NgZone.assertNotInAngularZone();
|
|
430
|
-
queueMicrotask(() => {
|
|
431
|
-
if (task !== null && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {
|
|
432
|
-
this.pendingTasks.remove(task);
|
|
433
|
-
task = null;
|
|
434
|
-
}
|
|
435
|
-
});
|
|
436
|
-
}));
|
|
437
|
-
});
|
|
438
|
-
this.subscription.add(this.zone.onUnstable.subscribe(() => {
|
|
439
|
-
NgZone.assertInAngularZone();
|
|
440
|
-
task ??= this.pendingTasks.add();
|
|
441
|
-
}));
|
|
442
531
|
}
|
|
443
|
-
|
|
444
|
-
|
|
532
|
+
return domEventsInfo;
|
|
533
|
+
}
|
|
534
|
+
function invokeRegisteredReplayListeners(injector, event, currentTarget) {
|
|
535
|
+
const blockName = (currentTarget && currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE)) ?? '';
|
|
536
|
+
if (/d\d+/.test(blockName)) {
|
|
537
|
+
hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget);
|
|
538
|
+
} else if (event.eventPhase === EventPhase.REPLAY) {
|
|
539
|
+
invokeListeners(event, currentTarget);
|
|
445
540
|
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
providedIn: 'root'
|
|
541
|
+
}
|
|
542
|
+
function hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget) {
|
|
543
|
+
const queue = injector.get(EVENT_REPLAY_QUEUE);
|
|
544
|
+
queue.push({
|
|
545
|
+
event,
|
|
546
|
+
currentTarget
|
|
453
547
|
});
|
|
548
|
+
triggerHydrationFromBlockName(injector, blockName, createReplayQueuedBlockEventsFn(queue));
|
|
454
549
|
}
|
|
455
|
-
(
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
})
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
class ImagePerformanceWarning {
|
|
467
|
-
window = null;
|
|
468
|
-
observer = null;
|
|
469
|
-
options = inject(IMAGE_CONFIG);
|
|
470
|
-
lcpImageUrl;
|
|
471
|
-
start() {
|
|
472
|
-
if (typeof ngServerMode !== 'undefined' && ngServerMode || typeof PerformanceObserver === 'undefined' || this.options?.disableImageSizeWarning && this.options?.disableImageLazyLoadWarning) {
|
|
473
|
-
return;
|
|
474
|
-
}
|
|
475
|
-
this.observer = this.initPerformanceObserver();
|
|
476
|
-
const doc = getDocument();
|
|
477
|
-
const win = doc.defaultView;
|
|
478
|
-
if (win) {
|
|
479
|
-
this.window = win;
|
|
480
|
-
const waitToScan = () => {
|
|
481
|
-
setTimeout(this.scanImages.bind(this), SCAN_DELAY);
|
|
482
|
-
};
|
|
483
|
-
const setup = () => {
|
|
484
|
-
if (doc.readyState === 'complete') {
|
|
485
|
-
waitToScan();
|
|
486
|
-
} else {
|
|
487
|
-
this.window?.addEventListener('load', waitToScan, {
|
|
488
|
-
once: true
|
|
489
|
-
});
|
|
490
|
-
}
|
|
491
|
-
};
|
|
492
|
-
if (typeof Zone !== 'undefined') {
|
|
493
|
-
Zone.root.run(() => setup());
|
|
550
|
+
function createReplayQueuedBlockEventsFn(queue) {
|
|
551
|
+
return hydratedBlocks => {
|
|
552
|
+
const hydrated = new Set(hydratedBlocks);
|
|
553
|
+
const newQueue = [];
|
|
554
|
+
for (let {
|
|
555
|
+
event,
|
|
556
|
+
currentTarget
|
|
557
|
+
} of queue) {
|
|
558
|
+
const blockName = currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);
|
|
559
|
+
if (hydrated.has(blockName)) {
|
|
560
|
+
invokeListeners(event, currentTarget);
|
|
494
561
|
} else {
|
|
495
|
-
|
|
562
|
+
newQueue.push({
|
|
563
|
+
event,
|
|
564
|
+
currentTarget
|
|
565
|
+
});
|
|
496
566
|
}
|
|
497
567
|
}
|
|
568
|
+
queue.length = 0;
|
|
569
|
+
queue.push(...newQueue);
|
|
570
|
+
};
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
let isHydrationSupportEnabled = false;
|
|
574
|
+
let isI18nHydrationRuntimeSupportEnabled = false;
|
|
575
|
+
const APPLICATION_IS_STABLE_TIMEOUT = 10_000;
|
|
576
|
+
function enableHydrationRuntimeSupport() {
|
|
577
|
+
if (!isHydrationSupportEnabled) {
|
|
578
|
+
isHydrationSupportEnabled = true;
|
|
579
|
+
enableRetrieveHydrationInfoImpl();
|
|
580
|
+
enableLocateOrCreateElementNodeImpl();
|
|
581
|
+
enableLocateOrCreateTextNodeImpl();
|
|
582
|
+
enableLocateOrCreateElementContainerNodeImpl();
|
|
583
|
+
enableLocateOrCreateContainerAnchorImpl();
|
|
584
|
+
enableLocateOrCreateContainerRefImpl();
|
|
585
|
+
enableFindMatchingDehydratedViewImpl();
|
|
586
|
+
enableApplyRootElementTransformImpl();
|
|
498
587
|
}
|
|
499
|
-
|
|
500
|
-
|
|
588
|
+
}
|
|
589
|
+
function enableI18nHydrationRuntimeSupport() {
|
|
590
|
+
if (!isI18nHydrationRuntimeSupportEnabled) {
|
|
591
|
+
isI18nHydrationRuntimeSupportEnabled = true;
|
|
592
|
+
enableLocateOrCreateI18nNodeImpl();
|
|
593
|
+
enablePrepareI18nBlockForHydrationImpl();
|
|
594
|
+
enableClaimDehydratedIcuCaseImpl();
|
|
501
595
|
}
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
buffered: true
|
|
596
|
+
}
|
|
597
|
+
function printHydrationStats(injector) {
|
|
598
|
+
const console = injector.get(Console);
|
|
599
|
+
const message = `Angular hydrated ${ngDevMode.hydratedComponents} component(s) ` + `and ${ngDevMode.hydratedNodes} node(s), ` + `${ngDevMode.componentsSkippedHydration} component(s) were skipped. ` + (isIncrementalHydrationEnabled(injector) ? `${ngDevMode.deferBlocksWithIncrementalHydration} defer block(s) were configured to use incremental hydration. ` : '') + `Learn more at ${DOC_PAGE_BASE_URL}/guide/hydration.`;
|
|
600
|
+
console.log(message);
|
|
601
|
+
}
|
|
602
|
+
function whenStableWithTimeout(appRef) {
|
|
603
|
+
const whenStablePromise = appRef.whenStable();
|
|
604
|
+
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
605
|
+
const timeoutTime = APPLICATION_IS_STABLE_TIMEOUT;
|
|
606
|
+
const console = appRef.injector.get(Console);
|
|
607
|
+
const ngZone = appRef.injector.get(NgZone);
|
|
608
|
+
const timeoutId = ngZone.runOutsideAngular(() => {
|
|
609
|
+
return setTimeout(() => logWarningOnStableTimedout(timeoutTime, console), timeoutTime);
|
|
517
610
|
});
|
|
518
|
-
|
|
611
|
+
whenStablePromise.finally(() => clearTimeout(timeoutId));
|
|
519
612
|
}
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
613
|
+
return whenStablePromise;
|
|
614
|
+
}
|
|
615
|
+
const CLIENT_RENDER_MODE_FLAG = 'ngcm';
|
|
616
|
+
function isClientRenderModeEnabled(doc) {
|
|
617
|
+
return (typeof ngServerMode === 'undefined' || !ngServerMode) && doc.body.hasAttribute(CLIENT_RENDER_MODE_FLAG);
|
|
618
|
+
}
|
|
619
|
+
function withDomHydration() {
|
|
620
|
+
const providers = [{
|
|
621
|
+
provide: IS_HYDRATION_DOM_REUSE_ENABLED,
|
|
622
|
+
useFactory: () => {
|
|
623
|
+
let isEnabled = true;
|
|
624
|
+
if (typeof ngServerMode === 'undefined' || !ngServerMode) {
|
|
625
|
+
const transferState = inject(TransferState, {
|
|
626
|
+
optional: true
|
|
627
|
+
});
|
|
628
|
+
isEnabled = !!transferState?.get(NGH_DATA_KEY, null);
|
|
533
629
|
}
|
|
534
|
-
if (
|
|
535
|
-
|
|
536
|
-
lcpElementFound = true;
|
|
537
|
-
if (image.loading !== 'lazy' || image.getAttribute('ng-img')) {
|
|
538
|
-
lcpElementLoadedCorrectly = true;
|
|
539
|
-
}
|
|
540
|
-
}
|
|
630
|
+
if (isEnabled) {
|
|
631
|
+
performanceMarkFeature('NgHydration');
|
|
541
632
|
}
|
|
633
|
+
return isEnabled;
|
|
542
634
|
}
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
635
|
+
}, {
|
|
636
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
637
|
+
useValue: () => {
|
|
638
|
+
setIsI18nHydrationSupportEnabled(false);
|
|
639
|
+
if (typeof ngServerMode !== 'undefined' && ngServerMode) {
|
|
640
|
+
return;
|
|
641
|
+
}
|
|
642
|
+
const doc = inject(DOCUMENT);
|
|
643
|
+
if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
|
|
644
|
+
verifySsrContentsIntegrity(doc);
|
|
645
|
+
enableHydrationRuntimeSupport();
|
|
646
|
+
} else if (typeof ngDevMode !== 'undefined' && ngDevMode && !isClientRenderModeEnabled(doc)) {
|
|
647
|
+
const console = inject(Console);
|
|
648
|
+
const message = formatRuntimeError(-505, 'Angular hydration was requested on the client, but there was no ' + 'serialized information present in the server response, ' + 'thus hydration was not enabled. ' + 'Make sure the `provideClientHydration()` is included into the list ' + 'of providers in the server part of the application configuration.');
|
|
649
|
+
console.warn(message);
|
|
650
|
+
}
|
|
651
|
+
},
|
|
652
|
+
multi: true
|
|
653
|
+
}];
|
|
654
|
+
if (typeof ngServerMode === 'undefined' || !ngServerMode) {
|
|
655
|
+
providers.push({
|
|
656
|
+
provide: PRESERVE_HOST_CONTENT,
|
|
657
|
+
useFactory: () => {
|
|
658
|
+
return inject(IS_HYDRATION_DOM_REUSE_ENABLED);
|
|
659
|
+
}
|
|
660
|
+
}, {
|
|
661
|
+
provide: APP_BOOTSTRAP_LISTENER,
|
|
662
|
+
useFactory: () => {
|
|
663
|
+
const scheduler = inject(ChangeDetectionScheduler);
|
|
664
|
+
if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
|
|
665
|
+
const appRef = inject(ApplicationRef);
|
|
666
|
+
return () => {
|
|
667
|
+
whenStableWithTimeout(appRef).then(() => {
|
|
668
|
+
if (appRef.destroyed) {
|
|
669
|
+
return;
|
|
670
|
+
}
|
|
671
|
+
cleanupDehydratedViews(appRef);
|
|
672
|
+
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
673
|
+
countBlocksSkippedByHydration(appRef.injector);
|
|
674
|
+
printHydrationStats(appRef.injector);
|
|
675
|
+
}
|
|
676
|
+
scheduler.notify(7);
|
|
677
|
+
});
|
|
678
|
+
};
|
|
679
|
+
}
|
|
680
|
+
return () => {};
|
|
681
|
+
},
|
|
682
|
+
multi: true
|
|
683
|
+
});
|
|
579
684
|
}
|
|
580
|
-
|
|
581
|
-
return new (__ngFactoryType__ || ImagePerformanceWarning)();
|
|
582
|
-
};
|
|
583
|
-
static ɵprov = /*@__PURE__*/__defineInjectable({
|
|
584
|
-
token: ImagePerformanceWarning,
|
|
585
|
-
factory: ImagePerformanceWarning.ɵfac,
|
|
586
|
-
providedIn: 'root'
|
|
587
|
-
});
|
|
685
|
+
return makeEnvironmentProviders(providers);
|
|
588
686
|
}
|
|
589
|
-
(
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
687
|
+
function withI18nSupport() {
|
|
688
|
+
return [{
|
|
689
|
+
provide: IS_I18N_HYDRATION_ENABLED,
|
|
690
|
+
useFactory: () => inject(IS_HYDRATION_DOM_REUSE_ENABLED)
|
|
691
|
+
}, {
|
|
692
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
693
|
+
useValue: () => {
|
|
694
|
+
if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
|
|
695
|
+
enableI18nHydrationRuntimeSupport();
|
|
696
|
+
setIsI18nHydrationSupportEnabled(true);
|
|
697
|
+
performanceMarkFeature('NgI18nHydration');
|
|
698
|
+
}
|
|
699
|
+
},
|
|
700
|
+
multi: true
|
|
701
|
+
}];
|
|
599
702
|
}
|
|
600
|
-
function
|
|
601
|
-
|
|
703
|
+
function withIncrementalHydration() {
|
|
704
|
+
const providers = [withEventReplay(), {
|
|
705
|
+
provide: IS_INCREMENTAL_HYDRATION_ENABLED,
|
|
706
|
+
useValue: true
|
|
707
|
+
}, {
|
|
708
|
+
provide: DEHYDRATED_BLOCK_REGISTRY,
|
|
709
|
+
useFactory: createDehydratedBlockRegistry
|
|
710
|
+
}];
|
|
711
|
+
if (typeof ngServerMode === 'undefined' || !ngServerMode) {
|
|
712
|
+
providers.push({
|
|
713
|
+
provide: APP_BOOTSTRAP_LISTENER,
|
|
714
|
+
useFactory: () => {
|
|
715
|
+
const injector = inject(Injector);
|
|
716
|
+
const doc = inject(DOCUMENT);
|
|
717
|
+
return () => {
|
|
718
|
+
runIncrementalHydrationBootstrap(injector, doc);
|
|
719
|
+
};
|
|
720
|
+
},
|
|
721
|
+
multi: true
|
|
722
|
+
});
|
|
723
|
+
}
|
|
724
|
+
return providers;
|
|
725
|
+
}
|
|
726
|
+
function logWarningOnStableTimedout(time, console) {
|
|
727
|
+
const message = `Angular hydration expected the ApplicationRef.isStable() to emit \`true\`, but it ` + `didn't happen within ${time}ms. Angular hydration logic depends on the application becoming stable ` + `as a signal to complete hydration process.`;
|
|
728
|
+
console.warn(formatRuntimeError(-506, message));
|
|
602
729
|
}
|
|
603
730
|
|
|
604
|
-
const
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
731
|
+
const STABILITY_WARNING_THRESHOLD = APPLICATION_IS_STABLE_TIMEOUT - 1_000;
|
|
732
|
+
class DebugTaskTrackerImpl {
|
|
733
|
+
openTasks = new Map();
|
|
734
|
+
add(taskId) {
|
|
735
|
+
this.openTasks.set(taskId, new Error('Task stack tracking error'));
|
|
736
|
+
}
|
|
737
|
+
remove(taskId) {
|
|
738
|
+
this.openTasks.delete(taskId);
|
|
739
|
+
}
|
|
609
740
|
}
|
|
610
|
-
function
|
|
611
|
-
const
|
|
612
|
-
const
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
if (envInjector.get(PROVIDED_ZONELESS) && envInjector.get(PROVIDED_NG_ZONE)) {
|
|
622
|
-
console.warn(formatRuntimeError(408, 'Both provideZoneChangeDetection and provideZonelessChangeDetection are provided. ' + 'This is likely a mistake. Update the application providers to use only one of the two.'));
|
|
623
|
-
}
|
|
741
|
+
function provideStabilityDebugging() {
|
|
742
|
+
const taskTracker = new DebugTaskTrackerImpl();
|
|
743
|
+
const {
|
|
744
|
+
openTasks
|
|
745
|
+
} = taskTracker;
|
|
746
|
+
return makeEnvironmentProviders([{
|
|
747
|
+
provide: DEBUG_TASK_TRACKER,
|
|
748
|
+
useValue: taskTracker
|
|
749
|
+
}, provideAppInitializer(() => {
|
|
750
|
+
if (typeof ngDevMode === 'undefined' || !ngDevMode) {
|
|
751
|
+
console.warn('Stability debugging utility was provided in production mode. ' + 'This will cause debug code to be included in production bundles. ' + 'If this is intentional because you are debugging stability issues in a production environment, you can ignore this warning.');
|
|
624
752
|
}
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
if (isApplicationBootstrapConfig(config)) {
|
|
632
|
-
const destroyListener = () => envInjector.destroy();
|
|
633
|
-
const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);
|
|
634
|
-
onPlatformDestroyListeners.add(destroyListener);
|
|
635
|
-
envInjector.onDestroy(() => {
|
|
636
|
-
onErrorSubscription.unsubscribe();
|
|
637
|
-
onPlatformDestroyListeners.delete(destroyListener);
|
|
638
|
-
});
|
|
639
|
-
} else {
|
|
640
|
-
const destroyListener = () => config.moduleRef.destroy();
|
|
641
|
-
const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);
|
|
642
|
-
onPlatformDestroyListeners.add(destroyListener);
|
|
643
|
-
config.moduleRef.onDestroy(() => {
|
|
644
|
-
remove(config.allPlatformModules, config.moduleRef);
|
|
645
|
-
onErrorSubscription.unsubscribe();
|
|
646
|
-
onPlatformDestroyListeners.delete(destroyListener);
|
|
753
|
+
const ngZone = inject(NgZone);
|
|
754
|
+
const applicationRef = inject(ApplicationRef);
|
|
755
|
+
let _taskTrackingZone = null;
|
|
756
|
+
if (typeof Zone !== 'undefined') {
|
|
757
|
+
ngZone.run(() => {
|
|
758
|
+
_taskTrackingZone = Zone.current.get('TaskTrackingZone');
|
|
647
759
|
});
|
|
648
760
|
}
|
|
649
|
-
|
|
650
|
-
const
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
return initStatus.donePromise.then(() => {
|
|
655
|
-
const localeId = envInjector.get(LOCALE_ID, DEFAULT_LOCALE_ID);
|
|
656
|
-
setLocaleId(localeId || DEFAULT_LOCALE_ID);
|
|
657
|
-
const enableRootComponentbootstrap = envInjector.get(ENABLE_ROOT_COMPONENT_BOOTSTRAP, true);
|
|
658
|
-
if (!enableRootComponentbootstrap) {
|
|
659
|
-
if (isApplicationBootstrapConfig(config)) {
|
|
660
|
-
return envInjector.get(ApplicationRef);
|
|
661
|
-
}
|
|
662
|
-
config.allPlatformModules.push(config.moduleRef);
|
|
663
|
-
return config.moduleRef;
|
|
664
|
-
}
|
|
665
|
-
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
666
|
-
const imagePerformanceService = envInjector.get(ImagePerformanceWarning);
|
|
667
|
-
imagePerformanceService.start();
|
|
761
|
+
ngZone.runOutsideAngular(() => {
|
|
762
|
+
const timeoutId = setTimeout(() => {
|
|
763
|
+
console.debug(`---- Application did not stabilize within ${STABILITY_WARNING_THRESHOLD / 1000} seconds ----`);
|
|
764
|
+
if (typeof Zone !== 'undefined' && !_taskTrackingZone) {
|
|
765
|
+
console.info('Zone.js is present but no TaskTrackingZone found. To enable better debugging of tasks in the Angular Zone, ' + 'import "zone.js/plugins/task-tracking" in your application.');
|
|
668
766
|
}
|
|
669
|
-
if (
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
767
|
+
if (_taskTrackingZone?.macroTasks?.length) {
|
|
768
|
+
console.group('Macrotasks keeping Angular Zone unstable:');
|
|
769
|
+
for (const t of _taskTrackingZone?.macroTasks ?? []) {
|
|
770
|
+
console.debug(t.creationLocation.stack);
|
|
673
771
|
}
|
|
674
|
-
|
|
675
|
-
} else {
|
|
676
|
-
moduleBootstrapImpl?.(config.moduleRef, config.allPlatformModules);
|
|
677
|
-
return config.moduleRef;
|
|
772
|
+
console.groupEnd();
|
|
678
773
|
}
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
function _moduleDoBootstrap(moduleRef, allPlatformModules) {
|
|
688
|
-
const appRef = moduleRef.injector.get(ApplicationRef);
|
|
689
|
-
if (moduleRef._bootstrapComponents.length > 0) {
|
|
690
|
-
moduleRef._bootstrapComponents.forEach(f => appRef.bootstrap(f));
|
|
691
|
-
} else if (moduleRef.instance.ngDoBootstrap) {
|
|
692
|
-
moduleRef.instance.ngDoBootstrap(appRef);
|
|
693
|
-
} else {
|
|
694
|
-
throw new RuntimeError(-403, ngDevMode && `The module ${stringify(moduleRef.instance.constructor)} was bootstrapped, ` + `but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. ` + `Please define one of these.`);
|
|
695
|
-
}
|
|
696
|
-
allPlatformModules.push(moduleRef);
|
|
697
|
-
}
|
|
698
|
-
function _callAndReportToErrorHandler(errorHandler, ngZone, callback) {
|
|
699
|
-
try {
|
|
700
|
-
const result = callback();
|
|
701
|
-
if (isPromise(result)) {
|
|
702
|
-
return result.catch(e => {
|
|
703
|
-
ngZone.runOutsideAngular(() => errorHandler(e));
|
|
704
|
-
throw e;
|
|
774
|
+
console.group('PendingTasks keeping application unstable:');
|
|
775
|
+
for (const error of openTasks.values()) {
|
|
776
|
+
console.debug(error.stack);
|
|
777
|
+
}
|
|
778
|
+
console.groupEnd();
|
|
779
|
+
}, STABILITY_WARNING_THRESHOLD);
|
|
780
|
+
applicationRef.whenStable().then(() => {
|
|
781
|
+
clearTimeout(timeoutId);
|
|
705
782
|
});
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
} catch (e) {
|
|
709
|
-
ngZone.runOutsideAngular(() => errorHandler(e));
|
|
710
|
-
throw e;
|
|
711
|
-
}
|
|
783
|
+
});
|
|
784
|
+
})]);
|
|
712
785
|
}
|
|
713
786
|
|
|
714
|
-
class
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
_destroyListeners = [];
|
|
718
|
-
_destroyed = false;
|
|
719
|
-
constructor(_injector) {
|
|
720
|
-
this._injector = _injector;
|
|
721
|
-
}
|
|
722
|
-
bootstrapModuleFactory(moduleFactory, options) {
|
|
723
|
-
const allAppProviders = [provideZonelessChangeDetectionInternal(), ...(options?.applicationProviders ?? []), errorHandlerEnvironmentInitializer, ...(ngDevMode ? [validAppIdInitializer] : [])];
|
|
724
|
-
const moduleRef = createNgModuleRefWithProviders(moduleFactory.moduleType, this.injector, allAppProviders);
|
|
725
|
-
setModuleBootstrapImpl();
|
|
726
|
-
return bootstrap({
|
|
727
|
-
moduleRef,
|
|
728
|
-
allPlatformModules: this._modules,
|
|
729
|
-
platformInjector: this.injector
|
|
730
|
-
});
|
|
731
|
-
}
|
|
732
|
-
bootstrapModule(moduleType, compilerOptions = []) {
|
|
733
|
-
const options = optionsReducer({}, compilerOptions);
|
|
734
|
-
setModuleBootstrapImpl();
|
|
735
|
-
return compileNgModuleFactory(this.injector, options, moduleType).then(moduleFactory => this.bootstrapModuleFactory(moduleFactory, options));
|
|
787
|
+
class DefaultIterableDifferFactory {
|
|
788
|
+
supports(obj) {
|
|
789
|
+
return isListLikeIterable(obj);
|
|
736
790
|
}
|
|
737
|
-
|
|
738
|
-
|
|
791
|
+
create(trackByFn) {
|
|
792
|
+
return new DefaultIterableDiffer(trackByFn);
|
|
739
793
|
}
|
|
740
|
-
|
|
741
|
-
|
|
794
|
+
}
|
|
795
|
+
const trackByIdentity = (index, item) => item;
|
|
796
|
+
class DefaultIterableDiffer {
|
|
797
|
+
length = 0;
|
|
798
|
+
collection;
|
|
799
|
+
_linkedRecords = null;
|
|
800
|
+
_unlinkedRecords = null;
|
|
801
|
+
_previousItHead = null;
|
|
802
|
+
_itHead = null;
|
|
803
|
+
_itTail = null;
|
|
804
|
+
_additionsHead = null;
|
|
805
|
+
_additionsTail = null;
|
|
806
|
+
_movesHead = null;
|
|
807
|
+
_movesTail = null;
|
|
808
|
+
_removalsHead = null;
|
|
809
|
+
_removalsTail = null;
|
|
810
|
+
_identityChangesHead = null;
|
|
811
|
+
_identityChangesTail = null;
|
|
812
|
+
_trackByFn;
|
|
813
|
+
constructor(trackByFn) {
|
|
814
|
+
this._trackByFn = trackByFn || trackByIdentity;
|
|
742
815
|
}
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
this._modules.slice().forEach(module => module.destroy());
|
|
748
|
-
this._destroyListeners.forEach(listener => listener());
|
|
749
|
-
const destroyListeners = this._injector.get(PLATFORM_DESTROY_LISTENERS, null);
|
|
750
|
-
if (destroyListeners) {
|
|
751
|
-
destroyListeners.forEach(listener => listener());
|
|
752
|
-
destroyListeners.clear();
|
|
816
|
+
forEachItem(fn) {
|
|
817
|
+
let record;
|
|
818
|
+
for (record = this._itHead; record !== null; record = record._next) {
|
|
819
|
+
fn(record);
|
|
753
820
|
}
|
|
754
|
-
this._destroyed = true;
|
|
755
|
-
}
|
|
756
|
-
get destroyed() {
|
|
757
|
-
return this._destroyed;
|
|
758
821
|
}
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
(
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
822
|
+
forEachOperation(fn) {
|
|
823
|
+
let nextIt = this._itHead;
|
|
824
|
+
let nextRemove = this._removalsHead;
|
|
825
|
+
let addRemoveOffset = 0;
|
|
826
|
+
let moveOffsets = null;
|
|
827
|
+
while (nextIt || nextRemove) {
|
|
828
|
+
const record = !nextRemove || nextIt && nextIt.currentIndex < getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ? nextIt : nextRemove;
|
|
829
|
+
const adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);
|
|
830
|
+
const currentIndex = record.currentIndex;
|
|
831
|
+
if (record === nextRemove) {
|
|
832
|
+
addRemoveOffset--;
|
|
833
|
+
nextRemove = nextRemove._nextRemoved;
|
|
834
|
+
} else {
|
|
835
|
+
nextIt = nextIt._next;
|
|
836
|
+
if (record.previousIndex == null) {
|
|
837
|
+
addRemoveOffset++;
|
|
838
|
+
} else {
|
|
839
|
+
if (!moveOffsets) moveOffsets = [];
|
|
840
|
+
const localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;
|
|
841
|
+
const localCurrentIndex = currentIndex - addRemoveOffset;
|
|
842
|
+
if (localMovePreviousIndex != localCurrentIndex) {
|
|
843
|
+
for (let i = 0; i < localMovePreviousIndex; i++) {
|
|
844
|
+
const offset = i < moveOffsets.length ? moveOffsets[i] : moveOffsets[i] = 0;
|
|
845
|
+
const index = offset + i;
|
|
846
|
+
if (localCurrentIndex <= index && index < localMovePreviousIndex) {
|
|
847
|
+
moveOffsets[i] = offset + 1;
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
const previousIndex = record.previousIndex;
|
|
851
|
+
moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
if (adjPreviousIndex !== currentIndex) {
|
|
856
|
+
fn(record, adjPreviousIndex, currentIndex);
|
|
857
|
+
}
|
|
858
|
+
}
|
|
783
859
|
}
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
runPlatformInitializers(injector);
|
|
789
|
-
return platform;
|
|
790
|
-
}
|
|
791
|
-
function createPlatformFactory(parentPlatformFactory, name, providers = []) {
|
|
792
|
-
const desc = `Platform: ${name}`;
|
|
793
|
-
const marker = new InjectionToken(desc);
|
|
794
|
-
return (extraProviders = []) => {
|
|
795
|
-
let platform = getPlatform();
|
|
796
|
-
if (!platform) {
|
|
797
|
-
const platformProviders = [...providers, ...extraProviders, {
|
|
798
|
-
provide: marker,
|
|
799
|
-
useValue: true
|
|
800
|
-
}];
|
|
801
|
-
platform = parentPlatformFactory?.(platformProviders) ?? createPlatform(createPlatformInjector(platformProviders, desc));
|
|
860
|
+
forEachPreviousItem(fn) {
|
|
861
|
+
let record;
|
|
862
|
+
for (record = this._previousItHead; record !== null; record = record._nextPrevious) {
|
|
863
|
+
fn(record);
|
|
802
864
|
}
|
|
803
|
-
return typeof ngServerMode !== 'undefined' && ngServerMode ? platform : assertPlatform(marker);
|
|
804
|
-
};
|
|
805
|
-
}
|
|
806
|
-
function createPlatformInjector(providers = [], name) {
|
|
807
|
-
return Injector.create({
|
|
808
|
-
name,
|
|
809
|
-
providers: [{
|
|
810
|
-
provide: INJECTOR_SCOPE,
|
|
811
|
-
useValue: 'platform'
|
|
812
|
-
}, {
|
|
813
|
-
provide: PLATFORM_DESTROY_LISTENERS,
|
|
814
|
-
useValue: new Set([() => _platformInjector = null])
|
|
815
|
-
}, ...providers]
|
|
816
|
-
});
|
|
817
|
-
}
|
|
818
|
-
function assertPlatform(requiredToken) {
|
|
819
|
-
const platform = getPlatform();
|
|
820
|
-
if (!platform) {
|
|
821
|
-
throw new RuntimeError(-401, ngDevMode && 'No platform exists!');
|
|
822
865
|
}
|
|
823
|
-
|
|
824
|
-
|
|
866
|
+
forEachAddedItem(fn) {
|
|
867
|
+
let record;
|
|
868
|
+
for (record = this._additionsHead; record !== null; record = record._nextAdded) {
|
|
869
|
+
fn(record);
|
|
870
|
+
}
|
|
825
871
|
}
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
872
|
+
forEachMovedItem(fn) {
|
|
873
|
+
let record;
|
|
874
|
+
for (record = this._movesHead; record !== null; record = record._nextMoved) {
|
|
875
|
+
fn(record);
|
|
876
|
+
}
|
|
831
877
|
}
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
}
|
|
837
|
-
function createOrReusePlatformInjector(providers = []) {
|
|
838
|
-
if (_platformInjector) return _platformInjector;
|
|
839
|
-
publishDefaultGlobalUtils();
|
|
840
|
-
const injector = createPlatformInjector(providers);
|
|
841
|
-
if (typeof ngServerMode === 'undefined' || !ngServerMode) {
|
|
842
|
-
_platformInjector = injector;
|
|
878
|
+
forEachRemovedItem(fn) {
|
|
879
|
+
let record;
|
|
880
|
+
for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
|
|
881
|
+
fn(record);
|
|
882
|
+
}
|
|
843
883
|
}
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
function providePlatformInitializer(initializerFn) {
|
|
849
|
-
return {
|
|
850
|
-
provide: PLATFORM_INITIALIZER,
|
|
851
|
-
useValue: initializerFn,
|
|
852
|
-
multi: true
|
|
853
|
-
};
|
|
854
|
-
}
|
|
855
|
-
function runPlatformInitializers(injector) {
|
|
856
|
-
const inits = injector.get(PLATFORM_INITIALIZER, null);
|
|
857
|
-
runInInjectionContext(injector, () => {
|
|
858
|
-
inits?.forEach(init => init());
|
|
859
|
-
});
|
|
860
|
-
}
|
|
861
|
-
|
|
862
|
-
function exhaustiveCheckNoChangesInterval(interval) {
|
|
863
|
-
return provideEnvironmentInitializer(() => {
|
|
864
|
-
const applicationRef = inject(ApplicationRef);
|
|
865
|
-
const errorHandler = inject(ErrorHandler);
|
|
866
|
-
const scheduler = inject(ChangeDetectionSchedulerImpl);
|
|
867
|
-
const ngZone = inject(NgZone);
|
|
868
|
-
function scheduleCheckNoChanges() {
|
|
869
|
-
ngZone.runOutsideAngular(() => {
|
|
870
|
-
setTimeout(() => {
|
|
871
|
-
if (applicationRef.destroyed) {
|
|
872
|
-
return;
|
|
873
|
-
}
|
|
874
|
-
if (scheduler.pendingRenderTaskId || scheduler.runningTick) {
|
|
875
|
-
scheduleCheckNoChanges();
|
|
876
|
-
return;
|
|
877
|
-
}
|
|
878
|
-
for (const view of applicationRef.allViews) {
|
|
879
|
-
try {
|
|
880
|
-
checkNoChangesInternal(view._lView, true);
|
|
881
|
-
} catch (e) {
|
|
882
|
-
errorHandler.handleError(e);
|
|
883
|
-
}
|
|
884
|
-
}
|
|
885
|
-
scheduleCheckNoChanges();
|
|
886
|
-
}, interval);
|
|
887
|
-
});
|
|
884
|
+
forEachIdentityChange(fn) {
|
|
885
|
+
let record;
|
|
886
|
+
for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {
|
|
887
|
+
fn(record);
|
|
888
888
|
}
|
|
889
|
-
scheduleCheckNoChanges();
|
|
890
|
-
});
|
|
891
|
-
}
|
|
892
|
-
|
|
893
|
-
function provideCheckNoChangesConfig(options) {
|
|
894
|
-
return makeEnvironmentProviders(typeof ngDevMode === 'undefined' || ngDevMode ? [{
|
|
895
|
-
provide: UseExhaustiveCheckNoChanges,
|
|
896
|
-
useValue: options.exhaustive
|
|
897
|
-
}, options?.interval !== undefined ? exhaustiveCheckNoChangesInterval(options.interval) : []] : []);
|
|
898
|
-
}
|
|
899
|
-
|
|
900
|
-
function isDevMode() {
|
|
901
|
-
return typeof ngDevMode === 'undefined' || !!ngDevMode;
|
|
902
|
-
}
|
|
903
|
-
function enableProdMode() {
|
|
904
|
-
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
905
|
-
_global['ngDevMode'] = false;
|
|
906
889
|
}
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
function shouldEnableEventReplay(injector) {
|
|
912
|
-
return injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);
|
|
913
|
-
}
|
|
914
|
-
function withEventReplay() {
|
|
915
|
-
const providers = [{
|
|
916
|
-
provide: IS_EVENT_REPLAY_ENABLED,
|
|
917
|
-
useFactory: () => {
|
|
918
|
-
let isEnabled = true;
|
|
919
|
-
if (typeof ngServerMode === 'undefined' || !ngServerMode) {
|
|
920
|
-
const appId = inject(APP_ID);
|
|
921
|
-
isEnabled = !!window._ejsas?.[appId];
|
|
922
|
-
}
|
|
923
|
-
if (isEnabled) {
|
|
924
|
-
performanceMarkFeature('NgEventReplay');
|
|
925
|
-
}
|
|
926
|
-
return isEnabled;
|
|
890
|
+
diff(collection) {
|
|
891
|
+
if (collection == null) collection = [];
|
|
892
|
+
if (!isListLikeIterable(collection)) {
|
|
893
|
+
throw new RuntimeError(900, ngDevMode && `Error trying to diff '${stringify(collection)}'. Only arrays and iterables are allowed`);
|
|
927
894
|
}
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
895
|
+
if (this.check(collection)) {
|
|
896
|
+
return this;
|
|
897
|
+
} else {
|
|
898
|
+
return null;
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
onDestroy() {}
|
|
902
|
+
check(collection) {
|
|
903
|
+
this._reset();
|
|
904
|
+
let record = this._itHead;
|
|
905
|
+
let mayBeDirty = false;
|
|
906
|
+
let index;
|
|
907
|
+
let item;
|
|
908
|
+
let itemTrackBy;
|
|
909
|
+
if (Array.isArray(collection)) {
|
|
910
|
+
this.length = collection.length;
|
|
911
|
+
for (let index = 0; index < this.length; index++) {
|
|
912
|
+
item = collection[index];
|
|
913
|
+
itemTrackBy = this._trackByFn(index, item);
|
|
914
|
+
if (record === null || !Object.is(record.trackById, itemTrackBy)) {
|
|
915
|
+
record = this._mismatch(record, item, itemTrackBy, index);
|
|
916
|
+
mayBeDirty = true;
|
|
917
|
+
} else {
|
|
918
|
+
if (mayBeDirty) {
|
|
919
|
+
record = this._verifyReinsertion(record, item, itemTrackBy, index);
|
|
948
920
|
}
|
|
921
|
+
if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
|
|
949
922
|
}
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
}
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
if (
|
|
961
|
-
|
|
923
|
+
record = record._next;
|
|
924
|
+
}
|
|
925
|
+
} else {
|
|
926
|
+
index = 0;
|
|
927
|
+
iterateListLike(collection, item => {
|
|
928
|
+
itemTrackBy = this._trackByFn(index, item);
|
|
929
|
+
if (record === null || !Object.is(record.trackById, itemTrackBy)) {
|
|
930
|
+
record = this._mismatch(record, item, itemTrackBy, index);
|
|
931
|
+
mayBeDirty = true;
|
|
932
|
+
} else {
|
|
933
|
+
if (mayBeDirty) {
|
|
934
|
+
record = this._verifyReinsertion(record, item, itemTrackBy, index);
|
|
962
935
|
}
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
return;
|
|
974
|
-
}
|
|
975
|
-
const eventContractDetails = injector.get(JSACTION_EVENT_CONTRACT);
|
|
976
|
-
initEventReplay(eventContractDetails, injector);
|
|
977
|
-
const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);
|
|
978
|
-
jsActionMap.get(EAGER_CONTENT_LISTENERS_KEY)?.forEach(removeListeners);
|
|
979
|
-
jsActionMap.delete(EAGER_CONTENT_LISTENERS_KEY);
|
|
980
|
-
const eventContract = eventContractDetails.instance;
|
|
981
|
-
if (isIncrementalHydrationEnabled(injector)) {
|
|
982
|
-
appRef.onDestroy(() => eventContract.cleanUp());
|
|
983
|
-
} else {
|
|
984
|
-
eventContract.cleanUp();
|
|
985
|
-
}
|
|
986
|
-
});
|
|
987
|
-
};
|
|
988
|
-
},
|
|
989
|
-
multi: true
|
|
990
|
-
});
|
|
936
|
+
if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
|
|
937
|
+
}
|
|
938
|
+
record = record._next;
|
|
939
|
+
index++;
|
|
940
|
+
});
|
|
941
|
+
this.length = index;
|
|
942
|
+
}
|
|
943
|
+
this._truncate(record);
|
|
944
|
+
this.collection = collection;
|
|
945
|
+
return this.isDirty;
|
|
991
946
|
}
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
const initEventReplay = (eventDelegation, injector) => {
|
|
995
|
-
const appId = injector.get(APP_ID);
|
|
996
|
-
const earlyJsactionData = window._ejsas[appId];
|
|
997
|
-
const eventContract = eventDelegation.instance = new EventContract(new EventContractContainer(earlyJsactionData.c));
|
|
998
|
-
for (const et of earlyJsactionData.et) {
|
|
999
|
-
eventContract.addEvent(et);
|
|
947
|
+
get isDirty() {
|
|
948
|
+
return this._additionsHead !== null || this._movesHead !== null || this._removalsHead !== null || this._identityChangesHead !== null;
|
|
1000
949
|
}
|
|
1001
|
-
|
|
1002
|
-
|
|
950
|
+
_reset() {
|
|
951
|
+
if (this.isDirty) {
|
|
952
|
+
let record;
|
|
953
|
+
for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {
|
|
954
|
+
record._nextPrevious = record._next;
|
|
955
|
+
}
|
|
956
|
+
for (record = this._additionsHead; record !== null; record = record._nextAdded) {
|
|
957
|
+
record.previousIndex = record.currentIndex;
|
|
958
|
+
}
|
|
959
|
+
this._additionsHead = this._additionsTail = null;
|
|
960
|
+
for (record = this._movesHead; record !== null; record = record._nextMoved) {
|
|
961
|
+
record.previousIndex = record.currentIndex;
|
|
962
|
+
}
|
|
963
|
+
this._movesHead = this._movesTail = null;
|
|
964
|
+
this._removalsHead = this._removalsTail = null;
|
|
965
|
+
this._identityChangesHead = this._identityChangesTail = null;
|
|
966
|
+
}
|
|
1003
967
|
}
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
}
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
968
|
+
_mismatch(record, item, itemTrackBy, index) {
|
|
969
|
+
let previousRecord;
|
|
970
|
+
if (record === null) {
|
|
971
|
+
previousRecord = this._itTail;
|
|
972
|
+
} else {
|
|
973
|
+
previousRecord = record._prev;
|
|
974
|
+
this._remove(record);
|
|
975
|
+
}
|
|
976
|
+
record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);
|
|
977
|
+
if (record !== null) {
|
|
978
|
+
if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
|
|
979
|
+
this._reinsertAfter(record, previousRecord, index);
|
|
980
|
+
} else {
|
|
981
|
+
record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);
|
|
982
|
+
if (record !== null) {
|
|
983
|
+
if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
|
|
984
|
+
this._moveAfter(record, previousRecord, index);
|
|
985
|
+
} else {
|
|
986
|
+
record = this._addAfter(new IterableChangeRecord_(item, itemTrackBy), previousRecord, index);
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
return record;
|
|
1018
990
|
}
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
991
|
+
_verifyReinsertion(record, item, itemTrackBy, index) {
|
|
992
|
+
let reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);
|
|
993
|
+
if (reinsertRecord !== null) {
|
|
994
|
+
record = this._reinsertAfter(reinsertRecord, record._prev, index);
|
|
995
|
+
} else if (record.currentIndex != index) {
|
|
996
|
+
record.currentIndex = index;
|
|
997
|
+
this._addToMoves(record, index);
|
|
1024
998
|
}
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
999
|
+
return record;
|
|
1000
|
+
}
|
|
1001
|
+
_truncate(record) {
|
|
1002
|
+
while (record !== null) {
|
|
1003
|
+
const nextRecord = record._next;
|
|
1004
|
+
this._addToRemovals(this._unlink(record));
|
|
1005
|
+
record = nextRecord;
|
|
1028
1006
|
}
|
|
1029
|
-
if (
|
|
1030
|
-
|
|
1031
|
-
} else {
|
|
1032
|
-
eventTypesToReplay.regular.add(eventType);
|
|
1007
|
+
if (this._unlinkedRecords !== null) {
|
|
1008
|
+
this._unlinkedRecords.clear();
|
|
1033
1009
|
}
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
const useCaptureOrIndx = tCleanup[i++];
|
|
1037
|
-
const isDomEvent = typeof useCaptureOrIndx === 'boolean' || useCaptureOrIndx >= 0;
|
|
1038
|
-
if (!isDomEvent) {
|
|
1039
|
-
continue;
|
|
1010
|
+
if (this._additionsTail !== null) {
|
|
1011
|
+
this._additionsTail._nextAdded = null;
|
|
1040
1012
|
}
|
|
1041
|
-
if (
|
|
1042
|
-
|
|
1013
|
+
if (this._movesTail !== null) {
|
|
1014
|
+
this._movesTail._nextMoved = null;
|
|
1015
|
+
}
|
|
1016
|
+
if (this._itTail !== null) {
|
|
1017
|
+
this._itTail._next = null;
|
|
1018
|
+
}
|
|
1019
|
+
if (this._removalsTail !== null) {
|
|
1020
|
+
this._removalsTail._nextRemoved = null;
|
|
1021
|
+
}
|
|
1022
|
+
if (this._identityChangesTail !== null) {
|
|
1023
|
+
this._identityChangesTail._nextIdentityChange = null;
|
|
1024
|
+
}
|
|
1025
|
+
}
|
|
1026
|
+
_reinsertAfter(record, prevRecord, index) {
|
|
1027
|
+
if (this._unlinkedRecords !== null) {
|
|
1028
|
+
this._unlinkedRecords.remove(record);
|
|
1029
|
+
}
|
|
1030
|
+
const prev = record._prevRemoved;
|
|
1031
|
+
const next = record._nextRemoved;
|
|
1032
|
+
if (prev === null) {
|
|
1033
|
+
this._removalsHead = next;
|
|
1043
1034
|
} else {
|
|
1044
|
-
|
|
1035
|
+
prev._nextRemoved = next;
|
|
1036
|
+
}
|
|
1037
|
+
if (next === null) {
|
|
1038
|
+
this._removalsTail = prev;
|
|
1039
|
+
} else {
|
|
1040
|
+
next._prevRemoved = prev;
|
|
1045
1041
|
}
|
|
1042
|
+
this._insertAfter(record, prevRecord, index);
|
|
1043
|
+
this._addToMoves(record, index);
|
|
1044
|
+
return record;
|
|
1046
1045
|
}
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget);
|
|
1053
|
-
} else if (event.eventPhase === EventPhase.REPLAY) {
|
|
1054
|
-
invokeListeners(event, currentTarget);
|
|
1046
|
+
_moveAfter(record, prevRecord, index) {
|
|
1047
|
+
this._unlink(record);
|
|
1048
|
+
this._insertAfter(record, prevRecord, index);
|
|
1049
|
+
this._addToMoves(record, index);
|
|
1050
|
+
return record;
|
|
1055
1051
|
}
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
});
|
|
1063
|
-
triggerHydrationFromBlockName(injector, blockName, createReplayQueuedBlockEventsFn(queue));
|
|
1064
|
-
}
|
|
1065
|
-
function createReplayQueuedBlockEventsFn(queue) {
|
|
1066
|
-
return hydratedBlocks => {
|
|
1067
|
-
const hydrated = new Set(hydratedBlocks);
|
|
1068
|
-
const newQueue = [];
|
|
1069
|
-
for (let {
|
|
1070
|
-
event,
|
|
1071
|
-
currentTarget
|
|
1072
|
-
} of queue) {
|
|
1073
|
-
const blockName = currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);
|
|
1074
|
-
if (hydrated.has(blockName)) {
|
|
1075
|
-
invokeListeners(event, currentTarget);
|
|
1076
|
-
} else {
|
|
1077
|
-
newQueue.push({
|
|
1078
|
-
event,
|
|
1079
|
-
currentTarget
|
|
1080
|
-
});
|
|
1081
|
-
}
|
|
1052
|
+
_addAfter(record, prevRecord, index) {
|
|
1053
|
+
this._insertAfter(record, prevRecord, index);
|
|
1054
|
+
if (this._additionsTail === null) {
|
|
1055
|
+
this._additionsTail = this._additionsHead = record;
|
|
1056
|
+
} else {
|
|
1057
|
+
this._additionsTail = this._additionsTail._nextAdded = record;
|
|
1082
1058
|
}
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1059
|
+
return record;
|
|
1060
|
+
}
|
|
1061
|
+
_insertAfter(record, prevRecord, index) {
|
|
1062
|
+
const next = prevRecord === null ? this._itHead : prevRecord._next;
|
|
1063
|
+
record._next = next;
|
|
1064
|
+
record._prev = prevRecord;
|
|
1065
|
+
if (next === null) {
|
|
1066
|
+
this._itTail = record;
|
|
1067
|
+
} else {
|
|
1068
|
+
next._prev = record;
|
|
1069
|
+
}
|
|
1070
|
+
if (prevRecord === null) {
|
|
1071
|
+
this._itHead = record;
|
|
1072
|
+
} else {
|
|
1073
|
+
prevRecord._next = record;
|
|
1074
|
+
}
|
|
1075
|
+
if (this._linkedRecords === null) {
|
|
1076
|
+
this._linkedRecords = new _DuplicateMap();
|
|
1077
|
+
}
|
|
1078
|
+
this._linkedRecords.put(record);
|
|
1079
|
+
record.currentIndex = index;
|
|
1080
|
+
return record;
|
|
1081
|
+
}
|
|
1082
|
+
_remove(record) {
|
|
1083
|
+
return this._addToRemovals(this._unlink(record));
|
|
1084
|
+
}
|
|
1085
|
+
_unlink(record) {
|
|
1086
|
+
if (this._linkedRecords !== null) {
|
|
1087
|
+
this._linkedRecords.remove(record);
|
|
1088
|
+
}
|
|
1089
|
+
const prev = record._prev;
|
|
1090
|
+
const next = record._next;
|
|
1091
|
+
if (prev === null) {
|
|
1092
|
+
this._itHead = next;
|
|
1093
|
+
} else {
|
|
1094
|
+
prev._next = next;
|
|
1095
|
+
}
|
|
1096
|
+
if (next === null) {
|
|
1097
|
+
this._itTail = prev;
|
|
1098
|
+
} else {
|
|
1099
|
+
next._prev = prev;
|
|
1100
|
+
}
|
|
1101
|
+
return record;
|
|
1102
|
+
}
|
|
1103
|
+
_addToMoves(record, toIndex) {
|
|
1104
|
+
if (record.previousIndex === toIndex) {
|
|
1105
|
+
return record;
|
|
1106
|
+
}
|
|
1107
|
+
if (this._movesTail === null) {
|
|
1108
|
+
this._movesTail = this._movesHead = record;
|
|
1109
|
+
} else {
|
|
1110
|
+
this._movesTail = this._movesTail._nextMoved = record;
|
|
1111
|
+
}
|
|
1112
|
+
return record;
|
|
1113
|
+
}
|
|
1114
|
+
_addToRemovals(record) {
|
|
1115
|
+
if (this._unlinkedRecords === null) {
|
|
1116
|
+
this._unlinkedRecords = new _DuplicateMap();
|
|
1117
|
+
}
|
|
1118
|
+
this._unlinkedRecords.put(record);
|
|
1119
|
+
record.currentIndex = null;
|
|
1120
|
+
record._nextRemoved = null;
|
|
1121
|
+
if (this._removalsTail === null) {
|
|
1122
|
+
this._removalsTail = this._removalsHead = record;
|
|
1123
|
+
record._prevRemoved = null;
|
|
1124
|
+
} else {
|
|
1125
|
+
record._prevRemoved = this._removalsTail;
|
|
1126
|
+
this._removalsTail = this._removalsTail._nextRemoved = record;
|
|
1127
|
+
}
|
|
1128
|
+
return record;
|
|
1129
|
+
}
|
|
1130
|
+
_addIdentityChange(record, item) {
|
|
1131
|
+
record.item = item;
|
|
1132
|
+
if (this._identityChangesTail === null) {
|
|
1133
|
+
this._identityChangesTail = this._identityChangesHead = record;
|
|
1134
|
+
} else {
|
|
1135
|
+
this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;
|
|
1136
|
+
}
|
|
1137
|
+
return record;
|
|
1103
1138
|
}
|
|
1104
1139
|
}
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1140
|
+
class IterableChangeRecord_ {
|
|
1141
|
+
item;
|
|
1142
|
+
trackById;
|
|
1143
|
+
currentIndex = null;
|
|
1144
|
+
previousIndex = null;
|
|
1145
|
+
_nextPrevious = null;
|
|
1146
|
+
_prev = null;
|
|
1147
|
+
_next = null;
|
|
1148
|
+
_prevDup = null;
|
|
1149
|
+
_nextDup = null;
|
|
1150
|
+
_prevRemoved = null;
|
|
1151
|
+
_nextRemoved = null;
|
|
1152
|
+
_nextAdded = null;
|
|
1153
|
+
_nextMoved = null;
|
|
1154
|
+
_nextIdentityChange = null;
|
|
1155
|
+
constructor(item, trackById) {
|
|
1156
|
+
this.item = item;
|
|
1157
|
+
this.trackById = trackById;
|
|
1111
1158
|
}
|
|
1112
1159
|
}
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1160
|
+
class _DuplicateItemRecordList {
|
|
1161
|
+
_head = null;
|
|
1162
|
+
_tail = null;
|
|
1163
|
+
add(record) {
|
|
1164
|
+
if (this._head === null) {
|
|
1165
|
+
this._head = this._tail = record;
|
|
1166
|
+
record._nextDup = null;
|
|
1167
|
+
record._prevDup = null;
|
|
1168
|
+
} else {
|
|
1169
|
+
this._tail._nextDup = record;
|
|
1170
|
+
record._prevDup = this._tail;
|
|
1171
|
+
record._nextDup = null;
|
|
1172
|
+
this._tail = record;
|
|
1173
|
+
}
|
|
1174
|
+
}
|
|
1175
|
+
get(trackById, atOrAfterIndex) {
|
|
1176
|
+
let record;
|
|
1177
|
+
for (record = this._head; record !== null; record = record._nextDup) {
|
|
1178
|
+
if ((atOrAfterIndex === null || atOrAfterIndex <= record.currentIndex) && Object.is(record.trackById, trackById)) {
|
|
1179
|
+
return record;
|
|
1180
|
+
}
|
|
1181
|
+
}
|
|
1182
|
+
return null;
|
|
1183
|
+
}
|
|
1184
|
+
remove(record) {
|
|
1185
|
+
const prev = record._prevDup;
|
|
1186
|
+
const next = record._nextDup;
|
|
1187
|
+
if (prev === null) {
|
|
1188
|
+
this._head = next;
|
|
1189
|
+
} else {
|
|
1190
|
+
prev._nextDup = next;
|
|
1191
|
+
}
|
|
1192
|
+
if (next === null) {
|
|
1193
|
+
this._tail = prev;
|
|
1194
|
+
} else {
|
|
1195
|
+
next._prevDup = prev;
|
|
1196
|
+
}
|
|
1197
|
+
return this._head === null;
|
|
1117
1198
|
}
|
|
1118
1199
|
}
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1200
|
+
class _DuplicateMap {
|
|
1201
|
+
map = new Map();
|
|
1202
|
+
put(record) {
|
|
1203
|
+
const key = record.trackById;
|
|
1204
|
+
let duplicates = this.map.get(key);
|
|
1205
|
+
if (!duplicates) {
|
|
1206
|
+
duplicates = new _DuplicateItemRecordList();
|
|
1207
|
+
this.map.set(key, duplicates);
|
|
1208
|
+
}
|
|
1209
|
+
duplicates.add(record);
|
|
1210
|
+
}
|
|
1211
|
+
get(trackById, atOrAfterIndex) {
|
|
1212
|
+
const key = trackById;
|
|
1213
|
+
const recordList = this.map.get(key);
|
|
1214
|
+
return recordList ? recordList.get(trackById, atOrAfterIndex) : null;
|
|
1215
|
+
}
|
|
1216
|
+
remove(record) {
|
|
1217
|
+
const key = record.trackById;
|
|
1218
|
+
const recordList = this.map.get(key);
|
|
1219
|
+
if (recordList.remove(record)) {
|
|
1220
|
+
this.map.delete(key);
|
|
1221
|
+
}
|
|
1222
|
+
return record;
|
|
1223
|
+
}
|
|
1224
|
+
get isEmpty() {
|
|
1225
|
+
return this.map.size === 0;
|
|
1226
|
+
}
|
|
1227
|
+
clear() {
|
|
1228
|
+
this.map.clear();
|
|
1229
|
+
}
|
|
1123
1230
|
}
|
|
1124
|
-
function
|
|
1125
|
-
const
|
|
1126
|
-
if (
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
const timeoutId = ngZone.runOutsideAngular(() => {
|
|
1131
|
-
return setTimeout(() => logWarningOnStableTimedout(timeoutTime, console), timeoutTime);
|
|
1132
|
-
});
|
|
1133
|
-
whenStablePromise.finally(() => clearTimeout(timeoutId));
|
|
1231
|
+
function getPreviousIndex(item, addRemoveOffset, moveOffsets) {
|
|
1232
|
+
const previousIndex = item.previousIndex;
|
|
1233
|
+
if (previousIndex === null) return previousIndex;
|
|
1234
|
+
let moveOffset = 0;
|
|
1235
|
+
if (moveOffsets && previousIndex < moveOffsets.length) {
|
|
1236
|
+
moveOffset = moveOffsets[previousIndex];
|
|
1134
1237
|
}
|
|
1135
|
-
return
|
|
1238
|
+
return previousIndex + addRemoveOffset + moveOffset;
|
|
1136
1239
|
}
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1240
|
+
|
|
1241
|
+
class DefaultKeyValueDifferFactory {
|
|
1242
|
+
supports(obj) {
|
|
1243
|
+
return obj instanceof Map || isJsObject(obj);
|
|
1244
|
+
}
|
|
1245
|
+
create() {
|
|
1246
|
+
return new DefaultKeyValueDiffer();
|
|
1247
|
+
}
|
|
1140
1248
|
}
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1249
|
+
class DefaultKeyValueDiffer {
|
|
1250
|
+
_records = new Map();
|
|
1251
|
+
_mapHead = null;
|
|
1252
|
+
_appendAfter = null;
|
|
1253
|
+
_previousMapHead = null;
|
|
1254
|
+
_changesHead = null;
|
|
1255
|
+
_changesTail = null;
|
|
1256
|
+
_additionsHead = null;
|
|
1257
|
+
_additionsTail = null;
|
|
1258
|
+
_removalsHead = null;
|
|
1259
|
+
get isDirty() {
|
|
1260
|
+
return this._additionsHead !== null || this._changesHead !== null || this._removalsHead !== null;
|
|
1261
|
+
}
|
|
1262
|
+
forEachItem(fn) {
|
|
1263
|
+
let record;
|
|
1264
|
+
for (record = this._mapHead; record !== null; record = record._next) {
|
|
1265
|
+
fn(record);
|
|
1156
1266
|
}
|
|
1157
|
-
}, {
|
|
1158
|
-
provide: ENVIRONMENT_INITIALIZER,
|
|
1159
|
-
useValue: () => {
|
|
1160
|
-
setIsI18nHydrationSupportEnabled(false);
|
|
1161
|
-
if (typeof ngServerMode !== 'undefined' && ngServerMode) {
|
|
1162
|
-
return;
|
|
1163
|
-
}
|
|
1164
|
-
const doc = inject(DOCUMENT);
|
|
1165
|
-
if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
|
|
1166
|
-
verifySsrContentsIntegrity(doc);
|
|
1167
|
-
enableHydrationRuntimeSupport();
|
|
1168
|
-
} else if (typeof ngDevMode !== 'undefined' && ngDevMode && !isClientRenderModeEnabled(doc)) {
|
|
1169
|
-
const console = inject(Console);
|
|
1170
|
-
const message = formatRuntimeError(-505, 'Angular hydration was requested on the client, but there was no ' + 'serialized information present in the server response, ' + 'thus hydration was not enabled. ' + 'Make sure the `provideClientHydration()` is included into the list ' + 'of providers in the server part of the application configuration.');
|
|
1171
|
-
console.warn(message);
|
|
1172
|
-
}
|
|
1173
|
-
},
|
|
1174
|
-
multi: true
|
|
1175
|
-
}];
|
|
1176
|
-
if (typeof ngServerMode === 'undefined' || !ngServerMode) {
|
|
1177
|
-
providers.push({
|
|
1178
|
-
provide: PRESERVE_HOST_CONTENT,
|
|
1179
|
-
useFactory: () => {
|
|
1180
|
-
return inject(IS_HYDRATION_DOM_REUSE_ENABLED);
|
|
1181
|
-
}
|
|
1182
|
-
}, {
|
|
1183
|
-
provide: APP_BOOTSTRAP_LISTENER,
|
|
1184
|
-
useFactory: () => {
|
|
1185
|
-
const scheduler = inject(ChangeDetectionScheduler);
|
|
1186
|
-
if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
|
|
1187
|
-
const appRef = inject(ApplicationRef);
|
|
1188
|
-
return () => {
|
|
1189
|
-
whenStableWithTimeout(appRef).then(() => {
|
|
1190
|
-
if (appRef.destroyed) {
|
|
1191
|
-
return;
|
|
1192
|
-
}
|
|
1193
|
-
cleanupDehydratedViews(appRef);
|
|
1194
|
-
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
1195
|
-
countBlocksSkippedByHydration(appRef.injector);
|
|
1196
|
-
printHydrationStats(appRef.injector);
|
|
1197
|
-
}
|
|
1198
|
-
scheduler.notify(7);
|
|
1199
|
-
});
|
|
1200
|
-
};
|
|
1201
|
-
}
|
|
1202
|
-
return () => {};
|
|
1203
|
-
},
|
|
1204
|
-
multi: true
|
|
1205
|
-
});
|
|
1206
|
-
}
|
|
1207
|
-
return makeEnvironmentProviders(providers);
|
|
1208
|
-
}
|
|
1209
|
-
function withI18nSupport() {
|
|
1210
|
-
return [{
|
|
1211
|
-
provide: IS_I18N_HYDRATION_ENABLED,
|
|
1212
|
-
useFactory: () => inject(IS_HYDRATION_DOM_REUSE_ENABLED)
|
|
1213
|
-
}, {
|
|
1214
|
-
provide: ENVIRONMENT_INITIALIZER,
|
|
1215
|
-
useValue: () => {
|
|
1216
|
-
if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
|
|
1217
|
-
enableI18nHydrationRuntimeSupport();
|
|
1218
|
-
setIsI18nHydrationSupportEnabled(true);
|
|
1219
|
-
performanceMarkFeature('NgI18nHydration');
|
|
1220
|
-
}
|
|
1221
|
-
},
|
|
1222
|
-
multi: true
|
|
1223
|
-
}];
|
|
1224
|
-
}
|
|
1225
|
-
function withIncrementalHydration() {
|
|
1226
|
-
const providers = [withEventReplay(), {
|
|
1227
|
-
provide: IS_INCREMENTAL_HYDRATION_ENABLED,
|
|
1228
|
-
useValue: true
|
|
1229
|
-
}, {
|
|
1230
|
-
provide: DEHYDRATED_BLOCK_REGISTRY,
|
|
1231
|
-
useClass: DehydratedBlockRegistry
|
|
1232
|
-
}, {
|
|
1233
|
-
provide: ENVIRONMENT_INITIALIZER,
|
|
1234
|
-
useValue: () => {
|
|
1235
|
-
enableIncrementalHydrationRuntimeSupport();
|
|
1236
|
-
performanceMarkFeature('NgIncrementalHydration');
|
|
1237
|
-
},
|
|
1238
|
-
multi: true
|
|
1239
|
-
}];
|
|
1240
|
-
if (typeof ngServerMode === 'undefined' || !ngServerMode) {
|
|
1241
|
-
providers.push({
|
|
1242
|
-
provide: APP_BOOTSTRAP_LISTENER,
|
|
1243
|
-
useFactory: () => {
|
|
1244
|
-
const injector = inject(Injector);
|
|
1245
|
-
const doc = inject(DOCUMENT);
|
|
1246
|
-
return () => {
|
|
1247
|
-
const deferBlockData = processBlockData(injector);
|
|
1248
|
-
const commentsByBlockId = gatherDeferBlocksCommentNodes(doc, doc.body);
|
|
1249
|
-
processAndInitTriggers(injector, deferBlockData, commentsByBlockId);
|
|
1250
|
-
appendDeferBlocksToJSActionMap(doc, injector);
|
|
1251
|
-
};
|
|
1252
|
-
},
|
|
1253
|
-
multi: true
|
|
1254
|
-
});
|
|
1255
|
-
}
|
|
1256
|
-
return providers;
|
|
1257
|
-
}
|
|
1258
|
-
function logWarningOnStableTimedout(time, console) {
|
|
1259
|
-
const message = `Angular hydration expected the ApplicationRef.isStable() to emit \`true\`, but it ` + `didn't happen within ${time}ms. Angular hydration logic depends on the application becoming stable ` + `as a signal to complete hydration process.`;
|
|
1260
|
-
console.warn(formatRuntimeError(-506, message));
|
|
1261
|
-
}
|
|
1262
|
-
|
|
1263
|
-
const STABILITY_WARNING_THRESHOLD = APPLICATION_IS_STABLE_TIMEOUT - 1_000;
|
|
1264
|
-
class DebugTaskTrackerImpl {
|
|
1265
|
-
openTasks = new Map();
|
|
1266
|
-
add(taskId) {
|
|
1267
|
-
this.openTasks.set(taskId, new Error('Task stack tracking error'));
|
|
1268
|
-
}
|
|
1269
|
-
remove(taskId) {
|
|
1270
|
-
this.openTasks.delete(taskId);
|
|
1271
|
-
}
|
|
1272
|
-
}
|
|
1273
|
-
function provideStabilityDebugging() {
|
|
1274
|
-
const taskTracker = new DebugTaskTrackerImpl();
|
|
1275
|
-
const {
|
|
1276
|
-
openTasks
|
|
1277
|
-
} = taskTracker;
|
|
1278
|
-
return makeEnvironmentProviders([{
|
|
1279
|
-
provide: DEBUG_TASK_TRACKER,
|
|
1280
|
-
useValue: taskTracker
|
|
1281
|
-
}, provideAppInitializer(() => {
|
|
1282
|
-
if (typeof ngDevMode === 'undefined' || !ngDevMode) {
|
|
1283
|
-
console.warn('Stability debugging utility was provided in production mode. ' + 'This will cause debug code to be included in production bundles. ' + 'If this is intentional because you are debugging stability issues in a production environment, you can ignore this warning.');
|
|
1284
|
-
}
|
|
1285
|
-
const ngZone = inject(NgZone);
|
|
1286
|
-
const applicationRef = inject(ApplicationRef);
|
|
1287
|
-
let _taskTrackingZone = null;
|
|
1288
|
-
if (typeof Zone !== 'undefined') {
|
|
1289
|
-
ngZone.run(() => {
|
|
1290
|
-
_taskTrackingZone = Zone.current.get('TaskTrackingZone');
|
|
1291
|
-
});
|
|
1292
|
-
}
|
|
1293
|
-
ngZone.runOutsideAngular(() => {
|
|
1294
|
-
const timeoutId = setTimeout(() => {
|
|
1295
|
-
console.debug(`---- Application did not stabilize within ${STABILITY_WARNING_THRESHOLD / 1000} seconds ----`);
|
|
1296
|
-
if (typeof Zone !== 'undefined' && !_taskTrackingZone) {
|
|
1297
|
-
console.info('Zone.js is present but no TaskTrackingZone found. To enable better debugging of tasks in the Angular Zone, ' + 'import "zone.js/plugins/task-tracking" in your application.');
|
|
1298
|
-
}
|
|
1299
|
-
if (_taskTrackingZone?.macroTasks?.length) {
|
|
1300
|
-
console.group('Macrotasks keeping Angular Zone unstable:');
|
|
1301
|
-
for (const t of _taskTrackingZone?.macroTasks ?? []) {
|
|
1302
|
-
console.debug(t.creationLocation.stack);
|
|
1303
|
-
}
|
|
1304
|
-
console.groupEnd();
|
|
1305
|
-
}
|
|
1306
|
-
console.group('PendingTasks keeping application unstable:');
|
|
1307
|
-
for (const error of openTasks.values()) {
|
|
1308
|
-
console.debug(error.stack);
|
|
1309
|
-
}
|
|
1310
|
-
console.groupEnd();
|
|
1311
|
-
}, STABILITY_WARNING_THRESHOLD);
|
|
1312
|
-
applicationRef.whenStable().then(() => {
|
|
1313
|
-
clearTimeout(timeoutId);
|
|
1314
|
-
});
|
|
1315
|
-
});
|
|
1316
|
-
})]);
|
|
1317
|
-
}
|
|
1318
|
-
|
|
1319
|
-
function getModuleFactory(id) {
|
|
1320
|
-
const type = getRegisteredNgModuleType(id);
|
|
1321
|
-
if (!type) throw noModuleError(id);
|
|
1322
|
-
return new NgModuleFactory(type);
|
|
1323
|
-
}
|
|
1324
|
-
function getNgModuleById(id) {
|
|
1325
|
-
const type = getRegisteredNgModuleType(id);
|
|
1326
|
-
if (!type) throw noModuleError(id);
|
|
1327
|
-
return type;
|
|
1328
|
-
}
|
|
1329
|
-
function noModuleError(id) {
|
|
1330
|
-
return new RuntimeError(920, ngDevMode && `No module with ID ${id} loaded`);
|
|
1331
|
-
}
|
|
1332
|
-
|
|
1333
|
-
class ChangeDetectorRef {
|
|
1334
|
-
static __NG_ELEMENT_ID__ = injectChangeDetectorRef;
|
|
1335
|
-
}
|
|
1336
|
-
function injectChangeDetectorRef(flags) {
|
|
1337
|
-
return createViewRef(getCurrentTNode(), getLView(), (flags & 16) === 16);
|
|
1338
|
-
}
|
|
1339
|
-
function createViewRef(tNode, lView, isPipe) {
|
|
1340
|
-
if (isComponentHost(tNode) && !isPipe) {
|
|
1341
|
-
const componentView = getComponentLViewByIndex(tNode.index, lView);
|
|
1342
|
-
return new ViewRef$1(componentView, componentView);
|
|
1343
|
-
} else if (tNode.type & (3 | 12 | 32 | 128)) {
|
|
1344
|
-
const hostComponentView = lView[DECLARATION_COMPONENT_VIEW];
|
|
1345
|
-
return new ViewRef$1(hostComponentView, lView);
|
|
1346
|
-
}
|
|
1347
|
-
return null;
|
|
1348
|
-
}
|
|
1349
|
-
|
|
1350
|
-
class ViewRef extends ChangeDetectorRef {}
|
|
1351
|
-
class EmbeddedViewRef extends ViewRef {}
|
|
1352
|
-
|
|
1353
|
-
class DefaultIterableDifferFactory {
|
|
1354
|
-
supports(obj) {
|
|
1355
|
-
return isListLikeIterable(obj);
|
|
1356
|
-
}
|
|
1357
|
-
create(trackByFn) {
|
|
1358
|
-
return new DefaultIterableDiffer(trackByFn);
|
|
1359
|
-
}
|
|
1360
|
-
}
|
|
1361
|
-
const trackByIdentity = (index, item) => item;
|
|
1362
|
-
class DefaultIterableDiffer {
|
|
1363
|
-
length = 0;
|
|
1364
|
-
collection;
|
|
1365
|
-
_linkedRecords = null;
|
|
1366
|
-
_unlinkedRecords = null;
|
|
1367
|
-
_previousItHead = null;
|
|
1368
|
-
_itHead = null;
|
|
1369
|
-
_itTail = null;
|
|
1370
|
-
_additionsHead = null;
|
|
1371
|
-
_additionsTail = null;
|
|
1372
|
-
_movesHead = null;
|
|
1373
|
-
_movesTail = null;
|
|
1374
|
-
_removalsHead = null;
|
|
1375
|
-
_removalsTail = null;
|
|
1376
|
-
_identityChangesHead = null;
|
|
1377
|
-
_identityChangesTail = null;
|
|
1378
|
-
_trackByFn;
|
|
1379
|
-
constructor(trackByFn) {
|
|
1380
|
-
this._trackByFn = trackByFn || trackByIdentity;
|
|
1381
1267
|
}
|
|
1382
|
-
|
|
1268
|
+
forEachPreviousItem(fn) {
|
|
1383
1269
|
let record;
|
|
1384
|
-
for (record = this.
|
|
1270
|
+
for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {
|
|
1385
1271
|
fn(record);
|
|
1386
1272
|
}
|
|
1387
1273
|
}
|
|
1388
|
-
|
|
1389
|
-
let nextIt = this._itHead;
|
|
1390
|
-
let nextRemove = this._removalsHead;
|
|
1391
|
-
let addRemoveOffset = 0;
|
|
1392
|
-
let moveOffsets = null;
|
|
1393
|
-
while (nextIt || nextRemove) {
|
|
1394
|
-
const record = !nextRemove || nextIt && nextIt.currentIndex < getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ? nextIt : nextRemove;
|
|
1395
|
-
const adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);
|
|
1396
|
-
const currentIndex = record.currentIndex;
|
|
1397
|
-
if (record === nextRemove) {
|
|
1398
|
-
addRemoveOffset--;
|
|
1399
|
-
nextRemove = nextRemove._nextRemoved;
|
|
1400
|
-
} else {
|
|
1401
|
-
nextIt = nextIt._next;
|
|
1402
|
-
if (record.previousIndex == null) {
|
|
1403
|
-
addRemoveOffset++;
|
|
1404
|
-
} else {
|
|
1405
|
-
if (!moveOffsets) moveOffsets = [];
|
|
1406
|
-
const localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;
|
|
1407
|
-
const localCurrentIndex = currentIndex - addRemoveOffset;
|
|
1408
|
-
if (localMovePreviousIndex != localCurrentIndex) {
|
|
1409
|
-
for (let i = 0; i < localMovePreviousIndex; i++) {
|
|
1410
|
-
const offset = i < moveOffsets.length ? moveOffsets[i] : moveOffsets[i] = 0;
|
|
1411
|
-
const index = offset + i;
|
|
1412
|
-
if (localCurrentIndex <= index && index < localMovePreviousIndex) {
|
|
1413
|
-
moveOffsets[i] = offset + 1;
|
|
1414
|
-
}
|
|
1415
|
-
}
|
|
1416
|
-
const previousIndex = record.previousIndex;
|
|
1417
|
-
moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;
|
|
1418
|
-
}
|
|
1419
|
-
}
|
|
1420
|
-
}
|
|
1421
|
-
if (adjPreviousIndex !== currentIndex) {
|
|
1422
|
-
fn(record, adjPreviousIndex, currentIndex);
|
|
1423
|
-
}
|
|
1424
|
-
}
|
|
1425
|
-
}
|
|
1426
|
-
forEachPreviousItem(fn) {
|
|
1274
|
+
forEachChangedItem(fn) {
|
|
1427
1275
|
let record;
|
|
1428
|
-
for (record = this.
|
|
1276
|
+
for (record = this._changesHead; record !== null; record = record._nextChanged) {
|
|
1429
1277
|
fn(record);
|
|
1430
1278
|
}
|
|
1431
1279
|
}
|
|
@@ -1435,693 +1283,1194 @@ class DefaultIterableDiffer {
|
|
|
1435
1283
|
fn(record);
|
|
1436
1284
|
}
|
|
1437
1285
|
}
|
|
1438
|
-
forEachMovedItem(fn) {
|
|
1439
|
-
let record;
|
|
1440
|
-
for (record = this._movesHead; record !== null; record = record._nextMoved) {
|
|
1441
|
-
fn(record);
|
|
1442
|
-
}
|
|
1443
|
-
}
|
|
1444
1286
|
forEachRemovedItem(fn) {
|
|
1445
1287
|
let record;
|
|
1446
1288
|
for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
|
|
1447
1289
|
fn(record);
|
|
1448
1290
|
}
|
|
1449
1291
|
}
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
}
|
|
1456
|
-
diff(collection) {
|
|
1457
|
-
if (collection == null) collection = [];
|
|
1458
|
-
if (!isListLikeIterable(collection)) {
|
|
1459
|
-
throw new RuntimeError(900, ngDevMode && `Error trying to diff '${stringify(collection)}'. Only arrays and iterables are allowed`);
|
|
1460
|
-
}
|
|
1461
|
-
if (this.check(collection)) {
|
|
1462
|
-
return this;
|
|
1463
|
-
} else {
|
|
1464
|
-
return null;
|
|
1292
|
+
diff(map) {
|
|
1293
|
+
if (!map) {
|
|
1294
|
+
map = new Map();
|
|
1295
|
+
} else if (!(map instanceof Map || isJsObject(map))) {
|
|
1296
|
+
throw new RuntimeError(900, ngDevMode && `Error trying to diff '${stringify(map)}'. Only maps and objects are allowed`);
|
|
1465
1297
|
}
|
|
1298
|
+
return this.check(map) ? this : null;
|
|
1466
1299
|
}
|
|
1467
|
-
|
|
1468
|
-
check(collection) {
|
|
1300
|
+
check(map) {
|
|
1469
1301
|
this._reset();
|
|
1470
|
-
let
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
if (record === null || !Object.is(record.trackById, itemTrackBy)) {
|
|
1481
|
-
record = this._mismatch(record, item, itemTrackBy, index);
|
|
1482
|
-
mayBeDirty = true;
|
|
1483
|
-
} else {
|
|
1484
|
-
if (mayBeDirty) {
|
|
1485
|
-
record = this._verifyReinsertion(record, item, itemTrackBy, index);
|
|
1486
|
-
}
|
|
1487
|
-
if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
|
|
1488
|
-
}
|
|
1489
|
-
record = record._next;
|
|
1302
|
+
let insertBefore = this._mapHead;
|
|
1303
|
+
this._appendAfter = null;
|
|
1304
|
+
this._forEach(map, (value, key) => {
|
|
1305
|
+
if (insertBefore && insertBefore.key === key) {
|
|
1306
|
+
this._maybeAddToChanges(insertBefore, value);
|
|
1307
|
+
this._appendAfter = insertBefore;
|
|
1308
|
+
insertBefore = insertBefore._next;
|
|
1309
|
+
} else {
|
|
1310
|
+
const record = this._getOrCreateRecordForKey(key, value);
|
|
1311
|
+
insertBefore = this._insertBeforeOrAppend(insertBefore, record);
|
|
1490
1312
|
}
|
|
1491
|
-
}
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
record = this._verifyReinsertion(record, item, itemTrackBy, index);
|
|
1501
|
-
}
|
|
1502
|
-
if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
|
|
1313
|
+
});
|
|
1314
|
+
if (insertBefore) {
|
|
1315
|
+
if (insertBefore._prev) {
|
|
1316
|
+
insertBefore._prev._next = null;
|
|
1317
|
+
}
|
|
1318
|
+
this._removalsHead = insertBefore;
|
|
1319
|
+
for (let record = insertBefore; record !== null; record = record._nextRemoved) {
|
|
1320
|
+
if (record === this._mapHead) {
|
|
1321
|
+
this._mapHead = null;
|
|
1503
1322
|
}
|
|
1504
|
-
record
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1323
|
+
this._records.delete(record.key);
|
|
1324
|
+
record._nextRemoved = record._next;
|
|
1325
|
+
record.previousValue = record.currentValue;
|
|
1326
|
+
record.currentValue = null;
|
|
1327
|
+
record._prev = null;
|
|
1328
|
+
record._next = null;
|
|
1329
|
+
}
|
|
1508
1330
|
}
|
|
1509
|
-
this.
|
|
1510
|
-
this.
|
|
1331
|
+
if (this._changesTail) this._changesTail._nextChanged = null;
|
|
1332
|
+
if (this._additionsTail) this._additionsTail._nextAdded = null;
|
|
1511
1333
|
return this.isDirty;
|
|
1512
1334
|
}
|
|
1513
|
-
|
|
1514
|
-
|
|
1335
|
+
_insertBeforeOrAppend(before, record) {
|
|
1336
|
+
if (before) {
|
|
1337
|
+
const prev = before._prev;
|
|
1338
|
+
record._next = before;
|
|
1339
|
+
record._prev = prev;
|
|
1340
|
+
before._prev = record;
|
|
1341
|
+
if (prev) {
|
|
1342
|
+
prev._next = record;
|
|
1343
|
+
}
|
|
1344
|
+
if (before === this._mapHead) {
|
|
1345
|
+
this._mapHead = record;
|
|
1346
|
+
}
|
|
1347
|
+
this._appendAfter = before;
|
|
1348
|
+
return before;
|
|
1349
|
+
}
|
|
1350
|
+
if (this._appendAfter) {
|
|
1351
|
+
this._appendAfter._next = record;
|
|
1352
|
+
record._prev = this._appendAfter;
|
|
1353
|
+
} else {
|
|
1354
|
+
this._mapHead = record;
|
|
1355
|
+
}
|
|
1356
|
+
this._appendAfter = record;
|
|
1357
|
+
return null;
|
|
1358
|
+
}
|
|
1359
|
+
_getOrCreateRecordForKey(key, value) {
|
|
1360
|
+
if (this._records.has(key)) {
|
|
1361
|
+
const record = this._records.get(key);
|
|
1362
|
+
this._maybeAddToChanges(record, value);
|
|
1363
|
+
const prev = record._prev;
|
|
1364
|
+
const next = record._next;
|
|
1365
|
+
if (prev) {
|
|
1366
|
+
prev._next = next;
|
|
1367
|
+
}
|
|
1368
|
+
if (next) {
|
|
1369
|
+
next._prev = prev;
|
|
1370
|
+
}
|
|
1371
|
+
record._next = null;
|
|
1372
|
+
record._prev = null;
|
|
1373
|
+
return record;
|
|
1374
|
+
}
|
|
1375
|
+
const record = new KeyValueChangeRecord_(key);
|
|
1376
|
+
this._records.set(key, record);
|
|
1377
|
+
record.currentValue = value;
|
|
1378
|
+
this._addToAdditions(record);
|
|
1379
|
+
return record;
|
|
1515
1380
|
}
|
|
1516
1381
|
_reset() {
|
|
1517
1382
|
if (this.isDirty) {
|
|
1518
1383
|
let record;
|
|
1519
|
-
|
|
1384
|
+
this._previousMapHead = this._mapHead;
|
|
1385
|
+
for (record = this._previousMapHead; record !== null; record = record._next) {
|
|
1520
1386
|
record._nextPrevious = record._next;
|
|
1521
1387
|
}
|
|
1522
|
-
for (record = this.
|
|
1523
|
-
record.
|
|
1388
|
+
for (record = this._changesHead; record !== null; record = record._nextChanged) {
|
|
1389
|
+
record.previousValue = record.currentValue;
|
|
1524
1390
|
}
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
record.previousIndex = record.currentIndex;
|
|
1391
|
+
for (record = this._additionsHead; record != null; record = record._nextAdded) {
|
|
1392
|
+
record.previousValue = record.currentValue;
|
|
1528
1393
|
}
|
|
1529
|
-
this.
|
|
1530
|
-
this.
|
|
1531
|
-
this.
|
|
1394
|
+
this._changesHead = this._changesTail = null;
|
|
1395
|
+
this._additionsHead = this._additionsTail = null;
|
|
1396
|
+
this._removalsHead = null;
|
|
1532
1397
|
}
|
|
1533
1398
|
}
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
previousRecord = record._prev;
|
|
1540
|
-
this._remove(record);
|
|
1399
|
+
_maybeAddToChanges(record, newValue) {
|
|
1400
|
+
if (!Object.is(newValue, record.currentValue)) {
|
|
1401
|
+
record.previousValue = record.currentValue;
|
|
1402
|
+
record.currentValue = newValue;
|
|
1403
|
+
this._addToChanges(record);
|
|
1541
1404
|
}
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
this.
|
|
1405
|
+
}
|
|
1406
|
+
_addToAdditions(record) {
|
|
1407
|
+
if (this._additionsHead === null) {
|
|
1408
|
+
this._additionsHead = this._additionsTail = record;
|
|
1546
1409
|
} else {
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
|
|
1550
|
-
this._moveAfter(record, previousRecord, index);
|
|
1551
|
-
} else {
|
|
1552
|
-
record = this._addAfter(new IterableChangeRecord_(item, itemTrackBy), previousRecord, index);
|
|
1553
|
-
}
|
|
1410
|
+
this._additionsTail._nextAdded = record;
|
|
1411
|
+
this._additionsTail = record;
|
|
1554
1412
|
}
|
|
1555
|
-
return record;
|
|
1556
1413
|
}
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
this._addToMoves(record, index);
|
|
1414
|
+
_addToChanges(record) {
|
|
1415
|
+
if (this._changesHead === null) {
|
|
1416
|
+
this._changesHead = this._changesTail = record;
|
|
1417
|
+
} else {
|
|
1418
|
+
this._changesTail._nextChanged = record;
|
|
1419
|
+
this._changesTail = record;
|
|
1564
1420
|
}
|
|
1565
|
-
return record;
|
|
1566
1421
|
}
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1422
|
+
_forEach(obj, fn) {
|
|
1423
|
+
if (obj instanceof Map) {
|
|
1424
|
+
obj.forEach(fn);
|
|
1425
|
+
} else {
|
|
1426
|
+
Object.keys(obj).forEach(k => fn(obj[k], k));
|
|
1572
1427
|
}
|
|
1573
|
-
|
|
1574
|
-
|
|
1428
|
+
}
|
|
1429
|
+
}
|
|
1430
|
+
class KeyValueChangeRecord_ {
|
|
1431
|
+
key;
|
|
1432
|
+
previousValue = null;
|
|
1433
|
+
currentValue = null;
|
|
1434
|
+
_nextPrevious = null;
|
|
1435
|
+
_next = null;
|
|
1436
|
+
_prev = null;
|
|
1437
|
+
_nextAdded = null;
|
|
1438
|
+
_nextRemoved = null;
|
|
1439
|
+
_nextChanged = null;
|
|
1440
|
+
constructor(key) {
|
|
1441
|
+
this.key = key;
|
|
1442
|
+
}
|
|
1443
|
+
}
|
|
1444
|
+
|
|
1445
|
+
function defaultIterableDiffersFactory() {
|
|
1446
|
+
return new IterableDiffers([new DefaultIterableDifferFactory()]);
|
|
1447
|
+
}
|
|
1448
|
+
class IterableDiffers {
|
|
1449
|
+
factories;
|
|
1450
|
+
static ɵprov =
|
|
1451
|
+
/* @__PURE__ */
|
|
1452
|
+
__defineInjectable({
|
|
1453
|
+
token: IterableDiffers,
|
|
1454
|
+
providedIn: 'root',
|
|
1455
|
+
factory: defaultIterableDiffersFactory
|
|
1456
|
+
});
|
|
1457
|
+
constructor(factories) {
|
|
1458
|
+
this.factories = factories;
|
|
1459
|
+
}
|
|
1460
|
+
static create(factories, parent) {
|
|
1461
|
+
if (parent != null) {
|
|
1462
|
+
const copied = parent.factories.slice();
|
|
1463
|
+
factories = factories.concat(copied);
|
|
1575
1464
|
}
|
|
1576
|
-
|
|
1577
|
-
|
|
1465
|
+
return new IterableDiffers(factories);
|
|
1466
|
+
}
|
|
1467
|
+
static extend(factories) {
|
|
1468
|
+
return {
|
|
1469
|
+
provide: IterableDiffers,
|
|
1470
|
+
useFactory: () => {
|
|
1471
|
+
const parent = inject(IterableDiffers, {
|
|
1472
|
+
optional: true,
|
|
1473
|
+
skipSelf: true
|
|
1474
|
+
});
|
|
1475
|
+
return IterableDiffers.create(factories, parent || defaultIterableDiffersFactory());
|
|
1476
|
+
}
|
|
1477
|
+
};
|
|
1478
|
+
}
|
|
1479
|
+
find(iterable) {
|
|
1480
|
+
const factory = this.factories.find(f => f.supports(iterable));
|
|
1481
|
+
if (factory != null) {
|
|
1482
|
+
return factory;
|
|
1483
|
+
} else {
|
|
1484
|
+
throw new RuntimeError(901, ngDevMode && `Cannot find a differ supporting object '${iterable}' of type '${getTypeNameForDebugging(iterable)}'`);
|
|
1578
1485
|
}
|
|
1579
|
-
|
|
1580
|
-
|
|
1486
|
+
}
|
|
1487
|
+
}
|
|
1488
|
+
function getTypeNameForDebugging(type) {
|
|
1489
|
+
return type['name'] || typeof type;
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1492
|
+
function defaultKeyValueDiffersFactory() {
|
|
1493
|
+
return new KeyValueDiffers([new DefaultKeyValueDifferFactory()]);
|
|
1494
|
+
}
|
|
1495
|
+
class KeyValueDiffers {
|
|
1496
|
+
static ɵprov =
|
|
1497
|
+
/* @__PURE__ */
|
|
1498
|
+
__defineInjectable({
|
|
1499
|
+
token: KeyValueDiffers,
|
|
1500
|
+
providedIn: 'root',
|
|
1501
|
+
factory: defaultKeyValueDiffersFactory
|
|
1502
|
+
});
|
|
1503
|
+
factories;
|
|
1504
|
+
constructor(factories) {
|
|
1505
|
+
this.factories = factories;
|
|
1506
|
+
}
|
|
1507
|
+
static create(factories, parent) {
|
|
1508
|
+
if (parent) {
|
|
1509
|
+
const copied = parent.factories.slice();
|
|
1510
|
+
factories = factories.concat(copied);
|
|
1581
1511
|
}
|
|
1582
|
-
|
|
1583
|
-
|
|
1512
|
+
return new KeyValueDiffers(factories);
|
|
1513
|
+
}
|
|
1514
|
+
static extend(factories) {
|
|
1515
|
+
return {
|
|
1516
|
+
provide: KeyValueDiffers,
|
|
1517
|
+
useFactory: () => {
|
|
1518
|
+
const parent = inject(KeyValueDiffers, {
|
|
1519
|
+
optional: true,
|
|
1520
|
+
skipSelf: true
|
|
1521
|
+
});
|
|
1522
|
+
return KeyValueDiffers.create(factories, parent || defaultKeyValueDiffersFactory());
|
|
1523
|
+
}
|
|
1524
|
+
};
|
|
1525
|
+
}
|
|
1526
|
+
find(kv) {
|
|
1527
|
+
const factory = this.factories.find(f => f.supports(kv));
|
|
1528
|
+
if (factory) {
|
|
1529
|
+
return factory;
|
|
1584
1530
|
}
|
|
1585
|
-
|
|
1586
|
-
|
|
1531
|
+
throw new RuntimeError(901, ngDevMode && `Cannot find a differ supporting object '${kv}'`);
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
|
|
1535
|
+
class ChangeDetectorRef {
|
|
1536
|
+
static __NG_ELEMENT_ID__ = injectChangeDetectorRef;
|
|
1537
|
+
}
|
|
1538
|
+
function injectChangeDetectorRef(flags) {
|
|
1539
|
+
return createViewRef(getCurrentTNode(), getLView(), (flags & 16) === 16);
|
|
1540
|
+
}
|
|
1541
|
+
function createViewRef(tNode, lView, isPipe) {
|
|
1542
|
+
if (isComponentHost(tNode) && !isPipe) {
|
|
1543
|
+
const componentView = getComponentLViewByIndex(tNode.index, lView);
|
|
1544
|
+
return new ViewRef$1(componentView, componentView);
|
|
1545
|
+
} else if (tNode.type & (3 | 12 | 32 | 128)) {
|
|
1546
|
+
const hostComponentView = lView[DECLARATION_COMPONENT_VIEW];
|
|
1547
|
+
return new ViewRef$1(hostComponentView, lView);
|
|
1548
|
+
}
|
|
1549
|
+
return null;
|
|
1550
|
+
}
|
|
1551
|
+
|
|
1552
|
+
const keyValDiff = [new DefaultKeyValueDifferFactory()];
|
|
1553
|
+
const iterableDiff = [new DefaultIterableDifferFactory()];
|
|
1554
|
+
const defaultIterableDiffers = new IterableDiffers(iterableDiff);
|
|
1555
|
+
const defaultKeyValueDiffers = new KeyValueDiffers(keyValDiff);
|
|
1556
|
+
|
|
1557
|
+
function exhaustiveCheckNoChangesInterval(interval) {
|
|
1558
|
+
return provideEnvironmentInitializer(() => {
|
|
1559
|
+
const applicationRef = inject(ApplicationRef);
|
|
1560
|
+
const errorHandler = inject(ErrorHandler);
|
|
1561
|
+
const scheduler = inject(ChangeDetectionSchedulerImpl);
|
|
1562
|
+
const ngZone = inject(NgZone);
|
|
1563
|
+
function scheduleCheckNoChanges() {
|
|
1564
|
+
ngZone.runOutsideAngular(() => {
|
|
1565
|
+
setTimeout(() => {
|
|
1566
|
+
if (applicationRef.destroyed) {
|
|
1567
|
+
return;
|
|
1568
|
+
}
|
|
1569
|
+
if (scheduler.pendingRenderTaskId || scheduler.runningTick) {
|
|
1570
|
+
scheduleCheckNoChanges();
|
|
1571
|
+
return;
|
|
1572
|
+
}
|
|
1573
|
+
for (const view of applicationRef.allViews) {
|
|
1574
|
+
try {
|
|
1575
|
+
checkNoChangesInternal(view._lView, true);
|
|
1576
|
+
} catch (e) {
|
|
1577
|
+
errorHandler.handleError(e);
|
|
1578
|
+
}
|
|
1579
|
+
}
|
|
1580
|
+
scheduleCheckNoChanges();
|
|
1581
|
+
}, interval);
|
|
1582
|
+
});
|
|
1587
1583
|
}
|
|
1588
|
-
|
|
1589
|
-
|
|
1584
|
+
scheduleCheckNoChanges();
|
|
1585
|
+
});
|
|
1586
|
+
}
|
|
1587
|
+
|
|
1588
|
+
function provideCheckNoChangesConfig(options) {
|
|
1589
|
+
return makeEnvironmentProviders(typeof ngDevMode === 'undefined' || ngDevMode ? [{
|
|
1590
|
+
provide: UseExhaustiveCheckNoChanges,
|
|
1591
|
+
useValue: options.exhaustive
|
|
1592
|
+
}, options?.interval !== undefined ? exhaustiveCheckNoChangesInterval(options.interval) : []] : []);
|
|
1593
|
+
}
|
|
1594
|
+
|
|
1595
|
+
class NgZoneChangeDetectionScheduler {
|
|
1596
|
+
zone = inject(NgZone);
|
|
1597
|
+
changeDetectionScheduler = inject(ChangeDetectionScheduler);
|
|
1598
|
+
applicationRef = inject(ApplicationRef);
|
|
1599
|
+
applicationErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);
|
|
1600
|
+
_onMicrotaskEmptySubscription;
|
|
1601
|
+
initialize() {
|
|
1602
|
+
if (this._onMicrotaskEmptySubscription) {
|
|
1603
|
+
return;
|
|
1590
1604
|
}
|
|
1605
|
+
this._onMicrotaskEmptySubscription = this.zone.onMicrotaskEmpty.subscribe({
|
|
1606
|
+
next: () => {
|
|
1607
|
+
if (this.changeDetectionScheduler.runningTick) {
|
|
1608
|
+
return;
|
|
1609
|
+
}
|
|
1610
|
+
this.zone.run(() => {
|
|
1611
|
+
try {
|
|
1612
|
+
this.applicationRef.dirtyFlags |= 1;
|
|
1613
|
+
this.applicationRef._tick();
|
|
1614
|
+
} catch (e) {
|
|
1615
|
+
this.applicationErrorHandler(e);
|
|
1616
|
+
}
|
|
1617
|
+
});
|
|
1618
|
+
}
|
|
1619
|
+
});
|
|
1591
1620
|
}
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1621
|
+
ngOnDestroy() {
|
|
1622
|
+
this._onMicrotaskEmptySubscription?.unsubscribe();
|
|
1623
|
+
}
|
|
1624
|
+
static ɵfac = function NgZoneChangeDetectionScheduler_Factory(__ngFactoryType__) {
|
|
1625
|
+
return new (__ngFactoryType__ || NgZoneChangeDetectionScheduler)();
|
|
1626
|
+
};
|
|
1627
|
+
static ɵprov = /*@__PURE__*/__defineInjectable({
|
|
1628
|
+
token: NgZoneChangeDetectionScheduler,
|
|
1629
|
+
factory: NgZoneChangeDetectionScheduler.ɵfac,
|
|
1630
|
+
providedIn: 'root'
|
|
1631
|
+
});
|
|
1632
|
+
}
|
|
1633
|
+
(() => {
|
|
1634
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgZoneChangeDetectionScheduler, [{
|
|
1635
|
+
type: Injectable,
|
|
1636
|
+
args: [{
|
|
1637
|
+
providedIn: 'root'
|
|
1638
|
+
}]
|
|
1639
|
+
}], null, null);
|
|
1640
|
+
})();
|
|
1641
|
+
const PROVIDED_NG_ZONE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'provideZoneChangeDetection token' : '', {
|
|
1642
|
+
factory: () => false
|
|
1643
|
+
});
|
|
1644
|
+
function internalProvideZoneChangeDetection({
|
|
1645
|
+
ngZoneFactory,
|
|
1646
|
+
scheduleInRootZone
|
|
1647
|
+
}) {
|
|
1648
|
+
ngZoneFactory ??= () => new NgZone({
|
|
1649
|
+
...getNgZoneOptions(),
|
|
1650
|
+
scheduleInRootZone
|
|
1651
|
+
});
|
|
1652
|
+
return [{
|
|
1653
|
+
provide: ZONELESS_ENABLED,
|
|
1654
|
+
useValue: false
|
|
1655
|
+
}, {
|
|
1656
|
+
provide: NgZone,
|
|
1657
|
+
useFactory: ngZoneFactory
|
|
1658
|
+
}, {
|
|
1659
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
1660
|
+
multi: true,
|
|
1661
|
+
useFactory: () => {
|
|
1662
|
+
const ngZoneChangeDetectionScheduler = inject(NgZoneChangeDetectionScheduler, {
|
|
1663
|
+
optional: true
|
|
1664
|
+
});
|
|
1665
|
+
if ((typeof ngDevMode === 'undefined' || ngDevMode) && ngZoneChangeDetectionScheduler === null) {
|
|
1666
|
+
throw new RuntimeError(402, `A required Injectable was not found in the dependency injection tree. ` + 'If you are bootstrapping an NgModule, make sure that the `BrowserModule` is imported.');
|
|
1667
|
+
}
|
|
1668
|
+
return () => ngZoneChangeDetectionScheduler.initialize();
|
|
1595
1669
|
}
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1670
|
+
}, {
|
|
1671
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
1672
|
+
multi: true,
|
|
1673
|
+
useFactory: () => {
|
|
1674
|
+
const service = inject(ZoneStablePendingTask);
|
|
1675
|
+
return () => {
|
|
1676
|
+
service.initialize();
|
|
1677
|
+
};
|
|
1678
|
+
}
|
|
1679
|
+
}, {
|
|
1680
|
+
provide: SCHEDULE_IN_ROOT_ZONE,
|
|
1681
|
+
useValue: scheduleInRootZone ?? SCHEDULE_IN_ROOT_ZONE_DEFAULT
|
|
1682
|
+
}];
|
|
1683
|
+
}
|
|
1684
|
+
function provideZoneChangeDetection(options) {
|
|
1685
|
+
const scheduleInRootZone = options?.scheduleInRootZone;
|
|
1686
|
+
const zoneProviders = internalProvideZoneChangeDetection({
|
|
1687
|
+
ngZoneFactory: () => {
|
|
1688
|
+
const ngZoneOptions = getNgZoneOptions(options);
|
|
1689
|
+
ngZoneOptions.scheduleInRootZone = scheduleInRootZone;
|
|
1690
|
+
if (ngZoneOptions.shouldCoalesceEventChangeDetection) {
|
|
1691
|
+
performanceMarkFeature('NgZone_CoalesceEvent');
|
|
1692
|
+
}
|
|
1693
|
+
return new NgZone(ngZoneOptions);
|
|
1694
|
+
},
|
|
1695
|
+
scheduleInRootZone
|
|
1696
|
+
});
|
|
1697
|
+
return makeEnvironmentProviders([{
|
|
1698
|
+
provide: PROVIDED_NG_ZONE,
|
|
1699
|
+
useValue: true
|
|
1700
|
+
}, zoneProviders]);
|
|
1701
|
+
}
|
|
1702
|
+
function getNgZoneOptions(options) {
|
|
1703
|
+
return {
|
|
1704
|
+
enableLongStackTrace: typeof ngDevMode === 'undefined' ? false : !!ngDevMode,
|
|
1705
|
+
shouldCoalesceEventChangeDetection: options?.eventCoalescing ?? false,
|
|
1706
|
+
shouldCoalesceRunChangeDetection: options?.runCoalescing ?? false
|
|
1707
|
+
};
|
|
1708
|
+
}
|
|
1709
|
+
class ZoneStablePendingTask {
|
|
1710
|
+
subscription = new Subscription();
|
|
1711
|
+
initialized = false;
|
|
1712
|
+
zone = inject(NgZone);
|
|
1713
|
+
pendingTasks = inject(PendingTasksInternal);
|
|
1714
|
+
initialize() {
|
|
1715
|
+
if (this.initialized) {
|
|
1716
|
+
return;
|
|
1602
1717
|
}
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1718
|
+
this.initialized = true;
|
|
1719
|
+
let task = null;
|
|
1720
|
+
if (!this.zone.isStable && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {
|
|
1721
|
+
task = this.pendingTasks.add();
|
|
1607
1722
|
}
|
|
1608
|
-
this.
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1723
|
+
this.zone.runOutsideAngular(() => {
|
|
1724
|
+
this.subscription.add(this.zone.onStable.subscribe(() => {
|
|
1725
|
+
NgZone.assertNotInAngularZone();
|
|
1726
|
+
queueMicrotask(() => {
|
|
1727
|
+
if (task !== null && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {
|
|
1728
|
+
this.pendingTasks.remove(task);
|
|
1729
|
+
task = null;
|
|
1730
|
+
}
|
|
1731
|
+
});
|
|
1732
|
+
}));
|
|
1733
|
+
});
|
|
1734
|
+
this.subscription.add(this.zone.onUnstable.subscribe(() => {
|
|
1735
|
+
NgZone.assertInAngularZone();
|
|
1736
|
+
task ??= this.pendingTasks.add();
|
|
1737
|
+
}));
|
|
1617
1738
|
}
|
|
1618
|
-
|
|
1619
|
-
this.
|
|
1620
|
-
if (this._additionsTail === null) {
|
|
1621
|
-
this._additionsTail = this._additionsHead = record;
|
|
1622
|
-
} else {
|
|
1623
|
-
this._additionsTail = this._additionsTail._nextAdded = record;
|
|
1624
|
-
}
|
|
1625
|
-
return record;
|
|
1739
|
+
ngOnDestroy() {
|
|
1740
|
+
this.subscription.unsubscribe();
|
|
1626
1741
|
}
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1742
|
+
static ɵfac = function ZoneStablePendingTask_Factory(__ngFactoryType__) {
|
|
1743
|
+
return new (__ngFactoryType__ || ZoneStablePendingTask)();
|
|
1744
|
+
};
|
|
1745
|
+
static ɵprov = /*@__PURE__*/__defineInjectable({
|
|
1746
|
+
token: ZoneStablePendingTask,
|
|
1747
|
+
factory: ZoneStablePendingTask.ɵfac,
|
|
1748
|
+
providedIn: 'root'
|
|
1749
|
+
});
|
|
1750
|
+
}
|
|
1751
|
+
(() => {
|
|
1752
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ZoneStablePendingTask, [{
|
|
1753
|
+
type: Injectable,
|
|
1754
|
+
args: [{
|
|
1755
|
+
providedIn: 'root'
|
|
1756
|
+
}]
|
|
1757
|
+
}], null, null);
|
|
1758
|
+
})();
|
|
1759
|
+
|
|
1760
|
+
function compileNgModuleFactory(injector, options, moduleType) {
|
|
1761
|
+
ngDevMode && assertNgModuleType(moduleType);
|
|
1762
|
+
const moduleFactory = new NgModuleFactory(moduleType);
|
|
1763
|
+
if (typeof ngJitMode !== 'undefined' && !ngJitMode) {
|
|
1764
|
+
return Promise.resolve(moduleFactory);
|
|
1647
1765
|
}
|
|
1648
|
-
|
|
1649
|
-
|
|
1766
|
+
const compilerOptions = injector.get(COMPILER_OPTIONS, []).concat(options);
|
|
1767
|
+
setJitOptions({
|
|
1768
|
+
defaultEncapsulation: _lastDefined(compilerOptions.map(opts => opts.defaultEncapsulation)),
|
|
1769
|
+
preserveWhitespaces: _lastDefined(compilerOptions.map(opts => opts.preserveWhitespaces))
|
|
1770
|
+
});
|
|
1771
|
+
if (isComponentResourceResolutionQueueEmpty()) {
|
|
1772
|
+
return Promise.resolve(moduleFactory);
|
|
1650
1773
|
}
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
}
|
|
1655
|
-
const prev = record._prev;
|
|
1656
|
-
const next = record._next;
|
|
1657
|
-
if (prev === null) {
|
|
1658
|
-
this._itHead = next;
|
|
1659
|
-
} else {
|
|
1660
|
-
prev._next = next;
|
|
1661
|
-
}
|
|
1662
|
-
if (next === null) {
|
|
1663
|
-
this._itTail = prev;
|
|
1664
|
-
} else {
|
|
1665
|
-
next._prev = prev;
|
|
1666
|
-
}
|
|
1667
|
-
return record;
|
|
1774
|
+
const compilerProviders = compilerOptions.flatMap(option => option.providers ?? []);
|
|
1775
|
+
if (compilerProviders.length === 0) {
|
|
1776
|
+
return Promise.resolve(moduleFactory);
|
|
1668
1777
|
}
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1778
|
+
const compiler = getCompilerFacade({
|
|
1779
|
+
usage: 0,
|
|
1780
|
+
kind: 'NgModule',
|
|
1781
|
+
type: moduleType
|
|
1782
|
+
});
|
|
1783
|
+
const compilerInjector = Injector.create({
|
|
1784
|
+
providers: compilerProviders
|
|
1785
|
+
});
|
|
1786
|
+
const resourceLoader = compilerInjector.get(compiler.ResourceLoader);
|
|
1787
|
+
return resolveComponentResources(url => Promise.resolve(resourceLoader.get(url))).then(() => moduleFactory);
|
|
1788
|
+
}
|
|
1789
|
+
function _lastDefined(args) {
|
|
1790
|
+
for (let i = args.length - 1; i >= 0; i--) {
|
|
1791
|
+
if (args[i] !== undefined) {
|
|
1792
|
+
return args[i];
|
|
1677
1793
|
}
|
|
1678
|
-
return record;
|
|
1679
1794
|
}
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1795
|
+
return undefined;
|
|
1796
|
+
}
|
|
1797
|
+
|
|
1798
|
+
const SCAN_DELAY = 200;
|
|
1799
|
+
const OVERSIZED_IMAGE_TOLERANCE = 1200;
|
|
1800
|
+
class ImagePerformanceWarning {
|
|
1801
|
+
window = null;
|
|
1802
|
+
observer = null;
|
|
1803
|
+
options = inject(IMAGE_CONFIG);
|
|
1804
|
+
lcpImageUrl;
|
|
1805
|
+
start() {
|
|
1806
|
+
if (typeof ngServerMode !== 'undefined' && ngServerMode || typeof PerformanceObserver === 'undefined' || this.options?.disableImageSizeWarning && this.options?.disableImageLazyLoadWarning) {
|
|
1807
|
+
return;
|
|
1693
1808
|
}
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1809
|
+
this.observer = this.initPerformanceObserver();
|
|
1810
|
+
const doc = getDocument();
|
|
1811
|
+
const win = doc.defaultView;
|
|
1812
|
+
if (win) {
|
|
1813
|
+
this.window = win;
|
|
1814
|
+
const waitToScan = () => {
|
|
1815
|
+
setTimeout(this.scanImages.bind(this), SCAN_DELAY);
|
|
1816
|
+
};
|
|
1817
|
+
const setup = () => {
|
|
1818
|
+
if (doc.readyState === 'complete') {
|
|
1819
|
+
waitToScan();
|
|
1820
|
+
} else {
|
|
1821
|
+
this.window?.addEventListener('load', waitToScan, {
|
|
1822
|
+
once: true
|
|
1823
|
+
});
|
|
1824
|
+
}
|
|
1825
|
+
};
|
|
1826
|
+
if (typeof Zone !== 'undefined') {
|
|
1827
|
+
Zone.root.run(() => setup());
|
|
1828
|
+
} else {
|
|
1829
|
+
setup();
|
|
1830
|
+
}
|
|
1702
1831
|
}
|
|
1703
|
-
return record;
|
|
1704
1832
|
}
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
item;
|
|
1708
|
-
trackById;
|
|
1709
|
-
currentIndex = null;
|
|
1710
|
-
previousIndex = null;
|
|
1711
|
-
_nextPrevious = null;
|
|
1712
|
-
_prev = null;
|
|
1713
|
-
_next = null;
|
|
1714
|
-
_prevDup = null;
|
|
1715
|
-
_nextDup = null;
|
|
1716
|
-
_prevRemoved = null;
|
|
1717
|
-
_nextRemoved = null;
|
|
1718
|
-
_nextAdded = null;
|
|
1719
|
-
_nextMoved = null;
|
|
1720
|
-
_nextIdentityChange = null;
|
|
1721
|
-
constructor(item, trackById) {
|
|
1722
|
-
this.item = item;
|
|
1723
|
-
this.trackById = trackById;
|
|
1833
|
+
ngOnDestroy() {
|
|
1834
|
+
this.observer?.disconnect();
|
|
1724
1835
|
}
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
_tail = null;
|
|
1729
|
-
add(record) {
|
|
1730
|
-
if (this._head === null) {
|
|
1731
|
-
this._head = this._tail = record;
|
|
1732
|
-
record._nextDup = null;
|
|
1733
|
-
record._prevDup = null;
|
|
1734
|
-
} else {
|
|
1735
|
-
this._tail._nextDup = record;
|
|
1736
|
-
record._prevDup = this._tail;
|
|
1737
|
-
record._nextDup = null;
|
|
1738
|
-
this._tail = record;
|
|
1836
|
+
initPerformanceObserver() {
|
|
1837
|
+
if (typeof PerformanceObserver === 'undefined') {
|
|
1838
|
+
return null;
|
|
1739
1839
|
}
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1840
|
+
const observer = new PerformanceObserver(entryList => {
|
|
1841
|
+
const entries = entryList.getEntries();
|
|
1842
|
+
if (entries.length === 0) return;
|
|
1843
|
+
const lcpElement = entries[entries.length - 1];
|
|
1844
|
+
const imgSrc = lcpElement.element?.src ?? '';
|
|
1845
|
+
if (imgSrc.startsWith('data:') || imgSrc.startsWith('blob:')) return;
|
|
1846
|
+
this.lcpImageUrl = imgSrc;
|
|
1847
|
+
});
|
|
1848
|
+
observer.observe({
|
|
1849
|
+
type: 'largest-contentful-paint',
|
|
1850
|
+
buffered: true
|
|
1851
|
+
});
|
|
1852
|
+
return observer;
|
|
1853
|
+
}
|
|
1854
|
+
scanImages() {
|
|
1855
|
+
const images = getDocument().querySelectorAll('img');
|
|
1856
|
+
let lcpElementFound,
|
|
1857
|
+
lcpElementLoadedCorrectly = false;
|
|
1858
|
+
for (let index = 0; index < images.length; index++) {
|
|
1859
|
+
const image = images[index];
|
|
1860
|
+
if (!image) {
|
|
1861
|
+
continue;
|
|
1862
|
+
}
|
|
1863
|
+
if (!this.options?.disableImageSizeWarning) {
|
|
1864
|
+
if (!image.getAttribute('ng-img') && this.isOversized(image)) {
|
|
1865
|
+
logOversizedImageWarning(image.src);
|
|
1866
|
+
}
|
|
1867
|
+
}
|
|
1868
|
+
if (!this.options?.disableImageLazyLoadWarning && this.lcpImageUrl) {
|
|
1869
|
+
if (image.src === this.lcpImageUrl) {
|
|
1870
|
+
lcpElementFound = true;
|
|
1871
|
+
if (image.loading !== 'lazy' || image.getAttribute('ng-img')) {
|
|
1872
|
+
lcpElementLoadedCorrectly = true;
|
|
1873
|
+
}
|
|
1874
|
+
}
|
|
1746
1875
|
}
|
|
1747
1876
|
}
|
|
1748
|
-
|
|
1877
|
+
if (lcpElementFound && !lcpElementLoadedCorrectly && this.lcpImageUrl && !this.options?.disableImageLazyLoadWarning) {
|
|
1878
|
+
logLazyLCPWarning(this.lcpImageUrl);
|
|
1879
|
+
}
|
|
1749
1880
|
}
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
if (prev === null) {
|
|
1754
|
-
this._head = next;
|
|
1755
|
-
} else {
|
|
1756
|
-
prev._nextDup = next;
|
|
1881
|
+
isOversized(image) {
|
|
1882
|
+
if (!this.window) {
|
|
1883
|
+
return false;
|
|
1757
1884
|
}
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1885
|
+
const nonOversizedImageExtentions = ['.svg'];
|
|
1886
|
+
const imageSource = (image.src || '').toLowerCase();
|
|
1887
|
+
if (nonOversizedImageExtentions.some(extension => imageSource.endsWith(extension))) {
|
|
1888
|
+
return false;
|
|
1762
1889
|
}
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
let duplicates = this.map.get(key);
|
|
1771
|
-
if (!duplicates) {
|
|
1772
|
-
duplicates = new _DuplicateItemRecordList();
|
|
1773
|
-
this.map.set(key, duplicates);
|
|
1890
|
+
const computedStyle = this.window.getComputedStyle(image);
|
|
1891
|
+
let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));
|
|
1892
|
+
let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));
|
|
1893
|
+
const boxSizing = computedStyle.getPropertyValue('box-sizing');
|
|
1894
|
+
const objectFit = computedStyle.getPropertyValue('object-fit');
|
|
1895
|
+
if (objectFit === `cover`) {
|
|
1896
|
+
return false;
|
|
1774
1897
|
}
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
remove(record) {
|
|
1783
|
-
const key = record.trackById;
|
|
1784
|
-
const recordList = this.map.get(key);
|
|
1785
|
-
if (recordList.remove(record)) {
|
|
1786
|
-
this.map.delete(key);
|
|
1898
|
+
if (boxSizing === 'border-box') {
|
|
1899
|
+
const paddingTop = computedStyle.getPropertyValue('padding-top');
|
|
1900
|
+
const paddingRight = computedStyle.getPropertyValue('padding-right');
|
|
1901
|
+
const paddingBottom = computedStyle.getPropertyValue('padding-bottom');
|
|
1902
|
+
const paddingLeft = computedStyle.getPropertyValue('padding-left');
|
|
1903
|
+
renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);
|
|
1904
|
+
renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);
|
|
1787
1905
|
}
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1906
|
+
const intrinsicWidth = image.naturalWidth;
|
|
1907
|
+
const intrinsicHeight = image.naturalHeight;
|
|
1908
|
+
const recommendedWidth = this.window.devicePixelRatio * renderedWidth;
|
|
1909
|
+
const recommendedHeight = this.window.devicePixelRatio * renderedHeight;
|
|
1910
|
+
const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;
|
|
1911
|
+
const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;
|
|
1912
|
+
return oversizedWidth || oversizedHeight;
|
|
1795
1913
|
}
|
|
1914
|
+
static ɵfac = function ImagePerformanceWarning_Factory(__ngFactoryType__) {
|
|
1915
|
+
return new (__ngFactoryType__ || ImagePerformanceWarning)();
|
|
1916
|
+
};
|
|
1917
|
+
static ɵprov = /*@__PURE__*/__defineInjectable({
|
|
1918
|
+
token: ImagePerformanceWarning,
|
|
1919
|
+
factory: ImagePerformanceWarning.ɵfac,
|
|
1920
|
+
providedIn: 'root'
|
|
1921
|
+
});
|
|
1796
1922
|
}
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
}
|
|
1804
|
-
|
|
1923
|
+
(() => {
|
|
1924
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ImagePerformanceWarning, [{
|
|
1925
|
+
type: Injectable,
|
|
1926
|
+
args: [{
|
|
1927
|
+
providedIn: 'root'
|
|
1928
|
+
}]
|
|
1929
|
+
}], null, null);
|
|
1930
|
+
})();
|
|
1931
|
+
function logLazyLCPWarning(src) {
|
|
1932
|
+
console.warn(formatRuntimeError(-913, `An image with src ${src} is the Largest Contentful Paint (LCP) element ` + `but was given a "loading" value of "lazy", which can negatively impact ` + `application loading performance. This warning can be addressed by ` + `changing the loading value of the LCP image to "eager", or by using the ` + `NgOptimizedImage directive's prioritization utilities. For more ` + `information about addressing or disabling this warning, see ` + `${ERROR_DETAILS_PAGE_BASE_URL}/NG0913`));
|
|
1933
|
+
}
|
|
1934
|
+
function logOversizedImageWarning(src) {
|
|
1935
|
+
console.warn(formatRuntimeError(-913, `An image with src ${src} has intrinsic file dimensions much larger than its ` + `rendered size. This can negatively impact application loading performance. ` + `For more information about addressing or disabling this warning, see ` + `${ERROR_DETAILS_PAGE_BASE_URL}/NG0913`));
|
|
1805
1936
|
}
|
|
1806
1937
|
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
return new DefaultKeyValueDiffer();
|
|
1813
|
-
}
|
|
1938
|
+
const PLATFORM_DESTROY_LISTENERS = new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'PlatformDestroyListeners' : '');
|
|
1939
|
+
|
|
1940
|
+
const ENABLE_ROOT_COMPONENT_BOOTSTRAP = new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'ENABLE_ROOT_COMPONENT_BOOTSTRAP' : '');
|
|
1941
|
+
function isApplicationBootstrapConfig(config) {
|
|
1942
|
+
return !config.moduleRef;
|
|
1814
1943
|
}
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
_additionsTail = null;
|
|
1824
|
-
_removalsHead = null;
|
|
1825
|
-
get isDirty() {
|
|
1826
|
-
return this._additionsHead !== null || this._changesHead !== null || this._removalsHead !== null;
|
|
1827
|
-
}
|
|
1828
|
-
forEachItem(fn) {
|
|
1829
|
-
let record;
|
|
1830
|
-
for (record = this._mapHead; record !== null; record = record._next) {
|
|
1831
|
-
fn(record);
|
|
1832
|
-
}
|
|
1833
|
-
}
|
|
1834
|
-
forEachPreviousItem(fn) {
|
|
1835
|
-
let record;
|
|
1836
|
-
for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {
|
|
1837
|
-
fn(record);
|
|
1944
|
+
function bootstrap(config) {
|
|
1945
|
+
const envInjector = isApplicationBootstrapConfig(config) ? config.r3Injector : config.moduleRef.injector;
|
|
1946
|
+
const ngZone = envInjector.get(NgZone);
|
|
1947
|
+
return ngZone.run(() => {
|
|
1948
|
+
if (isApplicationBootstrapConfig(config)) {
|
|
1949
|
+
config.r3Injector.resolveInjectorInitializers();
|
|
1950
|
+
} else {
|
|
1951
|
+
config.moduleRef.resolveInjectorInitializers();
|
|
1838
1952
|
}
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1953
|
+
const exceptionHandler = envInjector.get(INTERNAL_APPLICATION_ERROR_HANDLER);
|
|
1954
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
1955
|
+
if (envInjector.get(PROVIDED_ZONELESS) && envInjector.get(PROVIDED_NG_ZONE)) {
|
|
1956
|
+
console.warn(formatRuntimeError(408, 'Both provideZoneChangeDetection and provideZonelessChangeDetection are provided. ' + 'This is likely a mistake. Update the application providers to use only one of the two.'));
|
|
1957
|
+
}
|
|
1844
1958
|
}
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1959
|
+
let onErrorSubscription;
|
|
1960
|
+
ngZone.runOutsideAngular(() => {
|
|
1961
|
+
onErrorSubscription = ngZone.onError.subscribe({
|
|
1962
|
+
next: exceptionHandler
|
|
1963
|
+
});
|
|
1964
|
+
});
|
|
1965
|
+
if (isApplicationBootstrapConfig(config)) {
|
|
1966
|
+
const destroyListener = () => envInjector.destroy();
|
|
1967
|
+
const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);
|
|
1968
|
+
onPlatformDestroyListeners.add(destroyListener);
|
|
1969
|
+
envInjector.onDestroy(() => {
|
|
1970
|
+
onErrorSubscription.unsubscribe();
|
|
1971
|
+
onPlatformDestroyListeners.delete(destroyListener);
|
|
1972
|
+
});
|
|
1973
|
+
} else {
|
|
1974
|
+
const destroyListener = () => config.moduleRef.destroy();
|
|
1975
|
+
const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);
|
|
1976
|
+
onPlatformDestroyListeners.add(destroyListener);
|
|
1977
|
+
config.moduleRef.onDestroy(() => {
|
|
1978
|
+
remove(config.allPlatformModules, config.moduleRef);
|
|
1979
|
+
onErrorSubscription.unsubscribe();
|
|
1980
|
+
onPlatformDestroyListeners.delete(destroyListener);
|
|
1981
|
+
});
|
|
1850
1982
|
}
|
|
1983
|
+
return _callAndReportToErrorHandler(exceptionHandler, ngZone, () => {
|
|
1984
|
+
const pendingTasks = envInjector.get(PendingTasksInternal);
|
|
1985
|
+
const taskId = pendingTasks.add();
|
|
1986
|
+
const initStatus = envInjector.get(ApplicationInitStatus);
|
|
1987
|
+
initStatus.runInitializers();
|
|
1988
|
+
return initStatus.donePromise.then(() => {
|
|
1989
|
+
const localeId = envInjector.get(LOCALE_ID, DEFAULT_LOCALE_ID);
|
|
1990
|
+
setLocaleId(localeId || DEFAULT_LOCALE_ID);
|
|
1991
|
+
const enableRootComponentbootstrap = envInjector.get(ENABLE_ROOT_COMPONENT_BOOTSTRAP, true);
|
|
1992
|
+
if (!enableRootComponentbootstrap) {
|
|
1993
|
+
if (isApplicationBootstrapConfig(config)) {
|
|
1994
|
+
return envInjector.get(ApplicationRef);
|
|
1995
|
+
}
|
|
1996
|
+
config.allPlatformModules.push(config.moduleRef);
|
|
1997
|
+
return config.moduleRef;
|
|
1998
|
+
}
|
|
1999
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
2000
|
+
const imagePerformanceService = envInjector.get(ImagePerformanceWarning);
|
|
2001
|
+
imagePerformanceService.start();
|
|
2002
|
+
}
|
|
2003
|
+
if (isApplicationBootstrapConfig(config)) {
|
|
2004
|
+
const appRef = envInjector.get(ApplicationRef);
|
|
2005
|
+
if (config.rootComponent !== undefined) {
|
|
2006
|
+
appRef.bootstrap(config.rootComponent);
|
|
2007
|
+
}
|
|
2008
|
+
return appRef;
|
|
2009
|
+
} else {
|
|
2010
|
+
moduleBootstrapImpl?.(config.moduleRef, config.allPlatformModules);
|
|
2011
|
+
return config.moduleRef;
|
|
2012
|
+
}
|
|
2013
|
+
}).finally(() => void pendingTasks.remove(taskId));
|
|
2014
|
+
});
|
|
2015
|
+
});
|
|
2016
|
+
}
|
|
2017
|
+
let moduleBootstrapImpl;
|
|
2018
|
+
function setModuleBootstrapImpl() {
|
|
2019
|
+
moduleBootstrapImpl = _moduleDoBootstrap;
|
|
2020
|
+
}
|
|
2021
|
+
function _moduleDoBootstrap(moduleRef, allPlatformModules) {
|
|
2022
|
+
const appRef = moduleRef.injector.get(ApplicationRef);
|
|
2023
|
+
if (moduleRef._bootstrapComponents.length > 0) {
|
|
2024
|
+
moduleRef._bootstrapComponents.forEach(f => appRef.bootstrap(f));
|
|
2025
|
+
} else if (moduleRef.instance.ngDoBootstrap) {
|
|
2026
|
+
moduleRef.instance.ngDoBootstrap(appRef);
|
|
2027
|
+
} else {
|
|
2028
|
+
throw new RuntimeError(-403, ngDevMode && `The module ${stringify(moduleRef.instance.constructor)} was bootstrapped, ` + `but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. ` + `Please define one of these.`);
|
|
1851
2029
|
}
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
2030
|
+
allPlatformModules.push(moduleRef);
|
|
2031
|
+
}
|
|
2032
|
+
function _callAndReportToErrorHandler(errorHandler, ngZone, callback) {
|
|
2033
|
+
try {
|
|
2034
|
+
const result = callback();
|
|
2035
|
+
if (isPromise(result)) {
|
|
2036
|
+
return result.catch(e => {
|
|
2037
|
+
ngZone.runOutsideAngular(() => errorHandler(e));
|
|
2038
|
+
throw e;
|
|
2039
|
+
});
|
|
1856
2040
|
}
|
|
2041
|
+
return result;
|
|
2042
|
+
} catch (e) {
|
|
2043
|
+
ngZone.runOutsideAngular(() => errorHandler(e));
|
|
2044
|
+
throw e;
|
|
1857
2045
|
}
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
2046
|
+
}
|
|
2047
|
+
|
|
2048
|
+
class PlatformRef {
|
|
2049
|
+
_injector;
|
|
2050
|
+
_modules = [];
|
|
2051
|
+
_destroyListeners = [];
|
|
2052
|
+
_destroyed = false;
|
|
2053
|
+
constructor(_injector) {
|
|
2054
|
+
this._injector = _injector;
|
|
1865
2055
|
}
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
insertBefore = insertBefore._next;
|
|
1875
|
-
} else {
|
|
1876
|
-
const record = this._getOrCreateRecordForKey(key, value);
|
|
1877
|
-
insertBefore = this._insertBeforeOrAppend(insertBefore, record);
|
|
1878
|
-
}
|
|
2056
|
+
bootstrapModuleFactory(moduleFactory, options) {
|
|
2057
|
+
const allAppProviders = [provideZonelessChangeDetectionInternal(), ...(options?.applicationProviders ?? []), errorHandlerEnvironmentInitializer, ...(ngDevMode ? [validAppIdInitializer] : [])];
|
|
2058
|
+
const moduleRef = createNgModuleRefWithProviders(moduleFactory.moduleType, this.injector, allAppProviders);
|
|
2059
|
+
setModuleBootstrapImpl();
|
|
2060
|
+
return bootstrap({
|
|
2061
|
+
moduleRef,
|
|
2062
|
+
allPlatformModules: this._modules,
|
|
2063
|
+
platformInjector: this.injector
|
|
1879
2064
|
});
|
|
1880
|
-
if (insertBefore) {
|
|
1881
|
-
if (insertBefore._prev) {
|
|
1882
|
-
insertBefore._prev._next = null;
|
|
1883
|
-
}
|
|
1884
|
-
this._removalsHead = insertBefore;
|
|
1885
|
-
for (let record = insertBefore; record !== null; record = record._nextRemoved) {
|
|
1886
|
-
if (record === this._mapHead) {
|
|
1887
|
-
this._mapHead = null;
|
|
1888
|
-
}
|
|
1889
|
-
this._records.delete(record.key);
|
|
1890
|
-
record._nextRemoved = record._next;
|
|
1891
|
-
record.previousValue = record.currentValue;
|
|
1892
|
-
record.currentValue = null;
|
|
1893
|
-
record._prev = null;
|
|
1894
|
-
record._next = null;
|
|
1895
|
-
}
|
|
1896
|
-
}
|
|
1897
|
-
if (this._changesTail) this._changesTail._nextChanged = null;
|
|
1898
|
-
if (this._additionsTail) this._additionsTail._nextAdded = null;
|
|
1899
|
-
return this.isDirty;
|
|
1900
|
-
}
|
|
1901
|
-
_insertBeforeOrAppend(before, record) {
|
|
1902
|
-
if (before) {
|
|
1903
|
-
const prev = before._prev;
|
|
1904
|
-
record._next = before;
|
|
1905
|
-
record._prev = prev;
|
|
1906
|
-
before._prev = record;
|
|
1907
|
-
if (prev) {
|
|
1908
|
-
prev._next = record;
|
|
1909
|
-
}
|
|
1910
|
-
if (before === this._mapHead) {
|
|
1911
|
-
this._mapHead = record;
|
|
1912
|
-
}
|
|
1913
|
-
this._appendAfter = before;
|
|
1914
|
-
return before;
|
|
1915
|
-
}
|
|
1916
|
-
if (this._appendAfter) {
|
|
1917
|
-
this._appendAfter._next = record;
|
|
1918
|
-
record._prev = this._appendAfter;
|
|
1919
|
-
} else {
|
|
1920
|
-
this._mapHead = record;
|
|
1921
|
-
}
|
|
1922
|
-
this._appendAfter = record;
|
|
1923
|
-
return null;
|
|
1924
2065
|
}
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
const prev = record._prev;
|
|
1930
|
-
const next = record._next;
|
|
1931
|
-
if (prev) {
|
|
1932
|
-
prev._next = next;
|
|
1933
|
-
}
|
|
1934
|
-
if (next) {
|
|
1935
|
-
next._prev = prev;
|
|
1936
|
-
}
|
|
1937
|
-
record._next = null;
|
|
1938
|
-
record._prev = null;
|
|
1939
|
-
return record;
|
|
1940
|
-
}
|
|
1941
|
-
const record = new KeyValueChangeRecord_(key);
|
|
1942
|
-
this._records.set(key, record);
|
|
1943
|
-
record.currentValue = value;
|
|
1944
|
-
this._addToAdditions(record);
|
|
1945
|
-
return record;
|
|
2066
|
+
bootstrapModule(moduleType, compilerOptions = []) {
|
|
2067
|
+
const options = optionsReducer({}, compilerOptions);
|
|
2068
|
+
setModuleBootstrapImpl();
|
|
2069
|
+
return compileNgModuleFactory(this.injector, options, moduleType).then(moduleFactory => this.bootstrapModuleFactory(moduleFactory, options));
|
|
1946
2070
|
}
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
let record;
|
|
1950
|
-
this._previousMapHead = this._mapHead;
|
|
1951
|
-
for (record = this._previousMapHead; record !== null; record = record._next) {
|
|
1952
|
-
record._nextPrevious = record._next;
|
|
1953
|
-
}
|
|
1954
|
-
for (record = this._changesHead; record !== null; record = record._nextChanged) {
|
|
1955
|
-
record.previousValue = record.currentValue;
|
|
1956
|
-
}
|
|
1957
|
-
for (record = this._additionsHead; record != null; record = record._nextAdded) {
|
|
1958
|
-
record.previousValue = record.currentValue;
|
|
1959
|
-
}
|
|
1960
|
-
this._changesHead = this._changesTail = null;
|
|
1961
|
-
this._additionsHead = this._additionsTail = null;
|
|
1962
|
-
this._removalsHead = null;
|
|
1963
|
-
}
|
|
2071
|
+
onDestroy(callback) {
|
|
2072
|
+
this._destroyListeners.push(callback);
|
|
1964
2073
|
}
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
record.previousValue = record.currentValue;
|
|
1968
|
-
record.currentValue = newValue;
|
|
1969
|
-
this._addToChanges(record);
|
|
1970
|
-
}
|
|
2074
|
+
get injector() {
|
|
2075
|
+
return this._injector;
|
|
1971
2076
|
}
|
|
1972
|
-
|
|
1973
|
-
if (this.
|
|
1974
|
-
|
|
1975
|
-
} else {
|
|
1976
|
-
this._additionsTail._nextAdded = record;
|
|
1977
|
-
this._additionsTail = record;
|
|
2077
|
+
destroy() {
|
|
2078
|
+
if (this._destroyed) {
|
|
2079
|
+
throw new RuntimeError(404, ngDevMode && 'The platform has already been destroyed!');
|
|
1978
2080
|
}
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
this._changesTail = record;
|
|
2081
|
+
this._modules.slice().forEach(module => module.destroy());
|
|
2082
|
+
this._destroyListeners.forEach(listener => listener());
|
|
2083
|
+
const destroyListeners = this._injector.get(PLATFORM_DESTROY_LISTENERS, null);
|
|
2084
|
+
if (destroyListeners) {
|
|
2085
|
+
destroyListeners.forEach(listener => listener());
|
|
2086
|
+
destroyListeners.clear();
|
|
1986
2087
|
}
|
|
2088
|
+
this._destroyed = true;
|
|
1987
2089
|
}
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
obj.forEach(fn);
|
|
1991
|
-
} else {
|
|
1992
|
-
Object.keys(obj).forEach(k => fn(obj[k], k));
|
|
1993
|
-
}
|
|
2090
|
+
get destroyed() {
|
|
2091
|
+
return this._destroyed;
|
|
1994
2092
|
}
|
|
2093
|
+
static ɵfac = function PlatformRef_Factory(__ngFactoryType__) {
|
|
2094
|
+
return new (__ngFactoryType__ || PlatformRef)(__inject(Injector));
|
|
2095
|
+
};
|
|
2096
|
+
static ɵprov = /*@__PURE__*/__defineInjectable({
|
|
2097
|
+
token: PlatformRef,
|
|
2098
|
+
factory: PlatformRef.ɵfac,
|
|
2099
|
+
providedIn: 'platform'
|
|
2100
|
+
});
|
|
1995
2101
|
}
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2102
|
+
(() => {
|
|
2103
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PlatformRef, [{
|
|
2104
|
+
type: Injectable,
|
|
2105
|
+
args: [{
|
|
2106
|
+
providedIn: 'platform'
|
|
2107
|
+
}]
|
|
2108
|
+
}], () => [{
|
|
2109
|
+
type: Injector
|
|
2110
|
+
}], null);
|
|
2111
|
+
})();
|
|
2112
|
+
|
|
2113
|
+
function serializeInjector(injector) {
|
|
2114
|
+
const metadata = getInjectorMetadata(injector);
|
|
2115
|
+
if (metadata?.type === 'null') {
|
|
2116
|
+
return {
|
|
2117
|
+
name: 'Null Injector',
|
|
2118
|
+
type: 'null',
|
|
2119
|
+
providers: [],
|
|
2120
|
+
children: []
|
|
2121
|
+
};
|
|
2122
|
+
}
|
|
2123
|
+
let allProviders = [];
|
|
2124
|
+
if (metadata?.type === 'element' || metadata?.type === 'environment') {
|
|
2125
|
+
allProviders = getInjectorProviders(injector).map(record => {
|
|
2126
|
+
return {
|
|
2127
|
+
token: record.token,
|
|
2128
|
+
value: injector.get(record.token, null, {
|
|
2129
|
+
optional: true,
|
|
2130
|
+
self: true
|
|
2131
|
+
})
|
|
2132
|
+
};
|
|
2133
|
+
});
|
|
2134
|
+
}
|
|
2135
|
+
if (metadata?.type === 'element') {
|
|
2136
|
+
const tNode = getNodeInjectorTNode(injector);
|
|
2137
|
+
const viewProvidersCount = tNode ? tNode.providerIndexes >> 20 : 0;
|
|
2138
|
+
const viewProviders = allProviders.slice(0, viewProvidersCount);
|
|
2139
|
+
const resolvedProviders = allProviders.slice(viewProvidersCount);
|
|
2140
|
+
return {
|
|
2141
|
+
name: injector.constructor.name,
|
|
2142
|
+
type: 'element',
|
|
2143
|
+
providers: resolvedProviders,
|
|
2144
|
+
viewProviders,
|
|
2145
|
+
children: [],
|
|
2146
|
+
hostElement: metadata.source
|
|
2147
|
+
};
|
|
2008
2148
|
}
|
|
2149
|
+
return {
|
|
2150
|
+
name: metadata?.source ?? injector.constructor.name ?? 'Unknown Injector',
|
|
2151
|
+
type: 'environment',
|
|
2152
|
+
providers: allProviders,
|
|
2153
|
+
children: []
|
|
2154
|
+
};
|
|
2009
2155
|
}
|
|
2010
2156
|
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
constructor
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
if
|
|
2028
|
-
|
|
2029
|
-
|
|
2157
|
+
const diGraphTool = {
|
|
2158
|
+
name: 'angular:di_graph',
|
|
2159
|
+
description: `
|
|
2160
|
+
Exposes the Angular Dependency Injection (DI) graph of the application.
|
|
2161
|
+
|
|
2162
|
+
This tool extracts both the element injector tree (associated with DOM elements and components)
|
|
2163
|
+
and the environment injector tree (associated with modules and standalone application roots).
|
|
2164
|
+
It captures the relationship structure and the providers resolved at each level.
|
|
2165
|
+
|
|
2166
|
+
Returns:
|
|
2167
|
+
- \`elementInjectorRoots\`: An array of root element injectors (one for each Angular application
|
|
2168
|
+
root found). Each node forms a tree hierarchy:
|
|
2169
|
+
- \`name\`: The constructor name of this injector.
|
|
2170
|
+
- \`type\`: 'element'.
|
|
2171
|
+
- \`providers\`: Array of providers configured on this injector.
|
|
2172
|
+
- \`token\`: The DI token.
|
|
2173
|
+
- \`value\`: The resolved value of that provider if it was instantiated.
|
|
2174
|
+
- \`hostElement\`: The DOM element that this injector is associated with.
|
|
2175
|
+
- \`children\`: Array of child element injectors.
|
|
2176
|
+
- \`environmentInjectorRoot\`: The root environment injector. It forms a tree hierarchy of nodes
|
|
2177
|
+
representing all environment injectors:
|
|
2178
|
+
- \`name\`: The identifier for the environment injector.
|
|
2179
|
+
- \`type\`: 'environment' or 'null'.
|
|
2180
|
+
- \`providers\`: Array of providers configured on this injector.
|
|
2181
|
+
- \`token\`: The DI token.
|
|
2182
|
+
- \`value\`: The resolved value of that provider if it was instantiated.
|
|
2183
|
+
- \`children\`: Array of child environment injectors.
|
|
2184
|
+
`.trim(),
|
|
2185
|
+
inputSchema: {
|
|
2186
|
+
type: 'object',
|
|
2187
|
+
properties: {}
|
|
2188
|
+
},
|
|
2189
|
+
execute: async () => {
|
|
2190
|
+
const roots = Array.from(document.querySelectorAll('[ng-version]'));
|
|
2191
|
+
if (roots.length === 0) {
|
|
2192
|
+
throw new Error('Could not find Angular root element ([ng-version]) on the page.');
|
|
2030
2193
|
}
|
|
2031
|
-
return
|
|
2194
|
+
return discoverDiGraph(roots);
|
|
2032
2195
|
}
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2196
|
+
};
|
|
2197
|
+
function discoverDiGraph(roots) {
|
|
2198
|
+
const rootLViews = roots.map(root => {
|
|
2199
|
+
const lContext = getLContext(root);
|
|
2200
|
+
if (!lContext?.lView) {
|
|
2201
|
+
throw new Error(`Could not find an \`LView\` for root \`<${root.tagName.toLowerCase()}>\`, is it an Angular component?`);
|
|
2202
|
+
}
|
|
2203
|
+
return lContext.lView;
|
|
2204
|
+
});
|
|
2205
|
+
return {
|
|
2206
|
+
elementInjectorRoots: rootLViews.map(rootLView => walkElementInjectors(rootLView)),
|
|
2207
|
+
environmentInjectorRoot: collectEnvInjectors(rootLViews)
|
|
2208
|
+
};
|
|
2209
|
+
}
|
|
2210
|
+
function walkElementInjectors(rootLView) {
|
|
2211
|
+
if (rootLView[TVIEW].type !== 0) {
|
|
2212
|
+
throw new Error(`Expected a root LView but got type: \`${rootLView[TVIEW].type}\`.`);
|
|
2213
|
+
}
|
|
2214
|
+
const stack = [];
|
|
2215
|
+
for (const [tNode, lView] of walkLViewDirectives(rootLView)) {
|
|
2216
|
+
const injector = new NodeInjector(tNode, lView);
|
|
2217
|
+
const serialized = serializeInjector(injector);
|
|
2218
|
+
while (stack.length > 0) {
|
|
2219
|
+
const [lastTNode, lastLView, lastInjector] = stack[stack.length - 1];
|
|
2220
|
+
const isDescendantInSameView = isTNodeDescendant(tNode, lastTNode);
|
|
2221
|
+
const isDescendantInDifferentView = isLViewDescendantOfTNode(lView, lastLView, lastTNode);
|
|
2222
|
+
if (isDescendantInSameView || isDescendantInDifferentView) {
|
|
2223
|
+
lastInjector.children.push(serialized);
|
|
2224
|
+
break;
|
|
2225
|
+
} else {
|
|
2226
|
+
stack.pop();
|
|
2227
|
+
}
|
|
2228
|
+
}
|
|
2229
|
+
stack.push([tNode, lView, serialized]);
|
|
2230
|
+
}
|
|
2231
|
+
if (stack.length === 0) {
|
|
2232
|
+
throw new Error(`Expected at least one component/directive in the root \`LView\`.`);
|
|
2233
|
+
}
|
|
2234
|
+
const [,, rootInjector] = stack[0];
|
|
2235
|
+
return rootInjector;
|
|
2236
|
+
}
|
|
2237
|
+
function collectEnvInjectors(rootLViews) {
|
|
2238
|
+
const serializedEnvInjectorMap = new Map();
|
|
2239
|
+
let rootEnvInjector = undefined;
|
|
2240
|
+
function serializeAncestors(injector) {
|
|
2241
|
+
const existing = serializedEnvInjectorMap.get(injector);
|
|
2242
|
+
if (existing) return existing;
|
|
2243
|
+
const serialized = serializeInjector(injector);
|
|
2244
|
+
serializedEnvInjectorMap.set(injector, serialized);
|
|
2245
|
+
const parentInjector = getParentEnvInjector(injector);
|
|
2246
|
+
if (parentInjector) {
|
|
2247
|
+
const parentSerialized = serializeAncestors(parentInjector);
|
|
2248
|
+
parentSerialized.children.push(serialized);
|
|
2249
|
+
} else {
|
|
2250
|
+
if (!rootEnvInjector) {
|
|
2251
|
+
rootEnvInjector = serialized;
|
|
2252
|
+
} else if (rootEnvInjector !== serialized) {
|
|
2253
|
+
throw new Error('Expected only one root environment injector, but found multiple.', {
|
|
2254
|
+
cause: {
|
|
2255
|
+
firstRoot: rootEnvInjector,
|
|
2256
|
+
secondRoot: serialized
|
|
2257
|
+
}
|
|
2040
2258
|
});
|
|
2041
|
-
return IterableDiffers.create(factories, parent || defaultIterableDiffersFactory());
|
|
2042
2259
|
}
|
|
2043
|
-
}
|
|
2260
|
+
}
|
|
2261
|
+
return serialized;
|
|
2044
2262
|
}
|
|
2045
|
-
|
|
2046
|
-
const
|
|
2047
|
-
|
|
2048
|
-
return factory;
|
|
2049
|
-
} else {
|
|
2050
|
-
throw new RuntimeError(901, ngDevMode && `Cannot find a differ supporting object '${iterable}' of type '${getTypeNameForDebugging(iterable)}'`);
|
|
2263
|
+
for (const rootLView of rootLViews) {
|
|
2264
|
+
for (const [, lView] of walkLViewDirectives(rootLView)) {
|
|
2265
|
+
serializeAncestors(lView[INJECTOR]);
|
|
2051
2266
|
}
|
|
2052
2267
|
}
|
|
2268
|
+
if (!rootEnvInjector) {
|
|
2269
|
+
throw new Error('Expected a root environment injector but did not find one.');
|
|
2270
|
+
}
|
|
2271
|
+
return rootEnvInjector;
|
|
2053
2272
|
}
|
|
2054
|
-
function
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2273
|
+
function isTNodeDescendant(node, ancestor) {
|
|
2274
|
+
let curr = node;
|
|
2275
|
+
while (curr) {
|
|
2276
|
+
if (curr === ancestor) return true;
|
|
2277
|
+
curr = curr.parent;
|
|
2278
|
+
}
|
|
2279
|
+
return false;
|
|
2060
2280
|
}
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2281
|
+
function isLViewDescendantOfTNode(lView, parentLView, parentTNode) {
|
|
2282
|
+
let currentLView = lView;
|
|
2283
|
+
let hostTNode = null;
|
|
2284
|
+
while (currentLView && currentLView !== parentLView) {
|
|
2285
|
+
hostTNode = currentLView[T_HOST];
|
|
2286
|
+
currentLView = getLViewParent(currentLView);
|
|
2287
|
+
}
|
|
2288
|
+
return currentLView === parentLView && hostTNode !== null && isTNodeDescendant(hostTNode, parentTNode);
|
|
2289
|
+
}
|
|
2290
|
+
function getParentEnvInjector(injector) {
|
|
2291
|
+
if (injector instanceof ChainedInjector) {
|
|
2292
|
+
const chainedInjector = injector;
|
|
2293
|
+
return chainedInjector.parentInjector;
|
|
2294
|
+
} else if (injector instanceof R3Injector) {
|
|
2295
|
+
return injector.parent;
|
|
2296
|
+
} else if (injector instanceof NullInjector) {
|
|
2297
|
+
return undefined;
|
|
2298
|
+
} else {
|
|
2299
|
+
throw new Error(`Unknown injector type: "${injector.constructor.name}".`);
|
|
2072
2300
|
}
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2301
|
+
}
|
|
2302
|
+
|
|
2303
|
+
const signalGraphTool = {
|
|
2304
|
+
name: 'angular:signal_graph',
|
|
2305
|
+
description: `
|
|
2306
|
+
Exposes the Angular signal dependency graph for a given DOM element.
|
|
2307
|
+
|
|
2308
|
+
This tool extracts the reactive dependency graph (signals, computeds, and effects) that
|
|
2309
|
+
are transitive dependencies of the effects of that element. It will include signals
|
|
2310
|
+
authored in other components/services and depended upon by the target component, but
|
|
2311
|
+
will *not* include signals only used in descendant components effects.
|
|
2312
|
+
|
|
2313
|
+
Params:
|
|
2314
|
+
- \`target\`: The element to get the signal graph for. Must be the host element of an
|
|
2315
|
+
Angular component.
|
|
2316
|
+
|
|
2317
|
+
Returns:
|
|
2318
|
+
- \`nodes\`: An array of reactive nodes discovered in the context. Each node contains:
|
|
2319
|
+
- \`kind\`: The type of reactive node ('signal', 'computed', 'effect', or 'template'
|
|
2320
|
+
for component template effects).
|
|
2321
|
+
- \`value\`: The current evaluated value of the node (if applicable).
|
|
2322
|
+
- \`label\`: The symbol name of the associated signal if available (ex.
|
|
2323
|
+
\`const foo = signal(0);\` has \`label: 'foo'\`).
|
|
2324
|
+
- \`epoch\`: The internal version number of the node's value.
|
|
2325
|
+
- \`edges\`: An array of dependency links representing which nodes read from which other
|
|
2326
|
+
nodes.
|
|
2327
|
+
- \`consumer\`: The index in the \`nodes\` array of the node that depends on the value.
|
|
2328
|
+
- \`producer\`: The index in the \`nodes\` array of the node that provides the value.
|
|
2329
|
+
|
|
2330
|
+
Example: An edge with \`{consumer: 2, producer: 0}\` means that \`nodes[2]\` (e.g. an
|
|
2331
|
+
\`effect\`) reads the value of \`nodes[0]\` (e.g. a \`signal\`).
|
|
2332
|
+
`.trim(),
|
|
2333
|
+
inputSchema: {
|
|
2334
|
+
type: 'object',
|
|
2335
|
+
properties: {
|
|
2336
|
+
target: {
|
|
2337
|
+
type: 'object',
|
|
2338
|
+
description: 'The element to get the signal graph for.',
|
|
2339
|
+
'x-mcp-type': 'HTMLElement'
|
|
2340
|
+
}
|
|
2341
|
+
},
|
|
2342
|
+
required: ['target']
|
|
2343
|
+
},
|
|
2344
|
+
execute: async ({
|
|
2345
|
+
target
|
|
2346
|
+
}) => {
|
|
2347
|
+
if (!(target instanceof HTMLElement)) {
|
|
2348
|
+
throw new Error('Invalid input: "target" must be an HTMLElement.');
|
|
2077
2349
|
}
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2350
|
+
const injector = getInjector(target);
|
|
2351
|
+
if (injector instanceof NullInjector) {
|
|
2352
|
+
throw new Error('Invalid input: "target" is not the host element of an Angular component.');
|
|
2353
|
+
}
|
|
2354
|
+
const graph = getSignalGraph(injector);
|
|
2081
2355
|
return {
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
return KeyValueDiffers.create(factories, parent || defaultKeyValueDiffersFactory());
|
|
2089
|
-
}
|
|
2356
|
+
nodes: graph.nodes.map(({
|
|
2357
|
+
id,
|
|
2358
|
+
debuggableFn,
|
|
2359
|
+
...node
|
|
2360
|
+
}) => node),
|
|
2361
|
+
edges: graph.edges
|
|
2090
2362
|
};
|
|
2091
2363
|
}
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2364
|
+
};
|
|
2365
|
+
|
|
2366
|
+
function registerAiTools() {
|
|
2367
|
+
if (typeof window === 'undefined' || !window.addEventListener) return () => {};
|
|
2368
|
+
function listener(inputEvent) {
|
|
2369
|
+
const event = inputEvent;
|
|
2370
|
+
event.respondWith({
|
|
2371
|
+
name: 'Angular',
|
|
2372
|
+
tools: [diGraphTool, signalGraphTool]
|
|
2373
|
+
});
|
|
2098
2374
|
}
|
|
2375
|
+
window.addEventListener('devtoolstooldiscovery', listener);
|
|
2376
|
+
return () => {
|
|
2377
|
+
window.removeEventListener('devtoolstooldiscovery', listener);
|
|
2378
|
+
};
|
|
2099
2379
|
}
|
|
2100
2380
|
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2381
|
+
let _platformInjector = null;
|
|
2382
|
+
let _unregisterAiTools = null;
|
|
2383
|
+
function createPlatform(injector) {
|
|
2384
|
+
if (getPlatform()) {
|
|
2385
|
+
throw new RuntimeError(400, ngDevMode && 'There can be only one platform. Destroy the previous one to create a new one.');
|
|
2386
|
+
}
|
|
2387
|
+
publishDefaultGlobalUtils();
|
|
2388
|
+
publishSignalConfiguration();
|
|
2389
|
+
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
2390
|
+
_unregisterAiTools = registerAiTools();
|
|
2391
|
+
}
|
|
2392
|
+
_platformInjector = typeof ngServerMode === 'undefined' || !ngServerMode ? injector : null;
|
|
2393
|
+
const platform = injector.get(PlatformRef);
|
|
2394
|
+
runPlatformInitializers(injector);
|
|
2395
|
+
return platform;
|
|
2396
|
+
}
|
|
2397
|
+
function createPlatformFactory(parentPlatformFactory, name, providers = []) {
|
|
2398
|
+
const desc = `Platform: ${name}`;
|
|
2399
|
+
const marker = new InjectionToken(desc);
|
|
2400
|
+
return (extraProviders = []) => {
|
|
2401
|
+
let platform = getPlatform();
|
|
2402
|
+
if (!platform) {
|
|
2403
|
+
const platformProviders = [...providers, ...extraProviders, {
|
|
2404
|
+
provide: marker,
|
|
2405
|
+
useValue: true
|
|
2406
|
+
}];
|
|
2407
|
+
platform = parentPlatformFactory?.(platformProviders) ?? createPlatform(createPlatformInjector(platformProviders, desc));
|
|
2408
|
+
}
|
|
2409
|
+
return typeof ngServerMode !== 'undefined' && ngServerMode ? platform : assertPlatform(marker);
|
|
2112
2410
|
};
|
|
2113
|
-
|
|
2114
|
-
|
|
2411
|
+
}
|
|
2412
|
+
function createPlatformInjector(providers = [], name) {
|
|
2413
|
+
return Injector.create({
|
|
2414
|
+
name,
|
|
2415
|
+
providers: [{
|
|
2416
|
+
provide: INJECTOR_SCOPE,
|
|
2417
|
+
useValue: 'platform'
|
|
2418
|
+
}, {
|
|
2419
|
+
provide: PLATFORM_DESTROY_LISTENERS,
|
|
2420
|
+
useValue: new Set([() => _platformInjector = null])
|
|
2421
|
+
}, ...providers]
|
|
2422
|
+
});
|
|
2423
|
+
}
|
|
2424
|
+
function assertPlatform(requiredToken) {
|
|
2425
|
+
const platform = getPlatform();
|
|
2426
|
+
if (!platform) {
|
|
2427
|
+
throw new RuntimeError(-401, ngDevMode && 'No platform exists!');
|
|
2428
|
+
}
|
|
2429
|
+
if ((typeof ngDevMode === 'undefined' || ngDevMode) && !platform.injector.get(requiredToken, null)) {
|
|
2430
|
+
throw new RuntimeError(400, 'A platform with a different configuration has been created. Please destroy it first.');
|
|
2431
|
+
}
|
|
2432
|
+
return platform;
|
|
2433
|
+
}
|
|
2434
|
+
function getPlatform() {
|
|
2435
|
+
if (typeof ngServerMode !== 'undefined' && ngServerMode) {
|
|
2436
|
+
return null;
|
|
2437
|
+
}
|
|
2438
|
+
return _platformInjector?.get(PlatformRef) ?? null;
|
|
2439
|
+
}
|
|
2440
|
+
function destroyPlatform() {
|
|
2441
|
+
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
2442
|
+
_unregisterAiTools?.();
|
|
2443
|
+
_unregisterAiTools = null;
|
|
2444
|
+
}
|
|
2445
|
+
getPlatform()?.destroy();
|
|
2446
|
+
}
|
|
2447
|
+
function createOrReusePlatformInjector(providers = []) {
|
|
2448
|
+
if (_platformInjector) return _platformInjector;
|
|
2449
|
+
publishDefaultGlobalUtils();
|
|
2450
|
+
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
2451
|
+
_unregisterAiTools = registerAiTools();
|
|
2452
|
+
}
|
|
2453
|
+
const injector = createPlatformInjector(providers);
|
|
2454
|
+
if (typeof ngServerMode === 'undefined' || !ngServerMode) {
|
|
2455
|
+
_platformInjector = injector;
|
|
2456
|
+
}
|
|
2457
|
+
publishSignalConfiguration();
|
|
2458
|
+
runPlatformInitializers(injector);
|
|
2459
|
+
return injector;
|
|
2460
|
+
}
|
|
2461
|
+
function providePlatformInitializer(initializerFn) {
|
|
2462
|
+
return {
|
|
2463
|
+
provide: PLATFORM_INITIALIZER,
|
|
2464
|
+
useValue: initializerFn,
|
|
2465
|
+
multi: true
|
|
2466
|
+
};
|
|
2467
|
+
}
|
|
2468
|
+
function runPlatformInitializers(injector) {
|
|
2469
|
+
const inits = injector.get(PLATFORM_INITIALIZER, null);
|
|
2470
|
+
runInInjectionContext(injector, () => {
|
|
2471
|
+
inits?.forEach(init => init());
|
|
2115
2472
|
});
|
|
2116
|
-
static ɵinj = /*@__PURE__*/__defineInjector({});
|
|
2117
2473
|
}
|
|
2118
|
-
(() => {
|
|
2119
|
-
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationModule, [{
|
|
2120
|
-
type: NgModule
|
|
2121
|
-
}], () => [{
|
|
2122
|
-
type: ApplicationRef
|
|
2123
|
-
}], null);
|
|
2124
|
-
})();
|
|
2125
2474
|
|
|
2126
2475
|
function internalCreateApplication(config) {
|
|
2127
2476
|
const {
|
|
@@ -2225,7 +2574,7 @@ function annotateForHydration(appRef, doc) {
|
|
|
2225
2574
|
capture: new Set()
|
|
2226
2575
|
};
|
|
2227
2576
|
const deferBlocks = new Map();
|
|
2228
|
-
|
|
2577
|
+
appRef.injector.get(APP_ID);
|
|
2229
2578
|
for (const viewRef of viewRefs) {
|
|
2230
2579
|
const lNode = getLNodeForHydration(viewRef);
|
|
2231
2580
|
if (lNode !== null) {
|
|
@@ -2237,7 +2586,6 @@ function annotateForHydration(appRef, doc) {
|
|
|
2237
2586
|
i18nChildren: new Map(),
|
|
2238
2587
|
eventTypesToReplay,
|
|
2239
2588
|
shouldReplayEvents,
|
|
2240
|
-
appId,
|
|
2241
2589
|
deferBlocks
|
|
2242
2590
|
};
|
|
2243
2591
|
if (isLContainer(lNode)) {
|
|
@@ -2335,7 +2683,10 @@ function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, conte
|
|
|
2335
2683
|
serializedView[DEFER_BLOCK_STATE] = lDetails[DEFER_BLOCK_STATE$1];
|
|
2336
2684
|
}
|
|
2337
2685
|
if (!isHydrateNeverBlock) {
|
|
2338
|
-
|
|
2686
|
+
const childHostElement = unwrapRNode(childLView[HOST]);
|
|
2687
|
+
if (childLView[TVIEW].type !== 1 || childHostElement === null || !childHostElement.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {
|
|
2688
|
+
Object.assign(serializedView, serializeLView(lContainer[i], parentDeferBlockId, context));
|
|
2689
|
+
}
|
|
2339
2690
|
}
|
|
2340
2691
|
}
|
|
2341
2692
|
const currentViewAsString = JSON.stringify(serializedView);
|
|
@@ -2538,14 +2889,6 @@ function annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, parentDefe
|
|
|
2538
2889
|
}
|
|
2539
2890
|
}
|
|
2540
2891
|
|
|
2541
|
-
function booleanAttribute(value) {
|
|
2542
|
-
return typeof value === 'boolean' ? value : value != null && value !== 'false';
|
|
2543
|
-
}
|
|
2544
|
-
function numberAttribute(value, fallbackValue = NaN) {
|
|
2545
|
-
const isNumberValue = !isNaN(parseFloat(value)) && !isNaN(Number(value));
|
|
2546
|
-
return isNumberValue ? Number(value) : fallbackValue;
|
|
2547
|
-
}
|
|
2548
|
-
|
|
2549
2892
|
const PERFORMANCE_MARK_PREFIX = '🅰️';
|
|
2550
2893
|
let enablePerfLogging = false;
|
|
2551
2894
|
function startMeasuring(label) {
|
|
@@ -2579,127 +2922,27 @@ function labels(label) {
|
|
|
2579
2922
|
endLabel: `end:${labelName}`
|
|
2580
2923
|
};
|
|
2581
2924
|
}
|
|
2582
|
-
let warningLogged = false;
|
|
2583
|
-
function enableProfiling() {
|
|
2584
|
-
if (!warningLogged && (typeof performance === 'undefined' || !performance.mark || !performance.measure)) {
|
|
2585
|
-
warningLogged = true;
|
|
2586
|
-
console.warn('Performance API is not supported on this platform');
|
|
2587
|
-
return;
|
|
2588
|
-
}
|
|
2589
|
-
enablePerfLogging = true;
|
|
2590
|
-
}
|
|
2591
|
-
function disableProfiling() {
|
|
2592
|
-
enablePerfLogging = false;
|
|
2593
|
-
}
|
|
2594
|
-
|
|
2595
|
-
function getClosestComponentName(node) {
|
|
2596
|
-
let currentNode = node;
|
|
2597
|
-
while (currentNode) {
|
|
2598
|
-
const lView = readPatchedLView(currentNode);
|
|
2599
|
-
if (lView !== null) {
|
|
2600
|
-
for (let i = HEADER_OFFSET; i < lView.length; i++) {
|
|
2601
|
-
const current = lView[i];
|
|
2602
|
-
if (!isLView(current) && !isLContainer(current) || current[HOST] !== currentNode) {
|
|
2603
|
-
continue;
|
|
2604
|
-
}
|
|
2605
|
-
const tView = lView[TVIEW];
|
|
2606
|
-
const tNode = getTNode(tView, i);
|
|
2607
|
-
if (isComponentHost(tNode)) {
|
|
2608
|
-
const def = tView.data[tNode.directiveStart + tNode.componentOffset];
|
|
2609
|
-
const name = def.debugInfo?.className || def.type.name;
|
|
2610
|
-
if (name) {
|
|
2611
|
-
return name;
|
|
2612
|
-
} else {
|
|
2613
|
-
break;
|
|
2614
|
-
}
|
|
2615
|
-
}
|
|
2616
|
-
}
|
|
2617
|
-
}
|
|
2618
|
-
currentNode = currentNode.parentNode;
|
|
2619
|
-
}
|
|
2620
|
-
return null;
|
|
2621
|
-
}
|
|
2622
|
-
|
|
2623
|
-
function ɵassertType(value) {}
|
|
2624
|
-
|
|
2625
|
-
function ɵɵngDeclareDirective(decl) {
|
|
2626
|
-
const compiler = getCompilerFacade({
|
|
2627
|
-
usage: 1,
|
|
2628
|
-
kind: 'directive',
|
|
2629
|
-
type: decl.type
|
|
2630
|
-
});
|
|
2631
|
-
return compiler.compileDirectiveDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);
|
|
2632
|
-
}
|
|
2633
|
-
function ɵɵngDeclareClassMetadata(decl) {
|
|
2634
|
-
setClassMetadata(decl.type, decl.decorators, decl.ctorParameters ?? null, decl.propDecorators ?? null);
|
|
2635
|
-
}
|
|
2636
|
-
function ɵɵngDeclareClassMetadataAsync(decl) {
|
|
2637
|
-
setClassMetadataAsync(decl.type, decl.resolveDeferredDeps, (...types) => {
|
|
2638
|
-
const meta = decl.resolveMetadata(...types);
|
|
2639
|
-
setClassMetadata(decl.type, meta.decorators, meta.ctorParameters, meta.propDecorators);
|
|
2640
|
-
});
|
|
2641
|
-
}
|
|
2642
|
-
function ɵɵngDeclareComponent(decl) {
|
|
2643
|
-
const compiler = getCompilerFacade({
|
|
2644
|
-
usage: 1,
|
|
2645
|
-
kind: 'component',
|
|
2646
|
-
type: decl.type
|
|
2647
|
-
});
|
|
2648
|
-
return compiler.compileComponentDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵcmp.js`, decl);
|
|
2649
|
-
}
|
|
2650
|
-
function ɵɵngDeclareFactory(decl) {
|
|
2651
|
-
const compiler = getCompilerFacade({
|
|
2652
|
-
usage: 1,
|
|
2653
|
-
kind: getFactoryKind(decl.target),
|
|
2654
|
-
type: decl.type
|
|
2655
|
-
});
|
|
2656
|
-
return compiler.compileFactoryDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);
|
|
2657
|
-
}
|
|
2658
|
-
function getFactoryKind(target) {
|
|
2659
|
-
switch (target) {
|
|
2660
|
-
case FactoryTarget.Directive:
|
|
2661
|
-
return 'directive';
|
|
2662
|
-
case FactoryTarget.Component:
|
|
2663
|
-
return 'component';
|
|
2664
|
-
case FactoryTarget.Injectable:
|
|
2665
|
-
return 'injectable';
|
|
2666
|
-
case FactoryTarget.Pipe:
|
|
2667
|
-
return 'pipe';
|
|
2668
|
-
case FactoryTarget.NgModule:
|
|
2669
|
-
return 'NgModule';
|
|
2670
|
-
}
|
|
2671
|
-
}
|
|
2672
|
-
function ɵɵngDeclareInjectable(decl) {
|
|
2673
|
-
const compiler = getCompilerFacade({
|
|
2674
|
-
usage: 1,
|
|
2675
|
-
kind: 'injectable',
|
|
2676
|
-
type: decl.type
|
|
2677
|
-
});
|
|
2678
|
-
return compiler.compileInjectableDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵprov.js`, decl);
|
|
2925
|
+
let warningLogged = false;
|
|
2926
|
+
function enableProfiling() {
|
|
2927
|
+
if (!warningLogged && (typeof performance === 'undefined' || !performance.mark || !performance.measure)) {
|
|
2928
|
+
warningLogged = true;
|
|
2929
|
+
console.warn('Performance API is not supported on this platform');
|
|
2930
|
+
return;
|
|
2931
|
+
}
|
|
2932
|
+
enablePerfLogging = true;
|
|
2679
2933
|
}
|
|
2680
|
-
function
|
|
2681
|
-
|
|
2682
|
-
usage: 1,
|
|
2683
|
-
kind: 'NgModule',
|
|
2684
|
-
type: decl.type
|
|
2685
|
-
});
|
|
2686
|
-
return compiler.compileInjectorDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵinj.js`, decl);
|
|
2934
|
+
function disableProfiling() {
|
|
2935
|
+
enablePerfLogging = false;
|
|
2687
2936
|
}
|
|
2688
|
-
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
});
|
|
2694
|
-
return compiler.compileNgModuleDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵmod.js`, decl);
|
|
2937
|
+
|
|
2938
|
+
function ɵassertType(value) {}
|
|
2939
|
+
|
|
2940
|
+
function booleanAttribute(value) {
|
|
2941
|
+
return typeof value === 'boolean' ? value : value != null && value !== 'false';
|
|
2695
2942
|
}
|
|
2696
|
-
function
|
|
2697
|
-
const
|
|
2698
|
-
|
|
2699
|
-
kind: 'pipe',
|
|
2700
|
-
type: decl.type
|
|
2701
|
-
});
|
|
2702
|
-
return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵpipe.js`, decl);
|
|
2943
|
+
function numberAttribute(value, fallbackValue = NaN) {
|
|
2944
|
+
const isNumberValue = !isNaN(parseFloat(value)) && !isNaN(Number(value));
|
|
2945
|
+
return isNumberValue ? Number(value) : fallbackValue;
|
|
2703
2946
|
}
|
|
2704
2947
|
|
|
2705
2948
|
const NOT_SET = /* @__PURE__ */Symbol('NOT_SET');
|
|
@@ -2863,31 +3106,114 @@ function phaseDebugName(phase) {
|
|
|
2863
3106
|
}
|
|
2864
3107
|
}
|
|
2865
3108
|
|
|
2866
|
-
function
|
|
2867
|
-
|
|
3109
|
+
function ɵɵngDeclareDirective(decl) {
|
|
3110
|
+
const compiler = getCompilerFacade({
|
|
3111
|
+
usage: 1,
|
|
3112
|
+
kind: 'directive',
|
|
3113
|
+
type: decl.type
|
|
3114
|
+
});
|
|
3115
|
+
return compiler.compileDirectiveDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);
|
|
2868
3116
|
}
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
}
|
|
2877
|
-
value = computed(() => {
|
|
2878
|
-
if (this.state.status === 'error') {
|
|
2879
|
-
throw new ResourceValueError(this.state.error);
|
|
2880
|
-
}
|
|
2881
|
-
return this.state.value;
|
|
3117
|
+
function ɵɵngDeclareClassMetadata(decl) {
|
|
3118
|
+
setClassMetadata(decl.type, decl.decorators, decl.ctorParameters ?? null, decl.propDecorators ?? null);
|
|
3119
|
+
}
|
|
3120
|
+
function ɵɵngDeclareClassMetadataAsync(decl) {
|
|
3121
|
+
setClassMetadataAsync(decl.type, decl.resolveDeferredDeps, (...types) => {
|
|
3122
|
+
const meta = decl.resolveMetadata(...types);
|
|
3123
|
+
setClassMetadata(decl.type, meta.decorators, meta.ctorParameters, meta.propDecorators);
|
|
2882
3124
|
});
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
3125
|
+
}
|
|
3126
|
+
function ɵɵngDeclareComponent(decl) {
|
|
3127
|
+
const compiler = getCompilerFacade({
|
|
3128
|
+
usage: 1,
|
|
3129
|
+
kind: 'component',
|
|
3130
|
+
type: decl.type
|
|
3131
|
+
});
|
|
3132
|
+
return compiler.compileComponentDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵcmp.js`, decl);
|
|
3133
|
+
}
|
|
3134
|
+
function ɵɵngDeclareFactory(decl) {
|
|
3135
|
+
const compiler = getCompilerFacade({
|
|
3136
|
+
usage: 1,
|
|
3137
|
+
kind: getFactoryKind(decl.target),
|
|
3138
|
+
type: decl.type
|
|
3139
|
+
});
|
|
3140
|
+
return compiler.compileFactoryDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);
|
|
3141
|
+
}
|
|
3142
|
+
function getFactoryKind(target) {
|
|
3143
|
+
switch (target) {
|
|
3144
|
+
case FactoryTarget.Directive:
|
|
3145
|
+
return 'directive';
|
|
3146
|
+
case FactoryTarget.Component:
|
|
3147
|
+
return 'component';
|
|
3148
|
+
case FactoryTarget.Injectable:
|
|
3149
|
+
return 'injectable';
|
|
3150
|
+
case FactoryTarget.Pipe:
|
|
3151
|
+
return 'pipe';
|
|
3152
|
+
case FactoryTarget.NgModule:
|
|
3153
|
+
return 'NgModule';
|
|
3154
|
+
case FactoryTarget.Service:
|
|
3155
|
+
return 'service';
|
|
2889
3156
|
}
|
|
2890
3157
|
}
|
|
3158
|
+
function ɵɵngDeclareInjectable(decl) {
|
|
3159
|
+
const compiler = getCompilerFacade({
|
|
3160
|
+
usage: 1,
|
|
3161
|
+
kind: 'injectable',
|
|
3162
|
+
type: decl.type
|
|
3163
|
+
});
|
|
3164
|
+
return compiler.compileInjectableDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵprov.js`, decl);
|
|
3165
|
+
}
|
|
3166
|
+
function ɵɵngDeclareInjector(decl) {
|
|
3167
|
+
const compiler = getCompilerFacade({
|
|
3168
|
+
usage: 1,
|
|
3169
|
+
kind: 'NgModule',
|
|
3170
|
+
type: decl.type
|
|
3171
|
+
});
|
|
3172
|
+
return compiler.compileInjectorDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵinj.js`, decl);
|
|
3173
|
+
}
|
|
3174
|
+
function ɵɵngDeclareNgModule(decl) {
|
|
3175
|
+
const compiler = getCompilerFacade({
|
|
3176
|
+
usage: 1,
|
|
3177
|
+
kind: 'NgModule',
|
|
3178
|
+
type: decl.type
|
|
3179
|
+
});
|
|
3180
|
+
return compiler.compileNgModuleDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵmod.js`, decl);
|
|
3181
|
+
}
|
|
3182
|
+
function ɵɵngDeclarePipe(decl) {
|
|
3183
|
+
const compiler = getCompilerFacade({
|
|
3184
|
+
usage: 1,
|
|
3185
|
+
kind: 'pipe',
|
|
3186
|
+
type: decl.type
|
|
3187
|
+
});
|
|
3188
|
+
return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵpipe.js`, decl);
|
|
3189
|
+
}
|
|
3190
|
+
function ɵɵngDeclareService(decl) {
|
|
3191
|
+
const compiler = getCompilerFacade({
|
|
3192
|
+
usage: 1,
|
|
3193
|
+
kind: 'service',
|
|
3194
|
+
type: decl.type
|
|
3195
|
+
});
|
|
3196
|
+
return compiler.compileServiceDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵprov.js`, decl);
|
|
3197
|
+
}
|
|
3198
|
+
|
|
3199
|
+
function getModuleFactory(id) {
|
|
3200
|
+
const type = getRegisteredNgModuleType(id);
|
|
3201
|
+
if (!type) throw noModuleError(id);
|
|
3202
|
+
return new NgModuleFactory(type);
|
|
3203
|
+
}
|
|
3204
|
+
function getNgModuleById(id) {
|
|
3205
|
+
const type = getRegisteredNgModuleType(id);
|
|
3206
|
+
if (!type) throw noModuleError(id);
|
|
3207
|
+
return type;
|
|
3208
|
+
}
|
|
3209
|
+
function noModuleError(id) {
|
|
3210
|
+
return new RuntimeError(920, ngDevMode && `No module with ID ${id} loaded`);
|
|
3211
|
+
}
|
|
3212
|
+
|
|
3213
|
+
class ViewRef extends ChangeDetectorRef {}
|
|
3214
|
+
class EmbeddedViewRef extends ViewRef {}
|
|
3215
|
+
|
|
3216
|
+
const platformCore = createPlatformFactory(null, 'core', []);
|
|
2891
3217
|
|
|
2892
3218
|
function createComponent(component, options) {
|
|
2893
3219
|
ngDevMode && assertComponentDef(component);
|
|
@@ -2925,28 +3251,178 @@ function reflectComponentType(component) {
|
|
|
2925
3251
|
};
|
|
2926
3252
|
}
|
|
2927
3253
|
|
|
2928
|
-
function
|
|
2929
|
-
return
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
3254
|
+
function resourceFromSnapshots(source) {
|
|
3255
|
+
return new SnapshotResource(isSignal(source) ? source : computed(source));
|
|
3256
|
+
}
|
|
3257
|
+
class SnapshotResource {
|
|
3258
|
+
snapshot;
|
|
3259
|
+
constructor(snapshot) {
|
|
3260
|
+
this.snapshot = snapshot;
|
|
3261
|
+
}
|
|
3262
|
+
get state() {
|
|
3263
|
+
return this.snapshot();
|
|
3264
|
+
}
|
|
3265
|
+
value = computed(() => {
|
|
3266
|
+
if (this.state.status === 'error') {
|
|
3267
|
+
throw new ResourceValueError(this.state.error);
|
|
3268
|
+
}
|
|
3269
|
+
return this.state.value;
|
|
3270
|
+
});
|
|
3271
|
+
status = computed(() => this.state.status);
|
|
3272
|
+
error = computed(() => this.state.status === 'error' ? this.state.error : undefined);
|
|
3273
|
+
isLoading = computed(() => this.state.status === 'loading' || this.state.status === 'reloading');
|
|
3274
|
+
isValueDefined = computed(() => this.state.status !== 'error' && this.state.value !== undefined);
|
|
3275
|
+
hasValue() {
|
|
3276
|
+
return this.isValueDefined();
|
|
3277
|
+
}
|
|
3278
|
+
}
|
|
3279
|
+
|
|
3280
|
+
function debounced(source, wait, options) {
|
|
3281
|
+
if (isInParamsFunction()) {
|
|
3282
|
+
throw invalidResourceCreationInParams();
|
|
3283
|
+
}
|
|
3284
|
+
if (ngDevMode && !options?.injector) {
|
|
3285
|
+
assertInInjectionContext(debounced);
|
|
3286
|
+
}
|
|
3287
|
+
const injector = options?.injector ?? inject(Injector);
|
|
3288
|
+
let active;
|
|
3289
|
+
let pendingValue;
|
|
3290
|
+
injector.get(DestroyRef).onDestroy(() => {
|
|
3291
|
+
active = undefined;
|
|
3292
|
+
});
|
|
3293
|
+
const state = linkedSignal({
|
|
3294
|
+
source: () => {
|
|
3295
|
+
try {
|
|
3296
|
+
setInParamsFunction(true);
|
|
3297
|
+
return {
|
|
3298
|
+
value: source(),
|
|
3299
|
+
thrown: false
|
|
3300
|
+
};
|
|
3301
|
+
} catch (err) {
|
|
3302
|
+
rethrowFatalErrors(err);
|
|
3303
|
+
return {
|
|
3304
|
+
error: err,
|
|
3305
|
+
thrown: true
|
|
3306
|
+
};
|
|
3307
|
+
} finally {
|
|
3308
|
+
setInParamsFunction(false);
|
|
3309
|
+
}
|
|
3310
|
+
},
|
|
3311
|
+
computation: (res, previous) => {
|
|
3312
|
+
if (previous !== undefined) {
|
|
3313
|
+
return previous.value;
|
|
3314
|
+
}
|
|
3315
|
+
if (res.thrown) {
|
|
3316
|
+
return {
|
|
3317
|
+
status: 'error',
|
|
3318
|
+
error: res.error
|
|
3319
|
+
};
|
|
3320
|
+
}
|
|
3321
|
+
return {
|
|
3322
|
+
status: 'resolved',
|
|
3323
|
+
value: res.value
|
|
3324
|
+
};
|
|
3325
|
+
}
|
|
3326
|
+
});
|
|
3327
|
+
effect(() => {
|
|
3328
|
+
let value;
|
|
3329
|
+
try {
|
|
3330
|
+
setInParamsFunction(true);
|
|
3331
|
+
value = source();
|
|
3332
|
+
} catch (err) {
|
|
3333
|
+
rethrowFatalErrors(err);
|
|
3334
|
+
state.set({
|
|
3335
|
+
status: 'error',
|
|
3336
|
+
error: err
|
|
3337
|
+
});
|
|
3338
|
+
active = pendingValue = undefined;
|
|
3339
|
+
return;
|
|
3340
|
+
} finally {
|
|
3341
|
+
setInParamsFunction(false);
|
|
3342
|
+
}
|
|
3343
|
+
const currentState = untracked(state);
|
|
3344
|
+
const equal = options?.equal ?? Object.is;
|
|
3345
|
+
if (currentState.status === 'reloading' || currentState.status === 'loading') {
|
|
3346
|
+
if (equal(value, pendingValue)) return;
|
|
3347
|
+
} else if (currentState.status === 'resolved') {
|
|
3348
|
+
if (equal(value, currentState.value)) return;
|
|
3349
|
+
}
|
|
3350
|
+
const waitFn = typeof wait === 'number' ? () => new Promise(resolve => setTimeout(resolve, wait)) : wait;
|
|
3351
|
+
const result = waitFn(value, currentState);
|
|
3352
|
+
if (result === undefined) {
|
|
3353
|
+
state.set({
|
|
3354
|
+
status: 'resolved',
|
|
3355
|
+
value
|
|
3356
|
+
});
|
|
3357
|
+
active = pendingValue = undefined;
|
|
3358
|
+
} else {
|
|
3359
|
+
if (currentState.status !== 'loading' && currentState.status !== 'error') {
|
|
3360
|
+
state.set({
|
|
3361
|
+
status: 'loading',
|
|
3362
|
+
value: currentState.value
|
|
3363
|
+
});
|
|
3364
|
+
}
|
|
3365
|
+
active = result;
|
|
3366
|
+
pendingValue = value;
|
|
3367
|
+
result.then(() => {
|
|
3368
|
+
if (active === result) {
|
|
3369
|
+
state.set({
|
|
3370
|
+
status: 'resolved',
|
|
3371
|
+
value
|
|
3372
|
+
});
|
|
3373
|
+
active = pendingValue = undefined;
|
|
3374
|
+
}
|
|
3375
|
+
});
|
|
3376
|
+
}
|
|
2933
3377
|
}, {
|
|
2934
|
-
|
|
3378
|
+
injector
|
|
2935
3379
|
});
|
|
3380
|
+
return resourceFromSnapshots(state);
|
|
2936
3381
|
}
|
|
2937
3382
|
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
}
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
3383
|
+
function isDevMode() {
|
|
3384
|
+
return typeof ngDevMode === 'undefined' || !!ngDevMode;
|
|
3385
|
+
}
|
|
3386
|
+
function enableProdMode() {
|
|
3387
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
3388
|
+
_global['ngDevMode'] = false;
|
|
3389
|
+
}
|
|
3390
|
+
}
|
|
3391
|
+
|
|
3392
|
+
function declareWebMcpTool(tool, injector) {
|
|
3393
|
+
const {
|
|
3394
|
+
modelContext
|
|
3395
|
+
} = globalThis.navigator;
|
|
3396
|
+
if (!modelContext) return;
|
|
3397
|
+
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
3398
|
+
if (!injector) assertInInjectionContext(declareWebMcpTool);
|
|
3399
|
+
}
|
|
3400
|
+
const currentInjector = injector ?? inject(Injector);
|
|
3401
|
+
const destroyRef = currentInjector.get(DestroyRef);
|
|
3402
|
+
const abortCtrl = new AbortController();
|
|
3403
|
+
const wrappedTool = {
|
|
3404
|
+
...tool,
|
|
3405
|
+
execute: (args, client) => runInInjectionContext(currentInjector, () => tool.execute(args, {
|
|
3406
|
+
...client,
|
|
3407
|
+
signal: abortCtrl.signal
|
|
3408
|
+
}))
|
|
3409
|
+
};
|
|
3410
|
+
modelContext.registerTool(wrappedTool, {
|
|
3411
|
+
signal: abortCtrl.signal
|
|
3412
|
+
});
|
|
3413
|
+
destroyRef.onDestroy(() => {
|
|
3414
|
+
abortCtrl.abort();
|
|
3415
|
+
modelContext.unregisterTool?.({
|
|
3416
|
+
name: tool.name
|
|
3417
|
+
});
|
|
3418
|
+
});
|
|
3419
|
+
}
|
|
3420
|
+
|
|
3421
|
+
function provideWebMcpTools(tools) {
|
|
3422
|
+
return makeEnvironmentProviders([provideEnvironmentInitializer(() => {
|
|
3423
|
+
for (const tool of tools) declareWebMcpTool(tool);
|
|
3424
|
+
})]);
|
|
3425
|
+
}
|
|
2950
3426
|
|
|
2951
|
-
export { APP_BOOTSTRAP_LISTENER, APP_ID, ApplicationInitStatus, ApplicationModule, ApplicationRef, COMPILER_OPTIONS, ChangeDetectorRef, ContentChild, ContentChildren, DOCUMENT, DefaultIterableDiffer, DestroyRef, ENVIRONMENT_INITIALIZER, EmbeddedViewRef, ErrorHandler, HOST_TAG_NAME, HostAttributeToken, Injectable, InjectionToken, Injector, IterableDiffers, KeyValueDiffers, LOCALE_ID, NgModule, NgZone, OutputEmitterRef, PLATFORM_INITIALIZER, PlatformRef, Query, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, TransferState, ViewChild, ViewChildren, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, afterRenderEffect, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createPlatform, createPlatformFactory, destroyPlatform, enableProdMode, getModuleFactory, getNgModuleById, getPlatform, inject, input, isDevMode, isSignal, makeEnvironmentProviders, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideCheckNoChangesConfig, provideEnvironmentInitializer, providePlatformInitializer, provideStabilityDebugging, provideZoneChangeDetection, reflectComponentType, resourceFromSnapshots, runInInjectionContext, viewChild, viewChildren, AfterRenderManager as ɵAfterRenderManager, CLIENT_RENDER_MODE_FLAG as ɵCLIENT_RENDER_MODE_FLAG, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEHYDRATED_BLOCK_REGISTRY as ɵDEHYDRATED_BLOCK_REGISTRY, ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, EVENT_REPLAY_QUEUE as ɵEVENT_REPLAY_QUEUE, Framework as ɵFramework, IMAGE_CONFIG as ɵIMAGE_CONFIG, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_BLOCK_ELEMENT_MAP as ɵJSACTION_BLOCK_ELEMENT_MAP, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, NgModuleFactory as ɵNgModuleFactory, PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PROVIDED_ZONELESS as ɵPROVIDED_ZONELESS, PendingTasksInternal as ɵPendingTasksInternal, ProfilerEvent as ɵProfilerEvent, ComponentFactory as ɵRender3ComponentFactory, RuntimeError as ɵRuntimeError, SIGNAL as ɵSIGNAL, TracingService as ɵTracingService, ViewRef$1 as ɵViewRef, ZONELESS_ENABLED as ɵZONELESS_ENABLED, annotateForHydration as ɵannotateForHydration, ɵassertType, compileNgModuleFactory as ɵcompileNgModuleFactory, createOrReusePlatformInjector as ɵcreateOrReusePlatformInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, disableProfiling as ɵdisableProfiling, enableProfiling as ɵenableProfiling, formatRuntimeError as ɵformatRuntimeError,
|
|
3427
|
+
export { APP_BOOTSTRAP_LISTENER, APP_ID, ApplicationInitStatus, ApplicationModule, ApplicationRef, COMPILER_OPTIONS, ChangeDetectorRef, ContentChild, ContentChildren, DOCUMENT, DefaultIterableDiffer, DestroyRef, ENVIRONMENT_INITIALIZER, EmbeddedViewRef, ErrorHandler, HOST_TAG_NAME, HostAttributeToken, Injectable, InjectionToken, Injector, IterableDiffers, KeyValueDiffers, LOCALE_ID, NgModule, NgZone, OutputEmitterRef, PLATFORM_INITIALIZER, PlatformRef, Query, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, Service, TransferState, ViewChild, ViewChildren, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, afterRenderEffect, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createPlatform, createPlatformFactory, debounced, declareWebMcpTool, destroyPlatform, effect, enableProdMode, getModuleFactory, getNgModuleById, getPlatform, inject, injectAsync, input, isDevMode, isSignal, linkedSignal, makeEnvironmentProviders, mergeApplicationConfig, model, numberAttribute, onIdle, output, platformCore, provideAppInitializer, provideCheckNoChangesConfig, provideEnvironmentInitializer, providePlatformInitializer, provideStabilityDebugging, provideWebMcpTools, provideZoneChangeDetection, reflectComponentType, resourceFromSnapshots, runInInjectionContext, untracked, viewChild, viewChildren, AfterRenderManager as ɵAfterRenderManager, CLIENT_RENDER_MODE_FLAG as ɵCLIENT_RENDER_MODE_FLAG, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEHYDRATED_BLOCK_REGISTRY as ɵDEHYDRATED_BLOCK_REGISTRY, ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, EVENT_REPLAY_QUEUE as ɵEVENT_REPLAY_QUEUE, Framework as ɵFramework, IMAGE_CONFIG as ɵIMAGE_CONFIG, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_BLOCK_ELEMENT_MAP as ɵJSACTION_BLOCK_ELEMENT_MAP, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, NG_PROV_DEF as ɵNG_PROV_DEF, NgModuleFactory as ɵNgModuleFactory, PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PROVIDED_ZONELESS as ɵPROVIDED_ZONELESS, PendingTasksInternal as ɵPendingTasksInternal, ProfilerEvent as ɵProfilerEvent, R3Injector as ɵR3Injector, ComponentFactory as ɵRender3ComponentFactory, RuntimeError as ɵRuntimeError, SIGNAL as ɵSIGNAL, TracingService as ɵTracingService, ViewRef$1 as ɵViewRef, ZONELESS_ENABLED as ɵZONELESS_ENABLED, annotateForHydration as ɵannotateForHydration, ɵassertType, compileNgModuleFactory as ɵcompileNgModuleFactory, createOrReusePlatformInjector as ɵcreateOrReusePlatformInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, disableProfiling as ɵdisableProfiling, enableProfiling as ɵenableProfiling, formatRuntimeError as ɵformatRuntimeError, getComponentDef as ɵgetComponentDef, getDocument as ɵgetDocument, getLContext as ɵgetLContext, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isPromise as ɵisPromise, maybeUnwrapDefaultExport as ɵmaybeUnwrapDefaultExport, performanceMarkFeature as ɵperformanceMarkFeature, promiseWithResolvers as ɵpromiseWithResolvers, provideZonelessChangeDetectionInternal as ɵprovideZonelessChangeDetectionInternal, resolveComponentResources as ɵresolveComponentResources, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, startMeasuring as ɵstartMeasuring, stopMeasuring as ɵstopMeasuring, stringify as ɵstringify, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, withIncrementalHydration as ɵwithIncrementalHydration, FactoryTarget as ɵɵFactoryTarget, __defineInjectable as ɵɵdefineInjectable, __defineInjector as ɵɵdefineInjector, __defineNgModule as ɵɵdefineNgModule, __inject as ɵɵinject, __injectAttribute as ɵɵinjectAttribute, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵngDeclareService };
|
|
2952
3428
|
//# sourceMappingURL=core.mjs.map
|