@angular/compiler-cli 17.1.0-next.2 → 17.1.0-next.4

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 (59) hide show
  1. package/bundles/{chunk-QWNQBN2Z.js → chunk-5QWOGIJL.js} +2 -2
  2. package/bundles/{chunk-RLZPCAR3.js → chunk-EFMKZSXJ.js} +34 -7
  3. package/bundles/chunk-EFMKZSXJ.js.map +6 -0
  4. package/bundles/{chunk-OYL5JDZA.js → chunk-HQUXRCDO.js} +138 -65
  5. package/bundles/chunk-HQUXRCDO.js.map +6 -0
  6. package/bundles/{chunk-6GUXR7F5.js → chunk-MFE4YVWE.js} +6 -5
  7. package/bundles/chunk-MFE4YVWE.js.map +6 -0
  8. package/bundles/{chunk-54K5L6NG.js → chunk-OZXTEOXW.js} +7 -5
  9. package/bundles/chunk-OZXTEOXW.js.map +6 -0
  10. package/bundles/{chunk-VOXK3NAL.js → chunk-U4EFDEE4.js} +216 -92
  11. package/bundles/chunk-U4EFDEE4.js.map +6 -0
  12. package/bundles/{chunk-TNVYLY25.js → chunk-YGXKICXB.js} +2 -2
  13. package/bundles/index.js +6 -7
  14. package/bundles/index.js.map +1 -1
  15. package/bundles/linker/babel/index.js +8 -8
  16. package/bundles/linker/babel/index.js.map +1 -1
  17. package/bundles/linker/index.js +3 -3
  18. package/bundles/private/migrations.js +3 -4
  19. package/bundles/private/tooling.js +2 -3
  20. package/bundles/src/bin/ng_xi18n.js +5 -6
  21. package/bundles/src/bin/ng_xi18n.js.map +1 -1
  22. package/bundles/src/bin/ngc.js +5 -6
  23. package/bundles/src/bin/ngc.js.map +1 -1
  24. package/bundles_metadata.json +1 -1
  25. package/linker/babel/src/ast/babel_ast_factory.d.ts +0 -1
  26. package/linker/babel/src/ast/babel_ast_host.d.ts +0 -1
  27. package/linker/babel/src/babel_declaration_scope.d.ts +2 -5
  28. package/linker/babel/src/babel_plugin.d.ts +0 -1
  29. package/linker/babel/src/es2015_linker_plugin.d.ts +0 -1
  30. package/linker/src/file_linker/partial_linkers/util.d.ts +1 -1
  31. package/package.json +2 -2
  32. package/private/babel.d.ts +6 -20
  33. package/src/ngtsc/annotations/directive/src/input_function.d.ts +23 -0
  34. package/src/ngtsc/annotations/directive/src/shared.d.ts +15 -3
  35. package/src/ngtsc/diagnostics/src/extended_template_diagnostic_name.d.ts +2 -1
  36. package/src/ngtsc/imports/src/emitter.d.ts +5 -1
  37. package/src/ngtsc/imports/src/references.d.ts +3 -1
  38. package/src/ngtsc/metadata/src/api.d.ts +25 -3
  39. package/src/ngtsc/metadata/src/property_mapping.d.ts +3 -1
  40. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -1
  41. package/src/ngtsc/reflection/src/host.d.ts +6 -1
  42. package/src/ngtsc/reflection/src/typescript.d.ts +1 -0
  43. package/src/ngtsc/typecheck/api/api.d.ts +4 -0
  44. package/src/ngtsc/typecheck/extended/index.d.ts +1 -0
  45. package/src/ngtsc/typecheck/src/environment.d.ts +2 -27
  46. package/src/ngtsc/typecheck/src/oob.d.ts +3 -2
  47. package/src/ngtsc/typecheck/src/reference_emit_environment.d.ts +50 -0
  48. package/src/ngtsc/typecheck/src/tcb_util.d.ts +7 -8
  49. package/src/ngtsc/typecheck/src/type_check_block.d.ts +2 -1
  50. package/src/ngtsc/typecheck/src/type_constructor.d.ts +3 -3
  51. package/bundles/chunk-54K5L6NG.js.map +0 -6
  52. package/bundles/chunk-6GUXR7F5.js.map +0 -6
  53. package/bundles/chunk-OYL5JDZA.js.map +0 -6
  54. package/bundles/chunk-RLZPCAR3.js.map +0 -6
  55. package/bundles/chunk-UHYH6BYB.js +0 -12
  56. package/bundles/chunk-UHYH6BYB.js.map +0 -6
  57. package/bundles/chunk-VOXK3NAL.js.map +0 -6
  58. /package/bundles/{chunk-QWNQBN2Z.js.map → chunk-5QWOGIJL.js.map} +0 -0
  59. /package/bundles/{chunk-TNVYLY25.js.map → chunk-YGXKICXB.js.map} +0 -0
@@ -36,17 +36,18 @@ import {
36
36
  aliasTransformFactory,
37
37
  declarationTransformFactory,
38
38
  ivyTransformFactory
39
- } from "./chunk-VOXK3NAL.js";
39
+ } from "./chunk-U4EFDEE4.js";
40
40
  import {
41
41
  ImportManager,
42
42
  TypeEmitter,
43
43
  canEmitType,
44
44
  translateExpression,
45
45
  translateType
46
- } from "./chunk-6GUXR7F5.js";
46
+ } from "./chunk-MFE4YVWE.js";
47
47
  import {
48
48
  AbsoluteModuleStrategy,
49
49
  AliasStrategy,
50
+ AmbientImport,
50
51
  COMPILER_ERRORS_WITH_GUIDES,
51
52
  DefaultImportTracker,
52
53
  DeferredSymbolTracker,
@@ -85,7 +86,7 @@ import {
85
86
  relativePathBetween,
86
87
  replaceTsWithNgInErrors,
87
88
  toUnredirectedSourceFile
88
- } from "./chunk-RLZPCAR3.js";
89
+ } from "./chunk-EFMKZSXJ.js";
89
90
  import {
90
91
  ActivePerfRecorder,
91
92
  DelegatingPerfRecorder,
@@ -1393,6 +1394,12 @@ var ShimReferenceTagger = class {
1393
1394
 
1394
1395
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/program_driver/src/ts_create_program_driver.mjs
1395
1396
  var DelegatingCompilerHost = class {
1397
+ get jsDocParsingMode() {
1398
+ return this.delegate.jsDocParsingMode;
1399
+ }
1400
+ set jsDocParsingMode(mode) {
1401
+ this.delegate.jsDocParsingMode = mode;
1402
+ }
1396
1403
  constructor(delegate) {
1397
1404
  this.delegate = delegate;
1398
1405
  this.createHash = this.delegateMethod("createHash");
@@ -1418,7 +1425,6 @@ var DelegatingCompilerHost = class {
1418
1425
  this.hasInvalidatedResolutions = this.delegateMethod("hasInvalidatedResolutions");
1419
1426
  this.resolveModuleNameLiterals = this.delegateMethod("resolveModuleNameLiterals");
1420
1427
  this.resolveTypeReferenceDirectiveReferences = this.delegateMethod("resolveTypeReferenceDirectiveReferences");
1421
- this.jsDocParsingMode = this.delegateMethod("jsDocParsingMode");
1422
1428
  }
1423
1429
  delegateMethod(name) {
1424
1430
  return this.delegate[name] !== void 0 ? this.delegate[name].bind(this.delegate) : void 0;
@@ -1432,10 +1438,10 @@ var UpdatedProgramHost = class extends DelegatingCompilerHost {
1432
1438
  this.shimTagger = new ShimReferenceTagger(this.shimExtensionPrefixes);
1433
1439
  this.sfMap = sfMap;
1434
1440
  }
1435
- getSourceFile(fileName, languageVersion, onError, shouldCreateNewSourceFile) {
1441
+ getSourceFile(fileName, languageVersionOrOptions, onError, shouldCreateNewSourceFile) {
1436
1442
  let delegateSf = this.originalProgram.getSourceFile(fileName);
1437
1443
  if (delegateSf === void 0) {
1438
- delegateSf = this.delegate.getSourceFile(fileName, languageVersion, onError, shouldCreateNewSourceFile);
1444
+ delegateSf = this.delegate.getSourceFile(fileName, languageVersionOrOptions, onError, shouldCreateNewSourceFile);
1439
1445
  }
1440
1446
  if (delegateSf === void 0) {
1441
1447
  return void 0;
@@ -2480,7 +2486,7 @@ var StandaloneComponentScopeReader = class {
2480
2486
  };
2481
2487
 
2482
2488
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/src/checker.mjs
2483
- import { CssSelector as CssSelector2, DomElementSchemaRegistry as DomElementSchemaRegistry2, ExternalExpr as ExternalExpr2, WrappedNodeExpr } from "@angular/compiler";
2489
+ import { CssSelector as CssSelector2, DomElementSchemaRegistry as DomElementSchemaRegistry2, ExternalExpr as ExternalExpr2, WrappedNodeExpr as WrappedNodeExpr2 } from "@angular/compiler";
2484
2490
 
2485
2491
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs
2486
2492
  import ts15 from "typescript";
@@ -2954,9 +2960,39 @@ var RegistryDomSchemaChecker = class {
2954
2960
  };
2955
2961
 
2956
2962
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/src/environment.mjs
2957
- import { ExpressionType, ExternalExpr, TypeModifier } from "@angular/compiler";
2958
2963
  import ts23 from "typescript";
2959
2964
 
2965
+ // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/src/reference_emit_environment.mjs
2966
+ import { ExpressionType, ExternalExpr, TypeModifier } from "@angular/compiler";
2967
+ var ReferenceEmitEnvironment = class {
2968
+ constructor(importManager, refEmitter, reflector, contextFile) {
2969
+ this.importManager = importManager;
2970
+ this.refEmitter = refEmitter;
2971
+ this.reflector = reflector;
2972
+ this.contextFile = contextFile;
2973
+ }
2974
+ canReferenceType(ref, flags = ImportFlags.NoAliasing | ImportFlags.AllowTypeImports | ImportFlags.AllowRelativeDtsImports) {
2975
+ const result = this.refEmitter.emit(ref, this.contextFile, flags);
2976
+ return result.kind === 0;
2977
+ }
2978
+ referenceType(ref, flags = ImportFlags.NoAliasing | ImportFlags.AllowTypeImports | ImportFlags.AllowRelativeDtsImports) {
2979
+ const ngExpr = this.refEmitter.emit(ref, this.contextFile, flags);
2980
+ assertSuccessfulReferenceEmit(ngExpr, this.contextFile, "symbol");
2981
+ return translateType(new ExpressionType(ngExpr.expression), this.contextFile, this.reflector, this.refEmitter, this.importManager);
2982
+ }
2983
+ referenceExternalSymbol(moduleName, name) {
2984
+ const external = new ExternalExpr({ moduleName, name });
2985
+ return translateExpression(external, this.importManager);
2986
+ }
2987
+ referenceExternalType(moduleName, name, typeParams) {
2988
+ const external = new ExternalExpr({ moduleName, name });
2989
+ return translateType(new ExpressionType(external, TypeModifier.None, typeParams), this.contextFile, this.reflector, this.refEmitter, this.importManager);
2990
+ }
2991
+ referenceTransplantedType(type) {
2992
+ return translateType(type, this.contextFile, this.reflector, this.refEmitter, this.importManager);
2993
+ }
2994
+ };
2995
+
2960
2996
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/src/ts_util.mjs
2961
2997
  import ts19 from "typescript";
2962
2998
  var SAFE_TO_CAST_WITHOUT_PARENS = /* @__PURE__ */ new Set([
@@ -3043,9 +3079,11 @@ function tsNumericExpression(value) {
3043
3079
  }
3044
3080
 
3045
3081
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/src/type_constructor.mjs
3082
+ import { ExpressionType as ExpressionType2, R3Identifiers as R3Identifiers2, WrappedNodeExpr } from "@angular/compiler";
3046
3083
  import ts22 from "typescript";
3047
3084
 
3048
3085
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/src/tcb_util.mjs
3086
+ import { R3Identifiers } from "@angular/compiler";
3049
3087
  import ts21 from "typescript";
3050
3088
 
3051
3089
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/src/type_parameter_emitter.mjs
@@ -3099,13 +3137,13 @@ var TypeParameterEmitter = class {
3099
3137
  return type;
3100
3138
  }
3101
3139
  let owningModule = null;
3102
- if (declaration.viaModule !== null) {
3140
+ if (typeof declaration.viaModule === "string") {
3103
3141
  owningModule = {
3104
3142
  specifier: declaration.viaModule,
3105
3143
  resolutionContext: type.getSourceFile().fileName
3106
3144
  };
3107
3145
  }
3108
- return new Reference(declaration.node, owningModule);
3146
+ return new Reference(declaration.node, declaration.viaModule === AmbientImport ? AmbientImport : owningModule);
3109
3147
  }
3110
3148
  translateTypeReference(type, emitReference) {
3111
3149
  const reference = this.resolveTypeReference(type);
@@ -3127,6 +3165,9 @@ var TypeParameterEmitter = class {
3127
3165
  };
3128
3166
 
3129
3167
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/src/tcb_util.mjs
3168
+ var TCB_FILE_IMPORT_GRAPH_PREPARE_MODULES = [
3169
+ R3Identifiers.InputSignalBrandWriteType.moduleName
3170
+ ];
3130
3171
  var TcbInliningRequirement;
3131
3172
  (function(TcbInliningRequirement2) {
3132
3173
  TcbInliningRequirement2[TcbInliningRequirement2["MustInline"] = 0] = "MustInline";
@@ -3201,16 +3242,21 @@ function getTemplateId2(node, sourceFile, isDiagnosticRequest) {
3201
3242
  return commentText;
3202
3243
  }) || null;
3203
3244
  }
3245
+ function ensureTypeCheckFilePreparationImports(env) {
3246
+ for (const moduleName of TCB_FILE_IMPORT_GRAPH_PREPARE_MODULES) {
3247
+ env.importManager.generateNamespaceImport(moduleName);
3248
+ }
3249
+ }
3204
3250
  function checkIfGenericTypeBoundsCanBeEmitted(node, reflector, env) {
3205
3251
  const emitter = new TypeParameterEmitter(node.typeParameters, reflector);
3206
3252
  return emitter.canEmit((ref) => env.canReferenceType(ref));
3207
3253
  }
3208
3254
 
3209
3255
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/src/type_constructor.mjs
3210
- function generateTypeCtorDeclarationFn(node, meta, nodeTypeRef, typeParams) {
3256
+ function generateTypeCtorDeclarationFn(env, meta, nodeTypeRef, typeParams) {
3211
3257
  const rawTypeArgs = typeParams !== void 0 ? generateGenericArgs(typeParams) : void 0;
3212
3258
  const rawType = ts22.factory.createTypeReferenceNode(nodeTypeRef, rawTypeArgs);
3213
- const initParam = constructTypeCtorParameter(node, meta, rawType);
3259
+ const initParam = constructTypeCtorParameter(env, meta, rawType);
3214
3260
  const typeParameters = typeParametersWithDefaultTypes(typeParams);
3215
3261
  if (meta.body) {
3216
3262
  const fnType = ts22.factory.createFunctionTypeNode(
@@ -3241,10 +3287,10 @@ function generateTypeCtorDeclarationFn(node, meta, nodeTypeRef, typeParams) {
3241
3287
  );
3242
3288
  }
3243
3289
  }
3244
- function generateInlineTypeCtor(node, meta) {
3290
+ function generateInlineTypeCtor(env, node, meta) {
3245
3291
  const rawTypeArgs = node.typeParameters !== void 0 ? generateGenericArgs(node.typeParameters) : void 0;
3246
3292
  const rawType = ts22.factory.createTypeReferenceNode(node.name, rawTypeArgs);
3247
- const initParam = constructTypeCtorParameter(node, meta, rawType);
3293
+ const initParam = constructTypeCtorParameter(env, meta, rawType);
3248
3294
  let body = void 0;
3249
3295
  if (meta.body) {
3250
3296
  body = ts22.factory.createBlock([
@@ -3262,19 +3308,23 @@ function generateInlineTypeCtor(node, meta) {
3262
3308
  body
3263
3309
  );
3264
3310
  }
3265
- function constructTypeCtorParameter(node, meta, rawType) {
3311
+ function constructTypeCtorParameter(env, meta, rawType) {
3266
3312
  let initType = null;
3267
3313
  const plainKeys = [];
3268
3314
  const coercedKeys = [];
3269
- for (const { classPropertyName, transform } of meta.fields.inputs) {
3270
- if (!meta.coercedInputFields.has(classPropertyName)) {
3315
+ const signalInputKeys = [];
3316
+ for (const { classPropertyName, transform, isSignal } of meta.fields.inputs) {
3317
+ if (isSignal) {
3318
+ signalInputKeys.push(ts22.factory.createLiteralTypeNode(ts22.factory.createStringLiteral(classPropertyName)));
3319
+ } else if (!meta.coercedInputFields.has(classPropertyName)) {
3271
3320
  plainKeys.push(ts22.factory.createLiteralTypeNode(ts22.factory.createStringLiteral(classPropertyName)));
3272
3321
  } else {
3322
+ const coercionType = transform != null ? transform.type.node : tsCreateTypeQueryForCoercedInput(rawType.typeName, classPropertyName);
3273
3323
  coercedKeys.push(ts22.factory.createPropertySignature(
3274
3324
  void 0,
3275
3325
  classPropertyName,
3276
3326
  void 0,
3277
- transform == null ? tsCreateTypeQueryForCoercedInput(rawType.typeName, classPropertyName) : transform.type.node
3327
+ coercionType
3278
3328
  ));
3279
3329
  }
3280
3330
  }
@@ -3286,6 +3336,14 @@ function constructTypeCtorParameter(node, meta, rawType) {
3286
3336
  const coercedLiteral = ts22.factory.createTypeLiteralNode(coercedKeys);
3287
3337
  initType = initType !== null ? ts22.factory.createIntersectionTypeNode([initType, coercedLiteral]) : coercedLiteral;
3288
3338
  }
3339
+ if (signalInputKeys.length > 0) {
3340
+ const keyTypeUnion = ts22.factory.createUnionTypeNode(signalInputKeys);
3341
+ const unwrapDirectiveSignalInputsExpr = env.referenceExternalType(R3Identifiers2.UnwrapDirectiveSignalInputs.moduleName, R3Identifiers2.UnwrapDirectiveSignalInputs.name, [
3342
+ new ExpressionType2(new WrappedNodeExpr(rawType)),
3343
+ new ExpressionType2(new WrappedNodeExpr(keyTypeUnion))
3344
+ ]);
3345
+ initType = initType !== null ? ts22.factory.createIntersectionTypeNode([initType, unwrapDirectiveSignalInputsExpr]) : unwrapDirectiveSignalInputsExpr;
3346
+ }
3289
3347
  if (initType === null) {
3290
3348
  initType = ts22.factory.createTypeLiteralNode([]);
3291
3349
  }
@@ -3318,13 +3376,10 @@ function typeParametersWithDefaultTypes(params) {
3318
3376
  }
3319
3377
 
3320
3378
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/src/environment.mjs
3321
- var Environment = class {
3379
+ var Environment = class extends ReferenceEmitEnvironment {
3322
3380
  constructor(config, importManager, refEmitter, reflector, contextFile) {
3381
+ super(importManager, refEmitter, reflector, contextFile);
3323
3382
  this.config = config;
3324
- this.importManager = importManager;
3325
- this.refEmitter = refEmitter;
3326
- this.reflector = reflector;
3327
- this.contextFile = contextFile;
3328
3383
  this.nextIds = {
3329
3384
  pipeInst: 1,
3330
3385
  typeCtor: 1
@@ -3361,7 +3416,7 @@ var Environment = class {
3361
3416
  coercedInputFields: dir.coercedInputFields
3362
3417
  };
3363
3418
  const typeParams = this.emitTypeParameters(node);
3364
- const typeCtor = generateTypeCtorDeclarationFn(node, meta, nodeTypeRef.typeName, typeParams);
3419
+ const typeCtor = generateTypeCtorDeclarationFn(this, meta, nodeTypeRef.typeName, typeParams);
3365
3420
  this.typeCtorStatements.push(typeCtor);
3366
3421
  const fnId = ts23.factory.createIdentifier(fnName);
3367
3422
  this.typeCtors.set(node, fnId);
@@ -3383,26 +3438,10 @@ var Environment = class {
3383
3438
  assertSuccessfulReferenceEmit(ngExpr, this.contextFile, "class");
3384
3439
  return translateExpression(ngExpr.expression, this.importManager);
3385
3440
  }
3386
- canReferenceType(ref) {
3387
- const result = this.refEmitter.emit(ref, this.contextFile, ImportFlags.NoAliasing | ImportFlags.AllowTypeImports | ImportFlags.AllowRelativeDtsImports);
3388
- return result.kind === 0;
3389
- }
3390
- referenceType(ref) {
3391
- const ngExpr = this.refEmitter.emit(ref, this.contextFile, ImportFlags.NoAliasing | ImportFlags.AllowTypeImports | ImportFlags.AllowRelativeDtsImports);
3392
- assertSuccessfulReferenceEmit(ngExpr, this.contextFile, "symbol");
3393
- return translateType(new ExpressionType(ngExpr.expression), this.contextFile, this.reflector, this.refEmitter, this.importManager);
3394
- }
3395
3441
  emitTypeParameters(declaration) {
3396
3442
  const emitter = new TypeParameterEmitter(declaration.typeParameters, this.reflector);
3397
3443
  return emitter.emit((ref) => this.referenceType(ref));
3398
3444
  }
3399
- referenceExternalType(moduleName, name, typeParams) {
3400
- const external = new ExternalExpr({ moduleName, name });
3401
- return translateType(new ExpressionType(external, TypeModifier.None, typeParams), this.contextFile, this.reflector, this.refEmitter, this.importManager);
3402
- }
3403
- referenceTransplantedType(type) {
3404
- return translateType(type, this.contextFile, this.reflector, this.refEmitter, this.importManager);
3405
- }
3406
3445
  getPreludeStatements() {
3407
3446
  return [
3408
3447
  ...this.pipeInstStatements,
@@ -3558,7 +3597,7 @@ Deferred blocks can only access triggers in same view, a parent embedded view or
3558
3597
  }
3559
3598
  this._diagnostics.push(makeTemplateDiagnostic(templateId, this.resolver.getSourceMapping(templateId), trigger.sourceSpan, ts24.DiagnosticCategory.Error, ngErrorCode(ErrorCode.INACCESSIBLE_DEFERRED_TRIGGER_ELEMENT), message));
3560
3599
  }
3561
- controlFlowPreventingContentProjection(templateId, projectionNode, componentName, slotSelector, controlFlowNode, preservesWhitespaces) {
3600
+ controlFlowPreventingContentProjection(templateId, category, projectionNode, componentName, slotSelector, controlFlowNode, preservesWhitespaces) {
3562
3601
  const blockName = controlFlowNode instanceof TmplAstIfBlockBranch ? "@if" : "@for";
3563
3602
  const lines = [
3564
3603
  `Node matches the "${slotSelector}" slot of the "${componentName}" component, but will not be projected into the specific slot because the surrounding ${blockName} has more than one node at its root. To project the node in the right slot, you can:
@@ -3568,9 +3607,10 @@ Deferred blocks can only access triggers in same view, a parent embedded view or
3568
3607
  `3. Remove all content from the ${blockName} block, except for the node being projected.`
3569
3608
  ];
3570
3609
  if (preservesWhitespaces) {
3571
- lines.push(`Note: the host component has \`preserveWhitespaces: true\` which may cause whitespace to affect content projection.`);
3610
+ lines.push("Note: the host component has `preserveWhitespaces: true` which may cause whitespace to affect content projection.");
3572
3611
  }
3573
- this._diagnostics.push(makeTemplateDiagnostic(templateId, this.resolver.getSourceMapping(templateId), projectionNode.startSourceSpan, ts24.DiagnosticCategory.Warning, ngErrorCode(ErrorCode.CONTROL_FLOW_PREVENTING_CONTENT_PROJECTION), lines.join("\n")));
3612
+ lines.push("", 'This check can be disabled using the `extendedDiagnostics.checks.controlFlowPreventingContentProjection = "suppress" compiler option.`');
3613
+ this._diagnostics.push(makeTemplateDiagnostic(templateId, this.resolver.getSourceMapping(templateId), projectionNode.startSourceSpan, category, ngErrorCode(ErrorCode.CONTROL_FLOW_PREVENTING_CONTENT_PROJECTION), lines.join("\n")));
3574
3614
  }
3575
3615
  };
3576
3616
  function makeInlineDiagnostic(templateId, code, node, messageText, relatedInformation) {
@@ -3600,7 +3640,7 @@ var TypeCheckShimGenerator = class {
3600
3640
  };
3601
3641
 
3602
3642
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_block.mjs
3603
- import { BindingPipe, Call as Call2, createCssSelectorFromNode, CssSelector, DYNAMIC_TYPE, ImplicitReceiver as ImplicitReceiver4, PropertyRead as PropertyRead4, PropertyWrite as PropertyWrite3, SafeCall, SafePropertyRead as SafePropertyRead3, SelectorMatcher, ThisReceiver, TmplAstBoundAttribute, TmplAstBoundText, TmplAstDeferredBlock, TmplAstElement as TmplAstElement3, TmplAstForLoopBlock, TmplAstIcu, TmplAstIfBlock, TmplAstIfBlockBranch as TmplAstIfBlockBranch2, TmplAstReference as TmplAstReference3, TmplAstSwitchBlock, TmplAstTemplate as TmplAstTemplate2, TmplAstText, TmplAstTextAttribute as TmplAstTextAttribute2, TmplAstVariable as TmplAstVariable2, TransplantedType } from "@angular/compiler";
3643
+ import { BindingPipe, Call as Call2, createCssSelectorFromNode, CssSelector, DYNAMIC_TYPE, ImplicitReceiver as ImplicitReceiver4, PropertyRead as PropertyRead4, PropertyWrite as PropertyWrite3, R3Identifiers as R3Identifiers3, SafeCall, SafePropertyRead as SafePropertyRead3, SelectorMatcher, ThisReceiver, TmplAstBoundAttribute, TmplAstBoundText, TmplAstDeferredBlock, TmplAstElement as TmplAstElement3, TmplAstForLoopBlock, TmplAstIcu, TmplAstIfBlock, TmplAstIfBlockBranch as TmplAstIfBlockBranch2, TmplAstReference as TmplAstReference3, TmplAstSwitchBlock, TmplAstTemplate as TmplAstTemplate2, TmplAstText, TmplAstTextAttribute as TmplAstTextAttribute2, TmplAstVariable as TmplAstVariable2, TransplantedType } from "@angular/compiler";
3604
3644
  import ts28 from "typescript";
3605
3645
 
3606
3646
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/typecheck/src/diagnostics.mjs
@@ -4320,7 +4360,12 @@ var TcbDirectiveCtorOp = class extends TcbOp {
4320
4360
  continue;
4321
4361
  }
4322
4362
  const expression = translateInput(attr.attribute, this.tcb, this.scope);
4323
- genericInputs.set(fieldName, { type: "binding", field: fieldName, expression, sourceSpan: attr.attribute.sourceSpan });
4363
+ genericInputs.set(fieldName, {
4364
+ type: "binding",
4365
+ field: fieldName,
4366
+ expression,
4367
+ sourceSpan: attr.attribute.sourceSpan
4368
+ });
4324
4369
  }
4325
4370
  }
4326
4371
  for (const { classPropertyName } of this.dir.inputs) {
@@ -4355,7 +4400,7 @@ var TcbDirectiveInputsOp = class extends TcbOp {
4355
4400
  for (const attr of boundAttrs) {
4356
4401
  const expr = widenBinding(translateInput(attr.attribute, this.tcb, this.scope), this.tcb);
4357
4402
  let assignment = wrapForDiagnostics(expr);
4358
- for (const { fieldName, required, transformType } of attr.inputs) {
4403
+ for (const { fieldName, required, transformType, isSignal } of attr.inputs) {
4359
4404
  let target;
4360
4405
  if (required) {
4361
4406
  seenRequiredInputs.add(fieldName);
@@ -4395,6 +4440,13 @@ var TcbDirectiveInputsOp = class extends TcbOp {
4395
4440
  }
4396
4441
  target = this.dir.stringLiteralInputFields.has(fieldName) ? ts28.factory.createElementAccessExpression(dirId, ts28.factory.createStringLiteral(fieldName)) : ts28.factory.createPropertyAccessExpression(dirId, ts28.factory.createIdentifier(fieldName));
4397
4442
  }
4443
+ if (isSignal) {
4444
+ const inputSignalBrandWriteSymbol = this.tcb.env.referenceExternalSymbol(R3Identifiers3.InputSignalBrandWriteType.moduleName, R3Identifiers3.InputSignalBrandWriteType.name);
4445
+ if (!ts28.isIdentifier(inputSignalBrandWriteSymbol) && !ts28.isPropertyAccessExpression(inputSignalBrandWriteSymbol)) {
4446
+ throw new Error(`Expected identifier or property access for reference to ${R3Identifiers3.InputSignalBrandWriteType.name}`);
4447
+ }
4448
+ target = ts28.factory.createElementAccessExpression(target, inputSignalBrandWriteSymbol);
4449
+ }
4398
4450
  if (attr.attribute.keySpan !== void 0) {
4399
4451
  addParseSpanInfo(target, attr.attribute.keySpan);
4400
4452
  }
@@ -4478,6 +4530,7 @@ var TcbControlFlowContentProjectionOp = class extends TcbOp {
4478
4530
  this.ngContentSelectors = ngContentSelectors;
4479
4531
  this.componentName = componentName;
4480
4532
  this.optional = false;
4533
+ this.category = tcb.env.config.controlFlowPreventingContentProjection === "error" ? ts28.DiagnosticCategory.Error : ts28.DiagnosticCategory.Warning;
4481
4534
  }
4482
4535
  execute() {
4483
4536
  const controlFlowToCheck = this.findPotentialControlFlowNodes();
@@ -4492,7 +4545,7 @@ var TcbControlFlowContentProjectionOp = class extends TcbOp {
4492
4545
  for (const child of root.children) {
4493
4546
  if (child instanceof TmplAstElement3 || child instanceof TmplAstTemplate2) {
4494
4547
  matcher.match(createCssSelectorFromNode(child), (_, originalSelector) => {
4495
- this.tcb.oobRecorder.controlFlowPreventingContentProjection(this.tcb.id, child, this.componentName, originalSelector, root, this.tcb.hostPreserveWhitespaces);
4548
+ this.tcb.oobRecorder.controlFlowPreventingContentProjection(this.tcb.id, this.category, child, this.componentName, originalSelector, root, this.tcb.hostPreserveWhitespaces);
4496
4549
  });
4497
4550
  }
4498
4551
  }
@@ -4706,9 +4759,7 @@ var TcbBlockImplicitVariableOp = class extends TcbOp {
4706
4759
  this.scope = scope;
4707
4760
  this.type = type;
4708
4761
  this.variable = variable;
4709
- }
4710
- get optional() {
4711
- return false;
4762
+ this.optional = true;
4712
4763
  }
4713
4764
  execute() {
4714
4765
  const id = this.tcb.allocateId();
@@ -4844,7 +4895,11 @@ var TcbForOfOp = class extends TcbOp {
4844
4895
  }
4845
4896
  execute() {
4846
4897
  const loopScope = Scope.forNodes(this.tcb, this.scope, this.block, this.block.children, null);
4847
- const initializer = ts28.factory.createVariableDeclarationList([ts28.factory.createVariableDeclaration(this.block.item.name)], ts28.NodeFlags.Const);
4898
+ const initializerId = loopScope.resolve(this.block.item);
4899
+ if (!ts28.isIdentifier(initializerId)) {
4900
+ throw new Error(`Could not resolve for loop variable ${this.block.item.name} to an identifier`);
4901
+ }
4902
+ const initializer = ts28.factory.createVariableDeclarationList([ts28.factory.createVariableDeclaration(initializerId)], ts28.NodeFlags.Const);
4848
4903
  const expression = ts28.factory.createNonNullExpression(tcbExpression(this.block.expression, this.tcb, loopScope));
4849
4904
  const trackTranslator = new TcbForLoopTrackTranslator(this.tcb, loopScope, this.block);
4850
4905
  const trackExpression = trackTranslator.translate(this.block.trackBy);
@@ -4915,7 +4970,9 @@ var _Scope = class {
4915
4970
  this.registerVariable(scope, expressionAlias, new TcbBlockVariableOp(tcb, scope, tcbExpression(expression, tcb, scope), expressionAlias));
4916
4971
  }
4917
4972
  } else if (scopedNode instanceof TmplAstForLoopBlock) {
4918
- this.registerVariable(scope, scopedNode.item, new TcbBlockVariableOp(tcb, scope, ts28.factory.createIdentifier(scopedNode.item.name), scopedNode.item));
4973
+ const loopInitializer = tcb.allocateId();
4974
+ addParseSpanInfo(loopInitializer, scopedNode.item.sourceSpan);
4975
+ scope.varMap.set(scopedNode.item, loopInitializer);
4919
4976
  for (const [name, variable] of Object.entries(scopedNode.contextVariables)) {
4920
4977
  if (!this.forLoopContextVariableTypes.has(name)) {
4921
4978
  throw new Error(`Unrecognized for loop context variable ${name}`);
@@ -4980,7 +5037,8 @@ var _Scope = class {
4980
5037
  if (ref instanceof TmplAstReference3 && this.referenceOpMap.has(ref)) {
4981
5038
  return this.resolveOp(this.referenceOpMap.get(ref));
4982
5039
  } else if (ref instanceof TmplAstVariable2 && this.varMap.has(ref)) {
4983
- return this.resolveOp(this.varMap.get(ref));
5040
+ const opIndexOrNode = this.varMap.get(ref);
5041
+ return typeof opIndexOrNode === "number" ? this.resolveOp(opIndexOrNode) : opIndexOrNode;
4984
5042
  } else if (ref instanceof TmplAstTemplate2 && directive === void 0 && this.templateCtxOpMap.has(ref)) {
4985
5043
  return this.resolveOp(this.templateCtxOpMap.get(ref));
4986
5044
  } else if ((ref instanceof TmplAstElement3 || ref instanceof TmplAstTemplate2) && directive !== void 0 && this.directiveOpMap.has(ref)) {
@@ -5020,7 +5078,9 @@ var _Scope = class {
5020
5078
  if (node instanceof TmplAstElement3) {
5021
5079
  const opIndex = this.opQueue.push(new TcbElementOp(this.tcb, this, node)) - 1;
5022
5080
  this.elementOpMap.set(node, opIndex);
5023
- this.appendContentProjectionCheckOp(node);
5081
+ if (this.tcb.env.config.controlFlowPreventingContentProjection !== "suppress") {
5082
+ this.appendContentProjectionCheckOp(node);
5083
+ }
5024
5084
  this.appendDirectivesAndInputsOfNode(node);
5025
5085
  this.appendOutputsOfNode(node);
5026
5086
  this.appendChildren(node);
@@ -5344,7 +5404,8 @@ function getBoundAttributes(directive, node) {
5344
5404
  return {
5345
5405
  fieldName: input.classPropertyName,
5346
5406
  required: input.required,
5347
- transformType: ((_a = input.transform) == null ? void 0 : _a.type) || null
5407
+ transformType: ((_a = input.transform) == null ? void 0 : _a.type) || null,
5408
+ isSignal: input.isSignal
5348
5409
  };
5349
5410
  })
5350
5411
  });
@@ -5474,6 +5535,7 @@ var TypeCheckFile = class extends Environment {
5474
5535
  this.tcbStatements.push(fn);
5475
5536
  }
5476
5537
  render(removeComments) {
5538
+ ensureTypeCheckFilePreparationImports(this);
5477
5539
  let source = this.importManager.getAllImports(this.contextFile.fileName).map((i) => `import * as ${i.qualifier.text} from '${i.specifier}';`).join("\n") + "\n\n";
5478
5540
  const printer = ts29.createPrinter({ removeComments });
5479
5541
  source += "\n";
@@ -5591,7 +5653,7 @@ var TypeCheckContextImpl = class {
5591
5653
  this.opMap.set(sf, []);
5592
5654
  }
5593
5655
  const ops = this.opMap.get(sf);
5594
- ops.push(new TypeCtorOp(ref, ctorMeta));
5656
+ ops.push(new TypeCtorOp(ref, this.reflector, ctorMeta));
5595
5657
  fileData.hasInlines = true;
5596
5658
  }
5597
5659
  transform(sf) {
@@ -5706,15 +5768,17 @@ var InlineTcbOp = class {
5706
5768
  }
5707
5769
  };
5708
5770
  var TypeCtorOp = class {
5709
- constructor(ref, meta) {
5771
+ constructor(ref, reflector, meta) {
5710
5772
  this.ref = ref;
5773
+ this.reflector = reflector;
5711
5774
  this.meta = meta;
5712
5775
  }
5713
5776
  get splitPoint() {
5714
5777
  return this.ref.node.end - 1;
5715
5778
  }
5716
5779
  execute(im, sf, refEmitter, printer) {
5717
- const tcb = generateInlineTypeCtor(this.ref.node, this.meta);
5780
+ const emitEnv = new ReferenceEmitEnvironment(im, refEmitter, this.reflector, sf);
5781
+ const tcb = generateInlineTypeCtor(emitEnv, this.ref.node, this.meta);
5718
5782
  return printer.printNode(ts30.EmitHint.Unspecified, tcb, sf);
5719
5783
  }
5720
5784
  };
@@ -6809,7 +6873,7 @@ var TemplateTypeCheckerImpl = class {
6809
6873
  return null;
6810
6874
  }
6811
6875
  const emitted = emittedRef.expression;
6812
- if (emitted instanceof WrappedNodeExpr) {
6876
+ if (emitted instanceof WrappedNodeExpr2) {
6813
6877
  if (refTo.node === inContext) {
6814
6878
  return null;
6815
6879
  }
@@ -7504,6 +7568,10 @@ var ALL_DIAGNOSTIC_FACTORIES = [
7504
7568
  factory7,
7505
7569
  factory
7506
7570
  ];
7571
+ var SUPPORTED_DIAGNOSTIC_NAMES = /* @__PURE__ */ new Set([
7572
+ ExtendedTemplateDiagnosticName.CONTROL_FLOW_PREVENTING_CONTENT_PROJECTION,
7573
+ ...ALL_DIAGNOSTIC_FACTORIES.map((factory9) => factory9.name)
7574
+ ]);
7507
7575
 
7508
7576
  // bazel-out/darwin_arm64-fastbuild/bin/packages/compiler-cli/src/ngtsc/core/src/compiler.mjs
7509
7577
  var CompilationTicketKind;
@@ -7839,6 +7907,7 @@ var NgCompiler = class {
7839
7907
  return strictTemplates || !!this.options.fullTemplateTypeCheck;
7840
7908
  }
7841
7909
  getTypeCheckingConfig() {
7910
+ var _a, _b, _c, _d;
7842
7911
  const strictTemplates = !!this.options.strictTemplates;
7843
7912
  const useInlineTypeConstructors = this.programDriver.supportsInlineOperations;
7844
7913
  let typeCheckingConfig;
@@ -7864,7 +7933,8 @@ var NgCompiler = class {
7864
7933
  strictLiteralTypes: true,
7865
7934
  enableTemplateTypeChecker: this.enableTemplateTypeChecker,
7866
7935
  useInlineTypeConstructors,
7867
- suggestionsForSuboptimalTypeInference: this.enableTemplateTypeChecker && !strictTemplates
7936
+ suggestionsForSuboptimalTypeInference: this.enableTemplateTypeChecker && !strictTemplates,
7937
+ controlFlowPreventingContentProjection: ((_a = this.options.extendedDiagnostics) == null ? void 0 : _a.defaultCategory) || DiagnosticCategoryLabel.Warning
7868
7938
  };
7869
7939
  } else {
7870
7940
  typeCheckingConfig = {
@@ -7888,7 +7958,8 @@ var NgCompiler = class {
7888
7958
  strictLiteralTypes: false,
7889
7959
  enableTemplateTypeChecker: this.enableTemplateTypeChecker,
7890
7960
  useInlineTypeConstructors,
7891
- suggestionsForSuboptimalTypeInference: false
7961
+ suggestionsForSuboptimalTypeInference: false,
7962
+ controlFlowPreventingContentProjection: ((_b = this.options.extendedDiagnostics) == null ? void 0 : _b.defaultCategory) || DiagnosticCategoryLabel.Warning
7892
7963
  };
7893
7964
  }
7894
7965
  if (this.options.strictInputTypes !== void 0) {
@@ -7923,6 +7994,9 @@ var NgCompiler = class {
7923
7994
  if (this.options.strictLiteralTypes !== void 0) {
7924
7995
  typeCheckingConfig.strictLiteralTypes = this.options.strictLiteralTypes;
7925
7996
  }
7997
+ if (((_d = (_c = this.options.extendedDiagnostics) == null ? void 0 : _c.checks) == null ? void 0 : _d.controlFlowPreventingContentProjection) !== void 0) {
7998
+ typeCheckingConfig.controlFlowPreventingContentProjection = this.options.extendedDiagnostics.checks.controlFlowPreventingContentProjection;
7999
+ }
7926
8000
  return typeCheckingConfig;
7927
8001
  }
7928
8002
  getTemplateDiagnostics() {
@@ -8181,9 +8255,8 @@ ${allowedCategoryLabels.join("\n")}
8181
8255
  `.trim()
8182
8256
  });
8183
8257
  }
8184
- const allExtendedDiagnosticNames = ALL_DIAGNOSTIC_FACTORIES.map((factory9) => factory9.name);
8185
8258
  for (const [checkName, category] of Object.entries((_c = (_b = options.extendedDiagnostics) == null ? void 0 : _b.checks) != null ? _c : {})) {
8186
- if (!allExtendedDiagnosticNames.includes(checkName)) {
8259
+ if (!SUPPORTED_DIAGNOSTIC_NAMES.has(checkName)) {
8187
8260
  yield makeConfigDiagnostic({
8188
8261
  category: ts35.DiagnosticCategory.Error,
8189
8262
  code: ErrorCode.CONFIG_EXTENDED_DIAGNOSTICS_UNKNOWN_CHECK,
@@ -8191,7 +8264,7 @@ ${allowedCategoryLabels.join("\n")}
8191
8264
  Angular compiler option "extendedDiagnostics.checks" has an unknown check: "${checkName}".
8192
8265
 
8193
8266
  Allowed check names are:
8194
- ${allExtendedDiagnosticNames.join("\n")}
8267
+ ${Array.from(SUPPORTED_DIAGNOSTIC_NAMES).join("\n")}
8195
8268
  `.trim()
8196
8269
  });
8197
8270
  }
@@ -8866,4 +8939,4 @@ export {
8866
8939
  * Use of this source code is governed by an MIT-style license that can be
8867
8940
  * found in the LICENSE file at https://angular.io/license
8868
8941
  */
8869
- //# sourceMappingURL=chunk-OYL5JDZA.js.map
8942
+ //# sourceMappingURL=chunk-HQUXRCDO.js.map