@angular/core 20.0.3 → 20.0.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 (74) hide show
  1. package/{api.d-B0vztftH.d.ts → api.d.d.ts} +2 -2
  2. package/{chrome_dev_tools_performance.d-DvzAxqBc.d.ts → chrome_dev_tools_performance.d.d.ts} +3 -3
  3. package/{discovery.d-C5dkZ8lJ.d.ts → discovery.d.d.ts} +6 -5
  4. package/{event_dispatcher.d-BReQpZfC.d.ts → event_dispatcher.d.d.ts} +1 -1
  5. package/fesm2022/{attribute-BWp59EjE.mjs → attribute.mjs} +2 -2
  6. package/fesm2022/attribute.mjs.map +1 -0
  7. package/fesm2022/core.mjs +18 -20
  8. package/fesm2022/core.mjs.map +1 -1
  9. package/fesm2022/{debug_node-JnOYh9kg.mjs → debug_node.mjs} +32 -19
  10. package/fesm2022/debug_node.mjs.map +1 -0
  11. package/fesm2022/primitives/di.mjs +1 -1
  12. package/fesm2022/primitives/di.mjs.map +1 -1
  13. package/fesm2022/primitives/event-dispatch.mjs +2 -2
  14. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  15. package/fesm2022/primitives/signals.mjs +5 -5
  16. package/fesm2022/primitives/signals.mjs.map +1 -1
  17. package/fesm2022/{resource-BarKSp_3.mjs → resource.mjs} +12 -8
  18. package/fesm2022/resource.mjs.map +1 -0
  19. package/fesm2022/{root_effect_scheduler-DCy1y1b8.mjs → root_effect_scheduler.mjs} +20 -6
  20. package/fesm2022/root_effect_scheduler.mjs.map +1 -0
  21. package/fesm2022/rxjs-interop.mjs +5 -5
  22. package/fesm2022/rxjs-interop.mjs.map +1 -1
  23. package/fesm2022/{signal-nCiHhWf6.mjs → signal.mjs} +2 -2
  24. package/fesm2022/signal.mjs.map +1 -0
  25. package/fesm2022/testing.mjs +142 -53
  26. package/fesm2022/testing.mjs.map +1 -1
  27. package/fesm2022/{untracked-DmD_2MlC.mjs → untracked.mjs} +3 -3
  28. package/fesm2022/untracked.mjs.map +1 -0
  29. package/fesm2022/{weak_ref-BaIq-pgY.mjs → weak_ref.mjs} +2 -2
  30. package/fesm2022/weak_ref.mjs.map +1 -0
  31. package/{graph.d-BcIOep_B.d.ts → graph.d.d.ts} +1 -1
  32. package/index.d.ts +11 -14
  33. package/package.json +2 -2
  34. package/primitives/di/index.d.ts +1 -1
  35. package/primitives/event-dispatch/index.d.ts +3 -3
  36. package/primitives/signals/index.d.ts +6 -6
  37. package/rxjs-interop/index.d.ts +5 -5
  38. package/schematics/bundles/{apply_import_manager-DT15wSJs.cjs → apply_import_manager-z2wdNH9i.cjs} +3 -3
  39. package/schematics/bundles/{checker-Bu1Wu4f7.cjs → checker-bovuFVqM.cjs} +40 -7
  40. package/schematics/bundles/cleanup-unused-imports.cjs +35 -21
  41. package/schematics/bundles/{compiler_host-C_4Iw5UD.cjs → compiler_host-Kg3VLaJg.cjs} +2 -2
  42. package/schematics/bundles/control-flow-migration.cjs +3 -3
  43. package/schematics/bundles/document-core.cjs +5 -5
  44. package/schematics/bundles/imports-CIX-JgAN.cjs +1 -1
  45. package/schematics/bundles/{index-CAM7Xiu7.cjs → index-C_IZ6xLU.cjs} +4 -4
  46. package/schematics/bundles/{index-CCX_cTPD.cjs → index-D6D7R0Xm.cjs} +12 -12
  47. package/schematics/bundles/inject-flags.cjs +5 -5
  48. package/schematics/bundles/inject-migration.cjs +9 -4
  49. package/schematics/bundles/leading_space-D9nQ8UQC.cjs +1 -1
  50. package/schematics/bundles/{migrate_ts_type_references-DSqmdRpG.cjs → migrate_ts_type_references-CNZBdxAV.cjs} +5 -5
  51. package/schematics/bundles/ng_decorators-B5HCqr20.cjs +1 -1
  52. package/schematics/bundles/nodes-B16H9JUd.cjs +1 -1
  53. package/schematics/bundles/output-migration.cjs +6 -6
  54. package/schematics/bundles/{project_paths-BjQra9mv.cjs → project_paths-CBE0nAL9.cjs} +3 -3
  55. package/schematics/bundles/project_tsconfig_paths-CDVxT6Ov.cjs +1 -1
  56. package/schematics/bundles/property_name-BBwFuqMe.cjs +1 -1
  57. package/schematics/bundles/route-lazy-loading.cjs +3 -3
  58. package/schematics/bundles/self-closing-tags-migration.cjs +4 -4
  59. package/schematics/bundles/signal-input-migration.cjs +7 -7
  60. package/schematics/bundles/signal-queries-migration.cjs +7 -7
  61. package/schematics/bundles/signals.cjs +7 -7
  62. package/schematics/bundles/standalone-migration.cjs +4 -4
  63. package/schematics/bundles/symbol-VPWguRxr.cjs +1 -1
  64. package/schematics/bundles/test-bed-get.cjs +4 -4
  65. package/{signal.d-BcmOdASA.d.ts → signal.d.d.ts} +2 -2
  66. package/testing/index.d.ts +73 -6
  67. package/{weak_ref.d-eGOEP9S1.d.ts → weak_ref.d.d.ts} +1 -1
  68. package/fesm2022/attribute-BWp59EjE.mjs.map +0 -1
  69. package/fesm2022/debug_node-JnOYh9kg.mjs.map +0 -1
  70. package/fesm2022/resource-BarKSp_3.mjs.map +0 -1
  71. package/fesm2022/root_effect_scheduler-DCy1y1b8.mjs.map +0 -1
  72. package/fesm2022/signal-nCiHhWf6.mjs.map +0 -1
  73. package/fesm2022/untracked-DmD_2MlC.mjs.map +0 -1
  74. package/fesm2022/weak_ref-BaIq-pgY.mjs.map +0 -1
@@ -1,10 +1,10 @@
1
1
  /**
2
- * @license Angular v20.0.3
2
+ * @license Angular v20.0.5
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
- import { SIGNAL, runPostProducerCreatedFn, producerUpdateValueVersion, signalSetFn, producerMarkClean, signalUpdateFn, REACTIVE_NODE, UNSET, defaultEquals, COMPUTING, consumerBeforeComputation, ERRORED, consumerAfterComputation, producerAccessed, setActiveConsumer } from './signal-nCiHhWf6.mjs';
7
+ import { SIGNAL, runPostProducerCreatedFn, producerUpdateValueVersion, signalSetFn, producerMarkClean, signalUpdateFn, REACTIVE_NODE, UNSET, defaultEquals, COMPUTING, consumerBeforeComputation, ERRORED, consumerAfterComputation, producerAccessed, setActiveConsumer } from './signal.mjs';
8
8
 
9
9
  function createLinkedSignal(sourceFn, computationFn, equalityFn) {
10
10
  const node = Object.create(LINKED_SIGNAL_NODE);
@@ -114,4 +114,4 @@ function untracked(nonReactiveReadsFn) {
114
114
  }
115
115
 
116
116
  export { createLinkedSignal, linkedSignalSetFn, linkedSignalUpdateFn, untracked };
117
- //# sourceMappingURL=untracked-DmD_2MlC.mjs.map
117
+ //# sourceMappingURL=untracked.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"untracked.mjs","sources":["../../../../../k8-fastbuild-ST-46c76129e412/bin/packages/core/primitives/signals/src/linked_signal.ts","../../../../../k8-fastbuild-ST-46c76129e412/bin/packages/core/primitives/signals/src/untracked.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {COMPUTING, ERRORED, UNSET} from './computed';\nimport {defaultEquals, ValueEqualityFn} from './equality';\nimport {\n consumerAfterComputation,\n consumerBeforeComputation,\n producerAccessed,\n producerMarkClean,\n producerUpdateValueVersion,\n REACTIVE_NODE,\n ReactiveNode,\n runPostProducerCreatedFn,\n SIGNAL,\n} from './graph';\nimport {signalSetFn, signalUpdateFn} from './signal';\n\n// Required as the signals library is in a separate package, so we need to explicitly ensure the\n// global `ngDevMode` type is defined.\ndeclare const ngDevMode: boolean | undefined;\n\nexport type ComputationFn<S, D> = (source: S, previous?: {source: S; value: D}) => D;\n\nexport interface LinkedSignalNode<S, D> extends ReactiveNode {\n /**\n * Value of the source signal that was used to derive the computed value.\n */\n sourceValue: S;\n\n /**\n * Current state value, or one of the sentinel values (`UNSET`, `COMPUTING`,\n * `ERROR`).\n */\n value: D;\n\n /**\n * If `value` is `ERRORED`, the error caught from the last computation attempt which will\n * be re-thrown.\n */\n error: unknown;\n\n /**\n * The source function represents reactive dependency based on which the linked state is reset.\n */\n source: () => S;\n\n /**\n * The computation function which will produce a new value based on the source and, optionally - previous values.\n */\n computation: ComputationFn<S, D>;\n\n equal: ValueEqualityFn<D>;\n}\n\nexport type LinkedSignalGetter<S, D> = (() => D) & {\n [SIGNAL]: LinkedSignalNode<S, D>;\n};\n\nexport function createLinkedSignal<S, D>(\n sourceFn: () => S,\n computationFn: ComputationFn<S, D>,\n equalityFn?: ValueEqualityFn<D>,\n): LinkedSignalGetter<S, D> {\n const node: LinkedSignalNode<S, D> = Object.create(LINKED_SIGNAL_NODE);\n\n node.source = sourceFn;\n node.computation = computationFn;\n if (equalityFn != undefined) {\n node.equal = equalityFn;\n }\n\n const linkedSignalGetter = () => {\n // Check if the value needs updating before returning it.\n producerUpdateValueVersion(node);\n\n // Record that someone looked at this signal.\n producerAccessed(node);\n\n if (node.value === ERRORED) {\n throw node.error;\n }\n\n return node.value;\n };\n\n const getter = linkedSignalGetter as LinkedSignalGetter<S, D>;\n getter[SIGNAL] = node;\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n const debugName = node.debugName ? ' (' + node.debugName + ')' : '';\n getter.toString = () => `[LinkedSignal${debugName}: ${node.value}]`;\n }\n\n runPostProducerCreatedFn(node);\n\n return getter;\n}\n\nexport function linkedSignalSetFn<S, D>(node: LinkedSignalNode<S, D>, newValue: D) {\n producerUpdateValueVersion(node);\n signalSetFn(node, newValue);\n producerMarkClean(node);\n}\n\nexport function linkedSignalUpdateFn<S, D>(\n node: LinkedSignalNode<S, D>,\n updater: (value: D) => D,\n): void {\n producerUpdateValueVersion(node);\n signalUpdateFn(node, updater);\n producerMarkClean(node);\n}\n\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nexport const LINKED_SIGNAL_NODE: object = /* @__PURE__ */ (() => {\n return {\n ...REACTIVE_NODE,\n value: UNSET,\n dirty: true,\n error: null,\n equal: defaultEquals,\n kind: 'linkedSignal',\n\n producerMustRecompute(node: LinkedSignalNode<unknown, unknown>): boolean {\n // Force a recomputation if there's no current value, or if the current value is in the\n // process of being calculated (which should throw an error).\n return node.value === UNSET || node.value === COMPUTING;\n },\n\n producerRecomputeValue(node: LinkedSignalNode<unknown, unknown>): void {\n if (node.value === COMPUTING) {\n // Our computation somehow led to a cyclic read of itself.\n throw new Error(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'Detected cycle in computations.' : '',\n );\n }\n\n const oldValue = node.value;\n node.value = COMPUTING;\n\n const prevConsumer = consumerBeforeComputation(node);\n let newValue: unknown;\n try {\n const newSourceValue = node.source();\n const prev =\n oldValue === UNSET || oldValue === ERRORED\n ? undefined\n : {\n source: node.sourceValue,\n value: oldValue,\n };\n newValue = node.computation(newSourceValue, prev);\n node.sourceValue = newSourceValue;\n } catch (err) {\n newValue = ERRORED;\n node.error = err;\n } finally {\n consumerAfterComputation(node, prevConsumer);\n }\n\n if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {\n // No change to `valueVersion` - old and new values are\n // semantically equivalent.\n node.value = oldValue;\n return;\n }\n\n node.value = newValue;\n node.version++;\n },\n };\n})();\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {setActiveConsumer} from './graph';\n\n/**\n * Execute an arbitrary function in a non-reactive (non-tracking) context. The executed function\n * can, optionally, return a value.\n */\nexport function untracked<T>(nonReactiveReadsFn: () => T): T {\n const prevConsumer = setActiveConsumer(null);\n // We are not trying to catch any particular errors here, just making sure that the consumers\n // stack is restored in case of errors.\n try {\n return nonReactiveReadsFn();\n } finally {\n setActiveConsumer(prevConsumer);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v20.0.3
2
+ * @license Angular v20.0.5
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -9,4 +9,4 @@ function setAlternateWeakRefImpl(impl) {
9
9
  }
10
10
 
11
11
  export { setAlternateWeakRefImpl };
12
- //# sourceMappingURL=weak_ref-BaIq-pgY.mjs.map
12
+ //# sourceMappingURL=weak_ref.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weak_ref.mjs","sources":["../../../../../k8-fastbuild-ST-46c76129e412/bin/packages/core/primitives/signals/src/weak_ref.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nexport function setAlternateWeakRefImpl(impl: unknown) {\n // TODO: remove this function\n}\n"],"names":[],"mappings":";;;;;;AAQM,SAAU,uBAAuB,CAAC,IAAa,EAAA;;AAErD;;;;"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v20.0.3
2
+ * @license Angular v20.0.5
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
package/index.d.ts CHANGED
@@ -1,21 +1,21 @@
1
1
  /**
2
- * @license Angular v20.0.3
2
+ * @license Angular v20.0.5
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
- import { SIGNAL, ValueEqualityFn as ValueEqualityFn$1 } from './graph.d-BcIOep_B.js';
8
- import { Signal, WritableSignal, OutputRef, Provider, EnvironmentProviders, Type as Type$1, ModuleWithProviders, TypeProvider, ValueProvider, ClassProvider, ConstructorProvider, ExistingProvider, FactoryProvider, StaticClassProvider, ProviderToken, StaticProvider, Injector, ValueSansProvider, ExistingSansProvider, StaticClassSansProvider, ConstructorSansProvider, FactorySansProvider, ClassSansProvider, InjectionToken, InternalInjectFlags, InjectOptions, ValueEqualityFn, EventCallback, isSignal, enableProfiling as enableProfiling$1 } from './chrome_dev_tools_performance.d-DvzAxqBc.js';
9
- export { AbstractType, CreateSignalOptions, DestroyRef, DestroyableInjector, ImportedNgModuleProviders, OutputRefSubscription, signal, InternalEnvironmentProviders as ɵInternalEnvironmentProviders, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, Writable as ɵWritable, isEnvironmentProviders as ɵisEnvironmentProviders, ɵunwrapWritableSignal } from './chrome_dev_tools_performance.d-DvzAxqBc.js';
10
- import { InputSignalNode, TypeDecorator, AfterRenderRef, EffectCleanupRegisterFn, SchemaMetadata, ComponentDef, DirectiveDef, CssSelectorList, DirectiveDefFeature, HostBindingsFunction, TAttributes, ContentQueriesFunction, ViewQueriesFunction, ComponentTemplate, TConstantsOrFactory, ComponentDefFeature, ViewEncapsulation as ViewEncapsulation$1, ChangeDetectionStrategy as ChangeDetectionStrategy$1, TypeOrFactory, DependencyTypeList, InputFlags, InputTransformFunction, EmbeddedViewRef, LView, ApplicationRef, ChangeDetectorRef, ComponentFactory as ComponentFactory$1, NgModuleRef as NgModuleRef$1, EnvironmentInjector, DirectiveWithBindings, Binding, ComponentRef as ComponentRef$1, ElementRef, ComponentFactoryResolver as ComponentFactoryResolver$1, InternalNgModuleRef, NgModuleFactory as NgModuleFactory$1, ViewRef as ViewRef$1, PlatformRef, NgZone, ChangeDetectionScheduler, NotificationSource, ɵɵFactoryDeclaration as __FactoryDeclaration, ɵɵInjectableDeclaration as __InjectableDeclaration, ɵɵNgModuleDeclaration as __NgModuleDeclaration, ɵɵInjectorDeclaration as __InjectorDeclaration, DeferBlockDependencyInterceptor, DeferBlockConfig, DeferBlockState, TNode, LContainer, TView, TDeferBlockDetails, RNode, Component, TrustedHTML, DehydratedDeferBlock, CompilerOptions, HostDirectiveConfig, ComponentType, NgModuleScopeInfoFromDecorator, DependencyResolverFn, TDeferDetailsFlags, SanitizerFn, LocalRefExtractor, OpaqueViewState, GlobalTargetResolver, ProjectionSlots, QueryFlags, QueryList, RElement, RawScopeInfoFromDecorator, ClassDebugInfo, Directive, NgModule, Pipe, TrustedScriptURL, TrustedScript, PipeType, DirectiveType } from './discovery.d-C5dkZ8lJ.js';
11
- export { APP_BOOTSTRAP_LISTENER, BootstrapOptions, COMPILER_OPTIONS, CUSTOM_ELEMENTS_SCHEMA, Compiler, CompilerFactory, ComponentDecorator, CreateEffectOptions, DebugElement, DebugEventListener, DebugNode, DirectiveDecorator, EffectCleanupFn, EffectRef, EventEmitter, HostBinding, HostBindingDecorator, HostListener, HostListenerDecorator, InjectableType, InjectorType, Input, InputDecorator, ListenerOptions, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModuleDecorator, NgProbeToken, Output, OutputDecorator, PipeDecorator, Predicate, Renderer2, RendererFactory2, RendererStyleFlags2, RendererType2, Sanitizer, SecurityContext, asNativeElements, defineInjectable, effect, getDebugNode, inputBinding, outputBinding, twoWayBinding, AfterRenderManager as ɵAfterRenderManager, AnimationRendererType as ɵAnimationRendererType, AttributeMarker as ɵAttributeMarker, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockDetails as ɵDeferBlockDetails, EffectScheduler as ɵEffectScheduler, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, NG_INJ_DEF as ɵNG_INJ_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NavigateEvent as ɵNavigateEvent, Navigation as ɵNavigation, NavigationCurrentEntryChangeEvent as ɵNavigationCurrentEntryChangeEvent, NavigationDestination as ɵNavigationDestination, NavigationHistoryEntry as ɵNavigationHistoryEntry, NavigationInterceptOptions as ɵNavigationInterceptOptions, NavigationNavigateOptions as ɵNavigationNavigateOptions, NavigationOptions as ɵNavigationOptions, NavigationReloadOptions as ɵNavigationReloadOptions, NavigationResult as ɵNavigationResult, NavigationTransition as ɵNavigationTransition, NavigationTypeString as ɵNavigationTypeString, NavigationUpdateCurrentEntryOptions as ɵNavigationUpdateCurrentEntryOptions, NoopNgZone as ɵNoopNgZone, PipeDef as ɵPipeDef, R3Injector as ɵR3Injector, RenderFlags as ɵRenderFlags, TracingAction as ɵTracingAction, TracingService as ɵTracingService, TracingSnapshot as ɵTracingSnapshot, ZONELESS_ENABLED as ɵZONELESS_ENABLED, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getInjectableDef as ɵgetInjectableDef, injectChangeDetectorRef as ɵinjectChangeDetectorRef, isBoundToModule as ɵisBoundToModule, isInjectable as ɵisInjectable, ɵɵComponentDeclaration, ɵɵDirectiveDeclaration, ɵɵInjectorDef, ɵɵPipeDeclaration, ɵɵdefineInjectable, ɵɵdefineInjector } from './discovery.d-C5dkZ8lJ.js';
12
- import { ResourceOptions, ResourceRef, ResourceStreamingLoader, ResourceStatus, WritableResource, Resource } from './api.d-B0vztftH.js';
13
- export { BaseResourceOptions, OutputEmitterRef, OutputOptions, PromiseResourceOptions, ResourceLoader, ResourceLoaderParams, ResourceStreamItem, StreamingResourceOptions, output, getOutputDestroyRef as ɵgetOutputDestroyRef } from './api.d-B0vztftH.js';
14
- import './event_dispatcher.d-BReQpZfC.js';
7
+ import { SIGNAL, ValueEqualityFn as ValueEqualityFn$1 } from './graph.d.js';
8
+ import { Signal, WritableSignal, OutputRef, Provider, EnvironmentProviders, Type as Type$1, ModuleWithProviders, TypeProvider, ValueProvider, ClassProvider, ConstructorProvider, ExistingProvider, FactoryProvider, StaticClassProvider, ProviderToken, StaticProvider, Injector, ValueSansProvider, ExistingSansProvider, StaticClassSansProvider, ConstructorSansProvider, FactorySansProvider, ClassSansProvider, InjectionToken, InternalInjectFlags, InjectOptions, ValueEqualityFn, EventCallback, isSignal, enableProfiling as enableProfiling$1 } from './chrome_dev_tools_performance.d.js';
9
+ export { AbstractType, CreateSignalOptions, DestroyRef, DestroyableInjector, ImportedNgModuleProviders, OutputRefSubscription, signal, InternalEnvironmentProviders as ɵInternalEnvironmentProviders, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, Writable as ɵWritable, isEnvironmentProviders as ɵisEnvironmentProviders, ɵunwrapWritableSignal } from './chrome_dev_tools_performance.d.js';
10
+ import { InputSignalNode, TypeDecorator, AfterRenderRef, EffectCleanupRegisterFn, SchemaMetadata, ComponentDef, DirectiveDef, CssSelectorList, DirectiveDefFeature, HostBindingsFunction, TAttributes, ContentQueriesFunction, ViewQueriesFunction, ComponentTemplate, TConstantsOrFactory, ComponentDefFeature, ViewEncapsulation as ViewEncapsulation$1, ChangeDetectionStrategy as ChangeDetectionStrategy$1, TypeOrFactory, DependencyTypeList, InputFlags, InputTransformFunction, EmbeddedViewRef, LView, ApplicationRef, ChangeDetectorRef, ComponentFactory as ComponentFactory$1, NgModuleRef as NgModuleRef$1, EnvironmentInjector, DirectiveWithBindings, Binding, ComponentRef as ComponentRef$1, ElementRef, ComponentFactoryResolver as ComponentFactoryResolver$1, InternalNgModuleRef, NgModuleFactory as NgModuleFactory$1, ViewRef as ViewRef$1, PlatformRef, NgZone, ChangeDetectionScheduler, NotificationSource, ɵɵFactoryDeclaration as __FactoryDeclaration, ɵɵInjectableDeclaration as __InjectableDeclaration, ɵɵNgModuleDeclaration as __NgModuleDeclaration, ɵɵInjectorDeclaration as __InjectorDeclaration, DeferBlockDependencyInterceptor, DeferBlockConfig, DeferBlockState, TNode, LContainer, TView, TDeferBlockDetails, RNode, Component, TrustedHTML, DehydratedDeferBlock, CompilerOptions, HostDirectiveConfig, ComponentType, NgModuleScopeInfoFromDecorator, DependencyResolverFn, TDeferDetailsFlags, SanitizerFn, LocalRefExtractor, OpaqueViewState, GlobalTargetResolver, ProjectionSlots, QueryFlags, QueryList, RElement, RawScopeInfoFromDecorator, ClassDebugInfo, Directive, NgModule, Pipe, TrustedScriptURL, TrustedScript, PipeType, DirectiveType } from './discovery.d.js';
11
+ export { APP_BOOTSTRAP_LISTENER, BootstrapOptions, COMPILER_OPTIONS, CUSTOM_ELEMENTS_SCHEMA, Compiler, CompilerFactory, ComponentDecorator, CreateEffectOptions, DebugElement, DebugEventListener, DebugNode, DirectiveDecorator, EffectCleanupFn, EffectRef, EventEmitter, HostBinding, HostBindingDecorator, HostListener, HostListenerDecorator, InjectableType, InjectorType, Input, InputDecorator, ListenerOptions, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModuleDecorator, NgProbeToken, Output, OutputDecorator, PipeDecorator, Predicate, Renderer2, RendererFactory2, RendererStyleFlags2, RendererType2, Sanitizer, SecurityContext, asNativeElements, defineInjectable, effect, getDebugNode, inputBinding, outputBinding, twoWayBinding, AfterRenderManager as ɵAfterRenderManager, AnimationRendererType as ɵAnimationRendererType, AttributeMarker as ɵAttributeMarker, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockDetails as ɵDeferBlockDetails, EffectScheduler as ɵEffectScheduler, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, NG_INJ_DEF as ɵNG_INJ_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NavigateEvent as ɵNavigateEvent, Navigation as ɵNavigation, NavigationCurrentEntryChangeEvent as ɵNavigationCurrentEntryChangeEvent, NavigationDestination as ɵNavigationDestination, NavigationHistoryEntry as ɵNavigationHistoryEntry, NavigationInterceptOptions as ɵNavigationInterceptOptions, NavigationNavigateOptions as ɵNavigationNavigateOptions, NavigationOptions as ɵNavigationOptions, NavigationReloadOptions as ɵNavigationReloadOptions, NavigationResult as ɵNavigationResult, NavigationTransition as ɵNavigationTransition, NavigationTypeString as ɵNavigationTypeString, NavigationUpdateCurrentEntryOptions as ɵNavigationUpdateCurrentEntryOptions, NoopNgZone as ɵNoopNgZone, PipeDef as ɵPipeDef, R3Injector as ɵR3Injector, RenderFlags as ɵRenderFlags, TracingAction as ɵTracingAction, TracingService as ɵTracingService, TracingSnapshot as ɵTracingSnapshot, ZONELESS_ENABLED as ɵZONELESS_ENABLED, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getInjectableDef as ɵgetInjectableDef, injectChangeDetectorRef as ɵinjectChangeDetectorRef, isBoundToModule as ɵisBoundToModule, isInjectable as ɵisInjectable, ɵɵComponentDeclaration, ɵɵDirectiveDeclaration, ɵɵInjectorDef, ɵɵPipeDeclaration, ɵɵdefineInjectable, ɵɵdefineInjector } from './discovery.d.js';
12
+ import { ResourceOptions, ResourceRef, ResourceStreamingLoader, ResourceStatus, WritableResource, Resource } from './api.d.js';
13
+ export { BaseResourceOptions, OutputEmitterRef, OutputOptions, PromiseResourceOptions, ResourceLoader, ResourceLoaderParams, ResourceStreamItem, StreamingResourceOptions, output, getOutputDestroyRef as ɵgetOutputDestroyRef } from './api.d.js';
14
+ import './event_dispatcher.d.js';
15
15
  import { Observable, Subscribable } from 'rxjs';
16
- export { setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl } from './weak_ref.d-eGOEP9S1.js';
16
+ export { setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl } from './weak_ref.d.js';
17
17
  export { setCurrentInjector as ɵsetCurrentInjector } from './primitives/di/index.js';
18
- import './signal.d-BcmOdASA.js';
18
+ import './signal.d.js';
19
19
  import '@angular/core/primitives/di';
20
20
 
21
21
  /**
@@ -4559,7 +4559,6 @@ declare const LOCALE_ID: InjectionToken<string>;
4559
4559
  * In standalone apps:
4560
4560
  * ```ts
4561
4561
  * import { LOCALE_ID, ApplicationConfig } from '@angular/core';
4562
- * import { AppModule } from './app/app.module';
4563
4562
  *
4564
4563
  * const appConfig: ApplicationConfig = {
4565
4564
  * providers: [{provide: DEFAULT_CURRENCY_CODE, useValue: 'EUR' }]
@@ -4590,7 +4589,6 @@ declare const DEFAULT_CURRENCY_CODE: InjectionToken<string>;
4590
4589
  * In standalone apps:
4591
4590
  * ```ts
4592
4591
  * import { LOCALE_ID, ApplicationConfig } from '@angular/core';
4593
- * import { AppModule } from './app/app.module';
4594
4592
  *
4595
4593
  * const appConfig: ApplicationConfig = {
4596
4594
  * providers: [{provide: TRANSLATIONS, useValue: translations }]
@@ -4625,7 +4623,6 @@ declare const TRANSLATIONS: InjectionToken<string>;
4625
4623
  * In standalone apps:
4626
4624
  * ```ts
4627
4625
  * import { LOCALE_ID, ApplicationConfig } from '@angular/core';
4628
- * import { AppModule } from './app/app.module';
4629
4626
  *
4630
4627
  * const appConfig: ApplicationConfig = {
4631
4628
  * providers: [{provide: TRANSLATIONS_FORMAT, useValue: 'xlf' }]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/core",
3
- "version": "20.0.3",
3
+ "version": "20.0.5",
4
4
  "description": "Angular - the core framework",
5
5
  "author": "angular",
6
6
  "license": "MIT",
@@ -46,7 +46,7 @@
46
46
  "tslib": "^2.3.0"
47
47
  },
48
48
  "peerDependencies": {
49
- "@angular/compiler": "20.0.3",
49
+ "@angular/compiler": "20.0.5",
50
50
  "rxjs": "^6.5.3 || ^7.4.0",
51
51
  "zone.js": "~0.15.0"
52
52
  },
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v20.0.3
2
+ * @license Angular v20.0.5
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -1,11 +1,11 @@
1
1
  /**
2
- * @license Angular v20.0.3
2
+ * @license Angular v20.0.5
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
- import { EarlyJsactionDataContainer, EventInfo, Restriction } from '../../event_dispatcher.d-BReQpZfC.js';
8
- export { EventContract, EventContractContainer, EventDispatcher, EventInfoWrapper, EventPhase, registerDispatcher } from '../../event_dispatcher.d-BReQpZfC.js';
7
+ import { EarlyJsactionDataContainer, EventInfo, Restriction } from '../../event_dispatcher.d.js';
8
+ export { EventContract, EventContractContainer, EventDispatcher, EventInfoWrapper, EventPhase, registerDispatcher } from '../../event_dispatcher.d.js';
9
9
 
10
10
  declare const Attribute: {
11
11
  /**
@@ -1,14 +1,14 @@
1
1
  /**
2
- * @license Angular v20.0.3
2
+ * @license Angular v20.0.5
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
- import { ReactiveNode, ValueEqualityFn, SIGNAL } from '../../graph.d-BcIOep_B.js';
8
- export { REACTIVE_NODE, Reactive, ReactiveHookFn, consumerAfterComputation, consumerBeforeComputation, consumerDestroy, consumerMarkDirty, consumerPollProducersForChange, defaultEquals, getActiveConsumer, isInNotificationPhase, isReactive, producerAccessed, producerIncrementEpoch, producerMarkClean, producerNotifyConsumers, producerUpdateValueVersion, producerUpdatesAllowed, runPostProducerCreatedFn, setActiveConsumer, setPostProducerCreatedFn } from '../../graph.d-BcIOep_B.js';
9
- import { SignalNode } from '../../signal.d-BcmOdASA.js';
10
- export { SIGNAL_NODE, SignalGetter, createSignal, runPostSignalSetFn, setPostSignalSetFn, signalGetFn, signalSetFn, signalUpdateFn } from '../../signal.d-BcmOdASA.js';
11
- export { setAlternateWeakRefImpl } from '../../weak_ref.d-eGOEP9S1.js';
7
+ import { ReactiveNode, ValueEqualityFn, SIGNAL } from '../../graph.d.js';
8
+ export { REACTIVE_NODE, Reactive, ReactiveHookFn, consumerAfterComputation, consumerBeforeComputation, consumerDestroy, consumerMarkDirty, consumerPollProducersForChange, defaultEquals, getActiveConsumer, isInNotificationPhase, isReactive, producerAccessed, producerIncrementEpoch, producerMarkClean, producerNotifyConsumers, producerUpdateValueVersion, producerUpdatesAllowed, runPostProducerCreatedFn, setActiveConsumer, setPostProducerCreatedFn } from '../../graph.d.js';
9
+ import { SignalNode } from '../../signal.d.js';
10
+ export { SIGNAL_NODE, SignalGetter, createSignal, runPostSignalSetFn, setPostSignalSetFn, signalGetFn, signalSetFn, signalUpdateFn } from '../../signal.d.js';
11
+ export { setAlternateWeakRefImpl } from '../../weak_ref.d.js';
12
12
 
13
13
  /**
14
14
  * A computation, which derives a value from a declarative reactive expression.
@@ -1,14 +1,14 @@
1
1
  /**
2
- * @license Angular v20.0.3
2
+ * @license Angular v20.0.5
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
- import { OutputRef, DestroyRef, Injector, Signal } from '../chrome_dev_tools_performance.d-DvzAxqBc.js';
8
- import { OutputOptions, BaseResourceOptions, ResourceLoaderParams, ResourceRef } from '../api.d-B0vztftH.js';
9
- import '../event_dispatcher.d-BReQpZfC.js';
7
+ import { OutputRef, DestroyRef, Injector, Signal } from '../chrome_dev_tools_performance.d.js';
8
+ import { OutputOptions, BaseResourceOptions, ResourceLoaderParams, ResourceRef } from '../api.d.js';
9
+ import '../event_dispatcher.d.js';
10
10
  import { Observable, MonoTypeOperatorFunction, Subscribable } from 'rxjs';
11
- import { ValueEqualityFn } from '../graph.d-BcIOep_B.js';
11
+ import { ValueEqualityFn } from '../graph.d.js';
12
12
 
13
13
  /**
14
14
  * Declares an Angular output that is using an RxJS observable as a source
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.3
3
+ * @license Angular v20.0.5
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,8 +8,8 @@
8
8
 
9
9
  var ts = require('typescript');
10
10
  require('os');
11
- var checker = require('./checker-Bu1Wu4f7.cjs');
12
- var project_paths = require('./project_paths-BjQra9mv.cjs');
11
+ var checker = require('./checker-bovuFVqM.cjs');
12
+ var project_paths = require('./project_paths-CBE0nAL9.cjs');
13
13
 
14
14
  /**
15
15
  * Applies import manager changes, and writes them as replacements the
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.3
3
+ * @license Angular v20.0.5
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -32166,7 +32166,7 @@ function isAttrNode(ast) {
32166
32166
  * @description
32167
32167
  * Entry point for all public APIs of the compiler package.
32168
32168
  */
32169
- new Version('20.0.3');
32169
+ new Version('20.0.5');
32170
32170
 
32171
32171
  //////////////////////////////////////
32172
32172
  // THIS FILE HAS GLOBAL SIDE EFFECT //
@@ -33182,7 +33182,7 @@ class NodeJSPathManipulation {
33182
33182
  // G3-ESM-MARKER: G3 uses CommonJS, but externally everything in ESM.
33183
33183
  // CommonJS/ESM interop for determining the current file name and containing dir.
33184
33184
  const isCommonJS = typeof __filename !== 'undefined';
33185
- const currentFileUrl = isCommonJS ? null : (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('checker-Bu1Wu4f7.cjs', document.baseURI).href));
33185
+ const currentFileUrl = isCommonJS ? null : (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('checker-bovuFVqM.cjs', document.baseURI).href));
33186
33186
  const currentFileName = isCommonJS ? __filename : url.fileURLToPath(currentFileUrl);
33187
33187
  /**
33188
33188
  * A wrapper around the Node.js file-system that supports readonly operations and path manipulation.
@@ -39517,6 +39517,9 @@ function validateAccessOfInitializerApiMember({ api, call }, member) {
39517
39517
  * @returns The parsed initializer API, or null if none was found.
39518
39518
  */
39519
39519
  function tryParseInitializerApi(functions, expression, reflector, importTracker) {
39520
+ if (ts.isAsExpression(expression) || ts.isParenthesizedExpression(expression)) {
39521
+ return tryParseInitializerApi(functions, expression.expression, reflector, importTracker);
39522
+ }
39520
39523
  if (!ts.isCallExpression(expression)) {
39521
39524
  return null;
39522
39525
  }
@@ -44249,6 +44252,22 @@ class OutOfBandDiagnosticRecorderImpl {
44249
44252
  * is ever produced per node.
44250
44253
  */
44251
44254
  recordedPipes = new Set();
44255
+ /** Common pipes that can be suggested to users. */
44256
+ pipeSuggestions = new Map([
44257
+ ['async', 'AsyncPipe'],
44258
+ ['uppercase', 'UpperCasePipe'],
44259
+ ['lowercase', 'LowerCasePipe'],
44260
+ ['json', 'JsonPipe'],
44261
+ ['slice', 'SlicePipe'],
44262
+ ['number', 'DecimalPipe'],
44263
+ ['percent', 'PercentPipe'],
44264
+ ['titlecase', 'TitleCasePipe'],
44265
+ ['currency', 'CurrencyPipe'],
44266
+ ['date', 'DatePipe'],
44267
+ ['i18nPlural', 'I18nPluralPipe'],
44268
+ ['i18nSelect', 'I18nSelectPipe'],
44269
+ ['keyvalue', 'KeyValuePipe'],
44270
+ ]);
44252
44271
  constructor(resolver) {
44253
44272
  this.resolver = resolver;
44254
44273
  }
@@ -44261,16 +44280,30 @@ class OutOfBandDiagnosticRecorderImpl {
44261
44280
  const errorMsg = `No directive found with exportAs '${value}'.`;
44262
44281
  this._diagnostics.push(makeTemplateDiagnostic(id, mapping, ref.valueSpan || ref.sourceSpan, ts.DiagnosticCategory.Error, ngErrorCode(exports.ErrorCode.MISSING_REFERENCE_TARGET), errorMsg));
44263
44282
  }
44264
- missingPipe(id, ast) {
44283
+ missingPipe(id, ast, isStandalone) {
44265
44284
  if (this.recordedPipes.has(ast)) {
44266
44285
  return;
44267
44286
  }
44268
- const mapping = this.resolver.getTemplateSourceMapping(id);
44269
- const errorMsg = `No pipe found with name '${ast.name}'.`;
44270
44287
  const sourceSpan = this.resolver.toTemplateParseSourceSpan(id, ast.nameSpan);
44271
44288
  if (sourceSpan === null) {
44272
44289
  throw new Error(`Assertion failure: no SourceLocation found for usage of pipe '${ast.name}'.`);
44273
44290
  }
44291
+ const mapping = this.resolver.getTemplateSourceMapping(id);
44292
+ let errorMsg = `No pipe found with name '${ast.name}'.`;
44293
+ if (this.pipeSuggestions.has(ast.name)) {
44294
+ const suggestedClassName = this.pipeSuggestions.get(ast.name);
44295
+ const suggestedImport = '@angular/common';
44296
+ if (isStandalone) {
44297
+ errorMsg +=
44298
+ `\nTo fix this, import the "${suggestedClassName}" class from "${suggestedImport}"` +
44299
+ ` and add it to the "imports" array of the component.`;
44300
+ }
44301
+ else {
44302
+ errorMsg +=
44303
+ `\nTo fix this, import the "${suggestedClassName}" class from "${suggestedImport}"` +
44304
+ ` and add it to the "imports" array of the module declaring the component.`;
44305
+ }
44306
+ }
44274
44307
  this._diagnostics.push(makeTemplateDiagnostic(id, mapping, sourceSpan, ts.DiagnosticCategory.Error, ngErrorCode(exports.ErrorCode.MISSING_PIPE), errorMsg));
44275
44308
  this.recordedPipes.add(ast);
44276
44309
  }
@@ -47591,7 +47624,7 @@ class TcbExpressionTranslator {
47591
47624
  let pipe;
47592
47625
  if (pipeMeta === null) {
47593
47626
  // No pipe by that name exists in scope. Record this as an error.
47594
- this.tcb.oobRecorder.missingPipe(this.tcb.id, ast);
47627
+ this.tcb.oobRecorder.missingPipe(this.tcb.id, ast, this.tcb.hostIsStandalone);
47595
47628
  // Use an 'any' value to at least allow the rest of the expression to be checked.
47596
47629
  pipe = ANY_EXPRESSION;
47597
47630
  }
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.3
3
+ * @license Angular v20.0.5
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,14 +8,13 @@
8
8
 
9
9
  require('@angular-devkit/core');
10
10
  require('node:path/posix');
11
- var project_paths = require('./project_paths-BjQra9mv.cjs');
11
+ var project_paths = require('./project_paths-CBE0nAL9.cjs');
12
12
  var ts = require('typescript');
13
13
  require('os');
14
- var checker = require('./checker-Bu1Wu4f7.cjs');
15
- var index = require('./index-CCX_cTPD.cjs');
14
+ var checker = require('./checker-bovuFVqM.cjs');
15
+ var index = require('./index-D6D7R0Xm.cjs');
16
16
  require('path');
17
- var apply_import_manager = require('./apply_import_manager-DT15wSJs.cjs');
18
- var leading_space = require('./leading_space-D9nQ8UQC.cjs');
17
+ var apply_import_manager = require('./apply_import_manager-z2wdNH9i.cjs');
19
18
  require('@angular-devkit/schematics');
20
19
  require('./project_tsconfig_paths-CDVxT6Ov.cjs');
21
20
  require('fs');
@@ -207,7 +206,10 @@ class UnusedImportsMigration extends project_paths.TsurgeFunnelMigration {
207
206
  // Filter out the unused identifiers from an array.
208
207
  partialRemovals.forEach((toRemove, parent) => {
209
208
  toRemove.forEach((node) => {
210
- replacements.push(new project_paths.Replacement(project_paths.projectFile(sourceFile, info), getArrayElementRemovalUpdate(node, parent, sourceText)));
209
+ replacements.push(new project_paths.Replacement(project_paths.projectFile(sourceFile, info), getArrayElementRemovalUpdate(node, sourceText)));
210
+ });
211
+ stripTrailingSameLineCommas(parent, toRemove, sourceText)?.forEach((update) => {
212
+ replacements.push(new project_paths.Replacement(project_paths.projectFile(sourceFile, info), update));
211
213
  });
212
214
  });
213
215
  // Attempt to clean up unused import declarations. Note that this isn't foolproof, because we
@@ -229,7 +231,7 @@ class UnusedImportsMigration extends project_paths.TsurgeFunnelMigration {
229
231
  }
230
232
  }
231
233
  /** Generates a `TextUpdate` for the removal of an array element. */
232
- function getArrayElementRemovalUpdate(node, parent, sourceText) {
234
+ function getArrayElementRemovalUpdate(node, sourceText) {
233
235
  let position = node.getStart();
234
236
  let end = node.getEnd();
235
237
  let toInsert = '';
@@ -249,27 +251,39 @@ function getArrayElementRemovalUpdate(node, parent, sourceText) {
249
251
  break;
250
252
  }
251
253
  }
252
- // If we're removing the last element in the array, adjust the starting offset so that
253
- // it includes the previous comma on the same line. This avoids turning something like
254
- // `[One, Two, Three]` into `[One,]`. We only do this within the same like, because
255
- // trailing comma at the end of the line is fine.
256
- if (parent.elements[parent.elements.length - 1] === node) {
257
- for (let i = position - 1; i >= 0; i--) {
258
- const char = sourceText[i];
254
+ return new project_paths.TextUpdate({ position, end, toInsert });
255
+ }
256
+ /** Returns `TextUpdate`s that will remove any leftover trailing commas on the same line. */
257
+ function stripTrailingSameLineCommas(node, toRemove, sourceText) {
258
+ let updates = null;
259
+ for (let i = 0; i < node.elements.length; i++) {
260
+ // Skip over elements that are being removed already.
261
+ if (toRemove.has(node.elements[i])) {
262
+ continue;
263
+ }
264
+ // An element might have a trailing comma if all elements after it have been removed.
265
+ const mightHaveTrailingComma = node.elements.slice(i + 1).every((e) => toRemove.has(e));
266
+ if (!mightHaveTrailingComma) {
267
+ continue;
268
+ }
269
+ const position = node.elements[i].getEnd();
270
+ let end = position;
271
+ // If the item might have a trailing comma, start looking after it until we hit a line break.
272
+ for (let charIndex = position; charIndex < node.getEnd(); charIndex++) {
273
+ const char = sourceText[charIndex];
259
274
  if (char === ',' || char === ' ') {
260
- position--;
275
+ end++;
261
276
  }
262
277
  else {
263
- if (whitespaceOrLineFeed.test(char)) {
264
- // Replace the node with its leading whitespace to preserve the formatting.
265
- // This only needs to happen if we're breaking on a newline.
266
- toInsert = leading_space.getLeadingLineWhitespaceOfNode(node);
278
+ if (char !== '\n' && position !== end) {
279
+ updates ??= [];
280
+ updates.push(new project_paths.TextUpdate({ position, end, toInsert: '' }));
267
281
  }
268
282
  break;
269
283
  }
270
284
  }
271
285
  }
272
- return new project_paths.TextUpdate({ position, end, toInsert });
286
+ return updates;
273
287
  }
274
288
 
275
289
  function migrate() {
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.3
3
+ * @license Angular v20.0.5
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
7
7
  'use strict';
8
8
 
9
9
  var ts = require('typescript');
10
- var checker = require('./checker-Bu1Wu4f7.cjs');
10
+ var checker = require('./checker-bovuFVqM.cjs');
11
11
  require('os');
12
12
  var p = require('path');
13
13
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.3
3
+ * @license Angular v20.0.5
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,8 +8,8 @@
8
8
 
9
9
  var schematics = require('@angular-devkit/schematics');
10
10
  var p = require('path');
11
- var compiler_host = require('./compiler_host-C_4Iw5UD.cjs');
12
- var checker = require('./checker-Bu1Wu4f7.cjs');
11
+ var compiler_host = require('./compiler_host-Kg3VLaJg.cjs');
12
+ var checker = require('./checker-bovuFVqM.cjs');
13
13
  var ts = require('typescript');
14
14
  var project_tsconfig_paths = require('./project_tsconfig_paths-CDVxT6Ov.cjs');
15
15
  require('os');
@@ -1,18 +1,18 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.3
3
+ * @license Angular v20.0.5
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
7
7
  'use strict';
8
8
 
9
- var checker = require('./checker-Bu1Wu4f7.cjs');
9
+ var checker = require('./checker-bovuFVqM.cjs');
10
10
  require('typescript');
11
11
  require('os');
12
- var apply_import_manager = require('./apply_import_manager-DT15wSJs.cjs');
13
- require('./index-CCX_cTPD.cjs');
12
+ var apply_import_manager = require('./apply_import_manager-z2wdNH9i.cjs');
13
+ require('./index-D6D7R0Xm.cjs');
14
14
  require('path');
15
- var project_paths = require('./project_paths-BjQra9mv.cjs');
15
+ var project_paths = require('./project_paths-CBE0nAL9.cjs');
16
16
  var imports = require('./imports-CIX-JgAN.cjs');
17
17
  require('@angular-devkit/core');
18
18
  require('node:path/posix');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.3
3
+ * @license Angular v20.0.5
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.3
3
+ * @license Angular v20.0.5
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,10 +8,10 @@
8
8
 
9
9
  var ts = require('typescript');
10
10
  require('os');
11
- var checker = require('./checker-Bu1Wu4f7.cjs');
12
- var index = require('./index-CCX_cTPD.cjs');
11
+ var checker = require('./checker-bovuFVqM.cjs');
12
+ var index = require('./index-D6D7R0Xm.cjs');
13
13
  require('path');
14
- var project_paths = require('./project_paths-BjQra9mv.cjs');
14
+ var project_paths = require('./project_paths-CBE0nAL9.cjs');
15
15
 
16
16
  function getMemberName(member) {
17
17
  if (member.name === undefined) {