@angular/core 19.2.5 → 19.2.7

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 (48) hide show
  1. package/{event_dispatcher.d-PWnbqZDx.d.ts → event_dispatcher.d-DlbccpYq.d.ts} +3 -3
  2. package/fesm2022/core.mjs +9 -6
  3. package/fesm2022/core.mjs.map +1 -1
  4. package/fesm2022/primitives/di.mjs +1 -1
  5. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  6. package/fesm2022/primitives/signals.mjs +3 -3
  7. package/fesm2022/rxjs-interop.mjs +2 -2
  8. package/fesm2022/rxjs-interop.mjs.map +1 -1
  9. package/fesm2022/testing.mjs +150 -97
  10. package/fesm2022/testing.mjs.map +1 -1
  11. package/fesm2022/{untracked-CS7WUAzb.mjs → untracked-BKcld_ew.mjs} +3 -3
  12. package/fesm2022/{untracked-CS7WUAzb.mjs.map → untracked-BKcld_ew.mjs.map} +1 -1
  13. package/index.d.ts +6 -5
  14. package/{navigation_types.d-Lh6SmhKv.d.ts → navigation_types.d-fAxd92YV.d.ts} +3 -3
  15. package/package.json +1 -1
  16. package/primitives/di/index.d.ts +1 -1
  17. package/primitives/event-dispatch/index.d.ts +3 -3
  18. package/primitives/signals/index.d.ts +3 -3
  19. package/rxjs-interop/index.d.ts +2 -2
  20. package/schematics/bundles/{apply_import_manager-CTrezOPF.js → apply_import_manager-2VufvTsB.js} +3 -3
  21. package/schematics/bundles/{checker-CQvNmpT3.js → checker-BNmiXJIJ.js} +9 -9
  22. package/schematics/bundles/cleanup-unused-imports.js +42 -64
  23. package/schematics/bundles/{compiler_host-IULKT7OF.js → compiler_host-BafHjBMK.js} +2 -2
  24. package/schematics/bundles/control-flow-migration.js +3 -3
  25. package/schematics/bundles/explicit-standalone-flag.js +3 -3
  26. package/schematics/bundles/imports-CIX-JgAN.js +1 -1
  27. package/schematics/bundles/{index-BKWl7N44.js → index-DJTfI03d.js} +6 -6
  28. package/schematics/bundles/{program-XYcLSXb1.js → index-DMhRS_CK.js} +36 -12
  29. package/schematics/bundles/inject-migration.js +107 -18
  30. package/schematics/bundles/leading_space-D9nQ8UQC.js +1 -1
  31. package/schematics/bundles/{migrate_ts_type_references-CHRyhQvi.js → migrate_ts_type_references-CgtT9yyW.js} +5 -5
  32. package/schematics/bundles/ng_decorators-DznZ5jMl.js +1 -1
  33. package/schematics/bundles/nodes-B16H9JUd.js +1 -1
  34. package/schematics/bundles/output-migration.js +108 -78
  35. package/schematics/bundles/pending-tasks.js +3 -3
  36. package/schematics/bundles/{project_paths-CTgTxqrW.js → project_paths-C-UAB3jT.js} +88 -13
  37. package/schematics/bundles/project_tsconfig_paths-CDVxT6Ov.js +1 -1
  38. package/schematics/bundles/property_name-BBwFuqMe.js +1 -1
  39. package/schematics/bundles/provide-initializer.js +3 -3
  40. package/schematics/bundles/route-lazy-loading.js +3 -3
  41. package/schematics/bundles/self-closing-tags-migration.js +39 -64
  42. package/schematics/bundles/signal-input-migration.js +64 -87
  43. package/schematics/bundles/signal-queries-migration.js +69 -92
  44. package/schematics/bundles/signals.js +11 -11
  45. package/schematics/bundles/standalone-migration.js +5 -6
  46. package/testing/index.d.ts +5 -21
  47. package/{weak_ref.d-DOjz-6fK.d.ts → weak_ref.d-DWHPG08n.d.ts} +3 -3
  48. package/schematics/bundles/index-CH_G_p3D.js +0 -30
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.2.5
3
+ * @license Angular v19.2.7
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-IULKT7OF.js');
12
- var checker = require('./checker-CQvNmpT3.js');
11
+ var compiler_host = require('./compiler_host-BafHjBMK.js');
12
+ var checker = require('./checker-BNmiXJIJ.js');
13
13
  var ts = require('typescript');
14
14
  require('os');
15
15
  require('fs');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.2.5
3
+ * @license Angular v19.2.7
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -9,11 +9,11 @@
9
9
  var schematics = require('@angular-devkit/schematics');
10
10
  var p = require('path');
11
11
  var project_tsconfig_paths = require('./project_tsconfig_paths-CDVxT6Ov.js');
12
- var compiler_host = require('./compiler_host-IULKT7OF.js');
12
+ var compiler_host = require('./compiler_host-BafHjBMK.js');
13
13
  var ts = require('typescript');
14
14
  var imports = require('./imports-CIX-JgAN.js');
15
15
  require('@angular-devkit/core');
16
- require('./checker-CQvNmpT3.js');
16
+ require('./checker-BNmiXJIJ.js');
17
17
  require('os');
18
18
  require('fs');
19
19
  require('module');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.2.5
3
+ * @license Angular v19.2.7
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 v19.2.5
3
+ * @license Angular v19.2.7
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-CQvNmpT3.js');
12
- var program = require('./program-XYcLSXb1.js');
11
+ var checker = require('./checker-BNmiXJIJ.js');
12
+ var index = require('./index-DMhRS_CK.js');
13
13
  require('path');
14
- var project_paths = require('./project_paths-CTgTxqrW.js');
14
+ var project_paths = require('./project_paths-C-UAB3jT.js');
15
15
 
16
16
  function getMemberName(member) {
17
17
  if (member.name === undefined) {
@@ -628,7 +628,7 @@ function identifyHostBindingReferences(node, programInfo, checker$1, reflector,
628
628
  */
629
629
  function attemptExtractTemplateDefinition(node, checker$1, reflector, resourceLoader) {
630
630
  const classDecorators = reflector.getDecoratorsOfDeclaration(node);
631
- const evaluator = new program.PartialEvaluator(reflector, checker$1, null);
631
+ const evaluator = new index.PartialEvaluator(reflector, checker$1, null);
632
632
  const ngDecorators = classDecorators !== null
633
633
  ? checker.getAngularDecorators(classDecorators, ['Component'], /* isAngularCore */ false)
634
634
  : [];
@@ -738,7 +738,7 @@ function extractTemplateWithoutCompilerAnalysis(node, checker$1, reflector, reso
738
738
  if (tmplDef === null) {
739
739
  return null;
740
740
  }
741
- return program.extractTemplate(node, tmplDef, evaluator, null, resourceLoader, {
741
+ return index.extractTemplate(node, tmplDef, evaluator, null, resourceLoader, {
742
742
  enableBlockSyntax: true,
743
743
  enableLetSyntax: true,
744
744
  usePoisonedData: true,
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.2.5
3
+ * @license Angular v19.2.7
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-CQvNmpT3.js');
9
+ var checker = require('./checker-BNmiXJIJ.js');
10
10
  var ts = require('typescript');
11
11
  var p = require('path');
12
12
  require('os');
@@ -1007,7 +1007,7 @@ const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
1007
1007
  function compileDeclareClassMetadata(metadata) {
1008
1008
  const definitionMap = new checker.DefinitionMap();
1009
1009
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
1010
- definitionMap.set('version', checker.literal('19.2.5'));
1010
+ definitionMap.set('version', checker.literal('19.2.7'));
1011
1011
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1012
1012
  definitionMap.set('type', metadata.type);
1013
1013
  definitionMap.set('decorators', metadata.decorators);
@@ -1025,7 +1025,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
1025
1025
  callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? checker.literal(null));
1026
1026
  callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? checker.literal(null));
1027
1027
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
1028
- definitionMap.set('version', checker.literal('19.2.5'));
1028
+ definitionMap.set('version', checker.literal('19.2.7'));
1029
1029
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1030
1030
  definitionMap.set('type', metadata.type);
1031
1031
  definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
@@ -1120,7 +1120,7 @@ function createDirectiveDefinitionMap(meta) {
1120
1120
  const definitionMap = new checker.DefinitionMap();
1121
1121
  const minVersion = getMinimumVersionForPartialOutput(meta);
1122
1122
  definitionMap.set('minVersion', checker.literal(minVersion));
1123
- definitionMap.set('version', checker.literal('19.2.5'));
1123
+ definitionMap.set('version', checker.literal('19.2.7'));
1124
1124
  // e.g. `type: MyDirective`
1125
1125
  definitionMap.set('type', meta.type.value);
1126
1126
  if (meta.isStandalone !== undefined) {
@@ -1536,7 +1536,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
1536
1536
  function compileDeclareFactoryFunction(meta) {
1537
1537
  const definitionMap = new checker.DefinitionMap();
1538
1538
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
1539
- definitionMap.set('version', checker.literal('19.2.5'));
1539
+ definitionMap.set('version', checker.literal('19.2.7'));
1540
1540
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1541
1541
  definitionMap.set('type', meta.type.value);
1542
1542
  definitionMap.set('deps', compileDependencies(meta.deps));
@@ -1571,7 +1571,7 @@ function compileDeclareInjectableFromMetadata(meta) {
1571
1571
  function createInjectableDefinitionMap(meta) {
1572
1572
  const definitionMap = new checker.DefinitionMap();
1573
1573
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
1574
- definitionMap.set('version', checker.literal('19.2.5'));
1574
+ definitionMap.set('version', checker.literal('19.2.7'));
1575
1575
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1576
1576
  definitionMap.set('type', meta.type.value);
1577
1577
  // Only generate providedIn property if it has a non-null value
@@ -1622,7 +1622,7 @@ function compileDeclareInjectorFromMetadata(meta) {
1622
1622
  function createInjectorDefinitionMap(meta) {
1623
1623
  const definitionMap = new checker.DefinitionMap();
1624
1624
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
1625
- definitionMap.set('version', checker.literal('19.2.5'));
1625
+ definitionMap.set('version', checker.literal('19.2.7'));
1626
1626
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1627
1627
  definitionMap.set('type', meta.type.value);
1628
1628
  definitionMap.set('providers', meta.providers);
@@ -1655,7 +1655,7 @@ function createNgModuleDefinitionMap(meta) {
1655
1655
  throw new Error('Invalid path! Local compilation mode should not get into the partial compilation path');
1656
1656
  }
1657
1657
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
1658
- definitionMap.set('version', checker.literal('19.2.5'));
1658
+ definitionMap.set('version', checker.literal('19.2.7'));
1659
1659
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1660
1660
  definitionMap.set('type', meta.type.value);
1661
1661
  // We only generate the keys in the metadata if the arrays contain values.
@@ -1706,7 +1706,7 @@ function compileDeclarePipeFromMetadata(meta) {
1706
1706
  function createPipeDefinitionMap(meta) {
1707
1707
  const definitionMap = new checker.DefinitionMap();
1708
1708
  definitionMap.set('minVersion', checker.literal(MINIMUM_PARTIAL_LINKER_VERSION));
1709
- definitionMap.set('version', checker.literal('19.2.5'));
1709
+ definitionMap.set('version', checker.literal('19.2.7'));
1710
1710
  definitionMap.set('ngImport', checker.importExpr(checker.Identifiers.core));
1711
1711
  // e.g. `type: MyPipe`
1712
1712
  definitionMap.set('type', meta.type.value);
@@ -10723,6 +10723,13 @@ class PipeDecoratorHandler {
10723
10723
  }
10724
10724
  }
10725
10725
 
10726
+ /**
10727
+ * @module
10728
+ * @description
10729
+ * Entry point for all public APIs of the compiler-cli package.
10730
+ */
10731
+ new checker.Version('19.2.7');
10732
+
10726
10733
  /**
10727
10734
  * Whether a given decorator should be treated as an Angular decorator.
10728
10735
  * Either it's used in @angular/core, or it's imported from there.
@@ -18555,7 +18562,7 @@ var semver = /*@__PURE__*/getDefaultExportFromCjs(semverExports);
18555
18562
  * @param minVersion Minimum required version for the feature.
18556
18563
  */
18557
18564
  function coreVersionSupportsFeature(coreVersion, minVersion) {
18558
- // A version of `19.2.5` usually means that core is at head so it supports
18565
+ // A version of `19.2.7` usually means that core is at head so it supports
18559
18566
  // all features. Use string interpolation prevent the placeholder from being replaced
18560
18567
  // with the current version during build time.
18561
18568
  if (coreVersion === `0.0.0-${'PLACEHOLDER'}`) {
@@ -19102,7 +19109,14 @@ class NgCompiler {
19102
19109
  const printer = ts.createPrinter();
19103
19110
  const nodeText = printer.printNode(ts.EmitHint.Unspecified, callback, sourceFile);
19104
19111
  return ts.transpileModule(nodeText, {
19105
- compilerOptions: this.options,
19112
+ compilerOptions: {
19113
+ ...this.options,
19114
+ // Some module types can produce additional code (see #60795) whereas we need the
19115
+ // HMR update module to use a native `export`. Override the `target` and `module`
19116
+ // to ensure that it looks as expected.
19117
+ module: ts.ModuleKind.ES2022,
19118
+ target: ts.ScriptTarget.ES2022,
19119
+ },
19106
19120
  fileName: sourceFile.fileName,
19107
19121
  reportDiagnostics: false,
19108
19122
  }).outputText;
@@ -20249,6 +20263,16 @@ function mergeEmitResults(emitResults) {
20249
20263
  return { diagnostics, emitSkipped, emittedFiles };
20250
20264
  }
20251
20265
 
20266
+ var LogLevel;
20267
+ (function (LogLevel) {
20268
+ LogLevel[LogLevel["debug"] = 0] = "debug";
20269
+ LogLevel[LogLevel["info"] = 1] = "info";
20270
+ LogLevel[LogLevel["warn"] = 2] = "warn";
20271
+ LogLevel[LogLevel["error"] = 3] = "error";
20272
+ })(LogLevel || (LogLevel = {}));
20273
+
20274
+ checker.setFileSystem(new checker.NodeJSFileSystem());
20275
+
20252
20276
  exports.DtsMetadataReader = DtsMetadataReader;
20253
20277
  exports.NgtscProgram = NgtscProgram;
20254
20278
  exports.PartialEvaluator = PartialEvaluator;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.2.5
3
+ * @license Angular v19.2.7
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,13 +8,13 @@
8
8
 
9
9
  var schematics = require('@angular-devkit/schematics');
10
10
  var p = require('path');
11
- var compiler_host = require('./compiler_host-IULKT7OF.js');
11
+ var compiler_host = require('./compiler_host-BafHjBMK.js');
12
12
  var ts = require('typescript');
13
13
  var ng_decorators = require('./ng_decorators-DznZ5jMl.js');
14
14
  var imports = require('./imports-CIX-JgAN.js');
15
15
  var nodes = require('./nodes-B16H9JUd.js');
16
16
  var leading_space = require('./leading_space-D9nQ8UQC.js');
17
- require('./checker-CQvNmpT3.js');
17
+ require('./checker-BNmiXJIJ.js');
18
18
  require('os');
19
19
  require('fs');
20
20
  require('module');
@@ -371,7 +371,7 @@ function isInlineFunction(node) {
371
371
  * @param constructor Constructor declaration of the class being migrated.
372
372
  * @param localTypeChecker Type checker scoped to the current file.
373
373
  */
374
- function findUninitializedPropertiesToCombine(node, constructor, localTypeChecker) {
374
+ function findUninitializedPropertiesToCombine(node, constructor, localTypeChecker, options) {
375
375
  let toCombine = null;
376
376
  let toHoist = [];
377
377
  const membersToDeclarations = new Map();
@@ -389,10 +389,13 @@ function findUninitializedPropertiesToCombine(node, constructor, localTypeChecke
389
389
  if (memberInitializers === null) {
390
390
  return null;
391
391
  }
392
+ const inlinableParameters = options._internalReplaceParameterReferencesInInitializers
393
+ ? findInlinableParameterReferences(constructor, localTypeChecker)
394
+ : new Set();
392
395
  for (const [name, decl] of membersToDeclarations.entries()) {
393
396
  if (memberInitializers.has(name)) {
394
397
  const initializer = memberInitializers.get(name);
395
- if (!hasLocalReferences(initializer, constructor, localTypeChecker)) {
398
+ if (!hasLocalReferences(initializer, constructor, inlinableParameters, localTypeChecker)) {
396
399
  toCombine ??= [];
397
400
  toCombine.push({ declaration: membersToDeclarations.get(name), initializer });
398
401
  }
@@ -534,13 +537,70 @@ function getMemberInitializers(constructor) {
534
537
  }
535
538
  return memberInitializers;
536
539
  }
540
+ /**
541
+ * Checks if the node is an identifier that references a property from the given
542
+ * list. Returns the property if it is.
543
+ */
544
+ function getIdentifierReferencingProperty(node, localTypeChecker, propertyNames, properties) {
545
+ if (!ts.isIdentifier(node) || !propertyNames.has(node.text)) {
546
+ return undefined;
547
+ }
548
+ const declarations = localTypeChecker.getSymbolAtLocation(node)?.declarations;
549
+ if (!declarations) {
550
+ return undefined;
551
+ }
552
+ for (const decl of declarations) {
553
+ if (properties.has(decl)) {
554
+ return decl;
555
+ }
556
+ }
557
+ return undefined;
558
+ }
559
+ /**
560
+ * Returns true if the node introduces a new `this` scope (so we can't
561
+ * reference the outer this).
562
+ */
563
+ function introducesNewThisScope(node) {
564
+ return (ts.isFunctionDeclaration(node) ||
565
+ ts.isFunctionExpression(node) ||
566
+ ts.isMethodDeclaration(node) ||
567
+ ts.isClassDeclaration(node) ||
568
+ ts.isClassExpression(node));
569
+ }
570
+ /**
571
+ * Finds constructor parameter references which can be inlined as `this.prop`.
572
+ * - prop must be a readonly property
573
+ * - the reference can't be in a nested function where `this` might refer
574
+ * to something else
575
+ */
576
+ function findInlinableParameterReferences(constructorDeclaration, localTypeChecker) {
577
+ const eligibleProperties = constructorDeclaration.parameters.filter((p) => ts.isIdentifier(p.name) && p.modifiers?.some((s) => s.kind === ts.SyntaxKind.ReadonlyKeyword));
578
+ const eligibleNames = new Set(eligibleProperties.map((p) => p.name.text));
579
+ const eligiblePropertiesSet = new Set(eligibleProperties);
580
+ function walk(node, canReferenceThis) {
581
+ const property = getIdentifierReferencingProperty(node, localTypeChecker, eligibleNames, eligiblePropertiesSet);
582
+ if (property && !canReferenceThis) {
583
+ // The property is referenced in a nested context where
584
+ // we can't use `this`, so we can't inline it.
585
+ eligiblePropertiesSet.delete(property);
586
+ }
587
+ else if (introducesNewThisScope(node)) {
588
+ canReferenceThis = false;
589
+ }
590
+ ts.forEachChild(node, (child) => {
591
+ walk(child, canReferenceThis);
592
+ });
593
+ }
594
+ walk(constructorDeclaration, true);
595
+ return eligiblePropertiesSet;
596
+ }
537
597
  /**
538
598
  * Determines if a node has references to local symbols defined in the constructor.
539
599
  * @param root Expression to check for local references.
540
600
  * @param constructor Constructor within which the expression is used.
541
601
  * @param localTypeChecker Type checker scoped to the current file.
542
602
  */
543
- function hasLocalReferences(root, constructor, localTypeChecker) {
603
+ function hasLocalReferences(root, constructor, allowedParameters, localTypeChecker) {
544
604
  const sourceFile = root.getSourceFile();
545
605
  let hasLocalRefs = false;
546
606
  const walk = (node) => {
@@ -562,7 +622,8 @@ function hasLocalReferences(root, constructor, localTypeChecker) {
562
622
  // The source file check is a bit redundant since the type checker
563
623
  // is local to the file, but it's inexpensive and it can prevent
564
624
  // bugs in the future if we decide to use a full type checker.
565
- decl.getSourceFile() === sourceFile &&
625
+ !allowedParameters.has(decl) &&
626
+ decl.getSourceFile() === sourceFile &&
566
627
  decl.getStart() >= constructor.getStart() &&
567
628
  decl.getEnd() <= constructor.getEnd() &&
568
629
  !isInsideInlineFunction(decl, constructor));
@@ -626,7 +687,7 @@ function migrateFile(sourceFile, options) {
626
687
  const removedStatements = new Set();
627
688
  const removedMembers = new Set();
628
689
  if (options._internalCombineMemberInitializers) {
629
- applyInternalOnlyChanges(node, constructor, localTypeChecker, tracker, printer, removedStatements, removedMembers, prependToClass, afterInjectCalls, memberIndentation);
690
+ applyInternalOnlyChanges(node, constructor, localTypeChecker, tracker, printer, removedStatements, removedMembers, prependToClass, afterInjectCalls, memberIndentation, options);
630
691
  }
631
692
  migrateClass(node, constructor, superCall, options, memberIndentation, prependToClass, afterInjectCalls, removedStatements, removedMembers, localTypeChecker, printer, tracker);
632
693
  });
@@ -1097,8 +1158,8 @@ function getNextPreservedStatement(startNode, removedStatements) {
1097
1158
  * @param afterInjectCalls Text that will be inserted after the newly-added `inject` calls.
1098
1159
  * @param memberIndentation Indentation string of the class' members.
1099
1160
  */
1100
- function applyInternalOnlyChanges(node, constructor, localTypeChecker, tracker, printer, removedStatements, removedMembers, prependToClass, afterInjectCalls, memberIndentation) {
1101
- const result = findUninitializedPropertiesToCombine(node, constructor, localTypeChecker);
1161
+ function applyInternalOnlyChanges(node, constructor, localTypeChecker, tracker, printer, removedStatements, removedMembers, prependToClass, afterInjectCalls, memberIndentation, options) {
1162
+ const result = findUninitializedPropertiesToCombine(node, constructor, localTypeChecker, options);
1102
1163
  if (result === null) {
1103
1164
  return;
1104
1165
  }
@@ -1111,21 +1172,25 @@ function applyInternalOnlyChanges(node, constructor, localTypeChecker, tracker,
1111
1172
  }
1112
1173
  result.toCombine.forEach(({ declaration, initializer }) => {
1113
1174
  const initializerStatement = nodes.closestNode(initializer, ts.isStatement);
1175
+ // Strip comments if we are just going modify the node in-place.
1176
+ const modifiers = preserveInitOrder
1177
+ ? declaration.modifiers
1178
+ : cloneModifiers(declaration.modifiers);
1179
+ const name = preserveInitOrder ? declaration.name : cloneName(declaration.name);
1180
+ const newProperty = ts.factory.createPropertyDeclaration(modifiers, name, declaration.questionToken, declaration.type, undefined);
1181
+ const propText = printer.printNode(ts.EmitHint.Unspecified, newProperty, declaration.getSourceFile());
1182
+ const initializerText = replaceParameterReferencesInInitializer(initializer, constructor, localTypeChecker);
1183
+ const withInitializer = `${propText.slice(0, -1)} = ${initializerText};`;
1114
1184
  // If the initialization order is being preserved, we have to remove the original
1115
1185
  // declaration and re-declare it. Otherwise we can do the replacement in-place.
1116
1186
  if (preserveInitOrder) {
1117
- // Preserve comment in the new property since we are removing the entire node.
1118
- const newProperty = ts.factory.createPropertyDeclaration(declaration.modifiers, declaration.name, declaration.questionToken, declaration.type, initializer);
1119
1187
  tracker.removeNode(declaration, true);
1120
1188
  removedMembers.add(declaration);
1121
- afterInjectCalls.push(memberIndentation +
1122
- printer.printNode(ts.EmitHint.Unspecified, newProperty, declaration.getSourceFile()));
1189
+ afterInjectCalls.push(memberIndentation + withInitializer);
1123
1190
  }
1124
1191
  else {
1125
- // Strip comments from the declaration since we are replacing just
1126
- // the node, not the leading comment.
1127
- const newProperty = ts.factory.createPropertyDeclaration(cloneModifiers(declaration.modifiers), cloneName(declaration.name), declaration.questionToken, declaration.type, initializer);
1128
- tracker.replaceNode(declaration, newProperty);
1192
+ const sourceFile = declaration.getSourceFile();
1193
+ tracker.replaceText(sourceFile, declaration.getStart(), declaration.getWidth(), withInitializer);
1129
1194
  }
1130
1195
  // This should always be defined, but null check it just in case.
1131
1196
  if (initializerStatement) {
@@ -1143,6 +1208,30 @@ function applyInternalOnlyChanges(node, constructor, localTypeChecker, tracker,
1143
1208
  prependToClass.push('');
1144
1209
  }
1145
1210
  }
1211
+ function replaceParameterReferencesInInitializer(initializer, constructor, localTypeChecker) {
1212
+ // 1. Collect the locations of identifier nodes that reference constructor parameters.
1213
+ // 2. Add `this.` to those locations.
1214
+ const insertLocations = [0];
1215
+ function walk(node) {
1216
+ if (ts.isIdentifier(node) &&
1217
+ !(ts.isPropertyAccessExpression(node.parent) && node === node.parent.name) &&
1218
+ localTypeChecker
1219
+ .getSymbolAtLocation(node)
1220
+ ?.declarations?.some((decl) => constructor.parameters.includes(decl))) {
1221
+ insertLocations.push(node.getStart() - initializer.getStart());
1222
+ }
1223
+ ts.forEachChild(node, walk);
1224
+ }
1225
+ walk(initializer);
1226
+ const initializerText = initializer.getText();
1227
+ insertLocations.push(initializerText.length);
1228
+ insertLocations.sort((a, b) => a - b);
1229
+ const result = [];
1230
+ for (let i = 0; i < insertLocations.length - 1; i++) {
1231
+ result.push(initializerText.slice(insertLocations[i], insertLocations[i + 1]));
1232
+ }
1233
+ return result.join('this.');
1234
+ }
1146
1235
 
1147
1236
  function migrate(options) {
1148
1237
  return async (tree) => {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.2.5
3
+ * @license Angular v19.2.7
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,19 +1,19 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.2.5
3
+ * @license Angular v19.2.7
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-CQvNmpT3.js');
9
+ var checker = require('./checker-BNmiXJIJ.js');
10
10
  var ts = require('typescript');
11
11
  require('os');
12
12
  var assert = require('assert');
13
- var index = require('./index-BKWl7N44.js');
14
- var project_paths = require('./project_paths-CTgTxqrW.js');
13
+ var index = require('./index-DJTfI03d.js');
14
+ var project_paths = require('./project_paths-C-UAB3jT.js');
15
15
  var leading_space = require('./leading_space-D9nQ8UQC.js');
16
- require('./program-XYcLSXb1.js');
16
+ require('./index-DMhRS_CK.js');
17
17
  require('path');
18
18
 
19
19
  /**
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v19.2.5
3
+ * @license Angular v19.2.7
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 v19.2.5
3
+ * @license Angular v19.2.7
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */