@angular/core 21.0.0-next.7 → 21.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.
Files changed (77) hide show
  1. package/fesm2022/_attribute-chunk.mjs +1 -1
  2. package/fesm2022/_attribute-chunk.mjs.map +1 -1
  3. package/fesm2022/_debug_node-chunk.mjs +265 -155
  4. package/fesm2022/_debug_node-chunk.mjs.map +1 -1
  5. package/fesm2022/_effect-chunk.mjs +1 -1
  6. package/fesm2022/_effect-chunk.mjs.map +1 -1
  7. package/fesm2022/_not_found-chunk.mjs +1 -1
  8. package/fesm2022/_not_found-chunk.mjs.map +1 -1
  9. package/fesm2022/_resource-chunk.mjs +1 -1
  10. package/fesm2022/_resource-chunk.mjs.map +1 -1
  11. package/fesm2022/_root_effect_scheduler-chunk.mjs +7 -2
  12. package/fesm2022/_root_effect_scheduler-chunk.mjs.map +1 -1
  13. package/fesm2022/_signal-chunk.mjs +1 -1
  14. package/fesm2022/_signal-chunk.mjs.map +1 -1
  15. package/fesm2022/_weak_ref-chunk.mjs +1 -1
  16. package/fesm2022/_weak_ref-chunk.mjs.map +1 -1
  17. package/fesm2022/core.mjs +8 -12
  18. package/fesm2022/core.mjs.map +1 -1
  19. package/fesm2022/primitives-di.mjs +1 -1
  20. package/fesm2022/primitives-di.mjs.map +1 -1
  21. package/fesm2022/primitives-event-dispatch.mjs +1 -1
  22. package/fesm2022/primitives-event-dispatch.mjs.map +1 -1
  23. package/fesm2022/primitives-signals.mjs +1 -1
  24. package/fesm2022/primitives-signals.mjs.map +1 -1
  25. package/fesm2022/rxjs-interop.mjs +1 -1
  26. package/fesm2022/rxjs-interop.mjs.map +1 -1
  27. package/fesm2022/testing.mjs +1 -1
  28. package/fesm2022/testing.mjs.map +1 -1
  29. package/package.json +2 -2
  30. package/schematics/bundles/add-bootstrap-context-to-server-main.cjs +5 -5
  31. package/schematics/bundles/application-config-core.cjs +5 -5
  32. package/schematics/bundles/{apply_import_manager-D_4NSuRa.cjs → apply_import_manager-CBLmogDD.cjs} +3 -3
  33. package/schematics/bundles/bootstrap-options-migration.cjs +5 -5
  34. package/schematics/bundles/cleanup-unused-imports.cjs +5 -5
  35. package/schematics/bundles/{compiler_host-C1KRWoxv.cjs → compiler_host-T6xncpiw.cjs} +2 -2
  36. package/schematics/bundles/control-flow-migration.cjs +4 -4
  37. package/schematics/bundles/imports-DwPXlGFl.cjs +1 -1
  38. package/schematics/bundles/{index-BFENxhdR.cjs → index-BnmACOsq.cjs} +237 -98
  39. package/schematics/bundles/{index-DYqR8Lpq.cjs → index-DWSaRJdz.cjs} +4 -4
  40. package/schematics/bundles/inject-migration.cjs +3 -3
  41. package/schematics/bundles/leading_space-D9nQ8UQC.cjs +1 -1
  42. package/schematics/bundles/{migrate_ts_type_references-CemH7A8e.cjs → migrate_ts_type_references-Cu-FR4L5.cjs} +47 -5
  43. package/schematics/bundles/{ng_component_template-AYs8YXuT.cjs → ng_component_template-BkWiUuGG.cjs} +2 -2
  44. package/schematics/bundles/ng_decorators-BI0uV7KI.cjs +1 -1
  45. package/schematics/bundles/ngclass-to-class-migration.cjs +7 -7
  46. package/schematics/bundles/ngstyle-to-style-migration.cjs +7 -7
  47. package/schematics/bundles/nodes-B16H9JUd.cjs +1 -1
  48. package/schematics/bundles/output-migration.cjs +6 -6
  49. package/schematics/bundles/{parse_html-6-AB4O-A.cjs → parse_html-C97tKKp3.cjs} +2 -2
  50. package/schematics/bundles/{project_paths-EiOrjlNS.cjs → project_paths-C6g3lqjX.cjs} +3 -3
  51. package/schematics/bundles/{project_tsconfig_paths-BbVhi4fG.cjs → project_tsconfig_paths-CdhVNYMk.cjs} +326 -46
  52. package/schematics/bundles/property_name-BBwFuqMe.cjs +1 -1
  53. package/schematics/bundles/route-lazy-loading.cjs +3 -3
  54. package/schematics/bundles/router-current-navigation.cjs +4 -4
  55. package/schematics/bundles/router-last-successful-navigation.cjs +4 -4
  56. package/schematics/bundles/router-testing-module-migration.cjs +513 -0
  57. package/schematics/bundles/self-closing-tags-migration.cjs +6 -6
  58. package/schematics/bundles/signal-input-migration.cjs +7 -7
  59. package/schematics/bundles/signal-queries-migration.cjs +7 -7
  60. package/schematics/bundles/signals.cjs +7 -7
  61. package/schematics/bundles/standalone-migration.cjs +4 -4
  62. package/schematics/bundles/symbol-BObKoqes.cjs +1 -1
  63. package/schematics/collection.json +5 -0
  64. package/schematics/migrations/router-testing-module-migration/schema.json +14 -0
  65. package/types/_api-chunk.d.ts +1 -1
  66. package/types/_chrome_dev_tools_performance-chunk.d.ts +3 -1
  67. package/types/_discovery-chunk.d.ts +51 -9
  68. package/types/_effect-chunk.d.ts +1 -1
  69. package/types/_event_dispatcher-chunk.d.ts +1 -1
  70. package/types/_formatter-chunk.d.ts +1 -1
  71. package/types/_weak_ref-chunk.d.ts +1 -1
  72. package/types/core.d.ts +21 -15
  73. package/types/primitives-di.d.ts +1 -1
  74. package/types/primitives-event-dispatch.d.ts +1 -1
  75. package/types/primitives-signals.d.ts +1 -1
  76. package/types/rxjs-interop.d.ts +1 -1
  77. package/types/testing.d.ts +1 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v21.0.0-next.7
3
+ * @license Angular v21.0.0-next.8
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -2907,6 +2907,16 @@ class Identifiers {
2907
2907
  name: 'ɵɵvalidateIframeAttribute',
2908
2908
  moduleName: CORE,
2909
2909
  };
2910
+ // Decorators
2911
+ static inputDecorator = { name: 'Input', moduleName: CORE };
2912
+ static outputDecorator = { name: 'Output', moduleName: CORE };
2913
+ static viewChildDecorator = { name: 'ViewChild', moduleName: CORE };
2914
+ static viewChildrenDecorator = { name: 'ViewChildren', moduleName: CORE };
2915
+ static contentChildDecorator = { name: 'ContentChild', moduleName: CORE };
2916
+ static contentChildrenDecorator = {
2917
+ name: 'ContentChildren',
2918
+ moduleName: CORE,
2919
+ };
2910
2920
  // type-checking
2911
2921
  static InputSignalBrandWriteType = { name: 'ɵINPUT_SIGNAL_BRAND_WRITE_TYPE', moduleName: CORE };
2912
2922
  static UnwrapDirectiveSignalInputs = { name: 'ɵUnwrapDirectiveSignalInputs', moduleName: CORE };
@@ -4833,9 +4843,11 @@ class InteractionDeferredTrigger extends DeferredTrigger {
4833
4843
  }
4834
4844
  class ViewportDeferredTrigger extends DeferredTrigger {
4835
4845
  reference;
4836
- constructor(reference, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan) {
4846
+ options;
4847
+ constructor(reference, options, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan) {
4837
4848
  super(nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan);
4838
4849
  this.reference = reference;
4850
+ this.options = options;
4839
4851
  }
4840
4852
  }
4841
4853
  class BlockNode {
@@ -8660,14 +8672,14 @@ var OpKind;
8660
8672
  */
8661
8673
  OpKind[OpKind["AnimationListener"] = 56] = "AnimationListener";
8662
8674
  /**
8663
- * An operation to bind an expression to a `control` property of an element.
8675
+ * An operation to bind an expression to a `field` property of an element.
8664
8676
  */
8665
8677
  OpKind[OpKind["Control"] = 57] = "Control";
8666
8678
  /**
8667
8679
  * An operation to set up a corresponding {@link Control} operation.
8668
8680
  *
8669
8681
  * This is responsible for setting up event listeners on a native or custom form control when
8670
- * bound to a specialized control directive.
8682
+ * bound to a specialized field directive.
8671
8683
  */
8672
8684
  OpKind[OpKind["ControlCreate"] = 58] = "ControlCreate";
8673
8685
  })(OpKind || (OpKind = {}));
@@ -11653,7 +11665,7 @@ function extractAttributes(job) {
11653
11665
  case OpKind.Control:
11654
11666
  OpList.insertBefore(
11655
11667
  // Deliberately null i18nMessage value
11656
- createExtractedAttributeOp(op.target, BindingKind.Property, null, 'control',
11668
+ createExtractedAttributeOp(op.target, BindingKind.Property, null, 'field',
11657
11669
  /* expression */ null,
11658
11670
  /* i18nContext */ null,
11659
11671
  /* i18nMessage */ null, op.securityContext), lookupElement$3(elements, op.target));
@@ -11817,7 +11829,7 @@ function specializeBindings(job) {
11817
11829
  else if (job.kind === CompilationJobKind.Host) {
11818
11830
  OpList.replace(op, createDomPropertyOp(op.name, op.expression, op.bindingKind, op.i18nContext, op.securityContext, op.sourceSpan));
11819
11831
  }
11820
- else if (op.name === 'control') {
11832
+ else if (op.name === 'field') {
11821
11833
  OpList.replace(op, createControlOp(op));
11822
11834
  }
11823
11835
  else {
@@ -23669,7 +23681,7 @@ function deferOn(trigger, args, modifier, sourceSpan) {
23669
23681
  if (instructionToCall === undefined) {
23670
23682
  throw new Error(`Unable to determine instruction for trigger ${trigger}`);
23671
23683
  }
23672
- return call(instructionToCall, args.map((a) => literal(a)), sourceSpan);
23684
+ return call(instructionToCall, args, sourceSpan);
23673
23685
  }
23674
23686
  function projectionDef(def) {
23675
23687
  return call(Identifiers.projectionDef, def ? [def] : [], null);
@@ -24260,11 +24272,30 @@ function reifyCreateOperations(unit, ops) {
24260
24272
  case DeferTriggerKind.Immediate:
24261
24273
  break;
24262
24274
  case DeferTriggerKind.Timer:
24263
- args = [op.trigger.delay];
24275
+ args = [literal(op.trigger.delay)];
24276
+ break;
24277
+ case DeferTriggerKind.Viewport:
24278
+ // `hydrate` triggers don't support targets.
24279
+ if (op.modifier === "hydrate" /* ir.DeferOpModifierKind.HYDRATE */) {
24280
+ args = op.trigger.options ? [op.trigger.options] : [];
24281
+ }
24282
+ else {
24283
+ // The slots not being defined at this point is invalid, however we
24284
+ // catch it during type checking. Pass in null in such cases.
24285
+ args = [literal(op.trigger.targetSlot?.slot ?? null)];
24286
+ if (op.trigger.targetSlotViewSteps !== 0) {
24287
+ args.push(literal(op.trigger.targetSlotViewSteps));
24288
+ }
24289
+ else if (op.trigger.options) {
24290
+ args.push(literal(null));
24291
+ }
24292
+ if (op.trigger.options) {
24293
+ args.push(op.trigger.options);
24294
+ }
24295
+ }
24264
24296
  break;
24265
24297
  case DeferTriggerKind.Interaction:
24266
24298
  case DeferTriggerKind.Hover:
24267
- case DeferTriggerKind.Viewport:
24268
24299
  // `hydrate` triggers don't support targets.
24269
24300
  if (op.modifier === "hydrate" /* ir.DeferOpModifierKind.HYDRATE */) {
24270
24301
  args = [];
@@ -24272,9 +24303,9 @@ function reifyCreateOperations(unit, ops) {
24272
24303
  else {
24273
24304
  // The slots not being defined at this point is invalid, however we
24274
24305
  // catch it during type checking. Pass in null in such cases.
24275
- args = [op.trigger.targetSlot?.slot ?? null];
24306
+ args = [literal(op.trigger.targetSlot?.slot ?? null)];
24276
24307
  if (op.trigger.targetSlotViewSteps !== 0) {
24277
- args.push(op.trigger.targetSlotViewSteps);
24308
+ args.push(literal(op.trigger.targetSlotViewSteps));
24278
24309
  }
24279
24310
  }
24280
24311
  break;
@@ -27150,6 +27181,9 @@ function ingestDeferTriggers(modifier, triggers, onOps, whenOps, unit, deferXref
27150
27181
  targetSlot: null,
27151
27182
  targetView: null,
27152
27183
  targetSlotViewSteps: null,
27184
+ options: triggers.viewport.options
27185
+ ? convertAst(triggers.viewport.options, unit.job, triggers.viewport.sourceSpan)
27186
+ : null,
27153
27187
  }, modifier, triggers.viewport.sourceSpan);
27154
27188
  onOps.push(deferOnOp);
27155
27189
  }
@@ -27480,9 +27514,9 @@ function ingestElementBindings(unit, op, element) {
27480
27514
  }
27481
27515
  // All dynamic bindings (both attribute and property bindings).
27482
27516
  bindings.push(createBindingOp(op.xref, BINDING_KINDS.get(input.type), input.name, convertAstWithInterpolation(unit.job, astOf(input.value), input.i18n), input.unit, input.securityContext, false, false, null, asMessage(input.i18n) ?? null, input.sourceSpan));
27483
- // If the input name is 'control', this could be a form control binding which requires a
27517
+ // If the input name is 'field', this could be a form control binding which requires a
27484
27518
  // `ControlCreateOp` to properly initialize.
27485
- if (input.type === exports.BindingType.Property && input.name === 'control') {
27519
+ if (input.type === exports.BindingType.Property && input.name === 'field') {
27486
27520
  unit.create.push(createControlCreateOp(input.sourceSpan));
27487
27521
  }
27488
27522
  }
@@ -28661,6 +28695,7 @@ function createForLoop(ast, connectedBlocks, visitor, bindingParser) {
28661
28695
  // main `for` body, use `mainSourceSpan`.
28662
28696
  const endSpan = empty?.endSourceSpan ?? ast.endSourceSpan;
28663
28697
  const sourceSpan = new ParseSourceSpan(ast.sourceSpan.start, endSpan?.end ?? ast.sourceSpan.end);
28698
+ validateTrackByExpression(params.trackBy.expression, params.trackBy.keywordSpan, errors);
28664
28699
  node = new ForLoopBlock(params.itemName, params.expression, params.trackBy.expression, params.trackBy.keywordSpan, params.context, visitAll(visitor, ast.children, ast.children), empty, sourceSpan, ast.sourceSpan, ast.startSourceSpan, endSpan, ast.nameSpan, ast.i18n);
28665
28700
  }
28666
28701
  }
@@ -28760,6 +28795,13 @@ function parseForLoopParameters(block, errors, bindingParser) {
28760
28795
  }
28761
28796
  return result;
28762
28797
  }
28798
+ function validateTrackByExpression(expression, parseSourceSpan, errors) {
28799
+ const visitor = new PipeVisitor();
28800
+ expression.ast.visit(visitor);
28801
+ if (visitor.hasPipe) {
28802
+ errors.push(new ParseError(parseSourceSpan, 'Cannot use pipes in track expressions'));
28803
+ }
28804
+ }
28763
28805
  /** Parses the `let` parameter of a `for` loop block. */
28764
28806
  function parseLetParameter(sourceSpan, expression, span, loopItemName, context, errors) {
28765
28807
  const parts = expression.split(',');
@@ -28970,6 +29012,12 @@ function stripOptionalParentheses(param, errors) {
28970
29012
  }
28971
29013
  return expression.slice(start, end);
28972
29014
  }
29015
+ class PipeVisitor extends RecursiveAstVisitor {
29016
+ hasPipe = false;
29017
+ visitPipe() {
29018
+ this.hasPipe = true;
29019
+ }
29020
+ }
28973
29021
 
28974
29022
  /** Pattern for a timing value in a trigger. */
28975
29023
  const TIME_PATTERN = /^\d+\.?\d*(ms|s)?$/;
@@ -29025,7 +29073,7 @@ function parseWhenTrigger({ expression, sourceSpan }, bindingParser, triggers, e
29025
29073
  }
29026
29074
  }
29027
29075
  /** Parses an `on` trigger */
29028
- function parseOnTrigger({ expression, sourceSpan }, triggers, errors, placeholder) {
29076
+ function parseOnTrigger({ expression, sourceSpan }, bindingParser, triggers, errors, placeholder) {
29029
29077
  const onIndex = expression.indexOf('on');
29030
29078
  const onSourceSpan = new ParseSourceSpan(sourceSpan.start.moveBy(onIndex), sourceSpan.start.moveBy(onIndex + 'on'.length));
29031
29079
  const prefetchSpan = getPrefetchSpan(expression, sourceSpan);
@@ -29037,9 +29085,10 @@ function parseOnTrigger({ expression, sourceSpan }, triggers, errors, placeholde
29037
29085
  }
29038
29086
  else {
29039
29087
  const start = getTriggerParametersStart(expression, onIndex + 1);
29040
- const parser = new OnTriggerParser(expression, start, sourceSpan, triggers, errors, expression.startsWith('hydrate')
29088
+ const isHydrationTrigger = expression.startsWith('hydrate');
29089
+ const parser = new OnTriggerParser(expression, bindingParser, start, sourceSpan, triggers, errors, isHydrationTrigger
29041
29090
  ? validateHydrateReferenceBasedTrigger
29042
- : validatePlainReferenceBasedTrigger, placeholder, prefetchSpan, onSourceSpan, hydrateSpan);
29091
+ : validatePlainReferenceBasedTrigger, isHydrationTrigger, prefetchSpan, onSourceSpan, hydrateSpan);
29043
29092
  parser.parse();
29044
29093
  }
29045
29094
  }
@@ -29057,25 +29106,27 @@ function getHydrateSpan(expression, sourceSpan) {
29057
29106
  }
29058
29107
  class OnTriggerParser {
29059
29108
  expression;
29109
+ bindingParser;
29060
29110
  start;
29061
29111
  span;
29062
29112
  triggers;
29063
29113
  errors;
29064
29114
  validator;
29065
- placeholder;
29115
+ isHydrationTrigger;
29066
29116
  prefetchSpan;
29067
29117
  onSourceSpan;
29068
29118
  hydrateSpan;
29069
29119
  index = 0;
29070
29120
  tokens;
29071
- constructor(expression, start, span, triggers, errors, validator, placeholder, prefetchSpan, onSourceSpan, hydrateSpan) {
29121
+ constructor(expression, bindingParser, start, span, triggers, errors, validator, isHydrationTrigger, prefetchSpan, onSourceSpan, hydrateSpan) {
29072
29122
  this.expression = expression;
29123
+ this.bindingParser = bindingParser;
29073
29124
  this.start = start;
29074
29125
  this.span = span;
29075
29126
  this.triggers = triggers;
29076
29127
  this.errors = errors;
29077
29128
  this.validator = validator;
29078
- this.placeholder = placeholder;
29129
+ this.isHydrationTrigger = isHydrationTrigger;
29079
29130
  this.prefetchSpan = prefetchSpan;
29080
29131
  this.onSourceSpan = onSourceSpan;
29081
29132
  this.hydrateSpan = hydrateSpan;
@@ -29149,10 +29200,10 @@ class OnTriggerParser {
29149
29200
  this.trackTrigger('immediate', createImmediateTrigger(parameters, nameSpan, sourceSpan, this.prefetchSpan, this.onSourceSpan, this.hydrateSpan));
29150
29201
  break;
29151
29202
  case OnTriggerType.HOVER:
29152
- this.trackTrigger('hover', createHoverTrigger(parameters, nameSpan, sourceSpan, this.prefetchSpan, this.onSourceSpan, this.hydrateSpan, this.placeholder, this.validator));
29203
+ this.trackTrigger('hover', createHoverTrigger(parameters, nameSpan, sourceSpan, this.prefetchSpan, this.onSourceSpan, this.hydrateSpan, this.validator));
29153
29204
  break;
29154
29205
  case OnTriggerType.VIEWPORT:
29155
- this.trackTrigger('viewport', createViewportTrigger(parameters, nameSpan, sourceSpan, this.prefetchSpan, this.onSourceSpan, this.hydrateSpan, this.validator));
29206
+ this.trackTrigger('viewport', createViewportTrigger(this.start, this.isHydrationTrigger, this.bindingParser, parameters, nameSpan, sourceSpan, this.prefetchSpan, this.onSourceSpan, this.hydrateSpan, this.validator));
29156
29207
  break;
29157
29208
  default:
29158
29209
  throw new Error(`Unrecognized trigger type "${identifier}"`);
@@ -29170,15 +29221,15 @@ class OnTriggerParser {
29170
29221
  }
29171
29222
  this.advance();
29172
29223
  const commaDelimStack = [];
29173
- let current = '';
29224
+ let tokens = [];
29174
29225
  while (this.index < this.tokens.length) {
29175
29226
  const token = this.token();
29176
29227
  // Stop parsing if we've hit the end character and we're outside of a comma-delimited syntax.
29177
29228
  // Note that we don't need to account for strings here since the lexer already parsed them
29178
29229
  // into string tokens.
29179
29230
  if (token.isCharacter($RPAREN) && commaDelimStack.length === 0) {
29180
- if (current.length) {
29181
- parameters.push(current);
29231
+ if (tokens.length) {
29232
+ parameters.push({ expression: this.tokenRangeText(tokens), start: tokens[0].index });
29182
29233
  }
29183
29234
  break;
29184
29235
  }
@@ -29197,14 +29248,14 @@ class OnTriggerParser {
29197
29248
  }
29198
29249
  // If we hit a comma outside of a comma-delimited syntax, it means
29199
29250
  // that we're at the top level and we're starting a new parameter.
29200
- if (commaDelimStack.length === 0 && token.isCharacter($COMMA) && current.length > 0) {
29201
- parameters.push(current);
29202
- current = '';
29251
+ if (commaDelimStack.length === 0 && token.isCharacter($COMMA) && tokens.length > 0) {
29252
+ parameters.push({ expression: this.tokenRangeText(tokens), start: tokens[0].index });
29203
29253
  this.advance();
29254
+ tokens = [];
29204
29255
  continue;
29205
29256
  }
29206
29257
  // Otherwise treat the token as a plain text character in the current parameter.
29207
- current += this.tokenText();
29258
+ tokens.push(token);
29208
29259
  this.advance();
29209
29260
  }
29210
29261
  if (!this.token().isCharacter($RPAREN) || commaDelimStack.length > 0) {
@@ -29216,10 +29267,11 @@ class OnTriggerParser {
29216
29267
  }
29217
29268
  return parameters;
29218
29269
  }
29219
- tokenText() {
29220
- // Tokens have a toString already which we could use, but for string tokens it omits the quotes.
29221
- // Eventually we could expose this information on the token directly.
29222
- return this.expression.slice(this.start + this.token().index, this.start + this.token().end);
29270
+ tokenRangeText(tokens) {
29271
+ if (tokens.length === 0) {
29272
+ return '';
29273
+ }
29274
+ return this.expression.slice(this.start + tokens[0].index, this.start + tokens[tokens.length - 1].end);
29223
29275
  }
29224
29276
  trackTrigger(name, trigger) {
29225
29277
  trackTrigger(name, this.triggers, this.errors, trigger);
@@ -29252,7 +29304,7 @@ function createTimerTrigger(parameters, nameSpan, sourceSpan, prefetchSpan, onSo
29252
29304
  if (parameters.length !== 1) {
29253
29305
  throw new Error(`"${OnTriggerType.TIMER}" trigger must have exactly one parameter`);
29254
29306
  }
29255
- const delay = parseDeferredTime(parameters[0]);
29307
+ const delay = parseDeferredTime(parameters[0].expression);
29256
29308
  if (delay === null) {
29257
29309
  throw new Error(`Could not parse time value of trigger "${OnTriggerType.TIMER}"`);
29258
29310
  }
@@ -29264,17 +29316,61 @@ function createImmediateTrigger(parameters, nameSpan, sourceSpan, prefetchSpan,
29264
29316
  }
29265
29317
  return new ImmediateDeferredTrigger(nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan);
29266
29318
  }
29267
- function createHoverTrigger(parameters, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan, placeholder, validator) {
29319
+ function createHoverTrigger(parameters, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan, validator) {
29268
29320
  validator(OnTriggerType.HOVER, parameters);
29269
- return new HoverDeferredTrigger(parameters[0] ?? null, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan);
29321
+ return new HoverDeferredTrigger(parameters[0]?.expression ?? null, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan);
29270
29322
  }
29271
29323
  function createInteractionTrigger(parameters, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan, validator) {
29272
29324
  validator(OnTriggerType.INTERACTION, parameters);
29273
- return new InteractionDeferredTrigger(parameters[0] ?? null, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan);
29325
+ return new InteractionDeferredTrigger(parameters[0]?.expression ?? null, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan);
29274
29326
  }
29275
- function createViewportTrigger(parameters, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan, validator) {
29327
+ function createViewportTrigger(start, isHydrationTrigger, bindingParser, parameters, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan, validator) {
29276
29328
  validator(OnTriggerType.VIEWPORT, parameters);
29277
- return new ViewportDeferredTrigger(parameters[0] ?? null, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan);
29329
+ let reference;
29330
+ let options;
29331
+ if (parameters.length === 0) {
29332
+ reference = options = null;
29333
+ }
29334
+ else if (!parameters[0].expression.startsWith('{')) {
29335
+ reference = parameters[0].expression;
29336
+ options = null;
29337
+ }
29338
+ else {
29339
+ const parsed = bindingParser.parseBinding(parameters[0].expression, false, sourceSpan, sourceSpan.start.offset + start + parameters[0].start);
29340
+ if (!(parsed.ast instanceof LiteralMap)) {
29341
+ throw new Error('Options parameter of the "viewport" trigger must be an object literal');
29342
+ }
29343
+ else if (parsed.ast.keys.some((key) => key.key === 'root')) {
29344
+ throw new Error('The "root" option is not supported in the options parameter of the "viewport" trigger');
29345
+ }
29346
+ const triggerIndex = parsed.ast.keys.findIndex((key) => key.key === 'trigger');
29347
+ if (triggerIndex === -1) {
29348
+ reference = null;
29349
+ options = parsed.ast;
29350
+ }
29351
+ else {
29352
+ const value = parsed.ast.values[triggerIndex];
29353
+ const triggerFilter = (_, index) => index !== triggerIndex;
29354
+ if (!(value instanceof PropertyRead) ||
29355
+ !(value.receiver instanceof ImplicitReceiver) ||
29356
+ value.receiver instanceof ThisReceiver) {
29357
+ throw new Error(`"trigger" option of the "viewport" trigger must be an identifier`);
29358
+ }
29359
+ reference = value.name;
29360
+ options = new LiteralMap(parsed.ast.span, parsed.ast.sourceSpan, parsed.ast.keys.filter(triggerFilter), parsed.ast.values.filter(triggerFilter));
29361
+ }
29362
+ }
29363
+ if (isHydrationTrigger && reference !== null) {
29364
+ throw new Error(`"viewport" hydration trigger cannot have a "trigger"`);
29365
+ }
29366
+ else if (options) {
29367
+ const dynamicNode = DynamicAstValidator.findDynamicNode(options);
29368
+ if (dynamicNode !== null) {
29369
+ throw new Error(`Options of the "viewport" trigger must be an object ` +
29370
+ `literal containing only literal values, but "${dynamicNode.constructor.name}" was found`);
29371
+ }
29372
+ }
29373
+ return new ViewportDeferredTrigger(reference, options, nameSpan, sourceSpan, prefetchSpan, onSourceSpan, hydrateSpan);
29278
29374
  }
29279
29375
  /**
29280
29376
  * Checks whether the structure of a non-hydrate reference-based trigger is valid.
@@ -29292,6 +29388,12 @@ function validatePlainReferenceBasedTrigger(type, parameters) {
29292
29388
  * @param parameters Parameters of the trigger.
29293
29389
  */
29294
29390
  function validateHydrateReferenceBasedTrigger(type, parameters) {
29391
+ if (type === OnTriggerType.VIEWPORT) {
29392
+ if (parameters.length > 1) {
29393
+ throw new Error(`Hydration trigger "${type}" cannot have more than one parameter`);
29394
+ }
29395
+ return;
29396
+ }
29295
29397
  if (parameters.length > 0) {
29296
29398
  throw new Error(`Hydration trigger "${type}" cannot have parameters`);
29297
29399
  }
@@ -29321,6 +29423,25 @@ function parseDeferredTime(value) {
29321
29423
  const [time, units] = match;
29322
29424
  return parseFloat(time) * (units === 's' ? 1000 : 1);
29323
29425
  }
29426
+ class DynamicAstValidator extends RecursiveAstVisitor {
29427
+ dynamicNode = null;
29428
+ static findDynamicNode(ast) {
29429
+ const visitor = new DynamicAstValidator();
29430
+ visitor.visit(ast);
29431
+ return visitor.dynamicNode;
29432
+ }
29433
+ visit(ast) {
29434
+ if (!(ast instanceof ASTWithSource) &&
29435
+ !(ast instanceof LiteralPrimitive) &&
29436
+ !(ast instanceof LiteralArray) &&
29437
+ !(ast instanceof LiteralMap)) {
29438
+ this.dynamicNode = ast;
29439
+ }
29440
+ else {
29441
+ super.visit(ast);
29442
+ }
29443
+ }
29444
+ }
29324
29445
 
29325
29446
  /** Pattern to identify a `prefetch when` trigger. */
29326
29447
  const PREFETCH_WHEN_PATTERN = /^prefetch\s+when\s/;
@@ -29351,7 +29472,7 @@ function isConnectedDeferLoopBlock(name) {
29351
29472
  function createDeferredBlock(ast, connectedBlocks, visitor, bindingParser) {
29352
29473
  const errors = [];
29353
29474
  const { placeholder, loading, error } = parseConnectedBlocks(connectedBlocks, errors, visitor);
29354
- const { triggers, prefetchTriggers, hydrateTriggers } = parsePrimaryTriggers(ast, bindingParser, errors, placeholder);
29475
+ const { triggers, prefetchTriggers, hydrateTriggers } = parsePrimaryTriggers(ast, bindingParser, errors);
29355
29476
  // The `defer` block has a main span encompassing all of the connected branches as well.
29356
29477
  let lastEndSourceSpan = ast.endSourceSpan;
29357
29478
  let endOfLastSourceSpan = ast.sourceSpan.end;
@@ -29473,19 +29594,19 @@ function parsePrimaryTriggers(ast, bindingParser, errors, placeholder) {
29473
29594
  parseWhenTrigger(param, bindingParser, triggers, errors);
29474
29595
  }
29475
29596
  else if (ON_PARAMETER_PATTERN.test(param.expression)) {
29476
- parseOnTrigger(param, triggers, errors, placeholder);
29597
+ parseOnTrigger(param, bindingParser, triggers, errors);
29477
29598
  }
29478
29599
  else if (PREFETCH_WHEN_PATTERN.test(param.expression)) {
29479
29600
  parseWhenTrigger(param, bindingParser, prefetchTriggers, errors);
29480
29601
  }
29481
29602
  else if (PREFETCH_ON_PATTERN.test(param.expression)) {
29482
- parseOnTrigger(param, prefetchTriggers, errors, placeholder);
29603
+ parseOnTrigger(param, bindingParser, prefetchTriggers, errors);
29483
29604
  }
29484
29605
  else if (HYDRATE_WHEN_PATTERN.test(param.expression)) {
29485
29606
  parseWhenTrigger(param, bindingParser, hydrateTriggers, errors);
29486
29607
  }
29487
29608
  else if (HYDRATE_ON_PATTERN.test(param.expression)) {
29488
- parseOnTrigger(param, hydrateTriggers, errors, placeholder);
29609
+ parseOnTrigger(param, bindingParser, hydrateTriggers, errors);
29489
29610
  }
29490
29611
  else if (HYDRATE_NEVER_PATTERN.test(param.expression)) {
29491
29612
  parseNeverTrigger(param, hydrateTriggers, errors);
@@ -30895,6 +31016,9 @@ class CombinedRecursiveAstVisitor extends RecursiveAstVisitor {
30895
31016
  if (trigger instanceof BoundDeferredTrigger) {
30896
31017
  this.visit(trigger.value);
30897
31018
  }
31019
+ else if (trigger instanceof ViewportDeferredTrigger && trigger.options !== null) {
31020
+ this.visit(trigger.options);
31021
+ }
30898
31022
  }
30899
31023
  visitDeferredBlockPlaceholder(block) {
30900
31024
  this.visitAllTemplateNodes(block.children);
@@ -32989,7 +33113,7 @@ function isAttrNode(ast) {
32989
33113
  * @description
32990
33114
  * Entry point for all public APIs of the compiler package.
32991
33115
  */
32992
- const VERSION = new Version('21.0.0-next.7');
33116
+ const VERSION = new Version('21.0.0-next.8');
32993
33117
 
32994
33118
  //////////////////////////////////////
32995
33119
  // THIS FILE HAS GLOBAL SIDE EFFECT //
@@ -33365,6 +33489,12 @@ exports.ErrorCode = void 0;
33365
33489
  * ```
33366
33490
  */
33367
33491
  ErrorCode[ErrorCode["DEFER_IMPLICIT_TRIGGER_INVALID_PLACEHOLDER"] = 8020] = "DEFER_IMPLICIT_TRIGGER_INVALID_PLACEHOLDER";
33492
+ /**
33493
+ * Raised when an `@defer` block defines unreachable or redundant triggers.
33494
+ * Examples: multiple main triggers, 'on immediate' together with other mains or any prefetch,
33495
+ * prefetch timer delay that is not earlier than the main timer, or an identical prefetch
33496
+ */
33497
+ ErrorCode[ErrorCode["DEFER_TRIGGER_MISCONFIGURATION"] = 8021] = "DEFER_TRIGGER_MISCONFIGURATION";
33368
33498
  /**
33369
33499
  * A two way binding in a template has an incorrect syntax,
33370
33500
  * parentheses outside brackets. For example:
@@ -33726,6 +33856,7 @@ exports.ExtendedTemplateDiagnosticName = void 0;
33726
33856
  ExtendedTemplateDiagnosticName["UNUSED_STANDALONE_IMPORTS"] = "unusedStandaloneImports";
33727
33857
  ExtendedTemplateDiagnosticName["UNPARENTHESIZED_NULLISH_COALESCING"] = "unparenthesizedNullishCoalescing";
33728
33858
  ExtendedTemplateDiagnosticName["UNINVOKED_FUNCTION_IN_TEXT_INTERPOLATION"] = "uninvokedFunctionInTextInterpolation";
33859
+ ExtendedTemplateDiagnosticName["DEFER_TRIGGER_MISCONFIGURATION"] = "deferTriggerMisconfiguration";
33729
33860
  })(exports.ExtendedTemplateDiagnosticName || (exports.ExtendedTemplateDiagnosticName = {}));
33730
33861
 
33731
33862
  /**
@@ -34052,7 +34183,7 @@ class NodeJSPathManipulation {
34052
34183
  // G3-ESM-MARKER: G3 uses CommonJS, but externally everything in ESM.
34053
34184
  // CommonJS/ESM interop for determining the current file name and containing dir.
34054
34185
  const isCommonJS = typeof __filename !== 'undefined';
34055
- const currentFileUrl = isCommonJS ? null : (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('project_tsconfig_paths-BbVhi4fG.cjs', document.baseURI).href));
34186
+ const currentFileUrl = isCommonJS ? null : (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('project_tsconfig_paths-CdhVNYMk.cjs', document.baseURI).href));
34056
34187
  // Note, when this code loads in the browser, `url` may be an empty `{}` due to the Closure shims.
34057
34188
  const currentFileName = isCommonJS
34058
34189
  ? __filename
@@ -40455,6 +40586,120 @@ function parseFieldStringArrayValue(directive, field, evaluator) {
40455
40586
  }
40456
40587
  return value;
40457
40588
  }
40589
+ /**
40590
+ * Returns a function that can be used to extract data for the `setClassMetadata`
40591
+ * calls from undecorated directive class members.
40592
+ */
40593
+ function getDirectiveUndecoratedMetadataExtractor(reflector, importTracker) {
40594
+ return (member) => {
40595
+ const input = tryParseSignalInputMapping(member, reflector, importTracker);
40596
+ if (input !== null) {
40597
+ return getDecoratorMetaArray([
40598
+ [new ExternalExpr(Identifiers.inputDecorator), memberMetadataFromSignalInput(input)],
40599
+ ]);
40600
+ }
40601
+ const output = tryParseInitializerBasedOutput(member, reflector, importTracker);
40602
+ if (output !== null) {
40603
+ return getDecoratorMetaArray([
40604
+ [
40605
+ new ExternalExpr(Identifiers.outputDecorator),
40606
+ memberMetadataFromInitializerOutput(output.metadata),
40607
+ ],
40608
+ ]);
40609
+ }
40610
+ const model = tryParseSignalModelMapping(member, reflector, importTracker);
40611
+ if (model !== null) {
40612
+ return getDecoratorMetaArray([
40613
+ [
40614
+ new ExternalExpr(Identifiers.inputDecorator),
40615
+ memberMetadataFromSignalInput(model.input),
40616
+ ],
40617
+ [
40618
+ new ExternalExpr(Identifiers.outputDecorator),
40619
+ memberMetadataFromInitializerOutput(model.output),
40620
+ ],
40621
+ ]);
40622
+ }
40623
+ const query = tryParseSignalQueryFromInitializer(member, reflector, importTracker);
40624
+ if (query !== null) {
40625
+ let identifier;
40626
+ if (query.name === 'viewChild') {
40627
+ identifier = Identifiers.viewChildDecorator;
40628
+ }
40629
+ else if (query.name === 'viewChildren') {
40630
+ identifier = Identifiers.viewChildrenDecorator;
40631
+ }
40632
+ else if (query.name === 'contentChild') {
40633
+ identifier = Identifiers.contentChildDecorator;
40634
+ }
40635
+ else if (query.name === 'contentChildren') {
40636
+ identifier = Identifiers.contentChildrenDecorator;
40637
+ }
40638
+ else {
40639
+ return null;
40640
+ }
40641
+ return getDecoratorMetaArray([
40642
+ [new ExternalExpr(identifier), memberMetadataFromSignalQuery(query.call)],
40643
+ ]);
40644
+ }
40645
+ return null;
40646
+ };
40647
+ }
40648
+ function getDecoratorMetaArray(decorators) {
40649
+ return new LiteralArrayExpr(decorators.map(([type, args]) => literalMap([
40650
+ { key: 'type', value: type, quoted: false },
40651
+ { key: 'args', value: args, quoted: false },
40652
+ ])));
40653
+ }
40654
+ function memberMetadataFromSignalInput(input) {
40655
+ // Note that for signal inputs the transform is captured in the signal
40656
+ // initializer so we don't need to capture it here.
40657
+ return new LiteralArrayExpr([
40658
+ literalMap([
40659
+ {
40660
+ key: 'isSignal',
40661
+ value: literal(true),
40662
+ quoted: false,
40663
+ },
40664
+ {
40665
+ key: 'alias',
40666
+ value: literal(input.bindingPropertyName),
40667
+ quoted: false,
40668
+ },
40669
+ {
40670
+ key: 'required',
40671
+ value: literal(input.required),
40672
+ quoted: false,
40673
+ },
40674
+ ]),
40675
+ ]);
40676
+ }
40677
+ function memberMetadataFromInitializerOutput(output) {
40678
+ return new LiteralArrayExpr([literal(output.bindingPropertyName)]);
40679
+ }
40680
+ function memberMetadataFromSignalQuery(call) {
40681
+ const firstArg = call.arguments[0];
40682
+ const firstArgMeta = ts.isStringLiteralLike(firstArg) || ts.isCallExpression(firstArg)
40683
+ ? new WrappedNodeExpr(firstArg)
40684
+ : // If the first argument is a class reference, we need to wrap it in a `forwardRef`
40685
+ // because the reference might occur after the current class. This wouldn't be flagged
40686
+ // on the query initializer, because it executes after the class is initialized, whereas
40687
+ // `setClassMetadata` runs immediately.
40688
+ new ExternalExpr(Identifiers.forwardRef).callFn([
40689
+ new ArrowFunctionExpr([], new WrappedNodeExpr(firstArg)),
40690
+ ]);
40691
+ const entries = [
40692
+ // We use wrapped nodes here, because the output AST doesn't support spread assignments.
40693
+ firstArgMeta,
40694
+ new WrappedNodeExpr(ts.factory.createObjectLiteralExpression([
40695
+ ...(call.arguments.length > 1
40696
+ ? [ts.factory.createSpreadAssignment(call.arguments[1])]
40697
+ : []),
40698
+ ts.factory.createPropertyAssignment('isSignal', ts.factory.createTrue()),
40699
+ ])),
40700
+ ];
40701
+ return new LiteralArrayExpr(entries);
40702
+ }
40458
40703
  function isStringArrayOrDie(value, name, node) {
40459
40704
  if (!Array.isArray(value)) {
40460
40705
  return false;
@@ -44775,10 +45020,10 @@ class OutOfBandDiagnosticRecorderImpl {
44775
45020
  this._diagnostics.push(makeTemplateDiagnostic(id, this.resolver.getTemplateSourceMapping(id), node.keySpan || node.sourceSpan, ts.DiagnosticCategory.Error, ngErrorCode(exports.ErrorCode.UNCLAIMED_DIRECTIVE_BINDING), errorMsg));
44776
45021
  }
44777
45022
  deferImplicitTriggerMissingPlaceholder(id, trigger) {
44778
- this._diagnostics.push(makeTemplateDiagnostic(id, this.resolver.getTemplateSourceMapping(id), trigger.sourceSpan, ts.DiagnosticCategory.Error, ngErrorCode(exports.ErrorCode.DEFER_IMPLICIT_TRIGGER_MISSING_PLACEHOLDER), 'Trigger with no parameters can only be placed on an @defer that has a @placeholder block'));
45023
+ this._diagnostics.push(makeTemplateDiagnostic(id, this.resolver.getTemplateSourceMapping(id), trigger.sourceSpan, ts.DiagnosticCategory.Error, ngErrorCode(exports.ErrorCode.DEFER_IMPLICIT_TRIGGER_MISSING_PLACEHOLDER), 'Trigger with no target can only be placed on an @defer that has a @placeholder block'));
44779
45024
  }
44780
45025
  deferImplicitTriggerInvalidPlaceholder(id, trigger) {
44781
- this._diagnostics.push(makeTemplateDiagnostic(id, this.resolver.getTemplateSourceMapping(id), trigger.sourceSpan, ts.DiagnosticCategory.Error, ngErrorCode(exports.ErrorCode.DEFER_IMPLICIT_TRIGGER_INVALID_PLACEHOLDER), 'Trigger with no parameters can only be placed on an @defer that has a ' +
45026
+ this._diagnostics.push(makeTemplateDiagnostic(id, this.resolver.getTemplateSourceMapping(id), trigger.sourceSpan, ts.DiagnosticCategory.Error, ngErrorCode(exports.ErrorCode.DEFER_IMPLICIT_TRIGGER_INVALID_PLACEHOLDER), 'Trigger with no target can only be placed on an @defer that has a ' +
44782
45027
  '@placeholder block with exactly one root element node'));
44783
45028
  }
44784
45029
  }
@@ -46996,6 +47241,28 @@ class TcbForOfOp extends TcbOp {
46996
47241
  return null;
46997
47242
  }
46998
47243
  }
47244
+ /**
47245
+ * A `TcbOp` which can be used to type check the options of an `IntersectionObserver`.
47246
+ */
47247
+ class TcbIntersectionObserverOp extends TcbOp {
47248
+ tcb;
47249
+ scope;
47250
+ options;
47251
+ constructor(tcb, scope, options) {
47252
+ super();
47253
+ this.tcb = tcb;
47254
+ this.scope = scope;
47255
+ this.options = options;
47256
+ }
47257
+ optional = false;
47258
+ execute() {
47259
+ const options = tcbExpression(this.options, this.tcb, this.scope);
47260
+ const callback = ts.factory.createNonNullExpression(ts.factory.createNull());
47261
+ const expression = ts.factory.createNewExpression(ts.factory.createIdentifier('IntersectionObserver'), undefined, [callback, options]);
47262
+ this.scope.addStatement(ts.factory.createExpressionStatement(expression));
47263
+ return null;
47264
+ }
47265
+ }
46999
47266
  /**
47000
47267
  * Overall generation context for the type check block.
47001
47268
  *
@@ -47767,6 +48034,9 @@ class Scope {
47767
48034
  if (triggers.when !== undefined) {
47768
48035
  this.opQueue.push(new TcbExpressionOp(this.tcb, this, triggers.when.value));
47769
48036
  }
48037
+ if (triggers.viewport !== undefined && triggers.viewport.options !== null) {
48038
+ this.opQueue.push(new TcbIntersectionObserverOp(this.tcb, this, triggers.viewport.options));
48039
+ }
47770
48040
  if (triggers.hover !== undefined) {
47771
48041
  this.validateReferenceBasedDeferredTrigger(block, triggers.hover);
47772
48042
  }
@@ -49737,6 +50007,9 @@ class TemplateTypeCheckerImpl {
49737
50007
  const { data } = this.getLatestComponentState(directive, optimizeFor);
49738
50008
  return data?.hostElement ?? null;
49739
50009
  }
50010
+ getDirectivesOfNode(component, node) {
50011
+ return (this.getLatestComponentState(component).data?.boundTarget.getDirectivesOfNode(node) ?? null);
50012
+ }
49740
50013
  getUsedDirectives(component) {
49741
50014
  return this.getLatestComponentState(component).data?.boundTarget.getUsedDirectives() ?? null;
49742
50015
  }
@@ -51072,6 +51345,7 @@ exports.Declaration = Declaration;
51072
51345
  exports.DeclareFunctionStmt = DeclareFunctionStmt;
51073
51346
  exports.DeclareVarStmt = DeclareVarStmt;
51074
51347
  exports.DefaultImportTracker = DefaultImportTracker;
51348
+ exports.DeferredBlock = DeferredBlock;
51075
51349
  exports.DefinitionMap = DefinitionMap;
51076
51350
  exports.Directive = Directive$1;
51077
51351
  exports.DomElementSchemaRegistry = DomElementSchemaRegistry;
@@ -51086,14 +51360,17 @@ exports.FatalDiagnosticError = FatalDiagnosticError;
51086
51360
  exports.FnParam = FnParam;
51087
51361
  exports.ForLoopBlock = ForLoopBlock;
51088
51362
  exports.FunctionExpr = FunctionExpr;
51363
+ exports.HoverDeferredTrigger = HoverDeferredTrigger;
51089
51364
  exports.HtmlParser = HtmlParser;
51090
51365
  exports.INPUT_INITIALIZER_FN = INPUT_INITIALIZER_FN;
51091
51366
  exports.Icu = Icu;
51092
51367
  exports.IcuPlaceholder = IcuPlaceholder;
51093
51368
  exports.Identifiers = Identifiers;
51094
51369
  exports.IfBlock = IfBlock;
51370
+ exports.ImmediateDeferredTrigger = ImmediateDeferredTrigger;
51095
51371
  exports.ImplicitReceiver = ImplicitReceiver;
51096
51372
  exports.ImportManager = ImportManager;
51373
+ exports.InteractionDeferredTrigger = InteractionDeferredTrigger;
51097
51374
  exports.Interpolation = Interpolation$1;
51098
51375
  exports.InvokeFunctionExpr = InvokeFunctionExpr;
51099
51376
  exports.KeyedRead = KeyedRead;
@@ -51148,6 +51425,7 @@ exports.Text$1 = Text$1;
51148
51425
  exports.Text$2 = Text$2;
51149
51426
  exports.TextAttribute = TextAttribute;
51150
51427
  exports.ThisReceiver = ThisReceiver;
51428
+ exports.TimerDeferredTrigger = TimerDeferredTrigger;
51151
51429
  exports.Trait = Trait;
51152
51430
  exports.TypeCheckShimGenerator = TypeCheckShimGenerator;
51153
51431
  exports.TypeScriptReflectionHost = TypeScriptReflectionHost;
@@ -51155,6 +51433,7 @@ exports.UNSAFE_OBJECT_KEY_NAME_REGEXP = UNSAFE_OBJECT_KEY_NAME_REGEXP;
51155
51433
  exports.UnifiedModulesStrategy = UnifiedModulesStrategy;
51156
51434
  exports.Variable = Variable;
51157
51435
  exports.Version = Version;
51436
+ exports.ViewportDeferredTrigger = ViewportDeferredTrigger;
51158
51437
  exports.WhitespaceVisitor = WhitespaceVisitor;
51159
51438
  exports.WrappedNodeExpr = WrappedNodeExpr;
51160
51439
  exports.Xmb = Xmb;
@@ -51210,6 +51489,7 @@ exports.getConstructorDependencies = getConstructorDependencies;
51210
51489
  exports.getContainingImportDeclaration = getContainingImportDeclaration;
51211
51490
  exports.getDefaultImportDeclaration = getDefaultImportDeclaration;
51212
51491
  exports.getDirectiveDiagnostics = getDirectiveDiagnostics;
51492
+ exports.getDirectiveUndecoratedMetadataExtractor = getDirectiveUndecoratedMetadataExtractor;
51213
51493
  exports.getFileSystem = getFileSystem;
51214
51494
  exports.getOriginNodeForDiagnostics = getOriginNodeForDiagnostics;
51215
51495
  exports.getProjectTsConfigPaths = getProjectTsConfigPaths;