@angular/core 20.3.1 → 20.3.3

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 (70) hide show
  1. package/api.d.d.ts +7 -4
  2. package/chrome_dev_tools_performance.d.d.ts +2 -2
  3. package/discovery.d.d.ts +7 -6
  4. package/effect.d.d.ts +2 -3
  5. package/event_dispatcher.d.d.ts +1 -1
  6. package/fesm2022/attribute.mjs +1 -1
  7. package/fesm2022/attribute.mjs.map +1 -1
  8. package/fesm2022/core.mjs +4 -4
  9. package/fesm2022/core.mjs.map +1 -1
  10. package/fesm2022/debug_node.mjs +31 -42
  11. package/fesm2022/debug_node.mjs.map +1 -1
  12. package/fesm2022/effect.mjs +3 -4
  13. package/fesm2022/effect.mjs.map +1 -1
  14. package/fesm2022/not_found.mjs +1 -1
  15. package/fesm2022/not_found.mjs.map +1 -1
  16. package/fesm2022/primitives/di.mjs +1 -1
  17. package/fesm2022/primitives/di.mjs.map +1 -1
  18. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  19. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  20. package/fesm2022/primitives/signals.mjs +138 -6
  21. package/fesm2022/primitives/signals.mjs.map +1 -1
  22. package/fesm2022/resource.mjs +5 -4
  23. package/fesm2022/resource.mjs.map +1 -1
  24. package/fesm2022/root_effect_scheduler.mjs +2 -2
  25. package/fesm2022/root_effect_scheduler.mjs.map +1 -1
  26. package/fesm2022/rxjs-interop.mjs +1 -1
  27. package/fesm2022/rxjs-interop.mjs.map +1 -1
  28. package/fesm2022/signal.mjs +8 -8
  29. package/fesm2022/signal.mjs.map +1 -1
  30. package/fesm2022/testing.mjs +1 -1
  31. package/fesm2022/testing.mjs.map +1 -1
  32. package/fesm2022/weak_ref.mjs +1 -1
  33. package/fesm2022/weak_ref.mjs.map +1 -1
  34. package/{graph.d.d.ts → formatter.d.d.ts} +14 -2
  35. package/index.d.ts +10 -8
  36. package/package.json +2 -2
  37. package/primitives/di/index.d.ts +1 -1
  38. package/primitives/event-dispatch/index.d.ts +1 -1
  39. package/primitives/signals/index.d.ts +3 -4
  40. package/rxjs-interop/index.d.ts +2 -2
  41. package/schematics/bundles/add-bootstrap-context-to-server-main.cjs +5 -5
  42. package/schematics/bundles/{apply_import_manager-C8vgfoJx.cjs → apply_import_manager-CUBvPp_2.cjs} +3 -3
  43. package/schematics/bundles/cleanup-unused-imports.cjs +5 -5
  44. package/schematics/bundles/{compiler_host-DC7Yquzy.cjs → compiler_host-DJHZ7M9N.cjs} +2 -2
  45. package/schematics/bundles/control-flow-migration.cjs +70 -38
  46. package/schematics/bundles/document-core.cjs +5 -5
  47. package/schematics/bundles/imports-CIX-JgAN.cjs +1 -1
  48. package/schematics/bundles/{index-B5lv9x1v.cjs → index-BZJ8bv9v.cjs} +50 -26
  49. package/schematics/bundles/{index-Bufm9_1r.cjs → index-DU_evmAi.cjs} +4 -4
  50. package/schematics/bundles/inject-flags.cjs +5 -5
  51. package/schematics/bundles/inject-migration.cjs +3 -3
  52. package/schematics/bundles/leading_space-D9nQ8UQC.cjs +1 -1
  53. package/schematics/bundles/{migrate_ts_type_references-Ctl6-8qO.cjs → migrate_ts_type_references-58gA72Ti.cjs} +5 -5
  54. package/schematics/bundles/ng_decorators-B5HCqr20.cjs +1 -1
  55. package/schematics/bundles/nodes-B16H9JUd.cjs +1 -1
  56. package/schematics/bundles/output-migration.cjs +6 -6
  57. package/schematics/bundles/{project_paths-CIUSEdn4.cjs → project_paths-DcM18127.cjs} +3 -3
  58. package/schematics/bundles/{project_tsconfig_paths-crm5NKE7.cjs → project_tsconfig_paths-Dqd0J7st.cjs} +50 -42
  59. package/schematics/bundles/property_name-BBwFuqMe.cjs +1 -1
  60. package/schematics/bundles/route-lazy-loading.cjs +3 -3
  61. package/schematics/bundles/router-current-navigation.cjs +4 -4
  62. package/schematics/bundles/self-closing-tags-migration.cjs +4 -4
  63. package/schematics/bundles/signal-input-migration.cjs +67 -8
  64. package/schematics/bundles/signal-queries-migration.cjs +7 -7
  65. package/schematics/bundles/signals.cjs +7 -7
  66. package/schematics/bundles/standalone-migration.cjs +70 -43
  67. package/schematics/bundles/symbol-VPWguRxr.cjs +1 -1
  68. package/schematics/bundles/test-bed-get.cjs +4 -4
  69. package/testing/index.d.ts +2 -2
  70. package/weak_ref.d.d.ts +1 -1
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.3.1
3
+ * @license Angular v20.3.3
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-crm5NKE7.cjs');
9
+ var project_tsconfig_paths = require('./project_tsconfig_paths-Dqd0J7st.cjs');
10
10
  var ts = require('typescript');
11
11
  var p = require('path');
12
12
  require('os');
@@ -891,7 +891,7 @@ const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
891
891
  function compileDeclareClassMetadata(metadata) {
892
892
  const definitionMap = new project_tsconfig_paths.DefinitionMap();
893
893
  definitionMap.set('minVersion', project_tsconfig_paths.literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
894
- definitionMap.set('version', project_tsconfig_paths.literal('20.3.1'));
894
+ definitionMap.set('version', project_tsconfig_paths.literal('20.3.3'));
895
895
  definitionMap.set('ngImport', project_tsconfig_paths.importExpr(project_tsconfig_paths.Identifiers.core));
896
896
  definitionMap.set('type', metadata.type);
897
897
  definitionMap.set('decorators', metadata.decorators);
@@ -909,7 +909,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
909
909
  callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? project_tsconfig_paths.literal(null));
910
910
  callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? project_tsconfig_paths.literal(null));
911
911
  definitionMap.set('minVersion', project_tsconfig_paths.literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
912
- definitionMap.set('version', project_tsconfig_paths.literal('20.3.1'));
912
+ definitionMap.set('version', project_tsconfig_paths.literal('20.3.3'));
913
913
  definitionMap.set('ngImport', project_tsconfig_paths.importExpr(project_tsconfig_paths.Identifiers.core));
914
914
  definitionMap.set('type', metadata.type);
915
915
  definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
@@ -1004,7 +1004,7 @@ function createDirectiveDefinitionMap(meta) {
1004
1004
  const definitionMap = new project_tsconfig_paths.DefinitionMap();
1005
1005
  const minVersion = getMinimumVersionForPartialOutput(meta);
1006
1006
  definitionMap.set('minVersion', project_tsconfig_paths.literal(minVersion));
1007
- definitionMap.set('version', project_tsconfig_paths.literal('20.3.1'));
1007
+ definitionMap.set('version', project_tsconfig_paths.literal('20.3.3'));
1008
1008
  // e.g. `type: MyDirective`
1009
1009
  definitionMap.set('type', meta.type.value);
1010
1010
  if (meta.isStandalone !== undefined) {
@@ -1420,7 +1420,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
1420
1420
  function compileDeclareFactoryFunction(meta) {
1421
1421
  const definitionMap = new project_tsconfig_paths.DefinitionMap();
1422
1422
  definitionMap.set('minVersion', project_tsconfig_paths.literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
1423
- definitionMap.set('version', project_tsconfig_paths.literal('20.3.1'));
1423
+ definitionMap.set('version', project_tsconfig_paths.literal('20.3.3'));
1424
1424
  definitionMap.set('ngImport', project_tsconfig_paths.importExpr(project_tsconfig_paths.Identifiers.core));
1425
1425
  definitionMap.set('type', meta.type.value);
1426
1426
  definitionMap.set('deps', compileDependencies(meta.deps));
@@ -1455,7 +1455,7 @@ function compileDeclareInjectableFromMetadata(meta) {
1455
1455
  function createInjectableDefinitionMap(meta) {
1456
1456
  const definitionMap = new project_tsconfig_paths.DefinitionMap();
1457
1457
  definitionMap.set('minVersion', project_tsconfig_paths.literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
1458
- definitionMap.set('version', project_tsconfig_paths.literal('20.3.1'));
1458
+ definitionMap.set('version', project_tsconfig_paths.literal('20.3.3'));
1459
1459
  definitionMap.set('ngImport', project_tsconfig_paths.importExpr(project_tsconfig_paths.Identifiers.core));
1460
1460
  definitionMap.set('type', meta.type.value);
1461
1461
  // Only generate providedIn property if it has a non-null value
@@ -1506,7 +1506,7 @@ function compileDeclareInjectorFromMetadata(meta) {
1506
1506
  function createInjectorDefinitionMap(meta) {
1507
1507
  const definitionMap = new project_tsconfig_paths.DefinitionMap();
1508
1508
  definitionMap.set('minVersion', project_tsconfig_paths.literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
1509
- definitionMap.set('version', project_tsconfig_paths.literal('20.3.1'));
1509
+ definitionMap.set('version', project_tsconfig_paths.literal('20.3.3'));
1510
1510
  definitionMap.set('ngImport', project_tsconfig_paths.importExpr(project_tsconfig_paths.Identifiers.core));
1511
1511
  definitionMap.set('type', meta.type.value);
1512
1512
  definitionMap.set('providers', meta.providers);
@@ -1539,7 +1539,7 @@ function createNgModuleDefinitionMap(meta) {
1539
1539
  throw new Error('Invalid path! Local compilation mode should not get into the partial compilation path');
1540
1540
  }
1541
1541
  definitionMap.set('minVersion', project_tsconfig_paths.literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
1542
- definitionMap.set('version', project_tsconfig_paths.literal('20.3.1'));
1542
+ definitionMap.set('version', project_tsconfig_paths.literal('20.3.3'));
1543
1543
  definitionMap.set('ngImport', project_tsconfig_paths.importExpr(project_tsconfig_paths.Identifiers.core));
1544
1544
  definitionMap.set('type', meta.type.value);
1545
1545
  // We only generate the keys in the metadata if the arrays contain values.
@@ -1590,7 +1590,7 @@ function compileDeclarePipeFromMetadata(meta) {
1590
1590
  function createPipeDefinitionMap(meta) {
1591
1591
  const definitionMap = new project_tsconfig_paths.DefinitionMap();
1592
1592
  definitionMap.set('minVersion', project_tsconfig_paths.literal(MINIMUM_PARTIAL_LINKER_VERSION));
1593
- definitionMap.set('version', project_tsconfig_paths.literal('20.3.1'));
1593
+ definitionMap.set('version', project_tsconfig_paths.literal('20.3.3'));
1594
1594
  definitionMap.set('ngImport', project_tsconfig_paths.importExpr(project_tsconfig_paths.Identifiers.core));
1595
1595
  // e.g. `type: MyPipe`
1596
1596
  definitionMap.set('type', meta.type.value);
@@ -5128,16 +5128,22 @@ function nodeArrayFromDecoratorsArray(decorators) {
5128
5128
  }
5129
5129
 
5130
5130
  function insertDebugNameIntoCallExpression(callExpression, debugName) {
5131
- const signalExpressionHasNoArguments = callExpression.arguments.length === 0;
5132
5131
  const signalExpressionIsRequired = isRequiredSignalFunction(callExpression.expression);
5133
5132
  let configPosition = signalExpressionIsRequired ? 0 : 1;
5134
- // If the call expression has no arguments, we pretend that the config object is at position 0.
5133
+ const nodeArgs = Array.from(callExpression.arguments);
5134
+ // 1. If the call expression has no arguments, we pretend that the config object is at position 0.
5135
5135
  // We do this so that we can insert a spread element at the start of the args list in a way where
5136
5136
  // undefined can be the first argument but still get tree-shaken out in production builds.
5137
- if (signalExpressionHasNoArguments) {
5137
+ // or
5138
+ // 2. Since `linkedSignal` with computation uses a single object for both computation logic
5139
+ // and options (unlike other signal-based primitives), we set the argument position to 0, i.e.
5140
+ // reusing the computation logic object.
5141
+ const signalExpressionHasNoArguments = callExpression.arguments.length === 0;
5142
+ const isLinkedSignal = callExpression.expression.getText() === 'linkedSignal';
5143
+ const isComputationLinkedSignal = isLinkedSignal && nodeArgs[0].kind === ts.SyntaxKind.ObjectLiteralExpression;
5144
+ if (signalExpressionHasNoArguments || isComputationLinkedSignal) {
5138
5145
  configPosition = 0;
5139
5146
  }
5140
- const nodeArgs = Array.from(callExpression.arguments);
5141
5147
  let existingArgument = nodeArgs[configPosition];
5142
5148
  if (existingArgument === undefined) {
5143
5149
  existingArgument = ts.factory.createObjectLiteralExpression([]);
@@ -5186,12 +5192,15 @@ function insertDebugNameIntoCallExpression(callExpression, debugName) {
5186
5192
  /* question token */ undefined, devModeCase,
5187
5193
  /* colon token */ undefined, nonDevModeCase)));
5188
5194
  let transformedSignalArgs;
5189
- if (signalExpressionIsRequired || signalExpressionHasNoArguments) {
5195
+ if (signalExpressionIsRequired || signalExpressionHasNoArguments || isComputationLinkedSignal) {
5190
5196
  // 1. If the call expression is a required signal function, there is no args other than the config object.
5191
5197
  // So we just use the spread element as the only argument.
5192
5198
  // or
5193
5199
  // 2. If the call expression has no arguments (ex. input(), model(), etc), we already added the undefined
5194
5200
  // identifier in the spread element above. So we use that spread Element as is.
5201
+ // or
5202
+ // 3. We are transforming a `linkedSignal` with computation (i.e. we have a single object for both
5203
+ // logic and options).
5195
5204
  transformedSignalArgs = ts.factory.createNodeArray([spreadElementContainingUpdatedOptions]);
5196
5205
  }
5197
5206
  else {
@@ -5329,6 +5338,7 @@ function expressionIsUsingAngularCoreImportedSymbol(program, expression) {
5329
5338
  const signalFunctions = new Set([
5330
5339
  'signal',
5331
5340
  'computed',
5341
+ 'linkedSignal',
5332
5342
  'input',
5333
5343
  'model',
5334
5344
  'viewChild',
@@ -11523,11 +11533,12 @@ class ComponentDecoratorHandler {
11523
11533
  for (const [_, deps] of resolution.deferPerBlockDependencies) {
11524
11534
  for (const deferBlockDep of deps) {
11525
11535
  const node = deferBlockDep.declaration.node;
11526
- const importDecl = resolution.deferrableDeclToImportDecl.get(node) ?? null;
11527
- if (importDecl !== null && this.deferredSymbolTracker.canDefer(importDecl)) {
11536
+ const importInfo = resolution.deferrableDeclToImportDecl.get(node) ?? null;
11537
+ if (importInfo !== null && this.deferredSymbolTracker.canDefer(importInfo.node)) {
11528
11538
  deferBlockDep.isDeferrable = true;
11529
- deferBlockDep.importPath = importDecl.moduleSpecifier.text;
11530
- deferBlockDep.isDefaultImport = isDefaultImport(importDecl);
11539
+ deferBlockDep.symbolName = importInfo.name;
11540
+ deferBlockDep.importPath = importInfo.from;
11541
+ deferBlockDep.isDefaultImport = isDefaultImport(importInfo.node);
11531
11542
  // The same dependency may be used across multiple deferred blocks. De-duplicate it
11532
11543
  // because it can throw off other logic further down the compilation pipeline.
11533
11544
  // Note that the logic above needs to run even if the dependency is seen before,
@@ -11700,9 +11711,10 @@ class ComponentDecoratorHandler {
11700
11711
  // This is not a directive or a pipe.
11701
11712
  return;
11702
11713
  }
11703
- // Keep track of how this class made it into the current source file
11704
- // (which ts.ImportDeclaration was used for this symbol).
11705
- resolutionData.deferrableDeclToImportDecl.set(decl.node, imp.node);
11714
+ // Keep track of how this class made it into the current source file.
11715
+ // Store the full `Import` info so that callers can correctly determine the
11716
+ // exported name (handling aliasing) and the module specifier.
11717
+ resolutionData.deferrableDeclToImportDecl.set(decl.node, imp);
11706
11718
  this.deferredSymbolTracker.markAsDeferrableCandidate(node, imp.node, componentClassDecl, isDeferredImport);
11707
11719
  }
11708
11720
  compileDeferBlocks(resolution) {
@@ -12321,7 +12333,7 @@ class PipeDecoratorHandler {
12321
12333
  * @description
12322
12334
  * Entry point for all public APIs of the compiler-cli package.
12323
12335
  */
12324
- new project_tsconfig_paths.Version('20.3.1');
12336
+ new project_tsconfig_paths.Version('20.3.3');
12325
12337
 
12326
12338
  /**
12327
12339
  * Whether a given decorator should be treated as an Angular decorator.
@@ -16777,13 +16789,24 @@ const factory$9 = {
16777
16789
  * otherwise it would produce inaccurate results.
16778
16790
  */
16779
16791
  class OptionalChainNotNullableCheck extends TemplateCheckWithVisitor {
16792
+ noUncheckedIndexedAccess;
16780
16793
  canVisitStructuralAttributes = false;
16781
16794
  code = project_tsconfig_paths.ErrorCode.OPTIONAL_CHAIN_NOT_NULLABLE;
16795
+ constructor(noUncheckedIndexedAccess) {
16796
+ super();
16797
+ this.noUncheckedIndexedAccess = noUncheckedIndexedAccess;
16798
+ }
16782
16799
  visitNode(ctx, component, node) {
16783
16800
  if (!(node instanceof project_tsconfig_paths.SafeCall) &&
16784
16801
  !(node instanceof project_tsconfig_paths.SafePropertyRead) &&
16785
- !(node instanceof project_tsconfig_paths.SafeKeyedRead))
16802
+ !(node instanceof project_tsconfig_paths.SafeKeyedRead)) {
16786
16803
  return [];
16804
+ }
16805
+ // When `noUncheckedIndexedAccess` is disabled, an indexed access is not checked
16806
+ // and may result in `undefined`.
16807
+ if (node.receiver instanceof project_tsconfig_paths.KeyedRead && !this.noUncheckedIndexedAccess) {
16808
+ return [];
16809
+ }
16787
16810
  const symbolLeft = ctx.templateTypeChecker.getSymbolOfNode(node.receiver, component);
16788
16811
  if (symbolLeft === null || symbolLeft.kind !== project_tsconfig_paths.SymbolKind.Expression) {
16789
16812
  return [];
@@ -16823,7 +16846,8 @@ const factory$8 = {
16823
16846
  if (!strictNullChecks) {
16824
16847
  return null;
16825
16848
  }
16826
- return new OptionalChainNotNullableCheck();
16849
+ const noUncheckedIndexedAccess = !!options.noUncheckedIndexedAccess;
16850
+ return new OptionalChainNotNullableCheck(noUncheckedIndexedAccess);
16827
16851
  },
16828
16852
  };
16829
16853
 
@@ -20413,7 +20437,7 @@ var semver = /*@__PURE__*/getDefaultExportFromCjs(semverExports);
20413
20437
  * @param minVersion Minimum required version for the feature.
20414
20438
  */
20415
20439
  function coreVersionSupportsFeature(coreVersion, minVersion) {
20416
- // A version of `20.3.1` usually means that core is at head so it supports
20440
+ // A version of `20.3.3` usually means that core is at head so it supports
20417
20441
  // all features. Use string interpolation prevent the placeholder from being replaced
20418
20442
  // with the current version during build time.
20419
20443
  if (coreVersion === `0.0.0-${'PLACEHOLDER'}`) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.3.1
3
+ * @license Angular v20.3.3
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-crm5NKE7.cjs');
12
- var index = require('./index-B5lv9x1v.cjs');
11
+ var project_tsconfig_paths = require('./project_tsconfig_paths-Dqd0J7st.cjs');
12
+ var index = require('./index-BZJ8bv9v.cjs');
13
13
  require('path');
14
14
  require('node:path');
15
- var project_paths = require('./project_paths-CIUSEdn4.cjs');
15
+ var project_paths = require('./project_paths-DcM18127.cjs');
16
16
 
17
17
  function getMemberName(member) {
18
18
  if (member.name === undefined) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.3.1
3
+ * @license Angular v20.3.3
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,12 +8,12 @@
8
8
 
9
9
  var ts = require('typescript');
10
10
  require('os');
11
- var project_tsconfig_paths = require('./project_tsconfig_paths-crm5NKE7.cjs');
12
- require('./index-B5lv9x1v.cjs');
11
+ var project_tsconfig_paths = require('./project_tsconfig_paths-Dqd0J7st.cjs');
12
+ require('./index-BZJ8bv9v.cjs');
13
13
  require('path');
14
14
  require('node:path');
15
- var project_paths = require('./project_paths-CIUSEdn4.cjs');
16
- var apply_import_manager = require('./apply_import_manager-C8vgfoJx.cjs');
15
+ var project_paths = require('./project_paths-DcM18127.cjs');
16
+ var apply_import_manager = require('./apply_import_manager-CUBvPp_2.cjs');
17
17
  var imports = require('./imports-CIX-JgAN.cjs');
18
18
  require('@angular-devkit/core');
19
19
  require('node:path/posix');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.3.1
3
+ * @license Angular v20.3.3
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,13 +8,13 @@
8
8
 
9
9
  var schematics = require('@angular-devkit/schematics');
10
10
  var p = require('path');
11
- var compiler_host = require('./compiler_host-DC7Yquzy.cjs');
11
+ var compiler_host = require('./compiler_host-DJHZ7M9N.cjs');
12
12
  var ts = require('typescript');
13
13
  var ng_decorators = require('./ng_decorators-B5HCqr20.cjs');
14
14
  var imports = require('./imports-CIX-JgAN.cjs');
15
15
  var nodes = require('./nodes-B16H9JUd.cjs');
16
16
  var leading_space = require('./leading_space-D9nQ8UQC.cjs');
17
- var project_tsconfig_paths = require('./project_tsconfig_paths-crm5NKE7.cjs');
17
+ var project_tsconfig_paths = require('./project_tsconfig_paths-Dqd0J7st.cjs');
18
18
  require('os');
19
19
  require('fs');
20
20
  require('module');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.3.1
3
+ * @license Angular v20.3.3
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -1,19 +1,19 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.3.1
3
+ * @license Angular v20.3.3
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-crm5NKE7.cjs');
9
+ var project_tsconfig_paths = require('./project_tsconfig_paths-Dqd0J7st.cjs');
10
10
  var ts = require('typescript');
11
11
  require('os');
12
12
  var assert = require('assert');
13
- var index = require('./index-Bufm9_1r.cjs');
14
- var project_paths = require('./project_paths-CIUSEdn4.cjs');
13
+ var index = require('./index-DU_evmAi.cjs');
14
+ var project_paths = require('./project_paths-DcM18127.cjs');
15
15
  var leading_space = require('./leading_space-D9nQ8UQC.cjs');
16
- require('./index-B5lv9x1v.cjs');
16
+ require('./index-BZJ8bv9v.cjs');
17
17
  require('path');
18
18
  require('node:path');
19
19
  var assert$1 = require('node:assert');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.3.1
3
+ * @license Angular v20.3.3
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.3.1
3
+ * @license Angular v20.3.3
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.3.1
3
+ * @license Angular v20.3.3
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,13 +8,13 @@
8
8
 
9
9
  var ts = require('typescript');
10
10
  require('os');
11
- var project_tsconfig_paths = require('./project_tsconfig_paths-crm5NKE7.cjs');
12
- var index$1 = require('./index-B5lv9x1v.cjs');
11
+ var project_tsconfig_paths = require('./project_tsconfig_paths-Dqd0J7st.cjs');
12
+ var index$1 = require('./index-BZJ8bv9v.cjs');
13
13
  require('path');
14
14
  require('node:path');
15
- var project_paths = require('./project_paths-CIUSEdn4.cjs');
16
- var apply_import_manager = require('./apply_import_manager-C8vgfoJx.cjs');
17
- var index = require('./index-Bufm9_1r.cjs');
15
+ var project_paths = require('./project_paths-DcM18127.cjs');
16
+ var apply_import_manager = require('./apply_import_manager-CUBvPp_2.cjs');
17
+ var index = require('./index-DU_evmAi.cjs');
18
18
  require('@angular-devkit/core');
19
19
  require('node:path/posix');
20
20
  require('fs');
@@ -1,18 +1,18 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.3.1
3
+ * @license Angular v20.3.3
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
7
7
  'use strict';
8
8
 
9
- var index = require('./index-B5lv9x1v.cjs');
9
+ var index = require('./index-BZJ8bv9v.cjs');
10
10
  var schematics = require('@angular-devkit/schematics');
11
11
  var core = require('@angular-devkit/core');
12
12
  var posixPath = require('node:path/posix');
13
13
  var os = require('os');
14
14
  var ts = require('typescript');
15
- var project_tsconfig_paths = require('./project_tsconfig_paths-crm5NKE7.cjs');
15
+ var project_tsconfig_paths = require('./project_tsconfig_paths-Dqd0J7st.cjs');
16
16
  require('path');
17
17
  var path = require('node:path');
18
18
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.3.1
3
+ * @license Angular v20.3.3
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -11700,6 +11700,16 @@ function extractAttributeOp(unit, op, elements) {
11700
11700
  }
11701
11701
  }
11702
11702
 
11703
+ const ARIA_PREFIX = 'aria-';
11704
+ /**
11705
+ * Returns whether `name` is an ARIA attribute name.
11706
+ *
11707
+ * This is a heuristic based on whether name begins with and is longer than `aria-`.
11708
+ */
11709
+ function isAriaAttribute(name) {
11710
+ return name.startsWith(ARIA_PREFIX) && name.length > ARIA_PREFIX.length;
11711
+ }
11712
+
11703
11713
  /**
11704
11714
  * Looks up an element in the given map by xref ID.
11705
11715
  */
@@ -11745,7 +11755,15 @@ function specializeBindings(job) {
11745
11755
  break;
11746
11756
  case BindingKind.Property:
11747
11757
  case BindingKind.LegacyAnimation:
11748
- if (job.kind === CompilationJobKind.Host) {
11758
+ // Convert a property binding targeting an ARIA attribute (e.g. [aria-label]) into an
11759
+ // attribute binding when we know it can't also target an input. Note that a `Host` job is
11760
+ // always `DomOnly`, so this condition must be checked first.
11761
+ if (job.mode === TemplateCompilationMode.DomOnly && isAriaAttribute(op.name)) {
11762
+ OpList.replace(op, createAttributeOp(op.target,
11763
+ /* namespace= */ null, op.name, op.expression, op.securityContext,
11764
+ /* isTextAttribute= */ false, op.isStructuralTemplateAttribute, op.templateKind, op.i18nMessage, op.sourceSpan));
11765
+ }
11766
+ else if (job.kind === CompilationJobKind.Host) {
11749
11767
  OpList.replace(op, createDomPropertyOp(op.name, op.expression, op.bindingKind, op.i18nContext, op.securityContext, op.sourceSpan));
11750
11768
  }
11751
11769
  else {
@@ -18240,9 +18258,6 @@ class Token {
18240
18258
  isTemplateLiteralInterpolationStart() {
18241
18259
  return this.isOperator('${');
18242
18260
  }
18243
- isTemplateLiteralInterpolationEnd() {
18244
- return this.isOperator('}');
18245
- }
18246
18261
  toString() {
18247
18262
  switch (this.type) {
18248
18263
  case TokenType.Character:
@@ -18415,7 +18430,7 @@ class _Scanner {
18415
18430
  this.advance();
18416
18431
  const currentBrace = this.braceStack.pop();
18417
18432
  if (currentBrace === 'interpolation') {
18418
- this.tokens.push(newOperatorToken(start, this.index, '}'));
18433
+ this.tokens.push(newCharacterToken(start, this.index, $RBRACE));
18419
18434
  return this.scanTemplateLiteralPart(this.index);
18420
18435
  }
18421
18436
  return newCharacterToken(start, this.index, code);
@@ -19909,6 +19924,7 @@ class _ParseAST {
19909
19924
  }
19910
19925
  else if (token.isTemplateLiteralInterpolationStart()) {
19911
19926
  this.advance();
19927
+ this.rbracesExpected++;
19912
19928
  const expression = this.parsePipe();
19913
19929
  if (expression instanceof EmptyExpr$1) {
19914
19930
  this.error('Template literal interpolation cannot be empty');
@@ -19916,6 +19932,7 @@ class _ParseAST {
19916
19932
  else {
19917
19933
  expressions.push(expression);
19918
19934
  }
19935
+ this.rbracesExpected--;
19919
19936
  }
19920
19937
  else {
19921
19938
  this.advance();
@@ -23851,7 +23868,6 @@ function callVariadicInstruction(config, baseArgs, interpolationArgs, extraArgs,
23851
23868
  return createStatementOp(callVariadicInstructionExpr(config, baseArgs, interpolationArgs, extraArgs, sourceSpan).toStmt());
23852
23869
  }
23853
23870
 
23854
- const ARIA_PREFIX = 'aria';
23855
23871
  /**
23856
23872
  * Map of target resolvers for event listeners.
23857
23873
  */
@@ -24230,33 +24246,6 @@ function reifyUpdateOperations(unit, ops) {
24230
24246
  }
24231
24247
  }
24232
24248
  }
24233
- /**
24234
- * Converts an ARIA property name to its corresponding attribute name, if necessary.
24235
- *
24236
- * For example, converts `ariaLabel` to `aria-label`.
24237
- *
24238
- * https://www.w3.org/TR/wai-aria-1.2/#accessibilityroleandproperties-correspondence
24239
- *
24240
- * This must be kept in sync with the the function of the same name in
24241
- * packages/core/src/render3/instructions/aria_property.ts.
24242
- *
24243
- * @param name A property name that starts with `aria`.
24244
- * @returns The corresponding attribute name.
24245
- */
24246
- function ariaAttrName(name) {
24247
- return name.charAt(ARIA_PREFIX.length) !== '-'
24248
- ? ARIA_PREFIX + '-' + name.slice(ARIA_PREFIX.length).toLowerCase()
24249
- : name; // Property already has attribute name.
24250
- }
24251
- /**
24252
- * Returns whether `name` is an ARIA property (or attribute) name.
24253
- *
24254
- * This is a heuristic based on whether name begins with and is longer than `aria`. For example,
24255
- * this returns true for both `ariaLabel` and `aria-label`.
24256
- */
24257
- function isAriaProperty(name) {
24258
- return name.startsWith(ARIA_PREFIX) && name.length > ARIA_PREFIX.length;
24259
- }
24260
24249
  /**
24261
24250
  * Reifies a DOM property binding operation.
24262
24251
  *
@@ -24267,9 +24256,7 @@ function isAriaProperty(name) {
24267
24256
  * @returns A statement to update the property at runtime.
24268
24257
  */
24269
24258
  function reifyDomProperty(op) {
24270
- return isAriaProperty(op.name)
24271
- ? attribute(ariaAttrName(op.name), op.expression, null, null, op.sourceSpan)
24272
- : domProperty(DOM_PROPERTY_REMAPPING.get(op.name) ?? op.name, op.expression, op.sanitizer, op.sourceSpan);
24259
+ return domProperty(DOM_PROPERTY_REMAPPING.get(op.name) ?? op.name, op.expression, op.sanitizer, op.sourceSpan);
24273
24260
  }
24274
24261
  /**
24275
24262
  * Reifies a property binding operation.
@@ -24281,7 +24268,7 @@ function reifyDomProperty(op) {
24281
24268
  * @returns A statement to update the property at runtime.
24282
24269
  */
24283
24270
  function reifyProperty(op) {
24284
- return isAriaProperty(op.name)
24271
+ return isAriaAttribute(op.name)
24285
24272
  ? ariaProperty(op.name, op.expression, op.sourceSpan)
24286
24273
  : property(op.name, op.expression, op.sanitizer, op.sourceSpan);
24287
24274
  }
@@ -29403,6 +29390,13 @@ class HtmlAstToIvyAst {
29403
29390
  }
29404
29391
  else {
29405
29392
  const attrs = this.categorizePropertyAttributes(element.name, parsedProperties, i18nAttrsMeta);
29393
+ if (element.name === 'ng-container') {
29394
+ for (const bound of attrs.bound) {
29395
+ if (bound.type === exports.BindingType.Attribute) {
29396
+ this.reportError(`Attribute bindings are not supported on ng-container. Use property bindings instead.`, bound.sourceSpan);
29397
+ }
29398
+ }
29399
+ }
29406
29400
  parsedElement = new Element$1(element.name, attributes, attrs.bound, boundEvents, directives, children, references, element.isSelfClosing, element.sourceSpan, element.startSourceSpan, element.endSourceSpan, element.isVoid, element.i18n);
29407
29401
  }
29408
29402
  if (elementHasInlineTemplate) {
@@ -32774,7 +32768,7 @@ function isAttrNode(ast) {
32774
32768
  * @description
32775
32769
  * Entry point for all public APIs of the compiler package.
32776
32770
  */
32777
- const VERSION = new Version('20.3.1');
32771
+ const VERSION = new Version('20.3.3');
32778
32772
 
32779
32773
  //////////////////////////////////////
32780
32774
  // THIS FILE HAS GLOBAL SIDE EFFECT //
@@ -33836,7 +33830,7 @@ class NodeJSPathManipulation {
33836
33830
  // G3-ESM-MARKER: G3 uses CommonJS, but externally everything in ESM.
33837
33831
  // CommonJS/ESM interop for determining the current file name and containing dir.
33838
33832
  const isCommonJS = typeof __filename !== 'undefined';
33839
- 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-crm5NKE7.cjs', document.baseURI).href));
33833
+ 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-Dqd0J7st.cjs', document.baseURI).href));
33840
33834
  // Note, when this code loads in the browser, `url` may be an empty `{}` due to the Closure shims.
33841
33835
  const currentFileName = isCommonJS
33842
33836
  ? __filename
@@ -42435,6 +42429,10 @@ class MagicString {
42435
42429
  if (chunk.outro.length) mappings.advance(chunk.outro);
42436
42430
  });
42437
42431
 
42432
+ if (this.outro) {
42433
+ mappings.advance(this.outro);
42434
+ }
42435
+
42438
42436
  return {
42439
42437
  file: options.file ? options.file.split(/[/\\]/).pop() : undefined,
42440
42438
  sources: [
@@ -43100,7 +43098,12 @@ class MagicString {
43100
43098
  const index = original.indexOf(string);
43101
43099
 
43102
43100
  if (index !== -1) {
43103
- this.overwrite(index, index + string.length, replacement);
43101
+ if (typeof replacement === 'function') {
43102
+ replacement = replacement(string, index, original);
43103
+ }
43104
+ if (string !== replacement) {
43105
+ this.overwrite(index, index + string.length, replacement);
43106
+ }
43104
43107
  }
43105
43108
 
43106
43109
  return this;
@@ -43123,7 +43126,11 @@ class MagicString {
43123
43126
  index = original.indexOf(string, index + stringLength)
43124
43127
  ) {
43125
43128
  const previous = original.slice(index, index + stringLength);
43126
- if (previous !== replacement) this.overwrite(index, index + stringLength, replacement);
43129
+ let _replacement = replacement;
43130
+ if (typeof replacement === 'function') {
43131
+ _replacement = replacement(previous, index, original);
43132
+ }
43133
+ if (previous !== _replacement) this.overwrite(index, index + stringLength, _replacement);
43127
43134
  }
43128
43135
 
43129
43136
  return this;
@@ -50854,6 +50861,7 @@ exports.ImportManager = ImportManager;
50854
50861
  exports.Interpolation = Interpolation$1;
50855
50862
  exports.InterpolationConfig = InterpolationConfig;
50856
50863
  exports.InvokeFunctionExpr = InvokeFunctionExpr;
50864
+ exports.KeyedRead = KeyedRead;
50857
50865
  exports.KnownFn = KnownFn;
50858
50866
  exports.LetDeclaration = LetDeclaration$1;
50859
50867
  exports.LiteralArrayExpr = LiteralArrayExpr;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.3.1
3
+ * @license Angular v20.3.3
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.3.1
3
+ * @license Angular v20.3.3
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-DC7Yquzy.cjs');
13
- var project_tsconfig_paths = require('./project_tsconfig_paths-crm5NKE7.cjs');
12
+ var compiler_host = require('./compiler_host-DJHZ7M9N.cjs');
13
+ var project_tsconfig_paths = require('./project_tsconfig_paths-Dqd0J7st.cjs');
14
14
  var ts = require('typescript');
15
15
  var property_name = require('./property_name-BBwFuqMe.cjs');
16
16
  require('os');