@angular/core 21.0.0-next.0 → 21.0.0-next.2
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/api.d.d.ts +1 -1
- package/chrome_dev_tools_performance.d.d.ts +2 -17
- package/discovery.d.d.ts +17 -60
- package/{signal.d.d.ts → effect.d.d.ts} +13 -3
- package/event_dispatcher.d.d.ts +1 -1
- package/fesm2022/attribute.mjs +1 -1
- package/fesm2022/attribute.mjs.map +1 -1
- package/fesm2022/core.mjs +15 -19
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/debug_node.mjs +75 -719
- package/fesm2022/debug_node.mjs.map +1 -1
- package/fesm2022/{untracked.mjs → effect.mjs} +29 -4
- package/fesm2022/effect.mjs.map +1 -0
- package/fesm2022/not_found.mjs +1 -1
- package/fesm2022/not_found.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 +1 -1
- 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/resource.mjs +18 -27
- package/fesm2022/resource.mjs.map +1 -1
- package/fesm2022/root_effect_scheduler.mjs +689 -87
- package/fesm2022/root_effect_scheduler.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +4 -4
- package/fesm2022/rxjs-interop.mjs.map +1 -1
- package/fesm2022/signal.mjs +1 -1
- package/fesm2022/signal.mjs.map +1 -1
- package/fesm2022/testing.mjs +6 -8
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/weak_ref.mjs +1 -1
- package/fesm2022/weak_ref.mjs.map +1 -1
- package/graph.d.d.ts +1 -1
- package/index.d.ts +34 -57
- package/package.json +2 -2
- package/primitives/di/index.d.ts +1 -1
- package/primitives/event-dispatch/index.d.ts +1 -1
- package/primitives/signals/index.d.ts +3 -3
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/bundles/application-config-core.cjs +95 -0
- package/schematics/bundles/{apply_import_manager-DR9xXCle.cjs → apply_import_manager-B3czqUhF.cjs} +3 -3
- package/schematics/bundles/cleanup-unused-imports.cjs +5 -5
- package/schematics/bundles/{compiler_host-BXBP7CE2.cjs → compiler_host-B9qvCnmC.cjs} +2 -2
- package/schematics/bundles/control-flow-migration.cjs +13 -41
- package/schematics/bundles/{imports-CIX-JgAN.cjs → imports-26VeX8i-.cjs} +2 -1
- package/schematics/bundles/{index-esqfDjNB.cjs → index-B6-f9bil.cjs} +12 -12
- package/schematics/bundles/{index-CfTQUOiz.cjs → index-DN8W1c8n.cjs} +4 -4
- package/schematics/bundles/inject-migration.cjs +144 -49
- package/schematics/bundles/leading_space-D9nQ8UQC.cjs +1 -1
- package/schematics/bundles/{migrate_ts_type_references-6NtAj-Wk.cjs → migrate_ts_type_references-DawXRJzI.cjs} +5 -5
- package/schematics/bundles/ng_component_template-DUAg-x1h.cjs +186 -0
- package/schematics/bundles/{ng_decorators-B5HCqr20.cjs → ng_decorators-CtYwz9Lw.cjs} +2 -2
- package/schematics/bundles/ngclass-to-class-migration.cjs +533 -0
- package/schematics/bundles/nodes-B16H9JUd.cjs +1 -1
- package/schematics/bundles/output-migration.cjs +6 -6
- package/schematics/bundles/parse_html-C8TYlOyu.cjs +41 -0
- package/schematics/bundles/{project_paths-DcaODbky.cjs → project_paths-D64fJzoa.cjs} +3 -3
- package/schematics/bundles/{project_tsconfig_paths-CS-eSeHC.cjs → project_tsconfig_paths-DZ17BWwk.cjs} +36 -7
- package/schematics/bundles/property_name-BBwFuqMe.cjs +1 -1
- package/schematics/bundles/route-lazy-loading.cjs +3 -3
- package/schematics/bundles/router-current-navigation.cjs +5 -5
- package/schematics/bundles/router-last-successful-navigation.cjs +5 -5
- package/schematics/bundles/self-closing-tags-migration.cjs +11 -207
- package/schematics/bundles/signal-input-migration.cjs +7 -7
- package/schematics/bundles/signal-queries-migration.cjs +7 -7
- package/schematics/bundles/signals.cjs +7 -7
- package/schematics/bundles/standalone-migration.cjs +6 -6
- package/schematics/bundles/symbol-VPWguRxr.cjs +1 -1
- package/schematics/collection.json +6 -0
- package/schematics/migrations/ngclass-to-class-migration/schema.json +20 -0
- package/schematics/migrations.json +5 -0
- package/testing/index.d.ts +2 -2
- package/weak_ref.d.d.ts +1 -1
- package/fesm2022/untracked.mjs.map +0 -1
package/fesm2022/debug_node.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v21.0.0-next.
|
|
2
|
+
* @license Angular v21.0.0-next.2
|
|
3
3
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { attachInjectFlag, _global, ɵɵdefineInjectable as __defineInjectable, ɵɵdefineInjector as __defineInjector, ɵɵinject as __inject, ɵɵinvalidFactoryDep as __invalidFactoryDep, resolveForwardRef, newArray, EMPTY_OBJ, assertString, assertNotEqual, FLAGS, assertEqual, isInCheckNoChangesMode, PREORDER_HOOK_FLAGS, assertFirstCreatePass, assertDefined, throwError, assertNumber, assertGreaterThan, HEADER_OFFSET, DECLARATION_VIEW, NG_FACTORY_DEF, isForwardRef, getFactoryDef, assertIndexInRange, assertTNodeForLView, enterDI, runInInjectorProfilerContext, getCurrentTNode, getLView, emitInjectorToCreateInstanceEvent, emitInstanceCreatedByInjectorEvent, throwProviderNotFoundError, leaveDI, assertNodeInjector, stringifyForError, cyclicDependencyErrorWithDetails, cyclicDependencyError, setInjectorProfilerContext, setInjectImplementation, assertDirectiveDef, NG_ELEMENT_ID, convertToBitFlags, isRootView, T_HOST, TVIEW, injectRootLimpMode, isComponentDef, EMBEDDED_VIEW_INJECTOR, INJECTOR$1 as INJECTOR, DECLARATION_COMPONENT_VIEW, isComponentHost, RuntimeError, NG_PROV_DEF, getClosureSafeProperty, getNativeByTNode, flatten, arrayEquals, ID, isLView, assertDomNode, unwrapRNode, getComponentLViewByIndex, CONTEXT, EMPTY_ARRAY, assertLView, HOST, CHILD_HEAD, NEXT, isLContainer, getLViewParent, Injector, CLEANUP, getComponentDef, getDirectiveDef, InjectionToken, inject, isInSkipHydrationBlock as isInSkipHydrationBlock$1, HYDRATION, isContentQueryHost, setCurrentQueryIndex, XSS_SECURITY_URL, renderStringify, ENVIRONMENT, makeEnvironmentProviders, isDirectiveHost, formatRuntimeError, resetPreOrderHookFlags, PARENT, RENDERER, CHILD_TAIL, assertSame, assertFirstUpdatePass, getSelectedIndex, getTView, assertIndexInDeclRange, setSelectedIndex, assertLContainer, MOVED_VIEWS, isDestroyed, REACTIVE_TEMPLATE_CONSUMER, DECLARATION_LCONTAINER, QUERIES, assertNotReactive, ON_DESTROY_HOOKS, assertFunction, EFFECTS, assertProjectionSlots, NATIVE, assertParentView, CONTAINER_HEADER_OFFSET, assertNotSame, setCurrentDirectiveIndex, setCurrentTNode, getElementDepthCount, increaseElementDepthCount, wasLastNodeCreated, isCurrentTNodeParent, setCurrentTNodeAsNotParent, assertHasParent, INTERNAL_APPLICATION_ERROR_HANDLER, stringify, getCurrentDirectiveIndex, unwrapLView, isCreationMode, enterView, leaveView, AFTER_RENDER_SEQUENCES_TO_ADD, markAncestorsForTraversal, markViewForRefresh, setIsRefreshingViews, isExhaustiveCheckNoChanges, requiresRefreshOrTraversal, setIsInCheckNoChangesMode, CheckNoChangesMode, setBindingIndex, EFFECTS_TO_SCHEDULE, viewAttachedToChangeDetector, setBindingRootForHostBindings, isRefreshingViews, removeFromArray, addToArray, updateAncestorTraversalFlagsOnAttach, storeLViewOnDestroy, VIEW_REFS, assertGreaterThanOrEqual, isInI18nBlock, assertTNodeForTView, getCurrentParentTNode, getCurrentTNodePlaceholderOk, assertTNode, assertTIcu, assertNumberInRange, DEHYDRATED_VIEWS, getNgModuleDef, getPipeDef as getPipeDef$1, getNgModuleDefOrThrow, isStandalone, concatStringsWithSpace, assertInjectImplementationNotEqual, emitInjectEvent, getConstant, assertLessThan, getOrCreateTViewCleanup, getOrCreateLViewCleanup, assertNotDefined, nextBindingIndex, getSelectedTNode, getDirectiveDefOrThrow, getTNode, assertComponentType, debugStringifyTypeForError, ChangeDetectionScheduler, EnvironmentInjector, SVG_NAMESPACE, MATH_ML_NAMESPACE, viewAttachedToContainer, storeCleanupWithContext, signal, createInjectorWithoutInjectorInstances, R3Injector, getNullInjector, internalImportProvidersFrom, initNgDevMode, fillProperties, getBindingsEnabled, lastNodeWasCreated,
|
|
7
|
+
import { attachInjectFlag, _global, ɵɵdefineInjectable as __defineInjectable, ɵɵdefineInjector as __defineInjector, ɵɵinject as __inject, ɵɵinvalidFactoryDep as __invalidFactoryDep, resolveForwardRef, newArray, EMPTY_OBJ, assertString, assertNotEqual, FLAGS, assertEqual, isInCheckNoChangesMode, PREORDER_HOOK_FLAGS, assertFirstCreatePass, assertDefined, throwError, assertNumber, assertGreaterThan, HEADER_OFFSET, DECLARATION_VIEW, NG_FACTORY_DEF, isForwardRef, getFactoryDef, assertIndexInRange, assertTNodeForLView, enterDI, runInInjectorProfilerContext, getCurrentTNode, getLView, emitInjectorToCreateInstanceEvent, emitInstanceCreatedByInjectorEvent, throwProviderNotFoundError, leaveDI, assertNodeInjector, stringifyForError, cyclicDependencyErrorWithDetails, cyclicDependencyError, setInjectorProfilerContext, setInjectImplementation, assertDirectiveDef, NG_ELEMENT_ID, convertToBitFlags, isRootView, T_HOST, TVIEW, injectRootLimpMode, isComponentDef, EMBEDDED_VIEW_INJECTOR, INJECTOR$1 as INJECTOR, DECLARATION_COMPONENT_VIEW, isComponentHost, RuntimeError, NG_PROV_DEF, getClosureSafeProperty, getNativeByTNode, flatten, arrayEquals, ID, isLView, assertDomNode, unwrapRNode, getComponentLViewByIndex, CONTEXT, EMPTY_ARRAY, assertLView, HOST, CHILD_HEAD, NEXT, isLContainer, getLViewParent, Injector, CLEANUP, getComponentDef, getDirectiveDef, InjectionToken, inject, isInSkipHydrationBlock as isInSkipHydrationBlock$1, HYDRATION, isContentQueryHost, setCurrentQueryIndex, XSS_SECURITY_URL, renderStringify, ENVIRONMENT, makeEnvironmentProviders, isDirectiveHost, formatRuntimeError, resetPreOrderHookFlags, PARENT, RENDERER, CHILD_TAIL, assertSame, assertFirstUpdatePass, getSelectedIndex, getTView, assertIndexInDeclRange, setSelectedIndex, assertLContainer, MOVED_VIEWS, isDestroyed, REACTIVE_TEMPLATE_CONSUMER, DECLARATION_LCONTAINER, QUERIES, assertNotReactive, ON_DESTROY_HOOKS, assertFunction, EFFECTS, assertProjectionSlots, NATIVE, assertParentView, CONTAINER_HEADER_OFFSET, assertNotSame, setCurrentDirectiveIndex, setCurrentTNode, getElementDepthCount, increaseElementDepthCount, wasLastNodeCreated, isCurrentTNodeParent, setCurrentTNodeAsNotParent, assertHasParent, INTERNAL_APPLICATION_ERROR_HANDLER, stringify, getCurrentDirectiveIndex, unwrapLView, isCreationMode, enterView, leaveView, AFTER_RENDER_SEQUENCES_TO_ADD, markAncestorsForTraversal, markViewForRefresh, setIsRefreshingViews, isExhaustiveCheckNoChanges, requiresRefreshOrTraversal, setIsInCheckNoChangesMode, CheckNoChangesMode, setBindingIndex, EFFECTS_TO_SCHEDULE, viewAttachedToChangeDetector, setBindingRootForHostBindings, isRefreshingViews, removeFromArray, addToArray, updateAncestorTraversalFlagsOnAttach, storeLViewOnDestroy, VIEW_REFS, assertGreaterThanOrEqual, isInI18nBlock, assertTNodeForTView, getCurrentParentTNode, getCurrentTNodePlaceholderOk, assertTNode, assertTIcu, assertNumberInRange, DEHYDRATED_VIEWS, getNgModuleDef, getPipeDef as getPipeDef$1, getNgModuleDefOrThrow, isStandalone, concatStringsWithSpace, assertInjectImplementationNotEqual, emitInjectEvent, getConstant, assertLessThan, getOrCreateTViewCleanup, getOrCreateLViewCleanup, assertNotDefined, nextBindingIndex, getSelectedTNode, getDirectiveDefOrThrow, getTNode, assertComponentType, debugStringifyTypeForError, ChangeDetectionScheduler, EnvironmentInjector, SVG_NAMESPACE, MATH_ML_NAMESPACE, viewAttachedToContainer, storeCleanupWithContext, signal, createInjectorWithoutInjectorInstances, R3Injector, getNullInjector, internalImportProvidersFrom, initNgDevMode, fillProperties, getBindingsEnabled, lastNodeWasCreated, NgZone, ErrorHandler, assertNotInReactiveContext, assertInInjectionContext, DestroyRef, ViewContext, removeLViewOnDestroy, walkUpViews, getNativeByIndex, assertElement, arrayInsert2, arraySplice, setInjectorProfiler, NullInjector, ENVIRONMENT_INITIALIZER, INJECTOR_DEF_TYPES, walkProviderTree, getInjectorDef, deepForEach, isTypeProvider, isSignal, isInInjectionContext, runInInjectionContext, ZONELESS_ENABLED, EffectScheduler, PendingTasksInternal, PendingTasks, getAnimationElementRemovalRegistry, assertTNodeCreationIndex, isSkipHydrationRootTNode, leaveSkipHydrationBlock, decreaseElementDepthCount, getNamespace, enterSkipHydrationBlock, getCurrentDirectiveDef, assertIndexInExpandoRange, getBindingIndex, assertOneOf, setInI18nBlock, nextContextImpl, getCurrentQueryIndex, getContextLView, load, keyValueArrayIndexOf, keyValueArraySet, keyValueArrayGet, incrementBindingIndex, isWritableSignal, store, providerToFactory, emitProviderConfiguredEvent, isClassProvider, setAnimationElementRemovalRegistry, getBindingRoot, NG_COMP_DEF, ɵɵresetView as __resetView, ɵɵnamespaceHTML as __namespaceHTML, ɵɵnamespaceMathML as __namespaceMathML, ɵɵnamespaceSVG as __namespaceSVG, ɵɵenableBindings as __enableBindings, ɵɵdisableBindings as __disableBindings, ɵɵrestoreView as __restoreView, forwardRef, NG_MOD_DEF, NG_INJ_DEF, NG_DIR_DEF, NG_PIPE_DEF, SCHEDULE_IN_ROOT_ZONE, SCHEDULE_IN_ROOT_ZONE_DEFAULT, ZONELESS_SCHEDULER_DISABLED, angularZoneInstanceIdProperty, NoopNgZone, scheduleCallbackWithMicrotask, PROVIDED_ZONELESS, scheduleCallbackWithRafRace, getNativeByTNodeOrNull } from './root_effect_scheduler.mjs';
|
|
8
8
|
import { setActiveConsumer, SIGNAL, consumerDestroy, REACTIVE_NODE, consumerPollProducersForChange, consumerBeforeComputation, getActiveConsumer, consumerAfterComputation, createComputed, setThrowInvalidWriteToSignalError } from './signal.mjs';
|
|
9
9
|
import { Subject, Subscription } from 'rxjs';
|
|
10
10
|
import { setActiveConsumer as setActiveConsumer$1 } from '@angular/core/primitives/signals';
|
|
@@ -3593,13 +3593,6 @@ const PLATFORM_ID = new InjectionToken(ngDevMode ? 'Platform ID' : '', {
|
|
|
3593
3593
|
providedIn: 'platform',
|
|
3594
3594
|
factory: () => 'unknown', // set a default platform name, when none set explicitly
|
|
3595
3595
|
});
|
|
3596
|
-
/**
|
|
3597
|
-
* A DI token that indicates the root directory of
|
|
3598
|
-
* the application
|
|
3599
|
-
* @publicApi
|
|
3600
|
-
* @deprecated
|
|
3601
|
-
*/
|
|
3602
|
-
const PACKAGE_ROOT_URL = new InjectionToken(ngDevMode ? 'Application Packages Root URL' : '');
|
|
3603
3596
|
// We keep this token here, rather than the animations package, so that modules that only care
|
|
3604
3597
|
// about which animations module is loaded (e.g. the CDK) can retrieve it without having to
|
|
3605
3598
|
// include extra dependencies. See #44970 for more context.
|
|
@@ -8406,7 +8399,13 @@ function handleUncaughtError(lView, error) {
|
|
|
8406
8399
|
if (!injector) {
|
|
8407
8400
|
return;
|
|
8408
8401
|
}
|
|
8409
|
-
|
|
8402
|
+
let errorHandler;
|
|
8403
|
+
try {
|
|
8404
|
+
errorHandler = injector.get(INTERNAL_APPLICATION_ERROR_HANDLER, null);
|
|
8405
|
+
}
|
|
8406
|
+
catch {
|
|
8407
|
+
errorHandler = null;
|
|
8408
|
+
}
|
|
8410
8409
|
errorHandler?.(error);
|
|
8411
8410
|
}
|
|
8412
8411
|
/**
|
|
@@ -13523,7 +13522,7 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
13523
13522
|
}
|
|
13524
13523
|
function createRootTView(rootSelectorOrNode, componentDef, componentBindings, directives) {
|
|
13525
13524
|
const tAttributes = rootSelectorOrNode
|
|
13526
|
-
? ['ng-version', '21.0.0-next.
|
|
13525
|
+
? ['ng-version', '21.0.0-next.2']
|
|
13527
13526
|
: // Extract attributes and classes from the first selector only to match VE behavior.
|
|
13528
13527
|
extractAttrsAndClassesFromSelector(componentDef.selectors[0]);
|
|
13529
13528
|
let creationBindings = null;
|
|
@@ -16201,610 +16200,6 @@ var TracingAction;
|
|
|
16201
16200
|
*/
|
|
16202
16201
|
const TracingService = new InjectionToken(ngDevMode ? 'TracingService' : '');
|
|
16203
16202
|
|
|
16204
|
-
const SCHEDULE_IN_ROOT_ZONE_DEFAULT = false;
|
|
16205
|
-
|
|
16206
|
-
class EventEmitter_ extends Subject {
|
|
16207
|
-
// tslint:disable-next-line:require-internal-with-underscore
|
|
16208
|
-
__isAsync;
|
|
16209
|
-
destroyRef = undefined;
|
|
16210
|
-
pendingTasks = undefined;
|
|
16211
|
-
constructor(isAsync = false) {
|
|
16212
|
-
super();
|
|
16213
|
-
this.__isAsync = isAsync;
|
|
16214
|
-
// Attempt to retrieve a `DestroyRef` and `PendingTasks` optionally.
|
|
16215
|
-
// For backwards compatibility reasons, this cannot be required.
|
|
16216
|
-
if (isInInjectionContext()) {
|
|
16217
|
-
// `DestroyRef` is optional because it is not available in all contexts.
|
|
16218
|
-
// But it is useful to properly complete the `EventEmitter` if used with `outputToObservable`
|
|
16219
|
-
// when the component/directive is destroyed. (See `outputToObservable` for more details.)
|
|
16220
|
-
this.destroyRef = inject(DestroyRef, { optional: true }) ?? undefined;
|
|
16221
|
-
this.pendingTasks = inject(PendingTasksInternal, { optional: true }) ?? undefined;
|
|
16222
|
-
}
|
|
16223
|
-
}
|
|
16224
|
-
emit(value) {
|
|
16225
|
-
const prevConsumer = setActiveConsumer(null);
|
|
16226
|
-
try {
|
|
16227
|
-
super.next(value);
|
|
16228
|
-
}
|
|
16229
|
-
finally {
|
|
16230
|
-
setActiveConsumer(prevConsumer);
|
|
16231
|
-
}
|
|
16232
|
-
}
|
|
16233
|
-
subscribe(observerOrNext, error, complete) {
|
|
16234
|
-
let nextFn = observerOrNext;
|
|
16235
|
-
let errorFn = error || (() => null);
|
|
16236
|
-
let completeFn = complete;
|
|
16237
|
-
if (observerOrNext && typeof observerOrNext === 'object') {
|
|
16238
|
-
const observer = observerOrNext;
|
|
16239
|
-
nextFn = observer.next?.bind(observer);
|
|
16240
|
-
errorFn = observer.error?.bind(observer);
|
|
16241
|
-
completeFn = observer.complete?.bind(observer);
|
|
16242
|
-
}
|
|
16243
|
-
if (this.__isAsync) {
|
|
16244
|
-
errorFn = this.wrapInTimeout(errorFn);
|
|
16245
|
-
if (nextFn) {
|
|
16246
|
-
nextFn = this.wrapInTimeout(nextFn);
|
|
16247
|
-
}
|
|
16248
|
-
if (completeFn) {
|
|
16249
|
-
completeFn = this.wrapInTimeout(completeFn);
|
|
16250
|
-
}
|
|
16251
|
-
}
|
|
16252
|
-
const sink = super.subscribe({ next: nextFn, error: errorFn, complete: completeFn });
|
|
16253
|
-
if (observerOrNext instanceof Subscription) {
|
|
16254
|
-
observerOrNext.add(sink);
|
|
16255
|
-
}
|
|
16256
|
-
return sink;
|
|
16257
|
-
}
|
|
16258
|
-
wrapInTimeout(fn) {
|
|
16259
|
-
return (value) => {
|
|
16260
|
-
const taskId = this.pendingTasks?.add();
|
|
16261
|
-
setTimeout(() => {
|
|
16262
|
-
try {
|
|
16263
|
-
fn(value);
|
|
16264
|
-
}
|
|
16265
|
-
finally {
|
|
16266
|
-
if (taskId !== undefined) {
|
|
16267
|
-
this.pendingTasks?.remove(taskId);
|
|
16268
|
-
}
|
|
16269
|
-
}
|
|
16270
|
-
});
|
|
16271
|
-
};
|
|
16272
|
-
}
|
|
16273
|
-
}
|
|
16274
|
-
/**
|
|
16275
|
-
* @publicApi
|
|
16276
|
-
*/
|
|
16277
|
-
const EventEmitter = EventEmitter_;
|
|
16278
|
-
|
|
16279
|
-
/**
|
|
16280
|
-
* Gets a scheduling function that runs the callback after the first of setTimeout and
|
|
16281
|
-
* requestAnimationFrame resolves.
|
|
16282
|
-
*
|
|
16283
|
-
* - `requestAnimationFrame` ensures that change detection runs ahead of a browser repaint.
|
|
16284
|
-
* This ensures that the create and update passes of a change detection always happen
|
|
16285
|
-
* in the same frame.
|
|
16286
|
-
* - When the browser is resource-starved, `rAF` can execute _before_ a `setTimeout` because
|
|
16287
|
-
* rendering is a very high priority process. This means that `setTimeout` cannot guarantee
|
|
16288
|
-
* same-frame create and update pass, when `setTimeout` is used to schedule the update phase.
|
|
16289
|
-
* - While `rAF` gives us the desirable same-frame updates, it has two limitations that
|
|
16290
|
-
* prevent it from being used alone. First, it does not run in background tabs, which would
|
|
16291
|
-
* prevent Angular from initializing an application when opened in a new tab (for example).
|
|
16292
|
-
* Second, repeated calls to requestAnimationFrame will execute at the refresh rate of the
|
|
16293
|
-
* hardware (~16ms for a 60Hz display). This would cause significant slowdown of tests that
|
|
16294
|
-
* are written with several updates and asserts in the form of "update; await stable; assert;".
|
|
16295
|
-
* - Both `setTimeout` and `rAF` are able to "coalesce" several events from a single user
|
|
16296
|
-
* interaction into a single change detection. Importantly, this reduces view tree traversals when
|
|
16297
|
-
* compared to an alternative timing mechanism like `queueMicrotask`, where change detection would
|
|
16298
|
-
* then be interleaves between each event.
|
|
16299
|
-
*
|
|
16300
|
-
* By running change detection after the first of `setTimeout` and `rAF` to execute, we get the
|
|
16301
|
-
* best of both worlds.
|
|
16302
|
-
*
|
|
16303
|
-
* @returns a function to cancel the scheduled callback
|
|
16304
|
-
*/
|
|
16305
|
-
function scheduleCallbackWithRafRace(callback) {
|
|
16306
|
-
let timeoutId;
|
|
16307
|
-
let animationFrameId;
|
|
16308
|
-
function cleanup() {
|
|
16309
|
-
callback = noop;
|
|
16310
|
-
try {
|
|
16311
|
-
if (animationFrameId !== undefined && typeof cancelAnimationFrame === 'function') {
|
|
16312
|
-
cancelAnimationFrame(animationFrameId);
|
|
16313
|
-
}
|
|
16314
|
-
if (timeoutId !== undefined) {
|
|
16315
|
-
clearTimeout(timeoutId);
|
|
16316
|
-
}
|
|
16317
|
-
}
|
|
16318
|
-
catch {
|
|
16319
|
-
// Clearing/canceling can fail in tests due to the timing of functions being patched and unpatched
|
|
16320
|
-
// Just ignore the errors - we protect ourselves from this issue by also making the callback a no-op.
|
|
16321
|
-
}
|
|
16322
|
-
}
|
|
16323
|
-
timeoutId = setTimeout(() => {
|
|
16324
|
-
callback();
|
|
16325
|
-
cleanup();
|
|
16326
|
-
});
|
|
16327
|
-
if (typeof requestAnimationFrame === 'function') {
|
|
16328
|
-
animationFrameId = requestAnimationFrame(() => {
|
|
16329
|
-
callback();
|
|
16330
|
-
cleanup();
|
|
16331
|
-
});
|
|
16332
|
-
}
|
|
16333
|
-
return () => cleanup();
|
|
16334
|
-
}
|
|
16335
|
-
function scheduleCallbackWithMicrotask(callback) {
|
|
16336
|
-
queueMicrotask(() => callback());
|
|
16337
|
-
return () => {
|
|
16338
|
-
callback = noop;
|
|
16339
|
-
};
|
|
16340
|
-
}
|
|
16341
|
-
|
|
16342
|
-
class AsyncStackTaggingZoneSpec {
|
|
16343
|
-
createTask;
|
|
16344
|
-
constructor(namePrefix, consoleAsyncStackTaggingImpl = console) {
|
|
16345
|
-
this.name = 'asyncStackTagging for ' + namePrefix;
|
|
16346
|
-
this.createTask = consoleAsyncStackTaggingImpl?.createTask ?? (() => null);
|
|
16347
|
-
}
|
|
16348
|
-
// ZoneSpec implementation below.
|
|
16349
|
-
name;
|
|
16350
|
-
onScheduleTask(delegate, _current, target, task) {
|
|
16351
|
-
task.consoleTask = this.createTask(`Zone - ${task.source || task.type}`);
|
|
16352
|
-
return delegate.scheduleTask(target, task);
|
|
16353
|
-
}
|
|
16354
|
-
onInvokeTask(delegate, _currentZone, targetZone, task, applyThis, applyArgs) {
|
|
16355
|
-
let ret;
|
|
16356
|
-
if (task.consoleTask) {
|
|
16357
|
-
ret = task.consoleTask.run(() => delegate.invokeTask(targetZone, task, applyThis, applyArgs));
|
|
16358
|
-
}
|
|
16359
|
-
else {
|
|
16360
|
-
ret = delegate.invokeTask(targetZone, task, applyThis, applyArgs);
|
|
16361
|
-
}
|
|
16362
|
-
return ret;
|
|
16363
|
-
}
|
|
16364
|
-
}
|
|
16365
|
-
|
|
16366
|
-
const isAngularZoneProperty = 'isAngularZone';
|
|
16367
|
-
const angularZoneInstanceIdProperty = isAngularZoneProperty + '_ID';
|
|
16368
|
-
let ngZoneInstanceId = 0;
|
|
16369
|
-
/**
|
|
16370
|
-
* An injectable service for executing work inside or outside of the Angular zone.
|
|
16371
|
-
*
|
|
16372
|
-
* The most common use of this service is to optimize performance when starting a work consisting of
|
|
16373
|
-
* one or more asynchronous tasks that don't require UI updates or error handling to be handled by
|
|
16374
|
-
* Angular. Such tasks can be kicked off via {@link #runOutsideAngular} and if needed, these tasks
|
|
16375
|
-
* can reenter the Angular zone via {@link #run}.
|
|
16376
|
-
*
|
|
16377
|
-
* <!-- TODO: add/fix links to:
|
|
16378
|
-
* - docs explaining zones and the use of zones in Angular and change-detection
|
|
16379
|
-
* - link to runOutsideAngular/run (throughout this file!)
|
|
16380
|
-
* -->
|
|
16381
|
-
*
|
|
16382
|
-
* @usageNotes
|
|
16383
|
-
* ### Example
|
|
16384
|
-
*
|
|
16385
|
-
* ```ts
|
|
16386
|
-
* import {Component, NgZone} from '@angular/core';
|
|
16387
|
-
*
|
|
16388
|
-
* @Component({
|
|
16389
|
-
* selector: 'ng-zone-demo',
|
|
16390
|
-
* template: `
|
|
16391
|
-
* <h2>Demo: NgZone</h2>
|
|
16392
|
-
*
|
|
16393
|
-
* <p>Progress: {{progress}}%</p>
|
|
16394
|
-
* @if(progress >= 100) {
|
|
16395
|
-
* <p>Done processing {{label}} of Angular zone!</p>
|
|
16396
|
-
* }
|
|
16397
|
-
*
|
|
16398
|
-
* <button (click)="processWithinAngularZone()">Process within Angular zone</button>
|
|
16399
|
-
* <button (click)="processOutsideOfAngularZone()">Process outside of Angular zone</button>
|
|
16400
|
-
* `,
|
|
16401
|
-
* })
|
|
16402
|
-
* export class NgZoneDemo {
|
|
16403
|
-
* progress: number = 0;
|
|
16404
|
-
* label: string;
|
|
16405
|
-
*
|
|
16406
|
-
* constructor(private _ngZone: NgZone) {}
|
|
16407
|
-
*
|
|
16408
|
-
* // Loop inside the Angular zone
|
|
16409
|
-
* // so the UI DOES refresh after each setTimeout cycle
|
|
16410
|
-
* processWithinAngularZone() {
|
|
16411
|
-
* this.label = 'inside';
|
|
16412
|
-
* this.progress = 0;
|
|
16413
|
-
* this._increaseProgress(() => console.log('Inside Done!'));
|
|
16414
|
-
* }
|
|
16415
|
-
*
|
|
16416
|
-
* // Loop outside of the Angular zone
|
|
16417
|
-
* // so the UI DOES NOT refresh after each setTimeout cycle
|
|
16418
|
-
* processOutsideOfAngularZone() {
|
|
16419
|
-
* this.label = 'outside';
|
|
16420
|
-
* this.progress = 0;
|
|
16421
|
-
* this._ngZone.runOutsideAngular(() => {
|
|
16422
|
-
* this._increaseProgress(() => {
|
|
16423
|
-
* // reenter the Angular zone and display done
|
|
16424
|
-
* this._ngZone.run(() => { console.log('Outside Done!'); });
|
|
16425
|
-
* });
|
|
16426
|
-
* });
|
|
16427
|
-
* }
|
|
16428
|
-
*
|
|
16429
|
-
* _increaseProgress(doneCallback: () => void) {
|
|
16430
|
-
* this.progress += 1;
|
|
16431
|
-
* console.log(`Current progress: ${this.progress}%`);
|
|
16432
|
-
*
|
|
16433
|
-
* if (this.progress < 100) {
|
|
16434
|
-
* window.setTimeout(() => this._increaseProgress(doneCallback), 10);
|
|
16435
|
-
* } else {
|
|
16436
|
-
* doneCallback();
|
|
16437
|
-
* }
|
|
16438
|
-
* }
|
|
16439
|
-
* }
|
|
16440
|
-
* ```
|
|
16441
|
-
*
|
|
16442
|
-
* @publicApi
|
|
16443
|
-
*/
|
|
16444
|
-
class NgZone {
|
|
16445
|
-
hasPendingMacrotasks = false;
|
|
16446
|
-
hasPendingMicrotasks = false;
|
|
16447
|
-
/**
|
|
16448
|
-
* Whether there are no outstanding microtasks or macrotasks.
|
|
16449
|
-
*/
|
|
16450
|
-
isStable = true;
|
|
16451
|
-
/**
|
|
16452
|
-
* Notifies when code enters Angular Zone. This gets fired first on VM Turn.
|
|
16453
|
-
*/
|
|
16454
|
-
onUnstable = new EventEmitter(false);
|
|
16455
|
-
/**
|
|
16456
|
-
* Notifies when there is no more microtasks enqueued in the current VM Turn.
|
|
16457
|
-
* This is a hint for Angular to do change detection, which may enqueue more microtasks.
|
|
16458
|
-
* For this reason this event can fire multiple times per VM Turn.
|
|
16459
|
-
*/
|
|
16460
|
-
onMicrotaskEmpty = new EventEmitter(false);
|
|
16461
|
-
/**
|
|
16462
|
-
* Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which
|
|
16463
|
-
* implies we are about to relinquish VM turn.
|
|
16464
|
-
* This event gets called just once.
|
|
16465
|
-
*/
|
|
16466
|
-
onStable = new EventEmitter(false);
|
|
16467
|
-
/**
|
|
16468
|
-
* Notifies that an error has been delivered.
|
|
16469
|
-
*/
|
|
16470
|
-
onError = new EventEmitter(false);
|
|
16471
|
-
constructor(options) {
|
|
16472
|
-
const { enableLongStackTrace = false, shouldCoalesceEventChangeDetection = false, shouldCoalesceRunChangeDetection = false, scheduleInRootZone = SCHEDULE_IN_ROOT_ZONE_DEFAULT, } = options;
|
|
16473
|
-
if (typeof Zone == 'undefined') {
|
|
16474
|
-
throw new RuntimeError(908 /* RuntimeErrorCode.MISSING_ZONEJS */, ngDevMode && `In this configuration Angular requires Zone.js`);
|
|
16475
|
-
}
|
|
16476
|
-
Zone.assertZonePatched();
|
|
16477
|
-
const self = this;
|
|
16478
|
-
self._nesting = 0;
|
|
16479
|
-
self._outer = self._inner = Zone.current;
|
|
16480
|
-
// AsyncStackTaggingZoneSpec provides `linked stack traces` to show
|
|
16481
|
-
// where the async operation is scheduled. For more details, refer
|
|
16482
|
-
// to this article, https://developer.chrome.com/blog/devtools-better-angular-debugging/
|
|
16483
|
-
// And we only import this AsyncStackTaggingZoneSpec in development mode,
|
|
16484
|
-
// in the production mode, the AsyncStackTaggingZoneSpec will be tree shaken away.
|
|
16485
|
-
if (ngDevMode) {
|
|
16486
|
-
self._inner = self._inner.fork(new AsyncStackTaggingZoneSpec('Angular'));
|
|
16487
|
-
}
|
|
16488
|
-
if (Zone['TaskTrackingZoneSpec']) {
|
|
16489
|
-
self._inner = self._inner.fork(new Zone['TaskTrackingZoneSpec']());
|
|
16490
|
-
}
|
|
16491
|
-
if (enableLongStackTrace && Zone['longStackTraceZoneSpec']) {
|
|
16492
|
-
self._inner = self._inner.fork(Zone['longStackTraceZoneSpec']);
|
|
16493
|
-
}
|
|
16494
|
-
// if shouldCoalesceRunChangeDetection is true, all tasks including event tasks will be
|
|
16495
|
-
// coalesced, so shouldCoalesceEventChangeDetection option is not necessary and can be skipped.
|
|
16496
|
-
self.shouldCoalesceEventChangeDetection =
|
|
16497
|
-
!shouldCoalesceRunChangeDetection && shouldCoalesceEventChangeDetection;
|
|
16498
|
-
self.shouldCoalesceRunChangeDetection = shouldCoalesceRunChangeDetection;
|
|
16499
|
-
self.callbackScheduled = false;
|
|
16500
|
-
self.scheduleInRootZone = scheduleInRootZone;
|
|
16501
|
-
forkInnerZoneWithAngularBehavior(self);
|
|
16502
|
-
}
|
|
16503
|
-
/**
|
|
16504
|
-
This method checks whether the method call happens within an Angular Zone instance.
|
|
16505
|
-
*/
|
|
16506
|
-
static isInAngularZone() {
|
|
16507
|
-
// Zone needs to be checked, because this method might be called even when NoopNgZone is used.
|
|
16508
|
-
return typeof Zone !== 'undefined' && Zone.current.get(isAngularZoneProperty) === true;
|
|
16509
|
-
}
|
|
16510
|
-
/**
|
|
16511
|
-
Assures that the method is called within the Angular Zone, otherwise throws an error.
|
|
16512
|
-
*/
|
|
16513
|
-
static assertInAngularZone() {
|
|
16514
|
-
if (!NgZone.isInAngularZone()) {
|
|
16515
|
-
throw new RuntimeError(909 /* RuntimeErrorCode.UNEXPECTED_ZONE_STATE */, ngDevMode && 'Expected to be in Angular Zone, but it is not!');
|
|
16516
|
-
}
|
|
16517
|
-
}
|
|
16518
|
-
/**
|
|
16519
|
-
Assures that the method is called outside of the Angular Zone, otherwise throws an error.
|
|
16520
|
-
*/
|
|
16521
|
-
static assertNotInAngularZone() {
|
|
16522
|
-
if (NgZone.isInAngularZone()) {
|
|
16523
|
-
throw new RuntimeError(909 /* RuntimeErrorCode.UNEXPECTED_ZONE_STATE */, ngDevMode && 'Expected to not be in Angular Zone, but it is!');
|
|
16524
|
-
}
|
|
16525
|
-
}
|
|
16526
|
-
/**
|
|
16527
|
-
* Executes the `fn` function synchronously within the Angular zone and returns value returned by
|
|
16528
|
-
* the function.
|
|
16529
|
-
*
|
|
16530
|
-
* Running functions via `run` allows you to reenter Angular zone from a task that was executed
|
|
16531
|
-
* outside of the Angular zone (typically started via {@link #runOutsideAngular}).
|
|
16532
|
-
*
|
|
16533
|
-
* Any future tasks or microtasks scheduled from within this function will continue executing from
|
|
16534
|
-
* within the Angular zone.
|
|
16535
|
-
*
|
|
16536
|
-
* If a synchronous error happens it will be rethrown and not reported via `onError`.
|
|
16537
|
-
*/
|
|
16538
|
-
run(fn, applyThis, applyArgs) {
|
|
16539
|
-
return this._inner.run(fn, applyThis, applyArgs);
|
|
16540
|
-
}
|
|
16541
|
-
/**
|
|
16542
|
-
* Executes the `fn` function synchronously within the Angular zone as a task and returns value
|
|
16543
|
-
* returned by the function.
|
|
16544
|
-
*
|
|
16545
|
-
* Running functions via `runTask` allows you to reenter Angular zone from a task that was executed
|
|
16546
|
-
* outside of the Angular zone (typically started via {@link #runOutsideAngular}).
|
|
16547
|
-
*
|
|
16548
|
-
* Any future tasks or microtasks scheduled from within this function will continue executing from
|
|
16549
|
-
* within the Angular zone.
|
|
16550
|
-
*
|
|
16551
|
-
* If a synchronous error happens it will be rethrown and not reported via `onError`.
|
|
16552
|
-
*/
|
|
16553
|
-
runTask(fn, applyThis, applyArgs, name) {
|
|
16554
|
-
const zone = this._inner;
|
|
16555
|
-
const task = zone.scheduleEventTask('NgZoneEvent: ' + name, fn, EMPTY_PAYLOAD, noop, noop);
|
|
16556
|
-
try {
|
|
16557
|
-
return zone.runTask(task, applyThis, applyArgs);
|
|
16558
|
-
}
|
|
16559
|
-
finally {
|
|
16560
|
-
zone.cancelTask(task);
|
|
16561
|
-
}
|
|
16562
|
-
}
|
|
16563
|
-
/**
|
|
16564
|
-
* Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not
|
|
16565
|
-
* rethrown.
|
|
16566
|
-
*/
|
|
16567
|
-
runGuarded(fn, applyThis, applyArgs) {
|
|
16568
|
-
return this._inner.runGuarded(fn, applyThis, applyArgs);
|
|
16569
|
-
}
|
|
16570
|
-
/**
|
|
16571
|
-
* Executes the `fn` function synchronously in Angular's parent zone and returns value returned by
|
|
16572
|
-
* the function.
|
|
16573
|
-
*
|
|
16574
|
-
* Running functions via {@link #runOutsideAngular} allows you to escape Angular's zone and do
|
|
16575
|
-
* work that
|
|
16576
|
-
* doesn't trigger Angular change-detection or is subject to Angular's error handling.
|
|
16577
|
-
*
|
|
16578
|
-
* Any future tasks or microtasks scheduled from within this function will continue executing from
|
|
16579
|
-
* outside of the Angular zone.
|
|
16580
|
-
*
|
|
16581
|
-
* Use {@link #run} to reenter the Angular zone and do work that updates the application model.
|
|
16582
|
-
*/
|
|
16583
|
-
runOutsideAngular(fn) {
|
|
16584
|
-
return this._outer.run(fn);
|
|
16585
|
-
}
|
|
16586
|
-
}
|
|
16587
|
-
const EMPTY_PAYLOAD = {};
|
|
16588
|
-
function checkStable(zone) {
|
|
16589
|
-
// TODO: @JiaLiPassion, should check zone.isCheckStableRunning to prevent
|
|
16590
|
-
// re-entry. The case is:
|
|
16591
|
-
//
|
|
16592
|
-
// @Component({...})
|
|
16593
|
-
// export class AppComponent {
|
|
16594
|
-
// constructor(private ngZone: NgZone) {
|
|
16595
|
-
// this.ngZone.onStable.subscribe(() => {
|
|
16596
|
-
// this.ngZone.run(() => console.log('stable'););
|
|
16597
|
-
// });
|
|
16598
|
-
// }
|
|
16599
|
-
//
|
|
16600
|
-
// The onStable subscriber run another function inside ngZone
|
|
16601
|
-
// which causes `checkStable()` re-entry.
|
|
16602
|
-
// But this fix causes some issues in g3, so this fix will be
|
|
16603
|
-
// launched in another PR.
|
|
16604
|
-
if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {
|
|
16605
|
-
try {
|
|
16606
|
-
zone._nesting++;
|
|
16607
|
-
zone.onMicrotaskEmpty.emit(null);
|
|
16608
|
-
}
|
|
16609
|
-
finally {
|
|
16610
|
-
zone._nesting--;
|
|
16611
|
-
if (!zone.hasPendingMicrotasks) {
|
|
16612
|
-
try {
|
|
16613
|
-
zone.runOutsideAngular(() => zone.onStable.emit(null));
|
|
16614
|
-
}
|
|
16615
|
-
finally {
|
|
16616
|
-
zone.isStable = true;
|
|
16617
|
-
}
|
|
16618
|
-
}
|
|
16619
|
-
}
|
|
16620
|
-
}
|
|
16621
|
-
}
|
|
16622
|
-
function delayChangeDetectionForEvents(zone) {
|
|
16623
|
-
/**
|
|
16624
|
-
* We also need to check _nesting here
|
|
16625
|
-
* Consider the following case with shouldCoalesceRunChangeDetection = true
|
|
16626
|
-
*
|
|
16627
|
-
* ngZone.run(() => {});
|
|
16628
|
-
* ngZone.run(() => {});
|
|
16629
|
-
*
|
|
16630
|
-
* We want the two `ngZone.run()` only trigger one change detection
|
|
16631
|
-
* when shouldCoalesceRunChangeDetection is true.
|
|
16632
|
-
* And because in this case, change detection run in async way(requestAnimationFrame),
|
|
16633
|
-
* so we also need to check the _nesting here to prevent multiple
|
|
16634
|
-
* change detections.
|
|
16635
|
-
*/
|
|
16636
|
-
if (zone.isCheckStableRunning || zone.callbackScheduled) {
|
|
16637
|
-
return;
|
|
16638
|
-
}
|
|
16639
|
-
zone.callbackScheduled = true;
|
|
16640
|
-
function scheduleCheckStable() {
|
|
16641
|
-
scheduleCallbackWithRafRace(() => {
|
|
16642
|
-
zone.callbackScheduled = false;
|
|
16643
|
-
updateMicroTaskStatus(zone);
|
|
16644
|
-
zone.isCheckStableRunning = true;
|
|
16645
|
-
checkStable(zone);
|
|
16646
|
-
zone.isCheckStableRunning = false;
|
|
16647
|
-
});
|
|
16648
|
-
}
|
|
16649
|
-
if (zone.scheduleInRootZone) {
|
|
16650
|
-
Zone.root.run(() => {
|
|
16651
|
-
scheduleCheckStable();
|
|
16652
|
-
});
|
|
16653
|
-
}
|
|
16654
|
-
else {
|
|
16655
|
-
zone._outer.run(() => {
|
|
16656
|
-
scheduleCheckStable();
|
|
16657
|
-
});
|
|
16658
|
-
}
|
|
16659
|
-
updateMicroTaskStatus(zone);
|
|
16660
|
-
}
|
|
16661
|
-
function forkInnerZoneWithAngularBehavior(zone) {
|
|
16662
|
-
const delayChangeDetectionForEventsDelegate = () => {
|
|
16663
|
-
delayChangeDetectionForEvents(zone);
|
|
16664
|
-
};
|
|
16665
|
-
const instanceId = ngZoneInstanceId++;
|
|
16666
|
-
zone._inner = zone._inner.fork({
|
|
16667
|
-
name: 'angular',
|
|
16668
|
-
properties: {
|
|
16669
|
-
[isAngularZoneProperty]: true,
|
|
16670
|
-
[angularZoneInstanceIdProperty]: instanceId,
|
|
16671
|
-
[angularZoneInstanceIdProperty + instanceId]: true,
|
|
16672
|
-
},
|
|
16673
|
-
onInvokeTask: (delegate, current, target, task, applyThis, applyArgs) => {
|
|
16674
|
-
// Prevent triggering change detection when the flag is detected.
|
|
16675
|
-
if (shouldBeIgnoredByZone(applyArgs)) {
|
|
16676
|
-
return delegate.invokeTask(target, task, applyThis, applyArgs);
|
|
16677
|
-
}
|
|
16678
|
-
try {
|
|
16679
|
-
onEnter(zone);
|
|
16680
|
-
return delegate.invokeTask(target, task, applyThis, applyArgs);
|
|
16681
|
-
}
|
|
16682
|
-
finally {
|
|
16683
|
-
if ((zone.shouldCoalesceEventChangeDetection && task.type === 'eventTask') ||
|
|
16684
|
-
zone.shouldCoalesceRunChangeDetection) {
|
|
16685
|
-
delayChangeDetectionForEventsDelegate();
|
|
16686
|
-
}
|
|
16687
|
-
onLeave(zone);
|
|
16688
|
-
}
|
|
16689
|
-
},
|
|
16690
|
-
onInvoke: (delegate, current, target, callback, applyThis, applyArgs, source) => {
|
|
16691
|
-
try {
|
|
16692
|
-
onEnter(zone);
|
|
16693
|
-
return delegate.invoke(target, callback, applyThis, applyArgs, source);
|
|
16694
|
-
}
|
|
16695
|
-
finally {
|
|
16696
|
-
if (zone.shouldCoalesceRunChangeDetection &&
|
|
16697
|
-
// Do not delay change detection when the task is the scheduler's tick.
|
|
16698
|
-
// We need to synchronously trigger the stability logic so that the
|
|
16699
|
-
// zone-based scheduler can prevent a duplicate ApplicationRef.tick
|
|
16700
|
-
// by first checking if the scheduler tick is running. This does seem a bit roundabout,
|
|
16701
|
-
// but we _do_ still want to trigger all the correct events when we exit the zone.run
|
|
16702
|
-
// (`onMicrotaskEmpty` and `onStable` _should_ emit; developers can have code which
|
|
16703
|
-
// relies on these events happening after change detection runs).
|
|
16704
|
-
// Note: `zone.callbackScheduled` is already in delayChangeDetectionForEventsDelegate
|
|
16705
|
-
// but is added here as well to prevent reads of applyArgs when not necessary
|
|
16706
|
-
!zone.callbackScheduled &&
|
|
16707
|
-
!isSchedulerTick(applyArgs)) {
|
|
16708
|
-
delayChangeDetectionForEventsDelegate();
|
|
16709
|
-
}
|
|
16710
|
-
onLeave(zone);
|
|
16711
|
-
}
|
|
16712
|
-
},
|
|
16713
|
-
onHasTask: (delegate, current, target, hasTaskState) => {
|
|
16714
|
-
delegate.hasTask(target, hasTaskState);
|
|
16715
|
-
if (current === target) {
|
|
16716
|
-
// We are only interested in hasTask events which originate from our zone
|
|
16717
|
-
// (A child hasTask event is not interesting to us)
|
|
16718
|
-
if (hasTaskState.change == 'microTask') {
|
|
16719
|
-
zone._hasPendingMicrotasks = hasTaskState.microTask;
|
|
16720
|
-
updateMicroTaskStatus(zone);
|
|
16721
|
-
checkStable(zone);
|
|
16722
|
-
}
|
|
16723
|
-
else if (hasTaskState.change == 'macroTask') {
|
|
16724
|
-
zone.hasPendingMacrotasks = hasTaskState.macroTask;
|
|
16725
|
-
}
|
|
16726
|
-
}
|
|
16727
|
-
},
|
|
16728
|
-
onHandleError: (delegate, current, target, error) => {
|
|
16729
|
-
delegate.handleError(target, error);
|
|
16730
|
-
zone.runOutsideAngular(() => zone.onError.emit(error));
|
|
16731
|
-
return false;
|
|
16732
|
-
},
|
|
16733
|
-
});
|
|
16734
|
-
}
|
|
16735
|
-
function updateMicroTaskStatus(zone) {
|
|
16736
|
-
if (zone._hasPendingMicrotasks ||
|
|
16737
|
-
((zone.shouldCoalesceEventChangeDetection || zone.shouldCoalesceRunChangeDetection) &&
|
|
16738
|
-
zone.callbackScheduled === true)) {
|
|
16739
|
-
zone.hasPendingMicrotasks = true;
|
|
16740
|
-
}
|
|
16741
|
-
else {
|
|
16742
|
-
zone.hasPendingMicrotasks = false;
|
|
16743
|
-
}
|
|
16744
|
-
}
|
|
16745
|
-
function onEnter(zone) {
|
|
16746
|
-
zone._nesting++;
|
|
16747
|
-
if (zone.isStable) {
|
|
16748
|
-
zone.isStable = false;
|
|
16749
|
-
zone.onUnstable.emit(null);
|
|
16750
|
-
}
|
|
16751
|
-
}
|
|
16752
|
-
function onLeave(zone) {
|
|
16753
|
-
zone._nesting--;
|
|
16754
|
-
checkStable(zone);
|
|
16755
|
-
}
|
|
16756
|
-
/**
|
|
16757
|
-
* Provides a noop implementation of `NgZone` which does nothing. This zone requires explicit calls
|
|
16758
|
-
* to framework to perform rendering.
|
|
16759
|
-
*/
|
|
16760
|
-
class NoopNgZone {
|
|
16761
|
-
hasPendingMicrotasks = false;
|
|
16762
|
-
hasPendingMacrotasks = false;
|
|
16763
|
-
isStable = true;
|
|
16764
|
-
onUnstable = new EventEmitter();
|
|
16765
|
-
onMicrotaskEmpty = new EventEmitter();
|
|
16766
|
-
onStable = new EventEmitter();
|
|
16767
|
-
onError = new EventEmitter();
|
|
16768
|
-
run(fn, applyThis, applyArgs) {
|
|
16769
|
-
return fn.apply(applyThis, applyArgs);
|
|
16770
|
-
}
|
|
16771
|
-
runGuarded(fn, applyThis, applyArgs) {
|
|
16772
|
-
return fn.apply(applyThis, applyArgs);
|
|
16773
|
-
}
|
|
16774
|
-
runOutsideAngular(fn) {
|
|
16775
|
-
return fn();
|
|
16776
|
-
}
|
|
16777
|
-
runTask(fn, applyThis, applyArgs, name) {
|
|
16778
|
-
return fn.apply(applyThis, applyArgs);
|
|
16779
|
-
}
|
|
16780
|
-
}
|
|
16781
|
-
function shouldBeIgnoredByZone(applyArgs) {
|
|
16782
|
-
return hasApplyArgsData(applyArgs, '__ignore_ng_zone__');
|
|
16783
|
-
}
|
|
16784
|
-
function isSchedulerTick(applyArgs) {
|
|
16785
|
-
return hasApplyArgsData(applyArgs, '__scheduler_tick__');
|
|
16786
|
-
}
|
|
16787
|
-
function hasApplyArgsData(applyArgs, key) {
|
|
16788
|
-
if (!Array.isArray(applyArgs)) {
|
|
16789
|
-
return false;
|
|
16790
|
-
}
|
|
16791
|
-
// We should only ever get 1 arg passed through to invokeTask.
|
|
16792
|
-
// Short circuit here incase that behavior changes.
|
|
16793
|
-
if (applyArgs.length !== 1) {
|
|
16794
|
-
return false;
|
|
16795
|
-
}
|
|
16796
|
-
return applyArgs[0]?.data?.[key] === true;
|
|
16797
|
-
}
|
|
16798
|
-
function getNgZone(ngZoneToUse = 'zone.js', options) {
|
|
16799
|
-
if (ngZoneToUse === 'noop') {
|
|
16800
|
-
return new NoopNgZone();
|
|
16801
|
-
}
|
|
16802
|
-
if (ngZoneToUse === 'zone.js') {
|
|
16803
|
-
return new NgZone(options);
|
|
16804
|
-
}
|
|
16805
|
-
return ngZoneToUse;
|
|
16806
|
-
}
|
|
16807
|
-
|
|
16808
16203
|
class AfterRenderManager {
|
|
16809
16204
|
impl = null;
|
|
16810
16205
|
execute() {
|
|
@@ -19960,20 +19355,6 @@ function publishSignalConfiguration() {
|
|
|
19960
19355
|
function isBoundToModule(cf) {
|
|
19961
19356
|
return cf.isBoundToModule;
|
|
19962
19357
|
}
|
|
19963
|
-
/**
|
|
19964
|
-
* A token for third-party components that can register themselves with NgProbe.
|
|
19965
|
-
*
|
|
19966
|
-
* @deprecated
|
|
19967
|
-
* @publicApi
|
|
19968
|
-
*/
|
|
19969
|
-
class NgProbeToken {
|
|
19970
|
-
name;
|
|
19971
|
-
token;
|
|
19972
|
-
constructor(name, token) {
|
|
19973
|
-
this.name = name;
|
|
19974
|
-
this.token = token;
|
|
19975
|
-
}
|
|
19976
|
-
}
|
|
19977
19358
|
/** Maximum number of times ApplicationRef will refresh all attached views in a single tick. */
|
|
19978
19359
|
const MAXIMUM_REFRESH_RERUNS = 10;
|
|
19979
19360
|
function optionsReducer(dst, objs) {
|
|
@@ -21789,6 +21170,7 @@ class ElementRegistry {
|
|
|
21789
21170
|
const details = this.outElements.get(el) ?? {
|
|
21790
21171
|
classes: null,
|
|
21791
21172
|
animateFn: () => { },
|
|
21173
|
+
isEventBinding: true,
|
|
21792
21174
|
};
|
|
21793
21175
|
details.animateFn = animateWrapperFn(el, value);
|
|
21794
21176
|
this.outElements.set(el, details);
|
|
@@ -21798,6 +21180,7 @@ class ElementRegistry {
|
|
|
21798
21180
|
const details = this.outElements.get(el) ?? {
|
|
21799
21181
|
classes: new Set(),
|
|
21800
21182
|
animateFn: () => { },
|
|
21183
|
+
isEventBinding: false,
|
|
21801
21184
|
};
|
|
21802
21185
|
if (typeof value === 'function') {
|
|
21803
21186
|
this.trackResolver(details, value);
|
|
@@ -21833,8 +21216,11 @@ class ElementRegistry {
|
|
|
21833
21216
|
};
|
|
21834
21217
|
// this timeout is used to ensure elements actually get removed in the case
|
|
21835
21218
|
// that the user forgot to call the remove callback. The timeout is cleared
|
|
21836
|
-
// in the DOM renderer during the remove child process.
|
|
21837
|
-
|
|
21219
|
+
// in the DOM renderer during the remove child process. It only applies
|
|
21220
|
+
// to the event binding use case.
|
|
21221
|
+
if (details.isEventBinding) {
|
|
21222
|
+
timeoutId = setTimeout(remove, maxAnimationTimeout);
|
|
21223
|
+
}
|
|
21838
21224
|
details.animateFn(remove);
|
|
21839
21225
|
}
|
|
21840
21226
|
}
|
|
@@ -22005,11 +21391,39 @@ const longestAnimations = new WeakMap();
|
|
|
22005
21391
|
// used to prevent duplicate nodes from showing up when nodes have been toggled quickly
|
|
22006
21392
|
// from an `@if` or `@for`.
|
|
22007
21393
|
const leavingNodes = new WeakMap();
|
|
22008
|
-
function clearLeavingNodes(tNode) {
|
|
22009
|
-
|
|
21394
|
+
function clearLeavingNodes(tNode, el) {
|
|
21395
|
+
const nodes = leavingNodes.get(tNode);
|
|
21396
|
+
if (nodes && nodes.length > 0) {
|
|
21397
|
+
const ix = nodes.findIndex((node) => node === el);
|
|
21398
|
+
if (ix > -1)
|
|
21399
|
+
nodes.splice(ix, 1);
|
|
21400
|
+
}
|
|
21401
|
+
if (nodes?.length === 0) {
|
|
22010
21402
|
leavingNodes.delete(tNode);
|
|
22011
21403
|
}
|
|
22012
21404
|
}
|
|
21405
|
+
/**
|
|
21406
|
+
* In the case that we have an existing node that's animating away, like when
|
|
21407
|
+
* an `@if` toggles quickly, we need to end the animation for the former node
|
|
21408
|
+
* and remove it right away to prevent duplicate nodes showing up.
|
|
21409
|
+
*/
|
|
21410
|
+
function cancelLeavingNodes(tNode, lView) {
|
|
21411
|
+
const leavingEl = leavingNodes.get(tNode)?.shift();
|
|
21412
|
+
const lContainer = lView[DECLARATION_LCONTAINER];
|
|
21413
|
+
if (lContainer) {
|
|
21414
|
+
// this is the insertion point for the new TNode element.
|
|
21415
|
+
// it will be inserted before the declaring containers anchor.
|
|
21416
|
+
const beforeNode = getBeforeNodeForView(tNode.index, lContainer);
|
|
21417
|
+
// here we need to check the previous sibling of that anchor
|
|
21418
|
+
const previousNode = beforeNode?.previousSibling;
|
|
21419
|
+
// We really only want to cancel animations if the leaving node is the
|
|
21420
|
+
// same as the node before where the new node will be inserted. This is
|
|
21421
|
+
// the control flow scenario where an if was toggled.
|
|
21422
|
+
if (leavingEl && previousNode && leavingEl === previousNode) {
|
|
21423
|
+
leavingEl.dispatchEvent(new CustomEvent('animationend', { detail: { cancel: true } }));
|
|
21424
|
+
}
|
|
21425
|
+
}
|
|
21426
|
+
}
|
|
22013
21427
|
function trackLeavingNodes(tNode, el) {
|
|
22014
21428
|
// We need to track this tNode's element just to be sure we don't add
|
|
22015
21429
|
// a new RNode for this TNode while this one is still animating away.
|
|
@@ -22041,6 +21455,7 @@ function ɵɵanimateEnter(value) {
|
|
|
22041
21455
|
}
|
|
22042
21456
|
const tNode = getCurrentTNode();
|
|
22043
21457
|
const nativeElement = getNativeByTNode(tNode, lView);
|
|
21458
|
+
ngDevMode && assertElementNodes(nativeElement, 'animate.enter');
|
|
22044
21459
|
const renderer = lView[RENDERER];
|
|
22045
21460
|
const ngZone = lView[INJECTOR].get(NgZone);
|
|
22046
21461
|
// Retrieve the actual class list from the value. This will resolve any resolver functions from
|
|
@@ -22052,7 +21467,6 @@ function ɵɵanimateEnter(value) {
|
|
|
22052
21467
|
// This also allows us to setup cancellation of animations in progress if the
|
|
22053
21468
|
// gets removed early.
|
|
22054
21469
|
const handleAnimationStart = (event) => {
|
|
22055
|
-
setupAnimationCancel(event, renderer);
|
|
22056
21470
|
const eventName = event instanceof AnimationEvent ? 'animationend' : 'transitionend';
|
|
22057
21471
|
ngZone.runOutsideAngular(() => {
|
|
22058
21472
|
cleanupFns.push(renderer.listen(nativeElement, eventName, handleInAnimationEnd));
|
|
@@ -22068,14 +21482,7 @@ function ɵɵanimateEnter(value) {
|
|
|
22068
21482
|
cleanupFns.push(renderer.listen(nativeElement, 'animationstart', handleAnimationStart));
|
|
22069
21483
|
cleanupFns.push(renderer.listen(nativeElement, 'transitionstart', handleAnimationStart));
|
|
22070
21484
|
});
|
|
22071
|
-
|
|
22072
|
-
// an `@if` toggles quickly or `@for` adds and removes elements quickly, we
|
|
22073
|
-
// need to end the animation for the former node and remove it right away to
|
|
22074
|
-
// prevent duplicate nodes showing up.
|
|
22075
|
-
leavingNodes
|
|
22076
|
-
.get(tNode)
|
|
22077
|
-
?.pop()
|
|
22078
|
-
?.dispatchEvent(new CustomEvent('animationend', { detail: { cancel: true } }));
|
|
21485
|
+
cancelLeavingNodes(tNode, lView);
|
|
22079
21486
|
trackEnterClasses(nativeElement, activeClasses, cleanupFns);
|
|
22080
21487
|
for (const klass of activeClasses) {
|
|
22081
21488
|
renderer.addClass(nativeElement, klass);
|
|
@@ -22138,14 +21545,8 @@ function ɵɵanimateEnterListener(value) {
|
|
|
22138
21545
|
}
|
|
22139
21546
|
const tNode = getCurrentTNode();
|
|
22140
21547
|
const nativeElement = getNativeByTNode(tNode, lView);
|
|
22141
|
-
|
|
22142
|
-
|
|
22143
|
-
// need to end the animation for the former node and remove it right away to
|
|
22144
|
-
// prevent duplicate nodes showing up.
|
|
22145
|
-
leavingNodes
|
|
22146
|
-
.get(tNode)
|
|
22147
|
-
?.pop()
|
|
22148
|
-
?.dispatchEvent(new CustomEvent('animationend', { detail: { cancel: true } }));
|
|
21548
|
+
ngDevMode && assertElementNodes(nativeElement, 'animate.enter');
|
|
21549
|
+
cancelLeavingNodes(tNode, lView);
|
|
22149
21550
|
value.call(lView[CONTEXT], { target: nativeElement, animationComplete: noOpAnimationComplete });
|
|
22150
21551
|
return ɵɵanimateEnterListener;
|
|
22151
21552
|
}
|
|
@@ -22173,6 +21574,7 @@ function ɵɵanimateLeave(value) {
|
|
|
22173
21574
|
const tView = getTView();
|
|
22174
21575
|
const tNode = getCurrentTNode();
|
|
22175
21576
|
const nativeElement = getNativeByTNode(tNode, lView);
|
|
21577
|
+
ngDevMode && assertElementNodes(nativeElement, 'animate.leave');
|
|
22176
21578
|
// This instruction is called in the update pass.
|
|
22177
21579
|
const renderer = lView[RENDERER];
|
|
22178
21580
|
const elementRegistry = getAnimationElementRemovalRegistry();
|
|
@@ -22217,9 +21619,7 @@ function ɵɵanimateLeaveListener(value) {
|
|
|
22217
21619
|
const tNode = getCurrentTNode();
|
|
22218
21620
|
const tView = getTView();
|
|
22219
21621
|
const nativeElement = getNativeByTNode(tNode, lView);
|
|
22220
|
-
|
|
22221
|
-
return ɵɵanimateLeaveListener;
|
|
22222
|
-
}
|
|
21622
|
+
ngDevMode && assertElementNodes(nativeElement, 'animate.leave');
|
|
22223
21623
|
const elementRegistry = getAnimationElementRemovalRegistry();
|
|
22224
21624
|
ngDevMode &&
|
|
22225
21625
|
assertDefined(elementRegistry.elements, 'Expected `ElementRegistry` to be present in animations subsystem');
|
|
@@ -22235,7 +21635,7 @@ function ɵɵanimateLeaveListener(value) {
|
|
|
22235
21635
|
const event = {
|
|
22236
21636
|
target: nativeElement,
|
|
22237
21637
|
animationComplete: () => {
|
|
22238
|
-
clearLeavingNodes(tNode);
|
|
21638
|
+
clearLeavingNodes(tNode, _el);
|
|
22239
21639
|
removeFn();
|
|
22240
21640
|
},
|
|
22241
21641
|
};
|
|
@@ -22261,15 +21661,12 @@ function getClassList(value, resolvers) {
|
|
|
22261
21661
|
const classList = new Set(value);
|
|
22262
21662
|
if (resolvers && resolvers.length) {
|
|
22263
21663
|
for (const resolverFn of resolvers) {
|
|
22264
|
-
const resolvedValue = resolverFn
|
|
22265
|
-
if (resolvedValue
|
|
21664
|
+
const resolvedValue = getClassListFromValue(resolverFn);
|
|
21665
|
+
if (resolvedValue) {
|
|
22266
21666
|
for (const rv of resolvedValue) {
|
|
22267
21667
|
classList.add(rv);
|
|
22268
21668
|
}
|
|
22269
21669
|
}
|
|
22270
|
-
else {
|
|
22271
|
-
classList.add(resolvedValue);
|
|
22272
|
-
}
|
|
22273
21670
|
}
|
|
22274
21671
|
}
|
|
22275
21672
|
return classList;
|
|
@@ -22278,42 +21675,22 @@ function cancelAnimationsIfRunning(element, renderer) {
|
|
|
22278
21675
|
if (!areAnimationSupported)
|
|
22279
21676
|
return;
|
|
22280
21677
|
const elementData = enterClassMap.get(element);
|
|
22281
|
-
if (
|
|
22282
|
-
|
|
22283
|
-
|
|
22284
|
-
|
|
22285
|
-
|
|
22286
|
-
}
|
|
22287
|
-
}
|
|
22288
|
-
else {
|
|
22289
|
-
if (elementData) {
|
|
22290
|
-
for (const klass of elementData.classList) {
|
|
22291
|
-
renderer.removeClass(element, klass);
|
|
22292
|
-
}
|
|
21678
|
+
if (elementData &&
|
|
21679
|
+
elementData.classList.length > 0 &&
|
|
21680
|
+
elementHasClassList(element, elementData.classList)) {
|
|
21681
|
+
for (const klass of elementData.classList) {
|
|
21682
|
+
renderer.removeClass(element, klass);
|
|
22293
21683
|
}
|
|
22294
21684
|
}
|
|
22295
21685
|
// We need to prevent any enter animation listeners from firing if they exist.
|
|
22296
21686
|
cleanupEnterClassData(element);
|
|
22297
21687
|
}
|
|
22298
|
-
function
|
|
22299
|
-
|
|
22300
|
-
|
|
22301
|
-
|
|
22302
|
-
if (areAnimationSupported) {
|
|
22303
|
-
const elementData = enterClassMap.get(nativeElement);
|
|
22304
|
-
const animations = nativeElement.getAnimations();
|
|
22305
|
-
if (animations.length === 0)
|
|
22306
|
-
return;
|
|
22307
|
-
for (let animation of animations) {
|
|
22308
|
-
animation.addEventListener('cancel', (event) => {
|
|
22309
|
-
if (nativeElement === event.target && elementData?.classList) {
|
|
22310
|
-
for (const klass of elementData.classList) {
|
|
22311
|
-
renderer.removeClass(nativeElement, klass);
|
|
22312
|
-
}
|
|
22313
|
-
}
|
|
22314
|
-
});
|
|
22315
|
-
}
|
|
21688
|
+
function elementHasClassList(element, classList) {
|
|
21689
|
+
for (const className of classList) {
|
|
21690
|
+
if (element.classList.contains(className))
|
|
21691
|
+
return true;
|
|
22316
21692
|
}
|
|
21693
|
+
return false;
|
|
22317
21694
|
}
|
|
22318
21695
|
function isLongestAnimation(event, nativeElement) {
|
|
22319
21696
|
const longestAnimation = longestAnimations.get(nativeElement);
|
|
@@ -22345,6 +21722,11 @@ function assertAnimationTypes(value, instruction) {
|
|
|
22345
21722
|
throw new RuntimeError(650 /* RuntimeErrorCode.ANIMATE_INVALID_VALUE */, `'${instruction}' value must be a string of CSS classes or an animation function, got ${stringify(value)}`);
|
|
22346
21723
|
}
|
|
22347
21724
|
}
|
|
21725
|
+
function assertElementNodes(nativeElement, instruction) {
|
|
21726
|
+
if (nativeElement.nodeType !== Node.ELEMENT_NODE) {
|
|
21727
|
+
throw new RuntimeError(650 /* RuntimeErrorCode.ANIMATE_INVALID_VALUE */, `'${instruction}' can only be used on an element node, got ${stringify(nativeElement.nodeType)}`);
|
|
21728
|
+
}
|
|
21729
|
+
}
|
|
22348
21730
|
/**
|
|
22349
21731
|
* This function actually adds the classes that animate element that's leaving the DOM.
|
|
22350
21732
|
* Once it finishes, it calls the remove function that was provided by the DOM renderer.
|
|
@@ -22364,7 +21746,7 @@ function animateLeaveClassRunner(el, tNode, classList, finalRemoveFn, renderer,
|
|
|
22364
21746
|
// affect any other animations on the page.
|
|
22365
21747
|
event.stopImmediatePropagation();
|
|
22366
21748
|
longestAnimations.delete(el);
|
|
22367
|
-
clearLeavingNodes(tNode);
|
|
21749
|
+
clearLeavingNodes(tNode, el);
|
|
22368
21750
|
finalRemoveFn();
|
|
22369
21751
|
}
|
|
22370
21752
|
};
|
|
@@ -22383,7 +21765,7 @@ function animateLeaveClassRunner(el, tNode, classList, finalRemoveFn, renderer,
|
|
|
22383
21765
|
requestAnimationFrame(() => {
|
|
22384
21766
|
determineLongestAnimation(el, longestAnimations, areAnimationSupported);
|
|
22385
21767
|
if (!longestAnimations.has(el)) {
|
|
22386
|
-
clearLeavingNodes(tNode);
|
|
21768
|
+
clearLeavingNodes(tNode, el);
|
|
22387
21769
|
finalRemoveFn();
|
|
22388
21770
|
}
|
|
22389
21771
|
});
|
|
@@ -30580,7 +29962,7 @@ class NgZoneChangeDetectionScheduler {
|
|
|
30580
29962
|
* with the bootstrapModule API.
|
|
30581
29963
|
*/
|
|
30582
29964
|
const PROVIDED_NG_ZONE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'provideZoneChangeDetection token' : '', { factory: () => false });
|
|
30583
|
-
function internalProvideZoneChangeDetection({ ngZoneFactory,
|
|
29965
|
+
function internalProvideZoneChangeDetection({ ngZoneFactory, scheduleInRootZone, }) {
|
|
30584
29966
|
ngZoneFactory ??= () => new NgZone({ ...getNgZoneOptions(), scheduleInRootZone });
|
|
30585
29967
|
return [
|
|
30586
29968
|
{ provide: NgZone, useFactory: ngZoneFactory },
|
|
@@ -30609,34 +29991,10 @@ function internalProvideZoneChangeDetection({ ngZoneFactory, ignoreChangesOutsid
|
|
|
30609
29991
|
};
|
|
30610
29992
|
},
|
|
30611
29993
|
},
|
|
30612
|
-
// Always disable scheduler whenever explicitly disabled, even if another place called
|
|
30613
|
-
// `provideZoneChangeDetection` without the 'ignore' option.
|
|
30614
|
-
ignoreChangesOutsideZone === true ? { provide: ZONELESS_SCHEDULER_DISABLED, useValue: true } : [],
|
|
30615
29994
|
{
|
|
30616
29995
|
provide: SCHEDULE_IN_ROOT_ZONE,
|
|
30617
29996
|
useValue: scheduleInRootZone ?? SCHEDULE_IN_ROOT_ZONE_DEFAULT,
|
|
30618
29997
|
},
|
|
30619
|
-
{
|
|
30620
|
-
provide: INTERNAL_APPLICATION_ERROR_HANDLER,
|
|
30621
|
-
useFactory: () => {
|
|
30622
|
-
const zone = inject(NgZone);
|
|
30623
|
-
const injector = inject(EnvironmentInjector);
|
|
30624
|
-
let userErrorHandler;
|
|
30625
|
-
return (e) => {
|
|
30626
|
-
zone.runOutsideAngular(() => {
|
|
30627
|
-
if (injector.destroyed && !userErrorHandler) {
|
|
30628
|
-
setTimeout(() => {
|
|
30629
|
-
throw e;
|
|
30630
|
-
});
|
|
30631
|
-
}
|
|
30632
|
-
else {
|
|
30633
|
-
userErrorHandler ??= injector.get(ErrorHandler);
|
|
30634
|
-
userErrorHandler.handleError(e);
|
|
30635
|
-
}
|
|
30636
|
-
});
|
|
30637
|
-
};
|
|
30638
|
-
},
|
|
30639
|
-
},
|
|
30640
29998
|
];
|
|
30641
29999
|
}
|
|
30642
30000
|
/**
|
|
@@ -30660,7 +30018,6 @@ function internalProvideZoneChangeDetection({ ngZoneFactory, ignoreChangesOutsid
|
|
|
30660
30018
|
* @see {@link NgZoneOptions}
|
|
30661
30019
|
*/
|
|
30662
30020
|
function provideZoneChangeDetection(options) {
|
|
30663
|
-
const ignoreChangesOutsideZone = options?.ignoreChangesOutsideZone;
|
|
30664
30021
|
const scheduleInRootZone = options?.scheduleInRootZone;
|
|
30665
30022
|
const zoneProviders = internalProvideZoneChangeDetection({
|
|
30666
30023
|
ngZoneFactory: () => {
|
|
@@ -30671,7 +30028,6 @@ function provideZoneChangeDetection(options) {
|
|
|
30671
30028
|
}
|
|
30672
30029
|
return new NgZone(ngZoneOptions);
|
|
30673
30030
|
},
|
|
30674
|
-
ignoreChangesOutsideZone,
|
|
30675
30031
|
scheduleInRootZone,
|
|
30676
30032
|
});
|
|
30677
30033
|
return makeEnvironmentProviders([
|
|
@@ -31829,5 +31185,5 @@ function getDebugNode(nativeNode) {
|
|
|
31829
31185
|
return null;
|
|
31830
31186
|
}
|
|
31831
31187
|
|
|
31832
|
-
export { AFTER_RENDER_PHASES, ANIMATIONS_DISABLED, ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AcxChangeDetectionStrategy, AcxViewEncapsulation, AfterRenderImpl, AfterRenderManager, AfterRenderSequence, ApplicationInitStatus, ApplicationRef, Attribute, COMPILER_OPTIONS, CONTAINERS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionSchedulerImpl, ChangeDetectionStrategy, Compiler, CompilerFactory, Component, ComponentFactory, ComponentFactory$1, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ComponentRef as ComponentRef$1, Console, DEFAULT_CURRENCY_CODE, DEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DEFER_BLOCK_ID, DEFER_BLOCK_SSR_ID_ATTRIBUTE, DEFER_BLOCK_STATE$1 as DEFER_BLOCK_STATE, DEFER_BLOCK_STATE as DEFER_BLOCK_STATE$1, DEFER_HYDRATE_TRIGGERS, DEFER_PARENT_BLOCK_ID, DEHYDRATED_BLOCK_REGISTRY, DISCONNECTED_NODES, DebugElement, DebugEventListener, DebugNode, DeferBlockBehavior, DeferBlockState, DehydratedBlockRegistry, Directive, ELEMENT_CONTAINERS, EVENT_REPLAY_ENABLED_DEFAULT, ElementRef, ElementRegistry, EnvironmentNgModuleRefAdapter,
|
|
31188
|
+
export { AFTER_RENDER_PHASES, ANIMATIONS_DISABLED, ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AcxChangeDetectionStrategy, AcxViewEncapsulation, AfterRenderImpl, AfterRenderManager, AfterRenderSequence, ApplicationInitStatus, ApplicationRef, Attribute, COMPILER_OPTIONS, CONTAINERS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionSchedulerImpl, ChangeDetectionStrategy, Compiler, CompilerFactory, Component, ComponentFactory, ComponentFactory$1, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ComponentRef as ComponentRef$1, Console, DEFAULT_CURRENCY_CODE, DEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DEFER_BLOCK_ID, DEFER_BLOCK_SSR_ID_ATTRIBUTE, DEFER_BLOCK_STATE$1 as DEFER_BLOCK_STATE, DEFER_BLOCK_STATE as DEFER_BLOCK_STATE$1, DEFER_HYDRATE_TRIGGERS, DEFER_PARENT_BLOCK_ID, DEHYDRATED_BLOCK_REGISTRY, DISCONNECTED_NODES, DebugElement, DebugEventListener, DebugNode, DeferBlockBehavior, DeferBlockState, DehydratedBlockRegistry, Directive, ELEMENT_CONTAINERS, EVENT_REPLAY_ENABLED_DEFAULT, ElementRef, ElementRegistry, EnvironmentNgModuleRefAdapter, Framework, Host, HostBinding, HostListener, HydrationStatus, I18N_DATA, IMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS, IS_ENABLED_BLOCKING_INITIAL_NAVIGATION, IS_EVENT_REPLAY_ENABLED, IS_HYDRATION_DOM_REUSE_ENABLED, IS_I18N_HYDRATION_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED, Inject, Injectable, Input, JSACTION_BLOCK_ELEMENT_MAP, JSACTION_EVENT_CONTRACT, LContext, LOCALE_ID, LocaleDataIndex, MAX_ANIMATION_TIMEOUT, MULTIPLIER, MissingTranslationStrategy, ModuleWithComponentFactories, NGH_ATTR_NAME, NGH_DATA_KEY, NGH_DEFER_BLOCKS_KEY, NODES, NOOP_AFTER_RENDER_REF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE, NO_ERRORS_SCHEMA, NUM_ROOT_NODES, NgModule, NgModuleFactory, NgModuleFactory$1, NgModuleRef, NgModuleRef$1, Optional, Output, PLATFORM_ID, PLATFORM_INITIALIZER, PRESERVE_HOST_CONTENT, PROVIDED_NG_ZONE, Pipe, QueryList, ReflectionCapabilities, Renderer2, RendererFactory2, RendererStyleFlags2, SKIP_HYDRATION_ATTR_NAME, SSR_CONTENT_INTEGRITY_MARKER, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TEMPLATES, TEMPLATE_ID, TESTABILITY, TESTABILITY_GETTER, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TimerScheduler, TracingAction, TracingService, TransferState, Type, UseExhaustiveCheckNoChanges, ViewContainerRef, ViewEncapsulation, ViewRef, _sanitizeHtml, _sanitizeUrl, afterEveryRender, afterNextRender, allowSanitizationBypassAndThrow, angularCoreEnv, appendDeferBlocksToJSActionMap, asNativeElements, assertComponentDef, assertStandaloneComponentType, bypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript, bypassSanitizationTrustStyle, bypassSanitizationTrustUrl, calcPathForNode, checkNoChangesInternal, cleanupDehydratedViews, clearResolutionOfComponentResourcesQueue, collectNativeNodes, collectNativeNodesInLContainer, compileComponent, compileDirective, compileNgModule, compileNgModuleDefs, compilePipe, convertHydrateTriggersToJsAction, countBlocksSkippedByHydration, createEnvironmentInjector, createMultiResultQuerySignalFn, createNgModule, createNgModuleRef, createNgModuleRefWithProviders, createSingleResultOptionalQuerySignalFn, createSingleResultRequiredQuerySignalFn, depsTracker, devModeEqual, enableApplyRootElementTransformImpl, enableClaimDehydratedIcuCaseImpl, enableFindMatchingDehydratedViewImpl, enableLocateOrCreateContainerAnchorImpl, enableLocateOrCreateContainerRefImpl, enableLocateOrCreateElementContainerNodeImpl, enableLocateOrCreateElementNodeImpl, enableLocateOrCreateI18nNodeImpl, enableLocateOrCreateTextNodeImpl, enablePrepareI18nBlockForHydrationImpl, enableProfiling, enableRetrieveDeferBlockDataImpl, enableRetrieveHydrationInfoImpl, enableStashEventListenerImpl, findLocaleData, flushModuleScopingQueueAsMuchAsPossible, gatherDeferBlocksCommentNodes, generateStandaloneInDeclarationsError, getAsyncClassMetadataFn, getCompilerFacade, getDebugNode, getDeferBlocks$1 as getDeferBlocks, getDirectives, getDocument, getHostElement, getLContext, getLDeferBlockDetails, getLNodeForHydration, getLocaleCurrencyCode, getLocalePluralCase, getNgZoneOptions, getOrComputeI18nChildren, getRegisteredNgModuleType, getSanitizationBypassType, getTDeferBlockDetails, getTransferState, inferTagNameFromDefinition, inputBinding, internalProvideZoneChangeDetection, invokeListeners, isBoundToModule, isComponentDefPendingResolution, isComponentResourceResolutionQueueEmpty, isDeferBlock, isDetachedByI18n, isDisconnectedNode, isI18nHydrationEnabled, isI18nHydrationSupportEnabled, isInSkipHydrationBlock, isIncrementalHydrationEnabled, isJsObject, isLetDeclaration, isListLikeIterable, isNgModule, isPromise, isSubscribable, isTNodeShape, isViewDirty, iterateListLike, makePropDecorator, makeStateKey, markForRefresh, noSideEffects, optionsReducer, outputBinding, patchComponentDefWithScope, performanceMarkFeature, processAndInitTriggers, processBlockData, processTextNodeBeforeSerialization, profiler, provideAppInitializer, provideNgReflectAttributes, provideZoneChangeDetection, provideZonelessChangeDetection, publishDefaultGlobalUtils, publishExternalGlobalUtil, publishSignalConfiguration, readHydrationInfo, readPatchedLView, registerLocaleData, registerNgModuleType, remove, removeListeners, renderDeferBlockState, resetCompiledComponents, resetJitOptions, resolveComponentResources, restoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest, setClassMetadata, setClassMetadataAsync, setDocument, setIsI18nHydrationSupportEnabled, setJSActionAttributes, setJitOptions, setLocaleId, setStashFn, setTestabilityGetter, sharedMapFunction, sharedStashFunction, transitiveScopesFor, triggerHydrationFromBlockName, triggerResourceLoading, trySerializeI18nBlock, twoWayBinding, unregisterAllLocaleData, unsupportedProjectionOfDomNodes, unwrapSafeValue, validateMatchingNode, validateNodeExists, verifySsrContentsIntegrity, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, ɵsetClassDebugInfo, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, ɵɵAnimationsFeature, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵanimateEnter, ɵɵanimateEnterListener, ɵɵanimateLeave, ɵɵanimateLeaveListener, ɵɵariaProperty, ɵɵattachSourceLocations, ɵɵattribute, ɵɵclassMap, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵconditionalBranchCreate, ɵɵconditionalCreate, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdeclareLet, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferHydrateNever, ɵɵdeferHydrateOnHover, ɵɵdeferHydrateOnIdle, ɵɵdeferHydrateOnImmediate, ɵɵdeferHydrateOnInteraction, ɵɵdeferHydrateOnTimer, ɵɵdeferHydrateOnViewport, ɵɵdeferHydrateWhen, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdomElement, ɵɵdomElementContainer, ɵɵdomElementContainerEnd, ɵɵdomElementContainerStart, ɵɵdomElementEnd, ɵɵdomElementStart, ɵɵdomListener, ɵɵdomProperty, ɵɵdomTemplate, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵgetReplaceMetadataURL, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinjectAttribute, ɵɵinterpolate, ɵɵinterpolate1, ɵɵinterpolate2, ɵɵinterpolate3, ɵɵinterpolate4, ɵɵinterpolate5, ɵɵinterpolate6, ɵɵinterpolate7, ɵɵinterpolate8, ɵɵinterpolateV, ɵɵinvalidFactory, ɵɵlistener, ɵɵloadQuery, ɵɵnextContext, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleProp, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
|
|
31833
31189
|
//# sourceMappingURL=debug_node.mjs.map
|