@angular/core 21.0.0-next.5 → 21.0.0-next.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/fesm2022/{attribute.mjs → _attribute-chunk.mjs} +2 -2
  2. package/fesm2022/_attribute-chunk.mjs.map +1 -0
  3. package/fesm2022/{debug_node.mjs → _debug_node-chunk.mjs} +17 -7
  4. package/fesm2022/_debug_node-chunk.mjs.map +1 -0
  5. package/fesm2022/{effect.mjs → _effect-chunk.mjs} +3 -3
  6. package/fesm2022/_effect-chunk.mjs.map +1 -0
  7. package/fesm2022/{not_found.mjs → _not_found-chunk.mjs} +2 -2
  8. package/fesm2022/_not_found-chunk.mjs.map +1 -0
  9. package/fesm2022/{resource.mjs → _resource-chunk.mjs} +5 -5
  10. package/fesm2022/_resource-chunk.mjs.map +1 -0
  11. package/fesm2022/{root_effect_scheduler.mjs → _root_effect_scheduler-chunk.mjs} +5 -5
  12. package/fesm2022/_root_effect_scheduler-chunk.mjs.map +1 -0
  13. package/fesm2022/{signal.mjs → _signal-chunk.mjs} +9 -9
  14. package/fesm2022/_signal-chunk.mjs.map +1 -0
  15. package/fesm2022/{weak_ref.mjs → _weak_ref-chunk.mjs} +2 -2
  16. package/fesm2022/_weak_ref-chunk.mjs.map +1 -0
  17. package/fesm2022/core.mjs +13 -13
  18. package/fesm2022/core.mjs.map +1 -1
  19. package/fesm2022/{primitives/di.mjs → primitives-di.mjs} +3 -3
  20. package/fesm2022/primitives-di.mjs.map +1 -0
  21. package/fesm2022/{primitives/event-dispatch.mjs → primitives-event-dispatch.mjs} +3 -3
  22. package/fesm2022/primitives-event-dispatch.mjs.map +1 -0
  23. package/fesm2022/primitives-signals.mjs +221 -0
  24. package/fesm2022/primitives-signals.mjs.map +1 -0
  25. package/fesm2022/rxjs-interop.mjs +6 -6
  26. package/fesm2022/rxjs-interop.mjs.map +1 -1
  27. package/fesm2022/testing.mjs +6 -6
  28. package/fesm2022/testing.mjs.map +1 -1
  29. package/package.json +12 -12
  30. package/schematics/bundles/add-bootstrap-context-to-server-main.cjs +5 -5
  31. package/schematics/bundles/application-config-core.cjs +5 -5
  32. package/schematics/bundles/{apply_import_manager-Bx60Uquz.cjs → apply_import_manager-pLtndDki.cjs} +3 -3
  33. package/schematics/bundles/bootstrap-options-migration.cjs +5 -5
  34. package/schematics/bundles/cleanup-unused-imports.cjs +5 -5
  35. package/schematics/bundles/{compiler_host-Aouk-n4F.cjs → compiler_host-BJEh7-L1.cjs} +2 -2
  36. package/schematics/bundles/control-flow-migration.cjs +4 -4
  37. package/schematics/bundles/imports-DwPXlGFl.cjs +1 -1
  38. package/schematics/bundles/{index-Bb6iejCd.cjs → index-DCfgOEYE.cjs} +32 -36
  39. package/schematics/bundles/{index-BZQb51Qf.cjs → index-bqpULzLD.cjs} +4 -6
  40. package/schematics/bundles/inject-migration.cjs +3 -3
  41. package/schematics/bundles/leading_space-D9nQ8UQC.cjs +1 -1
  42. package/schematics/bundles/{migrate_ts_type_references-By2ZtKls.cjs → migrate_ts_type_references-COE6BA7E.cjs} +5 -5
  43. package/schematics/bundles/{ng_component_template-B4M8mTyv.cjs → ng_component_template-pDoKlgPP.cjs} +2 -2
  44. package/schematics/bundles/ng_decorators-BI0uV7KI.cjs +1 -1
  45. package/schematics/bundles/ngclass-to-class-migration.cjs +7 -7
  46. package/schematics/bundles/ngstyle-to-style-migration.cjs +7 -7
  47. package/schematics/bundles/nodes-B16H9JUd.cjs +1 -1
  48. package/schematics/bundles/output-migration.cjs +6 -6
  49. package/schematics/bundles/{parse_html-7Wl_HDnw.cjs → parse_html-B6fblY_V.cjs} +2 -2
  50. package/schematics/bundles/{project_paths-Dr2s3Pq3.cjs → project_paths-i0Wjiiq1.cjs} +3 -3
  51. package/schematics/bundles/{project_tsconfig_paths-DX9KHLn9.cjs → project_tsconfig_paths-sFatqIE5.cjs} +75 -132
  52. package/schematics/bundles/property_name-BBwFuqMe.cjs +1 -1
  53. package/schematics/bundles/route-lazy-loading.cjs +3 -3
  54. package/schematics/bundles/router-current-navigation.cjs +4 -4
  55. package/schematics/bundles/router-last-successful-navigation.cjs +4 -4
  56. package/schematics/bundles/self-closing-tags-migration.cjs +6 -6
  57. package/schematics/bundles/signal-input-migration.cjs +67 -8
  58. package/schematics/bundles/signal-queries-migration.cjs +7 -7
  59. package/schematics/bundles/signals.cjs +7 -7
  60. package/schematics/bundles/standalone-migration.cjs +60 -40
  61. package/schematics/bundles/symbol-BObKoqes.cjs +1 -1
  62. package/schematics/migrations.json +1 -2
  63. package/{api.d.d.ts → types/_api-chunk.d.ts} +2 -2
  64. package/{chrome_dev_tools_performance.d.d.ts → types/_chrome_dev_tools_performance-chunk.d.ts} +3 -3
  65. package/{discovery.d.d.ts → types/_discovery-chunk.d.ts} +5 -5
  66. package/{effect.d.d.ts → types/_effect-chunk.d.ts} +2 -2
  67. package/{event_dispatcher.d.d.ts → types/_event_dispatcher-chunk.d.ts} +1 -1
  68. package/{graph.d.d.ts → types/_formatter-chunk.d.ts} +14 -2
  69. package/{weak_ref.d.d.ts → types/_weak_ref-chunk.d.ts} +1 -1
  70. package/{index.d.ts → types/core.d.ts} +13 -13
  71. package/{primitives/di/index.d.ts → types/primitives-di.d.ts} +1 -1
  72. package/{primitives/event-dispatch/index.d.ts → types/primitives-event-dispatch.d.ts} +3 -3
  73. package/{primitives/signals/index.d.ts → types/primitives-signals.d.ts} +6 -6
  74. package/{rxjs-interop/index.d.ts → types/rxjs-interop.d.ts} +5 -5
  75. package/{testing/index.d.ts → types/testing.d.ts} +6 -6
  76. package/fesm2022/attribute.mjs.map +0 -1
  77. package/fesm2022/debug_node.mjs.map +0 -1
  78. package/fesm2022/effect.mjs.map +0 -1
  79. package/fesm2022/not_found.mjs.map +0 -1
  80. package/fesm2022/primitives/di.mjs.map +0 -1
  81. package/fesm2022/primitives/event-dispatch.mjs.map +0 -1
  82. package/fesm2022/primitives/signals.mjs +0 -88
  83. package/fesm2022/primitives/signals.mjs.map +0 -1
  84. package/fesm2022/resource.mjs.map +0 -1
  85. package/fesm2022/root_effect_scheduler.mjs.map +0 -1
  86. package/fesm2022/signal.mjs.map +0 -1
  87. package/fesm2022/weak_ref.mjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0-next.5
3
+ * @license Angular v21.0.0-next.6
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -6304,48 +6304,6 @@ function createFactoryFunction(type) {
6304
6304
  return arrowFn([t], type.prop('ɵfac').callFn([variable(t.name)]));
6305
6305
  }
6306
6306
 
6307
- const UNUSABLE_INTERPOLATION_REGEXPS = [
6308
- /@/, // control flow reserved symbol
6309
- /^\s*$/, // empty
6310
- /[<>]/, // html tag
6311
- /^[{}]$/, // i18n expansion
6312
- /&(#|[a-z])/i, // character reference,
6313
- /^\/\//, // comment
6314
- ];
6315
- function assertInterpolationSymbols(identifier, value) {
6316
- if (value != null && !(Array.isArray(value) && value.length == 2)) {
6317
- throw new Error(`Expected '${identifier}' to be an array, [start, end].`);
6318
- }
6319
- else if (value != null) {
6320
- const start = value[0];
6321
- const end = value[1];
6322
- // Check for unusable interpolation symbols
6323
- UNUSABLE_INTERPOLATION_REGEXPS.forEach((regexp) => {
6324
- if (regexp.test(start) || regexp.test(end)) {
6325
- throw new Error(`['${start}', '${end}'] contains unusable interpolation symbol.`);
6326
- }
6327
- });
6328
- }
6329
- }
6330
-
6331
- class InterpolationConfig {
6332
- start;
6333
- end;
6334
- static fromArray(markers) {
6335
- if (!markers) {
6336
- return DEFAULT_INTERPOLATION_CONFIG;
6337
- }
6338
- assertInterpolationSymbols('interpolation', markers);
6339
- return new InterpolationConfig(markers[0], markers[1]);
6340
- }
6341
- constructor(start, end) {
6342
- this.start = start;
6343
- this.end = end;
6344
- }
6345
- }
6346
- const DEFAULT_INTERPOLATION_CONFIG = new InterpolationConfig('{{', '}}');
6347
- const DEFAULT_CONTAINER_BLOCKS = new Set(['switch']);
6348
-
6349
6307
  const $EOF = 0;
6350
6308
  const $BSPACE = 8;
6351
6309
  const $TAB = 9;
@@ -15936,12 +15894,15 @@ const SUPPORTED_BLOCKS = [
15936
15894
  '@loading',
15937
15895
  '@error',
15938
15896
  ];
15897
+ const INTERPOLATION = {
15898
+ start: '{{',
15899
+ end: '}}',
15900
+ };
15939
15901
  // See https://www.w3.org/TR/html51/syntax.html#writing-html-documents
15940
15902
  class _Tokenizer {
15941
15903
  _getTagDefinition;
15942
15904
  _cursor;
15943
15905
  _tokenizeIcu;
15944
- _interpolationConfig;
15945
15906
  _leadingTriviaCodePoints;
15946
15907
  _currentTokenStart = null;
15947
15908
  _currentTokenType = null;
@@ -15964,7 +15925,6 @@ class _Tokenizer {
15964
15925
  constructor(_file, _getTagDefinition, options) {
15965
15926
  this._getTagDefinition = _getTagDefinition;
15966
15927
  this._tokenizeIcu = options.tokenizeExpansionForms || false;
15967
- this._interpolationConfig = options.interpolationConfig || DEFAULT_INTERPOLATION_CONFIG;
15968
15928
  this._leadingTriviaCodePoints =
15969
15929
  options.leadingTriviaChars && options.leadingTriviaChars.map((c) => c.codePointAt(0) || 0);
15970
15930
  const range = options.range || {
@@ -16795,7 +16755,7 @@ class _Tokenizer {
16795
16755
  const parts = [];
16796
16756
  while (!endPredicate()) {
16797
16757
  const current = this._cursor.clone();
16798
- if (this._interpolationConfig && this._attemptStr(this._interpolationConfig.start)) {
16758
+ if (this._attemptStr(INTERPOLATION.start)) {
16799
16759
  this._endToken([this._processCarriageReturns(parts.join(''))], current);
16800
16760
  parts.length = 0;
16801
16761
  this._consumeInterpolation(interpolationTokenType, current, endInterpolation);
@@ -16827,7 +16787,7 @@ class _Tokenizer {
16827
16787
  _consumeInterpolation(interpolationTokenType, interpolationStart, prematureEndPredicate) {
16828
16788
  const parts = [];
16829
16789
  this._beginToken(interpolationTokenType, interpolationStart);
16830
- parts.push(this._interpolationConfig.start);
16790
+ parts.push(INTERPOLATION.start);
16831
16791
  // Find the end of the interpolation, ignoring content inside quotes.
16832
16792
  const expressionStart = this._cursor.clone();
16833
16793
  let inQuote = null;
@@ -16845,10 +16805,10 @@ class _Tokenizer {
16845
16805
  return;
16846
16806
  }
16847
16807
  if (inQuote === null) {
16848
- if (this._attemptStr(this._interpolationConfig.end)) {
16808
+ if (this._attemptStr(INTERPOLATION.end)) {
16849
16809
  // We are not in a string, and we hit the end interpolation marker
16850
16810
  parts.push(this._getProcessedChars(expressionStart, current));
16851
- parts.push(this._interpolationConfig.end);
16811
+ parts.push(INTERPOLATION.end);
16852
16812
  this._endToken(parts);
16853
16813
  return;
16854
16814
  }
@@ -16987,13 +16947,10 @@ class _Tokenizer {
16987
16947
  if (this._cursor.peek() !== $LBRACE) {
16988
16948
  return false;
16989
16949
  }
16990
- if (this._interpolationConfig) {
16991
- const start = this._cursor.clone();
16992
- const isInterpolation = this._attemptStr(this._interpolationConfig.start);
16993
- this._cursor = start;
16994
- return !isInterpolation;
16995
- }
16996
- return true;
16950
+ const start = this._cursor.clone();
16951
+ const isInterpolation = this._attemptStr(INTERPOLATION.start);
16952
+ this._cursor = start;
16953
+ return !isInterpolation;
16997
16954
  }
16998
16955
  }
16999
16956
  function isNotWhitespace(code) {
@@ -18313,9 +18270,6 @@ class Token {
18313
18270
  isTemplateLiteralInterpolationStart() {
18314
18271
  return this.isOperator('${');
18315
18272
  }
18316
- isTemplateLiteralInterpolationEnd() {
18317
- return this.isOperator('}');
18318
- }
18319
18273
  toString() {
18320
18274
  switch (this.type) {
18321
18275
  case TokenType.Character:
@@ -18498,7 +18452,7 @@ class _Scanner {
18498
18452
  this.advance();
18499
18453
  const currentBrace = this.braceStack.pop();
18500
18454
  if (currentBrace === 'interpolation') {
18501
- this.tokens.push(newOperatorToken(start, this.index, '}'));
18455
+ this.tokens.push(newCharacterToken(start, this.index, $RBRACE));
18502
18456
  return this.scanTemplateLiteralPart(this.index);
18503
18457
  }
18504
18458
  return newCharacterToken(start, this.index, code);
@@ -18862,17 +18816,17 @@ class Parser {
18862
18816
  this._lexer = _lexer;
18863
18817
  this._supportsDirectPipeReferences = _supportsDirectPipeReferences;
18864
18818
  }
18865
- parseAction(input, parseSourceSpan, absoluteOffset, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18819
+ parseAction(input, parseSourceSpan, absoluteOffset) {
18866
18820
  const errors = [];
18867
- this._checkNoInterpolation(errors, input, parseSourceSpan, interpolationConfig);
18821
+ this._checkNoInterpolation(errors, input, parseSourceSpan);
18868
18822
  const { stripped: sourceToLex } = this._stripComments(input);
18869
18823
  const tokens = this._lexer.tokenize(sourceToLex);
18870
18824
  const ast = new _ParseAST(input, parseSourceSpan, absoluteOffset, tokens, 1 /* ParseFlags.Action */, errors, 0, this._supportsDirectPipeReferences).parseChain();
18871
18825
  return new ASTWithSource(ast, input, getLocation(parseSourceSpan), absoluteOffset, errors);
18872
18826
  }
18873
- parseBinding(input, parseSourceSpan, absoluteOffset, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18827
+ parseBinding(input, parseSourceSpan, absoluteOffset) {
18874
18828
  const errors = [];
18875
- const ast = this._parseBindingAst(input, parseSourceSpan, absoluteOffset, interpolationConfig, errors);
18829
+ const ast = this._parseBindingAst(input, parseSourceSpan, absoluteOffset, errors);
18876
18830
  return new ASTWithSource(ast, input, getLocation(parseSourceSpan), absoluteOffset, errors);
18877
18831
  }
18878
18832
  checkSimpleExpression(ast) {
@@ -18881,17 +18835,17 @@ class Parser {
18881
18835
  return checker.errors;
18882
18836
  }
18883
18837
  // Host bindings parsed here
18884
- parseSimpleBinding(input, parseSourceSpan, absoluteOffset, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18838
+ parseSimpleBinding(input, parseSourceSpan, absoluteOffset) {
18885
18839
  const errors = [];
18886
- const ast = this._parseBindingAst(input, parseSourceSpan, absoluteOffset, interpolationConfig, errors);
18840
+ const ast = this._parseBindingAst(input, parseSourceSpan, absoluteOffset, errors);
18887
18841
  const simplExpressionErrors = this.checkSimpleExpression(ast);
18888
18842
  if (simplExpressionErrors.length > 0) {
18889
18843
  errors.push(getParseError(`Host binding expression cannot contain ${simplExpressionErrors.join(' ')}`, input, '', parseSourceSpan));
18890
18844
  }
18891
18845
  return new ASTWithSource(ast, input, getLocation(parseSourceSpan), absoluteOffset, errors);
18892
18846
  }
18893
- _parseBindingAst(input, parseSourceSpan, absoluteOffset, interpolationConfig, errors) {
18894
- this._checkNoInterpolation(errors, input, parseSourceSpan, interpolationConfig);
18847
+ _parseBindingAst(input, parseSourceSpan, absoluteOffset, errors) {
18848
+ this._checkNoInterpolation(errors, input, parseSourceSpan);
18895
18849
  const { stripped: sourceToLex } = this._stripComments(input);
18896
18850
  const tokens = this._lexer.tokenize(sourceToLex);
18897
18851
  return new _ParseAST(input, parseSourceSpan, absoluteOffset, tokens, 0 /* ParseFlags.None */, errors, 0, this._supportsDirectPipeReferences).parseChain();
@@ -18931,9 +18885,9 @@ class Parser {
18931
18885
  span: new AbsoluteSourceSpan(absoluteKeyOffset, absoluteKeyOffset + templateKey.length),
18932
18886
  });
18933
18887
  }
18934
- parseInterpolation(input, parseSourceSpan, absoluteOffset, interpolatedTokens, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18888
+ parseInterpolation(input, parseSourceSpan, absoluteOffset, interpolatedTokens) {
18935
18889
  const errors = [];
18936
- const { strings, expressions, offsets } = this.splitInterpolation(input, parseSourceSpan, errors, interpolatedTokens, interpolationConfig);
18890
+ const { strings, expressions, offsets } = this.splitInterpolation(input, parseSourceSpan, errors, interpolatedTokens);
18937
18891
  if (expressions.length === 0)
18938
18892
  return null;
18939
18893
  const expressionNodes = [];
@@ -18980,7 +18934,7 @@ class Parser {
18980
18934
  * `SplitInterpolation` with splits that look like
18981
18935
  * <raw text> <expression> <raw text> ... <raw text> <expression> <raw text>
18982
18936
  */
18983
- splitInterpolation(input, parseSourceSpan, errors, interpolatedTokens, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18937
+ splitInterpolation(input, parseSourceSpan, errors, interpolatedTokens) {
18984
18938
  const strings = [];
18985
18939
  const expressions = [];
18986
18940
  const offsets = [];
@@ -18990,7 +18944,8 @@ class Parser {
18990
18944
  let i = 0;
18991
18945
  let atInterpolation = false;
18992
18946
  let extendLastString = false;
18993
- let { start: interpStart, end: interpEnd } = interpolationConfig;
18947
+ const interpStart = '{{';
18948
+ const interpEnd = '}}';
18994
18949
  while (i < input.length) {
18995
18950
  if (!atInterpolation) {
18996
18951
  // parse until starting {{
@@ -19069,24 +19024,24 @@ class Parser {
19069
19024
  }
19070
19025
  return null;
19071
19026
  }
19072
- _checkNoInterpolation(errors, input, parseSourceSpan, { start, end }) {
19027
+ _checkNoInterpolation(errors, input, parseSourceSpan) {
19073
19028
  let startIndex = -1;
19074
19029
  let endIndex = -1;
19075
19030
  for (const charIndex of this._forEachUnquotedChar(input, 0)) {
19076
19031
  if (startIndex === -1) {
19077
- if (input.startsWith(start)) {
19032
+ if (input.startsWith('{{')) {
19078
19033
  startIndex = charIndex;
19079
19034
  }
19080
19035
  }
19081
19036
  else {
19082
- endIndex = this._getInterpolationEndIndex(input, end, charIndex);
19037
+ endIndex = this._getInterpolationEndIndex(input, '}}', charIndex);
19083
19038
  if (endIndex > -1) {
19084
19039
  break;
19085
19040
  }
19086
19041
  }
19087
19042
  }
19088
19043
  if (startIndex > -1 && endIndex > -1) {
19089
- errors.push(getParseError(`Got interpolation (${start}${end}) where expression was expected`, input, `at column ${startIndex} in`, parseSourceSpan));
19044
+ errors.push(getParseError(`Got interpolation ({{}}) where expression was expected`, input, `at column ${startIndex} in`, parseSourceSpan));
19090
19045
  }
19091
19046
  }
19092
19047
  /**
@@ -20072,6 +20027,7 @@ class _ParseAST {
20072
20027
  }
20073
20028
  else if (token.isTemplateLiteralInterpolationStart()) {
20074
20029
  this.advance();
20030
+ this.rbracesExpected++;
20075
20031
  const expression = this.parsePipe();
20076
20032
  if (expression instanceof EmptyExpr$1) {
20077
20033
  this.error('Template literal interpolation cannot be empty');
@@ -20079,6 +20035,7 @@ class _ParseAST {
20079
20035
  else {
20080
20036
  expressions.push(expression);
20081
20037
  }
20038
+ this.rbracesExpected--;
20082
20039
  }
20083
20040
  else {
20084
20041
  this.advance();
@@ -21252,10 +21209,10 @@ class PlaceholderRegistry {
21252
21209
 
21253
21210
  const _expParser = new Parser(new Lexer());
21254
21211
  /**
21255
- * Returns a function converting html nodes to an i18n Message given an interpolationConfig
21212
+ * Returns a function converting html nodes to an i18n Message
21256
21213
  */
21257
- function createI18nMessageFactory(interpolationConfig, containerBlocks, retainEmptyTokens, preserveExpressionWhitespace) {
21258
- const visitor = new _I18nVisitor(_expParser, interpolationConfig, containerBlocks, retainEmptyTokens, preserveExpressionWhitespace);
21214
+ function createI18nMessageFactory(containerBlocks, retainEmptyTokens, preserveExpressionWhitespace) {
21215
+ const visitor = new _I18nVisitor(_expParser, containerBlocks, retainEmptyTokens, preserveExpressionWhitespace);
21259
21216
  return (nodes, meaning, description, customId, visitNodeFn) => visitor.toI18nMessage(nodes, meaning, description, customId, visitNodeFn);
21260
21217
  }
21261
21218
  function noopVisitNodeFn(_html, i18n) {
@@ -21263,13 +21220,11 @@ function noopVisitNodeFn(_html, i18n) {
21263
21220
  }
21264
21221
  class _I18nVisitor {
21265
21222
  _expressionParser;
21266
- _interpolationConfig;
21267
21223
  _containerBlocks;
21268
21224
  _retainEmptyTokens;
21269
21225
  _preserveExpressionWhitespace;
21270
- constructor(_expressionParser, _interpolationConfig, _containerBlocks, _retainEmptyTokens, _preserveExpressionWhitespace) {
21226
+ constructor(_expressionParser, _containerBlocks, _retainEmptyTokens, _preserveExpressionWhitespace) {
21271
21227
  this._expressionParser = _expressionParser;
21272
- this._interpolationConfig = _interpolationConfig;
21273
21228
  this._containerBlocks = _containerBlocks;
21274
21229
  this._retainEmptyTokens = _retainEmptyTokens;
21275
21230
  this._preserveExpressionWhitespace = _preserveExpressionWhitespace;
@@ -21491,7 +21446,7 @@ class _I18nVisitor {
21491
21446
  const expression = token.parts[1];
21492
21447
  const expr = this._expressionParser.parseBinding(expression,
21493
21448
  /* location */ token.sourceSpan,
21494
- /* absoluteOffset */ token.sourceSpan.start.offset, this._interpolationConfig);
21449
+ /* absoluteOffset */ token.sourceSpan.start.offset);
21495
21450
  return serialize(expr);
21496
21451
  }
21497
21452
  }
@@ -21556,6 +21511,8 @@ function extractPlaceholderName(input) {
21556
21511
  return input.split(_CUSTOM_PH_EXP)[2];
21557
21512
  }
21558
21513
 
21514
+ const DEFAULT_CONTAINER_BLOCKS = new Set(['switch']);
21515
+
21559
21516
  /**
21560
21517
  * Set of tagName|propertyName corresponding to Trusted Types sinks. Properties applying to all
21561
21518
  * tags use '*'.
@@ -21617,7 +21574,6 @@ const setI18nRefs = (originalNodeMap) => {
21617
21574
  * stored with other element's and attribute's information.
21618
21575
  */
21619
21576
  class I18nMetaVisitor {
21620
- interpolationConfig;
21621
21577
  keepI18nAttrs;
21622
21578
  enableI18nLegacyMessageIdFormat;
21623
21579
  containerBlocks;
@@ -21626,7 +21582,7 @@ class I18nMetaVisitor {
21626
21582
  // whether visited nodes contain i18n information
21627
21583
  hasI18nMeta = false;
21628
21584
  _errors = [];
21629
- constructor(interpolationConfig = DEFAULT_INTERPOLATION_CONFIG, keepI18nAttrs = false, enableI18nLegacyMessageIdFormat = false, containerBlocks = DEFAULT_CONTAINER_BLOCKS, preserveSignificantWhitespace = true,
21585
+ constructor(keepI18nAttrs = false, enableI18nLegacyMessageIdFormat = false, containerBlocks = DEFAULT_CONTAINER_BLOCKS, preserveSignificantWhitespace = true,
21630
21586
  // When dropping significant whitespace we need to retain empty tokens or
21631
21587
  // else we won't be able to reuse source spans because empty tokens would be
21632
21588
  // removed and cause a mismatch. Unfortunately this still needs to be
@@ -21634,7 +21590,6 @@ class I18nMetaVisitor {
21634
21590
  // sure the number of nodes don't change between parses, even when
21635
21591
  // `preserveSignificantWhitespace` changes.
21636
21592
  retainEmptyTokens = !preserveSignificantWhitespace) {
21637
- this.interpolationConfig = interpolationConfig;
21638
21593
  this.keepI18nAttrs = keepI18nAttrs;
21639
21594
  this.enableI18nLegacyMessageIdFormat = enableI18nLegacyMessageIdFormat;
21640
21595
  this.containerBlocks = containerBlocks;
@@ -21643,7 +21598,7 @@ class I18nMetaVisitor {
21643
21598
  }
21644
21599
  _generateI18nMessage(nodes, meta = '', visitNodeFn) {
21645
21600
  const { meaning, description, customId } = this._parseMetadata(meta);
21646
- const createI18nMessage = createI18nMessageFactory(this.interpolationConfig, this.containerBlocks, this.retainEmptyTokens,
21601
+ const createI18nMessage = createI18nMessageFactory(this.containerBlocks, this.retainEmptyTokens,
21647
21602
  /* preserveExpressionWhitespace */ this.preserveSignificantWhitespace);
21648
21603
  const message = createI18nMessage(nodes, meaning, description, customId, visitNodeFn);
21649
21604
  this._setMessageId(message, meta);
@@ -27964,18 +27919,13 @@ const LEGACY_ANIMATE_PROP_PREFIX = 'animate-';
27964
27919
  */
27965
27920
  class BindingParser {
27966
27921
  _exprParser;
27967
- _interpolationConfig;
27968
27922
  _schemaRegistry;
27969
27923
  errors;
27970
- constructor(_exprParser, _interpolationConfig, _schemaRegistry, errors) {
27924
+ constructor(_exprParser, _schemaRegistry, errors) {
27971
27925
  this._exprParser = _exprParser;
27972
- this._interpolationConfig = _interpolationConfig;
27973
27926
  this._schemaRegistry = _schemaRegistry;
27974
27927
  this.errors = errors;
27975
27928
  }
27976
- get interpolationConfig() {
27977
- return this._interpolationConfig;
27978
- }
27979
27929
  createBoundHostProperties(properties, sourceSpan) {
27980
27930
  const boundProps = [];
27981
27931
  for (const propName of Object.keys(properties)) {
@@ -28019,7 +27969,7 @@ class BindingParser {
28019
27969
  parseInterpolation(value, sourceSpan, interpolatedTokens) {
28020
27970
  const absoluteOffset = sourceSpan.fullStart.offset;
28021
27971
  try {
28022
- const ast = this._exprParser.parseInterpolation(value, sourceSpan, absoluteOffset, interpolatedTokens, this._interpolationConfig);
27972
+ const ast = this._exprParser.parseInterpolation(value, sourceSpan, absoluteOffset, interpolatedTokens);
28023
27973
  if (ast) {
28024
27974
  this.errors.push(...ast.errors);
28025
27975
  }
@@ -28191,8 +28141,8 @@ class BindingParser {
28191
28141
  parseBinding(value, isHostBinding, sourceSpan, absoluteOffset) {
28192
28142
  try {
28193
28143
  const ast = isHostBinding
28194
- ? this._exprParser.parseSimpleBinding(value, sourceSpan, absoluteOffset, this._interpolationConfig)
28195
- : this._exprParser.parseBinding(value, sourceSpan, absoluteOffset, this._interpolationConfig);
28144
+ ? this._exprParser.parseSimpleBinding(value, sourceSpan, absoluteOffset)
28145
+ : this._exprParser.parseBinding(value, sourceSpan, absoluteOffset);
28196
28146
  if (ast) {
28197
28147
  this.errors.push(...ast.errors);
28198
28148
  }
@@ -28327,7 +28277,7 @@ class BindingParser {
28327
28277
  _parseAction(value, sourceSpan) {
28328
28278
  const absoluteOffset = sourceSpan && sourceSpan.start ? sourceSpan.start.offset : 0;
28329
28279
  try {
28330
- const ast = this._exprParser.parseAction(value, sourceSpan, absoluteOffset, this._interpolationConfig);
28280
+ const ast = this._exprParser.parseAction(value, sourceSpan, absoluteOffset);
28331
28281
  if (ast) {
28332
28282
  this.errors.push(...ast.errors);
28333
28283
  }
@@ -29593,6 +29543,13 @@ class HtmlAstToIvyAst {
29593
29543
  }
29594
29544
  else {
29595
29545
  const attrs = this.categorizePropertyAttributes(element.name, parsedProperties, i18nAttrsMeta);
29546
+ if (element.name === 'ng-container') {
29547
+ for (const bound of attrs.bound) {
29548
+ if (bound.type === exports.BindingType.Attribute) {
29549
+ this.reportError(`Attribute bindings are not supported on ng-container. Use property bindings instead.`, bound.sourceSpan);
29550
+ }
29551
+ }
29552
+ }
29596
29553
  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);
29597
29554
  }
29598
29555
  if (elementHasInlineTemplate) {
@@ -30177,9 +30134,9 @@ const LEADING_TRIVIA_CHARS = [' ', '\n', '\r', '\t'];
30177
30134
  * @param options options to modify how the template is parsed
30178
30135
  */
30179
30136
  function parseTemplate(template, templateUrl, options = {}) {
30180
- const { interpolationConfig, preserveWhitespaces, enableI18nLegacyMessageIdFormat } = options;
30137
+ const { preserveWhitespaces, enableI18nLegacyMessageIdFormat } = options;
30181
30138
  const selectorlessEnabled = options.enableSelectorless ?? false;
30182
- const bindingParser = makeBindingParser(interpolationConfig, selectorlessEnabled);
30139
+ const bindingParser = makeBindingParser(selectorlessEnabled);
30183
30140
  const htmlParser = new HtmlParser();
30184
30141
  const parseResult = htmlParser.parse(template, templateUrl, {
30185
30142
  leadingTriviaChars: LEADING_TRIVIA_CHARS,
@@ -30193,7 +30150,6 @@ function parseTemplate(template, templateUrl, options = {}) {
30193
30150
  parseResult.errors &&
30194
30151
  parseResult.errors.length > 0) {
30195
30152
  const parsedTemplate = {
30196
- interpolationConfig,
30197
30153
  preserveWhitespaces,
30198
30154
  errors: parseResult.errors,
30199
30155
  nodes: [],
@@ -30216,7 +30172,7 @@ function parseTemplate(template, templateUrl, options = {}) {
30216
30172
  // before we run whitespace removal process, because existing i18n
30217
30173
  // extraction process (ng extract-i18n) relies on a raw content to generate
30218
30174
  // message ids
30219
- const i18nMetaVisitor = new I18nMetaVisitor(interpolationConfig,
30175
+ const i18nMetaVisitor = new I18nMetaVisitor(
30220
30176
  /* keepI18nAttrs */ !preserveWhitespaces, enableI18nLegacyMessageIdFormat,
30221
30177
  /* containerBlocks */ undefined, options.preserveSignificantWhitespace, retainEmptyTokens);
30222
30178
  const i18nMetaResult = i18nMetaVisitor.visitAllWithErrors(rootNodes);
@@ -30224,7 +30180,6 @@ function parseTemplate(template, templateUrl, options = {}) {
30224
30180
  i18nMetaResult.errors &&
30225
30181
  i18nMetaResult.errors.length > 0) {
30226
30182
  const parsedTemplate = {
30227
- interpolationConfig,
30228
30183
  preserveWhitespaces,
30229
30184
  errors: i18nMetaResult.errors,
30230
30185
  nodes: [],
@@ -30259,7 +30214,7 @@ function parseTemplate(template, templateUrl, options = {}) {
30259
30214
  // template. During this pass i18n IDs generated at the first pass will be preserved, so we can
30260
30215
  // mimic existing extraction process (ng extract-i18n)
30261
30216
  if (i18nMetaVisitor.hasI18nMeta) {
30262
- rootNodes = visitAll(new I18nMetaVisitor(interpolationConfig,
30217
+ rootNodes = visitAll(new I18nMetaVisitor(
30263
30218
  /* keepI18nAttrs */ false,
30264
30219
  /* enableI18nLegacyMessageIdFormat */ undefined,
30265
30220
  /* containerBlocks */ undefined,
@@ -30269,7 +30224,6 @@ function parseTemplate(template, templateUrl, options = {}) {
30269
30224
  const { nodes, errors, styleUrls, styles, ngContentSelectors, commentNodes } = htmlAstToRender3Ast(rootNodes, bindingParser, { collectCommentNodes: !!options.collectCommentNodes });
30270
30225
  errors.push(...parseResult.errors, ...i18nMetaResult.errors);
30271
30226
  const parsedTemplate = {
30272
- interpolationConfig,
30273
30227
  preserveWhitespaces,
30274
30228
  errors: errors.length > 0 ? errors : null,
30275
30229
  nodes,
@@ -30286,8 +30240,8 @@ const elementRegistry = new DomElementSchemaRegistry();
30286
30240
  /**
30287
30241
  * Construct a `BindingParser` with a default configuration.
30288
30242
  */
30289
- function makeBindingParser(interpolationConfig = DEFAULT_INTERPOLATION_CONFIG, selectorlessEnabled = false) {
30290
- return new BindingParser(new Parser(new Lexer(), selectorlessEnabled), interpolationConfig, elementRegistry, []);
30243
+ function makeBindingParser(selectorlessEnabled = false) {
30244
+ return new BindingParser(new Parser(new Lexer(), selectorlessEnabled), elementRegistry, []);
30291
30245
  }
30292
30246
 
30293
30247
  const COMPONENT_VARIABLE = '%COMP%';
@@ -31927,7 +31881,7 @@ class CompilerFacadeImpl {
31927
31881
  }
31928
31882
  compileComponent(angularCoreEnv, sourceMapUrl, facade) {
31929
31883
  // Parse the template and check for errors.
31930
- const { template, interpolation, defer } = parseJitTemplate(facade.template, facade.name, sourceMapUrl, facade.preserveWhitespaces, facade.interpolation, undefined);
31884
+ const { template, defer } = parseJitTemplate(facade.template, facade.name, sourceMapUrl, facade.preserveWhitespaces, undefined);
31931
31885
  // Compile the component metadata, including template, into an expression.
31932
31886
  const meta = {
31933
31887
  ...facade,
@@ -31939,7 +31893,6 @@ class CompilerFacadeImpl {
31939
31893
  defer,
31940
31894
  styles: [...facade.styles, ...template.styles],
31941
31895
  encapsulation: facade.encapsulation,
31942
- interpolation,
31943
31896
  changeDetection: facade.changeDetection ?? null,
31944
31897
  animations: facade.animations != null ? new WrappedNodeExpr(facade.animations) : null,
31945
31898
  viewProviders: facade.viewProviders != null ? new WrappedNodeExpr(facade.viewProviders) : null,
@@ -31957,7 +31910,7 @@ class CompilerFacadeImpl {
31957
31910
  }
31958
31911
  compileComponentFromMeta(angularCoreEnv, sourceMapUrl, meta) {
31959
31912
  const constantPool = new ConstantPool();
31960
- const bindingParser = makeBindingParser(meta.interpolation);
31913
+ const bindingParser = makeBindingParser();
31961
31914
  const res = compileComponentFromMetadata(meta, constantPool, bindingParser);
31962
31915
  return this.jitExpression(res.expression, angularCoreEnv, sourceMapUrl, constantPool.statements);
31963
31916
  }
@@ -32163,7 +32116,7 @@ function convertOpaqueValuesToExpressions(obj) {
32163
32116
  return result;
32164
32117
  }
32165
32118
  function convertDeclareComponentFacadeToMetadata(decl, typeSourceSpan, sourceMapUrl) {
32166
- const { template, interpolation, defer } = parseJitTemplate(decl.template, decl.type.name, sourceMapUrl, decl.preserveWhitespaces ?? false, decl.interpolation, decl.deferBlockDependencies);
32119
+ const { template, defer } = parseJitTemplate(decl.template, decl.type.name, sourceMapUrl, decl.preserveWhitespaces ?? false, decl.deferBlockDependencies);
32167
32120
  const declarations = [];
32168
32121
  if (decl.dependencies) {
32169
32122
  for (const innerDep of decl.dependencies) {
@@ -32198,7 +32151,6 @@ function convertDeclareComponentFacadeToMetadata(decl, typeSourceSpan, sourceMap
32198
32151
  defer,
32199
32152
  changeDetection: decl.changeDetection ?? exports.ChangeDetectionStrategy.Default,
32200
32153
  encapsulation: decl.encapsulation ?? exports.ViewEncapsulation.Emulated,
32201
- interpolation,
32202
32154
  declarationListEmitMode: 2 /* DeclarationListEmitMode.ClosureResolved */,
32203
32155
  relativeContextFilePath: '',
32204
32156
  i18nUseExternalIds: true,
@@ -32242,15 +32194,9 @@ function convertPipeDeclarationToMetadata(pipe) {
32242
32194
  type: new WrappedNodeExpr(pipe.type),
32243
32195
  };
32244
32196
  }
32245
- function parseJitTemplate(template, typeName, sourceMapUrl, preserveWhitespaces, interpolation, deferBlockDependencies) {
32246
- const interpolationConfig = interpolation
32247
- ? InterpolationConfig.fromArray(interpolation)
32248
- : DEFAULT_INTERPOLATION_CONFIG;
32197
+ function parseJitTemplate(template, typeName, sourceMapUrl, preserveWhitespaces, deferBlockDependencies) {
32249
32198
  // Parse the template and check for errors.
32250
- const parsed = parseTemplate(template, sourceMapUrl, {
32251
- preserveWhitespaces,
32252
- interpolationConfig,
32253
- });
32199
+ const parsed = parseTemplate(template, sourceMapUrl, { preserveWhitespaces });
32254
32200
  if (parsed.errors !== null) {
32255
32201
  const errors = parsed.errors.map((err) => err.toString()).join(', ');
32256
32202
  throw new Error(`Errors during JIT compilation of template for ${typeName}: ${errors}`);
@@ -32259,7 +32205,6 @@ function parseJitTemplate(template, typeName, sourceMapUrl, preserveWhitespaces,
32259
32205
  const boundTarget = binder.bind({ template: parsed.nodes });
32260
32206
  return {
32261
32207
  template: parsed,
32262
- interpolation: interpolationConfig,
32263
32208
  defer: createR3ComponentDeferMetadata(boundTarget, deferBlockDependencies),
32264
32209
  };
32265
32210
  }
@@ -32483,9 +32428,9 @@ let i18nCommentsWarned = false;
32483
32428
  /**
32484
32429
  * Extract translatable messages from an html AST
32485
32430
  */
32486
- function extractMessages(nodes, interpolationConfig, implicitTags, implicitAttrs, preserveSignificantWhitespace) {
32431
+ function extractMessages(nodes, implicitTags, implicitAttrs, preserveSignificantWhitespace) {
32487
32432
  const visitor = new _Visitor(implicitTags, implicitAttrs, preserveSignificantWhitespace);
32488
- return visitor.extract(nodes, interpolationConfig);
32433
+ return visitor.extract(nodes);
32489
32434
  }
32490
32435
  class ExtractionResult {
32491
32436
  messages;
@@ -32540,8 +32485,8 @@ class _Visitor {
32540
32485
  /**
32541
32486
  * Extracts the messages from the tree
32542
32487
  */
32543
- extract(nodes, interpolationConfig) {
32544
- this._init(_VisitorMode.Extract, interpolationConfig);
32488
+ extract(nodes) {
32489
+ this._init(_VisitorMode.Extract);
32545
32490
  nodes.forEach((node) => node.visit(this, null));
32546
32491
  if (this._inI18nBlock) {
32547
32492
  this._reportError(nodes[nodes.length - 1], 'Unclosed block');
@@ -32551,8 +32496,8 @@ class _Visitor {
32551
32496
  /**
32552
32497
  * Returns a tree where all translatable nodes are translated
32553
32498
  */
32554
- merge(nodes, translations, interpolationConfig) {
32555
- this._init(_VisitorMode.Merge, interpolationConfig);
32499
+ merge(nodes, translations) {
32500
+ this._init(_VisitorMode.Merge);
32556
32501
  this._translations = translations;
32557
32502
  // Construct a single fake root element
32558
32503
  const wrapper = new Element('wrapper', [], [], nodes, false, undefined, undefined, undefined, false);
@@ -32657,7 +32602,7 @@ class _Visitor {
32657
32602
  visitDirective(directive, context) {
32658
32603
  throw new Error('unreachable code');
32659
32604
  }
32660
- _init(mode, interpolationConfig) {
32605
+ _init(mode) {
32661
32606
  this._mode = mode;
32662
32607
  this._inI18nBlock = false;
32663
32608
  this._inI18nNode = false;
@@ -32667,7 +32612,7 @@ class _Visitor {
32667
32612
  this._errors = [];
32668
32613
  this._messages = [];
32669
32614
  this._inImplicitNode = false;
32670
- this._createI18nMessage = createI18nMessageFactory(interpolationConfig, DEFAULT_CONTAINER_BLOCKS,
32615
+ this._createI18nMessage = createI18nMessageFactory(DEFAULT_CONTAINER_BLOCKS,
32671
32616
  // When dropping significant whitespace we need to retain whitespace tokens or
32672
32617
  // else we won't be able to reuse source spans because empty tokens would be
32673
32618
  // removed and cause a mismatch.
@@ -32964,7 +32909,7 @@ function isAttrNode(ast) {
32964
32909
  * @description
32965
32910
  * Entry point for all public APIs of the compiler package.
32966
32911
  */
32967
- const VERSION = new Version('21.0.0-next.5');
32912
+ const VERSION = new Version('21.0.0-next.6');
32968
32913
 
32969
32914
  //////////////////////////////////////
32970
32915
  // THIS FILE HAS GLOBAL SIDE EFFECT //
@@ -34027,7 +33972,7 @@ class NodeJSPathManipulation {
34027
33972
  // G3-ESM-MARKER: G3 uses CommonJS, but externally everything in ESM.
34028
33973
  // CommonJS/ESM interop for determining the current file name and containing dir.
34029
33974
  const isCommonJS = typeof __filename !== 'undefined';
34030
- 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-DX9KHLn9.cjs', document.baseURI).href));
33975
+ 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-sFatqIE5.cjs', document.baseURI).href));
34031
33976
  // Note, when this code loads in the browser, `url` may be an empty `{}` due to the Closure shims.
34032
33977
  const currentFileName = isCommonJS
34033
33978
  ? __filename
@@ -51042,7 +50987,6 @@ exports.Conditional = Conditional;
51042
50987
  exports.ConstantPool = ConstantPool;
51043
50988
  exports.Container = Container;
51044
50989
  exports.CssSelector = CssSelector;
51045
- exports.DEFAULT_INTERPOLATION_CONFIG = DEFAULT_INTERPOLATION_CONFIG;
51046
50990
  exports.DYNAMIC_TYPE = DYNAMIC_TYPE;
51047
50991
  exports.Declaration = Declaration;
51048
50992
  exports.DeclareFunctionStmt = DeclareFunctionStmt;
@@ -51071,7 +51015,6 @@ exports.IfBlock = IfBlock;
51071
51015
  exports.ImplicitReceiver = ImplicitReceiver;
51072
51016
  exports.ImportManager = ImportManager;
51073
51017
  exports.Interpolation = Interpolation$1;
51074
- exports.InterpolationConfig = InterpolationConfig;
51075
51018
  exports.InvokeFunctionExpr = InvokeFunctionExpr;
51076
51019
  exports.KeyedRead = KeyedRead;
51077
51020
  exports.KnownFn = KnownFn;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0-next.5
3
+ * @license Angular v21.0.0-next.6
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 v21.0.0-next.5
3
+ * @license Angular v21.0.0-next.6
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-Aouk-n4F.cjs');
13
- var project_tsconfig_paths = require('./project_tsconfig_paths-DX9KHLn9.cjs');
12
+ var compiler_host = require('./compiler_host-BJEh7-L1.cjs');
13
+ var project_tsconfig_paths = require('./project_tsconfig_paths-sFatqIE5.cjs');
14
14
  var ts = require('typescript');
15
15
  var property_name = require('./property_name-BBwFuqMe.cjs');
16
16
  require('os');