@angular/compiler 20.1.0-next.2 → 20.1.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v20.1.0-next.2
2
+ * @license Angular v20.1.0-rc.0
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -961,6 +961,15 @@ var BinaryOperator;
961
961
  BinaryOperator[BinaryOperator["NullishCoalesce"] = 18] = "NullishCoalesce";
962
962
  BinaryOperator[BinaryOperator["Exponentiation"] = 19] = "Exponentiation";
963
963
  BinaryOperator[BinaryOperator["In"] = 20] = "In";
964
+ BinaryOperator[BinaryOperator["AdditionAssignment"] = 21] = "AdditionAssignment";
965
+ BinaryOperator[BinaryOperator["SubtractionAssignment"] = 22] = "SubtractionAssignment";
966
+ BinaryOperator[BinaryOperator["MultiplicationAssignment"] = 23] = "MultiplicationAssignment";
967
+ BinaryOperator[BinaryOperator["DivisionAssignment"] = 24] = "DivisionAssignment";
968
+ BinaryOperator[BinaryOperator["RemainderAssignment"] = 25] = "RemainderAssignment";
969
+ BinaryOperator[BinaryOperator["ExponentiationAssignment"] = 26] = "ExponentiationAssignment";
970
+ BinaryOperator[BinaryOperator["AndAssignment"] = 27] = "AndAssignment";
971
+ BinaryOperator[BinaryOperator["OrAssignment"] = 28] = "OrAssignment";
972
+ BinaryOperator[BinaryOperator["NullishCoalesceAssignment"] = 29] = "NullishCoalesceAssignment";
964
973
  })(BinaryOperator || (BinaryOperator = {}));
965
974
  function nullSafeIsEquivalent(base, other) {
966
975
  if (base == null || other == null) {
@@ -1680,6 +1689,19 @@ class BinaryOperatorExpr extends Expression {
1680
1689
  clone() {
1681
1690
  return new BinaryOperatorExpr(this.operator, this.lhs.clone(), this.rhs.clone(), this.type, this.sourceSpan);
1682
1691
  }
1692
+ isAssignment() {
1693
+ const op = this.operator;
1694
+ return (op === BinaryOperator.Assign ||
1695
+ op === BinaryOperator.AdditionAssignment ||
1696
+ op === BinaryOperator.SubtractionAssignment ||
1697
+ op === BinaryOperator.MultiplicationAssignment ||
1698
+ op === BinaryOperator.DivisionAssignment ||
1699
+ op === BinaryOperator.RemainderAssignment ||
1700
+ op === BinaryOperator.ExponentiationAssignment ||
1701
+ op === BinaryOperator.AndAssignment ||
1702
+ op === BinaryOperator.OrAssignment ||
1703
+ op === BinaryOperator.NullishCoalesceAssignment);
1704
+ }
1683
1705
  }
1684
1706
  class ReadPropExpr extends Expression {
1685
1707
  receiver;
@@ -2596,6 +2618,23 @@ class Identifiers {
2596
2618
  static element = { name: 'ɵɵelement', moduleName: CORE };
2597
2619
  static elementStart = { name: 'ɵɵelementStart', moduleName: CORE };
2598
2620
  static elementEnd = { name: 'ɵɵelementEnd', moduleName: CORE };
2621
+ static domElement = { name: 'ɵɵdomElement', moduleName: CORE };
2622
+ static domElementStart = { name: 'ɵɵdomElementStart', moduleName: CORE };
2623
+ static domElementEnd = { name: 'ɵɵdomElementEnd', moduleName: CORE };
2624
+ static domElementContainer = {
2625
+ name: 'ɵɵdomElementContainer',
2626
+ moduleName: CORE,
2627
+ };
2628
+ static domElementContainerStart = {
2629
+ name: 'ɵɵdomElementContainerStart',
2630
+ moduleName: CORE,
2631
+ };
2632
+ static domElementContainerEnd = {
2633
+ name: 'ɵɵdomElementContainerEnd',
2634
+ moduleName: CORE,
2635
+ };
2636
+ static domTemplate = { name: 'ɵɵdomTemplate', moduleName: CORE };
2637
+ static domListener = { name: 'ɵɵdomListener', moduleName: CORE };
2599
2638
  static advance = { name: 'ɵɵadvance', moduleName: CORE };
2600
2639
  static syntheticHostProperty = {
2601
2640
  name: 'ɵɵsyntheticHostProperty',
@@ -3210,6 +3249,38 @@ class _EmittedLine {
3210
3249
  this.indent = indent;
3211
3250
  }
3212
3251
  }
3252
+ const BINARY_OPERATORS$1 = new Map([
3253
+ [BinaryOperator.And, '&&'],
3254
+ [BinaryOperator.Bigger, '>'],
3255
+ [BinaryOperator.BiggerEquals, '>='],
3256
+ [BinaryOperator.BitwiseOr, '|'],
3257
+ [BinaryOperator.BitwiseAnd, '&'],
3258
+ [BinaryOperator.Divide, '/'],
3259
+ [BinaryOperator.Assign, '='],
3260
+ [BinaryOperator.Equals, '=='],
3261
+ [BinaryOperator.Identical, '==='],
3262
+ [BinaryOperator.Lower, '<'],
3263
+ [BinaryOperator.LowerEquals, '<='],
3264
+ [BinaryOperator.Minus, '-'],
3265
+ [BinaryOperator.Modulo, '%'],
3266
+ [BinaryOperator.Exponentiation, '**'],
3267
+ [BinaryOperator.Multiply, '*'],
3268
+ [BinaryOperator.NotEquals, '!='],
3269
+ [BinaryOperator.NotIdentical, '!=='],
3270
+ [BinaryOperator.NullishCoalesce, '??'],
3271
+ [BinaryOperator.Or, '||'],
3272
+ [BinaryOperator.Plus, '+'],
3273
+ [BinaryOperator.In, 'in'],
3274
+ [BinaryOperator.AdditionAssignment, '+='],
3275
+ [BinaryOperator.SubtractionAssignment, '-='],
3276
+ [BinaryOperator.MultiplicationAssignment, '*='],
3277
+ [BinaryOperator.DivisionAssignment, '/='],
3278
+ [BinaryOperator.RemainderAssignment, '%='],
3279
+ [BinaryOperator.ExponentiationAssignment, '**='],
3280
+ [BinaryOperator.AndAssignment, '&&='],
3281
+ [BinaryOperator.OrAssignment, '||='],
3282
+ [BinaryOperator.NullishCoalesceAssignment, '??='],
3283
+ ]);
3213
3284
  class EmitterVisitorContext {
3214
3285
  _indent;
3215
3286
  static createRoot() {
@@ -3532,79 +3603,15 @@ class AbstractEmitterVisitor {
3532
3603
  return null;
3533
3604
  }
3534
3605
  visitBinaryOperatorExpr(ast, ctx) {
3535
- let opStr;
3536
- switch (ast.operator) {
3537
- case BinaryOperator.Assign:
3538
- opStr = '=';
3539
- break;
3540
- case BinaryOperator.Equals:
3541
- opStr = '==';
3542
- break;
3543
- case BinaryOperator.Identical:
3544
- opStr = '===';
3545
- break;
3546
- case BinaryOperator.NotEquals:
3547
- opStr = '!=';
3548
- break;
3549
- case BinaryOperator.NotIdentical:
3550
- opStr = '!==';
3551
- break;
3552
- case BinaryOperator.And:
3553
- opStr = '&&';
3554
- break;
3555
- case BinaryOperator.BitwiseOr:
3556
- opStr = '|';
3557
- break;
3558
- case BinaryOperator.BitwiseAnd:
3559
- opStr = '&';
3560
- break;
3561
- case BinaryOperator.Or:
3562
- opStr = '||';
3563
- break;
3564
- case BinaryOperator.Plus:
3565
- opStr = '+';
3566
- break;
3567
- case BinaryOperator.Minus:
3568
- opStr = '-';
3569
- break;
3570
- case BinaryOperator.Divide:
3571
- opStr = '/';
3572
- break;
3573
- case BinaryOperator.Multiply:
3574
- opStr = '*';
3575
- break;
3576
- case BinaryOperator.Modulo:
3577
- opStr = '%';
3578
- break;
3579
- case BinaryOperator.Exponentiation:
3580
- opStr = '**';
3581
- break;
3582
- case BinaryOperator.Lower:
3583
- opStr = '<';
3584
- break;
3585
- case BinaryOperator.LowerEquals:
3586
- opStr = '<=';
3587
- break;
3588
- case BinaryOperator.Bigger:
3589
- opStr = '>';
3590
- break;
3591
- case BinaryOperator.BiggerEquals:
3592
- opStr = '>=';
3593
- break;
3594
- case BinaryOperator.NullishCoalesce:
3595
- opStr = '??';
3596
- break;
3597
- case BinaryOperator.In:
3598
- opStr = 'in';
3599
- break;
3600
- default:
3601
- throw new Error(`Unknown operator ${ast.operator}`);
3606
+ const operator = BINARY_OPERATORS$1.get(ast.operator);
3607
+ if (!operator) {
3608
+ throw new Error(`Unknown operator ${ast.operator}`);
3602
3609
  }
3603
3610
  const parens = ast !== this.lastIfCondition;
3604
3611
  if (parens)
3605
3612
  ctx.print(ast, `(`);
3606
3613
  ast.lhs.visitExpression(this, ctx);
3607
- ctx.print(ast, ` ${opStr} `);
3614
+ ctx.print(ast, ` ${operator} `);
3608
3615
  ast.rhs.visitExpression(this, ctx);
3609
3616
  if (parens)
3610
3617
  ctx.print(ast, `)`);
@@ -3969,18 +3976,6 @@ function getInjectFn(target) {
3969
3976
  }
3970
3977
  }
3971
3978
 
3972
- class ParserError {
3973
- input;
3974
- errLocation;
3975
- ctxLocation;
3976
- message;
3977
- constructor(message, input, errLocation, ctxLocation) {
3978
- this.input = input;
3979
- this.errLocation = errLocation;
3980
- this.ctxLocation = ctxLocation;
3981
- this.message = `Parser Error: ${message} ${errLocation} [${input}] in ${ctxLocation}`;
3982
- }
3983
- }
3984
3979
  class ParseSpan {
3985
3980
  start;
3986
3981
  end;
@@ -4199,6 +4194,18 @@ class Binary extends AST {
4199
4194
  visit(visitor, context = null) {
4200
4195
  return visitor.visitBinary(this, context);
4201
4196
  }
4197
+ static isAssignmentOperation(op) {
4198
+ return (op === '=' ||
4199
+ op === '+=' ||
4200
+ op === '-=' ||
4201
+ op === '*=' ||
4202
+ op === '/=' ||
4203
+ op === '%=' ||
4204
+ op === '**=' ||
4205
+ op === '&&=' ||
4206
+ op === '||=' ||
4207
+ op === '??=');
4208
+ }
4202
4209
  }
4203
4210
  /**
4204
4211
  * For backwards compatibility reasons, `Unary` inherits from `Binary` and mimics the binary AST
@@ -4529,7 +4536,7 @@ class ParsedProperty {
4529
4536
  keySpan;
4530
4537
  valueSpan;
4531
4538
  isLiteral;
4532
- isAnimation;
4539
+ isLegacyAnimation;
4533
4540
  constructor(name, expression, type, sourceSpan, keySpan, valueSpan) {
4534
4541
  this.name = name;
4535
4542
  this.expression = expression;
@@ -4538,22 +4545,22 @@ class ParsedProperty {
4538
4545
  this.keySpan = keySpan;
4539
4546
  this.valueSpan = valueSpan;
4540
4547
  this.isLiteral = this.type === ParsedPropertyType.LITERAL_ATTR;
4541
- this.isAnimation = this.type === ParsedPropertyType.ANIMATION;
4548
+ this.isLegacyAnimation = this.type === ParsedPropertyType.LEGACY_ANIMATION;
4542
4549
  }
4543
4550
  }
4544
4551
  var ParsedPropertyType;
4545
4552
  (function (ParsedPropertyType) {
4546
4553
  ParsedPropertyType[ParsedPropertyType["DEFAULT"] = 0] = "DEFAULT";
4547
4554
  ParsedPropertyType[ParsedPropertyType["LITERAL_ATTR"] = 1] = "LITERAL_ATTR";
4548
- ParsedPropertyType[ParsedPropertyType["ANIMATION"] = 2] = "ANIMATION";
4555
+ ParsedPropertyType[ParsedPropertyType["LEGACY_ANIMATION"] = 2] = "LEGACY_ANIMATION";
4549
4556
  ParsedPropertyType[ParsedPropertyType["TWO_WAY"] = 3] = "TWO_WAY";
4550
4557
  })(ParsedPropertyType || (ParsedPropertyType = {}));
4551
4558
  var ParsedEventType;
4552
4559
  (function (ParsedEventType) {
4553
4560
  // DOM or Directive event
4554
4561
  ParsedEventType[ParsedEventType["Regular"] = 0] = "Regular";
4555
- // Animation specific event
4556
- ParsedEventType[ParsedEventType["Animation"] = 1] = "Animation";
4562
+ // Legacy animation specific event
4563
+ ParsedEventType[ParsedEventType["LegacyAnimation"] = 1] = "LegacyAnimation";
4557
4564
  // Event side of a two-way binding (e.g. `[(property)]="expression"`).
4558
4565
  ParsedEventType[ParsedEventType["TwoWay"] = 2] = "TwoWay";
4559
4566
  })(ParsedEventType || (ParsedEventType = {}));
@@ -4602,8 +4609,8 @@ var BindingType;
4602
4609
  BindingType[BindingType["Class"] = 2] = "Class";
4603
4610
  // A binding to a style rule (e.g. `[style.rule]="expression"`).
4604
4611
  BindingType[BindingType["Style"] = 3] = "Style";
4605
- // A binding to an animation reference (e.g. `[animate.key]="expression"`).
4606
- BindingType[BindingType["Animation"] = 4] = "Animation";
4612
+ // A binding to a legacy animation reference (e.g. `[animate.key]="expression"`).
4613
+ BindingType[BindingType["LegacyAnimation"] = 4] = "LegacyAnimation";
4607
4614
  // Property side of a two-way binding (e.g. `[(property)]="expression"`).
4608
4615
  BindingType[BindingType["TwoWay"] = 5] = "TwoWay";
4609
4616
  })(BindingType || (BindingType = {}));
@@ -4786,7 +4793,7 @@ class BoundEvent {
4786
4793
  }
4787
4794
  static fromParsedEvent(event) {
4788
4795
  const target = event.type === ParsedEventType.Regular ? event.targetOrPhase : null;
4789
- const phase = event.type === ParsedEventType.Animation ? event.targetOrPhase : null;
4796
+ const phase = event.type === ParsedEventType.LegacyAnimation ? event.targetOrPhase : null;
4790
4797
  if (event.keySpan === undefined) {
4791
4798
  throw new Error(`Unexpected state: keySpan must be defined for bound event but was not for ${event.name}: ${event.sourceSpan}`);
4792
4799
  }
@@ -8912,9 +8919,9 @@ var BindingKind;
8912
8919
  */
8913
8920
  BindingKind[BindingKind["I18n"] = 5] = "I18n";
8914
8921
  /**
8915
- * Animation property bindings.
8922
+ * Legacy animation property bindings.
8916
8923
  */
8917
- BindingKind[BindingKind["Animation"] = 6] = "Animation";
8924
+ BindingKind[BindingKind["LegacyAnimation"] = 6] = "LegacyAnimation";
8918
8925
  /**
8919
8926
  * Property side of a two-way binding.
8920
8927
  */
@@ -9159,13 +9166,13 @@ function createBindingOp(target, kind, name, expression, unit, securityContext,
9159
9166
  /**
9160
9167
  * Create a `PropertyOp`.
9161
9168
  */
9162
- function createPropertyOp(target, name, expression, isAnimationTrigger, securityContext, isStructuralTemplateAttribute, templateKind, i18nContext, i18nMessage, sourceSpan) {
9169
+ function createPropertyOp(target, name, expression, isLegacyAnimationTrigger, securityContext, isStructuralTemplateAttribute, templateKind, i18nContext, i18nMessage, sourceSpan) {
9163
9170
  return {
9164
9171
  kind: OpKind.Property,
9165
9172
  target,
9166
9173
  name,
9167
9174
  expression,
9168
- isAnimationTrigger,
9175
+ isLegacyAnimationTrigger,
9169
9176
  securityContext,
9170
9177
  sanitizer: null,
9171
9178
  isStructuralTemplateAttribute,
@@ -10852,7 +10859,7 @@ function createTextOp(xref, initialValue, icuPlaceholder, sourceSpan) {
10852
10859
  /**
10853
10860
  * Create a `ListenerOp`. Host bindings reuse all the listener logic.
10854
10861
  */
10855
- function createListenerOp(target, targetSlot, name, tag, handlerOps, animationPhase, eventTarget, hostListener, sourceSpan) {
10862
+ function createListenerOp(target, targetSlot, name, tag, handlerOps, legacyAnimationPhase, eventTarget, hostListener, sourceSpan) {
10856
10863
  const handlerList = new OpList();
10857
10864
  handlerList.push(handlerOps);
10858
10865
  return {
@@ -10865,8 +10872,8 @@ function createListenerOp(target, targetSlot, name, tag, handlerOps, animationPh
10865
10872
  handlerOps: handlerList,
10866
10873
  handlerFnName: null,
10867
10874
  consumesDollarEvent: false,
10868
- isAnimationListener: animationPhase !== null,
10869
- animationPhase,
10875
+ isLegacyAnimationListener: legacyAnimationPhase !== null,
10876
+ legacyAnimationPhase: legacyAnimationPhase,
10870
10877
  eventTarget,
10871
10878
  sourceSpan,
10872
10879
  ...NEW_OP,
@@ -11121,12 +11128,12 @@ function createSourceLocationOp(templatePath, locations) {
11121
11128
  };
11122
11129
  }
11123
11130
 
11124
- function createDomPropertyOp(name, expression, isAnimationTrigger, i18nContext, securityContext, sourceSpan) {
11131
+ function createDomPropertyOp(name, expression, isLegacyAnimationTrigger, i18nContext, securityContext, sourceSpan) {
11125
11132
  return {
11126
11133
  kind: OpKind.DomProperty,
11127
11134
  name,
11128
11135
  expression,
11129
- isAnimationTrigger,
11136
+ isLegacyAnimationTrigger,
11130
11137
  i18nContext,
11131
11138
  securityContext,
11132
11139
  sanitizer: null,
@@ -11148,6 +11155,14 @@ var CompilationJobKind;
11148
11155
  CompilationJobKind[CompilationJobKind["Host"] = 1] = "Host";
11149
11156
  CompilationJobKind[CompilationJobKind["Both"] = 2] = "Both";
11150
11157
  })(CompilationJobKind || (CompilationJobKind = {}));
11158
+ /** Possible modes in which a component's template can be compiled. */
11159
+ var TemplateCompilationMode;
11160
+ (function (TemplateCompilationMode) {
11161
+ /** Supports the full instruction set, including directives. */
11162
+ TemplateCompilationMode[TemplateCompilationMode["Full"] = 0] = "Full";
11163
+ /** Uses a narrower instruction set that doesn't support directives and allows optimizations. */
11164
+ TemplateCompilationMode[TemplateCompilationMode["DomOnly"] = 1] = "DomOnly";
11165
+ })(TemplateCompilationMode || (TemplateCompilationMode = {}));
11151
11166
  /**
11152
11167
  * An entire ongoing compilation, which will result in one or more template functions when complete.
11153
11168
  * Contains one or more corresponding compilation units.
@@ -11156,10 +11171,12 @@ class CompilationJob {
11156
11171
  componentName;
11157
11172
  pool;
11158
11173
  compatibility;
11159
- constructor(componentName, pool, compatibility) {
11174
+ mode;
11175
+ constructor(componentName, pool, compatibility, mode) {
11160
11176
  this.componentName = componentName;
11161
11177
  this.pool = pool;
11162
11178
  this.compatibility = compatibility;
11179
+ this.mode = mode;
11163
11180
  }
11164
11181
  kind = CompilationJobKind.Both;
11165
11182
  /**
@@ -11184,8 +11201,8 @@ class ComponentCompilationJob extends CompilationJob {
11184
11201
  allDeferrableDepsFn;
11185
11202
  relativeTemplatePath;
11186
11203
  enableDebugLocations;
11187
- constructor(componentName, pool, compatibility, relativeContextFilePath, i18nUseExternalIds, deferMeta, allDeferrableDepsFn, relativeTemplatePath, enableDebugLocations) {
11188
- super(componentName, pool, compatibility);
11204
+ constructor(componentName, pool, compatibility, mode, relativeContextFilePath, i18nUseExternalIds, deferMeta, allDeferrableDepsFn, relativeTemplatePath, enableDebugLocations) {
11205
+ super(componentName, pool, compatibility, mode);
11189
11206
  this.relativeContextFilePath = relativeContextFilePath;
11190
11207
  this.i18nUseExternalIds = i18nUseExternalIds;
11191
11208
  this.deferMeta = deferMeta;
@@ -11330,8 +11347,8 @@ class ViewCompilationUnit extends CompilationUnit {
11330
11347
  * Compilation-in-progress of a host binding, which contains a single unit for that host binding.
11331
11348
  */
11332
11349
  class HostBindingCompilationJob extends CompilationJob {
11333
- constructor(componentName, pool, compatibility) {
11334
- super(componentName, pool, compatibility);
11350
+ constructor(componentName, pool, compatibility, mode) {
11351
+ super(componentName, pool, compatibility, mode);
11335
11352
  this.root = new HostBindingCompilationUnit(this);
11336
11353
  }
11337
11354
  kind = CompilationJobKind.Host;
@@ -11563,7 +11580,7 @@ function extractAttributes(job) {
11563
11580
  extractAttributeOp(unit, op, elements);
11564
11581
  break;
11565
11582
  case OpKind.Property:
11566
- if (!op.isAnimationTrigger) {
11583
+ if (!op.isLegacyAnimationTrigger) {
11567
11584
  let bindingKind;
11568
11585
  if (op.i18nMessage !== null && op.templateKind === null) {
11569
11586
  // If the binding has an i18n context, it is an i18n attribute, and should have that
@@ -11605,7 +11622,7 @@ function extractAttributes(job) {
11605
11622
  }
11606
11623
  break;
11607
11624
  case OpKind.Listener:
11608
- if (!op.isAnimationListener) {
11625
+ if (!op.isLegacyAnimationListener) {
11609
11626
  const extractedAttributeOp = createExtractedAttributeOp(op.target, BindingKind.Property, null, op.name,
11610
11627
  /* expression */ null,
11611
11628
  /* i18nContext */ null,
@@ -11715,12 +11732,12 @@ function specializeBindings(job) {
11715
11732
  }
11716
11733
  break;
11717
11734
  case BindingKind.Property:
11718
- case BindingKind.Animation:
11735
+ case BindingKind.LegacyAnimation:
11719
11736
  if (job.kind === CompilationJobKind.Host) {
11720
- OpList.replace(op, createDomPropertyOp(op.name, op.expression, op.bindingKind === BindingKind.Animation, op.i18nContext, op.securityContext, op.sourceSpan));
11737
+ OpList.replace(op, createDomPropertyOp(op.name, op.expression, op.bindingKind === BindingKind.LegacyAnimation, op.i18nContext, op.securityContext, op.sourceSpan));
11721
11738
  }
11722
11739
  else {
11723
- OpList.replace(op, createPropertyOp(op.target, op.name, op.expression, op.bindingKind === BindingKind.Animation, op.securityContext, op.isStructuralTemplateAttribute, op.templateKind, op.i18nContext, op.i18nMessage, op.sourceSpan));
11740
+ OpList.replace(op, createPropertyOp(op.target, op.name, op.expression, op.bindingKind === BindingKind.LegacyAnimation, op.securityContext, op.isStructuralTemplateAttribute, op.templateKind, op.i18nContext, op.i18nMessage, op.sourceSpan));
11724
11741
  }
11725
11742
  break;
11726
11743
  case BindingKind.TwoWayProperty:
@@ -11764,6 +11781,14 @@ const CHAIN_COMPATIBILITY = new Map([
11764
11781
  [Identifiers.declareLet, Identifiers.declareLet],
11765
11782
  [Identifiers.conditionalCreate, Identifiers.conditionalBranchCreate],
11766
11783
  [Identifiers.conditionalBranchCreate, Identifiers.conditionalBranchCreate],
11784
+ [Identifiers.domElement, Identifiers.domElement],
11785
+ [Identifiers.domElementStart, Identifiers.domElementStart],
11786
+ [Identifiers.domElementEnd, Identifiers.domElementEnd],
11787
+ [Identifiers.domElementContainer, Identifiers.domElementContainer],
11788
+ [Identifiers.domElementContainerStart, Identifiers.domElementContainerStart],
11789
+ [Identifiers.domElementContainerEnd, Identifiers.domElementContainerEnd],
11790
+ [Identifiers.domListener, Identifiers.domListener],
11791
+ [Identifiers.domTemplate, Identifiers.domTemplate],
11767
11792
  ]);
11768
11793
  /**
11769
11794
  * Chaining results in repeated call expressions, causing a deep AST of receiver expressions. To prevent running out of
@@ -11936,6 +11961,15 @@ const BINARY_OPERATORS = new Map([
11936
11961
  ['||', BinaryOperator.Or],
11937
11962
  ['+', BinaryOperator.Plus],
11938
11963
  ['in', BinaryOperator.In],
11964
+ ['+=', BinaryOperator.AdditionAssignment],
11965
+ ['-=', BinaryOperator.SubtractionAssignment],
11966
+ ['*=', BinaryOperator.MultiplicationAssignment],
11967
+ ['/=', BinaryOperator.DivisionAssignment],
11968
+ ['%=', BinaryOperator.RemainderAssignment],
11969
+ ['**=', BinaryOperator.ExponentiationAssignment],
11970
+ ['&&=', BinaryOperator.AndAssignment],
11971
+ ['||=', BinaryOperator.OrAssignment],
11972
+ ['??=', BinaryOperator.NullishCoalesceAssignment],
11939
11973
  ]);
11940
11974
  function namespaceForKey(namespacePrefixKey) {
11941
11975
  const NAMESPACES = new Map([
@@ -15714,13 +15748,6 @@ const NAMED_ENTITIES = {
15714
15748
  const NGSP_UNICODE = '\uE500';
15715
15749
  NAMED_ENTITIES['ngsp'] = NGSP_UNICODE;
15716
15750
 
15717
- class TokenError extends ParseError {
15718
- tokenType;
15719
- constructor(errorMsg, tokenType, span) {
15720
- super(span, errorMsg);
15721
- this.tokenType = tokenType;
15722
- }
15723
- }
15724
15751
  class TokenizeResult {
15725
15752
  tokens;
15726
15753
  errors;
@@ -15752,12 +15779,6 @@ var CharacterReferenceType;
15752
15779
  CharacterReferenceType["HEX"] = "hexadecimal";
15753
15780
  CharacterReferenceType["DEC"] = "decimal";
15754
15781
  })(CharacterReferenceType || (CharacterReferenceType = {}));
15755
- class _ControlFlowError {
15756
- error;
15757
- constructor(error) {
15758
- this.error = error;
15759
- }
15760
- }
15761
15782
  // See https://www.w3.org/TR/html51/syntax.html#writing-html-documents
15762
15783
  class _Tokenizer {
15763
15784
  _getTagDefinition;
@@ -16067,10 +16088,10 @@ class _Tokenizer {
16067
16088
  }
16068
16089
  _endToken(parts, end) {
16069
16090
  if (this._currentTokenStart === null) {
16070
- throw new TokenError('Programming error - attempted to end a token when there was no start to the token', this._currentTokenType, this._cursor.getSpan(end));
16091
+ throw new ParseError(this._cursor.getSpan(end), 'Programming error - attempted to end a token when there was no start to the token');
16071
16092
  }
16072
16093
  if (this._currentTokenType === null) {
16073
- throw new TokenError('Programming error - attempted to end a token which has no token type', null, this._cursor.getSpan(this._currentTokenStart));
16094
+ throw new ParseError(this._cursor.getSpan(this._currentTokenStart), 'Programming error - attempted to end a token which has no token type');
16074
16095
  }
16075
16096
  const token = {
16076
16097
  type: this._currentTokenType,
@@ -16086,17 +16107,17 @@ class _Tokenizer {
16086
16107
  if (this._isInExpansionForm()) {
16087
16108
  msg += ` (Do you have an unescaped "{" in your template? Use "{{ '{' }}") to escape it.)`;
16088
16109
  }
16089
- const error = new TokenError(msg, this._currentTokenType, span);
16110
+ const error = new ParseError(span, msg);
16090
16111
  this._currentTokenStart = null;
16091
16112
  this._currentTokenType = null;
16092
- return new _ControlFlowError(error);
16113
+ return error;
16093
16114
  }
16094
16115
  handleError(e) {
16095
16116
  if (e instanceof CursorError) {
16096
16117
  e = this._createError(e.msg, this._cursor.getSpan(e.cursor));
16097
16118
  }
16098
- if (e instanceof _ControlFlowError) {
16099
- this.errors.push(e.error);
16119
+ if (e instanceof ParseError) {
16120
+ this.errors.push(e);
16100
16121
  }
16101
16122
  else {
16102
16123
  throw e;
@@ -16336,7 +16357,7 @@ class _Tokenizer {
16336
16357
  }
16337
16358
  }
16338
16359
  catch (e) {
16339
- if (e instanceof _ControlFlowError) {
16360
+ if (e instanceof ParseError) {
16340
16361
  if (openToken) {
16341
16362
  // We errored before we could close the opening tag, so it is incomplete.
16342
16363
  openToken.type =
@@ -17117,7 +17138,7 @@ let Parser$1 = class Parser {
17117
17138
  const tokenizeResult = tokenize(source, url, this.getTagDefinition, options);
17118
17139
  const parser = new _TreeBuilder(tokenizeResult.tokens, this.getTagDefinition);
17119
17140
  parser.build();
17120
- return new ParseTreeResult(parser.rootNodes, tokenizeResult.errors.concat(parser.errors));
17141
+ return new ParseTreeResult(parser.rootNodes, [...tokenizeResult.errors, ...parser.errors]);
17121
17142
  }
17122
17143
  };
17123
17144
  class _TreeBuilder {
@@ -18208,13 +18229,17 @@ class _Scanner {
18208
18229
  case $HASH:
18209
18230
  return this.scanPrivateIdentifier();
18210
18231
  case $PLUS:
18232
+ return this.scanComplexOperator(start, '+', $EQ, '=');
18211
18233
  case $MINUS:
18234
+ return this.scanComplexOperator(start, '-', $EQ, '=');
18212
18235
  case $SLASH:
18236
+ return this.scanComplexOperator(start, '/', $EQ, '=');
18213
18237
  case $PERCENT:
18238
+ return this.scanComplexOperator(start, '%', $EQ, '=');
18214
18239
  case $CARET:
18215
- return this.scanOperator(start, String.fromCharCode(peek));
18240
+ return this.scanOperator(start, '^');
18216
18241
  case $STAR:
18217
- return this.scanComplexOperator(start, '*', $STAR, '*');
18242
+ return this.scanStar(start);
18218
18243
  case $QUESTION:
18219
18244
  return this.scanQuestion(start);
18220
18245
  case $LT:
@@ -18224,9 +18249,9 @@ class _Scanner {
18224
18249
  case $EQ:
18225
18250
  return this.scanComplexOperator(start, String.fromCharCode(peek), $EQ, '=', $EQ, '=');
18226
18251
  case $AMPERSAND:
18227
- return this.scanComplexOperator(start, '&', $AMPERSAND, '&');
18252
+ return this.scanComplexOperator(start, '&', $AMPERSAND, '&', $EQ, '=');
18228
18253
  case $BAR:
18229
- return this.scanComplexOperator(start, '|', $BAR, '|');
18254
+ return this.scanComplexOperator(start, '|', $BAR, '|', $EQ, '=');
18230
18255
  case $NBSP:
18231
18256
  while (isWhitespace(this.peek))
18232
18257
  this.advance();
@@ -18372,13 +18397,23 @@ class _Scanner {
18372
18397
  }
18373
18398
  scanQuestion(start) {
18374
18399
  this.advance();
18375
- let str = '?';
18376
- // Either `a ?? b` or 'a?.b'.
18377
- if (this.peek === $QUESTION || this.peek === $PERIOD) {
18378
- str += this.peek === $PERIOD ? '.' : '?';
18400
+ let operator = '?';
18401
+ // `a ?? b` or `a ??= b`.
18402
+ if (this.peek === $QUESTION) {
18403
+ operator += '?';
18379
18404
  this.advance();
18405
+ // @ts-expect-error
18406
+ if (this.peek === $EQ) {
18407
+ operator += '=';
18408
+ this.advance();
18409
+ }
18380
18410
  }
18381
- return newOperatorToken(start, this.index, str);
18411
+ else if (this.peek === $PERIOD) {
18412
+ // `a?.b`
18413
+ operator += '.';
18414
+ this.advance();
18415
+ }
18416
+ return newOperatorToken(start, this.index, operator);
18382
18417
  }
18383
18418
  scanTemplateLiteralPart(start) {
18384
18419
  let buffer = '';
@@ -18442,6 +18477,25 @@ class _Scanner {
18442
18477
  buffer += String.fromCharCode(unescapedCode);
18443
18478
  return buffer;
18444
18479
  }
18480
+ scanStar(start) {
18481
+ this.advance();
18482
+ // `*`, `**`, `**=` or `*=`
18483
+ let operator = '*';
18484
+ if (this.peek === $STAR) {
18485
+ operator += '*';
18486
+ this.advance();
18487
+ // @ts-expect-error
18488
+ if (this.peek === $EQ) {
18489
+ operator += '=';
18490
+ this.advance();
18491
+ }
18492
+ }
18493
+ else if (this.peek === $EQ) {
18494
+ operator += '=';
18495
+ this.advance();
18496
+ }
18497
+ return newOperatorToken(start, this.index, operator);
18498
+ }
18445
18499
  }
18446
18500
  function isIdentifierStart(code) {
18447
18501
  return (($a <= code && code <= $z) ||
@@ -18502,6 +18556,9 @@ class TemplateBindingParseResult {
18502
18556
  this.errors = errors;
18503
18557
  }
18504
18558
  }
18559
+ function getLocation(span) {
18560
+ return span.start.toString() || '(unknown)';
18561
+ }
18505
18562
  class Parser {
18506
18563
  _lexer;
18507
18564
  _supportsDirectPipeReferences;
@@ -18509,18 +18566,18 @@ class Parser {
18509
18566
  this._lexer = _lexer;
18510
18567
  this._supportsDirectPipeReferences = _supportsDirectPipeReferences;
18511
18568
  }
18512
- parseAction(input, location, absoluteOffset, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18569
+ parseAction(input, parseSourceSpan, absoluteOffset, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18513
18570
  const errors = [];
18514
- this._checkNoInterpolation(errors, input, location, interpolationConfig);
18571
+ this._checkNoInterpolation(errors, input, parseSourceSpan, interpolationConfig);
18515
18572
  const sourceToLex = this._stripComments(input);
18516
18573
  const tokens = this._lexer.tokenize(sourceToLex);
18517
- const ast = new _ParseAST(input, location, absoluteOffset, tokens, 1 /* ParseFlags.Action */, errors, 0, this._supportsDirectPipeReferences).parseChain();
18518
- return new ASTWithSource(ast, input, location, absoluteOffset, errors);
18574
+ const ast = new _ParseAST(input, parseSourceSpan, absoluteOffset, tokens, 1 /* ParseFlags.Action */, errors, 0, this._supportsDirectPipeReferences).parseChain();
18575
+ return new ASTWithSource(ast, input, getLocation(parseSourceSpan), absoluteOffset, errors);
18519
18576
  }
18520
- parseBinding(input, location, absoluteOffset, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18577
+ parseBinding(input, parseSourceSpan, absoluteOffset, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18521
18578
  const errors = [];
18522
- const ast = this._parseBindingAst(input, location, absoluteOffset, interpolationConfig, errors);
18523
- return new ASTWithSource(ast, input, location, absoluteOffset, errors);
18579
+ const ast = this._parseBindingAst(input, parseSourceSpan, absoluteOffset, interpolationConfig, errors);
18580
+ return new ASTWithSource(ast, input, getLocation(parseSourceSpan), absoluteOffset, errors);
18524
18581
  }
18525
18582
  checkSimpleExpression(ast) {
18526
18583
  const checker = new SimpleExpressionChecker();
@@ -18528,20 +18585,20 @@ class Parser {
18528
18585
  return checker.errors;
18529
18586
  }
18530
18587
  // Host bindings parsed here
18531
- parseSimpleBinding(input, location, absoluteOffset, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18588
+ parseSimpleBinding(input, parseSourceSpan, absoluteOffset, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18532
18589
  const errors = [];
18533
- const ast = this._parseBindingAst(input, location, absoluteOffset, interpolationConfig, errors);
18590
+ const ast = this._parseBindingAst(input, parseSourceSpan, absoluteOffset, interpolationConfig, errors);
18534
18591
  const simplExpressionErrors = this.checkSimpleExpression(ast);
18535
18592
  if (simplExpressionErrors.length > 0) {
18536
- errors.push(new ParserError(`Host binding expression cannot contain ${simplExpressionErrors.join(' ')}`, input, location));
18593
+ errors.push(getParseError(`Host binding expression cannot contain ${simplExpressionErrors.join(' ')}`, input, '', parseSourceSpan));
18537
18594
  }
18538
- return new ASTWithSource(ast, input, location, absoluteOffset, errors);
18595
+ return new ASTWithSource(ast, input, getLocation(parseSourceSpan), absoluteOffset, errors);
18539
18596
  }
18540
- _parseBindingAst(input, location, absoluteOffset, interpolationConfig, errors) {
18541
- this._checkNoInterpolation(errors, input, location, interpolationConfig);
18597
+ _parseBindingAst(input, parseSourceSpan, absoluteOffset, interpolationConfig, errors) {
18598
+ this._checkNoInterpolation(errors, input, parseSourceSpan, interpolationConfig);
18542
18599
  const sourceToLex = this._stripComments(input);
18543
18600
  const tokens = this._lexer.tokenize(sourceToLex);
18544
- return new _ParseAST(input, location, absoluteOffset, tokens, 0 /* ParseFlags.None */, errors, 0, this._supportsDirectPipeReferences).parseChain();
18601
+ return new _ParseAST(input, parseSourceSpan, absoluteOffset, tokens, 0 /* ParseFlags.None */, errors, 0, this._supportsDirectPipeReferences).parseChain();
18545
18602
  }
18546
18603
  /**
18547
18604
  * Parse microsyntax template expression and return a list of bindings or
@@ -18569,42 +18626,46 @@ class Parser {
18569
18626
  * @param absoluteKeyOffset start of the `templateKey`
18570
18627
  * @param absoluteValueOffset start of the `templateValue`
18571
18628
  */
18572
- parseTemplateBindings(templateKey, templateValue, templateUrl, absoluteKeyOffset, absoluteValueOffset) {
18629
+ parseTemplateBindings(templateKey, templateValue, parseSourceSpan, absoluteKeyOffset, absoluteValueOffset) {
18573
18630
  const tokens = this._lexer.tokenize(templateValue);
18574
18631
  const errors = [];
18575
- const parser = new _ParseAST(templateValue, templateUrl, absoluteValueOffset, tokens, 0 /* ParseFlags.None */, errors, 0 /* relative offset */, this._supportsDirectPipeReferences);
18632
+ const parser = new _ParseAST(templateValue, parseSourceSpan, absoluteValueOffset, tokens, 0 /* ParseFlags.None */, errors, 0 /* relative offset */, this._supportsDirectPipeReferences);
18576
18633
  return parser.parseTemplateBindings({
18577
18634
  source: templateKey,
18578
18635
  span: new AbsoluteSourceSpan(absoluteKeyOffset, absoluteKeyOffset + templateKey.length),
18579
18636
  });
18580
18637
  }
18581
- parseInterpolation(input, location, absoluteOffset, interpolatedTokens, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18638
+ parseInterpolation(input, parseSourceSpan, absoluteOffset, interpolatedTokens, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18582
18639
  const errors = [];
18583
- const { strings, expressions, offsets } = this.splitInterpolation(input, location, errors, interpolatedTokens, interpolationConfig);
18640
+ const { strings, expressions, offsets } = this.splitInterpolation(input, parseSourceSpan, errors, interpolatedTokens, interpolationConfig);
18584
18641
  if (expressions.length === 0)
18585
18642
  return null;
18586
18643
  const expressionNodes = [];
18587
18644
  for (let i = 0; i < expressions.length; ++i) {
18645
+ // If we have a token for the specific expression, it's preferrable to use it because it
18646
+ // allows us to produce more accurate error messages. The expressions are always at the odd
18647
+ // indexes inside the tokens.
18648
+ const expressionSpan = interpolatedTokens?.[i * 2 + 1]?.sourceSpan;
18588
18649
  const expressionText = expressions[i].text;
18589
18650
  const sourceToLex = this._stripComments(expressionText);
18590
18651
  const tokens = this._lexer.tokenize(sourceToLex);
18591
- const ast = new _ParseAST(input, location, absoluteOffset, tokens, 0 /* ParseFlags.None */, errors, offsets[i], this._supportsDirectPipeReferences).parseChain();
18652
+ const ast = new _ParseAST(expressionSpan ? expressionText : input, expressionSpan || parseSourceSpan, absoluteOffset, tokens, 0 /* ParseFlags.None */, errors, offsets[i], this._supportsDirectPipeReferences).parseChain();
18592
18653
  expressionNodes.push(ast);
18593
18654
  }
18594
- return this.createInterpolationAst(strings.map((s) => s.text), expressionNodes, input, location, absoluteOffset, errors);
18655
+ return this.createInterpolationAst(strings.map((s) => s.text), expressionNodes, input, getLocation(parseSourceSpan), absoluteOffset, errors);
18595
18656
  }
18596
18657
  /**
18597
18658
  * Similar to `parseInterpolation`, but treats the provided string as a single expression
18598
18659
  * element that would normally appear within the interpolation prefix and suffix (`{{` and `}}`).
18599
18660
  * This is used for parsing the switch expression in ICUs.
18600
18661
  */
18601
- parseInterpolationExpression(expression, location, absoluteOffset) {
18662
+ parseInterpolationExpression(expression, parseSourceSpan, absoluteOffset) {
18602
18663
  const sourceToLex = this._stripComments(expression);
18603
18664
  const tokens = this._lexer.tokenize(sourceToLex);
18604
18665
  const errors = [];
18605
- const ast = new _ParseAST(expression, location, absoluteOffset, tokens, 0 /* ParseFlags.None */, errors, 0, this._supportsDirectPipeReferences).parseChain();
18666
+ const ast = new _ParseAST(expression, parseSourceSpan, absoluteOffset, tokens, 0 /* ParseFlags.None */, errors, 0, this._supportsDirectPipeReferences).parseChain();
18606
18667
  const strings = ['', '']; // The prefix and suffix strings are both empty
18607
- return this.createInterpolationAst(strings, [ast], expression, location, absoluteOffset, errors);
18668
+ return this.createInterpolationAst(strings, [ast], expression, getLocation(parseSourceSpan), absoluteOffset, errors);
18608
18669
  }
18609
18670
  createInterpolationAst(strings, expressions, input, location, absoluteOffset, errors) {
18610
18671
  const span = new ParseSpan(0, input.length);
@@ -18618,7 +18679,7 @@ class Parser {
18618
18679
  * `SplitInterpolation` with splits that look like
18619
18680
  * <raw text> <expression> <raw text> ... <raw text> <expression> <raw text>
18620
18681
  */
18621
- splitInterpolation(input, location, errors, interpolatedTokens, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18682
+ splitInterpolation(input, parseSourceSpan, errors, interpolatedTokens, interpolationConfig = DEFAULT_INTERPOLATION_CONFIG) {
18622
18683
  const strings = [];
18623
18684
  const expressions = [];
18624
18685
  const offsets = [];
@@ -18656,7 +18717,7 @@ class Parser {
18656
18717
  const fullEnd = exprEnd + interpEnd.length;
18657
18718
  const text = input.substring(exprStart, exprEnd);
18658
18719
  if (text.trim().length === 0) {
18659
- errors.push(new ParserError('Blank expressions are not allowed in interpolated strings', input, `at column ${i} in`, location));
18720
+ errors.push(getParseError('Blank expressions are not allowed in interpolated strings', input, `at column ${i} in`, parseSourceSpan));
18660
18721
  }
18661
18722
  expressions.push({ text, start: fullStart, end: fullEnd });
18662
18723
  const startInOriginalTemplate = inputToTemplateIndexMap?.get(fullStart) ?? fullStart;
@@ -18679,9 +18740,11 @@ class Parser {
18679
18740
  }
18680
18741
  return new SplitInterpolation(strings, expressions, offsets);
18681
18742
  }
18682
- wrapLiteralPrimitive(input, location, absoluteOffset) {
18743
+ wrapLiteralPrimitive(input, sourceSpanOrLocation, absoluteOffset) {
18683
18744
  const span = new ParseSpan(0, input == null ? 0 : input.length);
18684
- return new ASTWithSource(new LiteralPrimitive(span, span.toAbsolute(absoluteOffset), input), input, location, absoluteOffset, []);
18745
+ return new ASTWithSource(new LiteralPrimitive(span, span.toAbsolute(absoluteOffset), input), input, typeof sourceSpanOrLocation === 'string'
18746
+ ? sourceSpanOrLocation
18747
+ : getLocation(sourceSpanOrLocation), absoluteOffset, []);
18685
18748
  }
18686
18749
  _stripComments(input) {
18687
18750
  const i = this._commentStart(input);
@@ -18703,7 +18766,7 @@ class Parser {
18703
18766
  }
18704
18767
  return null;
18705
18768
  }
18706
- _checkNoInterpolation(errors, input, location, { start, end }) {
18769
+ _checkNoInterpolation(errors, input, parseSourceSpan, { start, end }) {
18707
18770
  let startIndex = -1;
18708
18771
  let endIndex = -1;
18709
18772
  for (const charIndex of this._forEachUnquotedChar(input, 0)) {
@@ -18720,7 +18783,7 @@ class Parser {
18720
18783
  }
18721
18784
  }
18722
18785
  if (startIndex > -1 && endIndex > -1) {
18723
- errors.push(new ParserError(`Got interpolation (${start}${end}) where expression was expected`, input, `at column ${startIndex} in`, location));
18786
+ errors.push(getParseError(`Got interpolation (${start}${end}) where expression was expected`, input, `at column ${startIndex} in`, parseSourceSpan));
18724
18787
  }
18725
18788
  }
18726
18789
  /**
@@ -18779,7 +18842,7 @@ var ParseContextFlags;
18779
18842
  })(ParseContextFlags || (ParseContextFlags = {}));
18780
18843
  class _ParseAST {
18781
18844
  input;
18782
- location;
18845
+ parseSourceSpan;
18783
18846
  absoluteOffset;
18784
18847
  tokens;
18785
18848
  parseFlags;
@@ -18796,9 +18859,9 @@ class _ParseAST {
18796
18859
  // and may change for subsequent expressions visited by the parser.
18797
18860
  sourceSpanCache = new Map();
18798
18861
  index = 0;
18799
- constructor(input, location, absoluteOffset, tokens, parseFlags, errors, offset, supportsDirectPipeReferences) {
18862
+ constructor(input, parseSourceSpan, absoluteOffset, tokens, parseFlags, errors, offset, supportsDirectPipeReferences) {
18800
18863
  this.input = input;
18801
- this.location = location;
18864
+ this.parseSourceSpan = parseSourceSpan;
18802
18865
  this.absoluteOffset = absoluteOffset;
18803
18866
  this.tokens = tokens;
18804
18867
  this.parseFlags = parseFlags;
@@ -18926,6 +18989,9 @@ class _ParseAST {
18926
18989
  return false;
18927
18990
  }
18928
18991
  }
18992
+ isAssignmentOperator(token) {
18993
+ return token.type === TokenType.Operator && Binary.isAssignmentOperation(token.strValue);
18994
+ }
18929
18995
  expectOperator(operator) {
18930
18996
  if (this.consumeOptionalOperator(operator))
18931
18997
  return;
@@ -19409,7 +19475,8 @@ class _ParseAST {
19409
19475
  });
19410
19476
  const nameSpan = this.sourceSpan(nameStart);
19411
19477
  if (isSafe) {
19412
- if (this.consumeOptionalOperator('=')) {
19478
+ if (this.isAssignmentOperator(this.next)) {
19479
+ this.advance();
19413
19480
  this.error("The '?.' operator cannot be used in the assignment");
19414
19481
  return new EmptyExpr$1(this.span(start), this.sourceSpan(start));
19415
19482
  }
@@ -19418,14 +19485,16 @@ class _ParseAST {
19418
19485
  }
19419
19486
  }
19420
19487
  else {
19421
- if (this.consumeOptionalOperator('=')) {
19488
+ if (this.isAssignmentOperator(this.next)) {
19489
+ const operation = this.next.strValue;
19490
+ this.advance();
19422
19491
  if (!(this.parseFlags & 1 /* ParseFlags.Action */)) {
19423
19492
  this.error('Bindings cannot contain assignments');
19424
19493
  return new EmptyExpr$1(this.span(start), this.sourceSpan(start));
19425
19494
  }
19426
19495
  const receiver = new PropertyRead(this.span(start), this.sourceSpan(start), nameSpan, readReceiver, id);
19427
19496
  const value = this.parseConditional();
19428
- return new Binary(this.span(start), this.sourceSpan(start), '=', receiver, value);
19497
+ return new Binary(this.span(start), this.sourceSpan(start), operation, receiver, value);
19429
19498
  }
19430
19499
  else {
19431
19500
  return new PropertyRead(this.span(start), this.sourceSpan(start), nameSpan, readReceiver, id);
@@ -19540,14 +19609,16 @@ class _ParseAST {
19540
19609
  }
19541
19610
  this.rbracketsExpected--;
19542
19611
  this.expectCharacter($RBRACKET);
19543
- if (this.consumeOptionalOperator('=')) {
19612
+ if (this.isAssignmentOperator(this.next)) {
19613
+ const operation = this.next.strValue;
19614
+ this.advance();
19544
19615
  if (isSafe) {
19545
19616
  this.error("The '?.' operator cannot be used in the assignment");
19546
19617
  }
19547
19618
  else {
19548
19619
  const binaryReceiver = new KeyedRead(this.span(start), this.sourceSpan(start), receiver, key);
19549
19620
  const value = this.parseConditional();
19550
- return new Binary(this.span(start), this.sourceSpan(start), '=', binaryReceiver, value);
19621
+ return new Binary(this.span(start), this.sourceSpan(start), operation, binaryReceiver, value);
19551
19622
  }
19552
19623
  }
19553
19624
  else {
@@ -19611,7 +19682,7 @@ class _ParseAST {
19611
19682
  const ast = this.parsePipe(); // example: "condition | async"
19612
19683
  const { start, end } = ast.span;
19613
19684
  const value = this.input.substring(start, end);
19614
- return new ASTWithSource(ast, value, this.location, this.absoluteOffset + start, this.errors);
19685
+ return new ASTWithSource(ast, value, getLocation(this.parseSourceSpan), this.absoluteOffset + start, this.errors);
19615
19686
  }
19616
19687
  /**
19617
19688
  * Return the binding for a variable declared using `as`. Note that the order
@@ -19715,13 +19786,11 @@ class _ParseAST {
19715
19786
  * Records an error and skips over the token stream until reaching a recoverable point. See
19716
19787
  * `this.skip` for more details on token skipping.
19717
19788
  */
19718
- error(message, index = null) {
19719
- this.errors.push(new ParserError(message, this.input, this.locationText(index), this.location));
19789
+ error(message, index = this.index) {
19790
+ this.errors.push(getParseError(message, this.input, this.getErrorLocationText(index), this.parseSourceSpan));
19720
19791
  this.skip();
19721
19792
  }
19722
- locationText(index = null) {
19723
- if (index == null)
19724
- index = this.index;
19793
+ getErrorLocationText(index) {
19725
19794
  return index < this.tokens.length
19726
19795
  ? `at column ${this.tokens[index].index + 1} in`
19727
19796
  : `at the end of the expression`;
@@ -19755,7 +19824,7 @@ class _ParseAST {
19755
19824
  * none of the calling productions are not expecting the closing token else we will never
19756
19825
  * make progress in the case of an extraneous group closing symbol (such as a stray ')').
19757
19826
  * That is, we skip a closing symbol if we are not in a grouping production.
19758
- * - '=' in a `Writable` context
19827
+ * - Assignment in a `Writable` context
19759
19828
  * - In this context, we are able to recover after seeing the `=` operator, which
19760
19829
  * signals the presence of an independent rvalue expression following the `=` operator.
19761
19830
  *
@@ -19770,15 +19839,23 @@ class _ParseAST {
19770
19839
  (this.rparensExpected <= 0 || !n.isCharacter($RPAREN)) &&
19771
19840
  (this.rbracesExpected <= 0 || !n.isCharacter($RBRACE)) &&
19772
19841
  (this.rbracketsExpected <= 0 || !n.isCharacter($RBRACKET)) &&
19773
- (!(this.context & ParseContextFlags.Writable) || !n.isOperator('='))) {
19842
+ (!(this.context & ParseContextFlags.Writable) || !this.isAssignmentOperator(n))) {
19774
19843
  if (this.next.isError()) {
19775
- this.errors.push(new ParserError(this.next.toString(), this.input, this.locationText(), this.location));
19844
+ this.errors.push(getParseError(this.next.toString(), this.input, this.getErrorLocationText(this.next.index), this.parseSourceSpan));
19776
19845
  }
19777
19846
  this.advance();
19778
19847
  n = this.next;
19779
19848
  }
19780
19849
  }
19781
19850
  }
19851
+ function getParseError(message, input, locationText, parseSourceSpan) {
19852
+ if (locationText.length > 0) {
19853
+ locationText = ` ${locationText} `;
19854
+ }
19855
+ const location = getLocation(parseSourceSpan);
19856
+ const error = `Parser Error: ${message}${locationText}[${input}] in ${location}`;
19857
+ return new ParseError(parseSourceSpan, error);
19858
+ }
19782
19859
  class SimpleExpressionChecker extends RecursiveAstVisitor {
19783
19860
  errors = [];
19784
19861
  visitPipe() {
@@ -21033,7 +21110,7 @@ class _I18nVisitor {
21033
21110
  normalizeExpression(token) {
21034
21111
  const expression = token.parts[1];
21035
21112
  const expr = this._expressionParser.parseBinding(expression,
21036
- /* location */ token.sourceSpan.start.toString(),
21113
+ /* location */ token.sourceSpan,
21037
21114
  /* absoluteOffset */ token.sourceSpan.start.offset, this._interpolationConfig);
21038
21115
  return serialize(expr);
21039
21116
  }
@@ -21099,15 +21176,6 @@ function extractPlaceholderName(input) {
21099
21176
  return input.split(_CUSTOM_PH_EXP)[2];
21100
21177
  }
21101
21178
 
21102
- /**
21103
- * An i18n error.
21104
- */
21105
- class I18nError extends ParseError {
21106
- constructor(span, msg) {
21107
- super(span, msg);
21108
- }
21109
- }
21110
-
21111
21179
  /**
21112
21180
  * Set of tagName|propertyName corresponding to Trusted Types sinks. Properties applying to all
21113
21181
  * tags use '*'.
@@ -21389,7 +21457,7 @@ class I18nMetaVisitor {
21389
21457
  }
21390
21458
  }
21391
21459
  _reportError(node, msg) {
21392
- this._errors.push(new I18nError(node.sourceSpan, msg));
21460
+ this._errors.push(new ParseError(node.sourceSpan, msg));
21393
21461
  }
21394
21462
  }
21395
21463
  /** I18n separators for metadata **/
@@ -22257,7 +22325,7 @@ function addNamesToView(unit, baseName, state, compatibility) {
22257
22325
  switch (op.kind) {
22258
22326
  case OpKind.Property:
22259
22327
  case OpKind.DomProperty:
22260
- if (op.isAnimationTrigger) {
22328
+ if (op.isLegacyAnimationTrigger) {
22261
22329
  op.name = '@' + op.name;
22262
22330
  }
22263
22331
  break;
@@ -22269,8 +22337,8 @@ function addNamesToView(unit, baseName, state, compatibility) {
22269
22337
  throw new Error(`Expected a slot to be assigned`);
22270
22338
  }
22271
22339
  let animation = '';
22272
- if (op.isAnimationListener) {
22273
- op.name = `@${op.name}.${op.animationPhase}`;
22340
+ if (op.isLegacyAnimationListener) {
22341
+ op.name = `@${op.name}.${op.legacyAnimationPhase}`;
22274
22342
  animation = 'animation';
22275
22343
  }
22276
22344
  if (op.hostListener) {
@@ -22538,7 +22606,7 @@ function kindWithInterpolationTest(kind, interpolation) {
22538
22606
  };
22539
22607
  }
22540
22608
  function basicListenerKindTest(op) {
22541
- return ((op.kind === OpKind.Listener && !(op.hostListener && op.isAnimationListener)) ||
22609
+ return ((op.kind === OpKind.Listener && !(op.hostListener && op.isLegacyAnimationListener)) ||
22542
22610
  op.kind === OpKind.TwoWayListener);
22543
22611
  }
22544
22612
  function nonInterpolationPropertyKindTest(op) {
@@ -22551,7 +22619,7 @@ function nonInterpolationPropertyKindTest(op) {
22551
22619
  * the groups in the order defined here.
22552
22620
  */
22553
22621
  const CREATE_ORDERING = [
22554
- { test: (op) => op.kind === OpKind.Listener && op.hostListener && op.isAnimationListener },
22622
+ { test: (op) => op.kind === OpKind.Listener && op.hostListener && op.isLegacyAnimationListener },
22555
22623
  { test: basicListenerKindTest },
22556
22624
  ];
22557
22625
  /**
@@ -22973,21 +23041,7 @@ function elementOrContainerBase(instruction, slot, tag, constIndex, localRefInde
22973
23041
  }
22974
23042
  return call(instruction, args, sourceSpan);
22975
23043
  }
22976
- function elementEnd(sourceSpan) {
22977
- return call(Identifiers.elementEnd, [], sourceSpan);
22978
- }
22979
- function elementContainerStart(slot, constIndex, localRefIndex, sourceSpan) {
22980
- return elementOrContainerBase(Identifiers.elementContainerStart, slot,
22981
- /* tag */ null, constIndex, localRefIndex, sourceSpan);
22982
- }
22983
- function elementContainer(slot, constIndex, localRefIndex, sourceSpan) {
22984
- return elementOrContainerBase(Identifiers.elementContainer, slot,
22985
- /* tag */ null, constIndex, localRefIndex, sourceSpan);
22986
- }
22987
- function elementContainerEnd() {
22988
- return call(Identifiers.elementContainerEnd, [], null);
22989
- }
22990
- function template(slot, templateFnRef, decls, vars, tag, constIndex, localRefs, sourceSpan) {
23044
+ function templateBase(instruction, slot, templateFnRef, decls, vars, tag, constIndex, localRefs, sourceSpan) {
22991
23045
  const args = [
22992
23046
  literal(slot),
22993
23047
  templateFnRef,
@@ -23003,7 +23057,37 @@ function template(slot, templateFnRef, decls, vars, tag, constIndex, localRefs,
23003
23057
  while (args[args.length - 1].isEquivalent(NULL_EXPR)) {
23004
23058
  args.pop();
23005
23059
  }
23006
- return call(Identifiers.templateCreate, args, sourceSpan);
23060
+ return call(instruction, args, sourceSpan);
23061
+ }
23062
+ function propertyBase(instruction, name, expression, sanitizer, sourceSpan) {
23063
+ const args = [literal(name)];
23064
+ if (expression instanceof Interpolation) {
23065
+ args.push(interpolationToExpression(expression, sourceSpan));
23066
+ }
23067
+ else {
23068
+ args.push(expression);
23069
+ }
23070
+ if (sanitizer !== null) {
23071
+ args.push(sanitizer);
23072
+ }
23073
+ return call(instruction, args, sourceSpan);
23074
+ }
23075
+ function elementEnd(sourceSpan) {
23076
+ return call(Identifiers.elementEnd, [], sourceSpan);
23077
+ }
23078
+ function elementContainerStart(slot, constIndex, localRefIndex, sourceSpan) {
23079
+ return elementOrContainerBase(Identifiers.elementContainerStart, slot,
23080
+ /* tag */ null, constIndex, localRefIndex, sourceSpan);
23081
+ }
23082
+ function elementContainer(slot, constIndex, localRefIndex, sourceSpan) {
23083
+ return elementOrContainerBase(Identifiers.elementContainer, slot,
23084
+ /* tag */ null, constIndex, localRefIndex, sourceSpan);
23085
+ }
23086
+ function elementContainerEnd() {
23087
+ return call(Identifiers.elementContainerEnd, [], null);
23088
+ }
23089
+ function template(slot, templateFnRef, decls, vars, tag, constIndex, localRefs, sourceSpan) {
23090
+ return templateBase(Identifiers.templateCreate, slot, templateFnRef, decls, vars, tag, constIndex, localRefs, sourceSpan);
23007
23091
  }
23008
23092
  function disableBindings() {
23009
23093
  return call(Identifiers.disableBindings, [], null);
@@ -23269,17 +23353,7 @@ function i18nAttributes(slot, i18nAttributesConfig) {
23269
23353
  return call(Identifiers.i18nAttributes, args, null);
23270
23354
  }
23271
23355
  function property(name, expression, sanitizer, sourceSpan) {
23272
- const args = [literal(name)];
23273
- if (expression instanceof Interpolation) {
23274
- args.push(interpolationToExpression(expression, sourceSpan));
23275
- }
23276
- else {
23277
- args.push(expression);
23278
- }
23279
- if (sanitizer !== null) {
23280
- args.push(sanitizer);
23281
- }
23282
- return call(Identifiers.property, args, sourceSpan);
23356
+ return propertyBase(Identifiers.property, name, expression, sanitizer, sourceSpan);
23283
23357
  }
23284
23358
  function twoWayProperty(name, expression, sanitizer, sourceSpan) {
23285
23359
  const args = [literal(name), expression];
@@ -23332,6 +23406,36 @@ function classMap(expression, sourceSpan) {
23332
23406
  : expression;
23333
23407
  return call(Identifiers.classMap, [value], sourceSpan);
23334
23408
  }
23409
+ function domElement(slot, tag, constIndex, localRefIndex, sourceSpan) {
23410
+ return elementOrContainerBase(Identifiers.domElement, slot, tag, constIndex, localRefIndex, sourceSpan);
23411
+ }
23412
+ function domElementStart(slot, tag, constIndex, localRefIndex, sourceSpan) {
23413
+ return elementOrContainerBase(Identifiers.domElementStart, slot, tag, constIndex, localRefIndex, sourceSpan);
23414
+ }
23415
+ function domElementEnd(sourceSpan) {
23416
+ return call(Identifiers.domElementEnd, [], sourceSpan);
23417
+ }
23418
+ function domElementContainerStart(slot, constIndex, localRefIndex, sourceSpan) {
23419
+ return elementOrContainerBase(Identifiers.domElementContainerStart, slot,
23420
+ /* tag */ null, constIndex, localRefIndex, sourceSpan);
23421
+ }
23422
+ function domElementContainer(slot, constIndex, localRefIndex, sourceSpan) {
23423
+ return elementOrContainerBase(Identifiers.domElementContainer, slot,
23424
+ /* tag */ null, constIndex, localRefIndex, sourceSpan);
23425
+ }
23426
+ function domElementContainerEnd() {
23427
+ return call(Identifiers.domElementContainerEnd, [], null);
23428
+ }
23429
+ function domListener(name, handlerFn, eventTargetResolver, sourceSpan) {
23430
+ const args = [literal(name), handlerFn];
23431
+ if (eventTargetResolver !== null) {
23432
+ args.push(importExpr(eventTargetResolver));
23433
+ }
23434
+ return call(Identifiers.domListener, args, sourceSpan);
23435
+ }
23436
+ function domTemplate(slot, templateFnRef, decls, vars, tag, constIndex, localRefs, sourceSpan) {
23437
+ return templateBase(Identifiers.domTemplate, slot, templateFnRef, decls, vars, tag, constIndex, localRefs, sourceSpan);
23438
+ }
23335
23439
  const PIPE_BINDINGS = [
23336
23440
  Identifiers.pipeBind1,
23337
23441
  Identifiers.pipeBind2,
@@ -23359,11 +23463,7 @@ function i18nApply(slot, sourceSpan) {
23359
23463
  return call(Identifiers.i18nApply, [literal(slot)], sourceSpan);
23360
23464
  }
23361
23465
  function domProperty(name, expression, sanitizer, sourceSpan) {
23362
- const args = [literal(name), expression];
23363
- if (sanitizer !== null) {
23364
- args.push(sanitizer);
23365
- }
23366
- return call(Identifiers.domProperty, args, sourceSpan);
23466
+ return propertyBase(Identifiers.domProperty, name, expression, sanitizer, sourceSpan);
23367
23467
  }
23368
23468
  function syntheticHostProperty(name, expression, sourceSpan) {
23369
23469
  return call(Identifiers.syntheticHostProperty, [literal(name), expression], sourceSpan);
@@ -23528,22 +23628,34 @@ function reifyCreateOperations(unit, ops) {
23528
23628
  OpList.replace(op, text(op.handle.slot, op.initialValue, op.sourceSpan));
23529
23629
  break;
23530
23630
  case OpKind.ElementStart:
23531
- OpList.replace(op, elementStart(op.handle.slot, op.tag, op.attributes, op.localRefs, op.startSourceSpan));
23631
+ OpList.replace(op, unit.job.mode === TemplateCompilationMode.DomOnly
23632
+ ? domElementStart(op.handle.slot, op.tag, op.attributes, op.localRefs, op.startSourceSpan)
23633
+ : elementStart(op.handle.slot, op.tag, op.attributes, op.localRefs, op.startSourceSpan));
23532
23634
  break;
23533
23635
  case OpKind.Element:
23534
- OpList.replace(op, element(op.handle.slot, op.tag, op.attributes, op.localRefs, op.wholeSourceSpan));
23636
+ OpList.replace(op, unit.job.mode === TemplateCompilationMode.DomOnly
23637
+ ? domElement(op.handle.slot, op.tag, op.attributes, op.localRefs, op.wholeSourceSpan)
23638
+ : element(op.handle.slot, op.tag, op.attributes, op.localRefs, op.wholeSourceSpan));
23535
23639
  break;
23536
23640
  case OpKind.ElementEnd:
23537
- OpList.replace(op, elementEnd(op.sourceSpan));
23641
+ OpList.replace(op, unit.job.mode === TemplateCompilationMode.DomOnly
23642
+ ? domElementEnd(op.sourceSpan)
23643
+ : elementEnd(op.sourceSpan));
23538
23644
  break;
23539
23645
  case OpKind.ContainerStart:
23540
- OpList.replace(op, elementContainerStart(op.handle.slot, op.attributes, op.localRefs, op.startSourceSpan));
23646
+ OpList.replace(op, unit.job.mode === TemplateCompilationMode.DomOnly
23647
+ ? domElementContainerStart(op.handle.slot, op.attributes, op.localRefs, op.startSourceSpan)
23648
+ : elementContainerStart(op.handle.slot, op.attributes, op.localRefs, op.startSourceSpan));
23541
23649
  break;
23542
23650
  case OpKind.Container:
23543
- OpList.replace(op, elementContainer(op.handle.slot, op.attributes, op.localRefs, op.wholeSourceSpan));
23651
+ OpList.replace(op, unit.job.mode === TemplateCompilationMode.DomOnly
23652
+ ? domElementContainer(op.handle.slot, op.attributes, op.localRefs, op.wholeSourceSpan)
23653
+ : elementContainer(op.handle.slot, op.attributes, op.localRefs, op.wholeSourceSpan));
23544
23654
  break;
23545
23655
  case OpKind.ContainerEnd:
23546
- OpList.replace(op, elementContainerEnd());
23656
+ OpList.replace(op, unit.job.mode === TemplateCompilationMode.DomOnly
23657
+ ? domElementContainerEnd()
23658
+ : elementContainerEnd());
23547
23659
  break;
23548
23660
  case OpKind.I18nStart:
23549
23661
  OpList.replace(op, i18nStart(op.handle.slot, op.messageIndex, op.subTemplateIndex, op.sourceSpan));
@@ -23568,7 +23680,12 @@ function reifyCreateOperations(unit, ops) {
23568
23680
  throw new Error(`AssertionError: local refs array should have been extracted into a constant`);
23569
23681
  }
23570
23682
  const childView = unit.job.views.get(op.xref);
23571
- OpList.replace(op, template(op.handle.slot, variable(childView.fnName), childView.decls, childView.vars, op.tag, op.attributes, op.localRefs, op.startSourceSpan));
23683
+ OpList.replace(op,
23684
+ // Block templates can't have directives so we can always generate them as DOM-only.
23685
+ op.templateKind === TemplateKind.Block ||
23686
+ unit.job.mode === TemplateCompilationMode.DomOnly
23687
+ ? domTemplate(op.handle.slot, variable(childView.fnName), childView.decls, childView.vars, op.tag, op.attributes, op.localRefs, op.startSourceSpan)
23688
+ : template(op.handle.slot, variable(childView.fnName), childView.decls, childView.vars, op.tag, op.attributes, op.localRefs, op.startSourceSpan));
23572
23689
  break;
23573
23690
  case OpKind.DisableBindings:
23574
23691
  OpList.replace(op, disableBindings());
@@ -23590,7 +23707,11 @@ function reifyCreateOperations(unit, ops) {
23590
23707
  if (eventTargetResolver === undefined) {
23591
23708
  throw new Error(`Unexpected global target '${op.eventTarget}' defined for '${op.name}' event. Supported list of global targets: window,document,body.`);
23592
23709
  }
23593
- OpList.replace(op, listener(op.name, listenerFn, eventTargetResolver, op.hostListener && op.isAnimationListener, op.sourceSpan));
23710
+ OpList.replace(op, unit.job.mode === TemplateCompilationMode.DomOnly &&
23711
+ !op.hostListener &&
23712
+ !op.isLegacyAnimationListener
23713
+ ? domListener(op.name, listenerFn, eventTargetResolver, op.sourceSpan)
23714
+ : listener(op.name, listenerFn, eventTargetResolver, op.hostListener && op.isLegacyAnimationListener, op.sourceSpan));
23594
23715
  break;
23595
23716
  case OpKind.TwoWayListener:
23596
23717
  OpList.replace(op, twoWayListener(op.name, reifyListenerHandler(unit, op.handlerFnName, op.handlerOps, true), op.sourceSpan));
@@ -23748,7 +23869,7 @@ function reifyCreateOperations(unit, ops) {
23748
23869
  }
23749
23870
  }
23750
23871
  }
23751
- function reifyUpdateOperations(_unit, ops) {
23872
+ function reifyUpdateOperations(unit, ops) {
23752
23873
  for (const op of ops) {
23753
23874
  transformExpressionsInOp(op, reifyIrExpression, VisitorContextFlag.None);
23754
23875
  switch (op.kind) {
@@ -23756,7 +23877,9 @@ function reifyUpdateOperations(_unit, ops) {
23756
23877
  OpList.replace(op, advance(op.delta, op.sourceSpan));
23757
23878
  break;
23758
23879
  case OpKind.Property:
23759
- OpList.replace(op, property(op.name, op.expression, op.sanitizer, op.sourceSpan));
23880
+ OpList.replace(op, unit.job.mode === TemplateCompilationMode.DomOnly && !op.isLegacyAnimationTrigger
23881
+ ? domProperty(op.name, op.expression, op.sanitizer, op.sourceSpan)
23882
+ : property(op.name, op.expression, op.sanitizer, op.sourceSpan));
23760
23883
  break;
23761
23884
  case OpKind.TwoWayProperty:
23762
23885
  OpList.replace(op, twoWayProperty(op.name, op.expression, op.sanitizer, op.sourceSpan));
@@ -23790,7 +23913,7 @@ function reifyUpdateOperations(_unit, ops) {
23790
23913
  throw new Error('not yet handled');
23791
23914
  }
23792
23915
  else {
23793
- if (op.isAnimationTrigger) {
23916
+ if (op.isLegacyAnimationTrigger) {
23794
23917
  OpList.replace(op, syntheticHostProperty(op.name, op.expression, op.sourceSpan));
23795
23918
  }
23796
23919
  else {
@@ -25994,8 +26117,8 @@ function isSingleI18nIcu(meta) {
25994
26117
  * representation.
25995
26118
  * TODO: Refactor more of the ingestion code into phases.
25996
26119
  */
25997
- function ingestComponent(componentName, template, constantPool, relativeContextFilePath, i18nUseExternalIds, deferMeta, allDeferrableDepsFn, relativeTemplatePath, enableDebugLocations) {
25998
- const job = new ComponentCompilationJob(componentName, constantPool, compatibilityMode, relativeContextFilePath, i18nUseExternalIds, deferMeta, allDeferrableDepsFn, relativeTemplatePath, enableDebugLocations);
26120
+ function ingestComponent(componentName, template, constantPool, compilationMode, relativeContextFilePath, i18nUseExternalIds, deferMeta, allDeferrableDepsFn, relativeTemplatePath, enableDebugLocations) {
26121
+ const job = new ComponentCompilationJob(componentName, constantPool, compatibilityMode, compilationMode, relativeContextFilePath, i18nUseExternalIds, deferMeta, allDeferrableDepsFn, relativeTemplatePath, enableDebugLocations);
25999
26122
  ingestNodes(job.root, template);
26000
26123
  return job;
26001
26124
  }
@@ -26004,7 +26127,7 @@ function ingestComponent(componentName, template, constantPool, relativeContextF
26004
26127
  * representation.
26005
26128
  */
26006
26129
  function ingestHostBinding(input, bindingParser, constantPool) {
26007
- const job = new HostBindingCompilationJob(input.componentName, constantPool, compatibilityMode);
26130
+ const job = new HostBindingCompilationJob(input.componentName, constantPool, compatibilityMode, TemplateCompilationMode.DomOnly);
26008
26131
  for (const property of input.properties ?? []) {
26009
26132
  let bindingKind = BindingKind.Property;
26010
26133
  // TODO: this should really be handled in the parser.
@@ -26012,8 +26135,8 @@ function ingestHostBinding(input, bindingParser, constantPool) {
26012
26135
  property.name = property.name.substring('attr.'.length);
26013
26136
  bindingKind = BindingKind.Attribute;
26014
26137
  }
26015
- if (property.isAnimation) {
26016
- bindingKind = BindingKind.Animation;
26138
+ if (property.isLegacyAnimation) {
26139
+ bindingKind = BindingKind.LegacyAnimation;
26017
26140
  }
26018
26141
  const securityContexts = bindingParser
26019
26142
  .calcPossibleSecurityContexts(input.componentSelector, property.name, bindingKind === BindingKind.Attribute)
@@ -26055,7 +26178,7 @@ function ingestHostAttribute(job, name, value, securityContexts) {
26055
26178
  job.root.update.push(attrBinding);
26056
26179
  }
26057
26180
  function ingestHostEvent(job, event) {
26058
- const [phase, target] = event.type !== ParsedEventType.Animation
26181
+ const [phase, target] = event.type !== ParsedEventType.LegacyAnimation
26059
26182
  ? [null, event.targetOrPhase]
26060
26183
  : [event.targetOrPhase, null];
26061
26184
  const eventBinding = createListenerOp(job.root.xref, new SlotHandle(), event.name, null, makeListenerHandlerOps(job.root, event.handler, event.handlerSpan), phase, target, true, event.sourceSpan);
@@ -26680,7 +26803,7 @@ const BINDING_KINDS = new Map([
26680
26803
  [BindingType.Attribute, BindingKind.Attribute],
26681
26804
  [BindingType.Class, BindingKind.ClassName],
26682
26805
  [BindingType.Style, BindingKind.StyleProperty],
26683
- [BindingType.Animation, BindingKind.Animation],
26806
+ [BindingType.LegacyAnimation, BindingKind.LegacyAnimation],
26684
26807
  ]);
26685
26808
  /**
26686
26809
  * Checks whether the given template is a plain ng-template (as opposed to another kind of template
@@ -26739,7 +26862,7 @@ function ingestElementBindings(unit, op, element) {
26739
26862
  unit.create.push(bindings.filter((b) => b?.kind === OpKind.ExtractedAttribute));
26740
26863
  unit.update.push(bindings.filter((b) => b?.kind === OpKind.Binding));
26741
26864
  for (const output of element.outputs) {
26742
- if (output.type === ParsedEventType.Animation && output.phase === null) {
26865
+ if (output.type === ParsedEventType.LegacyAnimation && output.phase === null) {
26743
26866
  throw Error('Animation listener should have a phase');
26744
26867
  }
26745
26868
  if (output.type === ParsedEventType.TwoWay) {
@@ -26782,7 +26905,7 @@ function ingestTemplateBindings(unit, op, template, templateKind) {
26782
26905
  unit.create.push(bindings.filter((b) => b?.kind === OpKind.ExtractedAttribute));
26783
26906
  unit.update.push(bindings.filter((b) => b?.kind === OpKind.Binding));
26784
26907
  for (const output of template.outputs) {
26785
- if (output.type === ParsedEventType.Animation && output.phase === null) {
26908
+ if (output.type === ParsedEventType.LegacyAnimation && output.phase === null) {
26786
26909
  throw Error('Animation listener should have a phase');
26787
26910
  }
26788
26911
  if (templateKind === TemplateKind.NgTemplate) {
@@ -26794,7 +26917,7 @@ function ingestTemplateBindings(unit, op, template, templateKind) {
26794
26917
  }
26795
26918
  }
26796
26919
  if (templateKind === TemplateKind.Structural &&
26797
- output.type !== ParsedEventType.Animation) {
26920
+ output.type !== ParsedEventType.LegacyAnimation) {
26798
26921
  // Animation bindings are excluded from the structural template's const array.
26799
26922
  const securityContext = domSchema.securityContext(NG_TEMPLATE_TAG_NAME, output.name, false);
26800
26923
  unit.create.push(createExtractedAttributeOp(op.xref, BindingKind.Property, null, output.name, null, null, null, securityContext));
@@ -26852,7 +26975,8 @@ function createTemplateBinding(view, xref, type, name, value, unit, securityCont
26852
26975
  return createExtractedAttributeOp(xref, BindingKind.TwoWayProperty, null, name, null, null, i18nMessage, securityContext);
26853
26976
  }
26854
26977
  }
26855
- if (!isTextBinding && (type === BindingType.Attribute || type === BindingType.Animation)) {
26978
+ if (!isTextBinding &&
26979
+ (type === BindingType.Attribute || type === BindingType.LegacyAnimation)) {
26856
26980
  // Again, this binding doesn't really target the ng-template; it actually targets the element
26857
26981
  // inside the structural template. In the case of non-text attribute or animation bindings,
26858
26982
  // the binding doesn't even show up on the ng-template const array, so we just skip it
@@ -27017,7 +27141,7 @@ function ingestControlFlowInsertionPoint(unit, xref, node) {
27017
27141
  // Note that TDB used to collect the outputs as well, but it wasn't passing them into
27018
27142
  // the template instruction. Here we just don't collect them.
27019
27143
  for (const attr of root.inputs) {
27020
- if (attr.type !== BindingType.Animation && attr.type !== BindingType.Attribute) {
27144
+ if (attr.type !== BindingType.LegacyAnimation && attr.type !== BindingType.Attribute) {
27021
27145
  const securityContext = domSchema.securityContext(NG_TEMPLATE_TAG_NAME, attr.name, true);
27022
27146
  unit.create.push(createExtractedAttributeOp(xref, BindingKind.Property, null, attr.name, null, null, null, securityContext));
27023
27147
  }
@@ -27238,7 +27362,7 @@ const ATTRIBUTE_PREFIX = 'attr';
27238
27362
  const CLASS_PREFIX = 'class';
27239
27363
  const STYLE_PREFIX = 'style';
27240
27364
  const TEMPLATE_ATTR_PREFIX$1 = '*';
27241
- const ANIMATE_PROP_PREFIX = 'animate-';
27365
+ const LEGACY_ANIMATE_PROP_PREFIX = 'animate-';
27242
27366
  /**
27243
27367
  * Parses bindings in templates and in the directive host area.
27244
27368
  */
@@ -27297,17 +27421,17 @@ class BindingParser {
27297
27421
  return targetEvents;
27298
27422
  }
27299
27423
  parseInterpolation(value, sourceSpan, interpolatedTokens) {
27300
- const sourceInfo = sourceSpan.start.toString();
27301
27424
  const absoluteOffset = sourceSpan.fullStart.offset;
27302
27425
  try {
27303
- const ast = this._exprParser.parseInterpolation(value, sourceInfo, absoluteOffset, interpolatedTokens, this._interpolationConfig);
27304
- if (ast)
27305
- this._reportExpressionParserErrors(ast.errors, sourceSpan);
27426
+ const ast = this._exprParser.parseInterpolation(value, sourceSpan, absoluteOffset, interpolatedTokens, this._interpolationConfig);
27427
+ if (ast) {
27428
+ this.errors.push(...ast.errors);
27429
+ }
27306
27430
  return ast;
27307
27431
  }
27308
27432
  catch (e) {
27309
27433
  this._reportError(`${e}`, sourceSpan);
27310
- return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);
27434
+ return this._exprParser.wrapLiteralPrimitive('ERROR', sourceSpan, absoluteOffset);
27311
27435
  }
27312
27436
  }
27313
27437
  /**
@@ -27316,17 +27440,17 @@ class BindingParser {
27316
27440
  * This is used for parsing the switch expression in ICUs.
27317
27441
  */
27318
27442
  parseInterpolationExpression(expression, sourceSpan) {
27319
- const sourceInfo = sourceSpan.start.toString();
27320
27443
  const absoluteOffset = sourceSpan.start.offset;
27321
27444
  try {
27322
- const ast = this._exprParser.parseInterpolationExpression(expression, sourceInfo, absoluteOffset);
27323
- if (ast)
27324
- this._reportExpressionParserErrors(ast.errors, sourceSpan);
27445
+ const ast = this._exprParser.parseInterpolationExpression(expression, sourceSpan, absoluteOffset);
27446
+ if (ast) {
27447
+ this.errors.push(...ast.errors);
27448
+ }
27325
27449
  return ast;
27326
27450
  }
27327
27451
  catch (e) {
27328
27452
  this._reportError(`${e}`, sourceSpan);
27329
- return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);
27453
+ return this._exprParser.wrapLiteralPrimitive('ERROR', sourceSpan, absoluteOffset);
27330
27454
  }
27331
27455
  }
27332
27456
  /**
@@ -27383,10 +27507,9 @@ class BindingParser {
27383
27507
  * @param absoluteValueOffset start of the `tplValue`
27384
27508
  */
27385
27509
  _parseTemplateBindings(tplKey, tplValue, sourceSpan, absoluteKeyOffset, absoluteValueOffset) {
27386
- const sourceInfo = sourceSpan.start.toString();
27387
27510
  try {
27388
- const bindingsResult = this._exprParser.parseTemplateBindings(tplKey, tplValue, sourceInfo, absoluteKeyOffset, absoluteValueOffset);
27389
- this._reportExpressionParserErrors(bindingsResult.errors, sourceSpan);
27511
+ const bindingsResult = this._exprParser.parseTemplateBindings(tplKey, tplValue, sourceSpan, absoluteKeyOffset, absoluteValueOffset);
27512
+ bindingsResult.errors.forEach((e) => this.errors.push(e));
27390
27513
  bindingsResult.warnings.forEach((warning) => {
27391
27514
  this._reportError(warning, sourceSpan, ParseErrorLevel.WARNING);
27392
27515
  });
@@ -27398,7 +27521,7 @@ class BindingParser {
27398
27521
  }
27399
27522
  }
27400
27523
  parseLiteralAttr(name, value, sourceSpan, absoluteOffset, valueSpan, targetMatchableAttrs, targetProps, keySpan) {
27401
- if (isAnimationLabel(name)) {
27524
+ if (isLegacyAnimationLabel(name)) {
27402
27525
  name = name.substring(1);
27403
27526
  if (keySpan !== undefined) {
27404
27527
  keySpan = moveParseSourceSpan(keySpan, new AbsoluteSourceSpan(keySpan.start.offset + 1, keySpan.end.offset));
@@ -27407,7 +27530,7 @@ class BindingParser {
27407
27530
  this._reportError(`Assigning animation triggers via @prop="exp" attributes with an expression is invalid.` +
27408
27531
  ` Use property bindings (e.g. [@prop]="exp") or use an attribute without a value (e.g. @prop) instead.`, sourceSpan, ParseErrorLevel.ERROR);
27409
27532
  }
27410
- this._parseAnimation(name, value, sourceSpan, absoluteOffset, keySpan, valueSpan, targetMatchableAttrs, targetProps);
27533
+ this._parseLegacyAnimation(name, value, sourceSpan, absoluteOffset, keySpan, valueSpan, targetMatchableAttrs, targetProps);
27411
27534
  }
27412
27535
  else {
27413
27536
  targetProps.push(new ParsedProperty(name, this._exprParser.wrapLiteralPrimitive(value, '', absoluteOffset), ParsedPropertyType.LITERAL_ATTR, sourceSpan, keySpan, valueSpan));
@@ -27417,23 +27540,23 @@ class BindingParser {
27417
27540
  if (name.length === 0) {
27418
27541
  this._reportError(`Property name is missing in binding`, sourceSpan);
27419
27542
  }
27420
- let isAnimationProp = false;
27421
- if (name.startsWith(ANIMATE_PROP_PREFIX)) {
27422
- isAnimationProp = true;
27423
- name = name.substring(ANIMATE_PROP_PREFIX.length);
27543
+ let isLegacyAnimationProp = false;
27544
+ if (name.startsWith(LEGACY_ANIMATE_PROP_PREFIX)) {
27545
+ isLegacyAnimationProp = true;
27546
+ name = name.substring(LEGACY_ANIMATE_PROP_PREFIX.length);
27424
27547
  if (keySpan !== undefined) {
27425
- keySpan = moveParseSourceSpan(keySpan, new AbsoluteSourceSpan(keySpan.start.offset + ANIMATE_PROP_PREFIX.length, keySpan.end.offset));
27548
+ keySpan = moveParseSourceSpan(keySpan, new AbsoluteSourceSpan(keySpan.start.offset + LEGACY_ANIMATE_PROP_PREFIX.length, keySpan.end.offset));
27426
27549
  }
27427
27550
  }
27428
- else if (isAnimationLabel(name)) {
27429
- isAnimationProp = true;
27551
+ else if (isLegacyAnimationLabel(name)) {
27552
+ isLegacyAnimationProp = true;
27430
27553
  name = name.substring(1);
27431
27554
  if (keySpan !== undefined) {
27432
27555
  keySpan = moveParseSourceSpan(keySpan, new AbsoluteSourceSpan(keySpan.start.offset + 1, keySpan.end.offset));
27433
27556
  }
27434
27557
  }
27435
- if (isAnimationProp) {
27436
- this._parseAnimation(name, expression, sourceSpan, absoluteOffset, keySpan, valueSpan, targetMatchableAttrs, targetProps);
27558
+ if (isLegacyAnimationProp) {
27559
+ this._parseLegacyAnimation(name, expression, sourceSpan, absoluteOffset, keySpan, valueSpan, targetMatchableAttrs, targetProps);
27437
27560
  }
27438
27561
  else {
27439
27562
  this._parsePropertyAst(name, this.parseBinding(expression, isHost, valueSpan || sourceSpan, absoluteOffset), isPartOfAssignmentBinding, sourceSpan, keySpan, valueSpan, targetMatchableAttrs, targetProps);
@@ -27451,7 +27574,7 @@ class BindingParser {
27451
27574
  targetMatchableAttrs.push([name, ast.source]);
27452
27575
  targetProps.push(new ParsedProperty(name, ast, isPartOfAssignmentBinding ? ParsedPropertyType.TWO_WAY : ParsedPropertyType.DEFAULT, sourceSpan, keySpan, valueSpan));
27453
27576
  }
27454
- _parseAnimation(name, expression, sourceSpan, absoluteOffset, keySpan, valueSpan, targetMatchableAttrs, targetProps) {
27577
+ _parseLegacyAnimation(name, expression, sourceSpan, absoluteOffset, keySpan, valueSpan, targetMatchableAttrs, targetProps) {
27455
27578
  if (name.length === 0) {
27456
27579
  this._reportError('Animation trigger is missing', sourceSpan);
27457
27580
  }
@@ -27460,26 +27583,26 @@ class BindingParser {
27460
27583
  // states will be applied by angular when the element is attached/detached
27461
27584
  const ast = this.parseBinding(expression || 'undefined', false, valueSpan || sourceSpan, absoluteOffset);
27462
27585
  targetMatchableAttrs.push([name, ast.source]);
27463
- targetProps.push(new ParsedProperty(name, ast, ParsedPropertyType.ANIMATION, sourceSpan, keySpan, valueSpan));
27586
+ targetProps.push(new ParsedProperty(name, ast, ParsedPropertyType.LEGACY_ANIMATION, sourceSpan, keySpan, valueSpan));
27464
27587
  }
27465
27588
  parseBinding(value, isHostBinding, sourceSpan, absoluteOffset) {
27466
- const sourceInfo = ((sourceSpan && sourceSpan.start) || '(unknown)').toString();
27467
27589
  try {
27468
27590
  const ast = isHostBinding
27469
- ? this._exprParser.parseSimpleBinding(value, sourceInfo, absoluteOffset, this._interpolationConfig)
27470
- : this._exprParser.parseBinding(value, sourceInfo, absoluteOffset, this._interpolationConfig);
27471
- if (ast)
27472
- this._reportExpressionParserErrors(ast.errors, sourceSpan);
27591
+ ? this._exprParser.parseSimpleBinding(value, sourceSpan, absoluteOffset, this._interpolationConfig)
27592
+ : this._exprParser.parseBinding(value, sourceSpan, absoluteOffset, this._interpolationConfig);
27593
+ if (ast) {
27594
+ this.errors.push(...ast.errors);
27595
+ }
27473
27596
  return ast;
27474
27597
  }
27475
27598
  catch (e) {
27476
27599
  this._reportError(`${e}`, sourceSpan);
27477
- return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);
27600
+ return this._exprParser.wrapLiteralPrimitive('ERROR', sourceSpan, absoluteOffset);
27478
27601
  }
27479
27602
  }
27480
27603
  createBoundElementProperty(elementSelector, boundProp, skipValidation = false, mapPropertyName = true) {
27481
- if (boundProp.isAnimation) {
27482
- return new BoundElementProperty(boundProp.name, BindingType.Animation, SecurityContext.NONE, boundProp.expression, null, boundProp.sourceSpan, boundProp.keySpan, boundProp.valueSpan);
27604
+ if (boundProp.isLegacyAnimation) {
27605
+ return new BoundElementProperty(boundProp.name, BindingType.LegacyAnimation, SecurityContext.NONE, boundProp.expression, null, boundProp.sourceSpan, boundProp.keySpan, boundProp.valueSpan);
27483
27606
  }
27484
27607
  let unit = null;
27485
27608
  let bindingType = undefined;
@@ -27532,12 +27655,12 @@ class BindingParser {
27532
27655
  if (name.length === 0) {
27533
27656
  this._reportError(`Event name is missing in binding`, sourceSpan);
27534
27657
  }
27535
- if (isAnimationLabel(name)) {
27658
+ if (isLegacyAnimationLabel(name)) {
27536
27659
  name = name.slice(1);
27537
27660
  if (keySpan !== undefined) {
27538
27661
  keySpan = moveParseSourceSpan(keySpan, new AbsoluteSourceSpan(keySpan.start.offset + 1, keySpan.end.offset));
27539
27662
  }
27540
- this._parseAnimationEvent(name, expression, sourceSpan, handlerSpan, targetEvents, keySpan);
27663
+ this._parseLegacyAnimationEvent(name, expression, sourceSpan, handlerSpan, targetEvents, keySpan);
27541
27664
  }
27542
27665
  else {
27543
27666
  this._parseRegularEvent(name, expression, isAssignmentEvent, sourceSpan, handlerSpan, targetMatchableAttrs, targetEvents, keySpan);
@@ -27551,14 +27674,14 @@ class BindingParser {
27551
27674
  const [target, eventName] = splitAtColon(rawName, [null, rawName]);
27552
27675
  return { eventName: eventName, target };
27553
27676
  }
27554
- parseAnimationEventName(rawName) {
27677
+ parseLegacyAnimationEventName(rawName) {
27555
27678
  const matches = splitAtPeriod(rawName, [rawName, null]);
27556
27679
  return { eventName: matches[0], phase: matches[1] === null ? null : matches[1].toLowerCase() };
27557
27680
  }
27558
- _parseAnimationEvent(name, expression, sourceSpan, handlerSpan, targetEvents, keySpan) {
27559
- const { eventName, phase } = this.parseAnimationEventName(name);
27681
+ _parseLegacyAnimationEvent(name, expression, sourceSpan, handlerSpan, targetEvents, keySpan) {
27682
+ const { eventName, phase } = this.parseLegacyAnimationEventName(name);
27560
27683
  const ast = this._parseAction(expression, handlerSpan);
27561
- targetEvents.push(new ParsedEvent(eventName, phase, ParsedEventType.Animation, ast, sourceSpan, handlerSpan, keySpan));
27684
+ targetEvents.push(new ParsedEvent(eventName, phase, ParsedEventType.LegacyAnimation, ast, sourceSpan, handlerSpan, keySpan));
27562
27685
  if (eventName.length === 0) {
27563
27686
  this._reportError(`Animation event name is missing in binding`, sourceSpan);
27564
27687
  }
@@ -27588,31 +27711,25 @@ class BindingParser {
27588
27711
  // so don't add the event name to the matchableAttrs
27589
27712
  }
27590
27713
  _parseAction(value, sourceSpan) {
27591
- const sourceInfo = ((sourceSpan && sourceSpan.start) || '(unknown').toString();
27592
27714
  const absoluteOffset = sourceSpan && sourceSpan.start ? sourceSpan.start.offset : 0;
27593
27715
  try {
27594
- const ast = this._exprParser.parseAction(value, sourceInfo, absoluteOffset, this._interpolationConfig);
27716
+ const ast = this._exprParser.parseAction(value, sourceSpan, absoluteOffset, this._interpolationConfig);
27595
27717
  if (ast) {
27596
- this._reportExpressionParserErrors(ast.errors, sourceSpan);
27718
+ this.errors.push(...ast.errors);
27597
27719
  }
27598
27720
  if (!ast || ast.ast instanceof EmptyExpr$1) {
27599
27721
  this._reportError(`Empty expressions are not allowed`, sourceSpan);
27600
- return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);
27722
+ return this._exprParser.wrapLiteralPrimitive('ERROR', sourceSpan, absoluteOffset);
27601
27723
  }
27602
27724
  return ast;
27603
27725
  }
27604
27726
  catch (e) {
27605
27727
  this._reportError(`${e}`, sourceSpan);
27606
- return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);
27728
+ return this._exprParser.wrapLiteralPrimitive('ERROR', sourceSpan, absoluteOffset);
27607
27729
  }
27608
27730
  }
27609
- _reportError(message, sourceSpan, level = ParseErrorLevel.ERROR, relatedError) {
27610
- this.errors.push(new ParseError(sourceSpan, message, level, relatedError));
27611
- }
27612
- _reportExpressionParserErrors(errors, sourceSpan) {
27613
- for (const error of errors) {
27614
- this._reportError(error.message, sourceSpan, undefined, error);
27615
- }
27731
+ _reportError(message, sourceSpan, level = ParseErrorLevel.ERROR) {
27732
+ this.errors.push(new ParseError(sourceSpan, message, level));
27616
27733
  }
27617
27734
  /**
27618
27735
  * @param propName the name of the property / attribute
@@ -27652,7 +27769,7 @@ class BindingParser {
27652
27769
  return false;
27653
27770
  }
27654
27771
  }
27655
- function isAnimationLabel(name) {
27772
+ function isLegacyAnimationLabel(name) {
27656
27773
  return name[0] == '@';
27657
27774
  }
27658
27775
  function calcPossibleSecurityContexts(registry, selector, propName, isAttribute) {
@@ -29650,8 +29767,11 @@ function compileComponentFromMetadata(meta, constantPool, bindingParser) {
29650
29767
  constantPool.statements.push(new DeclareVarStmt(fnName, meta.defer.dependenciesFn, undefined, StmtModifier.Final));
29651
29768
  allDeferrableDepsFn = variable(fnName);
29652
29769
  }
29770
+ const compilationMode = meta.isStandalone && !meta.hasDirectiveDependencies
29771
+ ? TemplateCompilationMode.DomOnly
29772
+ : TemplateCompilationMode.Full;
29653
29773
  // First the template is ingested into IR:
29654
- const tpl = ingestComponent(meta.name, meta.template.nodes, constantPool, meta.relativeContextFilePath, meta.i18nUseExternalIds, meta.defer, allDeferrableDepsFn, meta.relativeTemplatePath, getTemplateSourceLocationsEnabled());
29774
+ const tpl = ingestComponent(meta.name, meta.template.nodes, constantPool, compilationMode, meta.relativeContextFilePath, meta.i18nUseExternalIds, meta.defer, allDeferrableDepsFn, meta.relativeTemplatePath, getTemplateSourceLocationsEnabled());
29655
29775
  // Then the IR is transformed to prepare it for cod egeneration.
29656
29776
  transform(tpl, CompilationJobKind.Tmpl);
29657
29777
  // Finally we emit the template function:
@@ -31513,6 +31633,7 @@ function convertDeclareComponentFacadeToMetadata(decl, typeSourceSpan, sourceMap
31513
31633
  declarations.push(...decl.directives.map((dir) => convertDirectiveDeclarationToMetadata(dir)));
31514
31634
  decl.pipes && declarations.push(...convertPipeMapToMetadata(decl.pipes));
31515
31635
  }
31636
+ const hasDirectiveDependencies = declarations.every(({ kind }) => kind === R3TemplateDependencyKind.Directive || kind === R3TemplateDependencyKind.NgModule);
31516
31637
  return {
31517
31638
  ...convertDeclareDirectiveFacadeToMetadata(decl, typeSourceSpan),
31518
31639
  template,
@@ -31528,6 +31649,7 @@ function convertDeclareComponentFacadeToMetadata(decl, typeSourceSpan, sourceMap
31528
31649
  relativeContextFilePath: '',
31529
31650
  i18nUseExternalIds: true,
31530
31651
  relativeTemplatePath: null,
31652
+ hasDirectiveDependencies,
31531
31653
  };
31532
31654
  }
31533
31655
  function convertDeclarationFacadeToMetadata(declaration) {
@@ -32271,7 +32393,7 @@ class _Visitor {
32271
32393
  this._msgCountAtSectionStart = undefined;
32272
32394
  }
32273
32395
  _reportError(node, msg) {
32274
- this._errors.push(new I18nError(node.sourceSpan, msg));
32396
+ this._errors.push(new ParseError(node.sourceSpan, msg));
32275
32397
  }
32276
32398
  }
32277
32399
  function _isOpeningComment(n) {
@@ -32561,7 +32683,7 @@ class XliffParser {
32561
32683
  visitComponent(component, context) { }
32562
32684
  visitDirective(directive, context) { }
32563
32685
  _addError(node, message) {
32564
- this._errors.push(new I18nError(node.sourceSpan, message));
32686
+ this._errors.push(new ParseError(node.sourceSpan, message));
32565
32687
  }
32566
32688
  }
32567
32689
  // Convert ml nodes (xliff syntax) to i18n nodes
@@ -32622,7 +32744,7 @@ let XmlToI18n$2 = class XmlToI18n {
32622
32744
  this._addError(directive, 'Unexpected node');
32623
32745
  }
32624
32746
  _addError(node, message) {
32625
- this._errors.push(new I18nError(node.sourceSpan, message));
32747
+ this._errors.push(new ParseError(node.sourceSpan, message));
32626
32748
  }
32627
32749
  };
32628
32750
  function getCtypeForTag(tag) {
@@ -32884,7 +33006,7 @@ class Xliff2Parser {
32884
33006
  visitComponent(component, context) { }
32885
33007
  visitDirective(directive, context) { }
32886
33008
  _addError(node, message) {
32887
- this._errors.push(new I18nError(node.sourceSpan, message));
33009
+ this._errors.push(new ParseError(node.sourceSpan, message));
32888
33010
  }
32889
33011
  }
32890
33012
  // Convert ml nodes (xliff syntax) to i18n nodes
@@ -32962,7 +33084,7 @@ let XmlToI18n$1 = class XmlToI18n {
32962
33084
  this._addError(directive, 'Unexpected node');
32963
33085
  }
32964
33086
  _addError(node, message) {
32965
- this._errors.push(new I18nError(node.sourceSpan, message));
33087
+ this._errors.push(new ParseError(node.sourceSpan, message));
32966
33088
  }
32967
33089
  };
32968
33090
  function getTypeForTag(tag) {
@@ -33107,7 +33229,7 @@ class XtbParser {
33107
33229
  this._addError(directive, 'Unexpected node');
33108
33230
  }
33109
33231
  _addError(node, message) {
33110
- this._errors.push(new I18nError(node.sourceSpan, message));
33232
+ this._errors.push(new ParseError(node.sourceSpan, message));
33111
33233
  }
33112
33234
  }
33113
33235
  // Convert ml nodes (xtb syntax) to i18n nodes
@@ -33166,7 +33288,7 @@ class XmlToI18n {
33166
33288
  this._addError(directive, 'Unexpected node');
33167
33289
  }
33168
33290
  _addError(node, message) {
33169
- this._errors.push(new I18nError(node.sourceSpan, message));
33291
+ this._errors.push(new ParseError(node.sourceSpan, message));
33170
33292
  }
33171
33293
  }
33172
33294
 
@@ -33332,7 +33454,7 @@ class I18nToHtmlVisitor {
33332
33454
  return text;
33333
33455
  }
33334
33456
  _addError(el, msg) {
33335
- this._errors.push(new I18nError(el.sourceSpan, msg));
33457
+ this._errors.push(new ParseError(el.sourceSpan, msg));
33336
33458
  }
33337
33459
  }
33338
33460
 
@@ -33569,7 +33691,7 @@ const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
33569
33691
  function compileDeclareClassMetadata(metadata) {
33570
33692
  const definitionMap = new DefinitionMap();
33571
33693
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
33572
- definitionMap.set('version', literal('20.1.0-next.2'));
33694
+ definitionMap.set('version', literal('20.1.0-rc.0'));
33573
33695
  definitionMap.set('ngImport', importExpr(Identifiers.core));
33574
33696
  definitionMap.set('type', metadata.type);
33575
33697
  definitionMap.set('decorators', metadata.decorators);
@@ -33587,7 +33709,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
33587
33709
  callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? literal(null));
33588
33710
  callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? literal(null));
33589
33711
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
33590
- definitionMap.set('version', literal('20.1.0-next.2'));
33712
+ definitionMap.set('version', literal('20.1.0-rc.0'));
33591
33713
  definitionMap.set('ngImport', importExpr(Identifiers.core));
33592
33714
  definitionMap.set('type', metadata.type);
33593
33715
  definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
@@ -33682,7 +33804,7 @@ function createDirectiveDefinitionMap(meta) {
33682
33804
  const definitionMap = new DefinitionMap();
33683
33805
  const minVersion = getMinimumVersionForPartialOutput(meta);
33684
33806
  definitionMap.set('minVersion', literal(minVersion));
33685
- definitionMap.set('version', literal('20.1.0-next.2'));
33807
+ definitionMap.set('version', literal('20.1.0-rc.0'));
33686
33808
  // e.g. `type: MyDirective`
33687
33809
  definitionMap.set('type', meta.type.value);
33688
33810
  if (meta.isStandalone !== undefined) {
@@ -34098,7 +34220,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
34098
34220
  function compileDeclareFactoryFunction(meta) {
34099
34221
  const definitionMap = new DefinitionMap();
34100
34222
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
34101
- definitionMap.set('version', literal('20.1.0-next.2'));
34223
+ definitionMap.set('version', literal('20.1.0-rc.0'));
34102
34224
  definitionMap.set('ngImport', importExpr(Identifiers.core));
34103
34225
  definitionMap.set('type', meta.type.value);
34104
34226
  definitionMap.set('deps', compileDependencies(meta.deps));
@@ -34133,7 +34255,7 @@ function compileDeclareInjectableFromMetadata(meta) {
34133
34255
  function createInjectableDefinitionMap(meta) {
34134
34256
  const definitionMap = new DefinitionMap();
34135
34257
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
34136
- definitionMap.set('version', literal('20.1.0-next.2'));
34258
+ definitionMap.set('version', literal('20.1.0-rc.0'));
34137
34259
  definitionMap.set('ngImport', importExpr(Identifiers.core));
34138
34260
  definitionMap.set('type', meta.type.value);
34139
34261
  // Only generate providedIn property if it has a non-null value
@@ -34184,7 +34306,7 @@ function compileDeclareInjectorFromMetadata(meta) {
34184
34306
  function createInjectorDefinitionMap(meta) {
34185
34307
  const definitionMap = new DefinitionMap();
34186
34308
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
34187
- definitionMap.set('version', literal('20.1.0-next.2'));
34309
+ definitionMap.set('version', literal('20.1.0-rc.0'));
34188
34310
  definitionMap.set('ngImport', importExpr(Identifiers.core));
34189
34311
  definitionMap.set('type', meta.type.value);
34190
34312
  definitionMap.set('providers', meta.providers);
@@ -34217,7 +34339,7 @@ function createNgModuleDefinitionMap(meta) {
34217
34339
  throw new Error('Invalid path! Local compilation mode should not get into the partial compilation path');
34218
34340
  }
34219
34341
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
34220
- definitionMap.set('version', literal('20.1.0-next.2'));
34342
+ definitionMap.set('version', literal('20.1.0-rc.0'));
34221
34343
  definitionMap.set('ngImport', importExpr(Identifiers.core));
34222
34344
  definitionMap.set('type', meta.type.value);
34223
34345
  // We only generate the keys in the metadata if the arrays contain values.
@@ -34268,7 +34390,7 @@ function compileDeclarePipeFromMetadata(meta) {
34268
34390
  function createPipeDefinitionMap(meta) {
34269
34391
  const definitionMap = new DefinitionMap();
34270
34392
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION));
34271
- definitionMap.set('version', literal('20.1.0-next.2'));
34393
+ definitionMap.set('version', literal('20.1.0-rc.0'));
34272
34394
  definitionMap.set('ngImport', importExpr(Identifiers.core));
34273
34395
  // e.g. `type: MyPipe`
34274
34396
  definitionMap.set('type', meta.type.value);
@@ -34424,7 +34546,7 @@ function compileHmrUpdateCallback(definitions, constantStatements, meta) {
34424
34546
  * @description
34425
34547
  * Entry point for all public APIs of the compiler package.
34426
34548
  */
34427
- const VERSION = new Version('20.1.0-next.2');
34549
+ const VERSION = new Version('20.1.0-rc.0');
34428
34550
 
34429
34551
  //////////////////////////////////////
34430
34552
  // THIS FILE HAS GLOBAL SIDE EFFECT //
@@ -34450,5 +34572,5 @@ const VERSION = new Version('20.1.0-next.2');
34450
34572
  // the late binding of the Compiler to the @angular/core for jit compilation.
34451
34573
  publishFacade(_global);
34452
34574
 
34453
- export { AST, ASTWithName, ASTWithSource, AbsoluteSourceSpan, ArrayType, ArrowFunctionExpr, Attribute, Binary, BinaryOperator, BinaryOperatorExpr, BindingPipe, BindingPipeType, BindingType, Block, BlockParameter, BoundElementProperty, BuiltinType, BuiltinTypeName, CUSTOM_ELEMENTS_SCHEMA, Call, Chain, ChangeDetectionStrategy, CombinedRecursiveAstVisitor, CommaExpr, Comment, CompilerConfig, CompilerFacadeImpl, Component, Conditional, ConditionalExpr, ConstantPool, CssSelector, DEFAULT_INTERPOLATION_CONFIG, DYNAMIC_TYPE, DeclareFunctionStmt, DeclareVarStmt, Directive, DomElementSchemaRegistry, DynamicImportExpr, EOF, Element, ElementSchemaRegistry, EmitterVisitorContext, EmptyExpr$1 as EmptyExpr, Expansion, ExpansionCase, Expression, ExpressionBinding, ExpressionStatement, ExpressionType, ExternalExpr, ExternalReference, FactoryTarget, FunctionExpr, HtmlParser, HtmlTagDefinition, I18NHtmlParser, IfStmt, ImplicitReceiver, InstantiateExpr, Interpolation$1 as Interpolation, InterpolationConfig, InvokeFunctionExpr, JSDocComment, JitEvaluator, KeyedRead, LeadingComment, LetDeclaration, Lexer, LiteralArray, LiteralArrayExpr, LiteralExpr, LiteralMap, LiteralMapExpr, LiteralPrimitive, LocalizedString, MapType, MessageBundle, NONE_TYPE, NO_ERRORS_SCHEMA, NodeWithI18n, NonNullAssert, NotExpr, ParenthesizedExpr, ParenthesizedExpression, ParseError, ParseErrorLevel, ParseLocation, ParseSourceFile, ParseSourceSpan, ParseSpan, ParseTreeResult, ParsedEvent, ParsedEventType, ParsedProperty, ParsedPropertyType, ParsedVariable, Parser, ParserError, PrefixNot, PropertyRead, Identifiers as R3Identifiers, R3NgModuleMetadataKind, R3SelectorScopeMode, R3TargetBinder, R3TemplateDependencyKind, ReadKeyExpr, ReadPropExpr, ReadVarExpr, RecursiveAstVisitor, RecursiveVisitor, ResourceLoader, ReturnStatement, SECURITY_SCHEMA, STRING_TYPE, SafeCall, SafeKeyedRead, SafePropertyRead, SelectorContext, SelectorListContext, SelectorMatcher, SelectorlessMatcher, Serializer, SplitInterpolation, Statement, StmtModifier, StringToken, StringTokenKind, TagContentType, TaggedTemplateLiteral, TaggedTemplateLiteralExpr, TemplateBindingParseResult, TemplateLiteral, TemplateLiteralElement, TemplateLiteralElementExpr, TemplateLiteralExpr, Text, ThisReceiver, BlockNode as TmplAstBlockNode, BoundAttribute as TmplAstBoundAttribute, BoundDeferredTrigger as TmplAstBoundDeferredTrigger, BoundEvent as TmplAstBoundEvent, BoundText as TmplAstBoundText, Component$1 as TmplAstComponent, Content as TmplAstContent, DeferredBlock as TmplAstDeferredBlock, DeferredBlockError as TmplAstDeferredBlockError, DeferredBlockLoading as TmplAstDeferredBlockLoading, DeferredBlockPlaceholder as TmplAstDeferredBlockPlaceholder, DeferredTrigger as TmplAstDeferredTrigger, Directive$1 as TmplAstDirective, Element$1 as TmplAstElement, ForLoopBlock as TmplAstForLoopBlock, ForLoopBlockEmpty as TmplAstForLoopBlockEmpty, HostElement as TmplAstHostElement, HoverDeferredTrigger as TmplAstHoverDeferredTrigger, Icu$1 as TmplAstIcu, IdleDeferredTrigger as TmplAstIdleDeferredTrigger, IfBlock as TmplAstIfBlock, IfBlockBranch as TmplAstIfBlockBranch, ImmediateDeferredTrigger as TmplAstImmediateDeferredTrigger, InteractionDeferredTrigger as TmplAstInteractionDeferredTrigger, LetDeclaration$1 as TmplAstLetDeclaration, NeverDeferredTrigger as TmplAstNeverDeferredTrigger, RecursiveVisitor$1 as TmplAstRecursiveVisitor, Reference as TmplAstReference, SwitchBlock as TmplAstSwitchBlock, SwitchBlockCase as TmplAstSwitchBlockCase, Template as TmplAstTemplate, Text$3 as TmplAstText, TextAttribute as TmplAstTextAttribute, TimerDeferredTrigger as TmplAstTimerDeferredTrigger, UnknownBlock as TmplAstUnknownBlock, Variable as TmplAstVariable, ViewportDeferredTrigger as TmplAstViewportDeferredTrigger, Token, TokenType, TransplantedType, TreeError, Type, TypeModifier, TypeofExpr, TypeofExpression, Unary, UnaryOperator, UnaryOperatorExpr, VERSION, VariableBinding, Version, ViewEncapsulation$1 as ViewEncapsulation, VoidExpr, VoidExpression, WrappedNodeExpr, Xliff, Xliff2, Xmb, XmlParser, Xtb, compileClassDebugInfo, compileClassMetadata, compileComponentClassMetadata, compileComponentDeclareClassMetadata, compileComponentFromMetadata, compileDeclareClassMetadata, compileDeclareComponentFromMetadata, compileDeclareDirectiveFromMetadata, compileDeclareFactoryFunction, compileDeclareInjectableFromMetadata, compileDeclareInjectorFromMetadata, compileDeclareNgModuleFromMetadata, compileDeclarePipeFromMetadata, compileDeferResolverFunction, compileDirectiveFromMetadata, compileFactoryFunction, compileHmrInitializer, compileHmrUpdateCallback, compileInjectable, compileInjector, compileNgModule, compileOpaqueAsyncClassMetadata, compilePipeFromMetadata, computeMsgId, core, createCssSelectorFromNode, createInjectableType, createMayBeForwardRefExpression, devOnlyGuardedExpression, emitDistinctChangesOnlyDefaultValue, encapsulateStyle, escapeRegExp, findMatchingDirectivesAndPipes, getHtmlTagDefinition, getNsPrefix, getSafePropertyAccessString, identifierName, isNgContainer, isNgContent, isNgTemplate, jsDocComment, leadingComment, literal, literalMap, makeBindingParser, mergeNsAndName, output_ast as outputAst, parseHostBindings, parseTemplate, preserveWhitespacesDefault, publishFacade, r3JitTypeSourceSpan, sanitizeIdentifier, setEnableTemplateSourceLocations, splitNsName, visitAll$1 as tmplAstVisitAll, verifyHostBindings, visitAll };
34575
+ export { AST, ASTWithName, ASTWithSource, AbsoluteSourceSpan, ArrayType, ArrowFunctionExpr, Attribute, Binary, BinaryOperator, BinaryOperatorExpr, BindingPipe, BindingPipeType, BindingType, Block, BlockParameter, BoundElementProperty, BuiltinType, BuiltinTypeName, CUSTOM_ELEMENTS_SCHEMA, Call, Chain, ChangeDetectionStrategy, CombinedRecursiveAstVisitor, CommaExpr, Comment, CompilerConfig, CompilerFacadeImpl, Component, Conditional, ConditionalExpr, ConstantPool, CssSelector, DEFAULT_INTERPOLATION_CONFIG, DYNAMIC_TYPE, DeclareFunctionStmt, DeclareVarStmt, Directive, DomElementSchemaRegistry, DynamicImportExpr, EOF, Element, ElementSchemaRegistry, EmitterVisitorContext, EmptyExpr$1 as EmptyExpr, Expansion, ExpansionCase, Expression, ExpressionBinding, ExpressionStatement, ExpressionType, ExternalExpr, ExternalReference, FactoryTarget, FunctionExpr, HtmlParser, HtmlTagDefinition, I18NHtmlParser, IfStmt, ImplicitReceiver, InstantiateExpr, Interpolation$1 as Interpolation, InterpolationConfig, InvokeFunctionExpr, JSDocComment, JitEvaluator, KeyedRead, LeadingComment, LetDeclaration, Lexer, LiteralArray, LiteralArrayExpr, LiteralExpr, LiteralMap, LiteralMapExpr, LiteralPrimitive, LocalizedString, MapType, MessageBundle, NONE_TYPE, NO_ERRORS_SCHEMA, NodeWithI18n, NonNullAssert, NotExpr, ParenthesizedExpr, ParenthesizedExpression, ParseError, ParseErrorLevel, ParseLocation, ParseSourceFile, ParseSourceSpan, ParseSpan, ParseTreeResult, ParsedEvent, ParsedEventType, ParsedProperty, ParsedPropertyType, ParsedVariable, Parser, PrefixNot, PropertyRead, Identifiers as R3Identifiers, R3NgModuleMetadataKind, R3SelectorScopeMode, R3TargetBinder, R3TemplateDependencyKind, ReadKeyExpr, ReadPropExpr, ReadVarExpr, RecursiveAstVisitor, RecursiveVisitor, ResourceLoader, ReturnStatement, SECURITY_SCHEMA, STRING_TYPE, SafeCall, SafeKeyedRead, SafePropertyRead, SelectorContext, SelectorListContext, SelectorMatcher, SelectorlessMatcher, Serializer, SplitInterpolation, Statement, StmtModifier, StringToken, StringTokenKind, TagContentType, TaggedTemplateLiteral, TaggedTemplateLiteralExpr, TemplateBindingParseResult, TemplateLiteral, TemplateLiteralElement, TemplateLiteralElementExpr, TemplateLiteralExpr, Text, ThisReceiver, BlockNode as TmplAstBlockNode, BoundAttribute as TmplAstBoundAttribute, BoundDeferredTrigger as TmplAstBoundDeferredTrigger, BoundEvent as TmplAstBoundEvent, BoundText as TmplAstBoundText, Component$1 as TmplAstComponent, Content as TmplAstContent, DeferredBlock as TmplAstDeferredBlock, DeferredBlockError as TmplAstDeferredBlockError, DeferredBlockLoading as TmplAstDeferredBlockLoading, DeferredBlockPlaceholder as TmplAstDeferredBlockPlaceholder, DeferredTrigger as TmplAstDeferredTrigger, Directive$1 as TmplAstDirective, Element$1 as TmplAstElement, ForLoopBlock as TmplAstForLoopBlock, ForLoopBlockEmpty as TmplAstForLoopBlockEmpty, HostElement as TmplAstHostElement, HoverDeferredTrigger as TmplAstHoverDeferredTrigger, Icu$1 as TmplAstIcu, IdleDeferredTrigger as TmplAstIdleDeferredTrigger, IfBlock as TmplAstIfBlock, IfBlockBranch as TmplAstIfBlockBranch, ImmediateDeferredTrigger as TmplAstImmediateDeferredTrigger, InteractionDeferredTrigger as TmplAstInteractionDeferredTrigger, LetDeclaration$1 as TmplAstLetDeclaration, NeverDeferredTrigger as TmplAstNeverDeferredTrigger, RecursiveVisitor$1 as TmplAstRecursiveVisitor, Reference as TmplAstReference, SwitchBlock as TmplAstSwitchBlock, SwitchBlockCase as TmplAstSwitchBlockCase, Template as TmplAstTemplate, Text$3 as TmplAstText, TextAttribute as TmplAstTextAttribute, TimerDeferredTrigger as TmplAstTimerDeferredTrigger, UnknownBlock as TmplAstUnknownBlock, Variable as TmplAstVariable, ViewportDeferredTrigger as TmplAstViewportDeferredTrigger, Token, TokenType, TransplantedType, TreeError, Type, TypeModifier, TypeofExpr, TypeofExpression, Unary, UnaryOperator, UnaryOperatorExpr, VERSION, VariableBinding, Version, ViewEncapsulation$1 as ViewEncapsulation, VoidExpr, VoidExpression, WrappedNodeExpr, Xliff, Xliff2, Xmb, XmlParser, Xtb, compileClassDebugInfo, compileClassMetadata, compileComponentClassMetadata, compileComponentDeclareClassMetadata, compileComponentFromMetadata, compileDeclareClassMetadata, compileDeclareComponentFromMetadata, compileDeclareDirectiveFromMetadata, compileDeclareFactoryFunction, compileDeclareInjectableFromMetadata, compileDeclareInjectorFromMetadata, compileDeclareNgModuleFromMetadata, compileDeclarePipeFromMetadata, compileDeferResolverFunction, compileDirectiveFromMetadata, compileFactoryFunction, compileHmrInitializer, compileHmrUpdateCallback, compileInjectable, compileInjector, compileNgModule, compileOpaqueAsyncClassMetadata, compilePipeFromMetadata, computeMsgId, core, createCssSelectorFromNode, createInjectableType, createMayBeForwardRefExpression, devOnlyGuardedExpression, emitDistinctChangesOnlyDefaultValue, encapsulateStyle, escapeRegExp, findMatchingDirectivesAndPipes, getHtmlTagDefinition, getNsPrefix, getSafePropertyAccessString, identifierName, isNgContainer, isNgContent, isNgTemplate, jsDocComment, leadingComment, literal, literalMap, makeBindingParser, mergeNsAndName, output_ast as outputAst, parseHostBindings, parseTemplate, preserveWhitespacesDefault, publishFacade, r3JitTypeSourceSpan, sanitizeIdentifier, setEnableTemplateSourceLocations, splitNsName, visitAll$1 as tmplAstVisitAll, verifyHostBindings, visitAll };
34454
34576
  //# sourceMappingURL=compiler.mjs.map