@angular/core 22.0.0-next.9 → 22.0.0-rc.0

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 (75) hide show
  1. package/fesm2022/_attribute-chunk.mjs +1 -1
  2. package/fesm2022/_debug_node-chunk.mjs +1220 -1199
  3. package/fesm2022/_debug_node-chunk.mjs.map +1 -1
  4. package/fesm2022/_effect-chunk.mjs +1 -1
  5. package/fesm2022/_not_found-chunk.mjs +1 -1
  6. package/fesm2022/_pending_tasks-chunk.mjs +150 -36
  7. package/fesm2022/_pending_tasks-chunk.mjs.map +1 -1
  8. package/fesm2022/_resource-chunk.mjs +56 -18
  9. package/fesm2022/_resource-chunk.mjs.map +1 -1
  10. package/fesm2022/_untracked-chunk.mjs +1 -1
  11. package/fesm2022/_weak_ref-chunk.mjs +1 -1
  12. package/fesm2022/core.mjs +129 -134
  13. package/fesm2022/core.mjs.map +1 -1
  14. package/fesm2022/primitives-di.mjs +1 -1
  15. package/fesm2022/primitives-event-dispatch.mjs +1 -1
  16. package/fesm2022/primitives-signals.mjs +1 -1
  17. package/fesm2022/rxjs-interop.mjs +1 -1
  18. package/fesm2022/rxjs-interop.mjs.map +1 -1
  19. package/fesm2022/testing.mjs +47 -3
  20. package/fesm2022/testing.mjs.map +1 -1
  21. package/package.json +7 -3
  22. package/schematics/bundles/apply_import_manager-CxA_YYgB.cjs +1 -1
  23. package/schematics/bundles/can-match-snapshot-required.cjs +1 -1
  24. package/schematics/bundles/change-detection-eager.cjs +1 -1
  25. package/schematics/bundles/cleanup-unused-imports.cjs +1 -1
  26. package/schematics/bundles/common-to-standalone-migration.cjs +1 -1
  27. package/schematics/bundles/compiler_host-CY14HvaP.cjs +1 -1
  28. package/schematics/bundles/control-flow-migration.cjs +1 -1
  29. package/schematics/bundles/http-xhr-backend.cjs +1 -1
  30. package/schematics/bundles/imports-CKV-ITqD.cjs +1 -1
  31. package/schematics/bundles/incremental-hydration.cjs +10 -7
  32. package/schematics/bundles/{index-DADA7AvC.cjs → index-DxFMpcXS.cjs} +7 -2
  33. package/schematics/bundles/inject-migration.cjs +1 -1
  34. package/schematics/bundles/json-file-Drblb4E1.cjs +1 -1
  35. package/schematics/bundles/leading_space-BTPRV0wu.cjs +1 -1
  36. package/schematics/bundles/{migrate_ts_type_references-B9LlDDUg.cjs → migrate_ts_type_references-DMv-GSuu.cjs} +28 -10
  37. package/schematics/bundles/model-output.cjs +200 -0
  38. package/schematics/bundles/ng_component_template-DPAF1aEA.cjs +1 -1
  39. package/schematics/bundles/ng_decorators-IVztR9rk.cjs +1 -1
  40. package/schematics/bundles/ngclass-to-class-migration.cjs +1 -1
  41. package/schematics/bundles/ngstyle-to-style-migration.cjs +1 -1
  42. package/schematics/bundles/nodes-ZSQ7WZRB.cjs +1 -1
  43. package/schematics/bundles/output-migration.cjs +2 -2
  44. package/schematics/bundles/parse_html-C8eKA9px.cjs +1 -1
  45. package/schematics/bundles/project_paths-D2V-Uh2L.cjs +1 -1
  46. package/schematics/bundles/project_tsconfig_paths-DkkMibv-.cjs +1 -1
  47. package/schematics/bundles/property_name-BCpALNpZ.cjs +1 -1
  48. package/schematics/bundles/route-lazy-loading.cjs +1 -1
  49. package/schematics/bundles/router-testing-module-migration.cjs +1 -1
  50. package/schematics/bundles/safe-optional-chaining.cjs +570 -0
  51. package/schematics/bundles/self-closing-tags-migration.cjs +1 -1
  52. package/schematics/bundles/signal-input-migration.cjs +3 -3
  53. package/schematics/bundles/signal-queries-migration.cjs +3 -3
  54. package/schematics/bundles/signals.cjs +3 -3
  55. package/schematics/bundles/standalone-migration.cjs +1 -1
  56. package/schematics/bundles/strict-safe-navigation-narrow.cjs +1 -1
  57. package/schematics/bundles/strict-templates-default.cjs +1 -1
  58. package/schematics/migrations.json +10 -0
  59. package/third_party/@mcp-b/webmcp-types/LICENSE +21 -0
  60. package/third_party/@mcp-b/webmcp-types/dist/common.d.ts +297 -0
  61. package/third_party/@mcp-b/webmcp-types/dist/json-schema.d.ts +196 -0
  62. package/third_party/@mcp-b/webmcp-types/index.d.ts +9 -0
  63. package/types/_api-chunk.d.ts +23 -14
  64. package/types/_chrome_dev_tools_performance-chunk.d.ts +1 -1
  65. package/types/_debug_node-chunk.d.ts +1 -1
  66. package/types/_effect-chunk.d.ts +1 -1
  67. package/types/_event_dispatcher-chunk.d.ts +1 -1
  68. package/types/_formatter-chunk.d.ts +1 -1
  69. package/types/_weak_ref-chunk.d.ts +1 -1
  70. package/types/core.d.ts +5175 -4960
  71. package/types/primitives-di.d.ts +1 -1
  72. package/types/primitives-event-dispatch.d.ts +1 -1
  73. package/types/primitives-signals.d.ts +1 -1
  74. package/types/rxjs-interop.d.ts +4 -4
  75. package/types/testing.d.ts +1 -1
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@angular/core",
3
- "version": "22.0.0-next.9",
3
+ "version": "22.0.0-rc.0",
4
4
  "description": "Angular - the core framework",
5
5
  "author": "angular",
6
6
  "license": "MIT",
7
7
  "engines": {
8
- "node": "^22.22.0 || >=24.13.1"
8
+ "node": "^22.22.0 || ^24.13.1 || >=26.0.0"
9
9
  },
10
10
  "exports": {
11
11
  "./schematics/*": {
@@ -45,8 +45,12 @@
45
45
  "dependencies": {
46
46
  "tslib": "^2.3.0"
47
47
  },
48
+ "devDependencies": {
49
+ "@mcp-b/webmcp-polyfill": "^2.2.0",
50
+ "@mcp-b/webmcp-types": "^2.2.0"
51
+ },
48
52
  "peerDependencies": {
49
- "@angular/compiler": "22.0.0-next.9",
53
+ "@angular/compiler": "22.0.0-rc.0",
50
54
  "rxjs": "^6.5.3 || ^7.4.0",
51
55
  "zone.js": "~0.15.0 || ~0.16.0"
52
56
  },
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -30,15 +30,18 @@ class IncrementalHydrationMigration extends project_paths.TsurgeFunnelMigration
30
30
  ts.isIdentifier(node.expression) &&
31
31
  node.expression.text === 'provideClientHydration') {
32
32
  let hasIncremental = false;
33
+ let hasNoIncremental = false;
33
34
  for (const arg of node.arguments) {
34
- if (ts.isCallExpression(arg) &&
35
- ts.isIdentifier(arg.expression) &&
36
- arg.expression.text === 'withIncrementalHydration') {
37
- hasIncremental = true;
38
- break;
35
+ if (ts.isCallExpression(arg) && ts.isIdentifier(arg.expression)) {
36
+ if (arg.expression.text === 'withIncrementalHydration') {
37
+ hasIncremental = true;
38
+ }
39
+ else if (arg.expression.text === 'withNoIncrementalHydration') {
40
+ hasNoIncremental = true;
41
+ }
39
42
  }
40
43
  }
41
- if (!hasIncremental) {
44
+ if (!hasIncremental && !hasNoIncremental) {
42
45
  // Add withNoIncrementalHydration()
43
46
  const withNoIncrementalExpr = importManager.addImport({
44
47
  exportModuleSpecifier: '@angular/platform-browser',
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -265,7 +265,9 @@ class TemplateReferenceVisitor extends compiler.TmplAstRecursiveVisitor {
265
265
  }
266
266
  visitForLoopBlock(block) {
267
267
  this.checkExpressionForReferencedFields(block, block.expression);
268
- this.checkExpressionForReferencedFields(block, block.trackBy);
268
+ if (block.trackBy !== null) {
269
+ this.checkExpressionForReferencedFields(block, block.trackBy);
270
+ }
269
271
  super.visitForLoopBlock(block);
270
272
  }
271
273
  visitSwitchBlock(block) {
@@ -308,6 +310,9 @@ class TemplateReferenceVisitor extends compiler.TmplAstRecursiveVisitor {
308
310
  this.templateAttributeReferencedFields.push(...referencedFields);
309
311
  }
310
312
  }
313
+ visitLetDeclaration(decl) {
314
+ this.checkExpressionForReferencedFields(decl, decl.value);
315
+ }
311
316
  }
312
317
  /**
313
318
  * Expression AST visitor that checks whether a given expression references
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -9,7 +9,7 @@
9
9
  var assert = require('assert');
10
10
  var ts = require('typescript');
11
11
  var migrations = require('@angular/compiler-cli/private/migrations');
12
- var index = require('./index-DADA7AvC.cjs');
12
+ var index = require('./index-DxFMpcXS.cjs');
13
13
  var project_paths = require('./project_paths-D2V-Uh2L.cjs');
14
14
  var leading_space = require('./leading_space-BTPRV0wu.cjs');
15
15
  require('@angular/compiler-cli');
@@ -284,11 +284,13 @@ class InvokeFunctionExpr extends Expression {
284
284
  fn;
285
285
  args;
286
286
  pure;
287
- constructor(fn, args, type, sourceSpan, pure = false, leadingComments) {
287
+ isOptional;
288
+ constructor(fn, args, type, sourceSpan, pure = false, leadingComments, isOptional = false) {
288
289
  super(type, sourceSpan, leadingComments);
289
290
  this.fn = fn;
290
291
  this.args = args;
291
292
  this.pure = pure;
293
+ this.isOptional = isOptional;
292
294
  }
293
295
  // An alias for fn, which allows other logic to handle calls and property reads together.
294
296
  get receiver() {
@@ -307,7 +309,7 @@ class InvokeFunctionExpr extends Expression {
307
309
  return visitor.visitInvokeFunctionExpr(this, context);
308
310
  }
309
311
  clone() {
310
- return new InvokeFunctionExpr(this.fn.clone(), this.args.map((arg) => arg.clone()), this.type, this.sourceSpan, this.pure);
312
+ return new InvokeFunctionExpr(this.fn.clone(), this.args.map((arg) => arg.clone()), this.type, this.sourceSpan, this.pure, [], this.isOptional);
311
313
  }
312
314
  }
313
315
  class InstantiateExpr extends Expression {
@@ -420,17 +422,26 @@ class BinaryOperatorExpr extends Expression {
420
422
  class ReadPropExpr extends Expression {
421
423
  receiver;
422
424
  name;
423
- constructor(receiver, name, type, sourceSpan, leadingComments) {
425
+ isOptional;
426
+ constructor(receiver, name, type, sourceSpan, leadingComments,
427
+ /**
428
+ * Whether the property access uses the optional-chaining operator (`?.`).
429
+ */
430
+ isOptional = false) {
424
431
  super(type, sourceSpan, leadingComments);
425
432
  this.receiver = receiver;
426
433
  this.name = name;
434
+ this.isOptional = isOptional;
427
435
  }
428
436
  // An alias for name, which allows other logic to handle property reads and keyed reads together.
429
437
  get index() {
430
438
  return this.name;
431
439
  }
432
440
  isEquivalent(e) {
433
- return (e instanceof ReadPropExpr && this.receiver.isEquivalent(e.receiver) && this.name === e.name);
441
+ return (e instanceof ReadPropExpr &&
442
+ this.receiver.isEquivalent(e.receiver) &&
443
+ this.name === e.name &&
444
+ this.isOptional === e.isOptional);
434
445
  }
435
446
  isConstant() {
436
447
  return false;
@@ -442,21 +453,28 @@ class ReadPropExpr extends Expression {
442
453
  return new BinaryOperatorExpr(BinaryOperator.Assign, this.receiver.prop(this.name), value, null, this.sourceSpan);
443
454
  }
444
455
  clone() {
445
- return new ReadPropExpr(this.receiver.clone(), this.name, this.type, this.sourceSpan);
456
+ return new ReadPropExpr(this.receiver.clone(), this.name, this.type, this.sourceSpan, [], this.isOptional);
446
457
  }
447
458
  }
448
459
  class ReadKeyExpr extends Expression {
449
460
  receiver;
450
461
  index;
451
- constructor(receiver, index, type, sourceSpan, leadingComments) {
462
+ isOptional;
463
+ constructor(receiver, index, type, sourceSpan, leadingComments,
464
+ /**
465
+ * Whether the property access uses the optional-chaining operator (`?.[`).
466
+ */
467
+ isOptional = false) {
452
468
  super(type, sourceSpan, leadingComments);
453
469
  this.receiver = receiver;
454
470
  this.index = index;
471
+ this.isOptional = isOptional;
455
472
  }
456
473
  isEquivalent(e) {
457
474
  return (e instanceof ReadKeyExpr &&
458
475
  this.receiver.isEquivalent(e.receiver) &&
459
- this.index.isEquivalent(e.index));
476
+ this.index.isEquivalent(e.index) &&
477
+ this.isOptional === e.isOptional);
460
478
  }
461
479
  isConstant() {
462
480
  return false;
@@ -468,7 +486,7 @@ class ReadKeyExpr extends Expression {
468
486
  return new BinaryOperatorExpr(BinaryOperator.Assign, this.receiver.key(this.index), value, null, this.sourceSpan);
469
487
  }
470
488
  clone() {
471
- return new ReadKeyExpr(this.receiver.clone(), this.index.clone(), this.type, this.sourceSpan);
489
+ return new ReadKeyExpr(this.receiver.clone(), this.index.clone(), this.type, this.sourceSpan, [], this.isOptional);
472
490
  }
473
491
  }
474
492
  const NULL_EXPR = new LiteralExpr(null, null, null);
@@ -0,0 +1,200 @@
1
+ 'use strict';
2
+ /**
3
+ * @license Angular v22.0.0-rc.0
4
+ * (c) 2010-2026 Google LLC. https://angular.dev/
5
+ * License: MIT
6
+ */
7
+ 'use strict';
8
+
9
+ require('@angular/compiler-cli');
10
+ var migrations = require('@angular/compiler-cli/private/migrations');
11
+ var ts = require('typescript');
12
+ require('node:path');
13
+ var project_paths = require('./project_paths-D2V-Uh2L.cjs');
14
+ var imports = require('./imports-CKV-ITqD.cjs');
15
+ var apply_import_manager = require('./apply_import_manager-CxA_YYgB.cjs');
16
+ require('@angular-devkit/core');
17
+ require('node:path/posix');
18
+ require('@angular-devkit/schematics');
19
+ require('./project_tsconfig_paths-DkkMibv-.cjs');
20
+
21
+ class ModelOutputMigration extends project_paths.TsurgeFunnelMigration {
22
+ config;
23
+ constructor(config = {}) {
24
+ super();
25
+ this.config = config;
26
+ }
27
+ async analyze(info) {
28
+ const replacements = [];
29
+ for (const sourceFile of info.sourceFiles) {
30
+ if (this.config.shouldMigrate && !this.config.shouldMigrate(project_paths.projectFile(sourceFile, info))) {
31
+ continue;
32
+ }
33
+ const importManager = new migrations.ImportManager();
34
+ const visit = (node) => {
35
+ if (ts.isClassDeclaration(node)) {
36
+ this.analyzeClass(node, info.program.getTypeChecker(), importManager, replacements, sourceFile, info);
37
+ }
38
+ ts.forEachChild(node, visit);
39
+ };
40
+ visit(sourceFile);
41
+ apply_import_manager.applyImportManagerChanges(importManager, replacements, [sourceFile], info);
42
+ }
43
+ return project_paths.confirmAsSerializable({
44
+ replacements,
45
+ });
46
+ }
47
+ analyzeClass(classNode, typeChecker, importManager, replacements, sourceFile, info) {
48
+ const modelProperties = [];
49
+ const outputProperties = new Map();
50
+ for (const member of classNode.members) {
51
+ if (!ts.isPropertyDeclaration(member) || !ts.isIdentifier(member.name)) {
52
+ continue;
53
+ }
54
+ // Check for @Output() decorators
55
+ const decorators = ts.getDecorators(member);
56
+ if (decorators) {
57
+ for (const decorator of decorators) {
58
+ if (ts.isCallExpression(decorator.expression) &&
59
+ ts.isIdentifier(decorator.expression.expression) &&
60
+ decorator.expression.expression.text === 'Output') {
61
+ const name = member.name.text;
62
+ outputProperties.set(name, member);
63
+ }
64
+ }
65
+ }
66
+ if (!member.initializer || !ts.isCallExpression(member.initializer)) {
67
+ continue;
68
+ }
69
+ const call = member.initializer;
70
+ let identifier = null;
71
+ if (ts.isIdentifier(call.expression)) {
72
+ identifier = call.expression;
73
+ }
74
+ else if (ts.isPropertyAccessExpression(call.expression)) {
75
+ let current = call.expression;
76
+ while (ts.isPropertyAccessExpression(current)) {
77
+ if (ts.isIdentifier(current.name) && current.name.text === 'model') {
78
+ identifier = current.name;
79
+ break;
80
+ }
81
+ current = current.expression;
82
+ }
83
+ if (!identifier && ts.isIdentifier(current) && current.text === 'model') {
84
+ identifier = current;
85
+ }
86
+ }
87
+ if (!identifier)
88
+ continue;
89
+ const imp = imports.getImportOfIdentifier(typeChecker, identifier);
90
+ if (!imp || imp.importModule !== '@angular/core')
91
+ continue;
92
+ if (imp.name === 'model') {
93
+ modelProperties.push(member);
94
+ }
95
+ else if (imp.name === 'output') {
96
+ const name = member.name.text;
97
+ outputProperties.set(name, member);
98
+ }
99
+ }
100
+ for (const modelProp of modelProperties) {
101
+ const modelName = modelProp.name.text;
102
+ const expectedOutputName = `${modelName}Change`;
103
+ if (outputProperties.has(expectedOutputName)) {
104
+ const update = this.migrateModelProperty(modelProp, importManager, sourceFile);
105
+ replacements.push(new project_paths.Replacement(project_paths.projectFile(sourceFile, info), update));
106
+ }
107
+ }
108
+ }
109
+ migrateModelProperty(modelProp, importManager, sourceFile) {
110
+ const modelName = modelProp.name.text;
111
+ const call = modelProp.initializer;
112
+ const isRequired = ts.isPropertyAccessExpression(call.expression) && call.expression.name.text === 'required';
113
+ const typeArgs = call.typeArguments
114
+ ? `<${call.typeArguments.map((t) => t.getText()).join(', ')}>`
115
+ : '';
116
+ // Use input and linkedSignal
117
+ importManager.addImport({
118
+ exportModuleSpecifier: '@angular/core',
119
+ exportSymbolName: 'input',
120
+ requestedFile: sourceFile,
121
+ });
122
+ importManager.addImport({
123
+ exportModuleSpecifier: '@angular/core',
124
+ exportSymbolName: 'linkedSignal',
125
+ requestedFile: sourceFile,
126
+ });
127
+ const inputName = `${modelName}Input`;
128
+ const initialValue = isRequired ? undefined : (call.arguments[0]?.getText() ?? 'undefined');
129
+ const optionsNode = isRequired ? call.arguments[0] : call.arguments[1];
130
+ const aliasProperty = `alias: '${modelName}'`;
131
+ let inputArgs;
132
+ if (!optionsNode) {
133
+ inputArgs = `{${aliasProperty}}`;
134
+ }
135
+ else if (ts.isObjectLiteralExpression(optionsNode)) {
136
+ const hasAlias = optionsNode.properties.some((p) => {
137
+ if (!ts.isPropertyAssignment(p) && !ts.isShorthandPropertyAssignment(p)) {
138
+ return false;
139
+ }
140
+ return (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) && p.name.text === 'alias';
141
+ });
142
+ if (hasAlias) {
143
+ inputArgs = optionsNode.getText();
144
+ }
145
+ else {
146
+ const optionsText = optionsNode.getText();
147
+ const inner = optionsText.slice(1, -1).trim();
148
+ inputArgs = `{${aliasProperty}${inner ? `, ${inner}` : ''}}`;
149
+ }
150
+ }
151
+ else {
152
+ inputArgs = `{${aliasProperty}, ...${optionsNode.getText()}}`;
153
+ }
154
+ if (initialValue !== undefined) {
155
+ inputArgs = `${initialValue}, ${inputArgs}`;
156
+ }
157
+ const modifiers = modelProp.modifiers
158
+ ? modelProp.modifiers.map((m) => m.getText()).join(' ') + ' '
159
+ : '';
160
+ // Detect indentation
161
+ const { character } = sourceFile.getLineAndCharacterOfPosition(modelProp.getStart());
162
+ const indent = sourceFile.text.substring(modelProp.getStart() - character, modelProp.getStart());
163
+ const inputCall = isRequired ? 'input.required' : 'input';
164
+ const newContent = `${modifiers}${inputName} = ${inputCall}${typeArgs}(${inputArgs});\n${indent}${modifiers}${modelName} = linkedSignal(this.${inputName});`;
165
+ return new project_paths.TextUpdate({
166
+ position: modelProp.getStart(),
167
+ end: modelProp.getEnd(),
168
+ toInsert: newContent,
169
+ });
170
+ }
171
+ async combine(unitA, unitB) {
172
+ return project_paths.confirmAsSerializable({
173
+ replacements: [...unitA.replacements, ...unitB.replacements],
174
+ });
175
+ }
176
+ async globalMeta(combinedData) {
177
+ return project_paths.confirmAsSerializable({
178
+ replacements: combinedData.replacements,
179
+ });
180
+ }
181
+ async migrate(globalData) {
182
+ return project_paths.confirmAsSerializable({
183
+ replacements: globalData.replacements,
184
+ });
185
+ }
186
+ async stats(globalMetadata) {
187
+ return project_paths.confirmAsSerializable({});
188
+ }
189
+ }
190
+
191
+ function migrate(options) {
192
+ return async (tree, context) => {
193
+ await project_paths.runMigrationInDevkit({
194
+ tree,
195
+ getMigration: (fs) => new ModelOutputMigration(),
196
+ });
197
+ };
198
+ }
199
+
200
+ exports.migrate = migrate;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -13,7 +13,7 @@ require('node:path');
13
13
  var project_paths = require('./project_paths-D2V-Uh2L.cjs');
14
14
  var compiler = require('@angular/compiler');
15
15
  var apply_import_manager = require('./apply_import_manager-CxA_YYgB.cjs');
16
- var index = require('./index-DADA7AvC.cjs');
16
+ var index = require('./index-DxFMpcXS.cjs');
17
17
  require('@angular-devkit/core');
18
18
  require('node:path/posix');
19
19
  require('@angular-devkit/schematics');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v22.0.0-next.9
3
+ * @license Angular v22.0.0-rc.0
4
4
  * (c) 2010-2026 Google LLC. https://angular.dev/
5
5
  * License: MIT
6
6
  */