@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.
Files changed (42) hide show
  1. package/esm2022/src/core.mjs +2 -2
  2. package/esm2022/src/core_private_export.mjs +3 -1
  3. package/esm2022/src/core_render3_private_export.mjs +3 -2
  4. package/esm2022/src/errors.mjs +1 -1
  5. package/esm2022/src/metadata/ng_module_def.mjs +1 -1
  6. package/esm2022/src/render3/after_render_hooks.mjs +100 -13
  7. package/esm2022/src/render3/deps_tracker/api.mjs +1 -1
  8. package/esm2022/src/render3/deps_tracker/deps_tracker.mjs +13 -3
  9. package/esm2022/src/render3/index.mjs +2 -2
  10. package/esm2022/src/render3/instructions/defer.mjs +121 -40
  11. package/esm2022/src/render3/interfaces/defer.mjs +66 -1
  12. package/esm2022/src/render3/interfaces/definition.mjs +1 -1
  13. package/esm2022/src/render3/local_compilation.mjs +8 -2
  14. package/esm2022/src/render3/reactive_lview_consumer.mjs +1 -1
  15. package/esm2022/src/render3/reactivity/effect.mjs +3 -15
  16. package/esm2022/src/render3/scope.mjs +10 -4
  17. package/esm2022/src/signals/src/api.mjs +2 -2
  18. package/esm2022/src/signals/src/computed.mjs +50 -45
  19. package/esm2022/src/signals/src/graph.mjs +7 -2
  20. package/esm2022/src/signals/src/signal.mjs +11 -6
  21. package/esm2022/src/signals/src/watch.mjs +40 -12
  22. package/esm2022/src/version.mjs +1 -1
  23. package/esm2022/testing/src/component_fixture.mjs +17 -2
  24. package/esm2022/testing/src/defer.mjs +84 -0
  25. package/esm2022/testing/src/logger.mjs +3 -3
  26. package/esm2022/testing/src/test_bed.mjs +12 -2
  27. package/esm2022/testing/src/test_bed_common.mjs +1 -1
  28. package/esm2022/testing/src/test_bed_compiler.mjs +5 -2
  29. package/esm2022/testing/src/testing.mjs +3 -1
  30. package/fesm2022/core.mjs +415 -132
  31. package/fesm2022/core.mjs.map +1 -1
  32. package/fesm2022/rxjs-interop.mjs +1 -1
  33. package/fesm2022/testing.mjs +107 -3
  34. package/fesm2022/testing.mjs.map +1 -1
  35. package/index.d.ts +202 -8
  36. package/package.json +3 -3
  37. package/rxjs-interop/index.d.ts +1 -1
  38. package/schematics/migrations/guard-and-resolve-interfaces/bundle.js +13 -13
  39. package/schematics/migrations/remove-module-id/bundle.js +14 -14
  40. package/schematics/ng-generate/standalone-migration/bundle.js +1890 -1155
  41. package/schematics/ng-generate/standalone-migration/bundle.js.map +4 -4
  42. package/testing/index.d.ts +41 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v17.0.0-next.4
2
+ * @license Angular v17.0.0-next.5
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -1,10 +1,11 @@
1
1
  /**
2
- * @license Angular v17.0.0-next.4
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