@angular/core 20.2.0-rc.1 → 20.2.1

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 (69) hide show
  1. package/api.d.d.ts +1 -1
  2. package/chrome_dev_tools_performance.d.d.ts +1 -1
  3. package/discovery.d.d.ts +1 -1
  4. package/event_dispatcher.d.d.ts +1 -1
  5. package/fesm2022/attribute.mjs +1 -1
  6. package/fesm2022/attribute.mjs.map +1 -1
  7. package/fesm2022/core.mjs +4 -4
  8. package/fesm2022/core.mjs.map +1 -1
  9. package/fesm2022/debug_node.mjs +142 -82
  10. package/fesm2022/debug_node.mjs.map +1 -1
  11. package/fesm2022/not_found.mjs +1 -1
  12. package/fesm2022/not_found.mjs.map +1 -1
  13. package/fesm2022/primitives/di.mjs +1 -1
  14. package/fesm2022/primitives/di.mjs.map +1 -1
  15. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  16. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  17. package/fesm2022/primitives/signals.mjs +1 -1
  18. package/fesm2022/primitives/signals.mjs.map +1 -1
  19. package/fesm2022/resource.mjs +1 -1
  20. package/fesm2022/resource.mjs.map +1 -1
  21. package/fesm2022/root_effect_scheduler.mjs +1 -1
  22. package/fesm2022/root_effect_scheduler.mjs.map +1 -1
  23. package/fesm2022/rxjs-interop.mjs +1 -1
  24. package/fesm2022/rxjs-interop.mjs.map +1 -1
  25. package/fesm2022/signal.mjs +1 -1
  26. package/fesm2022/signal.mjs.map +1 -1
  27. package/fesm2022/testing.mjs +1 -1
  28. package/fesm2022/testing.mjs.map +1 -1
  29. package/fesm2022/untracked.mjs +1 -1
  30. package/fesm2022/untracked.mjs.map +1 -1
  31. package/fesm2022/weak_ref.mjs +1 -1
  32. package/fesm2022/weak_ref.mjs.map +1 -1
  33. package/graph.d.d.ts +1 -1
  34. package/index.d.ts +5 -5
  35. package/package.json +2 -2
  36. package/primitives/di/index.d.ts +1 -1
  37. package/primitives/event-dispatch/index.d.ts +1 -1
  38. package/primitives/signals/index.d.ts +1 -1
  39. package/rxjs-interop/index.d.ts +1 -1
  40. package/schematics/bundles/{apply_import_manager-OJAv7nyR.cjs → apply_import_manager-BvwNQhfG.cjs} +3 -3
  41. package/schematics/bundles/cleanup-unused-imports.cjs +5 -5
  42. package/schematics/bundles/{compiler_host-GMENszSm.cjs → compiler_host-DbXQvYKt.cjs} +2 -2
  43. package/schematics/bundles/control-flow-migration.cjs +3 -3
  44. package/schematics/bundles/document-core.cjs +5 -5
  45. package/schematics/bundles/imports-CIX-JgAN.cjs +1 -1
  46. package/schematics/bundles/{index-CvCDOy8a.cjs → index-Bcv0dPD8.cjs} +15 -14
  47. package/schematics/bundles/{index-C0gVsyDQ.cjs → index-Bphk20D_.cjs} +4 -4
  48. package/schematics/bundles/inject-flags.cjs +5 -5
  49. package/schematics/bundles/inject-migration.cjs +3 -3
  50. package/schematics/bundles/leading_space-D9nQ8UQC.cjs +1 -1
  51. package/schematics/bundles/{migrate_ts_type_references-ByPRdLHL.cjs → migrate_ts_type_references-xcaijJqF.cjs} +5 -5
  52. package/schematics/bundles/ng_decorators-B5HCqr20.cjs +1 -1
  53. package/schematics/bundles/nodes-B16H9JUd.cjs +1 -1
  54. package/schematics/bundles/output-migration.cjs +6 -6
  55. package/schematics/bundles/{project_paths-BfWTWKz0.cjs → project_paths-BaK5P5a5.cjs} +3 -3
  56. package/schematics/bundles/{project_tsconfig_paths-Bhn4jDr1.cjs → project_tsconfig_paths-COqholMT.cjs} +183 -18
  57. package/schematics/bundles/property_name-BBwFuqMe.cjs +1 -1
  58. package/schematics/bundles/route-lazy-loading.cjs +3 -3
  59. package/schematics/bundles/router-current-navigation.cjs +4 -4
  60. package/schematics/bundles/self-closing-tags-migration.cjs +4 -4
  61. package/schematics/bundles/signal-input-migration.cjs +7 -7
  62. package/schematics/bundles/signal-queries-migration.cjs +7 -7
  63. package/schematics/bundles/signals.cjs +7 -7
  64. package/schematics/bundles/standalone-migration.cjs +4 -4
  65. package/schematics/bundles/symbol-VPWguRxr.cjs +1 -1
  66. package/schematics/bundles/test-bed-get.cjs +4 -4
  67. package/signal.d.d.ts +1 -1
  68. package/testing/index.d.ts +2 -2
  69. package/weak_ref.d.d.ts +1 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.2.0-rc.1
3
+ * @license Angular v20.2.1
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -23108,6 +23108,11 @@ function propagateI18nBlocksToTemplates(unit, subTemplateIndex) {
23108
23108
  subTemplateIndex = propagateI18nBlocksForView(unit.job.views.get(op.emptyView), i18nBlock, op.emptyI18nPlaceholder, subTemplateIndex);
23109
23109
  }
23110
23110
  break;
23111
+ case OpKind.Projection:
23112
+ if (op.fallbackView !== null) {
23113
+ subTemplateIndex = propagateI18nBlocksForView(unit.job.views.get(op.fallbackView), i18nBlock, op.fallbackViewI18nPlaceholder, subTemplateIndex);
23114
+ }
23115
+ break;
23111
23116
  }
23112
23117
  }
23113
23118
  return subTemplateIndex;
@@ -24691,6 +24696,21 @@ function resolvePlaceholdersForView(job, unit, i18nContexts, elements, pendingSt
24691
24696
  // Clear out the pending structural directive now that its been accounted for.
24692
24697
  pendingStructuralDirective = undefined;
24693
24698
  }
24699
+ if (op.fallbackView !== null) {
24700
+ const view = job.views.get(op.fallbackView);
24701
+ if (op.fallbackViewI18nPlaceholder === undefined) {
24702
+ resolvePlaceholdersForView(job, view, i18nContexts, elements);
24703
+ }
24704
+ else {
24705
+ if (currentOps === null) {
24706
+ throw Error('i18n tag placeholder should only occur inside an i18n block');
24707
+ }
24708
+ recordTemplateStart(job, view, op.handle.slot, op.fallbackViewI18nPlaceholder, currentOps.i18nContext, currentOps.i18nBlock, pendingStructuralDirective);
24709
+ resolvePlaceholdersForView(job, view, i18nContexts, elements);
24710
+ recordTemplateClose(job, view, op.handle.slot, op.fallbackViewI18nPlaceholder, currentOps.i18nContext, currentOps.i18nBlock, pendingStructuralDirective);
24711
+ pendingStructuralDirective = undefined;
24712
+ }
24713
+ }
24694
24714
  break;
24695
24715
  case OpKind.ConditionalCreate:
24696
24716
  case OpKind.ConditionalBranchCreate:
@@ -25347,8 +25367,13 @@ function hasPipe(root) {
25347
25367
  *
25348
25368
  * 1. Unary operators in the base of an exponentiation expression. For example, `-2 ** 3` is not
25349
25369
  * valid JavaScript, but `(-2) ** 3` is.
25370
+ *
25350
25371
  * 2. When mixing nullish coalescing (`??`) and logical and/or operators (`&&`, `||`), we need
25351
25372
  * parentheses. For example, `a ?? b && c` is not valid JavaScript, but `a ?? (b && c)` is.
25373
+ * Note: Because of the outcome of https://github.com/microsoft/TypeScript/issues/62307
25374
+ * We need (for now) to keep parentheses around the `??` operator when it is used with and/or operators.
25375
+ * For example, `a ?? b && c` is not valid JavaScript, but `(a ?? b) && c` is.
25376
+ *
25352
25377
  * 3. Ternary expression used as an operand for nullish coalescing. Typescript generates incorrect
25353
25378
  * code if the parentheses are missing. For example when `(a ? b : c) ?? d` is translated to
25354
25379
  * typescript AST, the parentheses node is removed, and then the remaining AST is printed, it
@@ -25371,6 +25396,11 @@ function stripNonrequiredParentheses(job) {
25371
25396
  case BinaryOperator.NullishCoalesce:
25372
25397
  checkNullishCoalescingParens(expr, requiredParens);
25373
25398
  break;
25399
+ // these 2 cases can be dropped if the regression introduced in 5.9.2 is fixed
25400
+ // see https://github.com/microsoft/TypeScript/issues/62307
25401
+ case BinaryOperator.And:
25402
+ case BinaryOperator.Or:
25403
+ checkAndOrParens(expr, requiredParens);
25374
25404
  }
25375
25405
  }
25376
25406
  });
@@ -25403,6 +25433,13 @@ function checkNullishCoalescingParens(expr, requiredParens) {
25403
25433
  requiredParens.add(expr.rhs);
25404
25434
  }
25405
25435
  }
25436
+ function checkAndOrParens(expr, requiredParens) {
25437
+ if (expr.lhs instanceof ParenthesizedExpr &&
25438
+ expr.lhs.expr instanceof BinaryOperatorExpr &&
25439
+ expr.lhs.expr.operator === BinaryOperator.NullishCoalesce) {
25440
+ requiredParens.add(expr.lhs);
25441
+ }
25442
+ }
25406
25443
  function isLogicalAndOr(expr) {
25407
25444
  return (expr instanceof BinaryOperatorExpr &&
25408
25445
  (expr.operator === BinaryOperator.And || expr.operator === BinaryOperator.Or));
@@ -26540,10 +26577,16 @@ function ingestHostAttribute(job, name, value, securityContexts) {
26540
26577
  job.root.update.push(attrBinding);
26541
26578
  }
26542
26579
  function ingestHostEvent(job, event) {
26543
- const [phase, target] = event.type !== exports.ParsedEventType.LegacyAnimation
26544
- ? [null, event.targetOrPhase]
26545
- : [event.targetOrPhase, null];
26546
- const eventBinding = createListenerOp(job.root.xref, new SlotHandle(), event.name, null, makeListenerHandlerOps(job.root, event.handler, event.handlerSpan), phase, target, true, event.sourceSpan);
26580
+ let eventBinding;
26581
+ if (event.type === exports.ParsedEventType.Animation) {
26582
+ eventBinding = createAnimationListenerOp(job.root.xref, new SlotHandle(), event.name, null, makeListenerHandlerOps(job.root, event.handler, event.handlerSpan), event.name.endsWith('enter') ? "enter" /* ir.AnimationKind.ENTER */ : "leave" /* ir.AnimationKind.LEAVE */, event.targetOrPhase, true, event.sourceSpan);
26583
+ }
26584
+ else {
26585
+ const [phase, target] = event.type !== exports.ParsedEventType.LegacyAnimation
26586
+ ? [null, event.targetOrPhase]
26587
+ : [event.targetOrPhase, null];
26588
+ eventBinding = createListenerOp(job.root.xref, new SlotHandle(), event.name, null, makeListenerHandlerOps(job.root, event.handler, event.handlerSpan), phase, target, true, event.sourceSpan);
26589
+ }
26547
26590
  job.root.create.push(eventBinding);
26548
26591
  }
26549
26592
  /**
@@ -29598,11 +29641,11 @@ class HtmlAstToIvyAst {
29598
29641
  const templateKey = normalizedName.substring(TEMPLATE_ATTR_PREFIX.length);
29599
29642
  const parsedVariables = [];
29600
29643
  const absoluteValueOffset = attribute.valueSpan
29601
- ? attribute.valueSpan.start.offset
29644
+ ? attribute.valueSpan.fullStart.offset
29602
29645
  : // If there is no value span the attribute does not have a value, like `attr` in
29603
29646
  //`<div attr></div>`. In this case, point to one character beyond the last character of
29604
29647
  // the attribute name.
29605
- attribute.sourceSpan.start.offset + attribute.name.length;
29648
+ attribute.sourceSpan.fullStart.offset + attribute.name.length;
29606
29649
  this.bindingParser.parseInlineTemplateBinding(templateKey, templateValue, attribute.sourceSpan, absoluteValueOffset, [], templateParsedProperties, parsedVariables, true /* isIvyAst */);
29607
29650
  templateVariables.push(...parsedVariables.map((v) => new Variable(v.name, v.value, v.sourceSpan, v.keySpan, v.valueSpan)));
29608
29651
  }
@@ -32789,7 +32832,7 @@ function isAttrNode(ast) {
32789
32832
  * @description
32790
32833
  * Entry point for all public APIs of the compiler package.
32791
32834
  */
32792
- new Version('20.2.0-rc.1');
32835
+ new Version('20.2.1');
32793
32836
 
32794
32837
  //////////////////////////////////////
32795
32838
  // THIS FILE HAS GLOBAL SIDE EFFECT //
@@ -33824,7 +33867,7 @@ class NodeJSPathManipulation {
33824
33867
  // G3-ESM-MARKER: G3 uses CommonJS, but externally everything in ESM.
33825
33868
  // CommonJS/ESM interop for determining the current file name and containing dir.
33826
33869
  const isCommonJS = typeof __filename !== 'undefined';
33827
- const currentFileUrl = isCommonJS ? null : (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('project_tsconfig_paths-Bhn4jDr1.cjs', document.baseURI).href));
33870
+ const currentFileUrl = isCommonJS ? null : (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('project_tsconfig_paths-COqholMT.cjs', document.baseURI).href));
33828
33871
  // Note, when this code loads in the browser, `url` may be an empty `{}` due to the Closure shims.
33829
33872
  const currentFileName = isCommonJS
33830
33873
  ? __filename
@@ -41166,6 +41209,46 @@ function isDirectiveDeclaration(node) {
41166
41209
  ts.isVariableDeclaration(node.parent) &&
41167
41210
  hasExpressionIdentifier(sourceFile, node, ExpressionIdentifier.DIRECTIVE));
41168
41211
  }
41212
+ /**
41213
+ * Check if the lastSymbol is an alias of the firstSymbol. For example:
41214
+ *
41215
+ * The NewBarComponent is an alias of BarComponent.
41216
+ *
41217
+ * But the NotAliasBarComponent is not an alias of BarComponent, because
41218
+ * the NotAliasBarComponent is a new variable.
41219
+ *
41220
+ * This should work for most cases.
41221
+ *
41222
+ * https://github.com/microsoft/TypeScript/blob/9e20e032effad965567d4a1e1c30d5433b0a3332/src/compiler/checker.ts#L3638-L3652
41223
+ *
41224
+ * ```
41225
+ * // a.ts
41226
+ * export class BarComponent {};
41227
+ * // b.ts
41228
+ * export {BarComponent as NewBarComponent} from "./a";
41229
+ * // c.ts
41230
+ * import {BarComponent} from "./a"
41231
+ * const NotAliasBarComponent = BarComponent;
41232
+ * export {NotAliasBarComponent};
41233
+ * ```
41234
+ */
41235
+ function isSymbolAliasOf(firstSymbol, lastSymbol, typeChecker) {
41236
+ let currentSymbol = lastSymbol;
41237
+ const seenSymbol = new Set();
41238
+ while (firstSymbol !== currentSymbol &&
41239
+ currentSymbol !== undefined &&
41240
+ currentSymbol.flags & ts.SymbolFlags.Alias) {
41241
+ if (seenSymbol.has(currentSymbol)) {
41242
+ break;
41243
+ }
41244
+ seenSymbol.add(currentSymbol);
41245
+ currentSymbol = typeChecker.getImmediateAliasedSymbol(currentSymbol);
41246
+ if (currentSymbol === firstSymbol) {
41247
+ return true;
41248
+ }
41249
+ }
41250
+ return false;
41251
+ }
41169
41252
 
41170
41253
  const NgOriginalFile = Symbol('NgOriginalFile');
41171
41254
  exports.UpdateMode = void 0;
@@ -50038,11 +50121,11 @@ class TemplateTypeCheckerImpl {
50038
50121
  }
50039
50122
  for (const directiveDecl of directiveDecls) {
50040
50123
  const cachedCompletionEntryInfos = resultingDirectives.get(directiveDecl.ref.node)?.tsCompletionEntryInfos ?? [];
50041
- cachedCompletionEntryInfos.push({
50124
+ appendOrReplaceTsEntryInfo(cachedCompletionEntryInfos, {
50042
50125
  tsCompletionEntryData: data,
50043
50126
  tsCompletionEntrySymbolFileName: symbolFileName,
50044
50127
  tsCompletionEntrySymbolName: symbolName,
50045
- });
50128
+ }, this.programDriver.getProgram());
50046
50129
  if (resultingDirectives.has(directiveDecl.ref.node)) {
50047
50130
  const directiveInfo = resultingDirectives.get(directiveDecl.ref.node);
50048
50131
  resultingDirectives.set(directiveDecl.ref.node, {
@@ -50216,29 +50299,30 @@ class TemplateTypeCheckerImpl {
50216
50299
  * When providing the code action for the directive. All the imports will show for the developer to choose.
50217
50300
  */
50218
50301
  let highestImportPriority = -1;
50219
- const collectImports = (emit, moduleSpecifier) => {
50302
+ const collectImports = (emit, moduleSpecifierDetail) => {
50220
50303
  if (emit === null) {
50221
50304
  return;
50222
50305
  }
50223
50306
  imports.push({
50224
50307
  ...emit,
50225
- moduleSpecifier: moduleSpecifier ?? emit.moduleSpecifier,
50308
+ moduleSpecifier: moduleSpecifierDetail?.moduleSpecifier ?? emit.moduleSpecifier,
50309
+ symbolName: moduleSpecifierDetail?.exportName ?? emit.symbolName,
50226
50310
  });
50227
- if (moduleSpecifier !== undefined && highestImportPriority === -1) {
50311
+ if (moduleSpecifierDetail !== null && highestImportPriority === -1) {
50228
50312
  highestImportPriority = imports.length - 1;
50229
50313
  }
50230
50314
  };
50231
50315
  if (meta.isStandalone || importMode === exports.PotentialImportMode.ForceDirect) {
50232
50316
  const emitted = this.emit(exports.PotentialImportKind.Standalone, toImport, inContext);
50233
- const moduleSpecifier = potentialDirectiveModuleSpecifierResolver?.resolve(toImport, inContext);
50234
- collectImports(emitted, moduleSpecifier);
50317
+ const moduleSpecifierDetail = potentialDirectiveModuleSpecifierResolver?.resolve(toImport, inContext) ?? null;
50318
+ collectImports(emitted, moduleSpecifierDetail);
50235
50319
  }
50236
50320
  const exportingNgModules = this.ngModuleIndex.getNgModulesExporting(meta.ref.node);
50237
50321
  if (exportingNgModules !== null) {
50238
50322
  for (const exporter of exportingNgModules) {
50239
50323
  const emittedRef = this.emit(exports.PotentialImportKind.NgModule, exporter, inContext);
50240
- const moduleSpecifier = potentialDirectiveModuleSpecifierResolver?.resolve(exporter, inContext);
50241
- collectImports(emittedRef, moduleSpecifier);
50324
+ const moduleSpecifierDetail = potentialDirectiveModuleSpecifierResolver?.resolve(exporter, inContext) ?? null;
50325
+ collectImports(emittedRef, moduleSpecifierDetail);
50242
50326
  }
50243
50327
  }
50244
50328
  // move the import with module specifier from the tsLs to top in the imports array
@@ -50574,6 +50658,87 @@ function getTheElementTagDeprecatedSuggestionDiagnostics(shimPath, program, file
50574
50658
  function isDeprecatedDiagnostics(diag) {
50575
50659
  return diag.reportsDeprecated !== undefined;
50576
50660
  }
50661
+ /**
50662
+ * Append the ts completion entry into the array only when the new entry's directive
50663
+ * doesn't exist in the array.
50664
+ *
50665
+ * If the new entry's directive already exists, and the entry's symbol is the alias of
50666
+ * the existing entry, the new entry will replace the existing entry.
50667
+ *
50668
+ */
50669
+ function appendOrReplaceTsEntryInfo(tsEntryInfos, newTsEntryInfo, program) {
50670
+ const typeChecker = program.getTypeChecker();
50671
+ const newTsEntryInfoSymbol = getSymbolFromTsEntryInfo(newTsEntryInfo, program);
50672
+ if (newTsEntryInfoSymbol === null) {
50673
+ return;
50674
+ }
50675
+ // Find the index of the first entry that has a matching type.
50676
+ const matchedEntryIndex = tsEntryInfos.findIndex((currentTsEntryInfo) => {
50677
+ const currentTsEntrySymbol = getSymbolFromTsEntryInfo(currentTsEntryInfo, program);
50678
+ if (currentTsEntrySymbol === null) {
50679
+ return false;
50680
+ }
50681
+ return isSymbolTypeMatch(currentTsEntrySymbol, newTsEntryInfoSymbol, typeChecker);
50682
+ });
50683
+ if (matchedEntryIndex === -1) {
50684
+ // No entry with a matching type was found, so append the new entry.
50685
+ tsEntryInfos.push(newTsEntryInfo);
50686
+ return;
50687
+ }
50688
+ // An entry with a matching type was found at matchedEntryIndex.
50689
+ const matchedEntry = tsEntryInfos[matchedEntryIndex];
50690
+ const matchedEntrySymbol = getSymbolFromTsEntryInfo(matchedEntry, program);
50691
+ if (matchedEntrySymbol === null) {
50692
+ // Should not happen based on the findIndex condition, but check defensively.
50693
+ return;
50694
+ }
50695
+ // Check if the `matchedEntrySymbol` is an alias of the `newTsEntryInfoSymbol`.
50696
+ if (isSymbolAliasOf(matchedEntrySymbol, newTsEntryInfoSymbol, typeChecker)) {
50697
+ // The first type-matching entry is an alias, so replace it.
50698
+ tsEntryInfos[matchedEntryIndex] = newTsEntryInfo;
50699
+ return;
50700
+ }
50701
+ // The new entry's symbol is an alias of the existing entry's symbol.
50702
+ // In this case, we prefer to keep the existing entry that was found first
50703
+ // and do not replace it.
50704
+ return;
50705
+ }
50706
+ function getSymbolFromTsEntryInfo(tsInfo, program) {
50707
+ const typeChecker = program.getTypeChecker();
50708
+ const sf = program.getSourceFile(tsInfo.tsCompletionEntrySymbolFileName);
50709
+ if (sf === undefined) {
50710
+ return null;
50711
+ }
50712
+ const sfSymbol = typeChecker.getSymbolAtLocation(sf);
50713
+ if (sfSymbol === undefined) {
50714
+ return null;
50715
+ }
50716
+ return (typeChecker.tryGetMemberInModuleExports(tsInfo.tsCompletionEntrySymbolName, sfSymbol) ?? null);
50717
+ }
50718
+ function getFirstTypeDeclarationOfSymbol(symbol, typeChecker) {
50719
+ const type = typeChecker.getTypeOfSymbol(symbol);
50720
+ return type.getSymbol()?.declarations?.[0];
50721
+ }
50722
+ /**
50723
+ * Check if the two symbols come from the same type node. For example:
50724
+ *
50725
+ * The `NewBarComponent`'s type node is the `BarComponent`.
50726
+ *
50727
+ * ```
50728
+ * // a.ts
50729
+ * export class BarComponent
50730
+ *
50731
+ * // b.ts
50732
+ * import {BarComponent} from "./a"
50733
+ * const NewBarComponent = BarComponent;
50734
+ * export {NewBarComponent}
50735
+ * ```
50736
+ */
50737
+ function isSymbolTypeMatch(first, last, typeChecker) {
50738
+ const firstTypeNode = getFirstTypeDeclarationOfSymbol(first, typeChecker);
50739
+ const lastTypeNode = getFirstTypeDeclarationOfSymbol(last, typeChecker);
50740
+ return firstTypeNode === lastTypeNode && firstTypeNode !== undefined;
50741
+ }
50577
50742
 
50578
50743
  /**
50579
50744
  * Gets all tsconfig paths from a CLI project by reading the workspace configuration
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.2.0-rc.1
3
+ * @license Angular v20.2.1
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.2.0-rc.1
3
+ * @license Angular v20.2.1
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -9,8 +9,8 @@
9
9
  var schematics = require('@angular-devkit/schematics');
10
10
  var fs = require('fs');
11
11
  var p = require('path');
12
- var compiler_host = require('./compiler_host-GMENszSm.cjs');
13
- var project_tsconfig_paths = require('./project_tsconfig_paths-Bhn4jDr1.cjs');
12
+ var compiler_host = require('./compiler_host-DbXQvYKt.cjs');
13
+ var project_tsconfig_paths = require('./project_tsconfig_paths-COqholMT.cjs');
14
14
  var ts = require('typescript');
15
15
  var property_name = require('./property_name-BBwFuqMe.cjs');
16
16
  require('os');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.2.0-rc.1
3
+ * @license Angular v20.2.1
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,11 +8,11 @@
8
8
 
9
9
  var ts = require('typescript');
10
10
  require('os');
11
- require('./project_tsconfig_paths-Bhn4jDr1.cjs');
12
- require('./index-CvCDOy8a.cjs');
11
+ require('./project_tsconfig_paths-COqholMT.cjs');
12
+ require('./index-Bcv0dPD8.cjs');
13
13
  require('path');
14
14
  require('node:path');
15
- var project_paths = require('./project_paths-BfWTWKz0.cjs');
15
+ var project_paths = require('./project_paths-BaK5P5a5.cjs');
16
16
  var imports = require('./imports-CIX-JgAN.cjs');
17
17
  var symbol = require('./symbol-VPWguRxr.cjs');
18
18
  require('@angular-devkit/core');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.2.0-rc.1
3
+ * @license Angular v20.2.1
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,11 +8,11 @@
8
8
 
9
9
  var ts = require('typescript');
10
10
  require('os');
11
- var project_tsconfig_paths = require('./project_tsconfig_paths-Bhn4jDr1.cjs');
12
- require('./index-CvCDOy8a.cjs');
11
+ var project_tsconfig_paths = require('./project_tsconfig_paths-COqholMT.cjs');
12
+ require('./index-Bcv0dPD8.cjs');
13
13
  require('path');
14
14
  require('node:path');
15
- var project_paths = require('./project_paths-BfWTWKz0.cjs');
15
+ var project_paths = require('./project_paths-BaK5P5a5.cjs');
16
16
  var ng_decorators = require('./ng_decorators-B5HCqr20.cjs');
17
17
  var property_name = require('./property_name-BBwFuqMe.cjs');
18
18
  require('@angular-devkit/core');
@@ -1,22 +1,22 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.2.0-rc.1
3
+ * @license Angular v20.2.1
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-ByPRdLHL.cjs');
9
+ var migrate_ts_type_references = require('./migrate_ts_type_references-xcaijJqF.cjs');
10
10
  var ts = require('typescript');
11
11
  require('os');
12
- var project_tsconfig_paths = require('./project_tsconfig_paths-Bhn4jDr1.cjs');
13
- var index$1 = require('./index-CvCDOy8a.cjs');
12
+ var project_tsconfig_paths = require('./project_tsconfig_paths-COqholMT.cjs');
13
+ var index$1 = require('./index-Bcv0dPD8.cjs');
14
14
  require('path');
15
15
  require('node:path');
16
- var project_paths = require('./project_paths-BfWTWKz0.cjs');
17
- var index = require('./index-C0gVsyDQ.cjs');
16
+ var project_paths = require('./project_paths-BaK5P5a5.cjs');
17
+ var index = require('./index-Bphk20D_.cjs');
18
18
  var assert = require('assert');
19
- var apply_import_manager = require('./apply_import_manager-OJAv7nyR.cjs');
19
+ var apply_import_manager = require('./apply_import_manager-BvwNQhfG.cjs');
20
20
  require('@angular-devkit/core');
21
21
  require('node:path/posix');
22
22
  require('./leading_space-D9nQ8UQC.cjs');
@@ -1,22 +1,22 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.2.0-rc.1
3
+ * @license Angular v20.2.1
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
7
7
  'use strict';
8
8
 
9
- var project_tsconfig_paths = require('./project_tsconfig_paths-Bhn4jDr1.cjs');
9
+ var project_tsconfig_paths = require('./project_tsconfig_paths-COqholMT.cjs');
10
10
  var ts = require('typescript');
11
11
  require('os');
12
- var index$1 = require('./index-CvCDOy8a.cjs');
12
+ var index$1 = require('./index-Bcv0dPD8.cjs');
13
13
  require('path');
14
14
  require('node:path');
15
- var project_paths = require('./project_paths-BfWTWKz0.cjs');
16
- var apply_import_manager = require('./apply_import_manager-OJAv7nyR.cjs');
17
- var migrate_ts_type_references = require('./migrate_ts_type_references-ByPRdLHL.cjs');
15
+ var project_paths = require('./project_paths-BaK5P5a5.cjs');
16
+ var apply_import_manager = require('./apply_import_manager-BvwNQhfG.cjs');
17
+ var migrate_ts_type_references = require('./migrate_ts_type_references-xcaijJqF.cjs');
18
18
  var assert = require('assert');
19
- var index = require('./index-C0gVsyDQ.cjs');
19
+ var index = require('./index-Bphk20D_.cjs');
20
20
  require('@angular-devkit/core');
21
21
  require('node:path/posix');
22
22
  require('fs');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.2.0-rc.1
3
+ * @license Angular v20.2.1
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -10,7 +10,7 @@ var schematics = require('@angular-devkit/schematics');
10
10
  var signalQueriesMigration = require('./signal-queries-migration.cjs');
11
11
  var signalInputMigration = require('./signal-input-migration.cjs');
12
12
  var outputMigration = require('./output-migration.cjs');
13
- require('./project_tsconfig_paths-Bhn4jDr1.cjs');
13
+ require('./project_tsconfig_paths-COqholMT.cjs');
14
14
  require('typescript');
15
15
  require('os');
16
16
  require('fs');
@@ -18,14 +18,14 @@ require('module');
18
18
  require('path');
19
19
  require('url');
20
20
  require('@angular-devkit/core');
21
- require('./index-CvCDOy8a.cjs');
21
+ require('./index-Bcv0dPD8.cjs');
22
22
  require('node:path');
23
- require('./project_paths-BfWTWKz0.cjs');
23
+ require('./project_paths-BaK5P5a5.cjs');
24
24
  require('node:path/posix');
25
- require('./apply_import_manager-OJAv7nyR.cjs');
26
- require('./migrate_ts_type_references-ByPRdLHL.cjs');
25
+ require('./apply_import_manager-BvwNQhfG.cjs');
26
+ require('./migrate_ts_type_references-xcaijJqF.cjs');
27
27
  require('assert');
28
- require('./index-C0gVsyDQ.cjs');
28
+ require('./index-Bphk20D_.cjs');
29
29
  require('./leading_space-D9nQ8UQC.cjs');
30
30
 
31
31
  function migrate(options) {
@@ -1,18 +1,18 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.2.0-rc.1
3
+ * @license Angular v20.2.1
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-CvCDOy8a.cjs');
10
+ var index = require('./index-Bcv0dPD8.cjs');
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-GMENszSm.cjs');
15
- var project_tsconfig_paths = require('./project_tsconfig_paths-Bhn4jDr1.cjs');
14
+ var compiler_host = require('./compiler_host-DbXQvYKt.cjs');
15
+ var project_tsconfig_paths = require('./project_tsconfig_paths-COqholMT.cjs');
16
16
  var ng_decorators = require('./ng_decorators-B5HCqr20.cjs');
17
17
  var nodes = require('./nodes-B16H9JUd.cjs');
18
18
  var symbol = require('./symbol-VPWguRxr.cjs');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.2.0-rc.1
3
+ * @license Angular v20.2.1
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.2.0-rc.1
3
+ * @license Angular v20.2.1
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,11 +8,11 @@
8
8
 
9
9
  var ts = require('typescript');
10
10
  require('os');
11
- require('./project_tsconfig_paths-Bhn4jDr1.cjs');
12
- require('./index-CvCDOy8a.cjs');
11
+ require('./project_tsconfig_paths-COqholMT.cjs');
12
+ require('./index-Bcv0dPD8.cjs');
13
13
  require('path');
14
14
  require('node:path');
15
- var project_paths = require('./project_paths-BfWTWKz0.cjs');
15
+ var project_paths = require('./project_paths-BaK5P5a5.cjs');
16
16
  var imports = require('./imports-CIX-JgAN.cjs');
17
17
  var symbol = require('./symbol-VPWguRxr.cjs');
18
18
  require('@angular-devkit/core');
package/signal.d.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v20.2.0-rc.1
2
+ * @license Angular v20.2.1
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v20.2.0-rc.1
2
+ * @license Angular v20.2.1
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -348,7 +348,7 @@ interface TestModuleMetadata {
348
348
  inferTagName?: boolean;
349
349
  /**
350
350
  * Whether animate.enter / animate.leave should trigger as normal or be disabled.
351
- * Defaults to `true`.
351
+ * Defaults to `false`.
352
352
  */
353
353
  animationsEnabled?: boolean;
354
354
  }
package/weak_ref.d.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v20.2.0-rc.1
2
+ * @license Angular v20.2.1
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */