@angular/compiler-cli 21.0.0-next.7 → 21.0.0-next.9

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.
@@ -61,6 +61,7 @@ var ErrorCode;
61
61
  ErrorCode2[ErrorCode2["MISSING_NAMED_TEMPLATE_DEPENDENCY"] = 2024] = "MISSING_NAMED_TEMPLATE_DEPENDENCY";
62
62
  ErrorCode2[ErrorCode2["INCORRECT_NAMED_TEMPLATE_DEPENDENCY_TYPE"] = 2025] = "INCORRECT_NAMED_TEMPLATE_DEPENDENCY_TYPE";
63
63
  ErrorCode2[ErrorCode2["UNSUPPORTED_SELECTORLESS_COMPONENT_FIELD"] = 2026] = "UNSUPPORTED_SELECTORLESS_COMPONENT_FIELD";
64
+ ErrorCode2[ErrorCode2["COMPONENT_ANIMATIONS_CONFLICT"] = 2027] = "COMPONENT_ANIMATIONS_CONFLICT";
64
65
  ErrorCode2[ErrorCode2["SYMBOL_NOT_EXPORTED"] = 3001] = "SYMBOL_NOT_EXPORTED";
65
66
  ErrorCode2[ErrorCode2["IMPORT_CYCLE_DETECTED"] = 3003] = "IMPORT_CYCLE_DETECTED";
66
67
  ErrorCode2[ErrorCode2["IMPORT_GENERATION_FAILURE"] = 3004] = "IMPORT_GENERATION_FAILURE";
@@ -102,6 +103,7 @@ var ErrorCode;
102
103
  ErrorCode2[ErrorCode2["UNCLAIMED_DIRECTIVE_BINDING"] = 8018] = "UNCLAIMED_DIRECTIVE_BINDING";
103
104
  ErrorCode2[ErrorCode2["DEFER_IMPLICIT_TRIGGER_MISSING_PLACEHOLDER"] = 8019] = "DEFER_IMPLICIT_TRIGGER_MISSING_PLACEHOLDER";
104
105
  ErrorCode2[ErrorCode2["DEFER_IMPLICIT_TRIGGER_INVALID_PLACEHOLDER"] = 8020] = "DEFER_IMPLICIT_TRIGGER_INVALID_PLACEHOLDER";
106
+ ErrorCode2[ErrorCode2["DEFER_TRIGGER_MISCONFIGURATION"] = 8021] = "DEFER_TRIGGER_MISCONFIGURATION";
105
107
  ErrorCode2[ErrorCode2["INVALID_BANANA_IN_BOX"] = 8101] = "INVALID_BANANA_IN_BOX";
106
108
  ErrorCode2[ErrorCode2["NULLISH_COALESCING_NOT_NULLABLE"] = 8102] = "NULLISH_COALESCING_NOT_NULLABLE";
107
109
  ErrorCode2[ErrorCode2["MISSING_CONTROL_FLOW_DIRECTIVE"] = 8103] = "MISSING_CONTROL_FLOW_DIRECTIVE";
@@ -249,6 +251,7 @@ var ExtendedTemplateDiagnosticName;
249
251
  ExtendedTemplateDiagnosticName2["UNUSED_STANDALONE_IMPORTS"] = "unusedStandaloneImports";
250
252
  ExtendedTemplateDiagnosticName2["UNPARENTHESIZED_NULLISH_COALESCING"] = "unparenthesizedNullishCoalescing";
251
253
  ExtendedTemplateDiagnosticName2["UNINVOKED_FUNCTION_IN_TEXT_INTERPOLATION"] = "uninvokedFunctionInTextInterpolation";
254
+ ExtendedTemplateDiagnosticName2["DEFER_TRIGGER_MISCONFIGURATION"] = "deferTriggerMisconfiguration";
252
255
  })(ExtendedTemplateDiagnosticName || (ExtendedTemplateDiagnosticName = {}));
253
256
 
254
257
  // packages/compiler-cli/src/ngtsc/reflection/src/typescript.js
@@ -3145,8 +3148,8 @@ var StaticInterpreter = class {
3145
3148
  if (ts13.isIdentifier(node) || ts13.isStringLiteral(node) || ts13.isNumericLiteral(node)) {
3146
3149
  return node.text;
3147
3150
  } else if (ts13.isComputedPropertyName(node)) {
3148
- const literal3 = this.visitExpression(node.expression, context);
3149
- return typeof literal3 === "string" ? literal3 : void 0;
3151
+ const literal4 = this.visitExpression(node.expression, context);
3152
+ return typeof literal4 === "string" ? literal4 : void 0;
3150
3153
  } else {
3151
3154
  return void 0;
3152
3155
  }
@@ -7365,7 +7368,7 @@ var InjectableClassRegistry = class {
7365
7368
  // packages/compiler-cli/src/ngtsc/annotations/common/src/metadata.js
7366
7369
  import { ArrowFunctionExpr, LiteralArrayExpr, LiteralExpr as LiteralExpr2, literalMap, WrappedNodeExpr as WrappedNodeExpr4 } from "@angular/compiler";
7367
7370
  import ts35 from "typescript";
7368
- function extractClassMetadata(clazz, reflection, isCore, annotateForClosureCompiler, angularDecoratorTransform = (dec) => dec) {
7371
+ function extractClassMetadata(clazz, reflection, isCore, annotateForClosureCompiler, angularDecoratorTransform = (dec) => dec, undecoratedMetadataExtractor = () => null) {
7369
7372
  if (!reflection.isClass(clazz)) {
7370
7373
  return null;
7371
7374
  }
@@ -7386,15 +7389,41 @@ function extractClassMetadata(clazz, reflection, isCore, annotateForClosureCompi
7386
7389
  metaCtorParameters = new ArrowFunctionExpr([], new LiteralArrayExpr(ctorParameters));
7387
7390
  }
7388
7391
  let metaPropDecorators = null;
7389
- const classMembers = reflection.getMembersOfClass(clazz).filter((member) => !member.isStatic && member.decorators !== null && member.decorators.length > 0 && // Private fields are not supported in the metadata emit
7392
+ const classMembers = reflection.getMembersOfClass(clazz).filter((member) => !member.isStatic && // Private fields are not supported in the metadata emit
7390
7393
  member.accessLevel !== ClassMemberAccessLevel.EcmaScriptPrivate);
7391
- const duplicateDecoratedMembers = classMembers.filter((member, i, arr) => arr.findIndex((arrayMember) => arrayMember.name === member.name) < i);
7392
- if (duplicateDecoratedMembers.length > 0) {
7394
+ const decoratedMembers = [];
7395
+ const seenMemberNames = /* @__PURE__ */ new Set();
7396
+ let duplicateDecoratedMembers = null;
7397
+ for (const member of classMembers) {
7398
+ const shouldQuoteName = member.nameNode !== null && ts35.isStringLiteralLike(member.nameNode);
7399
+ if (member.decorators !== null && member.decorators.length > 0) {
7400
+ decoratedMembers.push({
7401
+ key: member.name,
7402
+ quoted: shouldQuoteName,
7403
+ value: decoratedClassMemberToMetadata(member.decorators, isCore)
7404
+ });
7405
+ if (seenMemberNames.has(member.name)) {
7406
+ duplicateDecoratedMembers ??= [];
7407
+ duplicateDecoratedMembers.push(member);
7408
+ } else {
7409
+ seenMemberNames.add(member.name);
7410
+ }
7411
+ } else {
7412
+ const undecoratedMetadata = undecoratedMetadataExtractor(member);
7413
+ if (undecoratedMetadata !== null) {
7414
+ decoratedMembers.push({
7415
+ key: member.name,
7416
+ quoted: shouldQuoteName,
7417
+ value: undecoratedMetadata
7418
+ });
7419
+ }
7420
+ }
7421
+ }
7422
+ if (duplicateDecoratedMembers !== null) {
7393
7423
  throw new FatalDiagnosticError(ErrorCode.DUPLICATE_DECORATED_PROPERTIES, duplicateDecoratedMembers[0].nameNode ?? clazz, `Duplicate decorated properties found on class '${clazz.name.text}': ` + duplicateDecoratedMembers.map((member) => member.name).join(", "));
7394
7424
  }
7395
- const decoratedMembers = classMembers.map((member) => classMemberToMetadata(member.nameNode ?? member.name, member.decorators, isCore));
7396
7425
  if (decoratedMembers.length > 0) {
7397
- metaPropDecorators = new WrappedNodeExpr4(ts35.factory.createObjectLiteralExpression(decoratedMembers));
7426
+ metaPropDecorators = literalMap(decoratedMembers);
7398
7427
  }
7399
7428
  return {
7400
7429
  type: new WrappedNodeExpr4(id),
@@ -7415,10 +7444,9 @@ function ctorParameterToMetadata(param, isCore) {
7415
7444
  }
7416
7445
  return literalMap(mapEntries);
7417
7446
  }
7418
- function classMemberToMetadata(name, decorators, isCore) {
7419
- const ngDecorators = decorators.filter((dec) => isAngularDecorator2(dec, isCore)).map((decorator) => decoratorToMetadata(decorator));
7420
- const decoratorMeta = ts35.factory.createArrayLiteralExpression(ngDecorators);
7421
- return ts35.factory.createPropertyAssignment(name, decoratorMeta);
7447
+ function decoratedClassMemberToMetadata(decorators, isCore) {
7448
+ const ngDecorators = decorators.filter((dec) => isAngularDecorator2(dec, isCore)).map((decorator) => new WrappedNodeExpr4(decoratorToMetadata(decorator)));
7449
+ return new LiteralArrayExpr(ngDecorators);
7422
7450
  }
7423
7451
  function decoratorToMetadata(decorator, wrapFunctionsInParens) {
7424
7452
  if (decorator.identifier === null) {
@@ -8647,7 +8675,7 @@ import { compileClassMetadata, compileDeclareClassMetadata, compileDeclareDirect
8647
8675
  import ts65 from "typescript";
8648
8676
 
8649
8677
  // packages/compiler-cli/src/ngtsc/annotations/directive/src/shared.js
8650
- import { createMayBeForwardRefExpression as createMayBeForwardRefExpression2, emitDistinctChangesOnlyDefaultValue, ExternalExpr as ExternalExpr6, ExternalReference as ExternalReference2, getSafePropertyAccessString, parseHostBindings, verifyHostBindings, WrappedNodeExpr as WrappedNodeExpr6 } from "@angular/compiler";
8678
+ import { createMayBeForwardRefExpression as createMayBeForwardRefExpression2, emitDistinctChangesOnlyDefaultValue, ExternalExpr as ExternalExpr6, ExternalReference as ExternalReference2, getSafePropertyAccessString, LiteralArrayExpr as LiteralArrayExpr2, literalMap as literalMap2, parseHostBindings, verifyHostBindings, R3Identifiers, ArrowFunctionExpr as ArrowFunctionExpr2, WrappedNodeExpr as WrappedNodeExpr6, literal as literal3 } from "@angular/compiler";
8651
8679
  import ts43 from "typescript";
8652
8680
 
8653
8681
  // packages/compiler-cli/src/ngtsc/annotations/directive/src/initializer_function_access.js
@@ -9322,6 +9350,108 @@ function parseFieldStringArrayValue(directive, field, evaluator) {
9322
9350
  }
9323
9351
  return value;
9324
9352
  }
9353
+ function getDirectiveUndecoratedMetadataExtractor(reflector, importTracker) {
9354
+ return (member) => {
9355
+ const input = tryParseSignalInputMapping(member, reflector, importTracker);
9356
+ if (input !== null) {
9357
+ return getDecoratorMetaArray([
9358
+ [new ExternalExpr6(R3Identifiers.inputDecorator), memberMetadataFromSignalInput(input)]
9359
+ ]);
9360
+ }
9361
+ const output = tryParseInitializerBasedOutput(member, reflector, importTracker);
9362
+ if (output !== null) {
9363
+ return getDecoratorMetaArray([
9364
+ [
9365
+ new ExternalExpr6(R3Identifiers.outputDecorator),
9366
+ memberMetadataFromInitializerOutput(output.metadata)
9367
+ ]
9368
+ ]);
9369
+ }
9370
+ const model = tryParseSignalModelMapping(member, reflector, importTracker);
9371
+ if (model !== null) {
9372
+ return getDecoratorMetaArray([
9373
+ [
9374
+ new ExternalExpr6(R3Identifiers.inputDecorator),
9375
+ memberMetadataFromSignalInput(model.input)
9376
+ ],
9377
+ [
9378
+ new ExternalExpr6(R3Identifiers.outputDecorator),
9379
+ memberMetadataFromInitializerOutput(model.output)
9380
+ ]
9381
+ ]);
9382
+ }
9383
+ const query = tryParseSignalQueryFromInitializer(member, reflector, importTracker);
9384
+ if (query !== null) {
9385
+ let identifier;
9386
+ if (query.name === "viewChild") {
9387
+ identifier = R3Identifiers.viewChildDecorator;
9388
+ } else if (query.name === "viewChildren") {
9389
+ identifier = R3Identifiers.viewChildrenDecorator;
9390
+ } else if (query.name === "contentChild") {
9391
+ identifier = R3Identifiers.contentChildDecorator;
9392
+ } else if (query.name === "contentChildren") {
9393
+ identifier = R3Identifiers.contentChildrenDecorator;
9394
+ } else {
9395
+ return null;
9396
+ }
9397
+ return getDecoratorMetaArray([
9398
+ [new ExternalExpr6(identifier), memberMetadataFromSignalQuery(query.call)]
9399
+ ]);
9400
+ }
9401
+ return null;
9402
+ };
9403
+ }
9404
+ function getDecoratorMetaArray(decorators) {
9405
+ return new LiteralArrayExpr2(decorators.map(([type, args]) => literalMap2([
9406
+ { key: "type", value: type, quoted: false },
9407
+ { key: "args", value: args, quoted: false }
9408
+ ])));
9409
+ }
9410
+ function memberMetadataFromSignalInput(input) {
9411
+ return new LiteralArrayExpr2([
9412
+ literalMap2([
9413
+ {
9414
+ key: "isSignal",
9415
+ value: literal3(true),
9416
+ quoted: false
9417
+ },
9418
+ {
9419
+ key: "alias",
9420
+ value: literal3(input.bindingPropertyName),
9421
+ quoted: false
9422
+ },
9423
+ {
9424
+ key: "required",
9425
+ value: literal3(input.required),
9426
+ quoted: false
9427
+ }
9428
+ ])
9429
+ ]);
9430
+ }
9431
+ function memberMetadataFromInitializerOutput(output) {
9432
+ return new LiteralArrayExpr2([literal3(output.bindingPropertyName)]);
9433
+ }
9434
+ function memberMetadataFromSignalQuery(call) {
9435
+ const firstArg = call.arguments[0];
9436
+ const firstArgMeta = ts43.isStringLiteralLike(firstArg) || ts43.isCallExpression(firstArg) ? new WrappedNodeExpr6(firstArg) : (
9437
+ // If the first argument is a class reference, we need to wrap it in a `forwardRef`
9438
+ // because the reference might occur after the current class. This wouldn't be flagged
9439
+ // on the query initializer, because it executes after the class is initialized, whereas
9440
+ // `setClassMetadata` runs immediately.
9441
+ new ExternalExpr6(R3Identifiers.forwardRef).callFn([
9442
+ new ArrowFunctionExpr2([], new WrappedNodeExpr6(firstArg))
9443
+ ])
9444
+ );
9445
+ const entries = [
9446
+ // We use wrapped nodes here, because the output AST doesn't support spread assignments.
9447
+ firstArgMeta,
9448
+ new WrappedNodeExpr6(ts43.factory.createObjectLiteralExpression([
9449
+ ...call.arguments.length > 1 ? [ts43.factory.createSpreadAssignment(call.arguments[1])] : [],
9450
+ ts43.factory.createPropertyAssignment("isSignal", ts43.factory.createTrue())
9451
+ ]))
9452
+ ];
9453
+ return new LiteralArrayExpr2(entries);
9454
+ }
9325
9455
  function isStringArrayOrDie(value, name, node) {
9326
9456
  if (!Array.isArray(value)) {
9327
9457
  return false;
@@ -12178,11 +12308,11 @@ var ReferenceEmitEnvironment = class {
12178
12308
  };
12179
12309
 
12180
12310
  // packages/compiler-cli/src/ngtsc/typecheck/src/type_constructor.js
12181
- import { ExpressionType as ExpressionType2, R3Identifiers as R3Identifiers2, WrappedNodeExpr as WrappedNodeExpr7 } from "@angular/compiler";
12311
+ import { ExpressionType as ExpressionType2, R3Identifiers as R3Identifiers3, WrappedNodeExpr as WrappedNodeExpr7 } from "@angular/compiler";
12182
12312
  import ts54 from "typescript";
12183
12313
 
12184
12314
  // packages/compiler-cli/src/ngtsc/typecheck/src/tcb_util.js
12185
- import { R3Identifiers } from "@angular/compiler";
12315
+ import { R3Identifiers as R3Identifiers2 } from "@angular/compiler";
12186
12316
  import ts53 from "typescript";
12187
12317
 
12188
12318
  // packages/compiler-cli/src/ngtsc/typecheck/src/type_parameter_emitter.js
@@ -12277,12 +12407,12 @@ var TypeParameterEmitter = class {
12277
12407
  import { BindingType, CssSelector as CssSelector2, makeBindingParser, TmplAstBoundAttribute, TmplAstBoundEvent, TmplAstHostElement, AbsoluteSourceSpan as AbsoluteSourceSpan2, ParseSpan, PropertyRead as PropertyRead2, ParsedEventType, Call, ThisReceiver, KeyedRead, LiteralPrimitive, RecursiveAstVisitor, ASTWithName, SafeCall, ImplicitReceiver as ImplicitReceiver2 } from "@angular/compiler";
12278
12408
  import ts52 from "typescript";
12279
12409
  var GUARD_COMMENT_TEXT = "hostBindingsBlockGuard";
12280
- function createHostElement(type, selector, sourceNode, literal3, bindingDecorators, listenerDecorators) {
12410
+ function createHostElement(type, selector, sourceNode, literal4, bindingDecorators, listenerDecorators) {
12281
12411
  const bindings = [];
12282
12412
  const listeners = [];
12283
12413
  let parser = null;
12284
- if (literal3 !== null) {
12285
- for (const prop of literal3.properties) {
12414
+ if (literal4 !== null) {
12415
+ for (const prop of literal4.properties) {
12286
12416
  if (ts52.isPropertyAssignment(prop) && ts52.isStringLiteralLike(prop.initializer) && isStaticName(prop.name)) {
12287
12417
  parser ??= makeBindingParser();
12288
12418
  createNodeFromHostLiteralProperty(prop, parser, bindings, listeners);
@@ -12508,7 +12638,7 @@ var TCB_FILE_IMPORT_GRAPH_PREPARE_IDENTIFIERS = [
12508
12638
  // Imports may be added for signal input checking. We wouldn't want to change the
12509
12639
  // import graph for incremental compilations when suddenly a signal input is used,
12510
12640
  // or removed.
12511
- R3Identifiers.InputSignalBrandWriteType
12641
+ R3Identifiers2.InputSignalBrandWriteType
12512
12642
  ];
12513
12643
  var TcbInliningRequirement;
12514
12644
  (function(TcbInliningRequirement2) {
@@ -12742,7 +12872,7 @@ function constructTypeCtorParameter(env, meta, rawType) {
12742
12872
  }
12743
12873
  if (signalInputKeys.length > 0) {
12744
12874
  const keyTypeUnion = ts54.factory.createUnionTypeNode(signalInputKeys);
12745
- const unwrapDirectiveSignalInputsExpr = env.referenceExternalType(R3Identifiers2.UnwrapDirectiveSignalInputs.moduleName, R3Identifiers2.UnwrapDirectiveSignalInputs.name, [
12875
+ const unwrapDirectiveSignalInputsExpr = env.referenceExternalType(R3Identifiers3.UnwrapDirectiveSignalInputs.moduleName, R3Identifiers3.UnwrapDirectiveSignalInputs.name, [
12746
12876
  // TODO:
12747
12877
  new ExpressionType2(new WrappedNodeExpr7(rawType)),
12748
12878
  new ExpressionType2(new WrappedNodeExpr7(keyTypeUnion))
@@ -13118,10 +13248,10 @@ Deferred blocks can only access triggers in same view, a parent embedded view or
13118
13248
  this._diagnostics.push(makeTemplateDiagnostic(id, this.resolver.getTemplateSourceMapping(id), node.keySpan || node.sourceSpan, ts56.DiagnosticCategory.Error, ngErrorCode(ErrorCode.UNCLAIMED_DIRECTIVE_BINDING), errorMsg));
13119
13249
  }
13120
13250
  deferImplicitTriggerMissingPlaceholder(id, trigger) {
13121
- this._diagnostics.push(makeTemplateDiagnostic(id, this.resolver.getTemplateSourceMapping(id), trigger.sourceSpan, ts56.DiagnosticCategory.Error, ngErrorCode(ErrorCode.DEFER_IMPLICIT_TRIGGER_MISSING_PLACEHOLDER), "Trigger with no parameters can only be placed on an @defer that has a @placeholder block"));
13251
+ this._diagnostics.push(makeTemplateDiagnostic(id, this.resolver.getTemplateSourceMapping(id), trigger.sourceSpan, ts56.DiagnosticCategory.Error, ngErrorCode(ErrorCode.DEFER_IMPLICIT_TRIGGER_MISSING_PLACEHOLDER), "Trigger with no target can only be placed on an @defer that has a @placeholder block"));
13122
13252
  }
13123
13253
  deferImplicitTriggerInvalidPlaceholder(id, trigger) {
13124
- this._diagnostics.push(makeTemplateDiagnostic(id, this.resolver.getTemplateSourceMapping(id), trigger.sourceSpan, ts56.DiagnosticCategory.Error, ngErrorCode(ErrorCode.DEFER_IMPLICIT_TRIGGER_INVALID_PLACEHOLDER), "Trigger with no parameters can only be placed on an @defer that has a @placeholder block with exactly one root element node"));
13254
+ this._diagnostics.push(makeTemplateDiagnostic(id, this.resolver.getTemplateSourceMapping(id), trigger.sourceSpan, ts56.DiagnosticCategory.Error, ngErrorCode(ErrorCode.DEFER_IMPLICIT_TRIGGER_INVALID_PLACEHOLDER), "Trigger with no target can only be placed on an @defer that has a @placeholder block with exactly one root element node"));
13125
13255
  }
13126
13256
  };
13127
13257
  function makeInlineDiagnostic(id, code, node, messageText, relatedInformation) {
@@ -13149,7 +13279,7 @@ var TypeCheckShimGenerator = class {
13149
13279
  };
13150
13280
 
13151
13281
  // packages/compiler-cli/src/ngtsc/typecheck/src/type_check_block.js
13152
- import { BindingPipe, BindingType as BindingType2, Call as Call3, createCssSelectorFromNode, CssSelector as CssSelector3, DYNAMIC_TYPE, ImplicitReceiver as ImplicitReceiver3, ParsedEventType as ParsedEventType2, PropertyRead as PropertyRead4, R3Identifiers as R3Identifiers3, SafeCall as SafeCall2, SafePropertyRead as SafePropertyRead3, SelectorMatcher as SelectorMatcher2, ThisReceiver as ThisReceiver2, TmplAstBoundAttribute as TmplAstBoundAttribute2, TmplAstBoundText, TmplAstContent, TmplAstDeferredBlock, TmplAstElement as TmplAstElement2, TmplAstForLoopBlock, TmplAstIcu, TmplAstIfBlock, TmplAstIfBlockBranch, TmplAstLetDeclaration as TmplAstLetDeclaration2, TmplAstReference as TmplAstReference2, TmplAstSwitchBlock, TmplAstTemplate, TmplAstText, TmplAstTextAttribute as TmplAstTextAttribute2, TmplAstVariable, TmplAstHostElement as TmplAstHostElement2, TransplantedType, TmplAstComponent as TmplAstComponent2, TmplAstDirective as TmplAstDirective2, Binary } from "@angular/compiler";
13282
+ import { BindingPipe, BindingType as BindingType2, Call as Call3, createCssSelectorFromNode, CssSelector as CssSelector3, DYNAMIC_TYPE, ImplicitReceiver as ImplicitReceiver3, ParsedEventType as ParsedEventType2, PropertyRead as PropertyRead4, R3Identifiers as R3Identifiers4, SafeCall as SafeCall2, SafePropertyRead as SafePropertyRead3, SelectorMatcher as SelectorMatcher2, ThisReceiver as ThisReceiver2, TmplAstBoundAttribute as TmplAstBoundAttribute2, TmplAstBoundText, TmplAstContent, TmplAstDeferredBlock, TmplAstElement as TmplAstElement2, TmplAstForLoopBlock, TmplAstIcu, TmplAstIfBlock, TmplAstIfBlockBranch, TmplAstLetDeclaration as TmplAstLetDeclaration2, TmplAstReference as TmplAstReference2, TmplAstSwitchBlock, TmplAstTemplate, TmplAstText, TmplAstTextAttribute as TmplAstTextAttribute2, TmplAstVariable, TmplAstHostElement as TmplAstHostElement2, TransplantedType, TmplAstComponent as TmplAstComponent2, TmplAstDirective as TmplAstDirective2, Binary } from "@angular/compiler";
13153
13283
  import ts60 from "typescript";
13154
13284
 
13155
13285
  // packages/compiler-cli/src/ngtsc/typecheck/src/diagnostics.js
@@ -13339,8 +13469,8 @@ var AstTranslator = class {
13339
13469
  }
13340
13470
  visitLiteralArray(ast) {
13341
13471
  const elements = ast.expressions.map((expr) => this.translate(expr));
13342
- const literal3 = ts59.factory.createArrayLiteralExpression(elements);
13343
- const node = this.config.strictLiteralTypes ? literal3 : tsCastToAny(literal3);
13472
+ const literal4 = ts59.factory.createArrayLiteralExpression(elements);
13473
+ const node = this.config.strictLiteralTypes ? literal4 : tsCastToAny(literal4);
13344
13474
  addParseSpanInfo(node, ast.sourceSpan);
13345
13475
  return node;
13346
13476
  }
@@ -13349,8 +13479,8 @@ var AstTranslator = class {
13349
13479
  const value = this.translate(ast.values[idx]);
13350
13480
  return ts59.factory.createPropertyAssignment(ts59.factory.createStringLiteral(key), value);
13351
13481
  });
13352
- const literal3 = ts59.factory.createObjectLiteralExpression(properties, true);
13353
- const node = this.config.strictLiteralTypes ? literal3 : tsCastToAny(literal3);
13482
+ const literal4 = ts59.factory.createObjectLiteralExpression(properties, true);
13483
+ const node = this.config.strictLiteralTypes ? literal4 : tsCastToAny(literal4);
13354
13484
  addParseSpanInfo(node, ast.sourceSpan);
13355
13485
  return node;
13356
13486
  }
@@ -14124,9 +14254,9 @@ var TcbDirectiveInputsOp = class extends TcbOp {
14124
14254
  target = this.dir.stringLiteralInputFields.has(fieldName) ? ts60.factory.createElementAccessExpression(dirId, ts60.factory.createStringLiteral(fieldName)) : ts60.factory.createPropertyAccessExpression(dirId, ts60.factory.createIdentifier(fieldName));
14125
14255
  }
14126
14256
  if (isSignal) {
14127
- const inputSignalBrandWriteSymbol = this.tcb.env.referenceExternalSymbol(R3Identifiers3.InputSignalBrandWriteType.moduleName, R3Identifiers3.InputSignalBrandWriteType.name);
14257
+ const inputSignalBrandWriteSymbol = this.tcb.env.referenceExternalSymbol(R3Identifiers4.InputSignalBrandWriteType.moduleName, R3Identifiers4.InputSignalBrandWriteType.name);
14128
14258
  if (!ts60.isIdentifier(inputSignalBrandWriteSymbol) && !ts60.isPropertyAccessExpression(inputSignalBrandWriteSymbol)) {
14129
- throw new Error(`Expected identifier or property access for reference to ${R3Identifiers3.InputSignalBrandWriteType.name}`);
14259
+ throw new Error(`Expected identifier or property access for reference to ${R3Identifiers4.InputSignalBrandWriteType.name}`);
14130
14260
  }
14131
14261
  target = ts60.factory.createElementAccessExpression(target, inputSignalBrandWriteSymbol);
14132
14262
  }
@@ -14745,6 +14875,25 @@ var TcbForOfOp = class extends TcbOp {
14745
14875
  return null;
14746
14876
  }
14747
14877
  };
14878
+ var TcbIntersectionObserverOp = class extends TcbOp {
14879
+ tcb;
14880
+ scope;
14881
+ options;
14882
+ constructor(tcb, scope, options) {
14883
+ super();
14884
+ this.tcb = tcb;
14885
+ this.scope = scope;
14886
+ this.options = options;
14887
+ }
14888
+ optional = false;
14889
+ execute() {
14890
+ const options = tcbExpression(this.options, this.tcb, this.scope);
14891
+ const callback = ts60.factory.createNonNullExpression(ts60.factory.createNull());
14892
+ const expression = ts60.factory.createNewExpression(ts60.factory.createIdentifier("IntersectionObserver"), void 0, [callback, options]);
14893
+ this.scope.addStatement(ts60.factory.createExpressionStatement(expression));
14894
+ return null;
14895
+ }
14896
+ };
14748
14897
  var Context2 = class {
14749
14898
  env;
14750
14899
  domSchemaChecker;
@@ -15370,6 +15519,9 @@ var Scope = class _Scope {
15370
15519
  if (triggers.when !== void 0) {
15371
15520
  this.opQueue.push(new TcbExpressionOp(this.tcb, this, triggers.when.value));
15372
15521
  }
15522
+ if (triggers.viewport !== void 0 && triggers.viewport.options !== null) {
15523
+ this.opQueue.push(new TcbIntersectionObserverOp(this.tcb, this, triggers.viewport.options));
15524
+ }
15373
15525
  if (triggers.hover !== void 0) {
15374
15526
  this.validateReferenceBasedDeferredTrigger(block, triggers.hover);
15375
15527
  }
@@ -15637,7 +15789,7 @@ function widenBinding(expr, tcb) {
15637
15789
  }
15638
15790
  }
15639
15791
  function unwrapWritableSignal(expression, tcb) {
15640
- const unwrapRef = tcb.env.referenceExternalSymbol(R3Identifiers3.unwrapWritableSignal.moduleName, R3Identifiers3.unwrapWritableSignal.name);
15792
+ const unwrapRef = tcb.env.referenceExternalSymbol(R3Identifiers4.unwrapWritableSignal.moduleName, R3Identifiers4.unwrapWritableSignal.name);
15641
15793
  return ts60.factory.createCallExpression(unwrapRef, void 0, [expression]);
15642
15794
  }
15643
15795
  var EVENT_PARAMETER = "$event";
@@ -16254,7 +16406,7 @@ var DirectiveSourceManager = class {
16254
16406
  };
16255
16407
 
16256
16408
  // packages/compiler-cli/src/ngtsc/typecheck/src/template_symbol_builder.js
16257
- import { AST, ASTWithName as ASTWithName2, ASTWithSource as ASTWithSource2, Binary as Binary2, BindingPipe as BindingPipe2, PropertyRead as PropertyRead5, R3Identifiers as R3Identifiers4, SafePropertyRead as SafePropertyRead4, TmplAstBoundAttribute as TmplAstBoundAttribute3, TmplAstBoundEvent as TmplAstBoundEvent3, TmplAstComponent as TmplAstComponent3, TmplAstDirective as TmplAstDirective3, TmplAstElement as TmplAstElement3, TmplAstLetDeclaration as TmplAstLetDeclaration3, TmplAstReference as TmplAstReference3, TmplAstTemplate as TmplAstTemplate2, TmplAstTextAttribute as TmplAstTextAttribute3, TmplAstVariable as TmplAstVariable2 } from "@angular/compiler";
16409
+ import { AST, ASTWithName as ASTWithName2, ASTWithSource as ASTWithSource2, Binary as Binary2, BindingPipe as BindingPipe2, PropertyRead as PropertyRead5, R3Identifiers as R3Identifiers5, SafePropertyRead as SafePropertyRead4, TmplAstBoundAttribute as TmplAstBoundAttribute3, TmplAstBoundEvent as TmplAstBoundEvent3, TmplAstComponent as TmplAstComponent3, TmplAstDirective as TmplAstDirective3, TmplAstElement as TmplAstElement3, TmplAstLetDeclaration as TmplAstLetDeclaration3, TmplAstReference as TmplAstReference3, TmplAstTemplate as TmplAstTemplate2, TmplAstTextAttribute as TmplAstTextAttribute3, TmplAstVariable as TmplAstVariable2 } from "@angular/compiler";
16258
16410
  import ts63 from "typescript";
16259
16411
  var SymbolBuilder = class {
16260
16412
  tcbPath;
@@ -16884,7 +17036,7 @@ function unwrapSignalInputWriteTAccessor(expr) {
16884
17036
  if (!ts63.isElementAccessExpression(expr) || !ts63.isPropertyAccessExpression(expr.argumentExpression)) {
16885
17037
  return null;
16886
17038
  }
16887
- if (!ts63.isIdentifier(expr.argumentExpression.name) || expr.argumentExpression.name.text !== R3Identifiers4.InputSignalBrandWriteType.name) {
17039
+ if (!ts63.isIdentifier(expr.argumentExpression.name) || expr.argumentExpression.name.text !== R3Identifiers5.InputSignalBrandWriteType.name) {
16888
17040
  return null;
16889
17041
  }
16890
17042
  if (!ts63.isPropertyAccessExpression(expr.expression) && !ts63.isElementAccessExpression(expr.expression) && !ts63.isIdentifier(expr.expression)) {
@@ -16990,6 +17142,9 @@ var TemplateTypeCheckerImpl = class {
16990
17142
  const { data } = this.getLatestComponentState(directive, optimizeFor);
16991
17143
  return data?.hostElement ?? null;
16992
17144
  }
17145
+ getDirectivesOfNode(component, node) {
17146
+ return this.getLatestComponentState(component).data?.boundTarget.getDirectivesOfNode(node) ?? null;
17147
+ }
16993
17148
  getUsedDirectives(component) {
16994
17149
  return this.getLatestComponentState(component).data?.boundTarget.getUsedDirectives() ?? null;
16995
17150
  }
@@ -18148,9 +18303,11 @@ var DirectiveDecoratorHandler = class {
18148
18303
  this.usePoisonedData = usePoisonedData;
18149
18304
  this.typeCheckHostBindings = typeCheckHostBindings;
18150
18305
  this.emitDeclarationOnly = emitDeclarationOnly;
18306
+ this.undecoratedMetadataExtractor = getDirectiveUndecoratedMetadataExtractor(reflector, importTracker);
18151
18307
  }
18152
18308
  precedence = HandlerPrecedence.PRIMARY;
18153
18309
  name = "DirectiveDecoratorHandler";
18310
+ undecoratedMetadataExtractor;
18154
18311
  detect(node, decorators) {
18155
18312
  if (!decorators) {
18156
18313
  const angularField = this.findClassFieldWithAngularFeatures(node);
@@ -18202,7 +18359,7 @@ var DirectiveDecoratorHandler = class {
18202
18359
  meta: analysis,
18203
18360
  hostDirectives: directiveResult.hostDirectives,
18204
18361
  rawHostDirectives: directiveResult.rawHostDirectives,
18205
- classMetadata: this.includeClassMetadata ? extractClassMetadata(node, this.reflector, this.isCore, this.annotateForClosureCompiler) : null,
18362
+ classMetadata: this.includeClassMetadata ? extractClassMetadata(node, this.reflector, this.isCore, this.annotateForClosureCompiler, void 0, this.undecoratedMetadataExtractor) : null,
18206
18363
  baseClass: readBaseClass(node, this.reflector, this.evaluator),
18207
18364
  typeCheckMeta: extractDirectiveTypeCheckMeta(node, directiveResult.inputs, this.reflector),
18208
18365
  providersRequiringFactory,
@@ -18376,7 +18533,7 @@ var DirectiveDecoratorHandler = class {
18376
18533
  };
18377
18534
 
18378
18535
  // packages/compiler-cli/src/ngtsc/annotations/ng_module/src/handler.js
18379
- import { compileClassMetadata as compileClassMetadata2, compileDeclareClassMetadata as compileDeclareClassMetadata2, compileDeclareInjectorFromMetadata, compileDeclareNgModuleFromMetadata, compileInjector, compileNgModule, ExternalExpr as ExternalExpr9, FactoryTarget as FactoryTarget2, FunctionExpr, InvokeFunctionExpr, LiteralArrayExpr as LiteralArrayExpr2, R3Identifiers as R3Identifiers5, R3NgModuleMetadataKind, R3SelectorScopeMode, ReturnStatement, WrappedNodeExpr as WrappedNodeExpr10 } from "@angular/compiler";
18536
+ import { compileClassMetadata as compileClassMetadata2, compileDeclareClassMetadata as compileDeclareClassMetadata2, compileDeclareInjectorFromMetadata, compileDeclareNgModuleFromMetadata, compileInjector, compileNgModule, ExternalExpr as ExternalExpr9, FactoryTarget as FactoryTarget2, FunctionExpr, InvokeFunctionExpr, LiteralArrayExpr as LiteralArrayExpr3, R3Identifiers as R3Identifiers6, R3NgModuleMetadataKind, R3SelectorScopeMode, ReturnStatement, WrappedNodeExpr as WrappedNodeExpr10 } from "@angular/compiler";
18380
18537
  import ts67 from "typescript";
18381
18538
 
18382
18539
  // packages/compiler-cli/src/ngtsc/annotations/ng_module/src/module_with_providers.js
@@ -19012,14 +19169,14 @@ var NgModuleDecoratorHandler = class {
19012
19169
  assertSuccessfulReferenceEmit(type, node, "pipe");
19013
19170
  return type.expression;
19014
19171
  });
19015
- const directiveArray = new LiteralArrayExpr2(directives);
19016
- const pipesArray = new LiteralArrayExpr2(pipes);
19172
+ const directiveArray = new LiteralArrayExpr3(directives);
19173
+ const pipesArray = new LiteralArrayExpr3(pipes);
19017
19174
  const directiveExpr = remoteScopesMayRequireCycleProtection && directives.length > 0 ? new FunctionExpr([], [new ReturnStatement(directiveArray)]) : directiveArray;
19018
19175
  const pipesExpr = remoteScopesMayRequireCycleProtection && pipes.length > 0 ? new FunctionExpr([], [new ReturnStatement(pipesArray)]) : pipesArray;
19019
19176
  const componentType = this.refEmitter.emit(decl, context);
19020
19177
  assertSuccessfulReferenceEmit(componentType, node, "component");
19021
19178
  const declExpr = componentType.expression;
19022
- const setComponentScope = new ExternalExpr9(R3Identifiers5.setComponentScope);
19179
+ const setComponentScope = new ExternalExpr9(R3Identifiers6.setComponentScope);
19023
19180
  const callExpr = new InvokeFunctionExpr(setComponentScope, [
19024
19181
  declExpr,
19025
19182
  directiveExpr,
@@ -19979,6 +20136,32 @@ var SelectorlessDirectivesAnalyzer = class extends CombinedRecursiveAstVisitor {
19979
20136
  }
19980
20137
  };
19981
20138
 
20139
+ // packages/compiler-cli/src/ngtsc/annotations/component/src/animations.js
20140
+ import { CombinedRecursiveAstVisitor as CombinedRecursiveAstVisitor2, tmplAstVisitAll as tmplAstVisitAll2 } from "@angular/compiler";
20141
+ var ANIMATE_ENTER = "animate.enter";
20142
+ var ANIMATE_LEAVE = `animate.leave`;
20143
+ function analyzeTemplateForAnimations(template) {
20144
+ const analyzer = new AnimationsAnalyzer();
20145
+ tmplAstVisitAll2(analyzer, template);
20146
+ return { hasAnimations: analyzer.hasAnimations };
20147
+ }
20148
+ var AnimationsAnalyzer = class extends CombinedRecursiveAstVisitor2 {
20149
+ hasAnimations = false;
20150
+ visitElement(element) {
20151
+ for (const attr of element.attributes) {
20152
+ if (attr.name === ANIMATE_LEAVE || attr.name === ANIMATE_ENTER) {
20153
+ this.hasAnimations = true;
20154
+ }
20155
+ }
20156
+ for (const input of element.inputs) {
20157
+ if (input.name === ANIMATE_LEAVE || input.name === ANIMATE_ENTER) {
20158
+ this.hasAnimations = true;
20159
+ }
20160
+ }
20161
+ super.visitElement(element);
20162
+ }
20163
+ };
20164
+
19982
20165
  // packages/compiler-cli/src/ngtsc/annotations/component/src/handler.js
19983
20166
  var EMPTY_ARRAY2 = [];
19984
20167
  var isUsedDirective = (decl) => decl.kind === R3TemplateDependencyKind.Directive;
@@ -20086,10 +20269,12 @@ var ComponentDecoratorHandler = class {
20086
20269
  enableSelectorless: this.enableSelectorless,
20087
20270
  preserveSignificantWhitespace: this.i18nPreserveSignificantWhitespace
20088
20271
  };
20272
+ this.undecoratedMetadataExtractor = getDirectiveUndecoratedMetadataExtractor(reflector, importTracker);
20089
20273
  this.canDeferDeps = !enableHmr;
20090
20274
  }
20091
20275
  literalCache = /* @__PURE__ */ new Map();
20092
20276
  elementSchemaRegistry = new DomElementSchemaRegistry3();
20277
+ undecoratedMetadataExtractor;
20093
20278
  /**
20094
20279
  * During the asynchronous preanalyze phase, it's necessary to parse the template to extract
20095
20280
  * any potential <link> tags which might need to be loaded. This cache ensures that work is not
@@ -20334,6 +20519,16 @@ var ComponentDecoratorHandler = class {
20334
20519
  }
20335
20520
  }
20336
20521
  }
20522
+ if (component.has("animations")) {
20523
+ const { hasAnimations } = analyzeTemplateForAnimations(template.nodes);
20524
+ if (hasAnimations) {
20525
+ if (diagnostics === void 0) {
20526
+ diagnostics = [];
20527
+ }
20528
+ diagnostics.push(makeDiagnostic(ErrorCode.COMPONENT_ANIMATIONS_CONFLICT, component.get("animations"), `A component cannot have both the '@Component.animations' property (legacy animations) and use 'animate.enter' or 'animate.leave' in the template.`));
20529
+ isPoisoned = true;
20530
+ }
20531
+ }
20337
20532
  const templateResource = template.declaration.isInline ? { path: null, node: component.get("template") } : {
20338
20533
  path: absoluteFrom(template.declaration.resolvedTemplateUrl),
20339
20534
  node: template.sourceMapping.node
@@ -20475,7 +20670,7 @@ var ComponentDecoratorHandler = class {
20475
20670
  relativeTemplatePath
20476
20671
  },
20477
20672
  typeCheckMeta: extractDirectiveTypeCheckMeta(node, inputs, this.reflector),
20478
- classMetadata: this.includeClassMetadata ? extractClassMetadata(node, this.reflector, this.isCore, this.annotateForClosureCompiler, (dec) => transformDecoratorResources(dec, component, styles, template)) : null,
20673
+ classMetadata: this.includeClassMetadata ? extractClassMetadata(node, this.reflector, this.isCore, this.annotateForClosureCompiler, (dec) => transformDecoratorResources(dec, component, styles, template), this.undecoratedMetadataExtractor) : null,
20479
20674
  classDebugInfo: extractClassDebugInfo(
20480
20675
  node,
20481
20676
  this.reflector,
@@ -455,7 +455,7 @@ import { compileDirectiveFromMetadata, makeBindingParser, ParseLocation, ParseSo
455
455
  // packages/compiler-cli/linker/src/file_linker/partial_linkers/util.js
456
456
  import { createMayBeForwardRefExpression, outputAst as o2 } from "@angular/compiler";
457
457
  import semver from "semver";
458
- var PLACEHOLDER_VERSION = "21.0.0-next.7";
458
+ var PLACEHOLDER_VERSION = "21.0.0-next.9";
459
459
  function wrapReference(wrapped) {
460
460
  return { value: wrapped, type: wrapped };
461
461
  }
@@ -16,7 +16,7 @@ import {
16
16
  tryParseSignalInputMapping,
17
17
  tryParseSignalModelMapping,
18
18
  tryParseSignalQueryFromInitializer
19
- } from "./chunk-O7L4BBZY.js";
19
+ } from "./chunk-3UF7UI6H.js";
20
20
 
21
21
  // packages/compiler-cli/src/ngtsc/transform/jit/src/downlevel_decorators_transform.js
22
22
  import ts from "typescript";
@@ -12,7 +12,7 @@ import {
12
12
  formatDiagnostics,
13
13
  performCompilation,
14
14
  readConfiguration
15
- } from "./chunk-3I7LEC2O.js";
15
+ } from "./chunk-SIOKS4LN.js";
16
16
 
17
17
  // packages/compiler-cli/src/main.js
18
18
  import ts2 from "typescript";