@angular/core 17.0.0-next.4 → 17.0.0-next.5
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/src/core.mjs +2 -2
- package/esm2022/src/core_private_export.mjs +3 -1
- package/esm2022/src/core_render3_private_export.mjs +3 -2
- package/esm2022/src/errors.mjs +1 -1
- package/esm2022/src/metadata/ng_module_def.mjs +1 -1
- package/esm2022/src/render3/after_render_hooks.mjs +100 -13
- package/esm2022/src/render3/deps_tracker/api.mjs +1 -1
- package/esm2022/src/render3/deps_tracker/deps_tracker.mjs +13 -3
- package/esm2022/src/render3/index.mjs +2 -2
- package/esm2022/src/render3/instructions/defer.mjs +121 -40
- package/esm2022/src/render3/interfaces/defer.mjs +66 -1
- package/esm2022/src/render3/interfaces/definition.mjs +1 -1
- package/esm2022/src/render3/local_compilation.mjs +8 -2
- package/esm2022/src/render3/reactive_lview_consumer.mjs +1 -1
- package/esm2022/src/render3/reactivity/effect.mjs +3 -15
- package/esm2022/src/render3/scope.mjs +10 -4
- package/esm2022/src/signals/src/api.mjs +2 -2
- package/esm2022/src/signals/src/computed.mjs +50 -45
- package/esm2022/src/signals/src/graph.mjs +7 -2
- package/esm2022/src/signals/src/signal.mjs +11 -6
- package/esm2022/src/signals/src/watch.mjs +40 -12
- package/esm2022/src/version.mjs +1 -1
- package/esm2022/testing/src/component_fixture.mjs +17 -2
- package/esm2022/testing/src/defer.mjs +84 -0
- package/esm2022/testing/src/logger.mjs +3 -3
- package/esm2022/testing/src/test_bed.mjs +12 -2
- package/esm2022/testing/src/test_bed_common.mjs +1 -1
- package/esm2022/testing/src/test_bed_compiler.mjs +5 -2
- package/esm2022/testing/src/testing.mjs +3 -1
- package/fesm2022/core.mjs +415 -132
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/testing.mjs +107 -3
- package/fesm2022/testing.mjs.map +1 -1
- package/index.d.ts +202 -8
- package/package.json +3 -3
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/migrations/guard-and-resolve-interfaces/bundle.js +13 -13
- package/schematics/migrations/remove-module-id/bundle.js +14 -14
- package/schematics/ng-generate/standalone-migration/bundle.js +1890 -1155
- package/schematics/ng-generate/standalone-migration/bundle.js.map +4 -4
- package/testing/index.d.ts +41 -1
package/fesm2022/core.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v17.0.0-next.
|
|
2
|
+
* @license Angular v17.0.0-next.5
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -2264,7 +2264,7 @@ function getFactoryDef(type, throwNotFound) {
|
|
|
2264
2264
|
*
|
|
2265
2265
|
* This can be used to auto-unwrap signals in various cases, or to auto-wrap non-signal values.
|
|
2266
2266
|
*/
|
|
2267
|
-
const SIGNAL = Symbol('SIGNAL');
|
|
2267
|
+
const SIGNAL = /* @__PURE__ */ Symbol('SIGNAL');
|
|
2268
2268
|
/**
|
|
2269
2269
|
* Checks if the given `value` is a reactive `Signal`.
|
|
2270
2270
|
*
|
|
@@ -2445,7 +2445,9 @@ function consumerAfterComputation(node, prevConsumer) {
|
|
|
2445
2445
|
}
|
|
2446
2446
|
}
|
|
2447
2447
|
// Truncate the producer tracking arrays.
|
|
2448
|
-
|
|
2448
|
+
// Perf note: this is essentially truncating the length to `node.nextProducerIndex`, but
|
|
2449
|
+
// benchmarking has shown that individual pop operations are faster.
|
|
2450
|
+
while (node.producerNode.length > node.nextProducerIndex) {
|
|
2449
2451
|
node.producerNode.pop();
|
|
2450
2452
|
node.producerLastReadVersion.pop();
|
|
2451
2453
|
node.producerIndexOfThis.pop();
|
|
@@ -2519,6 +2521,9 @@ function producerAddLiveConsumer(node, consumer, indexOfThis) {
|
|
|
2519
2521
|
function producerRemoveLiveConsumerAtIndex(node, idx) {
|
|
2520
2522
|
assertProducerNode(node);
|
|
2521
2523
|
assertConsumerNode(node);
|
|
2524
|
+
if (typeof ngDevMode !== 'undefined' && ngDevMode && idx >= node.liveConsumerNode.length) {
|
|
2525
|
+
throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`);
|
|
2526
|
+
}
|
|
2522
2527
|
if (node.liveConsumerNode.length === 1) {
|
|
2523
2528
|
// When removing the last live consumer, we will no longer be live. We need to remove
|
|
2524
2529
|
// ourselves from our producers' tracking (which may cause consumer-producers to lose
|
|
@@ -2583,60 +2588,65 @@ function computed(computation, options) {
|
|
|
2583
2588
|
* A dedicated symbol used before a computed value has been calculated for the first time.
|
|
2584
2589
|
* Explicitly typed as `any` so we can use it as signal's value.
|
|
2585
2590
|
*/
|
|
2586
|
-
const UNSET = Symbol('UNSET');
|
|
2591
|
+
const UNSET = /* @__PURE__ */ Symbol('UNSET');
|
|
2587
2592
|
/**
|
|
2588
2593
|
* A dedicated symbol used in place of a computed signal value to indicate that a given computation
|
|
2589
2594
|
* is in progress. Used to detect cycles in computation chains.
|
|
2590
2595
|
* Explicitly typed as `any` so we can use it as signal's value.
|
|
2591
2596
|
*/
|
|
2592
|
-
const COMPUTING = Symbol('COMPUTING');
|
|
2597
|
+
const COMPUTING = /* @__PURE__ */ Symbol('COMPUTING');
|
|
2593
2598
|
/**
|
|
2594
2599
|
* A dedicated symbol used in place of a computed signal value to indicate that a given computation
|
|
2595
2600
|
* failed. The thrown error is cached until the computation gets dirty again.
|
|
2596
2601
|
* Explicitly typed as `any` so we can use it as signal's value.
|
|
2597
2602
|
*/
|
|
2598
|
-
const ERRORED = Symbol('ERRORED');
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
}
|
|
2603
|
+
const ERRORED = /* @__PURE__ */ Symbol('ERRORED');
|
|
2604
|
+
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
2605
|
+
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
2606
|
+
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
2607
|
+
const COMPUTED_NODE = /* @__PURE__ */ (() => {
|
|
2608
|
+
return {
|
|
2609
|
+
...REACTIVE_NODE,
|
|
2610
|
+
value: UNSET,
|
|
2611
|
+
dirty: true,
|
|
2612
|
+
error: null,
|
|
2613
|
+
equal: defaultEquals,
|
|
2614
|
+
producerMustRecompute(node) {
|
|
2615
|
+
// Force a recomputation if there's no current value, or if the current value is in the
|
|
2616
|
+
// process of being calculated (which should throw an error).
|
|
2617
|
+
return node.value === UNSET || node.value === COMPUTING;
|
|
2618
|
+
},
|
|
2619
|
+
producerRecomputeValue(node) {
|
|
2620
|
+
if (node.value === COMPUTING) {
|
|
2621
|
+
// Our computation somehow led to a cyclic read of itself.
|
|
2622
|
+
throw new Error('Detected cycle in computations.');
|
|
2623
|
+
}
|
|
2624
|
+
const oldValue = node.value;
|
|
2625
|
+
node.value = COMPUTING;
|
|
2626
|
+
const prevConsumer = consumerBeforeComputation(node);
|
|
2627
|
+
let newValue;
|
|
2628
|
+
try {
|
|
2629
|
+
newValue = node.computation();
|
|
2630
|
+
}
|
|
2631
|
+
catch (err) {
|
|
2632
|
+
newValue = ERRORED;
|
|
2633
|
+
node.error = err;
|
|
2634
|
+
}
|
|
2635
|
+
finally {
|
|
2636
|
+
consumerAfterComputation(node, prevConsumer);
|
|
2637
|
+
}
|
|
2638
|
+
if (oldValue !== UNSET && oldValue !== ERRORED && newValue !== ERRORED &&
|
|
2639
|
+
node.equal(oldValue, newValue)) {
|
|
2640
|
+
// No change to `valueVersion` - old and new values are
|
|
2641
|
+
// semantically equivalent.
|
|
2642
|
+
node.value = oldValue;
|
|
2643
|
+
return;
|
|
2644
|
+
}
|
|
2645
|
+
node.value = newValue;
|
|
2646
|
+
node.version++;
|
|
2647
|
+
},
|
|
2648
|
+
};
|
|
2649
|
+
})();
|
|
2640
2650
|
|
|
2641
2651
|
function defaultThrowError() {
|
|
2642
2652
|
throw new Error();
|
|
@@ -2681,11 +2691,16 @@ function setPostSignalSetFn(fn) {
|
|
|
2681
2691
|
postSignalSetFn = fn;
|
|
2682
2692
|
return prev;
|
|
2683
2693
|
}
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2694
|
+
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
2695
|
+
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
2696
|
+
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
2697
|
+
const SIGNAL_NODE = /* @__PURE__ */ (() => {
|
|
2698
|
+
return {
|
|
2699
|
+
...REACTIVE_NODE,
|
|
2700
|
+
equal: defaultEquals,
|
|
2701
|
+
readonlyFn: undefined,
|
|
2702
|
+
};
|
|
2703
|
+
})();
|
|
2689
2704
|
function signalValueChanged(node) {
|
|
2690
2705
|
node.version++;
|
|
2691
2706
|
producerNotifyConsumers(node);
|
|
@@ -2754,7 +2769,27 @@ function watch(fn, schedule, allowSignalWrites) {
|
|
|
2754
2769
|
const registerOnCleanup = (cleanupFn) => {
|
|
2755
2770
|
node.cleanupFn = cleanupFn;
|
|
2756
2771
|
};
|
|
2772
|
+
function isWatchNodeDestroyed(node) {
|
|
2773
|
+
return node.fn === null && node.schedule === null;
|
|
2774
|
+
}
|
|
2775
|
+
function destroyWatchNode(node) {
|
|
2776
|
+
if (!isWatchNodeDestroyed(node)) {
|
|
2777
|
+
consumerDestroy(node); // disconnect watcher from the reactive graph
|
|
2778
|
+
node.cleanupFn();
|
|
2779
|
+
// nullify references to the integration functions to mark node as destroyed
|
|
2780
|
+
node.fn = null;
|
|
2781
|
+
node.schedule = null;
|
|
2782
|
+
node.cleanupFn = NOOP_CLEANUP_FN;
|
|
2783
|
+
}
|
|
2784
|
+
}
|
|
2757
2785
|
const run = () => {
|
|
2786
|
+
if (node.fn === null) {
|
|
2787
|
+
// trying to run a destroyed watch is noop
|
|
2788
|
+
return;
|
|
2789
|
+
}
|
|
2790
|
+
if (isInNotificationPhase()) {
|
|
2791
|
+
throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);
|
|
2792
|
+
}
|
|
2758
2793
|
node.dirty = false;
|
|
2759
2794
|
if (node.hasRun && !consumerPollProducersForChange(node)) {
|
|
2760
2795
|
return;
|
|
@@ -2774,20 +2809,28 @@ function watch(fn, schedule, allowSignalWrites) {
|
|
|
2774
2809
|
notify: () => consumerMarkDirty(node),
|
|
2775
2810
|
run,
|
|
2776
2811
|
cleanup: () => node.cleanupFn(),
|
|
2812
|
+
destroy: () => destroyWatchNode(node),
|
|
2777
2813
|
};
|
|
2778
2814
|
return node.ref;
|
|
2779
2815
|
}
|
|
2780
2816
|
const NOOP_CLEANUP_FN = () => { };
|
|
2781
|
-
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2817
|
+
// Note: Using an IIFE here to ensure that the spread assignment is not considered
|
|
2818
|
+
// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.
|
|
2819
|
+
// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.
|
|
2820
|
+
const WATCH_NODE = /* @__PURE__ */ (() => {
|
|
2821
|
+
return {
|
|
2822
|
+
...REACTIVE_NODE,
|
|
2823
|
+
consumerIsAlwaysLive: true,
|
|
2824
|
+
consumerAllowSignalWrites: false,
|
|
2825
|
+
consumerMarkedDirty: (node) => {
|
|
2826
|
+
if (node.schedule !== null) {
|
|
2827
|
+
node.schedule(node.ref);
|
|
2828
|
+
}
|
|
2829
|
+
},
|
|
2830
|
+
hasRun: false,
|
|
2831
|
+
cleanupFn: NOOP_CLEANUP_FN,
|
|
2832
|
+
};
|
|
2833
|
+
})();
|
|
2791
2834
|
|
|
2792
2835
|
function setAlternateWeakRefImpl(impl) {
|
|
2793
2836
|
// TODO: remove this function
|
|
@@ -7320,12 +7363,13 @@ class DepsTracker {
|
|
|
7320
7363
|
dependencies: [
|
|
7321
7364
|
...scope.compilation.directives,
|
|
7322
7365
|
...scope.compilation.pipes,
|
|
7366
|
+
...scope.compilation.ngModules,
|
|
7323
7367
|
]
|
|
7324
7368
|
};
|
|
7325
7369
|
}
|
|
7326
7370
|
else {
|
|
7327
7371
|
if (!this.ownerNgModule.has(type)) {
|
|
7328
|
-
|
|
7372
|
+
throw new RuntimeError(1001 /* RuntimeErrorCode.RUNTIME_DEPS_ORPHAN_COMPONENT */, `Orphan component found! Trying to render the component ${type.name} without first loading the NgModule that declares it. Make sure that you import the component's NgModule in the NgModule or the standalone component in which you are trying to render this component. Also make sure the way the app is bundled and served always includes the component's NgModule before the component.`);
|
|
7329
7373
|
}
|
|
7330
7374
|
const scope = this.getNgModuleScope(this.ownerNgModule.get(type));
|
|
7331
7375
|
if (scope.compilation.isPoisoned) {
|
|
@@ -7432,6 +7476,12 @@ class DepsTracker {
|
|
|
7432
7476
|
// check for it.
|
|
7433
7477
|
addSet(exportedScope.exported.directives, scope.exported.directives);
|
|
7434
7478
|
addSet(exportedScope.exported.pipes, scope.exported.pipes);
|
|
7479
|
+
// Some test toolings which run in JIT mode depend on this behavior that the exported scope
|
|
7480
|
+
// should also be present in the compilation scope, even though AoT does not support this
|
|
7481
|
+
// and it is also in odds with NgModule metadata definitions. Without this some tests in
|
|
7482
|
+
// Google will fail.
|
|
7483
|
+
addSet(exportedScope.exported.directives, scope.compilation.directives);
|
|
7484
|
+
addSet(exportedScope.exported.pipes, scope.compilation.pipes);
|
|
7435
7485
|
}
|
|
7436
7486
|
else if (isPipe(exported)) {
|
|
7437
7487
|
scope.exported.pipes.add(exported);
|
|
@@ -7457,9 +7507,10 @@ class DepsTracker {
|
|
|
7457
7507
|
// Standalone components are always able to self-reference.
|
|
7458
7508
|
directives: new Set([type]),
|
|
7459
7509
|
pipes: new Set(),
|
|
7510
|
+
ngModules: new Set(),
|
|
7460
7511
|
},
|
|
7461
7512
|
};
|
|
7462
|
-
for (const rawImport of rawImports ?? []) {
|
|
7513
|
+
for (const rawImport of flatten(rawImports ?? [])) {
|
|
7463
7514
|
const imported = resolveForwardRef(rawImport);
|
|
7464
7515
|
try {
|
|
7465
7516
|
verifyStandaloneImport(imported, type);
|
|
@@ -7470,6 +7521,7 @@ class DepsTracker {
|
|
|
7470
7521
|
return ans;
|
|
7471
7522
|
}
|
|
7472
7523
|
if (isNgModule(imported)) {
|
|
7524
|
+
ans.compilation.ngModules.add(imported);
|
|
7473
7525
|
const importedScope = this.getNgModuleScope(imported);
|
|
7474
7526
|
// Short-circuit if an imported NgModule has corrupted exported scope.
|
|
7475
7527
|
if (importedScope.exported.isPoisoned) {
|
|
@@ -10849,7 +10901,7 @@ class Version {
|
|
|
10849
10901
|
/**
|
|
10850
10902
|
* @publicApi
|
|
10851
10903
|
*/
|
|
10852
|
-
const VERSION = new Version('17.0.0-next.
|
|
10904
|
+
const VERSION = new Version('17.0.0-next.5');
|
|
10853
10905
|
|
|
10854
10906
|
// This default value is when checking the hierarchy for a token.
|
|
10855
10907
|
//
|
|
@@ -11535,10 +11587,77 @@ function shouldBeIgnoredByZone(applyArgs) {
|
|
|
11535
11587
|
|
|
11536
11588
|
// Public API for Zone
|
|
11537
11589
|
|
|
11590
|
+
/**
|
|
11591
|
+
* The phase to run an `afterRender` or `afterNextRender` callback in.
|
|
11592
|
+
*
|
|
11593
|
+
* Callbacks in the same phase run in the order they are registered. Phases run in the
|
|
11594
|
+
* following order after each render:
|
|
11595
|
+
*
|
|
11596
|
+
* 1. `AfterRenderPhase.EarlyRead`
|
|
11597
|
+
* 2. `AfterRenderPhase.Write`
|
|
11598
|
+
* 3. `AfterRenderPhase.MixedReadWrite`
|
|
11599
|
+
* 4. `AfterRenderPhase.Read`
|
|
11600
|
+
*
|
|
11601
|
+
* Angular is unable to verify or enforce that phases are used correctly, and instead
|
|
11602
|
+
* relies on each developer to follow the guidelines documented for each value and
|
|
11603
|
+
* carefully choose the appropriate one, refactoring their code if necessary. By doing
|
|
11604
|
+
* so, Angular is better able to minimize the performance degradation associated with
|
|
11605
|
+
* manual DOM access, ensuring the best experience for the end users of your application
|
|
11606
|
+
* or library.
|
|
11607
|
+
*
|
|
11608
|
+
* @developerPreview
|
|
11609
|
+
*/
|
|
11610
|
+
var AfterRenderPhase;
|
|
11611
|
+
(function (AfterRenderPhase) {
|
|
11612
|
+
/**
|
|
11613
|
+
* Use `AfterRenderPhase.EarlyRead` for callbacks that only need to **read** from the
|
|
11614
|
+
* DOM before a subsequent `AfterRenderPhase.Write` callback, for example to perform
|
|
11615
|
+
* custom layout that the browser doesn't natively support. **Never** use this phase
|
|
11616
|
+
* for callbacks that can write to the DOM or when `AfterRenderPhase.Read` is adequate.
|
|
11617
|
+
*
|
|
11618
|
+
* <div class="alert is-important">
|
|
11619
|
+
*
|
|
11620
|
+
* Using this value can degrade performance.
|
|
11621
|
+
* Instead, prefer using built-in browser functionality when possible.
|
|
11622
|
+
*
|
|
11623
|
+
* </div>
|
|
11624
|
+
*/
|
|
11625
|
+
AfterRenderPhase[AfterRenderPhase["EarlyRead"] = 0] = "EarlyRead";
|
|
11626
|
+
/**
|
|
11627
|
+
* Use `AfterRenderPhase.Write` for callbacks that only **write** to the DOM. **Never**
|
|
11628
|
+
* use this phase for callbacks that can read from the DOM.
|
|
11629
|
+
*/
|
|
11630
|
+
AfterRenderPhase[AfterRenderPhase["Write"] = 1] = "Write";
|
|
11631
|
+
/**
|
|
11632
|
+
* Use `AfterRenderPhase.MixedReadWrite` for callbacks that read from or write to the
|
|
11633
|
+
* DOM, that haven't been refactored to use a different phase. **Never** use this phase
|
|
11634
|
+
* for callbacks that can use a different phase instead.
|
|
11635
|
+
*
|
|
11636
|
+
* <div class="alert is-critical">
|
|
11637
|
+
*
|
|
11638
|
+
* Using this value can **significantly** degrade performance.
|
|
11639
|
+
* Instead, prefer refactoring into multiple callbacks using a more specific phase.
|
|
11640
|
+
*
|
|
11641
|
+
* </div>
|
|
11642
|
+
*/
|
|
11643
|
+
AfterRenderPhase[AfterRenderPhase["MixedReadWrite"] = 2] = "MixedReadWrite";
|
|
11644
|
+
/**
|
|
11645
|
+
* Use `AfterRenderPhase.Read` for callbacks that only **read** from the DOM. **Never**
|
|
11646
|
+
* use this phase for callbacks that can write to the DOM.
|
|
11647
|
+
*/
|
|
11648
|
+
AfterRenderPhase[AfterRenderPhase["Read"] = 3] = "Read";
|
|
11649
|
+
})(AfterRenderPhase || (AfterRenderPhase = {}));
|
|
11538
11650
|
/**
|
|
11539
11651
|
* Register a callback to be invoked each time the application
|
|
11540
11652
|
* finishes rendering.
|
|
11541
11653
|
*
|
|
11654
|
+
* <div class="alert is-critical">
|
|
11655
|
+
*
|
|
11656
|
+
* You should always explicitly specify a non-default [phase](api/core/AfterRenderPhase), or you
|
|
11657
|
+
* risk significant performance degradation.
|
|
11658
|
+
*
|
|
11659
|
+
* </div>
|
|
11660
|
+
*
|
|
11542
11661
|
* Note that the callback will run
|
|
11543
11662
|
* - in the order it was registered
|
|
11544
11663
|
* - once per render
|
|
@@ -11569,7 +11688,7 @@ function shouldBeIgnoredByZone(applyArgs) {
|
|
|
11569
11688
|
* constructor() {
|
|
11570
11689
|
* afterRender(() => {
|
|
11571
11690
|
* console.log('content height: ' + this.contentRef.nativeElement.scrollHeight);
|
|
11572
|
-
* });
|
|
11691
|
+
* }, {phase: AfterRenderPhase.Read});
|
|
11573
11692
|
* }
|
|
11574
11693
|
* }
|
|
11575
11694
|
* ```
|
|
@@ -11590,7 +11709,8 @@ function afterRender(callback, options) {
|
|
|
11590
11709
|
const callbackHandler = afterRenderEventManager.handler ??= new AfterRenderCallbackHandlerImpl();
|
|
11591
11710
|
const ngZone = injector.get(NgZone);
|
|
11592
11711
|
const errorHandler = injector.get(ErrorHandler, null, { optional: true });
|
|
11593
|
-
const
|
|
11712
|
+
const phase = options?.phase ?? AfterRenderPhase.MixedReadWrite;
|
|
11713
|
+
const instance = new AfterRenderCallback(ngZone, errorHandler, phase, callback);
|
|
11594
11714
|
destroy = () => {
|
|
11595
11715
|
callbackHandler.unregister(instance);
|
|
11596
11716
|
unregisterFn();
|
|
@@ -11602,6 +11722,13 @@ function afterRender(callback, options) {
|
|
|
11602
11722
|
* Register a callback to be invoked the next time the application
|
|
11603
11723
|
* finishes rendering.
|
|
11604
11724
|
*
|
|
11725
|
+
* <div class="alert is-critical">
|
|
11726
|
+
*
|
|
11727
|
+
* You should always explicitly specify a non-default [phase](api/core/AfterRenderPhase), or you
|
|
11728
|
+
* risk significant performance degradation.
|
|
11729
|
+
*
|
|
11730
|
+
* </div>
|
|
11731
|
+
*
|
|
11605
11732
|
* Note that the callback will run
|
|
11606
11733
|
* - in the order it was registered
|
|
11607
11734
|
* - on browser platforms only
|
|
@@ -11633,7 +11760,7 @@ function afterRender(callback, options) {
|
|
|
11633
11760
|
* constructor() {
|
|
11634
11761
|
* afterNextRender(() => {
|
|
11635
11762
|
* this.chart = new MyChart(this.chartRef.nativeElement);
|
|
11636
|
-
* });
|
|
11763
|
+
* }, {phase: AfterRenderPhase.Write});
|
|
11637
11764
|
* }
|
|
11638
11765
|
* }
|
|
11639
11766
|
* ```
|
|
@@ -11654,7 +11781,8 @@ function afterNextRender(callback, options) {
|
|
|
11654
11781
|
const callbackHandler = afterRenderEventManager.handler ??= new AfterRenderCallbackHandlerImpl();
|
|
11655
11782
|
const ngZone = injector.get(NgZone);
|
|
11656
11783
|
const errorHandler = injector.get(ErrorHandler, null, { optional: true });
|
|
11657
|
-
const
|
|
11784
|
+
const phase = options?.phase ?? AfterRenderPhase.MixedReadWrite;
|
|
11785
|
+
const instance = new AfterRenderCallback(ngZone, errorHandler, phase, () => {
|
|
11658
11786
|
destroy?.();
|
|
11659
11787
|
callback();
|
|
11660
11788
|
});
|
|
@@ -11669,9 +11797,10 @@ function afterNextRender(callback, options) {
|
|
|
11669
11797
|
* A wrapper around a function to be used as an after render callback.
|
|
11670
11798
|
*/
|
|
11671
11799
|
class AfterRenderCallback {
|
|
11672
|
-
constructor(zone, errorHandler, callbackFn) {
|
|
11800
|
+
constructor(zone, errorHandler, phase, callbackFn) {
|
|
11673
11801
|
this.zone = zone;
|
|
11674
11802
|
this.errorHandler = errorHandler;
|
|
11803
|
+
this.phase = phase;
|
|
11675
11804
|
this.callbackFn = callbackFn;
|
|
11676
11805
|
}
|
|
11677
11806
|
invoke() {
|
|
@@ -11690,7 +11819,13 @@ class AfterRenderCallback {
|
|
|
11690
11819
|
class AfterRenderCallbackHandlerImpl {
|
|
11691
11820
|
constructor() {
|
|
11692
11821
|
this.executingCallbacks = false;
|
|
11693
|
-
this.
|
|
11822
|
+
this.buckets = {
|
|
11823
|
+
// Note: the order of these keys controls the order the phases are run.
|
|
11824
|
+
[AfterRenderPhase.EarlyRead]: new Set(),
|
|
11825
|
+
[AfterRenderPhase.Write]: new Set(),
|
|
11826
|
+
[AfterRenderPhase.MixedReadWrite]: new Set(),
|
|
11827
|
+
[AfterRenderPhase.Read]: new Set(),
|
|
11828
|
+
};
|
|
11694
11829
|
this.deferredCallbacks = new Set();
|
|
11695
11830
|
}
|
|
11696
11831
|
validateBegin() {
|
|
@@ -11703,26 +11838,30 @@ class AfterRenderCallbackHandlerImpl {
|
|
|
11703
11838
|
register(callback) {
|
|
11704
11839
|
// If we're currently running callbacks, new callbacks should be deferred
|
|
11705
11840
|
// until the next render operation.
|
|
11706
|
-
const target = this.executingCallbacks ? this.deferredCallbacks : this.
|
|
11841
|
+
const target = this.executingCallbacks ? this.deferredCallbacks : this.buckets[callback.phase];
|
|
11707
11842
|
target.add(callback);
|
|
11708
11843
|
}
|
|
11709
11844
|
unregister(callback) {
|
|
11710
|
-
this.
|
|
11845
|
+
this.buckets[callback.phase].delete(callback);
|
|
11711
11846
|
this.deferredCallbacks.delete(callback);
|
|
11712
11847
|
}
|
|
11713
11848
|
execute() {
|
|
11714
11849
|
this.executingCallbacks = true;
|
|
11715
|
-
for (const
|
|
11716
|
-
callback
|
|
11850
|
+
for (const bucket of Object.values(this.buckets)) {
|
|
11851
|
+
for (const callback of bucket) {
|
|
11852
|
+
callback.invoke();
|
|
11853
|
+
}
|
|
11717
11854
|
}
|
|
11718
11855
|
this.executingCallbacks = false;
|
|
11719
11856
|
for (const callback of this.deferredCallbacks) {
|
|
11720
|
-
this.
|
|
11857
|
+
this.buckets[callback.phase].add(callback);
|
|
11721
11858
|
}
|
|
11722
11859
|
this.deferredCallbacks.clear();
|
|
11723
11860
|
}
|
|
11724
11861
|
destroy() {
|
|
11725
|
-
this.
|
|
11862
|
+
for (const bucket of Object.values(this.buckets)) {
|
|
11863
|
+
bucket.clear();
|
|
11864
|
+
}
|
|
11726
11865
|
this.deferredCallbacks.clear();
|
|
11727
11866
|
}
|
|
11728
11867
|
}
|
|
@@ -20233,7 +20372,72 @@ function enableLocateOrCreateContainerRefImpl() {
|
|
|
20233
20372
|
_populateDehydratedViewsInContainer = populateDehydratedViewsInContainerImpl;
|
|
20234
20373
|
}
|
|
20235
20374
|
|
|
20375
|
+
/**
|
|
20376
|
+
* Describes the state of defer block dependency loading.
|
|
20377
|
+
*/
|
|
20378
|
+
var DeferDependenciesLoadingState;
|
|
20379
|
+
(function (DeferDependenciesLoadingState) {
|
|
20380
|
+
/** Initial state, dependency loading is not yet triggered */
|
|
20381
|
+
DeferDependenciesLoadingState[DeferDependenciesLoadingState["NOT_STARTED"] = 0] = "NOT_STARTED";
|
|
20382
|
+
/** Dependency loading was scheduled (e.g. `on idle`), but has not started yet */
|
|
20383
|
+
DeferDependenciesLoadingState[DeferDependenciesLoadingState["SCHEDULED"] = 1] = "SCHEDULED";
|
|
20384
|
+
/** Dependency loading is in progress */
|
|
20385
|
+
DeferDependenciesLoadingState[DeferDependenciesLoadingState["IN_PROGRESS"] = 2] = "IN_PROGRESS";
|
|
20386
|
+
/** Dependency loading has completed successfully */
|
|
20387
|
+
DeferDependenciesLoadingState[DeferDependenciesLoadingState["COMPLETE"] = 3] = "COMPLETE";
|
|
20388
|
+
/** Dependency loading has failed */
|
|
20389
|
+
DeferDependenciesLoadingState[DeferDependenciesLoadingState["FAILED"] = 4] = "FAILED";
|
|
20390
|
+
})(DeferDependenciesLoadingState || (DeferDependenciesLoadingState = {}));
|
|
20391
|
+
/**
|
|
20392
|
+
* Describes the current state of this {#defer} block instance.
|
|
20393
|
+
*
|
|
20394
|
+
* @publicApi
|
|
20395
|
+
* @developerPreview
|
|
20396
|
+
*/
|
|
20397
|
+
var DeferBlockState;
|
|
20398
|
+
(function (DeferBlockState) {
|
|
20399
|
+
/** The {:placeholder} block content is rendered */
|
|
20400
|
+
DeferBlockState[DeferBlockState["Placeholder"] = 0] = "Placeholder";
|
|
20401
|
+
/** The {:loading} block content is rendered */
|
|
20402
|
+
DeferBlockState[DeferBlockState["Loading"] = 1] = "Loading";
|
|
20403
|
+
/** The main content block content is rendered */
|
|
20404
|
+
DeferBlockState[DeferBlockState["Complete"] = 2] = "Complete";
|
|
20405
|
+
/** The {:error} block content is rendered */
|
|
20406
|
+
DeferBlockState[DeferBlockState["Error"] = 3] = "Error";
|
|
20407
|
+
})(DeferBlockState || (DeferBlockState = {}));
|
|
20408
|
+
/**
|
|
20409
|
+
* Describes the initial state of this {#defer} block instance.
|
|
20410
|
+
*
|
|
20411
|
+
* Note: this state is internal only and *must* be represented
|
|
20412
|
+
* with a number lower than any value in the `DeferBlockState` enum.
|
|
20413
|
+
*/
|
|
20414
|
+
var DeferBlockInternalState;
|
|
20415
|
+
(function (DeferBlockInternalState) {
|
|
20416
|
+
/** Initial state. Nothing is rendered yet. */
|
|
20417
|
+
DeferBlockInternalState[DeferBlockInternalState["Initial"] = -1] = "Initial";
|
|
20418
|
+
})(DeferBlockInternalState || (DeferBlockInternalState = {}));
|
|
20419
|
+
/**
|
|
20420
|
+
* A slot in the `LDeferBlockDetails` array that contains a number
|
|
20421
|
+
* that represent a current block state that is being rendered.
|
|
20422
|
+
*/
|
|
20236
20423
|
const DEFER_BLOCK_STATE = 0;
|
|
20424
|
+
/**
|
|
20425
|
+
* Options for configuring defer blocks behavior.
|
|
20426
|
+
* @publicApi
|
|
20427
|
+
* @developerPreview
|
|
20428
|
+
*/
|
|
20429
|
+
var DeferBlockBehavior;
|
|
20430
|
+
(function (DeferBlockBehavior) {
|
|
20431
|
+
/**
|
|
20432
|
+
* Manual triggering mode for defer blocks. Provides control over when defer blocks render
|
|
20433
|
+
* and which state they render. This is the default behavior in test environments.
|
|
20434
|
+
*/
|
|
20435
|
+
DeferBlockBehavior[DeferBlockBehavior["Manual"] = 0] = "Manual";
|
|
20436
|
+
/**
|
|
20437
|
+
* Playthrough mode for defer blocks. This mode behaves like defer blocks would in a browser.
|
|
20438
|
+
*/
|
|
20439
|
+
DeferBlockBehavior[DeferBlockBehavior["Playthrough"] = 1] = "Playthrough";
|
|
20440
|
+
})(DeferBlockBehavior || (DeferBlockBehavior = {}));
|
|
20237
20441
|
|
|
20238
20442
|
/**
|
|
20239
20443
|
* Returns whether defer blocks should be triggered.
|
|
@@ -20242,6 +20446,10 @@ const DEFER_BLOCK_STATE = 0;
|
|
|
20242
20446
|
* only placeholder content is rendered (if provided).
|
|
20243
20447
|
*/
|
|
20244
20448
|
function shouldTriggerDeferBlock(injector) {
|
|
20449
|
+
const config = injector.get(DEFER_BLOCK_CONFIG, { optional: true });
|
|
20450
|
+
if (config?.behavior === DeferBlockBehavior.Manual) {
|
|
20451
|
+
return false;
|
|
20452
|
+
}
|
|
20245
20453
|
return isPlatformBrowser(injector);
|
|
20246
20454
|
}
|
|
20247
20455
|
/**
|
|
@@ -20285,7 +20493,7 @@ function ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplInd
|
|
|
20285
20493
|
getConstant(tViewConsts, loadingConfigIndex) :
|
|
20286
20494
|
null,
|
|
20287
20495
|
dependencyResolverFn: dependencyResolverFn ?? null,
|
|
20288
|
-
loadingState:
|
|
20496
|
+
loadingState: DeferDependenciesLoadingState.NOT_STARTED,
|
|
20289
20497
|
loadingPromise: null,
|
|
20290
20498
|
};
|
|
20291
20499
|
setTDeferBlockDetails(tView, adjustedIndex, deferBlockConfig);
|
|
@@ -20296,7 +20504,7 @@ function ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplInd
|
|
|
20296
20504
|
populateDehydratedViewsInContainer(lContainer);
|
|
20297
20505
|
// Init instance-specific defer details and store it.
|
|
20298
20506
|
const lDetails = [];
|
|
20299
|
-
lDetails[DEFER_BLOCK_STATE] =
|
|
20507
|
+
lDetails[DEFER_BLOCK_STATE] = DeferBlockInternalState.Initial;
|
|
20300
20508
|
setLDeferBlockDetails(lView, adjustedIndex, lDetails);
|
|
20301
20509
|
}
|
|
20302
20510
|
/**
|
|
@@ -20311,13 +20519,13 @@ function ɵɵdeferWhen(rawValue) {
|
|
|
20311
20519
|
const tNode = getSelectedTNode();
|
|
20312
20520
|
const lDetails = getLDeferBlockDetails(lView, tNode);
|
|
20313
20521
|
const renderedState = lDetails[DEFER_BLOCK_STATE];
|
|
20314
|
-
if (value === false && renderedState ===
|
|
20522
|
+
if (value === false && renderedState === DeferBlockInternalState.Initial) {
|
|
20315
20523
|
// If nothing is rendered yet, render a placeholder (if defined).
|
|
20316
20524
|
renderPlaceholder(lView, tNode);
|
|
20317
20525
|
}
|
|
20318
20526
|
else if (value === true &&
|
|
20319
|
-
(renderedState ===
|
|
20320
|
-
renderedState ===
|
|
20527
|
+
(renderedState === DeferBlockInternalState.Initial ||
|
|
20528
|
+
renderedState === DeferBlockState.Placeholder)) {
|
|
20321
20529
|
// The `when` condition has changed to `true`, trigger defer block loading
|
|
20322
20530
|
// if the block is either in initial (nothing is rendered) or a placeholder
|
|
20323
20531
|
// state.
|
|
@@ -20337,9 +20545,9 @@ function ɵɵdeferPrefetchWhen(rawValue) {
|
|
|
20337
20545
|
const tView = lView[TVIEW];
|
|
20338
20546
|
const tNode = getSelectedTNode();
|
|
20339
20547
|
const tDetails = getTDeferBlockDetails(tView, tNode);
|
|
20340
|
-
if (value === true && tDetails.loadingState ===
|
|
20548
|
+
if (value === true && tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
|
|
20341
20549
|
// If loading has not been started yet, trigger it now.
|
|
20342
|
-
|
|
20550
|
+
triggerPrefetching(tDetails, lView);
|
|
20343
20551
|
}
|
|
20344
20552
|
}
|
|
20345
20553
|
}
|
|
@@ -20365,14 +20573,14 @@ function ɵɵdeferPrefetchOnIdle() {
|
|
|
20365
20573
|
const tNode = getCurrentTNode();
|
|
20366
20574
|
const tView = lView[TVIEW];
|
|
20367
20575
|
const tDetails = getTDeferBlockDetails(tView, tNode);
|
|
20368
|
-
if (tDetails.loadingState ===
|
|
20576
|
+
if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
|
|
20369
20577
|
// Set loading to the scheduled state, so that we don't register it again.
|
|
20370
|
-
tDetails.loadingState =
|
|
20578
|
+
tDetails.loadingState = DeferDependenciesLoadingState.SCHEDULED;
|
|
20371
20579
|
// In case of prefetching, we intentionally avoid cancelling prefetching if
|
|
20372
20580
|
// an underlying LView get destroyed (thus passing `null` as a second argument),
|
|
20373
20581
|
// because there might be other LViews (that represent embedded views) that
|
|
20374
20582
|
// depend on resource loading.
|
|
20375
|
-
onIdle(() =>
|
|
20583
|
+
onIdle(() => triggerPrefetching(tDetails, lView), null /* LView */);
|
|
20376
20584
|
}
|
|
20377
20585
|
}
|
|
20378
20586
|
/**
|
|
@@ -20496,6 +20704,23 @@ function setTDeferBlockDetails(tView, deferBlockIndex, deferBlockConfig) {
|
|
|
20496
20704
|
ngDevMode && assertIndexInDeclRange(tView, slotIndex);
|
|
20497
20705
|
tView.data[slotIndex] = deferBlockConfig;
|
|
20498
20706
|
}
|
|
20707
|
+
function getTemplateIndexForState(newState, hostLView, tNode) {
|
|
20708
|
+
const tView = hostLView[TVIEW];
|
|
20709
|
+
const tDetails = getTDeferBlockDetails(tView, tNode);
|
|
20710
|
+
switch (newState) {
|
|
20711
|
+
case DeferBlockState.Complete:
|
|
20712
|
+
return tDetails.primaryTmplIndex;
|
|
20713
|
+
case DeferBlockState.Loading:
|
|
20714
|
+
return tDetails.loadingTmplIndex;
|
|
20715
|
+
case DeferBlockState.Error:
|
|
20716
|
+
return tDetails.errorTmplIndex;
|
|
20717
|
+
case DeferBlockState.Placeholder:
|
|
20718
|
+
return tDetails.placeholderTmplIndex;
|
|
20719
|
+
default:
|
|
20720
|
+
ngDevMode && throwError(`Unexpected defer block state: ${newState}`);
|
|
20721
|
+
return null;
|
|
20722
|
+
}
|
|
20723
|
+
}
|
|
20499
20724
|
/**
|
|
20500
20725
|
* Transitions a defer block to the new state. Updates the necessary
|
|
20501
20726
|
* data structures and renders corresponding block.
|
|
@@ -20503,9 +20728,8 @@ function setTDeferBlockDetails(tView, deferBlockIndex, deferBlockConfig) {
|
|
|
20503
20728
|
* @param newState New state that should be applied to the defer block.
|
|
20504
20729
|
* @param tNode TNode that represents a defer block.
|
|
20505
20730
|
* @param lContainer Represents an instance of a defer block.
|
|
20506
|
-
* @param stateTmplIndex Index of a template that should be rendered.
|
|
20507
20731
|
*/
|
|
20508
|
-
function renderDeferBlockState(newState, tNode, lContainer
|
|
20732
|
+
function renderDeferBlockState(newState, tNode, lContainer) {
|
|
20509
20733
|
const hostLView = lContainer[PARENT];
|
|
20510
20734
|
// Check if this view is not destroyed. Since the loading process was async,
|
|
20511
20735
|
// the view might end up being destroyed by the time rendering happens.
|
|
@@ -20515,6 +20739,7 @@ function renderDeferBlockState(newState, tNode, lContainer, stateTmplIndex) {
|
|
|
20515
20739
|
ngDevMode && assertTNodeForLView(tNode, hostLView);
|
|
20516
20740
|
const lDetails = getLDeferBlockDetails(hostLView, tNode);
|
|
20517
20741
|
ngDevMode && assertDefined(lDetails, 'Expected a defer block state defined');
|
|
20742
|
+
const stateTmplIndex = getTemplateIndexForState(newState, hostLView, tNode);
|
|
20518
20743
|
// Note: we transition to the next state if the previous state was represented
|
|
20519
20744
|
// with a number that is less than the next state. For example, if the current
|
|
20520
20745
|
// state is "loading" (represented as `2`), we should not show a placeholder
|
|
@@ -20533,18 +20758,28 @@ function renderDeferBlockState(newState, tNode, lContainer, stateTmplIndex) {
|
|
|
20533
20758
|
addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(tNode, dehydratedView));
|
|
20534
20759
|
}
|
|
20535
20760
|
}
|
|
20761
|
+
/**
|
|
20762
|
+
* Trigger prefetching of dependencies for a defer block.
|
|
20763
|
+
*
|
|
20764
|
+
* @param tDetails Static information about this defer block.
|
|
20765
|
+
* @param lView LView of a host view.
|
|
20766
|
+
*/
|
|
20767
|
+
function triggerPrefetching(tDetails, lView) {
|
|
20768
|
+
if (lView[INJECTOR$1] && shouldTriggerDeferBlock(lView[INJECTOR$1])) {
|
|
20769
|
+
triggerResourceLoading(tDetails, lView);
|
|
20770
|
+
}
|
|
20771
|
+
}
|
|
20536
20772
|
/**
|
|
20537
20773
|
* Trigger loading of defer block dependencies if the process hasn't started yet.
|
|
20538
20774
|
*
|
|
20539
20775
|
* @param tDetails Static information about this defer block.
|
|
20540
|
-
* @param tView TView of a host view.
|
|
20541
20776
|
* @param lView LView of a host view.
|
|
20542
20777
|
*/
|
|
20543
|
-
function triggerResourceLoading(tDetails,
|
|
20778
|
+
function triggerResourceLoading(tDetails, lView) {
|
|
20544
20779
|
const injector = lView[INJECTOR$1];
|
|
20545
|
-
|
|
20546
|
-
|
|
20547
|
-
|
|
20780
|
+
const tView = lView[TVIEW];
|
|
20781
|
+
if (tDetails.loadingState !== DeferDependenciesLoadingState.NOT_STARTED &&
|
|
20782
|
+
tDetails.loadingState !== DeferDependenciesLoadingState.SCHEDULED) {
|
|
20548
20783
|
// If the loading status is different from initial one, it means that
|
|
20549
20784
|
// the loading of dependencies is in progress and there is nothing to do
|
|
20550
20785
|
// in this function. All details can be obtained from the `tDetails` object.
|
|
@@ -20552,7 +20787,7 @@ function triggerResourceLoading(tDetails, tView, lView) {
|
|
|
20552
20787
|
}
|
|
20553
20788
|
const primaryBlockTNode = getPrimaryBlockTNode(tView, tDetails);
|
|
20554
20789
|
// Switch from NOT_STARTED -> IN_PROGRESS state.
|
|
20555
|
-
tDetails.loadingState =
|
|
20790
|
+
tDetails.loadingState = DeferDependenciesLoadingState.IN_PROGRESS;
|
|
20556
20791
|
// Check if dependency function interceptor is configured.
|
|
20557
20792
|
const deferDependencyInterceptor = injector.get(DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, null, { optional: true });
|
|
20558
20793
|
const dependenciesFn = deferDependencyInterceptor ?
|
|
@@ -20563,7 +20798,7 @@ function triggerResourceLoading(tDetails, tView, lView) {
|
|
|
20563
20798
|
// thus no dynamic `import()`s were produced.
|
|
20564
20799
|
if (!dependenciesFn) {
|
|
20565
20800
|
tDetails.loadingPromise = Promise.resolve().then(() => {
|
|
20566
|
-
tDetails.loadingState =
|
|
20801
|
+
tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;
|
|
20567
20802
|
});
|
|
20568
20803
|
return;
|
|
20569
20804
|
}
|
|
@@ -20594,10 +20829,10 @@ function triggerResourceLoading(tDetails, tView, lView) {
|
|
|
20594
20829
|
// Loading is completed, we no longer need this Promise.
|
|
20595
20830
|
tDetails.loadingPromise = null;
|
|
20596
20831
|
if (failed) {
|
|
20597
|
-
tDetails.loadingState =
|
|
20832
|
+
tDetails.loadingState = DeferDependenciesLoadingState.FAILED;
|
|
20598
20833
|
}
|
|
20599
20834
|
else {
|
|
20600
|
-
tDetails.loadingState =
|
|
20835
|
+
tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;
|
|
20601
20836
|
// Update directive and pipe registries to add newly downloaded dependencies.
|
|
20602
20837
|
const primaryBlockTView = primaryBlockTNode.tView;
|
|
20603
20838
|
if (directiveDefs.length > 0) {
|
|
@@ -20619,7 +20854,7 @@ function renderPlaceholder(lView, tNode) {
|
|
|
20619
20854
|
const lContainer = lView[tNode.index];
|
|
20620
20855
|
ngDevMode && assertLContainer(lContainer);
|
|
20621
20856
|
const tDetails = getTDeferBlockDetails(tView, tNode);
|
|
20622
|
-
renderDeferBlockState(
|
|
20857
|
+
renderDeferBlockState(DeferBlockState.Placeholder, tNode, lContainer);
|
|
20623
20858
|
}
|
|
20624
20859
|
/**
|
|
20625
20860
|
* Subscribes to the "loading" Promise and renders corresponding defer sub-block,
|
|
@@ -20632,13 +20867,13 @@ function renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer) {
|
|
|
20632
20867
|
ngDevMode &&
|
|
20633
20868
|
assertDefined(tDetails.loadingPromise, 'Expected loading Promise to exist on this defer block');
|
|
20634
20869
|
tDetails.loadingPromise.then(() => {
|
|
20635
|
-
if (tDetails.loadingState ===
|
|
20870
|
+
if (tDetails.loadingState === DeferDependenciesLoadingState.COMPLETE) {
|
|
20636
20871
|
ngDevMode && assertDeferredDependenciesLoaded(tDetails);
|
|
20637
20872
|
// Everything is loaded, show the primary block content
|
|
20638
|
-
renderDeferBlockState(
|
|
20873
|
+
renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);
|
|
20639
20874
|
}
|
|
20640
|
-
else if (tDetails.loadingState ===
|
|
20641
|
-
renderDeferBlockState(
|
|
20875
|
+
else if (tDetails.loadingState === DeferDependenciesLoadingState.FAILED) {
|
|
20876
|
+
renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);
|
|
20642
20877
|
}
|
|
20643
20878
|
});
|
|
20644
20879
|
}
|
|
@@ -20662,26 +20897,26 @@ function triggerDeferBlock(lView, tNode) {
|
|
|
20662
20897
|
const tDetails = getTDeferBlockDetails(tView, tNode);
|
|
20663
20898
|
// Condition is triggered, try to render loading state and start downloading.
|
|
20664
20899
|
// Note: if a block is in a loading, completed or an error state, this call would be a noop.
|
|
20665
|
-
renderDeferBlockState(
|
|
20900
|
+
renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);
|
|
20666
20901
|
switch (tDetails.loadingState) {
|
|
20667
|
-
case
|
|
20668
|
-
case
|
|
20669
|
-
triggerResourceLoading(tDetails, lView
|
|
20902
|
+
case DeferDependenciesLoadingState.NOT_STARTED:
|
|
20903
|
+
case DeferDependenciesLoadingState.SCHEDULED:
|
|
20904
|
+
triggerResourceLoading(tDetails, lView);
|
|
20670
20905
|
// The `loadingState` might have changed to "loading".
|
|
20671
20906
|
if (tDetails.loadingState ===
|
|
20672
|
-
|
|
20907
|
+
DeferDependenciesLoadingState.IN_PROGRESS) {
|
|
20673
20908
|
renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);
|
|
20674
20909
|
}
|
|
20675
20910
|
break;
|
|
20676
|
-
case
|
|
20911
|
+
case DeferDependenciesLoadingState.IN_PROGRESS:
|
|
20677
20912
|
renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);
|
|
20678
20913
|
break;
|
|
20679
|
-
case
|
|
20914
|
+
case DeferDependenciesLoadingState.COMPLETE:
|
|
20680
20915
|
ngDevMode && assertDeferredDependenciesLoaded(tDetails);
|
|
20681
|
-
renderDeferBlockState(
|
|
20916
|
+
renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);
|
|
20682
20917
|
break;
|
|
20683
|
-
case
|
|
20684
|
-
renderDeferBlockState(
|
|
20918
|
+
case DeferDependenciesLoadingState.FAILED:
|
|
20919
|
+
renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);
|
|
20685
20920
|
break;
|
|
20686
20921
|
default:
|
|
20687
20922
|
if (ngDevMode) {
|
|
@@ -20695,7 +20930,7 @@ function triggerDeferBlock(lView, tNode) {
|
|
|
20695
20930
|
* block in completed state.
|
|
20696
20931
|
*/
|
|
20697
20932
|
function assertDeferredDependenciesLoaded(tDetails) {
|
|
20698
|
-
assertEqual(tDetails.loadingState,
|
|
20933
|
+
assertEqual(tDetails.loadingState, DeferDependenciesLoadingState.COMPLETE, 'Expecting all deferred dependencies to be loaded.');
|
|
20699
20934
|
}
|
|
20700
20935
|
/**
|
|
20701
20936
|
* **INTERNAL**, avoid referencing it in application code.
|
|
@@ -20704,6 +20939,55 @@ function assertDeferredDependenciesLoaded(tDetails) {
|
|
|
20704
20939
|
* implementation.
|
|
20705
20940
|
*/
|
|
20706
20941
|
const DEFER_BLOCK_DEPENDENCY_INTERCEPTOR = new InjectionToken(ngDevMode ? 'DEFER_BLOCK_DEPENDENCY_INTERCEPTOR' : '');
|
|
20942
|
+
/**
|
|
20943
|
+
* Determines if a given value matches the expected structure of a defer block
|
|
20944
|
+
*
|
|
20945
|
+
* We can safely rely on the primaryTmplIndex because every defer block requires
|
|
20946
|
+
* that a primary template exists. All the other template options are optional.
|
|
20947
|
+
*/
|
|
20948
|
+
function isTDeferBlockDetails(value) {
|
|
20949
|
+
return (typeof value === 'object') &&
|
|
20950
|
+
(typeof value.primaryTmplIndex === 'number');
|
|
20951
|
+
}
|
|
20952
|
+
/**
|
|
20953
|
+
* Internal token used for configuring defer block behavior.
|
|
20954
|
+
*/
|
|
20955
|
+
const DEFER_BLOCK_CONFIG = new InjectionToken(ngDevMode ? 'DEFER_BLOCK_CONFIG' : '');
|
|
20956
|
+
/**
|
|
20957
|
+
* Retrieves all defer blocks in a given LView.
|
|
20958
|
+
*
|
|
20959
|
+
* @param lView lView with defer blocks
|
|
20960
|
+
* @param deferBlocks defer block aggregator array
|
|
20961
|
+
*/
|
|
20962
|
+
function getDeferBlocks(lView, deferBlocks) {
|
|
20963
|
+
const tView = lView[TVIEW];
|
|
20964
|
+
for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
|
|
20965
|
+
if (isLContainer(lView[i])) {
|
|
20966
|
+
const lContainer = lView[i];
|
|
20967
|
+
// An LContainer may represent an instance of a defer block, in which case
|
|
20968
|
+
// we store it as a result. Otherwise, keep iterating over LContainer views and
|
|
20969
|
+
// look for defer blocks.
|
|
20970
|
+
const isLast = i === tView.bindingStartIndex - 1;
|
|
20971
|
+
if (!isLast) {
|
|
20972
|
+
const tNode = tView.data[i];
|
|
20973
|
+
const tDetails = getTDeferBlockDetails(tView, tNode);
|
|
20974
|
+
if (isTDeferBlockDetails(tDetails)) {
|
|
20975
|
+
deferBlocks.push({ lContainer, lView, tNode, tDetails });
|
|
20976
|
+
// This LContainer represents a defer block, so we exit
|
|
20977
|
+
// this iteration and don't inspect views in this LContainer.
|
|
20978
|
+
continue;
|
|
20979
|
+
}
|
|
20980
|
+
}
|
|
20981
|
+
for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
|
|
20982
|
+
getDeferBlocks(lContainer[i], deferBlocks);
|
|
20983
|
+
}
|
|
20984
|
+
}
|
|
20985
|
+
else if (isLView(lView[i])) {
|
|
20986
|
+
// This is a component, enter the `getDeferBlocks` recursively.
|
|
20987
|
+
getDeferBlocks(lView[i], deferBlocks);
|
|
20988
|
+
}
|
|
20989
|
+
}
|
|
20990
|
+
}
|
|
20707
20991
|
|
|
20708
20992
|
function elementStartFirstCreatePass(index, tView, lView, name, attrsIndex, localRefsIndex) {
|
|
20709
20993
|
ngDevMode && assertFirstCreatePass(tView);
|
|
@@ -25507,6 +25791,10 @@ function ɵɵsetNgModuleScope(type, scope) {
|
|
|
25507
25791
|
ngModuleDef.declarations = convertToTypeArray(scope.declarations || EMPTY_ARRAY);
|
|
25508
25792
|
ngModuleDef.imports = convertToTypeArray(scope.imports || EMPTY_ARRAY);
|
|
25509
25793
|
ngModuleDef.exports = convertToTypeArray(scope.exports || EMPTY_ARRAY);
|
|
25794
|
+
if (scope.bootstrap) {
|
|
25795
|
+
// This only happens in local compilation mode.
|
|
25796
|
+
ngModuleDef.bootstrap = convertToTypeArray(scope.bootstrap);
|
|
25797
|
+
}
|
|
25510
25798
|
depsTracker.registerNgModule(type, scope);
|
|
25511
25799
|
});
|
|
25512
25800
|
}
|
|
@@ -25514,11 +25802,12 @@ function convertToTypeArray(values) {
|
|
|
25514
25802
|
if (typeof values === 'function') {
|
|
25515
25803
|
return values;
|
|
25516
25804
|
}
|
|
25517
|
-
|
|
25518
|
-
|
|
25805
|
+
const flattenValues = flatten(values);
|
|
25806
|
+
if (flattenValues.some(isForwardRef)) {
|
|
25807
|
+
return () => flattenValues.map(resolveForwardRef).map(maybeUnwrapModuleWithProviders);
|
|
25519
25808
|
}
|
|
25520
25809
|
else {
|
|
25521
|
-
return
|
|
25810
|
+
return flattenValues.map(maybeUnwrapModuleWithProviders);
|
|
25522
25811
|
}
|
|
25523
25812
|
}
|
|
25524
25813
|
function maybeUnwrapModuleWithProviders(value) {
|
|
@@ -27244,7 +27533,13 @@ function ɵɵtemplateRefExtractor(tNode, lView) {
|
|
|
27244
27533
|
|
|
27245
27534
|
function ɵɵgetComponentDepsFactory(type, rawImports) {
|
|
27246
27535
|
return () => {
|
|
27247
|
-
|
|
27536
|
+
try {
|
|
27537
|
+
return depsTracker.getComponentDependencies(type, rawImports).dependencies;
|
|
27538
|
+
}
|
|
27539
|
+
catch (e) {
|
|
27540
|
+
console.error(`Computing dependencies in local compilation mode for the component "${type.name}" failed with the exception:`, e);
|
|
27541
|
+
throw e;
|
|
27542
|
+
}
|
|
27248
27543
|
};
|
|
27249
27544
|
}
|
|
27250
27545
|
|
|
@@ -32689,19 +32984,11 @@ class EffectHandle {
|
|
|
32689
32984
|
this.effectFn = effectFn;
|
|
32690
32985
|
this.creationZone = creationZone;
|
|
32691
32986
|
this.errorHandler = errorHandler;
|
|
32692
|
-
this.alive = true;
|
|
32693
32987
|
this.watcher =
|
|
32694
32988
|
watch((onCleanup) => this.runEffect(onCleanup), () => this.schedule(), allowSignalWrites);
|
|
32695
32989
|
this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
|
|
32696
32990
|
}
|
|
32697
32991
|
runEffect(onCleanup) {
|
|
32698
|
-
if (!this.alive) {
|
|
32699
|
-
// Running a destroyed effect is a no-op.
|
|
32700
|
-
return;
|
|
32701
|
-
}
|
|
32702
|
-
if (ngDevMode && isInNotificationPhase()) {
|
|
32703
|
-
throw new Error(`Schedulers cannot synchronously execute effects while scheduling.`);
|
|
32704
|
-
}
|
|
32705
32992
|
try {
|
|
32706
32993
|
this.effectFn(onCleanup);
|
|
32707
32994
|
}
|
|
@@ -32713,17 +33000,13 @@ class EffectHandle {
|
|
|
32713
33000
|
this.watcher.run();
|
|
32714
33001
|
}
|
|
32715
33002
|
schedule() {
|
|
32716
|
-
if (!this.alive) {
|
|
32717
|
-
return;
|
|
32718
|
-
}
|
|
32719
33003
|
this.scheduler.scheduleEffect(this);
|
|
32720
33004
|
}
|
|
32721
33005
|
notify() {
|
|
32722
33006
|
this.watcher.notify();
|
|
32723
33007
|
}
|
|
32724
33008
|
destroy() {
|
|
32725
|
-
this.
|
|
32726
|
-
this.watcher.cleanup();
|
|
33009
|
+
this.watcher.destroy();
|
|
32727
33010
|
this.unregisterOnDestroy?.();
|
|
32728
33011
|
// Note: if the effect is currently scheduled, it's not un-scheduled, and so the scheduler will
|
|
32729
33012
|
// retain a reference to it. Attempting to execute it will be a no-op.
|
|
@@ -32935,5 +33218,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
|
32935
33218
|
* Generated bundle index. Do not edit.
|
|
32936
33219
|
*/
|
|
32937
33220
|
|
|
32938
|
-
export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, Host, HostBinding, HostListener, 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, 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, assertPlatform, booleanAttribute, computed, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, numberAttribute, platformCore, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderEventManager as ɵAfterRenderEventManager, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, ENABLED_SSR_FEATURES as ɵENABLED_SSR_FEATURES, EffectScheduler as ɵEffectScheduler, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, InitialRenderPendingTasks as ɵInitialRenderPendingTasks, 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, 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, ZoneAwareQueueingScheduler as ɵZoneAwareQueueingScheduler, _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, detectChanges as ɵdetectChanges, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadata as ɵgetAsyncClassMetadata, getDebugNode as ɵgetDebugNode, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, 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, publishDefaultGlobalUtils$1 as ɵpublishDefaultGlobalUtils, publishGlobalUtil as ɵpublishGlobalUtil, registerLocaleData as ɵregisterLocaleData, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, 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, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, withDomHydration as ɵwithDomHydration, ɵɵ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, ɵɵdefer, ɵɵ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, ɵɵ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, ɵɵ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, ɵɵvalidateIframeAttribute, ɵɵviewQuery };
|
|
33221
|
+
export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, Host, HostBinding, HostListener, 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, 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, assertPlatform, booleanAttribute, computed, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, numberAttribute, platformCore, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderEventManager as ɵAfterRenderEventManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, 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, ENABLED_SSR_FEATURES as ɵENABLED_SSR_FEATURES, EffectScheduler as ɵEffectScheduler, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, InitialRenderPendingTasks as ɵInitialRenderPendingTasks, 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, 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, ZoneAwareQueueingScheduler as ɵZoneAwareQueueingScheduler, _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, detectChanges as ɵdetectChanges, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadata as ɵgetAsyncClassMetadata, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, 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, publishDefaultGlobalUtils$1 as ɵpublishDefaultGlobalUtils, publishGlobalUtil as ɵpublishGlobalUtil, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, 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, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, withDomHydration as ɵwithDomHydration, ɵɵ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, ɵɵdefer, ɵɵ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, ɵɵ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, ɵɵ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, ɵɵvalidateIframeAttribute, ɵɵviewQuery };
|
|
32939
33222
|
//# sourceMappingURL=core.mjs.map
|