@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/testing.mjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
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
|
*/
|
|
6
6
|
|
|
7
|
-
import { getDebugNode, RendererFactory2, InjectionToken, ɵstringify, ɵReflectionCapabilities, Directive, Component, Pipe, NgModule, ɵgetAsyncClassMetadata, ɵgenerateStandaloneInDeclarationsError, ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ɵdepsTracker, ɵgetInjectableDef, resolveForwardRef, ɵNG_COMP_DEF, ɵisComponentDefPendingResolution, ɵresolveComponentResources, ɵRender3NgModuleRef, ApplicationInitStatus, LOCALE_ID, ɵDEFAULT_LOCALE_ID, ɵsetLocaleId, ɵRender3ComponentFactory, ɵcompileComponent, ɵNG_DIR_DEF, ɵcompileDirective, ɵNG_PIPE_DEF, ɵcompilePipe, ɵNG_MOD_DEF, ɵtransitiveScopesFor, ɵpatchComponentDefWithScope, ɵNG_INJ_DEF, ɵcompileNgModuleDefs, ɵclearResolutionOfComponentResourcesQueue, ɵrestoreComponentResolutionQueue, provideZoneChangeDetection, Compiler, COMPILER_OPTIONS, Injector, ɵisEnvironmentProviders, ɵNgModuleFactory, ModuleWithComponentFactories, ɵconvertToBitFlags, InjectFlags, ɵsetAllowDuplicateNgModuleIdsForTest, ɵresetCompiledComponents, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, EnvironmentInjector, NgZone, ɵZoneAwareQueueingScheduler, ɵflushModuleScopingQueueAsMuchAsPossible } from '@angular/core';
|
|
7
|
+
import { ɵDeferBlockState, ɵtriggerResourceLoading, ɵrenderDeferBlockState, ɵCONTAINER_HEADER_OFFSET, ɵgetDeferBlocks, getDebugNode, RendererFactory2, InjectionToken, ɵstringify, ɵReflectionCapabilities, Directive, Component, Pipe, NgModule, ɵgetAsyncClassMetadata, ɵgenerateStandaloneInDeclarationsError, ɵDeferBlockBehavior, ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ɵdepsTracker, ɵgetInjectableDef, resolveForwardRef, ɵNG_COMP_DEF, ɵisComponentDefPendingResolution, ɵresolveComponentResources, ɵRender3NgModuleRef, ApplicationInitStatus, LOCALE_ID, ɵDEFAULT_LOCALE_ID, ɵsetLocaleId, ɵRender3ComponentFactory, ɵcompileComponent, ɵNG_DIR_DEF, ɵcompileDirective, ɵNG_PIPE_DEF, ɵcompilePipe, ɵNG_MOD_DEF, ɵtransitiveScopesFor, ɵpatchComponentDefWithScope, ɵNG_INJ_DEF, ɵcompileNgModuleDefs, ɵclearResolutionOfComponentResourcesQueue, ɵrestoreComponentResolutionQueue, provideZoneChangeDetection, Compiler, ɵDEFER_BLOCK_CONFIG, COMPILER_OPTIONS, Injector, ɵisEnvironmentProviders, ɵNgModuleFactory, ModuleWithComponentFactories, ɵconvertToBitFlags, InjectFlags, ɵsetAllowDuplicateNgModuleIdsForTest, ɵresetCompiledComponents, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, EnvironmentInjector, NgZone, ɵZoneAwareQueueingScheduler, ɵflushModuleScopingQueueAsMuchAsPossible } from '@angular/core';
|
|
8
|
+
export { ɵDeferBlockBehavior as DeferBlockBehavior, ɵDeferBlockState as DeferBlockState } from '@angular/core';
|
|
8
9
|
import { ResourceLoader } from '@angular/compiler';
|
|
9
10
|
|
|
10
11
|
/**
|
|
@@ -50,12 +51,89 @@ function async(fn) {
|
|
|
50
51
|
return waitForAsync(fn);
|
|
51
52
|
}
|
|
52
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Represents an individual `{#defer}` block for testing purposes.
|
|
56
|
+
*
|
|
57
|
+
* @publicApi
|
|
58
|
+
* @developerPreview
|
|
59
|
+
*/
|
|
60
|
+
class DeferBlockFixture {
|
|
61
|
+
/** @nodoc */
|
|
62
|
+
constructor(block, componentFixture) {
|
|
63
|
+
this.block = block;
|
|
64
|
+
this.componentFixture = componentFixture;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Renders the specified state of the defer fixture.
|
|
68
|
+
* @param state the defer state to render
|
|
69
|
+
*/
|
|
70
|
+
async render(state) {
|
|
71
|
+
if (!hasStateTemplate(state, this.block)) {
|
|
72
|
+
const stateAsString = getDeferBlockStateNameFromEnum(state);
|
|
73
|
+
throw new Error(`Tried to render this defer block in the \`${stateAsString}\` state, ` +
|
|
74
|
+
`but there was no \`{:${stateAsString.toLowerCase()}}\` section defined in a template.`);
|
|
75
|
+
}
|
|
76
|
+
if (state === ɵDeferBlockState.Complete) {
|
|
77
|
+
await ɵtriggerResourceLoading(this.block.tDetails, this.block.lView);
|
|
78
|
+
}
|
|
79
|
+
ɵrenderDeferBlockState(state, this.block.tNode, this.block.lContainer);
|
|
80
|
+
this.componentFixture.detectChanges();
|
|
81
|
+
return this.componentFixture.whenStable();
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Retrieves all nested child defer block fixtures
|
|
85
|
+
* in a given defer block.
|
|
86
|
+
*/
|
|
87
|
+
getDeferBlocks() {
|
|
88
|
+
const deferBlocks = [];
|
|
89
|
+
// An LContainer that represents a defer block has at most 1 view, which is
|
|
90
|
+
// located right after an LContainer header. Get a hold of that view and inspect
|
|
91
|
+
// it for nested defer blocks.
|
|
92
|
+
const deferBlockFixtures = [];
|
|
93
|
+
if (this.block.lContainer.length >= ɵCONTAINER_HEADER_OFFSET) {
|
|
94
|
+
const lView = this.block.lContainer[ɵCONTAINER_HEADER_OFFSET];
|
|
95
|
+
ɵgetDeferBlocks(lView, deferBlocks);
|
|
96
|
+
for (const block of deferBlocks) {
|
|
97
|
+
deferBlockFixtures.push(new DeferBlockFixture(block, this.componentFixture));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return Promise.resolve(deferBlockFixtures);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function hasStateTemplate(state, block) {
|
|
104
|
+
switch (state) {
|
|
105
|
+
case ɵDeferBlockState.Placeholder:
|
|
106
|
+
return block.tDetails.placeholderTmplIndex !== null;
|
|
107
|
+
case ɵDeferBlockState.Loading:
|
|
108
|
+
return block.tDetails.loadingTmplIndex !== null;
|
|
109
|
+
case ɵDeferBlockState.Error:
|
|
110
|
+
return block.tDetails.errorTmplIndex !== null;
|
|
111
|
+
case ɵDeferBlockState.Complete:
|
|
112
|
+
return true;
|
|
113
|
+
default:
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function getDeferBlockStateNameFromEnum(state) {
|
|
118
|
+
switch (state) {
|
|
119
|
+
case ɵDeferBlockState.Placeholder:
|
|
120
|
+
return 'Placeholder';
|
|
121
|
+
case ɵDeferBlockState.Loading:
|
|
122
|
+
return 'Loading';
|
|
123
|
+
case ɵDeferBlockState.Error:
|
|
124
|
+
return 'Error';
|
|
125
|
+
default:
|
|
126
|
+
return 'Main';
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
53
130
|
/**
|
|
54
131
|
* Fixture for debugging and testing a component.
|
|
55
132
|
*
|
|
56
133
|
* @publicApi
|
|
57
134
|
*/
|
|
58
135
|
class ComponentFixture {
|
|
136
|
+
/** @nodoc */
|
|
59
137
|
constructor(componentRef, ngZone, effectRunner, _autoDetect) {
|
|
60
138
|
this.componentRef = componentRef;
|
|
61
139
|
this.ngZone = ngZone;
|
|
@@ -190,6 +268,19 @@ class ComponentFixture {
|
|
|
190
268
|
return this._promise;
|
|
191
269
|
}
|
|
192
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
* Retrieves all defer block fixtures in the component fixture
|
|
273
|
+
*/
|
|
274
|
+
getDeferBlocks() {
|
|
275
|
+
const deferBlocks = [];
|
|
276
|
+
const lView = this.componentRef.hostView['_lView'];
|
|
277
|
+
ɵgetDeferBlocks(lView, deferBlocks);
|
|
278
|
+
const deferBlockFixtures = [];
|
|
279
|
+
for (const block of deferBlocks) {
|
|
280
|
+
deferBlockFixtures.push(new DeferBlockFixture(block, this));
|
|
281
|
+
}
|
|
282
|
+
return Promise.resolve(deferBlockFixtures);
|
|
283
|
+
}
|
|
193
284
|
_getRenderer() {
|
|
194
285
|
if (this._renderer === undefined) {
|
|
195
286
|
this._renderer = this.componentRef.injector.get(RendererFactory2, null);
|
|
@@ -674,6 +765,7 @@ class TestBedCompiler {
|
|
|
674
765
|
this.providerOverridesByToken = new Map();
|
|
675
766
|
this.scopesWithOverriddenProviders = new Set();
|
|
676
767
|
this.testModuleRef = null;
|
|
768
|
+
this.deferBlockBehavior = ɵDeferBlockBehavior.Manual;
|
|
677
769
|
class DynamicTestModule {
|
|
678
770
|
}
|
|
679
771
|
this.testModuleType = DynamicTestModule;
|
|
@@ -701,6 +793,7 @@ class TestBedCompiler {
|
|
|
701
793
|
if (moduleDef.schemas !== undefined) {
|
|
702
794
|
this.schemas.push(...moduleDef.schemas);
|
|
703
795
|
}
|
|
796
|
+
this.deferBlockBehavior = moduleDef.deferBlockBehavior ?? ɵDeferBlockBehavior.Manual;
|
|
704
797
|
}
|
|
705
798
|
overrideModule(ngModule, override) {
|
|
706
799
|
if (ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT) {
|
|
@@ -1289,6 +1382,7 @@ class TestBedCompiler {
|
|
|
1289
1382
|
const providers = [
|
|
1290
1383
|
provideZoneChangeDetection(),
|
|
1291
1384
|
{ provide: Compiler, useFactory: () => new R3TestCompiler(this) },
|
|
1385
|
+
{ provide: ɵDEFER_BLOCK_CONFIG, useValue: { behavior: this.deferBlockBehavior } },
|
|
1292
1386
|
...this.providers,
|
|
1293
1387
|
...this.providerOverrides,
|
|
1294
1388
|
];
|
|
@@ -1498,6 +1592,11 @@ function getTestBed() {
|
|
|
1498
1592
|
*/
|
|
1499
1593
|
class TestBedImpl {
|
|
1500
1594
|
constructor() {
|
|
1595
|
+
/**
|
|
1596
|
+
* Defer block behavior option that specifies whether defer blocks will be triggered manually
|
|
1597
|
+
* or set to play through.
|
|
1598
|
+
*/
|
|
1599
|
+
this._instanceDeferBlockBehavior = ɵDeferBlockBehavior.Manual;
|
|
1501
1600
|
// Properties
|
|
1502
1601
|
this.platform = null;
|
|
1503
1602
|
this.ngModule = null;
|
|
@@ -1689,6 +1788,7 @@ class TestBedImpl {
|
|
|
1689
1788
|
this._instanceTeardownOptions = undefined;
|
|
1690
1789
|
this._instanceErrorOnUnknownElementsOption = undefined;
|
|
1691
1790
|
this._instanceErrorOnUnknownPropertiesOption = undefined;
|
|
1791
|
+
this._instanceDeferBlockBehavior = ɵDeferBlockBehavior.Manual;
|
|
1692
1792
|
}
|
|
1693
1793
|
}
|
|
1694
1794
|
return this;
|
|
@@ -1714,6 +1814,7 @@ class TestBedImpl {
|
|
|
1714
1814
|
this._instanceTeardownOptions = moduleDef.teardown;
|
|
1715
1815
|
this._instanceErrorOnUnknownElementsOption = moduleDef.errorOnUnknownElements;
|
|
1716
1816
|
this._instanceErrorOnUnknownPropertiesOption = moduleDef.errorOnUnknownProperties;
|
|
1817
|
+
this._instanceDeferBlockBehavior = moduleDef.deferBlockBehavior ?? ɵDeferBlockBehavior.Manual;
|
|
1717
1818
|
// Store the current value of the strict mode option,
|
|
1718
1819
|
// so we can restore it later
|
|
1719
1820
|
this._previousErrorOnUnknownElementsOption = ɵgetUnknownElementStrictMode();
|
|
@@ -1899,6 +2000,9 @@ class TestBedImpl {
|
|
|
1899
2000
|
TestBedImpl._environmentTeardownOptions?.destroyAfterEach ??
|
|
1900
2001
|
TEARDOWN_TESTING_MODULE_ON_DESTROY_DEFAULT;
|
|
1901
2002
|
}
|
|
2003
|
+
getDeferBlockBehavior() {
|
|
2004
|
+
return this._instanceDeferBlockBehavior;
|
|
2005
|
+
}
|
|
1902
2006
|
tearDownTestingModule() {
|
|
1903
2007
|
// If the module ref has already been destroyed, we won't be able to get a test renderer.
|
|
1904
2008
|
if (this._testModuleRef === null) {
|
|
@@ -2059,5 +2163,5 @@ const __core_private_testing_placeholder__ = '';
|
|
|
2059
2163
|
* Generated bundle index. Do not edit.
|
|
2060
2164
|
*/
|
|
2061
2165
|
|
|
2062
|
-
export { ComponentFixture, ComponentFixtureAutoDetect, ComponentFixtureNoNgZone, InjectSetupWrapper, TestBed, TestComponentRenderer, __core_private_testing_placeholder__, async, discardPeriodicTasks, fakeAsync, flush, flushMicrotasks, getTestBed, inject, resetFakeAsyncZone, tick, waitForAsync, withModule, MetadataOverrider as ɵMetadataOverrider };
|
|
2166
|
+
export { ComponentFixture, ComponentFixtureAutoDetect, ComponentFixtureNoNgZone, DeferBlockFixture, InjectSetupWrapper, TestBed, TestComponentRenderer, __core_private_testing_placeholder__, async, discardPeriodicTasks, fakeAsync, flush, flushMicrotasks, getTestBed, inject, resetFakeAsyncZone, tick, waitForAsync, withModule, MetadataOverrider as ɵMetadataOverrider };
|
|
2063
2167
|
//# sourceMappingURL=testing.mjs.map
|