@angular/core 20.0.0-next.4 → 20.0.0-next.6

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 (76) hide show
  1. package/api.d-DQLNOR5l.d.ts +297 -0
  2. package/discovery.d-CFs2MaLO.d.ts +7383 -0
  3. package/{event_dispatcher.d-pVP0-wST.d.ts → event_dispatcher.d-DlbccpYq.d.ts} +3 -2
  4. package/fesm2022/attribute-BWp59EjE.mjs +24 -0
  5. package/fesm2022/attribute-BWp59EjE.mjs.map +1 -0
  6. package/fesm2022/core.mjs +586 -36873
  7. package/fesm2022/core.mjs.map +1 -1
  8. package/fesm2022/debug_node-z_3NG8qT.mjs +32079 -0
  9. package/fesm2022/debug_node-z_3NG8qT.mjs.map +1 -0
  10. package/fesm2022/primitives/di.mjs +18 -4
  11. package/fesm2022/primitives/di.mjs.map +1 -1
  12. package/fesm2022/primitives/event-dispatch.mjs +2 -16
  13. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  14. package/fesm2022/primitives/signals.mjs +5 -3
  15. package/fesm2022/primitives/signals.mjs.map +1 -1
  16. package/fesm2022/resource-CPPwEcg7.mjs +619 -0
  17. package/fesm2022/resource-CPPwEcg7.mjs.map +1 -0
  18. package/fesm2022/root_effect_scheduler-VSXfCzDX.mjs +3847 -0
  19. package/fesm2022/root_effect_scheduler-VSXfCzDX.mjs.map +1 -0
  20. package/fesm2022/rxjs-interop.mjs +16 -9
  21. package/fesm2022/rxjs-interop.mjs.map +1 -1
  22. package/fesm2022/{untracked-DkcXpNb_.mjs → signal-B6pMq7KS.mjs} +16 -114
  23. package/fesm2022/signal-B6pMq7KS.mjs.map +1 -0
  24. package/fesm2022/testing.mjs +265 -201
  25. package/fesm2022/testing.mjs.map +1 -1
  26. package/fesm2022/untracked-Bz5WMeU1.mjs +117 -0
  27. package/fesm2022/untracked-Bz5WMeU1.mjs.map +1 -0
  28. package/fesm2022/weak_ref-BaIq-pgY.mjs +12 -0
  29. package/fesm2022/weak_ref-BaIq-pgY.mjs.map +1 -0
  30. package/{weak_ref.d-BZ7gyRag.d.ts → graph.d-BcIOep_B.d.ts} +3 -24
  31. package/index.d.ts +2624 -10909
  32. package/ng_i18n_closure_mode.d-C9d2CaSt.d.ts +832 -0
  33. package/package.json +3 -3
  34. package/primitives/di/index.d.ts +3 -2
  35. package/primitives/event-dispatch/index.d.ts +3 -3
  36. package/primitives/signals/index.d.ts +8 -4
  37. package/rxjs-interop/index.d.ts +10 -7
  38. package/schematics/bundles/{apply_import_manager-CeNv8GIG.js → apply_import_manager-DnMqg1pY.js} +6 -6
  39. package/schematics/bundles/{compiler_host-DwM3ugW3.js → change_tracker-UMPkv-eH.js} +3 -121
  40. package/schematics/bundles/checker-BFBQyesT.js +17719 -0
  41. package/schematics/bundles/cleanup-unused-imports.js +25 -19
  42. package/schematics/bundles/{checker-k591b6WQ.js → compiler-BQ7R7w2v.js} +1325 -18286
  43. package/schematics/bundles/compiler_host-CAfDJO3W.js +129 -0
  44. package/schematics/bundles/control-flow-migration.js +28 -40
  45. package/schematics/bundles/document-core.js +96 -0
  46. package/schematics/bundles/imports-CIX-JgAN.js +1 -1
  47. package/schematics/bundles/{index-B4OAlHh8.js → index-Cv4Q415G.js} +641 -547
  48. package/schematics/bundles/{index-BhELUmYx.js → index-D8tMJPKa.js} +35 -34
  49. package/schematics/bundles/inject-flags.js +14 -13
  50. package/schematics/bundles/inject-migration.js +29 -10
  51. package/schematics/bundles/leading_space-D9nQ8UQC.js +1 -1
  52. package/schematics/bundles/{migrate_ts_type_references-Be0TNYen.js → migrate_ts_type_references-Cq_ZBuT4.js} +21 -20
  53. package/schematics/bundles/ng_decorators-DznZ5jMl.js +1 -1
  54. package/schematics/bundles/nodes-B16H9JUd.js +1 -1
  55. package/schematics/bundles/output-migration.js +88 -25
  56. package/schematics/bundles/{run_in_devkit-CkvEksWP.js → project_paths-ql6qcf_c.js} +254 -243
  57. package/schematics/bundles/project_tsconfig_paths-CDVxT6Ov.js +1 -1
  58. package/schematics/bundles/property_name-BBwFuqMe.js +1 -1
  59. package/schematics/bundles/route-lazy-loading.js +7 -5
  60. package/schematics/bundles/self-closing-tags-migration.js +25 -19
  61. package/schematics/bundles/signal-input-migration.js +26 -20
  62. package/schematics/bundles/signal-queries-migration.js +51 -33
  63. package/schematics/bundles/signals.js +8 -7
  64. package/schematics/bundles/standalone-migration.js +11 -9
  65. package/schematics/bundles/symbol-VPWguRxr.js +1 -1
  66. package/schematics/bundles/test-bed-get.js +13 -12
  67. package/schematics/collection.json +0 -6
  68. package/schematics/migrations.json +11 -0
  69. package/signal.d-E0e5nW1p.d.ts +31 -0
  70. package/testing/index.d.ts +16 -28
  71. package/weak_ref.d-eGOEP9S1.d.ts +9 -0
  72. package/fesm2022/injector-BlLwZ2sr.mjs +0 -24
  73. package/fesm2022/injector-BlLwZ2sr.mjs.map +0 -1
  74. package/fesm2022/untracked-DkcXpNb_.mjs.map +0 -1
  75. package/navigation_types.d-DgDrF5rp.d.ts +0 -121
  76. package/schematics/ng-generate/control-flow-migration/schema.json +0 -20
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.0-next.4
3
+ * @license Angular v20.0.0-next.6
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,10 +8,11 @@
8
8
 
9
9
  var ts = require('typescript');
10
10
  require('os');
11
- var checker = require('./checker-k591b6WQ.js');
12
- require('./index-B4OAlHh8.js');
11
+ var checker = require('./checker-BFBQyesT.js');
12
+ var compiler = require('./compiler-BQ7R7w2v.js');
13
+ require('./index-Cv4Q415G.js');
13
14
  require('path');
14
- var run_in_devkit = require('./run_in_devkit-CkvEksWP.js');
15
+ var project_paths = require('./project_paths-ql6qcf_c.js');
15
16
  var ng_decorators = require('./ng_decorators-DznZ5jMl.js');
16
17
  var property_name = require('./property_name-BBwFuqMe.js');
17
18
  require('@angular-devkit/core');
@@ -202,7 +203,7 @@ function parseTemplate(template) {
202
203
  // interpolated text as text nodes containing a mixture of interpolation tokens and text tokens,
203
204
  // rather than turning them into `BoundText` nodes like the Ivy AST does. This allows us to
204
205
  // easily get the text-only ranges without having to reconstruct the original text.
205
- parsed = new checker.HtmlParser().parse(template, '', {
206
+ parsed = new compiler.HtmlParser().parse(template, '', {
206
207
  // Allows for ICUs to be parsed.
207
208
  tokenizeExpansionForms: true,
208
209
  // Explicitly disable blocks so that their characters are treated as plain text.
@@ -227,7 +228,7 @@ function migrateTemplateToSelfClosingTags(template) {
227
228
  return { migrated: template, changed: false, replacementCount: 0 };
228
229
  }
229
230
  const visitor = new AngularElementCollector();
230
- checker.visitAll(visitor, parsed.tree.rootNodes);
231
+ compiler.visitAll$1(visitor, parsed.tree.rootNodes);
231
232
  let newTemplate = template;
232
233
  let changedOffset = 0;
233
234
  let replacementCount = 0;
@@ -255,8 +256,8 @@ function replaceWithSelfClosingTag(html, tagName) {
255
256
  function replaceTemplate(template, replaceValue, start, end, offset) {
256
257
  return template.slice(0, start + offset) + replaceValue + template.slice(end + offset);
257
258
  }
258
- const ALL_HTML_TAGS = new checker.DomElementSchemaRegistry().allKnownElementNames();
259
- class AngularElementCollector extends checker.RecursiveVisitor {
259
+ const ALL_HTML_TAGS = new compiler.DomElementSchemaRegistry().allKnownElementNames();
260
+ class AngularElementCollector extends compiler.RecursiveVisitor$1 {
260
261
  elements = [];
261
262
  constructor() {
262
263
  super();
@@ -283,7 +284,7 @@ class AngularElementCollector extends checker.RecursiveVisitor {
283
284
  }
284
285
  if (element.children.length === 1) {
285
286
  const child = element.children[0];
286
- return child instanceof checker.Text && /^\s*$/.test(child.value);
287
+ return child instanceof compiler.Text && /^\s*$/.test(child.value);
287
288
  }
288
289
  return false;
289
290
  }
@@ -297,7 +298,7 @@ class AngularElementCollector extends checker.RecursiveVisitor {
297
298
  }
298
299
  }
299
300
 
300
- class SelfClosingTagsMigration extends run_in_devkit.TsurgeFunnelMigration {
301
+ class SelfClosingTagsMigration extends project_paths.TsurgeFunnelMigration {
301
302
  config;
302
303
  constructor(config = {}) {
303
304
  super();
@@ -313,7 +314,7 @@ class SelfClosingTagsMigration extends run_in_devkit.TsurgeFunnelMigration {
313
314
  if (!ts.isClassDeclaration(node)) {
314
315
  return;
315
316
  }
316
- const file = run_in_devkit.projectFile(node.getSourceFile(), info);
317
+ const file = project_paths.projectFile(node.getSourceFile(), info);
317
318
  if (this.config.shouldMigrate && this.config.shouldMigrate(file) === false) {
318
319
  return;
319
320
  }
@@ -326,7 +327,7 @@ class SelfClosingTagsMigration extends run_in_devkit.TsurgeFunnelMigration {
326
327
  }
327
328
  const fileToMigrate = template.inline
328
329
  ? file
329
- : run_in_devkit.projectFile(template.filePath, info);
330
+ : project_paths.projectFile(template.filePath, info);
330
331
  const end = template.start + template.content.length;
331
332
  const replacements = [
332
333
  prepareTextReplacement(fileToMigrate, migrated, template.start, end),
@@ -342,20 +343,20 @@ class SelfClosingTagsMigration extends run_in_devkit.TsurgeFunnelMigration {
342
343
  });
343
344
  });
344
345
  }
345
- return run_in_devkit.confirmAsSerializable({ tagReplacements });
346
+ return project_paths.confirmAsSerializable({ tagReplacements });
346
347
  }
347
348
  async combine(unitA, unitB) {
348
349
  const uniqueReplacements = removeDuplicateReplacements([
349
350
  ...unitA.tagReplacements,
350
351
  ...unitB.tagReplacements,
351
352
  ]);
352
- return run_in_devkit.confirmAsSerializable({ tagReplacements: uniqueReplacements });
353
+ return project_paths.confirmAsSerializable({ tagReplacements: uniqueReplacements });
353
354
  }
354
355
  async globalMeta(combinedData) {
355
356
  const globalMeta = {
356
357
  tagReplacements: combinedData.tagReplacements,
357
358
  };
358
- return run_in_devkit.confirmAsSerializable(globalMeta);
359
+ return project_paths.confirmAsSerializable(globalMeta);
359
360
  }
360
361
  async stats(globalMetadata) {
361
362
  const touchedFilesCount = globalMetadata.tagReplacements.length;
@@ -372,7 +373,7 @@ class SelfClosingTagsMigration extends run_in_devkit.TsurgeFunnelMigration {
372
373
  }
373
374
  }
374
375
  function prepareTextReplacement(file, replacement, start, end) {
375
- return new run_in_devkit.Replacement(file, new run_in_devkit.TextUpdate({
376
+ return new project_paths.Replacement(file, new project_paths.TextUpdate({
376
377
  position: start,
377
378
  end: end,
378
379
  toInsert: replacement,
@@ -393,7 +394,7 @@ function removeDuplicateReplacements(replacements) {
393
394
 
394
395
  function migrate(options) {
395
396
  return async (tree, context) => {
396
- await run_in_devkit.runMigrationInDevkit({
397
+ await project_paths.runMigrationInDevkit({
397
398
  tree,
398
399
  getMigration: (fs) => new SelfClosingTagsMigration({
399
400
  shouldMigrate: (file) => {
@@ -401,8 +402,13 @@ function migrate(options) {
401
402
  !/(^|\/)node_modules\//.test(file.rootRelativePath));
402
403
  },
403
404
  }),
404
- beforeProgramCreation: (tsconfigPath) => {
405
- context.logger.info(`Preparing analysis for: ${tsconfigPath}...`);
405
+ beforeProgramCreation: (tsconfigPath, stage) => {
406
+ if (stage === project_paths.MigrationStage.Analysis) {
407
+ context.logger.info(`Preparing analysis for: ${tsconfigPath}...`);
408
+ }
409
+ else {
410
+ context.logger.info(`Running migration for: ${tsconfigPath}...`);
411
+ }
406
412
  },
407
413
  beforeUnitAnalysis: (tsconfigPath) => {
408
414
  context.logger.info(`Scanning for component tags: ${tsconfigPath}...`);
@@ -1,21 +1,22 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.0-next.4
3
+ * @license Angular v20.0.0-next.6
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
7
7
  'use strict';
8
8
 
9
- var migrate_ts_type_references = require('./migrate_ts_type_references-Be0TNYen.js');
9
+ var migrate_ts_type_references = require('./migrate_ts_type_references-Cq_ZBuT4.js');
10
10
  var ts = require('typescript');
11
11
  require('os');
12
- var checker = require('./checker-k591b6WQ.js');
13
- var index$1 = require('./index-B4OAlHh8.js');
12
+ var checker = require('./checker-BFBQyesT.js');
13
+ require('./compiler-BQ7R7w2v.js');
14
+ var index$1 = require('./index-Cv4Q415G.js');
14
15
  require('path');
15
- var run_in_devkit = require('./run_in_devkit-CkvEksWP.js');
16
- var index = require('./index-BhELUmYx.js');
16
+ var project_paths = require('./project_paths-ql6qcf_c.js');
17
+ var index = require('./index-D8tMJPKa.js');
17
18
  var assert = require('assert');
18
- var apply_import_manager = require('./apply_import_manager-CeNv8GIG.js');
19
+ var apply_import_manager = require('./apply_import_manager-DnMqg1pY.js');
19
20
  require('@angular-devkit/core');
20
21
  require('node:path/posix');
21
22
  require('./leading_space-D9nQ8UQC.js');
@@ -102,7 +103,7 @@ function getInputDescriptor(hostOrInfo, node) {
102
103
  className = node.parent.name?.text ?? '<anonymous>';
103
104
  }
104
105
  const info = hostOrInfo instanceof MigrationHost ? hostOrInfo.programInfo : hostOrInfo;
105
- const file = run_in_devkit.projectFile(node.getSourceFile(), info);
106
+ const file = project_paths.projectFile(node.getSourceFile(), info);
106
107
  // Inputs may be detected in `.d.ts` files. Ensure that if the file IDs
107
108
  // match regardless of extension. E.g. `/google3/blaze-out/bin/my_file.ts` should
108
109
  // have the same ID as `/google3/my_file.ts`.
@@ -181,7 +182,7 @@ class KnownInputs {
181
182
  }
182
183
  const directiveInfo = this._classToDirectiveInfo.get(data.node.parent);
183
184
  const inputInfo = {
184
- file: run_in_devkit.projectFile(data.node.getSourceFile(), this.programInfo),
185
+ file: project_paths.projectFile(data.node.getSourceFile(), this.programInfo),
185
186
  metadata: data.metadata,
186
187
  descriptor: data.descriptor,
187
188
  container: directiveInfo,
@@ -1035,7 +1036,7 @@ function convertToSignalInput(node, { resolvedMetadata: metadata, resolvedType,
1035
1036
  if (leadingTodoText !== null) {
1036
1037
  replacements.push(migrate_ts_type_references.insertPrecedingLine(node, info, '// TODO: Notes from signal input migration:'), ...migrate_ts_type_references.cutStringToLineLimit(leadingTodoText, 70).map((line) => migrate_ts_type_references.insertPrecedingLine(node, info, `// ${line}`)));
1037
1038
  }
1038
- replacements.push(new run_in_devkit.Replacement(run_in_devkit.projectFile(node.getSourceFile(), info), new run_in_devkit.TextUpdate({
1039
+ replacements.push(new project_paths.Replacement(project_paths.projectFile(node.getSourceFile(), info), new project_paths.TextUpdate({
1039
1040
  position: node.getStart(),
1040
1041
  end: node.getEnd(),
1041
1042
  toInsert: newPropertyText,
@@ -1153,7 +1154,7 @@ function pass7__migrateTemplateReferences(host, references) {
1153
1154
  const appendText = reference.from.isObjectShorthandExpression
1154
1155
  ? `: ${reference.from.read.name}()`
1155
1156
  : `()`;
1156
- host.replacements.push(new run_in_devkit.Replacement(reference.from.templateFile, new run_in_devkit.TextUpdate({
1157
+ host.replacements.push(new project_paths.Replacement(reference.from.templateFile, new project_paths.TextUpdate({
1157
1158
  position: reference.from.read.sourceSpan.end,
1158
1159
  end: reference.from.read.sourceSpan.end,
1159
1160
  toInsert: appendText,
@@ -1193,7 +1194,7 @@ function pass8__migrateHostBindings(host, references, info) {
1193
1194
  const appendText = reference.from.isObjectShorthandExpression
1194
1195
  ? `: ${reference.from.read.name}()`
1195
1196
  : `()`;
1196
- host.replacements.push(new run_in_devkit.Replacement(run_in_devkit.projectFile(bindingField.getSourceFile(), info), new run_in_devkit.TextUpdate({ position: readEndPos, end: readEndPos, toInsert: appendText })));
1197
+ host.replacements.push(new project_paths.Replacement(project_paths.projectFile(bindingField.getSourceFile(), info), new project_paths.TextUpdate({ position: readEndPos, end: readEndPos, toInsert: appendText })));
1197
1198
  }
1198
1199
  }
1199
1200
 
@@ -1256,7 +1257,7 @@ function filterIncompatibilitiesForBestEffortMode(knownInputs) {
1256
1257
  * Tsurge migration for migrating Angular `@Input()` declarations to
1257
1258
  * signal inputs, with support for batch execution.
1258
1259
  */
1259
- class SignalInputMigration extends run_in_devkit.TsurgeComplexMigration {
1260
+ class SignalInputMigration extends project_paths.TsurgeComplexMigration {
1260
1261
  config;
1261
1262
  upgradedAnalysisPhaseResults = null;
1262
1263
  constructor(config = {}) {
@@ -1265,7 +1266,7 @@ class SignalInputMigration extends run_in_devkit.TsurgeComplexMigration {
1265
1266
  }
1266
1267
  // Override the default program creation, to add extra flags.
1267
1268
  createProgram(tsconfigAbsPath, fs) {
1268
- return run_in_devkit.createBaseProgramInfo(tsconfigAbsPath, fs, {
1269
+ return project_paths.createBaseProgramInfo(tsconfigAbsPath, fs, {
1269
1270
  _compilePoisonedComponents: true,
1270
1271
  // We want to migrate non-exported classes too.
1271
1272
  compileNonExportedClasses: true,
@@ -1337,13 +1338,13 @@ class SignalInputMigration extends run_in_devkit.TsurgeComplexMigration {
1337
1338
  knownInputs,
1338
1339
  };
1339
1340
  }
1340
- return run_in_devkit.confirmAsSerializable(unitData);
1341
+ return project_paths.confirmAsSerializable(unitData);
1341
1342
  }
1342
1343
  async combine(unitA, unitB) {
1343
- return run_in_devkit.confirmAsSerializable(combineCompilationUnitData(unitA, unitB));
1344
+ return project_paths.confirmAsSerializable(combineCompilationUnitData(unitA, unitB));
1344
1345
  }
1345
1346
  async globalMeta(combinedData) {
1346
- return run_in_devkit.confirmAsSerializable(convertToGlobalMeta(combinedData));
1347
+ return project_paths.confirmAsSerializable(convertToGlobalMeta(combinedData));
1347
1348
  }
1348
1349
  async migrate(globalMetadata, info, nonBatchData) {
1349
1350
  const knownInputs = nonBatchData?.knownInputs ?? new KnownInputs(info, this.config);
@@ -1433,7 +1434,7 @@ function createMigrationHost(info, config) {
1433
1434
 
1434
1435
  function migrate(options) {
1435
1436
  return async (tree, context) => {
1436
- await run_in_devkit.runMigrationInDevkit({
1437
+ await project_paths.runMigrationInDevkit({
1437
1438
  tree,
1438
1439
  getMigration: (fs) => new SignalInputMigration({
1439
1440
  bestEffortMode: options.bestEffortMode,
@@ -1443,8 +1444,13 @@ function migrate(options) {
1443
1444
  !/(^|\/)node_modules\//.test(input.file.rootRelativePath));
1444
1445
  },
1445
1446
  }),
1446
- beforeProgramCreation: (tsconfigPath) => {
1447
- context.logger.info(`Preparing analysis for: ${tsconfigPath}...`);
1447
+ beforeProgramCreation: (tsconfigPath, stage) => {
1448
+ if (stage === project_paths.MigrationStage.Analysis) {
1449
+ context.logger.info(`Preparing analysis for: ${tsconfigPath}...`);
1450
+ }
1451
+ else {
1452
+ context.logger.info(`Running migration for: ${tsconfigPath}...`);
1453
+ }
1448
1454
  },
1449
1455
  afterProgramCreation: (info, fs) => {
1450
1456
  const analysisPath = fs.resolve(options.analysisDir);
@@ -1,21 +1,22 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.0-next.4
3
+ * @license Angular v20.0.0-next.6
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-k591b6WQ.js');
9
+ var compiler = require('./compiler-BQ7R7w2v.js');
10
10
  var ts = require('typescript');
11
+ var checker = require('./checker-BFBQyesT.js');
11
12
  require('os');
12
- var index$1 = require('./index-B4OAlHh8.js');
13
+ var index$1 = require('./index-Cv4Q415G.js');
13
14
  require('path');
14
- var run_in_devkit = require('./run_in_devkit-CkvEksWP.js');
15
- var apply_import_manager = require('./apply_import_manager-CeNv8GIG.js');
16
- var migrate_ts_type_references = require('./migrate_ts_type_references-Be0TNYen.js');
15
+ var project_paths = require('./project_paths-ql6qcf_c.js');
16
+ var apply_import_manager = require('./apply_import_manager-DnMqg1pY.js');
17
+ var migrate_ts_type_references = require('./migrate_ts_type_references-Cq_ZBuT4.js');
17
18
  var assert = require('assert');
18
- var index = require('./index-BhELUmYx.js');
19
+ var index = require('./index-D8tMJPKa.js');
19
20
  require('@angular-devkit/core');
20
21
  require('node:path/posix');
21
22
  require('fs');
@@ -57,7 +58,7 @@ function migrateHostBindings(host, references, info) {
57
58
  const appendText = reference.from.isObjectShorthandExpression
58
59
  ? `: ${reference.from.read.name}()`
59
60
  : `()`;
60
- host.replacements.push(new run_in_devkit.Replacement(run_in_devkit.projectFile(bindingField.getSourceFile(), info), new run_in_devkit.TextUpdate({ position: readEndPos, end: readEndPos, toInsert: appendText })));
61
+ host.replacements.push(new project_paths.Replacement(project_paths.projectFile(bindingField.getSourceFile(), info), new project_paths.TextUpdate({ position: readEndPos, end: readEndPos, toInsert: appendText })));
61
62
  }
62
63
  }
63
64
 
@@ -86,7 +87,7 @@ function migrateTemplateReferences(host, references) {
86
87
  const appendText = reference.from.isObjectShorthandExpression
87
88
  ? `: ${reference.from.read.name}()`
88
89
  : `()`;
89
- host.replacements.push(new run_in_devkit.Replacement(reference.from.templateFile, new run_in_devkit.TextUpdate({
90
+ host.replacements.push(new project_paths.Replacement(reference.from.templateFile, new project_paths.TextUpdate({
90
91
  position: reference.from.read.sourceSpan.end,
91
92
  end: reference.from.read.sourceSpan.end,
92
93
  toInsert: appendText,
@@ -134,7 +135,7 @@ function extractQueryListType(node) {
134
135
  * --> read stays
135
136
  * --> emitDistinctChangesOnly is gone!
136
137
  */
137
- function computeReplacementsToMigrateQuery(node, metadata, importManager, info, printer, options, checker$1) {
138
+ function computeReplacementsToMigrateQuery(node, metadata, importManager, info, printer, options, checker) {
138
139
  const sf = node.getSourceFile();
139
140
  let newQueryFn = importManager.addImport({
140
141
  requestedFile: sf,
@@ -159,7 +160,7 @@ function computeReplacementsToMigrateQuery(node, metadata, importManager, info,
159
160
  }
160
161
  }
161
162
  if (metadata.queryInfo.read !== null) {
162
- assert(metadata.queryInfo.read instanceof checker.WrappedNodeExpr);
163
+ assert(metadata.queryInfo.read instanceof compiler.WrappedNodeExpr);
163
164
  optionProperties.push(ts.factory.createPropertyAssignment('read', metadata.queryInfo.read.node));
164
165
  }
165
166
  if (metadata.queryInfo.descendants !== defaultDescendants) {
@@ -183,7 +184,7 @@ function computeReplacementsToMigrateQuery(node, metadata, importManager, info,
183
184
  node.initializer === undefined &&
184
185
  node.questionToken === undefined &&
185
186
  type !== undefined &&
186
- !checker$1.isTypeAssignableTo(checker$1.getUndefinedType(), checker$1.getTypeFromTypeNode(type))) {
187
+ !checker.isTypeAssignableTo(checker.getUndefinedType(), checker.getTypeFromTypeNode(type))) {
187
188
  isRequired = true;
188
189
  }
189
190
  if (isRequired && metadata.queryInfo.first) {
@@ -203,7 +204,7 @@ function computeReplacementsToMigrateQuery(node, metadata, importManager, info,
203
204
  // If the original property type and the read type are matching, we can rely
204
205
  // on the TS inference, instead of repeating types, like in `viewChild<Button>(Button)`.
205
206
  if (type !== undefined &&
206
- resolvedReadType instanceof checker.WrappedNodeExpr &&
207
+ resolvedReadType instanceof compiler.WrappedNodeExpr &&
207
208
  ts.isIdentifier(resolvedReadType.node) &&
208
209
  ts.isTypeReferenceNode(type) &&
209
210
  ts.isIdentifier(type.typeName) &&
@@ -215,15 +216,27 @@ function computeReplacementsToMigrateQuery(node, metadata, importManager, info,
215
216
  // original type explicitly as generic. Otherwise, query API is smart
216
217
  // enough to always infer.
217
218
  resolvedReadType === null && type !== undefined ? [type] : undefined, args);
218
- const updated = ts.factory.createPropertyDeclaration([ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)], node.name, undefined, undefined, call);
219
+ const accessibilityModifier = getAccessibilityModifier(node);
220
+ let modifiers = [
221
+ ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword),
222
+ ];
223
+ if (accessibilityModifier) {
224
+ modifiers = [accessibilityModifier, ...modifiers];
225
+ }
226
+ const updated = ts.factory.createPropertyDeclaration(modifiers, node.name, undefined, undefined, call);
219
227
  return [
220
- new run_in_devkit.Replacement(run_in_devkit.projectFile(node.getSourceFile(), info), new run_in_devkit.TextUpdate({
228
+ new project_paths.Replacement(project_paths.projectFile(node.getSourceFile(), info), new project_paths.TextUpdate({
221
229
  position: node.getStart(),
222
230
  end: node.getEnd(),
223
231
  toInsert: printer.printNode(ts.EmitHint.Unspecified, updated, sf),
224
232
  })),
225
233
  ];
226
234
  }
235
+ function getAccessibilityModifier(node) {
236
+ return node.modifiers?.find((mod) => mod.kind === ts.SyntaxKind.PublicKeyword ||
237
+ mod.kind === ts.SyntaxKind.PrivateKeyword ||
238
+ mod.kind === ts.SyntaxKind.ProtectedKeyword);
239
+ }
227
240
 
228
241
  /**
229
242
  * Attempts to get a class field descriptor if the given symbol
@@ -258,7 +271,7 @@ function getUniqueIDForClassProperty(property, info) {
258
271
  if (property.name === undefined) {
259
272
  return null;
260
273
  }
261
- const id = run_in_devkit.projectFile(property.getSourceFile(), info).id.replace(/\.d\.ts$/, '.ts');
274
+ const id = project_paths.projectFile(property.getSourceFile(), info).id.replace(/\.d\.ts$/, '.ts');
262
275
  // Note: If a class is nested, there could be an ID clash.
263
276
  // This is highly unlikely though, and this is not a problem because
264
277
  // in such cases, there is even less chance there are any references to
@@ -382,7 +395,7 @@ class KnownQueries {
382
395
  });
383
396
  this.knownQueryIDs.set(id, { key: id, node: queryField });
384
397
  const descriptor = { key: id, node: queryField };
385
- const file = run_in_devkit.projectFile(queryField.getSourceFile(), this.info);
398
+ const file = project_paths.projectFile(queryField.getSourceFile(), this.info);
386
399
  if (this.config.shouldMigrateQuery !== undefined &&
387
400
  !this.config.shouldMigrateQuery(descriptor, file)) {
388
401
  this.markFieldIncompatible(descriptor, {
@@ -520,7 +533,7 @@ function checkNonTsReferenceAccessesField(ref, fieldName) {
520
533
  if (ref.from.read !== readFromPath) {
521
534
  return null;
522
535
  }
523
- if (!(parentRead instanceof checker.PropertyRead) || parentRead.name !== fieldName) {
536
+ if (!(parentRead instanceof compiler.PropertyRead) || parentRead.name !== fieldName) {
524
537
  return null;
525
538
  }
526
539
  return parentRead;
@@ -558,7 +571,7 @@ function checkNonTsReferenceCallsField(ref, fieldName) {
558
571
  return null;
559
572
  }
560
573
  const potentialCall = ref.from.readAstPath[accessIdx - 1];
561
- if (potentialCall === undefined || !(potentialCall instanceof checker.Call)) {
574
+ if (potentialCall === undefined || !(potentialCall instanceof compiler.Call)) {
562
575
  return null;
563
576
  }
564
577
  return potentialCall;
@@ -581,7 +594,7 @@ function removeQueryListToArrayCall(ref, info, globalMetadata, knownQueries, rep
581
594
  return;
582
595
  }
583
596
  const toArrayExpr = toArrayCallExpr.expression;
584
- replacements.push(new run_in_devkit.Replacement(run_in_devkit.projectFile(toArrayExpr.getSourceFile(), info), new run_in_devkit.TextUpdate({
597
+ replacements.push(new project_paths.Replacement(project_paths.projectFile(toArrayExpr.getSourceFile(), info), new project_paths.TextUpdate({
585
598
  // Delete from expression end to call end. E.g. `.toArray(<..>)`.
586
599
  position: toArrayExpr.expression.getEnd(),
587
600
  end: toArrayCallExpr.getEnd(),
@@ -596,7 +609,7 @@ function removeQueryListToArrayCall(ref, info, globalMetadata, knownQueries, rep
596
609
  }
597
610
  const file = index.isHostBindingReference(ref) ? ref.from.file : ref.from.templateFile;
598
611
  const offset = index.isHostBindingReference(ref) ? ref.from.hostPropertyNode.getStart() + 1 : 0;
599
- replacements.push(new run_in_devkit.Replacement(file, new run_in_devkit.TextUpdate({
612
+ replacements.push(new project_paths.Replacement(file, new project_paths.TextUpdate({
600
613
  // Delete from expression end to call end. E.g. `.toArray(<..>)`.
601
614
  position: offset + callExpr.receiver.receiver.sourceSpan.end,
602
615
  end: offset + callExpr.sourceSpan.end,
@@ -620,7 +633,7 @@ function replaceQueryListGetCall(ref, info, globalMetadata, knownQueries, replac
620
633
  return;
621
634
  }
622
635
  const getExpr = getCallExpr.expression;
623
- replacements.push(new run_in_devkit.Replacement(run_in_devkit.projectFile(getExpr.getSourceFile(), info), new run_in_devkit.TextUpdate({
636
+ replacements.push(new project_paths.Replacement(project_paths.projectFile(getExpr.getSourceFile(), info), new project_paths.TextUpdate({
624
637
  position: getExpr.name.getStart(),
625
638
  end: getExpr.name.getEnd(),
626
639
  toInsert: 'at',
@@ -634,7 +647,7 @@ function replaceQueryListGetCall(ref, info, globalMetadata, knownQueries, replac
634
647
  }
635
648
  const file = index.isHostBindingReference(ref) ? ref.from.file : ref.from.templateFile;
636
649
  const offset = index.isHostBindingReference(ref) ? ref.from.hostPropertyNode.getStart() + 1 : 0;
637
- replacements.push(new run_in_devkit.Replacement(file, new run_in_devkit.TextUpdate({
650
+ replacements.push(new project_paths.Replacement(file, new project_paths.TextUpdate({
638
651
  position: offset + callExpr.receiver.nameSpan.start,
639
652
  end: offset + callExpr.receiver.nameSpan.end,
640
653
  toInsert: 'at',
@@ -689,7 +702,7 @@ function replaceQueryListFirstAndLastReferences(ref, info, globalMetadata, known
689
702
  if (expr === null) {
690
703
  return;
691
704
  }
692
- replacements.push(new run_in_devkit.Replacement(run_in_devkit.projectFile(expr.getSourceFile(), info), new run_in_devkit.TextUpdate({
705
+ replacements.push(new project_paths.Replacement(project_paths.projectFile(expr.getSourceFile(), info), new project_paths.TextUpdate({
693
706
  position: expr.name.getStart(),
694
707
  end: expr.name.getEnd(),
695
708
  toInsert: mapping.get(expr.name.text),
@@ -703,14 +716,14 @@ function replaceQueryListFirstAndLastReferences(ref, info, globalMetadata, known
703
716
  }
704
717
  const file = index.isHostBindingReference(ref) ? ref.from.file : ref.from.templateFile;
705
718
  const offset = index.isHostBindingReference(ref) ? ref.from.hostPropertyNode.getStart() + 1 : 0;
706
- replacements.push(new run_in_devkit.Replacement(file, new run_in_devkit.TextUpdate({
719
+ replacements.push(new project_paths.Replacement(file, new project_paths.TextUpdate({
707
720
  position: offset + expr.nameSpan.start,
708
721
  end: offset + expr.nameSpan.end,
709
722
  toInsert: mapping.get(expr.name),
710
723
  })));
711
724
  }
712
725
 
713
- class SignalQueriesMigration extends run_in_devkit.TsurgeComplexMigration {
726
+ class SignalQueriesMigration extends project_paths.TsurgeComplexMigration {
714
727
  config;
715
728
  constructor(config = {}) {
716
729
  super();
@@ -748,7 +761,7 @@ class SignalQueriesMigration extends run_in_devkit.TsurgeComplexMigration {
748
761
  key: extractedQuery.id,
749
762
  node: queryNode,
750
763
  };
751
- const containingFile = run_in_devkit.projectFile(queryNode.getSourceFile(), info);
764
+ const containingFile = project_paths.projectFile(queryNode.getSourceFile(), info);
752
765
  // If we have a config filter function, use it here for later
753
766
  // perf-boosted reference lookups. Useful in non-batch mode.
754
767
  if (this.config.shouldMigrateQuery === undefined ||
@@ -852,7 +865,7 @@ class SignalQueriesMigration extends run_in_devkit.TsurgeComplexMigration {
852
865
  if (this.config.assumeNonBatch) {
853
866
  res.reusableAnalysisReferences = referenceResult.references;
854
867
  }
855
- return run_in_devkit.confirmAsSerializable(res);
868
+ return project_paths.confirmAsSerializable(res);
856
869
  }
857
870
  async combine(unitA, unitB) {
858
871
  const combined = {
@@ -892,7 +905,7 @@ class SignalQueriesMigration extends run_in_devkit.TsurgeComplexMigration {
892
905
  }
893
906
  }
894
907
  }
895
- return run_in_devkit.confirmAsSerializable(combined);
908
+ return project_paths.confirmAsSerializable(combined);
896
909
  }
897
910
  async globalMeta(combinedData) {
898
911
  const globalUnitData = {
@@ -905,7 +918,7 @@ class SignalQueriesMigration extends run_in_devkit.TsurgeComplexMigration {
905
918
  markFieldIncompatibleInMetadata(globalUnitData.problematicQueries, id, migrate_ts_type_references.FieldIncompatibilityReason.SignalQueries__QueryListProblematicFieldAccessed);
906
919
  }
907
920
  }
908
- return run_in_devkit.confirmAsSerializable(globalUnitData);
921
+ return project_paths.confirmAsSerializable(globalUnitData);
909
922
  }
910
923
  async migrate(globalMetadata, info) {
911
924
  // Pre-Analyze the program and get access to the template type checker.
@@ -1106,7 +1119,7 @@ function updateFileState(stateMap, node, queryType) {
1106
1119
 
1107
1120
  function migrate(options) {
1108
1121
  return async (tree, context) => {
1109
- await run_in_devkit.runMigrationInDevkit({
1122
+ await project_paths.runMigrationInDevkit({
1110
1123
  tree,
1111
1124
  getMigration: (fs) => new SignalQueriesMigration({
1112
1125
  bestEffortMode: options.bestEffortMode,
@@ -1116,8 +1129,13 @@ function migrate(options) {
1116
1129
  !/(^|\/)node_modules\//.test(file.rootRelativePath));
1117
1130
  },
1118
1131
  }),
1119
- beforeProgramCreation: (tsconfigPath) => {
1120
- context.logger.info(`Preparing analysis for: ${tsconfigPath}...`);
1132
+ beforeProgramCreation: (tsconfigPath, stage) => {
1133
+ if (stage === project_paths.MigrationStage.Analysis) {
1134
+ context.logger.info(`Preparing analysis for: ${tsconfigPath}...`);
1135
+ }
1136
+ else {
1137
+ context.logger.info(`Running migration for: ${tsconfigPath}...`);
1138
+ }
1121
1139
  },
1122
1140
  afterProgramCreation: (info, fs) => {
1123
1141
  const analysisPath = fs.resolve(options.analysisDir);
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.0-next.4
3
+ * @license Angular v20.0.0-next.6
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -10,22 +10,23 @@ var schematics = require('@angular-devkit/schematics');
10
10
  var signalQueriesMigration = require('./signal-queries-migration.js');
11
11
  var signalInputMigration = require('./signal-input-migration.js');
12
12
  var outputMigration = require('./output-migration.js');
13
- require('./checker-k591b6WQ.js');
13
+ require('./compiler-BQ7R7w2v.js');
14
14
  require('typescript');
15
+ require('./checker-BFBQyesT.js');
15
16
  require('os');
16
17
  require('fs');
17
18
  require('module');
18
19
  require('path');
19
20
  require('url');
20
- require('./index-B4OAlHh8.js');
21
- require('./run_in_devkit-CkvEksWP.js');
21
+ require('./index-Cv4Q415G.js');
22
+ require('./project_paths-ql6qcf_c.js');
22
23
  require('@angular-devkit/core');
23
24
  require('node:path/posix');
24
25
  require('./project_tsconfig_paths-CDVxT6Ov.js');
25
- require('./apply_import_manager-CeNv8GIG.js');
26
- require('./migrate_ts_type_references-Be0TNYen.js');
26
+ require('./apply_import_manager-DnMqg1pY.js');
27
+ require('./migrate_ts_type_references-Cq_ZBuT4.js');
27
28
  require('assert');
28
- require('./index-BhELUmYx.js');
29
+ require('./index-D8tMJPKa.js');
29
30
  require('./leading_space-D9nQ8UQC.js');
30
31
 
31
32
  function migrate(options) {
@@ -1,23 +1,25 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.0.0-next.4
3
+ * @license Angular v20.0.0-next.6
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 schematics = require('@angular-devkit/schematics');
10
- var index = require('./index-B4OAlHh8.js');
10
+ var index = require('./index-Cv4Q415G.js');
11
11
  var fs = require('fs');
12
12
  var p = require('path');
13
13
  var ts = require('typescript');
14
- var compiler_host = require('./compiler_host-DwM3ugW3.js');
14
+ var change_tracker = require('./change_tracker-UMPkv-eH.js');
15
15
  var project_tsconfig_paths = require('./project_tsconfig_paths-CDVxT6Ov.js');
16
+ var compiler_host = require('./compiler_host-CAfDJO3W.js');
16
17
  var ng_decorators = require('./ng_decorators-DznZ5jMl.js');
17
18
  var nodes = require('./nodes-B16H9JUd.js');
18
19
  var symbol = require('./symbol-VPWguRxr.js');
19
20
  var imports = require('./imports-CIX-JgAN.js');
20
- var checker = require('./checker-k591b6WQ.js');
21
+ require('./compiler-BQ7R7w2v.js');
22
+ var checker = require('./checker-BFBQyesT.js');
21
23
  require('os');
22
24
  require('@angular-devkit/core');
23
25
  require('module');
@@ -234,7 +236,7 @@ function getRelativeImportPath(fromFile, toFile) {
234
236
  path = './' + path;
235
237
  }
236
238
  // Using the Node utilities can yield paths with forward slashes on Windows.
237
- return compiler_host.normalizePath(path);
239
+ return change_tracker.normalizePath(path);
238
240
  }
239
241
  /** Function used to remap the generated `imports` for a component to known shorter aliases. */
240
242
  function knownInternalAliasRemapper(imports) {
@@ -331,7 +333,7 @@ function toStandalone(sourceFiles, program, printer, fileImportRemapper, declara
331
333
  const modulesToMigrate = new Set();
332
334
  const testObjectsToMigrate = new Set();
333
335
  const declarations = new Set();
334
- const tracker = new compiler_host.ChangeTracker(printer, fileImportRemapper);
336
+ const tracker = new change_tracker.ChangeTracker(printer, fileImportRemapper);
335
337
  for (const sourceFile of sourceFiles) {
336
338
  const modules = findNgModuleClassesToMigrate(sourceFile, typeChecker);
337
339
  const testObjects = findTestObjectsToMigrate(sourceFile, typeChecker);
@@ -910,7 +912,7 @@ function isStandaloneDeclaration(node, declarationsInMigration, templateTypeChec
910
912
  */
911
913
  function pruneNgModules(program, host, basePath, rootFileNames, sourceFiles, printer, importRemapper, referenceLookupExcludedFiles, declarationImportRemapper) {
912
914
  const filesToRemove = new Set();
913
- const tracker = new compiler_host.ChangeTracker(printer, importRemapper);
915
+ const tracker = new change_tracker.ChangeTracker(printer, importRemapper);
914
916
  const tsProgram = program.getTsProgram();
915
917
  const typeChecker = tsProgram.getTypeChecker();
916
918
  const templateTypeChecker = program.compiler.getTemplateTypeChecker();
@@ -1394,7 +1396,7 @@ function isInImportsArray(closestAssignment, closestArray) {
1394
1396
  * found in the LICENSE file at https://angular.dev/license
1395
1397
  */
1396
1398
  function toStandaloneBootstrap(program, host, basePath, rootFileNames, sourceFiles, printer, importRemapper, referenceLookupExcludedFiles, declarationImportRemapper) {
1397
- const tracker = new compiler_host.ChangeTracker(printer, importRemapper);
1399
+ const tracker = new change_tracker.ChangeTracker(printer, importRemapper);
1398
1400
  const typeChecker = program.getTsProgram().getTypeChecker();
1399
1401
  const templateTypeChecker = program.compiler.getTemplateTypeChecker();
1400
1402
  const referenceResolver = new ReferenceResolver(program, host, rootFileNames, basePath, referenceLookupExcludedFiles);
@@ -1987,7 +1989,7 @@ function migrate(options) {
1987
1989
  const allPaths = [...buildPaths, ...testPaths];
1988
1990
  // TS and Schematic use paths in POSIX format even on Windows. This is needed as otherwise
1989
1991
  // string matching such as `sourceFile.fileName.startsWith(pathToMigrate)` might not work.
1990
- const pathToMigrate = compiler_host.normalizePath(p.join(basePath, options.path));
1992
+ const pathToMigrate = change_tracker.normalizePath(p.join(basePath, options.path));
1991
1993
  let migratedFiles = 0;
1992
1994
  if (!allPaths.length) {
1993
1995
  throw new schematics.SchematicsException('Could not find any tsconfig file. Cannot run the standalone migration.');