@angular/core 18.0.0-rc.0 → 18.0.0-rc.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/esm2022/primitives/event-dispatch/contract_binary.mjs +3 -3
- package/esm2022/primitives/event-dispatch/index.mjs +2 -2
- package/esm2022/primitives/event-dispatch/src/action_resolver.mjs +221 -0
- package/esm2022/primitives/event-dispatch/src/attribute.mjs +63 -65
- package/esm2022/primitives/event-dispatch/src/cache.mjs +10 -10
- package/esm2022/primitives/event-dispatch/src/dispatcher.mjs +52 -176
- package/esm2022/primitives/event-dispatch/src/earlyeventcontract.mjs +15 -9
- package/esm2022/primitives/event-dispatch/src/event_contract_defines.mjs +1 -19
- package/esm2022/primitives/event-dispatch/src/eventcontract.mjs +24 -362
- package/esm2022/primitives/event-dispatch/src/key_code.mjs +11 -13
- package/esm2022/primitives/event-dispatch/src/legacy_dispatcher.mjs +252 -2
- package/esm2022/primitives/event-dispatch/src/property.mjs +30 -27
- package/esm2022/primitives/event-dispatch/src/register_events.mjs +16 -17
- package/esm2022/primitives/event-dispatch/src/restriction.mjs +2 -2
- package/esm2022/src/application/application_ref.mjs +6 -3
- package/esm2022/src/application/create_application.mjs +12 -5
- package/esm2022/src/change_detection/scheduling/exhaustive_check_no_changes.mjs +150 -0
- package/esm2022/src/change_detection/scheduling/ng_zone_scheduling.mjs +6 -4
- package/esm2022/src/change_detection/scheduling/zoneless_scheduling.mjs +3 -1
- package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +9 -6
- package/esm2022/src/core.mjs +2 -1
- package/esm2022/src/core_private_export.mjs +2 -1
- package/esm2022/src/core_reactivity_export_internal.mjs +1 -3
- package/esm2022/src/core_render3_private_export.mjs +1 -3
- package/esm2022/src/defer/instructions.mjs +20 -12
- package/esm2022/src/defer/interfaces.mjs +1 -3
- package/esm2022/src/errors.mjs +1 -1
- package/esm2022/src/hydration/event_replay.mjs +67 -79
- package/esm2022/src/hydration/utils.mjs +1 -2
- package/esm2022/src/metadata/directives.mjs +1 -1
- package/esm2022/src/platform/platform_ref.mjs +10 -4
- package/esm2022/src/render3/after_render_hooks.mjs +4 -2
- package/esm2022/src/render3/component_ref.mjs +1 -1
- package/esm2022/src/render3/index.mjs +1 -3
- package/esm2022/src/render3/instructions/change_detection.mjs +13 -10
- package/esm2022/src/render3/instructions/listener.mjs +12 -1
- package/esm2022/src/render3/interfaces/public_definitions.mjs +1 -1
- package/esm2022/src/render3/state.mjs +14 -4
- package/esm2022/src/render3/view_ref.mjs +3 -2
- package/esm2022/src/util/callback_scheduler.mjs +12 -26
- package/esm2022/src/version.mjs +1 -1
- package/esm2022/src/zone/ng_zone.mjs +9 -23
- package/esm2022/testing/src/component_fixture.mjs +2 -4
- package/esm2022/testing/src/defer.mjs +1 -2
- package/esm2022/testing/src/logger.mjs +3 -3
- package/esm2022/testing/src/test_bed.mjs +1 -3
- package/esm2022/testing/src/test_bed_compiler.mjs +3 -6
- package/event-dispatch-contract.min.js +1 -1
- package/fesm2022/core.mjs +800 -660
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +484 -807
- package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
- package/fesm2022/primitives/signals.mjs +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/testing.mjs +4 -10
- package/fesm2022/testing.mjs.map +1 -1
- package/index.d.ts +36 -4
- package/package.json +1 -1
- package/primitives/event-dispatch/index.d.ts +111 -162
- package/primitives/signals/index.d.ts +1 -1
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/migrations/http-providers/bundle.js +110 -71
- package/schematics/migrations/http-providers/bundle.js.map +3 -3
- package/schematics/migrations/invalid-two-way-bindings/bundle.js +197 -167
- package/schematics/migrations/invalid-two-way-bindings/bundle.js.map +2 -2
- package/schematics/ng-generate/control-flow-migration/bundle.js +205 -175
- package/schematics/ng-generate/control-flow-migration/bundle.js.map +2 -2
- package/schematics/ng-generate/standalone-migration/bundle.js +481 -451
- package/schematics/ng-generate/standalone-migration/bundle.js.map +2 -2
- package/testing/index.d.ts +1 -4
- package/esm2022/primitives/event-dispatch/src/base_dispatcher.mjs +0 -96
- package/esm2022/primitives/event-dispatch/src/custom_events.mjs +0 -63
- package/esm2022/primitives/event-dispatch/src/replay.mjs +0 -389
package/fesm2022/core.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v18.0.0-rc.
|
|
2
|
+
* @license Angular v18.0.0-rc.2
|
|
3
3
|
* (c) 2010-2024 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { SIGNAL_NODE as SIGNAL_NODE$1, signalSetFn as signalSetFn$1, producerAccessed as producerAccessed$1, SIGNAL as SIGNAL$1, getActiveConsumer as getActiveConsumer$1, setActiveConsumer as setActiveConsumer$1, consumerDestroy as consumerDestroy$1, REACTIVE_NODE as REACTIVE_NODE$1, consumerBeforeComputation as consumerBeforeComputation$1, consumerAfterComputation as consumerAfterComputation$1, consumerPollProducersForChange as consumerPollProducersForChange$1, createSignal as createSignal$1, signalUpdateFn as signalUpdateFn$1, createComputed as createComputed$1, setThrowInvalidWriteToSignalError as setThrowInvalidWriteToSignalError$1, createWatch as createWatch$1 } from '@angular/core/primitives/signals';
|
|
8
8
|
import { Subject, Subscription, BehaviorSubject } from 'rxjs';
|
|
9
9
|
import { map, first } from 'rxjs/operators';
|
|
10
|
-
import { Dispatcher, registerDispatcher } from '@angular/core/primitives/event-dispatch';
|
|
10
|
+
import { EventContract, EventContractContainer, Dispatcher, registerDispatcher } from '@angular/core/primitives/event-dispatch';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Base URL for the error details page.
|
|
@@ -4397,6 +4397,12 @@ const instructionState = {
|
|
|
4397
4397
|
bindingsEnabled: true,
|
|
4398
4398
|
skipHydrationRootTNode: null,
|
|
4399
4399
|
};
|
|
4400
|
+
var CheckNoChangesMode;
|
|
4401
|
+
(function (CheckNoChangesMode) {
|
|
4402
|
+
CheckNoChangesMode[CheckNoChangesMode["Off"] = 0] = "Off";
|
|
4403
|
+
CheckNoChangesMode[CheckNoChangesMode["Exhaustive"] = 1] = "Exhaustive";
|
|
4404
|
+
CheckNoChangesMode[CheckNoChangesMode["OnlyDirtyViews"] = 2] = "OnlyDirtyViews";
|
|
4405
|
+
})(CheckNoChangesMode || (CheckNoChangesMode = {}));
|
|
4400
4406
|
/**
|
|
4401
4407
|
* In this mode, any changes in bindings will throw an ExpressionChangedAfterChecked error.
|
|
4402
4408
|
*
|
|
@@ -4405,7 +4411,7 @@ const instructionState = {
|
|
|
4405
4411
|
* The `checkNoChanges` function is invoked only in ngDevMode=true and verifies that no unintended
|
|
4406
4412
|
* changes exist in the change detector or its children.
|
|
4407
4413
|
*/
|
|
4408
|
-
let
|
|
4414
|
+
let _checkNoChangesMode = 0; /* CheckNoChangesMode.Off */
|
|
4409
4415
|
/**
|
|
4410
4416
|
* Flag used to indicate that we are in the middle running change detection on a view
|
|
4411
4417
|
*
|
|
@@ -4576,11 +4582,15 @@ function getContextLView() {
|
|
|
4576
4582
|
}
|
|
4577
4583
|
function isInCheckNoChangesMode() {
|
|
4578
4584
|
!ngDevMode && throwError('Must never be called in production mode');
|
|
4579
|
-
return
|
|
4585
|
+
return _checkNoChangesMode !== CheckNoChangesMode.Off;
|
|
4586
|
+
}
|
|
4587
|
+
function isExhaustiveCheckNoChanges() {
|
|
4588
|
+
!ngDevMode && throwError('Must never be called in production mode');
|
|
4589
|
+
return _checkNoChangesMode === CheckNoChangesMode.Exhaustive;
|
|
4580
4590
|
}
|
|
4581
4591
|
function setIsInCheckNoChangesMode(mode) {
|
|
4582
4592
|
!ngDevMode && throwError('Must never be called in production mode');
|
|
4583
|
-
|
|
4593
|
+
_checkNoChangesMode = mode;
|
|
4584
4594
|
}
|
|
4585
4595
|
function isRefreshingViews() {
|
|
4586
4596
|
return _isRefreshingViews;
|
|
@@ -8518,7 +8528,6 @@ var HydrationStatus;
|
|
|
8518
8528
|
HydrationStatus["Skipped"] = "skipped";
|
|
8519
8529
|
HydrationStatus["Mismatched"] = "mismatched";
|
|
8520
8530
|
})(HydrationStatus || (HydrationStatus = {}));
|
|
8521
|
-
// clang-format on
|
|
8522
8531
|
const HYDRATION_INFO_KEY = '__ngDebugHydrationInfo__';
|
|
8523
8532
|
function patchHydrationInfo(node, info) {
|
|
8524
8533
|
node[HYDRATION_INFO_KEY] = info;
|
|
@@ -12941,13 +12950,13 @@ function detectChangesInViewWhileDirty(lView, mode) {
|
|
|
12941
12950
|
setIsRefreshingViews(lastIsRefreshingViewsValue);
|
|
12942
12951
|
}
|
|
12943
12952
|
}
|
|
12944
|
-
function checkNoChangesInternal(lView, notifyErrorHandler = true) {
|
|
12945
|
-
setIsInCheckNoChangesMode(
|
|
12953
|
+
function checkNoChangesInternal(lView, mode, notifyErrorHandler = true) {
|
|
12954
|
+
setIsInCheckNoChangesMode(mode);
|
|
12946
12955
|
try {
|
|
12947
12956
|
detectChangesInternal(lView, notifyErrorHandler);
|
|
12948
12957
|
}
|
|
12949
12958
|
finally {
|
|
12950
|
-
setIsInCheckNoChangesMode(
|
|
12959
|
+
setIsInCheckNoChangesMode(CheckNoChangesMode.Off);
|
|
12951
12960
|
}
|
|
12952
12961
|
}
|
|
12953
12962
|
/**
|
|
@@ -13085,11 +13094,13 @@ function refreshView(tView, lView, templateFn, context) {
|
|
|
13085
13094
|
}
|
|
13086
13095
|
}
|
|
13087
13096
|
catch (e) {
|
|
13088
|
-
|
|
13089
|
-
|
|
13090
|
-
|
|
13091
|
-
|
|
13092
|
-
|
|
13097
|
+
if (!isInCheckNoChangesPass) {
|
|
13098
|
+
// If refreshing a view causes an error, we need to remark the ancestors as needing traversal
|
|
13099
|
+
// because the error might have caused a situation where views below the current location are
|
|
13100
|
+
// dirty but will be unreachable because the "has dirty children" flag in the ancestors has been
|
|
13101
|
+
// cleared during change detection and we failed to run to completion.
|
|
13102
|
+
markAncestorsForTraversal(lView);
|
|
13103
|
+
}
|
|
13093
13104
|
throw e;
|
|
13094
13105
|
}
|
|
13095
13106
|
finally {
|
|
@@ -13198,6 +13209,7 @@ function detectChangesInView(lView, mode) {
|
|
|
13198
13209
|
shouldRefreshView ||= !!(flags & 1024 /* LViewFlags.RefreshView */);
|
|
13199
13210
|
// Refresh views when they have a dirty reactive consumer, regardless of mode.
|
|
13200
13211
|
shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange$1(consumer));
|
|
13212
|
+
shouldRefreshView ||= !!(ngDevMode && isExhaustiveCheckNoChanges());
|
|
13201
13213
|
// Mark the Flags and `ReactiveNode` as not dirty before refreshing the component, so that they
|
|
13202
13214
|
// can be re-dirtied during the refresh process.
|
|
13203
13215
|
if (consumer) {
|
|
@@ -13519,7 +13531,7 @@ class ViewRef$1 {
|
|
|
13519
13531
|
*/
|
|
13520
13532
|
checkNoChanges() {
|
|
13521
13533
|
if (ngDevMode) {
|
|
13522
|
-
checkNoChangesInternal(this._lView, this.notifyErrorHandler);
|
|
13534
|
+
checkNoChangesInternal(this._lView, CheckNoChangesMode.OnlyDirtyViews, this.notifyErrorHandler);
|
|
13523
13535
|
}
|
|
13524
13536
|
}
|
|
13525
13537
|
attachToViewContainerRef() {
|
|
@@ -15154,6 +15166,8 @@ class ChangeDetectionScheduler {
|
|
|
15154
15166
|
}
|
|
15155
15167
|
/** Token used to indicate if zoneless was enabled via provideZonelessChangeDetection(). */
|
|
15156
15168
|
const ZONELESS_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Zoneless enabled' : '', { providedIn: 'root', factory: () => false });
|
|
15169
|
+
/** Token used to indicate `provideExperimentalZonelessChangeDetection` was used. */
|
|
15170
|
+
const PROVIDED_ZONELESS = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Zoneless provided' : '', { providedIn: 'root', factory: () => false });
|
|
15157
15171
|
const ZONELESS_SCHEDULER_DISABLED = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'scheduler disabled' : '');
|
|
15158
15172
|
|
|
15159
15173
|
/**
|
|
@@ -15324,6 +15338,514 @@ function performanceMarkFeature(feature) {
|
|
|
15324
15338
|
performance?.mark?.('mark_feature_usage', { detail: { feature } });
|
|
15325
15339
|
}
|
|
15326
15340
|
|
|
15341
|
+
/**
|
|
15342
|
+
* Gets a scheduling function that runs the callback after the first of setTimeout and
|
|
15343
|
+
* requestAnimationFrame resolves.
|
|
15344
|
+
*
|
|
15345
|
+
* - `requestAnimationFrame` ensures that change detection runs ahead of a browser repaint.
|
|
15346
|
+
* This ensures that the create and update passes of a change detection always happen
|
|
15347
|
+
* in the same frame.
|
|
15348
|
+
* - When the browser is resource-starved, `rAF` can execute _before_ a `setTimeout` because
|
|
15349
|
+
* rendering is a very high priority process. This means that `setTimeout` cannot guarantee
|
|
15350
|
+
* same-frame create and update pass, when `setTimeout` is used to schedule the update phase.
|
|
15351
|
+
* - While `rAF` gives us the desirable same-frame updates, it has two limitations that
|
|
15352
|
+
* prevent it from being used alone. First, it does not run in background tabs, which would
|
|
15353
|
+
* prevent Angular from initializing an application when opened in a new tab (for example).
|
|
15354
|
+
* Second, repeated calls to requestAnimationFrame will execute at the refresh rate of the
|
|
15355
|
+
* hardware (~16ms for a 60Hz display). This would cause significant slowdown of tests that
|
|
15356
|
+
* are written with several updates and asserts in the form of "update; await stable; assert;".
|
|
15357
|
+
* - Both `setTimeout` and `rAF` are able to "coalesce" several events from a single user
|
|
15358
|
+
* interaction into a single change detection. Importantly, this reduces view tree traversals when
|
|
15359
|
+
* compared to an alternative timing mechanism like `queueMicrotask`, where change detection would
|
|
15360
|
+
* then be interleaves between each event.
|
|
15361
|
+
*
|
|
15362
|
+
* By running change detection after the first of `setTimeout` and `rAF` to execute, we get the
|
|
15363
|
+
* best of both worlds.
|
|
15364
|
+
*
|
|
15365
|
+
* @returns a function to cancel the scheduled callback
|
|
15366
|
+
*/
|
|
15367
|
+
function scheduleCallbackWithRafRace(callback) {
|
|
15368
|
+
let executeCallback = true;
|
|
15369
|
+
setTimeout(() => {
|
|
15370
|
+
if (!executeCallback) {
|
|
15371
|
+
return;
|
|
15372
|
+
}
|
|
15373
|
+
executeCallback = false;
|
|
15374
|
+
callback();
|
|
15375
|
+
});
|
|
15376
|
+
if (typeof _global['requestAnimationFrame'] === 'function') {
|
|
15377
|
+
_global['requestAnimationFrame'](() => {
|
|
15378
|
+
if (!executeCallback) {
|
|
15379
|
+
return;
|
|
15380
|
+
}
|
|
15381
|
+
executeCallback = false;
|
|
15382
|
+
callback();
|
|
15383
|
+
});
|
|
15384
|
+
}
|
|
15385
|
+
return () => {
|
|
15386
|
+
executeCallback = false;
|
|
15387
|
+
};
|
|
15388
|
+
}
|
|
15389
|
+
function scheduleCallbackWithMicrotask(callback) {
|
|
15390
|
+
let executeCallback = true;
|
|
15391
|
+
queueMicrotask(() => {
|
|
15392
|
+
if (executeCallback) {
|
|
15393
|
+
callback();
|
|
15394
|
+
}
|
|
15395
|
+
});
|
|
15396
|
+
return () => {
|
|
15397
|
+
executeCallback = false;
|
|
15398
|
+
};
|
|
15399
|
+
}
|
|
15400
|
+
|
|
15401
|
+
function noop(...args) {
|
|
15402
|
+
// Do nothing.
|
|
15403
|
+
}
|
|
15404
|
+
|
|
15405
|
+
class AsyncStackTaggingZoneSpec {
|
|
15406
|
+
constructor(namePrefix, consoleAsyncStackTaggingImpl = console) {
|
|
15407
|
+
this.name = 'asyncStackTagging for ' + namePrefix;
|
|
15408
|
+
this.createTask = consoleAsyncStackTaggingImpl?.createTask ?? (() => null);
|
|
15409
|
+
}
|
|
15410
|
+
onScheduleTask(delegate, _current, target, task) {
|
|
15411
|
+
task.consoleTask = this.createTask(`Zone - ${task.source || task.type}`);
|
|
15412
|
+
return delegate.scheduleTask(target, task);
|
|
15413
|
+
}
|
|
15414
|
+
onInvokeTask(delegate, _currentZone, targetZone, task, applyThis, applyArgs) {
|
|
15415
|
+
let ret;
|
|
15416
|
+
if (task.consoleTask) {
|
|
15417
|
+
ret = task.consoleTask.run(() => delegate.invokeTask(targetZone, task, applyThis, applyArgs));
|
|
15418
|
+
}
|
|
15419
|
+
else {
|
|
15420
|
+
ret = delegate.invokeTask(targetZone, task, applyThis, applyArgs);
|
|
15421
|
+
}
|
|
15422
|
+
return ret;
|
|
15423
|
+
}
|
|
15424
|
+
}
|
|
15425
|
+
|
|
15426
|
+
/**
|
|
15427
|
+
* An injectable service for executing work inside or outside of the Angular zone.
|
|
15428
|
+
*
|
|
15429
|
+
* The most common use of this service is to optimize performance when starting a work consisting of
|
|
15430
|
+
* one or more asynchronous tasks that don't require UI updates or error handling to be handled by
|
|
15431
|
+
* Angular. Such tasks can be kicked off via {@link #runOutsideAngular} and if needed, these tasks
|
|
15432
|
+
* can reenter the Angular zone via {@link #run}.
|
|
15433
|
+
*
|
|
15434
|
+
* <!-- TODO: add/fix links to:
|
|
15435
|
+
* - docs explaining zones and the use of zones in Angular and change-detection
|
|
15436
|
+
* - link to runOutsideAngular/run (throughout this file!)
|
|
15437
|
+
* -->
|
|
15438
|
+
*
|
|
15439
|
+
* @usageNotes
|
|
15440
|
+
* ### Example
|
|
15441
|
+
*
|
|
15442
|
+
* ```
|
|
15443
|
+
* import {Component, NgZone} from '@angular/core';
|
|
15444
|
+
* import {NgIf} from '@angular/common';
|
|
15445
|
+
*
|
|
15446
|
+
* @Component({
|
|
15447
|
+
* selector: 'ng-zone-demo',
|
|
15448
|
+
* template: `
|
|
15449
|
+
* <h2>Demo: NgZone</h2>
|
|
15450
|
+
*
|
|
15451
|
+
* <p>Progress: {{progress}}%</p>
|
|
15452
|
+
* <p *ngIf="progress >= 100">Done processing {{label}} of Angular zone!</p>
|
|
15453
|
+
*
|
|
15454
|
+
* <button (click)="processWithinAngularZone()">Process within Angular zone</button>
|
|
15455
|
+
* <button (click)="processOutsideOfAngularZone()">Process outside of Angular zone</button>
|
|
15456
|
+
* `,
|
|
15457
|
+
* })
|
|
15458
|
+
* export class NgZoneDemo {
|
|
15459
|
+
* progress: number = 0;
|
|
15460
|
+
* label: string;
|
|
15461
|
+
*
|
|
15462
|
+
* constructor(private _ngZone: NgZone) {}
|
|
15463
|
+
*
|
|
15464
|
+
* // Loop inside the Angular zone
|
|
15465
|
+
* // so the UI DOES refresh after each setTimeout cycle
|
|
15466
|
+
* processWithinAngularZone() {
|
|
15467
|
+
* this.label = 'inside';
|
|
15468
|
+
* this.progress = 0;
|
|
15469
|
+
* this._increaseProgress(() => console.log('Inside Done!'));
|
|
15470
|
+
* }
|
|
15471
|
+
*
|
|
15472
|
+
* // Loop outside of the Angular zone
|
|
15473
|
+
* // so the UI DOES NOT refresh after each setTimeout cycle
|
|
15474
|
+
* processOutsideOfAngularZone() {
|
|
15475
|
+
* this.label = 'outside';
|
|
15476
|
+
* this.progress = 0;
|
|
15477
|
+
* this._ngZone.runOutsideAngular(() => {
|
|
15478
|
+
* this._increaseProgress(() => {
|
|
15479
|
+
* // reenter the Angular zone and display done
|
|
15480
|
+
* this._ngZone.run(() => { console.log('Outside Done!'); });
|
|
15481
|
+
* });
|
|
15482
|
+
* });
|
|
15483
|
+
* }
|
|
15484
|
+
*
|
|
15485
|
+
* _increaseProgress(doneCallback: () => void) {
|
|
15486
|
+
* this.progress += 1;
|
|
15487
|
+
* console.log(`Current progress: ${this.progress}%`);
|
|
15488
|
+
*
|
|
15489
|
+
* if (this.progress < 100) {
|
|
15490
|
+
* window.setTimeout(() => this._increaseProgress(doneCallback), 10);
|
|
15491
|
+
* } else {
|
|
15492
|
+
* doneCallback();
|
|
15493
|
+
* }
|
|
15494
|
+
* }
|
|
15495
|
+
* }
|
|
15496
|
+
* ```
|
|
15497
|
+
*
|
|
15498
|
+
* @publicApi
|
|
15499
|
+
*/
|
|
15500
|
+
class NgZone {
|
|
15501
|
+
constructor({ enableLongStackTrace = false, shouldCoalesceEventChangeDetection = false, shouldCoalesceRunChangeDetection = false, }) {
|
|
15502
|
+
this.hasPendingMacrotasks = false;
|
|
15503
|
+
this.hasPendingMicrotasks = false;
|
|
15504
|
+
/**
|
|
15505
|
+
* Whether there are no outstanding microtasks or macrotasks.
|
|
15506
|
+
*/
|
|
15507
|
+
this.isStable = true;
|
|
15508
|
+
/**
|
|
15509
|
+
* Notifies when code enters Angular Zone. This gets fired first on VM Turn.
|
|
15510
|
+
*/
|
|
15511
|
+
this.onUnstable = new EventEmitter(false);
|
|
15512
|
+
/**
|
|
15513
|
+
* Notifies when there is no more microtasks enqueued in the current VM Turn.
|
|
15514
|
+
* This is a hint for Angular to do change detection, which may enqueue more microtasks.
|
|
15515
|
+
* For this reason this event can fire multiple times per VM Turn.
|
|
15516
|
+
*/
|
|
15517
|
+
this.onMicrotaskEmpty = new EventEmitter(false);
|
|
15518
|
+
/**
|
|
15519
|
+
* Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which
|
|
15520
|
+
* implies we are about to relinquish VM turn.
|
|
15521
|
+
* This event gets called just once.
|
|
15522
|
+
*/
|
|
15523
|
+
this.onStable = new EventEmitter(false);
|
|
15524
|
+
/**
|
|
15525
|
+
* Notifies that an error has been delivered.
|
|
15526
|
+
*/
|
|
15527
|
+
this.onError = new EventEmitter(false);
|
|
15528
|
+
if (typeof Zone == 'undefined') {
|
|
15529
|
+
throw new RuntimeError(908 /* RuntimeErrorCode.MISSING_ZONEJS */, ngDevMode && `In this configuration Angular requires Zone.js`);
|
|
15530
|
+
}
|
|
15531
|
+
Zone.assertZonePatched();
|
|
15532
|
+
const self = this;
|
|
15533
|
+
self._nesting = 0;
|
|
15534
|
+
self._outer = self._inner = Zone.current;
|
|
15535
|
+
// AsyncStackTaggingZoneSpec provides `linked stack traces` to show
|
|
15536
|
+
// where the async operation is scheduled. For more details, refer
|
|
15537
|
+
// to this article, https://developer.chrome.com/blog/devtools-better-angular-debugging/
|
|
15538
|
+
// And we only import this AsyncStackTaggingZoneSpec in development mode,
|
|
15539
|
+
// in the production mode, the AsyncStackTaggingZoneSpec will be tree shaken away.
|
|
15540
|
+
if (ngDevMode) {
|
|
15541
|
+
self._inner = self._inner.fork(new AsyncStackTaggingZoneSpec('Angular'));
|
|
15542
|
+
}
|
|
15543
|
+
if (Zone['TaskTrackingZoneSpec']) {
|
|
15544
|
+
self._inner = self._inner.fork(new Zone['TaskTrackingZoneSpec']());
|
|
15545
|
+
}
|
|
15546
|
+
if (enableLongStackTrace && Zone['longStackTraceZoneSpec']) {
|
|
15547
|
+
self._inner = self._inner.fork(Zone['longStackTraceZoneSpec']);
|
|
15548
|
+
}
|
|
15549
|
+
// if shouldCoalesceRunChangeDetection is true, all tasks including event tasks will be
|
|
15550
|
+
// coalesced, so shouldCoalesceEventChangeDetection option is not necessary and can be skipped.
|
|
15551
|
+
self.shouldCoalesceEventChangeDetection =
|
|
15552
|
+
!shouldCoalesceRunChangeDetection && shouldCoalesceEventChangeDetection;
|
|
15553
|
+
self.shouldCoalesceRunChangeDetection = shouldCoalesceRunChangeDetection;
|
|
15554
|
+
self.callbackScheduled = false;
|
|
15555
|
+
forkInnerZoneWithAngularBehavior(self);
|
|
15556
|
+
}
|
|
15557
|
+
/**
|
|
15558
|
+
This method checks whether the method call happens within an Angular Zone instance.
|
|
15559
|
+
*/
|
|
15560
|
+
static isInAngularZone() {
|
|
15561
|
+
// Zone needs to be checked, because this method might be called even when NoopNgZone is used.
|
|
15562
|
+
return typeof Zone !== 'undefined' && Zone.current.get('isAngularZone') === true;
|
|
15563
|
+
}
|
|
15564
|
+
/**
|
|
15565
|
+
Assures that the method is called within the Angular Zone, otherwise throws an error.
|
|
15566
|
+
*/
|
|
15567
|
+
static assertInAngularZone() {
|
|
15568
|
+
if (!NgZone.isInAngularZone()) {
|
|
15569
|
+
throw new RuntimeError(909 /* RuntimeErrorCode.UNEXPECTED_ZONE_STATE */, ngDevMode && 'Expected to be in Angular Zone, but it is not!');
|
|
15570
|
+
}
|
|
15571
|
+
}
|
|
15572
|
+
/**
|
|
15573
|
+
Assures that the method is called outside of the Angular Zone, otherwise throws an error.
|
|
15574
|
+
*/
|
|
15575
|
+
static assertNotInAngularZone() {
|
|
15576
|
+
if (NgZone.isInAngularZone()) {
|
|
15577
|
+
throw new RuntimeError(909 /* RuntimeErrorCode.UNEXPECTED_ZONE_STATE */, ngDevMode && 'Expected to not be in Angular Zone, but it is!');
|
|
15578
|
+
}
|
|
15579
|
+
}
|
|
15580
|
+
/**
|
|
15581
|
+
* Executes the `fn` function synchronously within the Angular zone and returns value returned by
|
|
15582
|
+
* the function.
|
|
15583
|
+
*
|
|
15584
|
+
* Running functions via `run` allows you to reenter Angular zone from a task that was executed
|
|
15585
|
+
* outside of the Angular zone (typically started via {@link #runOutsideAngular}).
|
|
15586
|
+
*
|
|
15587
|
+
* Any future tasks or microtasks scheduled from within this function will continue executing from
|
|
15588
|
+
* within the Angular zone.
|
|
15589
|
+
*
|
|
15590
|
+
* If a synchronous error happens it will be rethrown and not reported via `onError`.
|
|
15591
|
+
*/
|
|
15592
|
+
run(fn, applyThis, applyArgs) {
|
|
15593
|
+
return this._inner.run(fn, applyThis, applyArgs);
|
|
15594
|
+
}
|
|
15595
|
+
/**
|
|
15596
|
+
* Executes the `fn` function synchronously within the Angular zone as a task and returns value
|
|
15597
|
+
* returned by the function.
|
|
15598
|
+
*
|
|
15599
|
+
* Running functions via `run` allows you to reenter Angular zone from a task that was executed
|
|
15600
|
+
* outside of the Angular zone (typically started via {@link #runOutsideAngular}).
|
|
15601
|
+
*
|
|
15602
|
+
* Any future tasks or microtasks scheduled from within this function will continue executing from
|
|
15603
|
+
* within the Angular zone.
|
|
15604
|
+
*
|
|
15605
|
+
* If a synchronous error happens it will be rethrown and not reported via `onError`.
|
|
15606
|
+
*/
|
|
15607
|
+
runTask(fn, applyThis, applyArgs, name) {
|
|
15608
|
+
const zone = this._inner;
|
|
15609
|
+
const task = zone.scheduleEventTask('NgZoneEvent: ' + name, fn, EMPTY_PAYLOAD, noop, noop);
|
|
15610
|
+
try {
|
|
15611
|
+
return zone.runTask(task, applyThis, applyArgs);
|
|
15612
|
+
}
|
|
15613
|
+
finally {
|
|
15614
|
+
zone.cancelTask(task);
|
|
15615
|
+
}
|
|
15616
|
+
}
|
|
15617
|
+
/**
|
|
15618
|
+
* Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not
|
|
15619
|
+
* rethrown.
|
|
15620
|
+
*/
|
|
15621
|
+
runGuarded(fn, applyThis, applyArgs) {
|
|
15622
|
+
return this._inner.runGuarded(fn, applyThis, applyArgs);
|
|
15623
|
+
}
|
|
15624
|
+
/**
|
|
15625
|
+
* Executes the `fn` function synchronously in Angular's parent zone and returns value returned by
|
|
15626
|
+
* the function.
|
|
15627
|
+
*
|
|
15628
|
+
* Running functions via {@link #runOutsideAngular} allows you to escape Angular's zone and do
|
|
15629
|
+
* work that
|
|
15630
|
+
* doesn't trigger Angular change-detection or is subject to Angular's error handling.
|
|
15631
|
+
*
|
|
15632
|
+
* Any future tasks or microtasks scheduled from within this function will continue executing from
|
|
15633
|
+
* outside of the Angular zone.
|
|
15634
|
+
*
|
|
15635
|
+
* Use {@link #run} to reenter the Angular zone and do work that updates the application model.
|
|
15636
|
+
*/
|
|
15637
|
+
runOutsideAngular(fn) {
|
|
15638
|
+
return this._outer.run(fn);
|
|
15639
|
+
}
|
|
15640
|
+
}
|
|
15641
|
+
const EMPTY_PAYLOAD = {};
|
|
15642
|
+
function checkStable(zone) {
|
|
15643
|
+
// TODO: @JiaLiPassion, should check zone.isCheckStableRunning to prevent
|
|
15644
|
+
// re-entry. The case is:
|
|
15645
|
+
//
|
|
15646
|
+
// @Component({...})
|
|
15647
|
+
// export class AppComponent {
|
|
15648
|
+
// constructor(private ngZone: NgZone) {
|
|
15649
|
+
// this.ngZone.onStable.subscribe(() => {
|
|
15650
|
+
// this.ngZone.run(() => console.log('stable'););
|
|
15651
|
+
// });
|
|
15652
|
+
// }
|
|
15653
|
+
//
|
|
15654
|
+
// The onStable subscriber run another function inside ngZone
|
|
15655
|
+
// which causes `checkStable()` re-entry.
|
|
15656
|
+
// But this fix causes some issues in g3, so this fix will be
|
|
15657
|
+
// launched in another PR.
|
|
15658
|
+
if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {
|
|
15659
|
+
try {
|
|
15660
|
+
zone._nesting++;
|
|
15661
|
+
zone.onMicrotaskEmpty.emit(null);
|
|
15662
|
+
}
|
|
15663
|
+
finally {
|
|
15664
|
+
zone._nesting--;
|
|
15665
|
+
if (!zone.hasPendingMicrotasks) {
|
|
15666
|
+
try {
|
|
15667
|
+
zone.runOutsideAngular(() => zone.onStable.emit(null));
|
|
15668
|
+
}
|
|
15669
|
+
finally {
|
|
15670
|
+
zone.isStable = true;
|
|
15671
|
+
}
|
|
15672
|
+
}
|
|
15673
|
+
}
|
|
15674
|
+
}
|
|
15675
|
+
}
|
|
15676
|
+
function delayChangeDetectionForEvents(zone) {
|
|
15677
|
+
/**
|
|
15678
|
+
* We also need to check _nesting here
|
|
15679
|
+
* Consider the following case with shouldCoalesceRunChangeDetection = true
|
|
15680
|
+
*
|
|
15681
|
+
* ngZone.run(() => {});
|
|
15682
|
+
* ngZone.run(() => {});
|
|
15683
|
+
*
|
|
15684
|
+
* We want the two `ngZone.run()` only trigger one change detection
|
|
15685
|
+
* when shouldCoalesceRunChangeDetection is true.
|
|
15686
|
+
* And because in this case, change detection run in async way(requestAnimationFrame),
|
|
15687
|
+
* so we also need to check the _nesting here to prevent multiple
|
|
15688
|
+
* change detections.
|
|
15689
|
+
*/
|
|
15690
|
+
if (zone.isCheckStableRunning || zone.callbackScheduled) {
|
|
15691
|
+
return;
|
|
15692
|
+
}
|
|
15693
|
+
zone.callbackScheduled = true;
|
|
15694
|
+
Zone.root.run(() => {
|
|
15695
|
+
scheduleCallbackWithRafRace(() => {
|
|
15696
|
+
zone.callbackScheduled = false;
|
|
15697
|
+
updateMicroTaskStatus(zone);
|
|
15698
|
+
zone.isCheckStableRunning = true;
|
|
15699
|
+
checkStable(zone);
|
|
15700
|
+
zone.isCheckStableRunning = false;
|
|
15701
|
+
});
|
|
15702
|
+
});
|
|
15703
|
+
updateMicroTaskStatus(zone);
|
|
15704
|
+
}
|
|
15705
|
+
function forkInnerZoneWithAngularBehavior(zone) {
|
|
15706
|
+
const delayChangeDetectionForEventsDelegate = () => {
|
|
15707
|
+
delayChangeDetectionForEvents(zone);
|
|
15708
|
+
};
|
|
15709
|
+
zone._inner = zone._inner.fork({
|
|
15710
|
+
name: 'angular',
|
|
15711
|
+
properties: { 'isAngularZone': true },
|
|
15712
|
+
onInvokeTask: (delegate, current, target, task, applyThis, applyArgs) => {
|
|
15713
|
+
// Prevent triggering change detection when the flag is detected.
|
|
15714
|
+
if (shouldBeIgnoredByZone(applyArgs)) {
|
|
15715
|
+
return delegate.invokeTask(target, task, applyThis, applyArgs);
|
|
15716
|
+
}
|
|
15717
|
+
try {
|
|
15718
|
+
onEnter(zone);
|
|
15719
|
+
return delegate.invokeTask(target, task, applyThis, applyArgs);
|
|
15720
|
+
}
|
|
15721
|
+
finally {
|
|
15722
|
+
if ((zone.shouldCoalesceEventChangeDetection && task.type === 'eventTask') ||
|
|
15723
|
+
zone.shouldCoalesceRunChangeDetection) {
|
|
15724
|
+
delayChangeDetectionForEventsDelegate();
|
|
15725
|
+
}
|
|
15726
|
+
onLeave(zone);
|
|
15727
|
+
}
|
|
15728
|
+
},
|
|
15729
|
+
onInvoke: (delegate, current, target, callback, applyThis, applyArgs, source) => {
|
|
15730
|
+
try {
|
|
15731
|
+
onEnter(zone);
|
|
15732
|
+
return delegate.invoke(target, callback, applyThis, applyArgs, source);
|
|
15733
|
+
}
|
|
15734
|
+
finally {
|
|
15735
|
+
if (zone.shouldCoalesceRunChangeDetection &&
|
|
15736
|
+
// Do not delay change detection when the task is the scheduler's tick.
|
|
15737
|
+
// We need to synchronously trigger the stability logic so that the
|
|
15738
|
+
// zone-based scheduler can prevent a duplicate ApplicationRef.tick
|
|
15739
|
+
// by first checking if the scheduler tick is running. This does seem a bit roundabout,
|
|
15740
|
+
// but we _do_ still want to trigger all the correct events when we exit the zone.run
|
|
15741
|
+
// (`onMicrotaskEmpty` and `onStable` _should_ emit; developers can have code which
|
|
15742
|
+
// relies on these events happening after change detection runs).
|
|
15743
|
+
// Note: `zone.callbackScheduled` is already in delayChangeDetectionForEventsDelegate
|
|
15744
|
+
// but is added here as well to prevent reads of applyArgs when not necessary
|
|
15745
|
+
!zone.callbackScheduled &&
|
|
15746
|
+
!isSchedulerTick(applyArgs)) {
|
|
15747
|
+
delayChangeDetectionForEventsDelegate();
|
|
15748
|
+
}
|
|
15749
|
+
onLeave(zone);
|
|
15750
|
+
}
|
|
15751
|
+
},
|
|
15752
|
+
onHasTask: (delegate, current, target, hasTaskState) => {
|
|
15753
|
+
delegate.hasTask(target, hasTaskState);
|
|
15754
|
+
if (current === target) {
|
|
15755
|
+
// We are only interested in hasTask events which originate from our zone
|
|
15756
|
+
// (A child hasTask event is not interesting to us)
|
|
15757
|
+
if (hasTaskState.change == 'microTask') {
|
|
15758
|
+
zone._hasPendingMicrotasks = hasTaskState.microTask;
|
|
15759
|
+
updateMicroTaskStatus(zone);
|
|
15760
|
+
checkStable(zone);
|
|
15761
|
+
}
|
|
15762
|
+
else if (hasTaskState.change == 'macroTask') {
|
|
15763
|
+
zone.hasPendingMacrotasks = hasTaskState.macroTask;
|
|
15764
|
+
}
|
|
15765
|
+
}
|
|
15766
|
+
},
|
|
15767
|
+
onHandleError: (delegate, current, target, error) => {
|
|
15768
|
+
delegate.handleError(target, error);
|
|
15769
|
+
zone.runOutsideAngular(() => zone.onError.emit(error));
|
|
15770
|
+
return false;
|
|
15771
|
+
},
|
|
15772
|
+
});
|
|
15773
|
+
}
|
|
15774
|
+
function updateMicroTaskStatus(zone) {
|
|
15775
|
+
if (zone._hasPendingMicrotasks ||
|
|
15776
|
+
((zone.shouldCoalesceEventChangeDetection || zone.shouldCoalesceRunChangeDetection) &&
|
|
15777
|
+
zone.callbackScheduled === true)) {
|
|
15778
|
+
zone.hasPendingMicrotasks = true;
|
|
15779
|
+
}
|
|
15780
|
+
else {
|
|
15781
|
+
zone.hasPendingMicrotasks = false;
|
|
15782
|
+
}
|
|
15783
|
+
}
|
|
15784
|
+
function onEnter(zone) {
|
|
15785
|
+
zone._nesting++;
|
|
15786
|
+
if (zone.isStable) {
|
|
15787
|
+
zone.isStable = false;
|
|
15788
|
+
zone.onUnstable.emit(null);
|
|
15789
|
+
}
|
|
15790
|
+
}
|
|
15791
|
+
function onLeave(zone) {
|
|
15792
|
+
zone._nesting--;
|
|
15793
|
+
checkStable(zone);
|
|
15794
|
+
}
|
|
15795
|
+
/**
|
|
15796
|
+
* Provides a noop implementation of `NgZone` which does nothing. This zone requires explicit calls
|
|
15797
|
+
* to framework to perform rendering.
|
|
15798
|
+
*/
|
|
15799
|
+
class NoopNgZone {
|
|
15800
|
+
constructor() {
|
|
15801
|
+
this.hasPendingMicrotasks = false;
|
|
15802
|
+
this.hasPendingMacrotasks = false;
|
|
15803
|
+
this.isStable = true;
|
|
15804
|
+
this.onUnstable = new EventEmitter();
|
|
15805
|
+
this.onMicrotaskEmpty = new EventEmitter();
|
|
15806
|
+
this.onStable = new EventEmitter();
|
|
15807
|
+
this.onError = new EventEmitter();
|
|
15808
|
+
}
|
|
15809
|
+
run(fn, applyThis, applyArgs) {
|
|
15810
|
+
return fn.apply(applyThis, applyArgs);
|
|
15811
|
+
}
|
|
15812
|
+
runGuarded(fn, applyThis, applyArgs) {
|
|
15813
|
+
return fn.apply(applyThis, applyArgs);
|
|
15814
|
+
}
|
|
15815
|
+
runOutsideAngular(fn) {
|
|
15816
|
+
return fn();
|
|
15817
|
+
}
|
|
15818
|
+
runTask(fn, applyThis, applyArgs, name) {
|
|
15819
|
+
return fn.apply(applyThis, applyArgs);
|
|
15820
|
+
}
|
|
15821
|
+
}
|
|
15822
|
+
function shouldBeIgnoredByZone(applyArgs) {
|
|
15823
|
+
return hasApplyArgsData(applyArgs, '__ignore_ng_zone__');
|
|
15824
|
+
}
|
|
15825
|
+
function isSchedulerTick(applyArgs) {
|
|
15826
|
+
return hasApplyArgsData(applyArgs, '__scheduler_tick__');
|
|
15827
|
+
}
|
|
15828
|
+
function hasApplyArgsData(applyArgs, key) {
|
|
15829
|
+
if (!Array.isArray(applyArgs)) {
|
|
15830
|
+
return false;
|
|
15831
|
+
}
|
|
15832
|
+
// We should only ever get 1 arg passed through to invokeTask.
|
|
15833
|
+
// Short circuit here incase that behavior changes.
|
|
15834
|
+
if (applyArgs.length !== 1) {
|
|
15835
|
+
return false;
|
|
15836
|
+
}
|
|
15837
|
+
return applyArgs[0]?.data?.[key] === true;
|
|
15838
|
+
}
|
|
15839
|
+
function getNgZone(ngZoneToUse = 'zone.js', options) {
|
|
15840
|
+
if (ngZoneToUse === 'noop') {
|
|
15841
|
+
return new NoopNgZone();
|
|
15842
|
+
}
|
|
15843
|
+
if (ngZoneToUse === 'zone.js') {
|
|
15844
|
+
return new NgZone(options);
|
|
15845
|
+
}
|
|
15846
|
+
return ngZoneToUse;
|
|
15847
|
+
}
|
|
15848
|
+
|
|
15327
15849
|
/**
|
|
15328
15850
|
* The phase to run an `afterRender` or `afterNextRender` callback in.
|
|
15329
15851
|
*
|
|
@@ -15566,13 +16088,14 @@ class AfterRenderCallback {
|
|
|
15566
16088
|
constructor(phase, callbackFn) {
|
|
15567
16089
|
this.phase = phase;
|
|
15568
16090
|
this.callbackFn = callbackFn;
|
|
16091
|
+
this.zone = inject(NgZone);
|
|
15569
16092
|
this.errorHandler = inject(ErrorHandler, { optional: true });
|
|
15570
16093
|
// Registering a callback will notify the scheduler.
|
|
15571
16094
|
inject(ChangeDetectionScheduler, { optional: true })?.notify(6 /* NotificationSource.NewRenderHook */);
|
|
15572
16095
|
}
|
|
15573
16096
|
invoke() {
|
|
15574
16097
|
try {
|
|
15575
|
-
this.callbackFn
|
|
16098
|
+
this.zone.runOutsideAngular(this.callbackFn);
|
|
15576
16099
|
}
|
|
15577
16100
|
catch (err) {
|
|
15578
16101
|
this.errorHandler?.handleError(err);
|
|
@@ -16366,7 +16889,7 @@ function createRootComponent(componentView, rootComponentDef, rootDirectives, ho
|
|
|
16366
16889
|
function setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {
|
|
16367
16890
|
if (rootSelectorOrNode) {
|
|
16368
16891
|
// The placeholder will be replaced with the actual version at build time.
|
|
16369
|
-
setUpAttributes(hostRenderer, hostRNode, ['ng-version', '18.0.0-rc.
|
|
16892
|
+
setUpAttributes(hostRenderer, hostRNode, ['ng-version', '18.0.0-rc.2']);
|
|
16370
16893
|
}
|
|
16371
16894
|
else {
|
|
16372
16895
|
// If host element is created as a part of this function call (i.e. `rootSelectorOrNode`
|
|
@@ -18991,7 +19514,6 @@ const LOADING_AFTER_SLOT = 1;
|
|
|
18991
19514
|
* Describes the current state of this defer block instance.
|
|
18992
19515
|
*
|
|
18993
19516
|
* @publicApi
|
|
18994
|
-
* @developerPreview
|
|
18995
19517
|
*/
|
|
18996
19518
|
var DeferBlockState;
|
|
18997
19519
|
(function (DeferBlockState) {
|
|
@@ -19028,7 +19550,6 @@ const PREFETCH_TRIGGER_CLEANUP_FNS = 5;
|
|
|
19028
19550
|
/**
|
|
19029
19551
|
* Options for configuring defer blocks behavior.
|
|
19030
19552
|
* @publicApi
|
|
19031
|
-
* @developerPreview
|
|
19032
19553
|
*/
|
|
19033
19554
|
var DeferBlockBehavior;
|
|
19034
19555
|
(function (DeferBlockBehavior) {
|
|
@@ -19083,541 +19604,6 @@ function invokeAllTriggerCleanupFns(lDetails) {
|
|
|
19083
19604
|
invokeTriggerCleanupFns(0 /* TriggerType.Regular */, lDetails);
|
|
19084
19605
|
}
|
|
19085
19606
|
|
|
19086
|
-
/**
|
|
19087
|
-
* Gets a scheduling function that runs the callback after the first of setTimeout and
|
|
19088
|
-
* requestAnimationFrame resolves.
|
|
19089
|
-
*
|
|
19090
|
-
* - `requestAnimationFrame` ensures that change detection runs ahead of a browser repaint.
|
|
19091
|
-
* This ensures that the create and update passes of a change detection always happen
|
|
19092
|
-
* in the same frame.
|
|
19093
|
-
* - When the browser is resource-starved, `rAF` can execute _before_ a `setTimeout` because
|
|
19094
|
-
* rendering is a very high priority process. This means that `setTimeout` cannot guarantee
|
|
19095
|
-
* same-frame create and update pass, when `setTimeout` is used to schedule the update phase.
|
|
19096
|
-
* - While `rAF` gives us the desirable same-frame updates, it has two limitations that
|
|
19097
|
-
* prevent it from being used alone. First, it does not run in background tabs, which would
|
|
19098
|
-
* prevent Angular from initializing an application when opened in a new tab (for example).
|
|
19099
|
-
* Second, repeated calls to requestAnimationFrame will execute at the refresh rate of the
|
|
19100
|
-
* hardware (~16ms for a 60Hz display). This would cause significant slowdown of tests that
|
|
19101
|
-
* are written with several updates and asserts in the form of "update; await stable; assert;".
|
|
19102
|
-
* - Both `setTimeout` and `rAF` are able to "coalesce" several events from a single user
|
|
19103
|
-
* interaction into a single change detection. Importantly, this reduces view tree traversals when
|
|
19104
|
-
* compared to an alternative timing mechanism like `queueMicrotask`, where change detection would
|
|
19105
|
-
* then be interleaves between each event.
|
|
19106
|
-
*
|
|
19107
|
-
* By running change detection after the first of `setTimeout` and `rAF` to execute, we get the
|
|
19108
|
-
* best of both worlds.
|
|
19109
|
-
*
|
|
19110
|
-
* @returns a function to cancel the scheduled callback
|
|
19111
|
-
*/
|
|
19112
|
-
function scheduleCallbackWithRafRace(callback, useNativeTimers = true) {
|
|
19113
|
-
// Note: the `scheduleCallback` is used in the `NgZone` class, but we cannot use the
|
|
19114
|
-
// `inject` function. The `NgZone` instance may be created manually, and thus the injection
|
|
19115
|
-
// context will be unavailable. This might be enough to check whether `requestAnimationFrame` is
|
|
19116
|
-
// available because otherwise, we'll fall back to `setTimeout`.
|
|
19117
|
-
const hasRequestAnimationFrame = typeof _global['requestAnimationFrame'] === 'function';
|
|
19118
|
-
let nativeRequestAnimationFrame = hasRequestAnimationFrame
|
|
19119
|
-
? _global['requestAnimationFrame']
|
|
19120
|
-
: null;
|
|
19121
|
-
let nativeSetTimeout = _global['setTimeout'];
|
|
19122
|
-
if (typeof Zone !== 'undefined' && useNativeTimers) {
|
|
19123
|
-
if (hasRequestAnimationFrame) {
|
|
19124
|
-
nativeRequestAnimationFrame =
|
|
19125
|
-
_global[Zone.__symbol__('requestAnimationFrame')] ?? nativeRequestAnimationFrame;
|
|
19126
|
-
}
|
|
19127
|
-
nativeSetTimeout = _global[Zone.__symbol__('setTimeout')] ?? nativeSetTimeout;
|
|
19128
|
-
}
|
|
19129
|
-
let executeCallback = true;
|
|
19130
|
-
nativeSetTimeout(() => {
|
|
19131
|
-
if (!executeCallback) {
|
|
19132
|
-
return;
|
|
19133
|
-
}
|
|
19134
|
-
executeCallback = false;
|
|
19135
|
-
callback();
|
|
19136
|
-
});
|
|
19137
|
-
nativeRequestAnimationFrame?.(() => {
|
|
19138
|
-
if (!executeCallback) {
|
|
19139
|
-
return;
|
|
19140
|
-
}
|
|
19141
|
-
executeCallback = false;
|
|
19142
|
-
callback();
|
|
19143
|
-
});
|
|
19144
|
-
return () => {
|
|
19145
|
-
executeCallback = false;
|
|
19146
|
-
};
|
|
19147
|
-
}
|
|
19148
|
-
function scheduleCallbackWithMicrotask(callback) {
|
|
19149
|
-
let executeCallback = true;
|
|
19150
|
-
queueMicrotask(() => {
|
|
19151
|
-
if (executeCallback) {
|
|
19152
|
-
callback();
|
|
19153
|
-
}
|
|
19154
|
-
});
|
|
19155
|
-
return () => {
|
|
19156
|
-
executeCallback = false;
|
|
19157
|
-
};
|
|
19158
|
-
}
|
|
19159
|
-
|
|
19160
|
-
function noop(...args) {
|
|
19161
|
-
// Do nothing.
|
|
19162
|
-
}
|
|
19163
|
-
|
|
19164
|
-
class AsyncStackTaggingZoneSpec {
|
|
19165
|
-
constructor(namePrefix, consoleAsyncStackTaggingImpl = console) {
|
|
19166
|
-
this.name = 'asyncStackTagging for ' + namePrefix;
|
|
19167
|
-
this.createTask = consoleAsyncStackTaggingImpl?.createTask ?? (() => null);
|
|
19168
|
-
}
|
|
19169
|
-
onScheduleTask(delegate, _current, target, task) {
|
|
19170
|
-
task.consoleTask = this.createTask(`Zone - ${task.source || task.type}`);
|
|
19171
|
-
return delegate.scheduleTask(target, task);
|
|
19172
|
-
}
|
|
19173
|
-
onInvokeTask(delegate, _currentZone, targetZone, task, applyThis, applyArgs) {
|
|
19174
|
-
let ret;
|
|
19175
|
-
if (task.consoleTask) {
|
|
19176
|
-
ret = task.consoleTask.run(() => delegate.invokeTask(targetZone, task, applyThis, applyArgs));
|
|
19177
|
-
}
|
|
19178
|
-
else {
|
|
19179
|
-
ret = delegate.invokeTask(targetZone, task, applyThis, applyArgs);
|
|
19180
|
-
}
|
|
19181
|
-
return ret;
|
|
19182
|
-
}
|
|
19183
|
-
}
|
|
19184
|
-
|
|
19185
|
-
/**
|
|
19186
|
-
* An injectable service for executing work inside or outside of the Angular zone.
|
|
19187
|
-
*
|
|
19188
|
-
* The most common use of this service is to optimize performance when starting a work consisting of
|
|
19189
|
-
* one or more asynchronous tasks that don't require UI updates or error handling to be handled by
|
|
19190
|
-
* Angular. Such tasks can be kicked off via {@link #runOutsideAngular} and if needed, these tasks
|
|
19191
|
-
* can reenter the Angular zone via {@link #run}.
|
|
19192
|
-
*
|
|
19193
|
-
* <!-- TODO: add/fix links to:
|
|
19194
|
-
* - docs explaining zones and the use of zones in Angular and change-detection
|
|
19195
|
-
* - link to runOutsideAngular/run (throughout this file!)
|
|
19196
|
-
* -->
|
|
19197
|
-
*
|
|
19198
|
-
* @usageNotes
|
|
19199
|
-
* ### Example
|
|
19200
|
-
*
|
|
19201
|
-
* ```
|
|
19202
|
-
* import {Component, NgZone} from '@angular/core';
|
|
19203
|
-
* import {NgIf} from '@angular/common';
|
|
19204
|
-
*
|
|
19205
|
-
* @Component({
|
|
19206
|
-
* selector: 'ng-zone-demo',
|
|
19207
|
-
* template: `
|
|
19208
|
-
* <h2>Demo: NgZone</h2>
|
|
19209
|
-
*
|
|
19210
|
-
* <p>Progress: {{progress}}%</p>
|
|
19211
|
-
* <p *ngIf="progress >= 100">Done processing {{label}} of Angular zone!</p>
|
|
19212
|
-
*
|
|
19213
|
-
* <button (click)="processWithinAngularZone()">Process within Angular zone</button>
|
|
19214
|
-
* <button (click)="processOutsideOfAngularZone()">Process outside of Angular zone</button>
|
|
19215
|
-
* `,
|
|
19216
|
-
* })
|
|
19217
|
-
* export class NgZoneDemo {
|
|
19218
|
-
* progress: number = 0;
|
|
19219
|
-
* label: string;
|
|
19220
|
-
*
|
|
19221
|
-
* constructor(private _ngZone: NgZone) {}
|
|
19222
|
-
*
|
|
19223
|
-
* // Loop inside the Angular zone
|
|
19224
|
-
* // so the UI DOES refresh after each setTimeout cycle
|
|
19225
|
-
* processWithinAngularZone() {
|
|
19226
|
-
* this.label = 'inside';
|
|
19227
|
-
* this.progress = 0;
|
|
19228
|
-
* this._increaseProgress(() => console.log('Inside Done!'));
|
|
19229
|
-
* }
|
|
19230
|
-
*
|
|
19231
|
-
* // Loop outside of the Angular zone
|
|
19232
|
-
* // so the UI DOES NOT refresh after each setTimeout cycle
|
|
19233
|
-
* processOutsideOfAngularZone() {
|
|
19234
|
-
* this.label = 'outside';
|
|
19235
|
-
* this.progress = 0;
|
|
19236
|
-
* this._ngZone.runOutsideAngular(() => {
|
|
19237
|
-
* this._increaseProgress(() => {
|
|
19238
|
-
* // reenter the Angular zone and display done
|
|
19239
|
-
* this._ngZone.run(() => { console.log('Outside Done!'); });
|
|
19240
|
-
* });
|
|
19241
|
-
* });
|
|
19242
|
-
* }
|
|
19243
|
-
*
|
|
19244
|
-
* _increaseProgress(doneCallback: () => void) {
|
|
19245
|
-
* this.progress += 1;
|
|
19246
|
-
* console.log(`Current progress: ${this.progress}%`);
|
|
19247
|
-
*
|
|
19248
|
-
* if (this.progress < 100) {
|
|
19249
|
-
* window.setTimeout(() => this._increaseProgress(doneCallback), 10);
|
|
19250
|
-
* } else {
|
|
19251
|
-
* doneCallback();
|
|
19252
|
-
* }
|
|
19253
|
-
* }
|
|
19254
|
-
* }
|
|
19255
|
-
* ```
|
|
19256
|
-
*
|
|
19257
|
-
* @publicApi
|
|
19258
|
-
*/
|
|
19259
|
-
class NgZone {
|
|
19260
|
-
constructor({ enableLongStackTrace = false, shouldCoalesceEventChangeDetection = false, shouldCoalesceRunChangeDetection = false, }) {
|
|
19261
|
-
this.hasPendingMacrotasks = false;
|
|
19262
|
-
this.hasPendingMicrotasks = false;
|
|
19263
|
-
/**
|
|
19264
|
-
* Whether there are no outstanding microtasks or macrotasks.
|
|
19265
|
-
*/
|
|
19266
|
-
this.isStable = true;
|
|
19267
|
-
/**
|
|
19268
|
-
* Notifies when code enters Angular Zone. This gets fired first on VM Turn.
|
|
19269
|
-
*/
|
|
19270
|
-
this.onUnstable = new EventEmitter(false);
|
|
19271
|
-
/**
|
|
19272
|
-
* Notifies when there is no more microtasks enqueued in the current VM Turn.
|
|
19273
|
-
* This is a hint for Angular to do change detection, which may enqueue more microtasks.
|
|
19274
|
-
* For this reason this event can fire multiple times per VM Turn.
|
|
19275
|
-
*/
|
|
19276
|
-
this.onMicrotaskEmpty = new EventEmitter(false);
|
|
19277
|
-
/**
|
|
19278
|
-
* Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which
|
|
19279
|
-
* implies we are about to relinquish VM turn.
|
|
19280
|
-
* This event gets called just once.
|
|
19281
|
-
*/
|
|
19282
|
-
this.onStable = new EventEmitter(false);
|
|
19283
|
-
/**
|
|
19284
|
-
* Notifies that an error has been delivered.
|
|
19285
|
-
*/
|
|
19286
|
-
this.onError = new EventEmitter(false);
|
|
19287
|
-
if (typeof Zone == 'undefined') {
|
|
19288
|
-
throw new RuntimeError(908 /* RuntimeErrorCode.MISSING_ZONEJS */, ngDevMode && `In this configuration Angular requires Zone.js`);
|
|
19289
|
-
}
|
|
19290
|
-
Zone.assertZonePatched();
|
|
19291
|
-
const self = this;
|
|
19292
|
-
self._nesting = 0;
|
|
19293
|
-
self._outer = self._inner = Zone.current;
|
|
19294
|
-
// AsyncStackTaggingZoneSpec provides `linked stack traces` to show
|
|
19295
|
-
// where the async operation is scheduled. For more details, refer
|
|
19296
|
-
// to this article, https://developer.chrome.com/blog/devtools-better-angular-debugging/
|
|
19297
|
-
// And we only import this AsyncStackTaggingZoneSpec in development mode,
|
|
19298
|
-
// in the production mode, the AsyncStackTaggingZoneSpec will be tree shaken away.
|
|
19299
|
-
if (ngDevMode) {
|
|
19300
|
-
self._inner = self._inner.fork(new AsyncStackTaggingZoneSpec('Angular'));
|
|
19301
|
-
}
|
|
19302
|
-
if (Zone['TaskTrackingZoneSpec']) {
|
|
19303
|
-
self._inner = self._inner.fork(new Zone['TaskTrackingZoneSpec']());
|
|
19304
|
-
}
|
|
19305
|
-
if (enableLongStackTrace && Zone['longStackTraceZoneSpec']) {
|
|
19306
|
-
self._inner = self._inner.fork(Zone['longStackTraceZoneSpec']);
|
|
19307
|
-
}
|
|
19308
|
-
// if shouldCoalesceRunChangeDetection is true, all tasks including event tasks will be
|
|
19309
|
-
// coalesced, so shouldCoalesceEventChangeDetection option is not necessary and can be skipped.
|
|
19310
|
-
self.shouldCoalesceEventChangeDetection =
|
|
19311
|
-
!shouldCoalesceRunChangeDetection && shouldCoalesceEventChangeDetection;
|
|
19312
|
-
self.shouldCoalesceRunChangeDetection = shouldCoalesceRunChangeDetection;
|
|
19313
|
-
self.callbackScheduled = false;
|
|
19314
|
-
self.scheduleCallback = scheduleCallbackWithRafRace;
|
|
19315
|
-
forkInnerZoneWithAngularBehavior(self);
|
|
19316
|
-
}
|
|
19317
|
-
/**
|
|
19318
|
-
This method checks whether the method call happens within an Angular Zone instance.
|
|
19319
|
-
*/
|
|
19320
|
-
static isInAngularZone() {
|
|
19321
|
-
// Zone needs to be checked, because this method might be called even when NoopNgZone is used.
|
|
19322
|
-
return typeof Zone !== 'undefined' && Zone.current.get('isAngularZone') === true;
|
|
19323
|
-
}
|
|
19324
|
-
/**
|
|
19325
|
-
Assures that the method is called within the Angular Zone, otherwise throws an error.
|
|
19326
|
-
*/
|
|
19327
|
-
static assertInAngularZone() {
|
|
19328
|
-
if (!NgZone.isInAngularZone()) {
|
|
19329
|
-
throw new RuntimeError(909 /* RuntimeErrorCode.UNEXPECTED_ZONE_STATE */, ngDevMode && 'Expected to be in Angular Zone, but it is not!');
|
|
19330
|
-
}
|
|
19331
|
-
}
|
|
19332
|
-
/**
|
|
19333
|
-
Assures that the method is called outside of the Angular Zone, otherwise throws an error.
|
|
19334
|
-
*/
|
|
19335
|
-
static assertNotInAngularZone() {
|
|
19336
|
-
if (NgZone.isInAngularZone()) {
|
|
19337
|
-
throw new RuntimeError(909 /* RuntimeErrorCode.UNEXPECTED_ZONE_STATE */, ngDevMode && 'Expected to not be in Angular Zone, but it is!');
|
|
19338
|
-
}
|
|
19339
|
-
}
|
|
19340
|
-
/**
|
|
19341
|
-
* Executes the `fn` function synchronously within the Angular zone and returns value returned by
|
|
19342
|
-
* the function.
|
|
19343
|
-
*
|
|
19344
|
-
* Running functions via `run` allows you to reenter Angular zone from a task that was executed
|
|
19345
|
-
* outside of the Angular zone (typically started via {@link #runOutsideAngular}).
|
|
19346
|
-
*
|
|
19347
|
-
* Any future tasks or microtasks scheduled from within this function will continue executing from
|
|
19348
|
-
* within the Angular zone.
|
|
19349
|
-
*
|
|
19350
|
-
* If a synchronous error happens it will be rethrown and not reported via `onError`.
|
|
19351
|
-
*/
|
|
19352
|
-
run(fn, applyThis, applyArgs) {
|
|
19353
|
-
return this._inner.run(fn, applyThis, applyArgs);
|
|
19354
|
-
}
|
|
19355
|
-
/**
|
|
19356
|
-
* Executes the `fn` function synchronously within the Angular zone as a task and returns value
|
|
19357
|
-
* returned by the function.
|
|
19358
|
-
*
|
|
19359
|
-
* Running functions via `run` allows you to reenter Angular zone from a task that was executed
|
|
19360
|
-
* outside of the Angular zone (typically started via {@link #runOutsideAngular}).
|
|
19361
|
-
*
|
|
19362
|
-
* Any future tasks or microtasks scheduled from within this function will continue executing from
|
|
19363
|
-
* within the Angular zone.
|
|
19364
|
-
*
|
|
19365
|
-
* If a synchronous error happens it will be rethrown and not reported via `onError`.
|
|
19366
|
-
*/
|
|
19367
|
-
runTask(fn, applyThis, applyArgs, name) {
|
|
19368
|
-
const zone = this._inner;
|
|
19369
|
-
const task = zone.scheduleEventTask('NgZoneEvent: ' + name, fn, EMPTY_PAYLOAD, noop, noop);
|
|
19370
|
-
try {
|
|
19371
|
-
return zone.runTask(task, applyThis, applyArgs);
|
|
19372
|
-
}
|
|
19373
|
-
finally {
|
|
19374
|
-
zone.cancelTask(task);
|
|
19375
|
-
}
|
|
19376
|
-
}
|
|
19377
|
-
/**
|
|
19378
|
-
* Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not
|
|
19379
|
-
* rethrown.
|
|
19380
|
-
*/
|
|
19381
|
-
runGuarded(fn, applyThis, applyArgs) {
|
|
19382
|
-
return this._inner.runGuarded(fn, applyThis, applyArgs);
|
|
19383
|
-
}
|
|
19384
|
-
/**
|
|
19385
|
-
* Executes the `fn` function synchronously in Angular's parent zone and returns value returned by
|
|
19386
|
-
* the function.
|
|
19387
|
-
*
|
|
19388
|
-
* Running functions via {@link #runOutsideAngular} allows you to escape Angular's zone and do
|
|
19389
|
-
* work that
|
|
19390
|
-
* doesn't trigger Angular change-detection or is subject to Angular's error handling.
|
|
19391
|
-
*
|
|
19392
|
-
* Any future tasks or microtasks scheduled from within this function will continue executing from
|
|
19393
|
-
* outside of the Angular zone.
|
|
19394
|
-
*
|
|
19395
|
-
* Use {@link #run} to reenter the Angular zone and do work that updates the application model.
|
|
19396
|
-
*/
|
|
19397
|
-
runOutsideAngular(fn) {
|
|
19398
|
-
return this._outer.run(fn);
|
|
19399
|
-
}
|
|
19400
|
-
}
|
|
19401
|
-
const EMPTY_PAYLOAD = {};
|
|
19402
|
-
function checkStable(zone) {
|
|
19403
|
-
// TODO: @JiaLiPassion, should check zone.isCheckStableRunning to prevent
|
|
19404
|
-
// re-entry. The case is:
|
|
19405
|
-
//
|
|
19406
|
-
// @Component({...})
|
|
19407
|
-
// export class AppComponent {
|
|
19408
|
-
// constructor(private ngZone: NgZone) {
|
|
19409
|
-
// this.ngZone.onStable.subscribe(() => {
|
|
19410
|
-
// this.ngZone.run(() => console.log('stable'););
|
|
19411
|
-
// });
|
|
19412
|
-
// }
|
|
19413
|
-
//
|
|
19414
|
-
// The onStable subscriber run another function inside ngZone
|
|
19415
|
-
// which causes `checkStable()` re-entry.
|
|
19416
|
-
// But this fix causes some issues in g3, so this fix will be
|
|
19417
|
-
// launched in another PR.
|
|
19418
|
-
if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {
|
|
19419
|
-
try {
|
|
19420
|
-
zone._nesting++;
|
|
19421
|
-
zone.onMicrotaskEmpty.emit(null);
|
|
19422
|
-
}
|
|
19423
|
-
finally {
|
|
19424
|
-
zone._nesting--;
|
|
19425
|
-
if (!zone.hasPendingMicrotasks) {
|
|
19426
|
-
try {
|
|
19427
|
-
zone.runOutsideAngular(() => zone.onStable.emit(null));
|
|
19428
|
-
}
|
|
19429
|
-
finally {
|
|
19430
|
-
zone.isStable = true;
|
|
19431
|
-
}
|
|
19432
|
-
}
|
|
19433
|
-
}
|
|
19434
|
-
}
|
|
19435
|
-
}
|
|
19436
|
-
function delayChangeDetectionForEvents(zone) {
|
|
19437
|
-
/**
|
|
19438
|
-
* We also need to check _nesting here
|
|
19439
|
-
* Consider the following case with shouldCoalesceRunChangeDetection = true
|
|
19440
|
-
*
|
|
19441
|
-
* ngZone.run(() => {});
|
|
19442
|
-
* ngZone.run(() => {});
|
|
19443
|
-
*
|
|
19444
|
-
* We want the two `ngZone.run()` only trigger one change detection
|
|
19445
|
-
* when shouldCoalesceRunChangeDetection is true.
|
|
19446
|
-
* And because in this case, change detection run in async way(requestAnimationFrame),
|
|
19447
|
-
* so we also need to check the _nesting here to prevent multiple
|
|
19448
|
-
* change detections.
|
|
19449
|
-
*/
|
|
19450
|
-
if (zone.isCheckStableRunning || zone.callbackScheduled) {
|
|
19451
|
-
return;
|
|
19452
|
-
}
|
|
19453
|
-
zone.callbackScheduled = true;
|
|
19454
|
-
zone.scheduleCallback.call(_global, () => {
|
|
19455
|
-
// This is a work around for https://github.com/angular/angular/issues/36839.
|
|
19456
|
-
// The core issue is that when event coalescing is enabled it is possible for microtasks
|
|
19457
|
-
// to get flushed too early (As is the case with `Promise.then`) between the
|
|
19458
|
-
// coalescing eventTasks.
|
|
19459
|
-
//
|
|
19460
|
-
// To workaround this we schedule a "fake" eventTask before we process the
|
|
19461
|
-
// coalescing eventTasks. The benefit of this is that the "fake" container eventTask
|
|
19462
|
-
// will prevent the microtasks queue from getting drained in between the coalescing
|
|
19463
|
-
// eventTask execution.
|
|
19464
|
-
if (!zone.fakeTopEventTask) {
|
|
19465
|
-
zone.fakeTopEventTask = Zone.root.scheduleEventTask('fakeTopEventTask', () => {
|
|
19466
|
-
zone.callbackScheduled = false;
|
|
19467
|
-
updateMicroTaskStatus(zone);
|
|
19468
|
-
zone.isCheckStableRunning = true;
|
|
19469
|
-
checkStable(zone);
|
|
19470
|
-
zone.isCheckStableRunning = false;
|
|
19471
|
-
}, undefined, () => { }, () => { });
|
|
19472
|
-
}
|
|
19473
|
-
zone.fakeTopEventTask.invoke();
|
|
19474
|
-
});
|
|
19475
|
-
updateMicroTaskStatus(zone);
|
|
19476
|
-
}
|
|
19477
|
-
function forkInnerZoneWithAngularBehavior(zone) {
|
|
19478
|
-
const delayChangeDetectionForEventsDelegate = () => {
|
|
19479
|
-
delayChangeDetectionForEvents(zone);
|
|
19480
|
-
};
|
|
19481
|
-
zone._inner = zone._inner.fork({
|
|
19482
|
-
name: 'angular',
|
|
19483
|
-
properties: { 'isAngularZone': true },
|
|
19484
|
-
onInvokeTask: (delegate, current, target, task, applyThis, applyArgs) => {
|
|
19485
|
-
// Prevent triggering change detection when the flag is detected.
|
|
19486
|
-
if (shouldBeIgnoredByZone(applyArgs)) {
|
|
19487
|
-
return delegate.invokeTask(target, task, applyThis, applyArgs);
|
|
19488
|
-
}
|
|
19489
|
-
try {
|
|
19490
|
-
onEnter(zone);
|
|
19491
|
-
return delegate.invokeTask(target, task, applyThis, applyArgs);
|
|
19492
|
-
}
|
|
19493
|
-
finally {
|
|
19494
|
-
if ((zone.shouldCoalesceEventChangeDetection && task.type === 'eventTask') ||
|
|
19495
|
-
zone.shouldCoalesceRunChangeDetection) {
|
|
19496
|
-
delayChangeDetectionForEventsDelegate();
|
|
19497
|
-
}
|
|
19498
|
-
onLeave(zone);
|
|
19499
|
-
}
|
|
19500
|
-
},
|
|
19501
|
-
onInvoke: (delegate, current, target, callback, applyThis, applyArgs, source) => {
|
|
19502
|
-
try {
|
|
19503
|
-
onEnter(zone);
|
|
19504
|
-
return delegate.invoke(target, callback, applyThis, applyArgs, source);
|
|
19505
|
-
}
|
|
19506
|
-
finally {
|
|
19507
|
-
if (zone.shouldCoalesceRunChangeDetection &&
|
|
19508
|
-
// Do not delay change detection when the task is the scheduler's tick.
|
|
19509
|
-
// We need to synchronously trigger the stability logic so that the
|
|
19510
|
-
// zone-based scheduler can prevent a duplicate ApplicationRef.tick
|
|
19511
|
-
// by first checking if the scheduler tick is running. This does seem a bit roundabout,
|
|
19512
|
-
// but we _do_ still want to trigger all the correct events when we exit the zone.run
|
|
19513
|
-
// (`onMicrotaskEmpty` and `onStable` _should_ emit; developers can have code which
|
|
19514
|
-
// relies on these events happening after change detection runs).
|
|
19515
|
-
// Note: `zone.callbackScheduled` is already in delayChangeDetectionForEventsDelegate
|
|
19516
|
-
// but is added here as well to prevent reads of applyArgs when not necessary
|
|
19517
|
-
!zone.callbackScheduled &&
|
|
19518
|
-
!isSchedulerTick(applyArgs)) {
|
|
19519
|
-
delayChangeDetectionForEventsDelegate();
|
|
19520
|
-
}
|
|
19521
|
-
onLeave(zone);
|
|
19522
|
-
}
|
|
19523
|
-
},
|
|
19524
|
-
onHasTask: (delegate, current, target, hasTaskState) => {
|
|
19525
|
-
delegate.hasTask(target, hasTaskState);
|
|
19526
|
-
if (current === target) {
|
|
19527
|
-
// We are only interested in hasTask events which originate from our zone
|
|
19528
|
-
// (A child hasTask event is not interesting to us)
|
|
19529
|
-
if (hasTaskState.change == 'microTask') {
|
|
19530
|
-
zone._hasPendingMicrotasks = hasTaskState.microTask;
|
|
19531
|
-
updateMicroTaskStatus(zone);
|
|
19532
|
-
checkStable(zone);
|
|
19533
|
-
}
|
|
19534
|
-
else if (hasTaskState.change == 'macroTask') {
|
|
19535
|
-
zone.hasPendingMacrotasks = hasTaskState.macroTask;
|
|
19536
|
-
}
|
|
19537
|
-
}
|
|
19538
|
-
},
|
|
19539
|
-
onHandleError: (delegate, current, target, error) => {
|
|
19540
|
-
delegate.handleError(target, error);
|
|
19541
|
-
zone.runOutsideAngular(() => zone.onError.emit(error));
|
|
19542
|
-
return false;
|
|
19543
|
-
},
|
|
19544
|
-
});
|
|
19545
|
-
}
|
|
19546
|
-
function updateMicroTaskStatus(zone) {
|
|
19547
|
-
if (zone._hasPendingMicrotasks ||
|
|
19548
|
-
((zone.shouldCoalesceEventChangeDetection || zone.shouldCoalesceRunChangeDetection) &&
|
|
19549
|
-
zone.callbackScheduled === true)) {
|
|
19550
|
-
zone.hasPendingMicrotasks = true;
|
|
19551
|
-
}
|
|
19552
|
-
else {
|
|
19553
|
-
zone.hasPendingMicrotasks = false;
|
|
19554
|
-
}
|
|
19555
|
-
}
|
|
19556
|
-
function onEnter(zone) {
|
|
19557
|
-
zone._nesting++;
|
|
19558
|
-
if (zone.isStable) {
|
|
19559
|
-
zone.isStable = false;
|
|
19560
|
-
zone.onUnstable.emit(null);
|
|
19561
|
-
}
|
|
19562
|
-
}
|
|
19563
|
-
function onLeave(zone) {
|
|
19564
|
-
zone._nesting--;
|
|
19565
|
-
checkStable(zone);
|
|
19566
|
-
}
|
|
19567
|
-
/**
|
|
19568
|
-
* Provides a noop implementation of `NgZone` which does nothing. This zone requires explicit calls
|
|
19569
|
-
* to framework to perform rendering.
|
|
19570
|
-
*/
|
|
19571
|
-
class NoopNgZone {
|
|
19572
|
-
constructor() {
|
|
19573
|
-
this.hasPendingMicrotasks = false;
|
|
19574
|
-
this.hasPendingMacrotasks = false;
|
|
19575
|
-
this.isStable = true;
|
|
19576
|
-
this.onUnstable = new EventEmitter();
|
|
19577
|
-
this.onMicrotaskEmpty = new EventEmitter();
|
|
19578
|
-
this.onStable = new EventEmitter();
|
|
19579
|
-
this.onError = new EventEmitter();
|
|
19580
|
-
}
|
|
19581
|
-
run(fn, applyThis, applyArgs) {
|
|
19582
|
-
return fn.apply(applyThis, applyArgs);
|
|
19583
|
-
}
|
|
19584
|
-
runGuarded(fn, applyThis, applyArgs) {
|
|
19585
|
-
return fn.apply(applyThis, applyArgs);
|
|
19586
|
-
}
|
|
19587
|
-
runOutsideAngular(fn) {
|
|
19588
|
-
return fn();
|
|
19589
|
-
}
|
|
19590
|
-
runTask(fn, applyThis, applyArgs, name) {
|
|
19591
|
-
return fn.apply(applyThis, applyArgs);
|
|
19592
|
-
}
|
|
19593
|
-
}
|
|
19594
|
-
function shouldBeIgnoredByZone(applyArgs) {
|
|
19595
|
-
return hasApplyArgsData(applyArgs, '__ignore_ng_zone__');
|
|
19596
|
-
}
|
|
19597
|
-
function isSchedulerTick(applyArgs) {
|
|
19598
|
-
return hasApplyArgsData(applyArgs, '__scheduler_tick__');
|
|
19599
|
-
}
|
|
19600
|
-
function hasApplyArgsData(applyArgs, key) {
|
|
19601
|
-
if (!Array.isArray(applyArgs)) {
|
|
19602
|
-
return false;
|
|
19603
|
-
}
|
|
19604
|
-
// We should only ever get 1 arg passed through to invokeTask.
|
|
19605
|
-
// Short circuit here incase that behavior changes.
|
|
19606
|
-
if (applyArgs.length !== 1) {
|
|
19607
|
-
return false;
|
|
19608
|
-
}
|
|
19609
|
-
return applyArgs[0]?.data?.[key] === true;
|
|
19610
|
-
}
|
|
19611
|
-
function getNgZone(ngZoneToUse = 'zone.js', options) {
|
|
19612
|
-
if (ngZoneToUse === 'noop') {
|
|
19613
|
-
return new NoopNgZone();
|
|
19614
|
-
}
|
|
19615
|
-
if (ngZoneToUse === 'zone.js') {
|
|
19616
|
-
return new NgZone(options);
|
|
19617
|
-
}
|
|
19618
|
-
return ngZoneToUse;
|
|
19619
|
-
}
|
|
19620
|
-
|
|
19621
19607
|
// Public API for Zone
|
|
19622
19608
|
|
|
19623
19609
|
/**
|
|
@@ -20584,9 +20570,13 @@ function scheduleDelayedTrigger(scheduleFn) {
|
|
|
20584
20570
|
const lView = getLView();
|
|
20585
20571
|
const tNode = getCurrentTNode();
|
|
20586
20572
|
renderPlaceholder(lView, tNode);
|
|
20587
|
-
|
|
20588
|
-
|
|
20589
|
-
|
|
20573
|
+
// Only trigger the scheduled trigger on the browser
|
|
20574
|
+
// since we don't want to delay the server response.
|
|
20575
|
+
if (isPlatformBrowser(lView[INJECTOR])) {
|
|
20576
|
+
const cleanupFn = scheduleFn(() => triggerDeferBlock(lView, tNode), lView);
|
|
20577
|
+
const lDetails = getLDeferBlockDetails(lView, tNode);
|
|
20578
|
+
storeTriggerCleanupFn(0 /* TriggerType.Regular */, lDetails, cleanupFn);
|
|
20579
|
+
}
|
|
20590
20580
|
}
|
|
20591
20581
|
/**
|
|
20592
20582
|
* Schedules prefetching for `on idle` and `on timer` triggers.
|
|
@@ -20595,14 +20585,18 @@ function scheduleDelayedTrigger(scheduleFn) {
|
|
|
20595
20585
|
*/
|
|
20596
20586
|
function scheduleDelayedPrefetching(scheduleFn) {
|
|
20597
20587
|
const lView = getLView();
|
|
20598
|
-
|
|
20599
|
-
|
|
20600
|
-
|
|
20601
|
-
|
|
20602
|
-
const
|
|
20603
|
-
const
|
|
20604
|
-
|
|
20605
|
-
|
|
20588
|
+
// Only trigger the scheduled trigger on the browser
|
|
20589
|
+
// since we don't want to delay the server response.
|
|
20590
|
+
if (isPlatformBrowser(lView[INJECTOR])) {
|
|
20591
|
+
const tNode = getCurrentTNode();
|
|
20592
|
+
const tView = lView[TVIEW];
|
|
20593
|
+
const tDetails = getTDeferBlockDetails(tView, tNode);
|
|
20594
|
+
if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
|
|
20595
|
+
const lDetails = getLDeferBlockDetails(lView, tNode);
|
|
20596
|
+
const prefetch = () => triggerPrefetching(tDetails, lView, tNode);
|
|
20597
|
+
const cleanupFn = scheduleFn(prefetch, lView);
|
|
20598
|
+
storeTriggerCleanupFn(1 /* TriggerType.Prefetch */, lDetails, cleanupFn);
|
|
20599
|
+
}
|
|
20606
20600
|
}
|
|
20607
20601
|
}
|
|
20608
20602
|
/**
|
|
@@ -26373,6 +26367,16 @@ function ɵɵi18nPostprocess(message, replacements = {}) {
|
|
|
26373
26367
|
return i18nPostprocess(message, replacements);
|
|
26374
26368
|
}
|
|
26375
26369
|
|
|
26370
|
+
/**
|
|
26371
|
+
* Contains a reference to a function that disables event replay feature
|
|
26372
|
+
* for server-side rendered applications. This function is overridden with
|
|
26373
|
+
* an actual implementation when the event replay feature is enabled via
|
|
26374
|
+
* `withEventReplay()` call.
|
|
26375
|
+
*/
|
|
26376
|
+
let disableEventReplayFn = (el, eventName, listenerFn) => { };
|
|
26377
|
+
function setDisableEventReplayImpl(fn) {
|
|
26378
|
+
disableEventReplayFn = fn;
|
|
26379
|
+
}
|
|
26376
26380
|
/**
|
|
26377
26381
|
* Adds an event listener to the current node.
|
|
26378
26382
|
*
|
|
@@ -26477,6 +26481,7 @@ function listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn,
|
|
|
26477
26481
|
const idxOrTargetGetter = eventTargetResolver
|
|
26478
26482
|
? (_lView) => eventTargetResolver(unwrapRNode(_lView[tNode.index]))
|
|
26479
26483
|
: tNode.index;
|
|
26484
|
+
disableEventReplayFn(native, eventName, listenerFn);
|
|
26480
26485
|
// In order to match current behavior, native DOM event listeners must be added for all
|
|
26481
26486
|
// events (including outputs).
|
|
26482
26487
|
// There might be cases where multiple directives on the same element try to register an event
|
|
@@ -30796,7 +30801,7 @@ class Version {
|
|
|
30796
30801
|
/**
|
|
30797
30802
|
* @publicApi
|
|
30798
30803
|
*/
|
|
30799
|
-
const VERSION = new Version('18.0.0-rc.
|
|
30804
|
+
const VERSION = new Version('18.0.0-rc.2');
|
|
30800
30805
|
|
|
30801
30806
|
class Console {
|
|
30802
30807
|
log(message) {
|
|
@@ -32335,6 +32340,7 @@ class ApplicationRef {
|
|
|
32335
32340
|
this.isStable = inject(PendingTasks).hasPendingTasks.pipe(map((pending) => !pending));
|
|
32336
32341
|
this._injector = inject(EnvironmentInjector);
|
|
32337
32342
|
}
|
|
32343
|
+
/** @internal */
|
|
32338
32344
|
get allViews() {
|
|
32339
32345
|
return [...this.externalTestViews.keys(), ...this._views];
|
|
32340
32346
|
}
|
|
@@ -32477,8 +32483,10 @@ class ApplicationRef {
|
|
|
32477
32483
|
let runs = 0;
|
|
32478
32484
|
const afterRenderEffectManager = this.afterRenderEffectManager;
|
|
32479
32485
|
while (runs < MAXIMUM_REFRESH_RERUNS) {
|
|
32480
|
-
|
|
32481
|
-
|
|
32486
|
+
const isFirstPass = runs === 0;
|
|
32487
|
+
// Some notifications to run a `tick` will only trigger render hooks. so we skip refreshing views the first time through.
|
|
32488
|
+
// After the we execute render hooks in the first pass, we loop while views are marked dirty and should refresh them.
|
|
32489
|
+
if (refreshViews || !isFirstPass) {
|
|
32482
32490
|
this.beforeRender.next(isFirstPass);
|
|
32483
32491
|
for (let { _lView, notifyErrorHandler } of this._views) {
|
|
32484
32492
|
detectChangesInViewIfRequired(_lView, notifyErrorHandler, isFirstPass, this.zonelessEnabled);
|
|
@@ -32826,9 +32834,9 @@ class ChangeDetectionSchedulerImpl {
|
|
|
32826
32834
|
this.subscriptions = new Subscription();
|
|
32827
32835
|
this.cancelScheduledCallback = null;
|
|
32828
32836
|
this.shouldRefreshViews = false;
|
|
32829
|
-
this.pendingRenderTaskId = null;
|
|
32830
32837
|
this.useMicrotaskScheduler = false;
|
|
32831
32838
|
this.runningTick = false;
|
|
32839
|
+
this.pendingRenderTaskId = null;
|
|
32832
32840
|
this.subscriptions.add(this.appRef.afterTick.subscribe(() => {
|
|
32833
32841
|
// If the scheduler isn't running a tick but the application ticked, that means
|
|
32834
32842
|
// someone called ApplicationRef.tick manually. In this case, we should cancel
|
|
@@ -32906,13 +32914,13 @@ class ChangeDetectionSchedulerImpl {
|
|
|
32906
32914
|
Zone.root.run(() => {
|
|
32907
32915
|
this.cancelScheduledCallback = scheduleCallback(() => {
|
|
32908
32916
|
this.tick(this.shouldRefreshViews);
|
|
32909
|
-
}
|
|
32917
|
+
});
|
|
32910
32918
|
});
|
|
32911
32919
|
}
|
|
32912
32920
|
else {
|
|
32913
32921
|
this.cancelScheduledCallback = scheduleCallback(() => {
|
|
32914
32922
|
this.tick(this.shouldRefreshViews);
|
|
32915
|
-
}
|
|
32923
|
+
});
|
|
32916
32924
|
}
|
|
32917
32925
|
}
|
|
32918
32926
|
shouldScheduleTick() {
|
|
@@ -32925,7 +32933,7 @@ class ChangeDetectionSchedulerImpl {
|
|
|
32925
32933
|
}
|
|
32926
32934
|
// If we're inside the zone don't bother with scheduler. Zone will stabilize
|
|
32927
32935
|
// eventually and run change detection.
|
|
32928
|
-
if (this.zoneIsDefined && NgZone.isInAngularZone()) {
|
|
32936
|
+
if (!this.zonelessEnabled && this.zoneIsDefined && NgZone.isInAngularZone()) {
|
|
32929
32937
|
return false;
|
|
32930
32938
|
}
|
|
32931
32939
|
return true;
|
|
@@ -33045,6 +33053,9 @@ function provideExperimentalZonelessChangeDetection() {
|
|
|
33045
33053
|
{ provide: ChangeDetectionScheduler, useExisting: ChangeDetectionSchedulerImpl },
|
|
33046
33054
|
{ provide: NgZone, useClass: NoopNgZone },
|
|
33047
33055
|
{ provide: ZONELESS_ENABLED, useValue: true },
|
|
33056
|
+
typeof ngDevMode === 'undefined' || ngDevMode
|
|
33057
|
+
? [{ provide: PROVIDED_ZONELESS, useValue: true }]
|
|
33058
|
+
: [],
|
|
33048
33059
|
]);
|
|
33049
33060
|
}
|
|
33050
33061
|
|
|
@@ -33086,8 +33097,9 @@ class NgZoneChangeDetectionScheduler {
|
|
|
33086
33097
|
* Internal token used to verify that `provideZoneChangeDetection` is not used
|
|
33087
33098
|
* with the bootstrapModule API.
|
|
33088
33099
|
*/
|
|
33089
|
-
const PROVIDED_NG_ZONE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'provideZoneChangeDetection token' : '');
|
|
33100
|
+
const PROVIDED_NG_ZONE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'provideZoneChangeDetection token' : '', { factory: () => false });
|
|
33090
33101
|
function internalProvideZoneChangeDetection({ ngZoneFactory, ignoreChangesOutsideZone, }) {
|
|
33102
|
+
ngZoneFactory ??= () => new NgZone(getNgZoneOptions());
|
|
33091
33103
|
return [
|
|
33092
33104
|
{ provide: NgZone, useFactory: ngZoneFactory },
|
|
33093
33105
|
{
|
|
@@ -33165,8 +33177,9 @@ function provideZoneChangeDetection(options) {
|
|
|
33165
33177
|
});
|
|
33166
33178
|
return makeEnvironmentProviders([
|
|
33167
33179
|
typeof ngDevMode === 'undefined' || ngDevMode
|
|
33168
|
-
? { provide: PROVIDED_NG_ZONE, useValue: true }
|
|
33180
|
+
? [{ provide: PROVIDED_NG_ZONE, useValue: true }]
|
|
33169
33181
|
: [],
|
|
33182
|
+
{ provide: ZONELESS_ENABLED, useValue: false },
|
|
33170
33183
|
zoneProviders,
|
|
33171
33184
|
]);
|
|
33172
33185
|
}
|
|
@@ -33447,9 +33460,14 @@ class PlatformRef {
|
|
|
33447
33460
|
return ngZone.run(() => {
|
|
33448
33461
|
const ignoreChangesOutsideZone = options?.ignoreChangesOutsideZone;
|
|
33449
33462
|
const moduleRef = createNgModuleRefWithProviders(moduleFactory.moduleType, this.injector, internalProvideZoneChangeDetection({ ngZoneFactory: () => ngZone, ignoreChangesOutsideZone }));
|
|
33450
|
-
if (
|
|
33451
|
-
moduleRef.injector.get(PROVIDED_NG_ZONE
|
|
33452
|
-
|
|
33463
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
33464
|
+
if (moduleRef.injector.get(PROVIDED_NG_ZONE)) {
|
|
33465
|
+
throw new RuntimeError(207 /* RuntimeErrorCode.PROVIDER_IN_WRONG_CONTEXT */, '`bootstrapModule` does not support `provideZoneChangeDetection`. Use `BootstrapOptions` instead.');
|
|
33466
|
+
}
|
|
33467
|
+
if (moduleRef.injector.get(ZONELESS_ENABLED) && options?.ngZone !== 'noop') {
|
|
33468
|
+
throw new RuntimeError(408 /* RuntimeErrorCode.PROVIDED_BOTH_ZONE_AND_ZONELESS */, 'Invalid change detection configuration: ' +
|
|
33469
|
+
"`ngZone: 'noop'` must be set in `BootstrapOptions` with provideExperimentalZonelessChangeDetection.");
|
|
33470
|
+
}
|
|
33453
33471
|
}
|
|
33454
33472
|
const exceptionHandler = moduleRef.injector.get(ErrorHandler, null);
|
|
33455
33473
|
if ((typeof ngDevMode === 'undefined' || ngDevMode) && exceptionHandler === null) {
|
|
@@ -33684,6 +33702,138 @@ function runPlatformInitializers(injector) {
|
|
|
33684
33702
|
inits?.forEach((init) => init());
|
|
33685
33703
|
}
|
|
33686
33704
|
|
|
33705
|
+
/**
|
|
33706
|
+
* Used to periodically verify no expressions have changed after they were checked.
|
|
33707
|
+
*
|
|
33708
|
+
* @param options Used to configure when the check will execute.
|
|
33709
|
+
* - `interval` will periodically run exhaustive `checkNoChanges` on application views
|
|
33710
|
+
* - `useNgZoneOnStable` will us ZoneJS to determine when change detection might have run
|
|
33711
|
+
* in an application using ZoneJS to drive change detection. When the `NgZone.onStable` would
|
|
33712
|
+
* have emit, all views attached to the `ApplicationRef` are checked for changes.
|
|
33713
|
+
* - 'exhaustive' means that all views attached to `ApplicationRef` and all the descendants of those views will be
|
|
33714
|
+
* checked for changes (excluding those subtrees which are detached via `ChangeDetectorRef.detach()`).
|
|
33715
|
+
* This is useful because the check that runs after regular change detection does not work for components using `ChangeDetectionStrategy.OnPush`.
|
|
33716
|
+
* This check is will surface any existing errors hidden by `OnPush` components. By default, this check is exhaustive
|
|
33717
|
+
* and will always check all views, regardless of their "dirty" state and `ChangeDetectionStrategy`.
|
|
33718
|
+
*
|
|
33719
|
+
* When the `useNgZoneOnStable` option is `true`, this function will provide its own `NgZone` implementation and needs
|
|
33720
|
+
* to come after any other `NgZone` provider, including `provideZoneChangeDetection()` and `provideExperimentalZonelessChangeDetection()`.
|
|
33721
|
+
*
|
|
33722
|
+
* @experimental
|
|
33723
|
+
* @publicApi
|
|
33724
|
+
*/
|
|
33725
|
+
function provideExperimentalCheckNoChangesForDebug(options) {
|
|
33726
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
33727
|
+
if (options.interval === undefined && !options.useNgZoneOnStable) {
|
|
33728
|
+
throw new Error('Must provide one of `useNgZoneOnStable` or `interval`');
|
|
33729
|
+
}
|
|
33730
|
+
const checkNoChangesMode = options?.exhaustive === false
|
|
33731
|
+
? CheckNoChangesMode.OnlyDirtyViews
|
|
33732
|
+
: CheckNoChangesMode.Exhaustive;
|
|
33733
|
+
return makeEnvironmentProviders([
|
|
33734
|
+
options?.useNgZoneOnStable
|
|
33735
|
+
? { provide: NgZone, useFactory: () => new DebugNgZoneForCheckNoChanges(checkNoChangesMode) }
|
|
33736
|
+
: [],
|
|
33737
|
+
options?.interval !== undefined
|
|
33738
|
+
? exhaustiveCheckNoChangesInterval(options.interval, checkNoChangesMode)
|
|
33739
|
+
: [],
|
|
33740
|
+
{
|
|
33741
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
33742
|
+
multi: true,
|
|
33743
|
+
useValue: () => {
|
|
33744
|
+
if (options?.useNgZoneOnStable &&
|
|
33745
|
+
!(inject(NgZone) instanceof DebugNgZoneForCheckNoChanges)) {
|
|
33746
|
+
throw new Error('`provideCheckNoChangesForDebug` with `useNgZoneOnStable` must be after any other provider for `NgZone`.');
|
|
33747
|
+
}
|
|
33748
|
+
},
|
|
33749
|
+
},
|
|
33750
|
+
]);
|
|
33751
|
+
}
|
|
33752
|
+
else {
|
|
33753
|
+
return makeEnvironmentProviders([]);
|
|
33754
|
+
}
|
|
33755
|
+
}
|
|
33756
|
+
class DebugNgZoneForCheckNoChanges extends NgZone {
|
|
33757
|
+
constructor(checkNoChangesMode) {
|
|
33758
|
+
const zonelessEnabled = inject(ZONELESS_ENABLED);
|
|
33759
|
+
// Use coalsecing to ensure we aren't ever running this check synchronously
|
|
33760
|
+
super({
|
|
33761
|
+
shouldCoalesceEventChangeDetection: true,
|
|
33762
|
+
shouldCoalesceRunChangeDetection: zonelessEnabled,
|
|
33763
|
+
});
|
|
33764
|
+
this.checkNoChangesMode = checkNoChangesMode;
|
|
33765
|
+
this.injector = inject(EnvironmentInjector);
|
|
33766
|
+
if (zonelessEnabled) {
|
|
33767
|
+
// prevent emits to ensure code doesn't rely on these
|
|
33768
|
+
this.onMicrotaskEmpty.emit = () => { };
|
|
33769
|
+
this.onStable.emit = () => {
|
|
33770
|
+
this.scheduler ||= this.injector.get(ChangeDetectionSchedulerImpl);
|
|
33771
|
+
if (this.scheduler.pendingRenderTaskId || this.scheduler.runningTick) {
|
|
33772
|
+
return;
|
|
33773
|
+
}
|
|
33774
|
+
this.checkApplicationViews();
|
|
33775
|
+
};
|
|
33776
|
+
this.onUnstable.emit = () => { };
|
|
33777
|
+
}
|
|
33778
|
+
else {
|
|
33779
|
+
this.runOutsideAngular(() => {
|
|
33780
|
+
this.onStable.subscribe(() => {
|
|
33781
|
+
this.checkApplicationViews();
|
|
33782
|
+
});
|
|
33783
|
+
});
|
|
33784
|
+
}
|
|
33785
|
+
}
|
|
33786
|
+
checkApplicationViews() {
|
|
33787
|
+
this.applicationRef ||= this.injector.get(ApplicationRef);
|
|
33788
|
+
for (const view of this.applicationRef.allViews) {
|
|
33789
|
+
try {
|
|
33790
|
+
checkNoChangesInternal(view._lView, this.checkNoChangesMode, view.notifyErrorHandler);
|
|
33791
|
+
}
|
|
33792
|
+
catch (e) {
|
|
33793
|
+
this.errorHandler ||= this.injector.get(ErrorHandler);
|
|
33794
|
+
this.errorHandler.handleError(e);
|
|
33795
|
+
}
|
|
33796
|
+
}
|
|
33797
|
+
}
|
|
33798
|
+
}
|
|
33799
|
+
function exhaustiveCheckNoChangesInterval(interval, checkNoChangesMode) {
|
|
33800
|
+
return {
|
|
33801
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
33802
|
+
multi: true,
|
|
33803
|
+
useFactory: () => {
|
|
33804
|
+
const applicationRef = inject(ApplicationRef);
|
|
33805
|
+
const errorHandler = inject(ErrorHandler);
|
|
33806
|
+
const scheduler = inject(ChangeDetectionSchedulerImpl);
|
|
33807
|
+
const ngZone = inject(NgZone);
|
|
33808
|
+
return () => {
|
|
33809
|
+
function scheduleCheckNoChanges() {
|
|
33810
|
+
ngZone.runOutsideAngular(() => {
|
|
33811
|
+
setTimeout(() => {
|
|
33812
|
+
if (applicationRef.destroyed) {
|
|
33813
|
+
return;
|
|
33814
|
+
}
|
|
33815
|
+
if (scheduler.pendingRenderTaskId || scheduler.runningTick) {
|
|
33816
|
+
scheduleCheckNoChanges();
|
|
33817
|
+
return;
|
|
33818
|
+
}
|
|
33819
|
+
for (const view of applicationRef.allViews) {
|
|
33820
|
+
try {
|
|
33821
|
+
checkNoChangesInternal(view._lView, checkNoChangesMode, view.notifyErrorHandler);
|
|
33822
|
+
}
|
|
33823
|
+
catch (e) {
|
|
33824
|
+
errorHandler.handleError(e);
|
|
33825
|
+
}
|
|
33826
|
+
}
|
|
33827
|
+
scheduleCheckNoChanges();
|
|
33828
|
+
}, interval);
|
|
33829
|
+
});
|
|
33830
|
+
}
|
|
33831
|
+
scheduleCheckNoChanges();
|
|
33832
|
+
};
|
|
33833
|
+
},
|
|
33834
|
+
};
|
|
33835
|
+
}
|
|
33836
|
+
|
|
33687
33837
|
/**
|
|
33688
33838
|
* Returns whether Angular is in development mode.
|
|
33689
33839
|
*
|
|
@@ -36279,7 +36429,7 @@ function internalCreateApplication(config) {
|
|
|
36279
36429
|
const platformInjector = createOrReusePlatformInjector(platformProviders);
|
|
36280
36430
|
// Create root application injector based on a set of providers configured at the platform
|
|
36281
36431
|
// bootstrap level as well as providers passed to the bootstrap call by a user.
|
|
36282
|
-
const allAppProviders = [
|
|
36432
|
+
const allAppProviders = [internalProvideZoneChangeDetection({}), ...(appProviders || [])];
|
|
36283
36433
|
const adapter = new EnvironmentNgModuleRefAdapter({
|
|
36284
36434
|
providers: allAppProviders,
|
|
36285
36435
|
parent: platformInjector,
|
|
@@ -36293,8 +36443,14 @@ function internalCreateApplication(config) {
|
|
|
36293
36443
|
return ngZone.run(() => {
|
|
36294
36444
|
envInjector.resolveInjectorInitializers();
|
|
36295
36445
|
const exceptionHandler = envInjector.get(ErrorHandler, null);
|
|
36296
|
-
if (
|
|
36297
|
-
|
|
36446
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
36447
|
+
if (!exceptionHandler) {
|
|
36448
|
+
throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, 'No `ErrorHandler` found in the Dependency Injection tree.');
|
|
36449
|
+
}
|
|
36450
|
+
if (envInjector.get(PROVIDED_ZONELESS) && envInjector.get(PROVIDED_NG_ZONE)) {
|
|
36451
|
+
throw new RuntimeError(408 /* RuntimeErrorCode.PROVIDED_BOTH_ZONE_AND_ZONELESS */, 'Invalid change detection configuration: ' +
|
|
36452
|
+
'provideZoneChangeDetection and provideExperimentalZonelessChangeDetection cannot be used together.');
|
|
36453
|
+
}
|
|
36298
36454
|
}
|
|
36299
36455
|
let onErrorSubscription;
|
|
36300
36456
|
ngZone.runOutsideAngular(() => {
|
|
@@ -36375,6 +36531,12 @@ function getDeferBlocks(lView, deferBlocks) {
|
|
|
36375
36531
|
|
|
36376
36532
|
const EVENT_REPLAY_ENABLED_DEFAULT = false;
|
|
36377
36533
|
const CONTRACT_PROPERTY = 'ngContracts';
|
|
36534
|
+
// TODO: Upstream this back into event-dispatch.
|
|
36535
|
+
function getJsactionData(container) {
|
|
36536
|
+
return container._ejsa;
|
|
36537
|
+
}
|
|
36538
|
+
const JSACTION_ATTRIBUTE = 'jsaction';
|
|
36539
|
+
const jsactionMap = new Map();
|
|
36378
36540
|
/**
|
|
36379
36541
|
* Returns a set of providers required to setup support for event replay.
|
|
36380
36542
|
* Requires hydration to be enabled separately.
|
|
@@ -36385,6 +36547,26 @@ function withEventReplay() {
|
|
|
36385
36547
|
provide: IS_EVENT_REPLAY_ENABLED,
|
|
36386
36548
|
useValue: true,
|
|
36387
36549
|
},
|
|
36550
|
+
{
|
|
36551
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
36552
|
+
useValue: () => {
|
|
36553
|
+
setDisableEventReplayImpl((rEl, eventName, listenerFn) => {
|
|
36554
|
+
if (rEl.hasAttribute(JSACTION_ATTRIBUTE)) {
|
|
36555
|
+
const el = unwrapRNode(rEl);
|
|
36556
|
+
// We don't immediately remove the attribute here because
|
|
36557
|
+
// we need it for replay that happens after hydration.
|
|
36558
|
+
if (!jsactionMap.has(el)) {
|
|
36559
|
+
jsactionMap.set(el, new Map());
|
|
36560
|
+
}
|
|
36561
|
+
if (!jsactionMap.get(el).has(eventName)) {
|
|
36562
|
+
jsactionMap.get(el).set(eventName, []);
|
|
36563
|
+
}
|
|
36564
|
+
jsactionMap.get(el).get(eventName).push(listenerFn);
|
|
36565
|
+
}
|
|
36566
|
+
});
|
|
36567
|
+
},
|
|
36568
|
+
multi: true,
|
|
36569
|
+
},
|
|
36388
36570
|
{
|
|
36389
36571
|
provide: APP_BOOTSTRAP_LISTENER,
|
|
36390
36572
|
useFactory: () => {
|
|
@@ -36400,12 +36582,30 @@ function withEventReplay() {
|
|
|
36400
36582
|
// This is set in packages/platform-server/src/utils.ts
|
|
36401
36583
|
// Note: globalThis[CONTRACT_PROPERTY] may be undefined in case Event Replay feature
|
|
36402
36584
|
// is enabled, but there are no events configured in an application.
|
|
36403
|
-
const
|
|
36404
|
-
|
|
36405
|
-
|
|
36406
|
-
|
|
36407
|
-
|
|
36585
|
+
const container = globalThis[CONTRACT_PROPERTY]?.[appId];
|
|
36586
|
+
const earlyJsactionData = getJsactionData(container);
|
|
36587
|
+
if (earlyJsactionData) {
|
|
36588
|
+
const eventContract = new EventContract(new EventContractContainer(earlyJsactionData.c));
|
|
36589
|
+
for (const et of earlyJsactionData.et) {
|
|
36590
|
+
eventContract.addEvent(et);
|
|
36591
|
+
}
|
|
36592
|
+
for (const et of earlyJsactionData.etc) {
|
|
36593
|
+
eventContract.addEvent(et);
|
|
36594
|
+
}
|
|
36595
|
+
eventContract.replayEarlyEvents(container);
|
|
36596
|
+
const dispatcher = new Dispatcher(() => { }, {
|
|
36597
|
+
eventReplayer: (queue) => {
|
|
36598
|
+
for (const event of queue) {
|
|
36599
|
+
handleEvent(event);
|
|
36600
|
+
}
|
|
36601
|
+
jsactionMap.clear();
|
|
36602
|
+
queue.length = 0;
|
|
36603
|
+
},
|
|
36604
|
+
});
|
|
36408
36605
|
registerDispatcher(eventContract, dispatcher);
|
|
36606
|
+
for (const el of jsactionMap.keys()) {
|
|
36607
|
+
el.removeAttribute(JSACTION_ATTRIBUTE);
|
|
36608
|
+
}
|
|
36409
36609
|
}
|
|
36410
36610
|
});
|
|
36411
36611
|
};
|
|
@@ -36434,6 +36634,12 @@ function collectDomEventsInfo(tView, lView, eventTypesToReplay) {
|
|
|
36434
36634
|
continue;
|
|
36435
36635
|
}
|
|
36436
36636
|
const name = firstParam;
|
|
36637
|
+
if (name === 'mouseenter' ||
|
|
36638
|
+
name === 'mouseleave' ||
|
|
36639
|
+
name === 'pointerenter' ||
|
|
36640
|
+
name === 'pointerleave') {
|
|
36641
|
+
continue;
|
|
36642
|
+
}
|
|
36437
36643
|
eventTypesToReplay.add(name);
|
|
36438
36644
|
const listenerElement = unwrapRNode(lView[secondParam]);
|
|
36439
36645
|
i++; // move the cursor to the next position (location of the listener idx)
|
|
@@ -36460,81 +36666,19 @@ function setJSActionAttribute(tNode, rNode, nativeElementToEvents) {
|
|
|
36460
36666
|
const events = nativeElementToEvents.get(nativeElement) ?? [];
|
|
36461
36667
|
const parts = events.map((event) => `${event}:`);
|
|
36462
36668
|
if (parts.length > 0) {
|
|
36463
|
-
nativeElement.setAttribute(
|
|
36669
|
+
nativeElement.setAttribute(JSACTION_ATTRIBUTE, parts.join(';'));
|
|
36464
36670
|
}
|
|
36465
36671
|
}
|
|
36466
36672
|
}
|
|
36467
|
-
/**
|
|
36468
|
-
* Registers a function that should be invoked to replay events.
|
|
36469
|
-
*/
|
|
36470
|
-
function setEventReplayer(dispatcher) {
|
|
36471
|
-
dispatcher.setEventReplayer((queue) => {
|
|
36472
|
-
for (const event of queue) {
|
|
36473
|
-
handleEvent(event);
|
|
36474
|
-
}
|
|
36475
|
-
});
|
|
36476
|
-
}
|
|
36477
|
-
/**
|
|
36478
|
-
* Finds an LView that a given DOM element belongs to.
|
|
36479
|
-
*/
|
|
36480
|
-
function getLViewByElement(target) {
|
|
36481
|
-
let lView = readLView(target);
|
|
36482
|
-
if (lView) {
|
|
36483
|
-
return lView;
|
|
36484
|
-
}
|
|
36485
|
-
else {
|
|
36486
|
-
// If this node doesn't have LView info attached, then we need to
|
|
36487
|
-
// traverse upwards up the DOM to find the nearest element that
|
|
36488
|
-
// has already been monkey patched with data.
|
|
36489
|
-
let parent = target;
|
|
36490
|
-
while ((parent = parent.parentNode)) {
|
|
36491
|
-
lView = readLView(parent);
|
|
36492
|
-
if (lView) {
|
|
36493
|
-
// To prevent additional lookups, monkey-patch LView id onto this DOM node.
|
|
36494
|
-
// TODO: consider patching all parent nodes that didn't have LView id, so that
|
|
36495
|
-
// we can avoid lookups for more nodes.
|
|
36496
|
-
attachLViewId(target, lView);
|
|
36497
|
-
return lView;
|
|
36498
|
-
}
|
|
36499
|
-
}
|
|
36500
|
-
}
|
|
36501
|
-
return null;
|
|
36502
|
-
}
|
|
36503
36673
|
function handleEvent(event) {
|
|
36504
|
-
const nativeElement = event.getAction().element;
|
|
36505
|
-
|
|
36506
|
-
if (
|
|
36507
|
-
|
|
36508
|
-
if (lView !== null) {
|
|
36509
|
-
const tView = lView[TVIEW];
|
|
36510
|
-
const eventName = event.getEventType();
|
|
36511
|
-
const origEvent = event.getEvent();
|
|
36512
|
-
const listeners = getEventListeners(tView, lView, nativeElement, eventName);
|
|
36513
|
-
for (const listener of listeners) {
|
|
36514
|
-
listener(origEvent);
|
|
36515
|
-
}
|
|
36516
|
-
}
|
|
36674
|
+
const nativeElement = unwrapRNode(event.getAction().element);
|
|
36675
|
+
const handlerFns = jsactionMap.get(nativeElement)?.get(event.getEventType());
|
|
36676
|
+
if (!handlerFns) {
|
|
36677
|
+
return;
|
|
36517
36678
|
}
|
|
36518
|
-
|
|
36519
|
-
|
|
36520
|
-
const listeners = [];
|
|
36521
|
-
const lCleanup = lView[CLEANUP];
|
|
36522
|
-
const tCleanup = tView.cleanup;
|
|
36523
|
-
if (tCleanup && lCleanup) {
|
|
36524
|
-
for (let i = 0; i < tCleanup.length;) {
|
|
36525
|
-
const storedEventName = tCleanup[i++];
|
|
36526
|
-
const nativeElementIndex = tCleanup[i++];
|
|
36527
|
-
if (typeof storedEventName === 'string') {
|
|
36528
|
-
const listenerElement = unwrapRNode(lView[nativeElementIndex]);
|
|
36529
|
-
const listener = lCleanup[tCleanup[i++]];
|
|
36530
|
-
i++; // increment to the next position;
|
|
36531
|
-
if (listenerElement === nativeElement && eventName === storedEventName) {
|
|
36532
|
-
listeners.push(listener);
|
|
36533
|
-
}
|
|
36534
|
-
}
|
|
36535
|
-
}
|
|
36679
|
+
for (const handler of handlerFns) {
|
|
36680
|
+
handler(event.getEvent());
|
|
36536
36681
|
}
|
|
36537
|
-
return listeners;
|
|
36538
36682
|
}
|
|
36539
36683
|
|
|
36540
36684
|
/**
|
|
@@ -37473,8 +37617,7 @@ function ɵɵngDeclarePipe(decl) {
|
|
|
37473
37617
|
return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵpipe.js`, decl);
|
|
37474
37618
|
}
|
|
37475
37619
|
|
|
37476
|
-
//
|
|
37477
|
-
// clang-format on
|
|
37620
|
+
// we reexport these symbols just so that they are retained during the dead code elimination
|
|
37478
37621
|
|
|
37479
37622
|
/**
|
|
37480
37623
|
* Create a computed `Signal` which derives a reactive value from an expression.
|
|
@@ -37664,9 +37807,6 @@ function effect(effectFn, options) {
|
|
|
37664
37807
|
return handle;
|
|
37665
37808
|
}
|
|
37666
37809
|
|
|
37667
|
-
// clang-format off
|
|
37668
|
-
// clang-format on
|
|
37669
|
-
|
|
37670
37810
|
// This file exists to allow the set of reactivity exports to be modified in g3, as these APIs are
|
|
37671
37811
|
|
|
37672
37812
|
/**
|
|
@@ -37853,5 +37993,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
|
37853
37993
|
* Generated bundle index. Do not edit.
|
|
37854
37994
|
*/
|
|
37855
37995
|
|
|
37856
|
-
export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, ExperimentalPendingTasks, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, afterNextRender, afterRender, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideExperimentalZonelessChangeDetection, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderEventManager as ɵAfterRenderEventManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, PendingTasks as ɵPendingTasks, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalAfterNextRender as ɵinternalAfterNextRender, internalCreateApplication as ɵinternalCreateApplication, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, queueStateUpdate as ɵqueueStateUpdate, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, whenStable as ɵwhenStable, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, ɵɵCopyDefinitionFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵStandaloneFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
|
|
37996
|
+
export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, ExperimentalPendingTasks, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, Renderer2, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, afterNextRender, afterRender, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderEventManager as ɵAfterRenderEventManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, PendingTasks as ɵPendingTasks, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalAfterNextRender as ɵinternalAfterNextRender, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, queueStateUpdate as ɵqueueStateUpdate, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, whenStable as ɵwhenStable, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, ɵɵCopyDefinitionFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵStandaloneFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };
|
|
37857
37997
|
//# sourceMappingURL=core.mjs.map
|