@angular/compiler 20.0.0-next.6 → 20.0.0-next.8

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.0.0-next.6
2
+ * @license Angular v20.0.0-next.8
3
3
  * (c) 2010-2025 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -397,6 +397,15 @@ class SelectorContext {
397
397
  return result;
398
398
  }
399
399
  }
400
+ class SelectorlessMatcher {
401
+ registry;
402
+ constructor(registry) {
403
+ this.registry = registry;
404
+ }
405
+ match(name) {
406
+ return this.registry.get(name) ?? null;
407
+ }
408
+ }
400
409
 
401
410
  // Attention:
402
411
  // This file duplicates types and values from @angular/core
@@ -928,6 +937,7 @@ var BinaryOperator;
928
937
  BinaryOperator[BinaryOperator["BiggerEquals"] = 16] = "BiggerEquals";
929
938
  BinaryOperator[BinaryOperator["NullishCoalesce"] = 17] = "NullishCoalesce";
930
939
  BinaryOperator[BinaryOperator["Exponentiation"] = 18] = "Exponentiation";
940
+ BinaryOperator[BinaryOperator["In"] = 19] = "In";
931
941
  })(BinaryOperator || (BinaryOperator = {}));
932
942
  function nullSafeIsEquivalent(base, other) {
933
943
  if (base == null || other == null) {
@@ -3835,6 +3845,9 @@ class AbstractEmitterVisitor {
3835
3845
  case BinaryOperator.NullishCoalesce:
3836
3846
  opStr = '??';
3837
3847
  break;
3848
+ case BinaryOperator.In:
3849
+ opStr = 'in';
3850
+ break;
3838
3851
  default:
3839
3852
  throw new Error(`Unknown operator ${ast.operator}`);
3840
3853
  }
@@ -12191,6 +12204,7 @@ const BINARY_OPERATORS = new Map([
12191
12204
  ['??', BinaryOperator.NullishCoalesce],
12192
12205
  ['||', BinaryOperator.Or],
12193
12206
  ['+', BinaryOperator.Plus],
12207
+ ['in', BinaryOperator.In],
12194
12208
  ]);
12195
12209
  function namespaceForKey(namespacePrefixKey) {
12196
12210
  const NAMESPACES = new Map([
@@ -18246,6 +18260,7 @@ const KEYWORDS = [
18246
18260
  'this',
18247
18261
  'typeof',
18248
18262
  'void',
18263
+ 'in',
18249
18264
  ];
18250
18265
  class Lexer {
18251
18266
  tokenize(text) {
@@ -18313,6 +18328,9 @@ class Token {
18313
18328
  isKeywordVoid() {
18314
18329
  return this.type === TokenType.Keyword && this.strValue === 'void';
18315
18330
  }
18331
+ isKeywordIn() {
18332
+ return this.type === TokenType.Keyword && this.strValue === 'in';
18333
+ }
18316
18334
  isError() {
18317
18335
  return this.type === TokenType.Error;
18318
18336
  }
@@ -19356,16 +19374,17 @@ class _ParseAST {
19356
19374
  return result;
19357
19375
  }
19358
19376
  parseRelational() {
19359
- // '<', '>', '<=', '>='
19377
+ // '<', '>', '<=', '>=', 'in'
19360
19378
  const start = this.inputIndex;
19361
19379
  let result = this.parseAdditive();
19362
- while (this.next.type == TokenType.Operator) {
19380
+ while (this.next.type == TokenType.Operator || this.next.isKeywordIn) {
19363
19381
  const operator = this.next.strValue;
19364
19382
  switch (operator) {
19365
19383
  case '<':
19366
19384
  case '>':
19367
19385
  case '<=':
19368
19386
  case '>=':
19387
+ case 'in':
19369
19388
  this.advance();
19370
19389
  const right = this.parseAdditive();
19371
19390
  result = new Binary(this.span(start), this.sourceSpan(start), operator, result, right);
@@ -19528,6 +19547,10 @@ class _ParseAST {
19528
19547
  this.advance();
19529
19548
  return new LiteralPrimitive(this.span(start), this.sourceSpan(start), false);
19530
19549
  }
19550
+ else if (this.next.isKeywordIn()) {
19551
+ this.advance();
19552
+ return new LiteralPrimitive(this.span(start), this.sourceSpan(start), 'in');
19553
+ }
19531
19554
  else if (this.next.isKeywordThis()) {
19532
19555
  this.advance();
19533
19556
  return new ThisReceiver(this.span(start), this.sourceSpan(start));
@@ -20345,7 +20368,7 @@ const SCHEMA = [
20345
20368
  /* added manually to avoid breaking changes */
20346
20369
  ',*message,*mozfullscreenchange,*mozfullscreenerror,*mozpointerlockchange,*mozpointerlockerror,*webglcontextcreationerror,*webglcontextlost,*webglcontextrestored',
20347
20370
  '[HTMLElement]^[Element]|accessKey,autocapitalize,!autofocus,contentEditable,dir,!draggable,enterKeyHint,!hidden,!inert,innerText,inputMode,lang,nonce,*abort,*animationend,*animationiteration,*animationstart,*auxclick,*beforexrselect,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*formdata,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*paste,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerrawupdate,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*securitypolicyviolation,*seeked,*seeking,*select,*selectionchange,*selectstart,*slotchange,*stalled,*submit,*suspend,*timeupdate,*toggle,*transitioncancel,*transitionend,*transitionrun,*transitionstart,*volumechange,*waiting,*webkitanimationend,*webkitanimationiteration,*webkitanimationstart,*webkittransitionend,*wheel,outerText,!spellcheck,%style,#tabIndex,title,!translate,virtualKeyboardPolicy',
20348
- 'abbr,address,article,aside,b,bdi,bdo,cite,content,code,dd,dfn,dt,em,figcaption,figure,footer,header,hgroup,i,kbd,main,mark,nav,noscript,rb,rp,rt,rtc,ruby,s,samp,section,small,strong,sub,sup,u,var,wbr^[HTMLElement]|accessKey,autocapitalize,!autofocus,contentEditable,dir,!draggable,enterKeyHint,!hidden,innerText,inputMode,lang,nonce,*abort,*animationend,*animationiteration,*animationstart,*auxclick,*beforexrselect,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*formdata,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*paste,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerrawupdate,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*securitypolicyviolation,*seeked,*seeking,*select,*selectionchange,*selectstart,*slotchange,*stalled,*submit,*suspend,*timeupdate,*toggle,*transitioncancel,*transitionend,*transitionrun,*transitionstart,*volumechange,*waiting,*webkitanimationend,*webkitanimationiteration,*webkitanimationstart,*webkittransitionend,*wheel,outerText,!spellcheck,%style,#tabIndex,title,!translate,virtualKeyboardPolicy',
20371
+ 'abbr,address,article,aside,b,bdi,bdo,cite,content,code,dd,dfn,dt,em,figcaption,figure,footer,header,hgroup,i,kbd,main,mark,nav,noscript,rb,rp,rt,rtc,ruby,s,samp,search,section,small,strong,sub,sup,u,var,wbr^[HTMLElement]|accessKey,autocapitalize,!autofocus,contentEditable,dir,!draggable,enterKeyHint,!hidden,innerText,inputMode,lang,nonce,*abort,*animationend,*animationiteration,*animationstart,*auxclick,*beforexrselect,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*formdata,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*paste,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerrawupdate,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*securitypolicyviolation,*seeked,*seeking,*select,*selectionchange,*selectstart,*slotchange,*stalled,*submit,*suspend,*timeupdate,*toggle,*transitioncancel,*transitionend,*transitionrun,*transitionstart,*volumechange,*waiting,*webkitanimationend,*webkitanimationiteration,*webkitanimationstart,*webkittransitionend,*wheel,outerText,!spellcheck,%style,#tabIndex,title,!translate,virtualKeyboardPolicy',
20349
20372
  'media^[HTMLElement]|!autoplay,!controls,%controlsList,%crossOrigin,#currentTime,!defaultMuted,#defaultPlaybackRate,!disableRemotePlayback,!loop,!muted,*encrypted,*waitingforkey,#playbackRate,preload,!preservesPitch,src,%srcObject,#volume',
20350
20373
  ':svg:^[HTMLElement]|!autofocus,nonce,*abort,*animationend,*animationiteration,*animationstart,*auxclick,*beforexrselect,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*formdata,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*paste,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerrawupdate,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*securitypolicyviolation,*seeked,*seeking,*select,*selectionchange,*selectstart,*slotchange,*stalled,*submit,*suspend,*timeupdate,*toggle,*transitioncancel,*transitionend,*transitionrun,*transitionstart,*volumechange,*waiting,*webkitanimationend,*webkitanimationiteration,*webkitanimationstart,*webkittransitionend,*wheel,%style,#tabIndex',
20351
20374
  ':svg:graphics^:svg:|',
@@ -20412,6 +20435,7 @@ const SCHEMA = [
20412
20435
  'source^[HTMLElement]|#height,media,sizes,src,srcset,type,#width',
20413
20436
  'span^[HTMLElement]|',
20414
20437
  'style^[HTMLElement]|!disabled,media,type',
20438
+ 'search^[HTMLELement]|',
20415
20439
  'caption^[HTMLElement]|align',
20416
20440
  'th,td^[HTMLElement]|abbr,align,axis,bgColor,ch,chOff,#colSpan,headers,height,!noWrap,#rowSpan,scope,vAlign,width',
20417
20441
  'col,colgroup^[HTMLElement]|align,ch,chOff,#span,vAlign,width',
@@ -29269,6 +29293,7 @@ class HtmlAstToIvyAst {
29269
29293
  return null;
29270
29294
  }
29271
29295
  const { attributes, boundEvents, references, templateVariables, elementHasInlineTemplate, parsedProperties, templateParsedProperties, i18nAttrsMeta, } = this.prepareAttributes(component.attrs, false);
29296
+ this.validateSelectorlessReferences(references);
29272
29297
  const directives = this.extractDirectives(component);
29273
29298
  let children;
29274
29299
  if (component.attrs.find((attr) => attr.name === 'ngNonBindable')) {
@@ -29571,6 +29596,7 @@ class HtmlAstToIvyAst {
29571
29596
  continue;
29572
29597
  }
29573
29598
  const { attributes, parsedProperties, boundEvents, references, i18nAttrsMeta } = this.prepareAttributes(directive.attrs, false);
29599
+ this.validateSelectorlessReferences(references);
29574
29600
  const { bound: inputs } = this.categorizePropertyAttributes(elementName, parsedProperties, i18nAttrsMeta);
29575
29601
  for (const input of inputs) {
29576
29602
  if (input.type !== BindingType.Property && input.type !== BindingType.TwoWay) {
@@ -29654,6 +29680,23 @@ class HtmlAstToIvyAst {
29654
29680
  /* isAssignmentEvent */ true, sourceSpan, valueSpan || sourceSpan, targetMatchableAttrs, events, keySpan);
29655
29681
  addEvents(events, boundEvents);
29656
29682
  }
29683
+ validateSelectorlessReferences(references) {
29684
+ if (references.length === 0) {
29685
+ return;
29686
+ }
29687
+ const seenNames = new Set();
29688
+ for (const ref of references) {
29689
+ if (ref.value.length > 0) {
29690
+ this.reportError('Cannot specify a value for a local reference in this context', ref.valueSpan || ref.sourceSpan);
29691
+ }
29692
+ else if (seenNames.has(ref.name)) {
29693
+ this.reportError('Duplicate reference names are not allowed', ref.sourceSpan);
29694
+ }
29695
+ else {
29696
+ seenNames.add(ref.name);
29697
+ }
29698
+ }
29699
+ }
29657
29700
  reportError(message, sourceSpan, level = ParseErrorLevel.ERROR) {
29658
29701
  this.errors.push(new ParseError(sourceSpan, message, level));
29659
29702
  }
@@ -29755,6 +29798,7 @@ function parseTemplate(template, templateUrl, options = {}) {
29755
29798
  tokenizeExpansionForms: true,
29756
29799
  tokenizeBlocks: options.enableBlockSyntax ?? true,
29757
29800
  tokenizeLet: options.enableLetSyntax ?? true,
29801
+ selectorlessEnabled: options.enableSelectorless ?? false,
29758
29802
  });
29759
29803
  if (!options.alwaysAttemptHtmlToR3AstConversion &&
29760
29804
  parseResult.errors &&
@@ -30513,9 +30557,9 @@ class Scope {
30513
30557
  */
30514
30558
  namedEntities = new Map();
30515
30559
  /**
30516
- * Set of elements that belong to this scope.
30560
+ * Set of element-like nodes that belong to this scope.
30517
30561
  */
30518
- elementsInScope = new Set();
30562
+ elementLikeInScope = new Set();
30519
30563
  /**
30520
30564
  * Child `Scope`s for immediately nested `ScopedNode`s.
30521
30565
  */
@@ -30576,12 +30620,7 @@ class Scope {
30576
30620
  }
30577
30621
  }
30578
30622
  visitElement(element) {
30579
- element.directives.forEach((node) => node.visit(this));
30580
- // `Element`s in the template may have `Reference`s which are captured in the scope.
30581
- element.references.forEach((node) => this.visitReference(node));
30582
- // Recurse into the `Element`'s children.
30583
- element.children.forEach((node) => node.visit(this));
30584
- this.elementsInScope.add(element);
30623
+ this.visitElementLike(element);
30585
30624
  }
30586
30625
  visitTemplate(template) {
30587
30626
  template.directives.forEach((node) => node.visit(this));
@@ -30640,10 +30679,10 @@ class Scope {
30640
30679
  this.maybeDeclare(decl);
30641
30680
  }
30642
30681
  visitComponent(component) {
30643
- throw new Error('TODO');
30682
+ this.visitElementLike(component);
30644
30683
  }
30645
30684
  visitDirective(directive) {
30646
- throw new Error('TODO');
30685
+ directive.references.forEach((current) => this.visitReference(current));
30647
30686
  }
30648
30687
  // Unused visitors.
30649
30688
  visitBoundAttribute(attr) { }
@@ -30654,6 +30693,12 @@ class Scope {
30654
30693
  visitIcu(icu) { }
30655
30694
  visitDeferredTrigger(trigger) { }
30656
30695
  visitUnknownBlock(block) { }
30696
+ visitElementLike(node) {
30697
+ node.directives.forEach((current) => current.visit(this));
30698
+ node.references.forEach((current) => this.visitReference(current));
30699
+ node.children.forEach((current) => current.visit(this));
30700
+ this.elementLikeInScope.add(node);
30701
+ }
30657
30702
  maybeDeclare(thing) {
30658
30703
  // Declare something with a name, as long as that name isn't taken.
30659
30704
  if (!this.namedEntities.has(thing.name)) {
@@ -30703,15 +30748,15 @@ class Scope {
30703
30748
  * Usually used via the static `apply()` method.
30704
30749
  */
30705
30750
  class DirectiveBinder {
30706
- matcher;
30751
+ directiveMatcher;
30707
30752
  directives;
30708
30753
  eagerDirectives;
30709
30754
  bindings;
30710
30755
  references;
30711
30756
  // Indicates whether we are visiting elements within a `defer` block
30712
30757
  isInDeferBlock = false;
30713
- constructor(matcher, directives, eagerDirectives, bindings, references) {
30714
- this.matcher = matcher;
30758
+ constructor(directiveMatcher, directives, eagerDirectives, bindings, references) {
30759
+ this.directiveMatcher = directiveMatcher;
30715
30760
  this.directives = directives;
30716
30761
  this.eagerDirectives = eagerDirectives;
30717
30762
  this.bindings = bindings;
@@ -30729,8 +30774,8 @@ class DirectiveBinder {
30729
30774
  * map which resolves #references (`Reference`s) within the template to the named directive or
30730
30775
  * template node.
30731
30776
  */
30732
- static apply(template, selectorMatcher, directives, eagerDirectives, bindings, references) {
30733
- const matcher = new DirectiveBinder(selectorMatcher, directives, eagerDirectives, bindings, references);
30777
+ static apply(template, directiveMatcher, directives, eagerDirectives, bindings, references) {
30778
+ const matcher = new DirectiveBinder(directiveMatcher, directives, eagerDirectives, bindings, references);
30734
30779
  matcher.ingest(template);
30735
30780
  }
30736
30781
  ingest(template) {
@@ -30742,23 +30787,129 @@ class DirectiveBinder {
30742
30787
  visitTemplate(template) {
30743
30788
  this.visitElementOrTemplate(template);
30744
30789
  }
30790
+ visitDeferredBlock(deferred) {
30791
+ const wasInDeferBlock = this.isInDeferBlock;
30792
+ this.isInDeferBlock = true;
30793
+ deferred.children.forEach((child) => child.visit(this));
30794
+ this.isInDeferBlock = wasInDeferBlock;
30795
+ deferred.placeholder?.visit(this);
30796
+ deferred.loading?.visit(this);
30797
+ deferred.error?.visit(this);
30798
+ }
30799
+ visitDeferredBlockPlaceholder(block) {
30800
+ block.children.forEach((child) => child.visit(this));
30801
+ }
30802
+ visitDeferredBlockError(block) {
30803
+ block.children.forEach((child) => child.visit(this));
30804
+ }
30805
+ visitDeferredBlockLoading(block) {
30806
+ block.children.forEach((child) => child.visit(this));
30807
+ }
30808
+ visitSwitchBlock(block) {
30809
+ block.cases.forEach((node) => node.visit(this));
30810
+ }
30811
+ visitSwitchBlockCase(block) {
30812
+ block.children.forEach((node) => node.visit(this));
30813
+ }
30814
+ visitForLoopBlock(block) {
30815
+ block.item.visit(this);
30816
+ block.contextVariables.forEach((v) => v.visit(this));
30817
+ block.children.forEach((node) => node.visit(this));
30818
+ block.empty?.visit(this);
30819
+ }
30820
+ visitForLoopBlockEmpty(block) {
30821
+ block.children.forEach((node) => node.visit(this));
30822
+ }
30823
+ visitIfBlock(block) {
30824
+ block.branches.forEach((node) => node.visit(this));
30825
+ }
30826
+ visitIfBlockBranch(block) {
30827
+ block.expressionAlias?.visit(this);
30828
+ block.children.forEach((node) => node.visit(this));
30829
+ }
30830
+ visitContent(content) {
30831
+ content.children.forEach((child) => child.visit(this));
30832
+ }
30833
+ visitComponent(node) {
30834
+ const directives = [];
30835
+ let componentMetas = null;
30836
+ if (this.directiveMatcher instanceof SelectorlessMatcher) {
30837
+ componentMetas = this.directiveMatcher.match(node.componentName);
30838
+ if (componentMetas !== null) {
30839
+ directives.push(...componentMetas);
30840
+ }
30841
+ for (const directive of node.directives) {
30842
+ const directiveMetas = this.directiveMatcher.match(directive.name);
30843
+ if (directiveMetas !== null) {
30844
+ directives.push(...directiveMetas);
30845
+ }
30846
+ }
30847
+ }
30848
+ this.trackMatchedDirectives(node, directives);
30849
+ if (componentMetas !== null) {
30850
+ this.trackSelectorlessBindings(node, componentMetas);
30851
+ }
30852
+ node.directives.forEach((directive) => directive.visit(this));
30853
+ node.children.forEach((child) => child.visit(this));
30854
+ }
30855
+ visitDirective(node) {
30856
+ const directives = this.directiveMatcher instanceof SelectorlessMatcher
30857
+ ? this.directiveMatcher.match(node.name)
30858
+ : null;
30859
+ if (directives !== null) {
30860
+ this.trackSelectorlessBindings(node, directives);
30861
+ }
30862
+ }
30745
30863
  visitElementOrTemplate(node) {
30746
- // First, determine the HTML shape of the node for the purpose of directive matching.
30747
- // Do this by building up a `CssSelector` for the node.
30748
- const cssSelector = createCssSelectorFromNode(node);
30749
- // TODO(crisbeto): account for selectorless directives here.
30750
- if (node.directives.length > 0) {
30751
- throw new Error('TODO');
30752
- }
30753
- // Next, use the `SelectorMatcher` to get the list of directives on the node.
30754
30864
  const directives = [];
30755
- this.matcher.match(cssSelector, (_selector, results) => directives.push(...results));
30865
+ if (this.directiveMatcher instanceof SelectorMatcher) {
30866
+ // First, determine the HTML shape of the node for the purpose of directive matching.
30867
+ // Do this by building up a `CssSelector` for the node.
30868
+ const cssSelector = createCssSelectorFromNode(node);
30869
+ this.directiveMatcher.match(cssSelector, (_selector, results) => {
30870
+ directives.push(...results);
30871
+ });
30872
+ this.trackSelectorMatchedBindings(node, directives);
30873
+ }
30874
+ else {
30875
+ for (const directive of node.directives) {
30876
+ const matchedDirectives = this.directiveMatcher.match(directive.name);
30877
+ if (matchedDirectives !== null) {
30878
+ directives.push(...matchedDirectives);
30879
+ }
30880
+ }
30881
+ }
30882
+ this.trackMatchedDirectives(node, directives);
30883
+ node.directives.forEach((directive) => directive.visit(this));
30884
+ node.children.forEach((child) => child.visit(this));
30885
+ }
30886
+ trackMatchedDirectives(node, directives) {
30756
30887
  if (directives.length > 0) {
30757
30888
  this.directives.set(node, directives);
30758
30889
  if (!this.isInDeferBlock) {
30759
30890
  this.eagerDirectives.push(...directives);
30760
30891
  }
30761
30892
  }
30893
+ }
30894
+ trackSelectorlessBindings(node, metas) {
30895
+ const setBinding = (meta, attribute, ioType) => {
30896
+ if (meta[ioType].hasBindingPropertyName(attribute.name)) {
30897
+ this.bindings.set(attribute, meta);
30898
+ }
30899
+ };
30900
+ for (const meta of metas) {
30901
+ node.inputs.forEach((input) => setBinding(meta, input, 'inputs'));
30902
+ node.attributes.forEach((attr) => setBinding(meta, attr, 'inputs'));
30903
+ node.outputs.forEach((output) => setBinding(meta, output, 'outputs'));
30904
+ }
30905
+ // TODO(crisbeto): currently it's unclear how references should behave under selectorless,
30906
+ // given that there's one named class which can bring in multiple host directives.
30907
+ // For the time being only register the first directive as the reference target.
30908
+ if (metas.length > 0) {
30909
+ node.references.forEach((ref) => this.references.set(ref, { directive: metas[0], node: node }));
30910
+ }
30911
+ }
30912
+ trackSelectorMatchedBindings(node, directives) {
30762
30913
  // Resolve any references that are created on this node.
30763
30914
  node.references.forEach((ref) => {
30764
30915
  let dirTarget = null;
@@ -30789,6 +30940,7 @@ class DirectiveBinder {
30789
30940
  this.references.set(ref, node);
30790
30941
  }
30791
30942
  });
30943
+ // Associate attributes/bindings on the node with directives or with the node itself.
30792
30944
  const setAttributeBinding = (attribute, ioType) => {
30793
30945
  const dir = directives.find((dir) => dir[ioType].hasBindingPropertyName(attribute.name));
30794
30946
  const binding = dir !== undefined ? dir : node;
@@ -30803,57 +30955,6 @@ class DirectiveBinder {
30803
30955
  }
30804
30956
  // Node outputs (bound events) can be bound to an output on a directive.
30805
30957
  node.outputs.forEach((output) => setAttributeBinding(output, 'outputs'));
30806
- // Recurse into the node's children.
30807
- node.children.forEach((child) => child.visit(this));
30808
- }
30809
- visitDeferredBlock(deferred) {
30810
- const wasInDeferBlock = this.isInDeferBlock;
30811
- this.isInDeferBlock = true;
30812
- deferred.children.forEach((child) => child.visit(this));
30813
- this.isInDeferBlock = wasInDeferBlock;
30814
- deferred.placeholder?.visit(this);
30815
- deferred.loading?.visit(this);
30816
- deferred.error?.visit(this);
30817
- }
30818
- visitDeferredBlockPlaceholder(block) {
30819
- block.children.forEach((child) => child.visit(this));
30820
- }
30821
- visitDeferredBlockError(block) {
30822
- block.children.forEach((child) => child.visit(this));
30823
- }
30824
- visitDeferredBlockLoading(block) {
30825
- block.children.forEach((child) => child.visit(this));
30826
- }
30827
- visitSwitchBlock(block) {
30828
- block.cases.forEach((node) => node.visit(this));
30829
- }
30830
- visitSwitchBlockCase(block) {
30831
- block.children.forEach((node) => node.visit(this));
30832
- }
30833
- visitForLoopBlock(block) {
30834
- block.item.visit(this);
30835
- block.contextVariables.forEach((v) => v.visit(this));
30836
- block.children.forEach((node) => node.visit(this));
30837
- block.empty?.visit(this);
30838
- }
30839
- visitForLoopBlockEmpty(block) {
30840
- block.children.forEach((node) => node.visit(this));
30841
- }
30842
- visitIfBlock(block) {
30843
- block.branches.forEach((node) => node.visit(this));
30844
- }
30845
- visitIfBlockBranch(block) {
30846
- block.expressionAlias?.visit(this);
30847
- block.children.forEach((node) => node.visit(this));
30848
- }
30849
- visitContent(content) {
30850
- content.children.forEach((child) => child.visit(this));
30851
- }
30852
- visitComponent(component) {
30853
- throw new Error('TODO');
30854
- }
30855
- visitDirective(directive) {
30856
- throw new Error('TODO');
30857
30958
  }
30858
30959
  // Unused visitors.
30859
30960
  visitVariable(variable) { }
@@ -31012,10 +31113,16 @@ class TemplateBinder extends RecursiveAstVisitor {
31012
31113
  }
31013
31114
  }
31014
31115
  visitComponent(component) {
31015
- throw new Error('TODO');
31116
+ component.inputs.forEach(this.visitNode);
31117
+ component.outputs.forEach(this.visitNode);
31118
+ component.directives.forEach(this.visitNode);
31119
+ component.children.forEach(this.visitNode);
31120
+ component.references.forEach(this.visitNode);
31016
31121
  }
31017
31122
  visitDirective(directive) {
31018
- throw new Error('TODO');
31123
+ directive.inputs.forEach(this.visitNode);
31124
+ directive.outputs.forEach(this.visitNode);
31125
+ directive.references.forEach(this.visitNode);
31019
31126
  }
31020
31127
  // Unused template visitors
31021
31128
  visitText(text) { }
@@ -31259,7 +31366,7 @@ class R3BoundTarget {
31259
31366
  const stack = [this.deferredScopes.get(block)];
31260
31367
  while (stack.length > 0) {
31261
31368
  const current = stack.pop();
31262
- if (current.elementsInScope.has(element)) {
31369
+ if (current.elementLikeInScope.has(element)) {
31263
31370
  return true;
31264
31371
  }
31265
31372
  stack.push(...current.childScopes.values());
@@ -31286,7 +31393,9 @@ class R3BoundTarget {
31286
31393
  if (target instanceof Element$1) {
31287
31394
  return target;
31288
31395
  }
31289
- if (target instanceof Template) {
31396
+ if (target instanceof Template ||
31397
+ target.node instanceof Component$1 ||
31398
+ target.node instanceof Directive$1) {
31290
31399
  return null;
31291
31400
  }
31292
31401
  return this.referenceTargetToElement(target.node);
@@ -33766,7 +33875,7 @@ const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
33766
33875
  function compileDeclareClassMetadata(metadata) {
33767
33876
  const definitionMap = new DefinitionMap();
33768
33877
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
33769
- definitionMap.set('version', literal('20.0.0-next.6'));
33878
+ definitionMap.set('version', literal('20.0.0-next.8'));
33770
33879
  definitionMap.set('ngImport', importExpr(Identifiers.core));
33771
33880
  definitionMap.set('type', metadata.type);
33772
33881
  definitionMap.set('decorators', metadata.decorators);
@@ -33784,7 +33893,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
33784
33893
  callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? literal(null));
33785
33894
  callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? literal(null));
33786
33895
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
33787
- definitionMap.set('version', literal('20.0.0-next.6'));
33896
+ definitionMap.set('version', literal('20.0.0-next.8'));
33788
33897
  definitionMap.set('ngImport', importExpr(Identifiers.core));
33789
33898
  definitionMap.set('type', metadata.type);
33790
33899
  definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
@@ -33879,7 +33988,7 @@ function createDirectiveDefinitionMap(meta) {
33879
33988
  const definitionMap = new DefinitionMap();
33880
33989
  const minVersion = getMinimumVersionForPartialOutput(meta);
33881
33990
  definitionMap.set('minVersion', literal(minVersion));
33882
- definitionMap.set('version', literal('20.0.0-next.6'));
33991
+ definitionMap.set('version', literal('20.0.0-next.8'));
33883
33992
  // e.g. `type: MyDirective`
33884
33993
  definitionMap.set('type', meta.type.value);
33885
33994
  if (meta.isStandalone !== undefined) {
@@ -34295,7 +34404,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
34295
34404
  function compileDeclareFactoryFunction(meta) {
34296
34405
  const definitionMap = new DefinitionMap();
34297
34406
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
34298
- definitionMap.set('version', literal('20.0.0-next.6'));
34407
+ definitionMap.set('version', literal('20.0.0-next.8'));
34299
34408
  definitionMap.set('ngImport', importExpr(Identifiers.core));
34300
34409
  definitionMap.set('type', meta.type.value);
34301
34410
  definitionMap.set('deps', compileDependencies(meta.deps));
@@ -34330,7 +34439,7 @@ function compileDeclareInjectableFromMetadata(meta) {
34330
34439
  function createInjectableDefinitionMap(meta) {
34331
34440
  const definitionMap = new DefinitionMap();
34332
34441
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
34333
- definitionMap.set('version', literal('20.0.0-next.6'));
34442
+ definitionMap.set('version', literal('20.0.0-next.8'));
34334
34443
  definitionMap.set('ngImport', importExpr(Identifiers.core));
34335
34444
  definitionMap.set('type', meta.type.value);
34336
34445
  // Only generate providedIn property if it has a non-null value
@@ -34381,7 +34490,7 @@ function compileDeclareInjectorFromMetadata(meta) {
34381
34490
  function createInjectorDefinitionMap(meta) {
34382
34491
  const definitionMap = new DefinitionMap();
34383
34492
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
34384
- definitionMap.set('version', literal('20.0.0-next.6'));
34493
+ definitionMap.set('version', literal('20.0.0-next.8'));
34385
34494
  definitionMap.set('ngImport', importExpr(Identifiers.core));
34386
34495
  definitionMap.set('type', meta.type.value);
34387
34496
  definitionMap.set('providers', meta.providers);
@@ -34414,7 +34523,7 @@ function createNgModuleDefinitionMap(meta) {
34414
34523
  throw new Error('Invalid path! Local compilation mode should not get into the partial compilation path');
34415
34524
  }
34416
34525
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
34417
- definitionMap.set('version', literal('20.0.0-next.6'));
34526
+ definitionMap.set('version', literal('20.0.0-next.8'));
34418
34527
  definitionMap.set('ngImport', importExpr(Identifiers.core));
34419
34528
  definitionMap.set('type', meta.type.value);
34420
34529
  // We only generate the keys in the metadata if the arrays contain values.
@@ -34465,7 +34574,7 @@ function compileDeclarePipeFromMetadata(meta) {
34465
34574
  function createPipeDefinitionMap(meta) {
34466
34575
  const definitionMap = new DefinitionMap();
34467
34576
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION));
34468
- definitionMap.set('version', literal('20.0.0-next.6'));
34577
+ definitionMap.set('version', literal('20.0.0-next.8'));
34469
34578
  definitionMap.set('ngImport', importExpr(Identifiers.core));
34470
34579
  // e.g. `type: MyPipe`
34471
34580
  definitionMap.set('type', meta.type.value);
@@ -34623,7 +34732,7 @@ function compileHmrUpdateCallback(definitions, constantStatements, meta) {
34623
34732
  * @description
34624
34733
  * Entry point for all public APIs of the compiler package.
34625
34734
  */
34626
- const VERSION = new Version('20.0.0-next.6');
34735
+ const VERSION = new Version('20.0.0-next.8');
34627
34736
 
34628
34737
  //////////////////////////////////////
34629
34738
  // THIS FILE HAS GLOBAL SIDE EFFECT //
@@ -34649,5 +34758,5 @@ const VERSION = new Version('20.0.0-next.6');
34649
34758
  // the late binding of the Compiler to the @angular/core for jit compilation.
34650
34759
  publishFacade(_global);
34651
34760
 
34652
- export { AST, ASTWithName, ASTWithSource, AbsoluteSourceSpan, ArrayType, ArrowFunctionExpr, Attribute, Binary, BinaryOperator, BinaryOperatorExpr, BindingPipe, BindingType, Block, BlockParameter, BoundElementProperty, BuiltinType, BuiltinTypeName, CUSTOM_ELEMENTS_SCHEMA, Call, Chain, ChangeDetectionStrategy, CommaExpr, Comment, CompilerConfig, 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$1 as FactoryTarget, FunctionExpr, HtmlParser, HtmlTagDefinition, I18NHtmlParser, IfStmt, ImplicitReceiver, InstantiateExpr, Interpolation$1 as Interpolation, InterpolationConfig, InvokeFunctionExpr, JSDocComment, JitEvaluator, KeyedRead, KeyedWrite, 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, PropertyWrite, Identifiers as R3Identifiers, R3NgModuleMetadataKind, R3SelectorScopeMode, R3TargetBinder, R3TemplateDependencyKind, ReadKeyExpr, ReadPropExpr, ReadVarExpr, RecursiveAstVisitor, RecursiveVisitor, ResourceLoader, ReturnStatement, STRING_TYPE, SafeCall, SafeKeyedRead, SafePropertyRead, SelectorContext, SelectorListContext, SelectorMatcher, 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, VoidExpr, VoidExpression, WrappedNodeExpr, WriteKeyExpr, WritePropExpr, WriteVarExpr, 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, findMatchingDirectivesAndPipes, getHtmlTagDefinition, getNsPrefix, getSafePropertyAccessString, identifierName, isNgContainer, isNgContent, isNgTemplate, jsDocComment, leadingComment, literal, literalMap, makeBindingParser, mergeNsAndName, output_ast as outputAst, parseHostBindings, parseTemplate, preserveWhitespacesDefault, publishFacade, r3JitTypeSourceSpan, sanitizeIdentifier, splitNsName, visitAll$1 as tmplAstVisitAll, verifyHostBindings, visitAll };
34761
+ export { AST, ASTWithName, ASTWithSource, AbsoluteSourceSpan, ArrayType, ArrowFunctionExpr, Attribute, Binary, BinaryOperator, BinaryOperatorExpr, BindingPipe, BindingType, Block, BlockParameter, BoundElementProperty, BuiltinType, BuiltinTypeName, CUSTOM_ELEMENTS_SCHEMA, Call, Chain, ChangeDetectionStrategy, CommaExpr, Comment, CompilerConfig, 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$1 as FactoryTarget, FunctionExpr, HtmlParser, HtmlTagDefinition, I18NHtmlParser, IfStmt, ImplicitReceiver, InstantiateExpr, Interpolation$1 as Interpolation, InterpolationConfig, InvokeFunctionExpr, JSDocComment, JitEvaluator, KeyedRead, KeyedWrite, 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, PropertyWrite, Identifiers as R3Identifiers, R3NgModuleMetadataKind, R3SelectorScopeMode, R3TargetBinder, R3TemplateDependencyKind, ReadKeyExpr, ReadPropExpr, ReadVarExpr, RecursiveAstVisitor, RecursiveVisitor, ResourceLoader, ReturnStatement, 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, VoidExpr, VoidExpression, WrappedNodeExpr, WriteKeyExpr, WritePropExpr, WriteVarExpr, 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, findMatchingDirectivesAndPipes, getHtmlTagDefinition, getNsPrefix, getSafePropertyAccessString, identifierName, isNgContainer, isNgContent, isNgTemplate, jsDocComment, leadingComment, literal, literalMap, makeBindingParser, mergeNsAndName, output_ast as outputAst, parseHostBindings, parseTemplate, preserveWhitespacesDefault, publishFacade, r3JitTypeSourceSpan, sanitizeIdentifier, splitNsName, visitAll$1 as tmplAstVisitAll, verifyHostBindings, visitAll };
34653
34762
  //# sourceMappingURL=compiler.mjs.map