@go-to-k/cdkd 0.290.30 → 0.290.31

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.
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { n as isVersionOnlyInvocation, t as getCdkdVersion } from "./version-C15BftsD.js";
2
+ import { n as isVersionOnlyInvocation, t as getCdkdVersion } from "./version-IwTfNQ-K.js";
3
3
 
4
4
  //#region src/cli/pipe-close-handler.ts
5
5
  /**
@@ -74,7 +74,7 @@ async function main() {
74
74
  console.log(getCdkdVersion());
75
75
  return;
76
76
  }
77
- const { buildProgram } = await import("./program-qSSjqstP.js");
77
+ const { buildProgram } = await import("./program-CnSaRdY9.js");
78
78
  const program = buildProgram();
79
79
  const args = reorderArgs(process.argv);
80
80
  await program.parseAsync(args);
@@ -1,6 +1,6 @@
1
1
  import { C as displayAwsMessage, E as truncateCodePoints, S as UNRENDERABLE, T as displaySafe, d as applyDefaultNameForFallback, f as explicitNamePropertyFor, g as looksLikeCdkdGeneratedName, h as getCurrentStackName, m as generateResourceNameWithFallback, n as getLogger, p as generateResourceName, r as isStdoutReservedForPayload, s as getLiveRenderer, v as withStackName, w as displayIdent, x as STACK_REF_MAX_CODE_POINTS, y as withoutGeneratedFallbackName } from "./logger-BjWM-UVj.js";
2
2
  import { a as setAssumedRoleCredentials, i as getPreAssumeEnvCredentials, n as awsClientDefaults, o as setPreAssumeEnvCredentials, r as getAssumedRoleCredentials, t as SECOND_ROLE_PUBLISH_REFUSAL } from "./aws-client-defaults-BoIxyCir.js";
3
- import { t as getCdkdVersion } from "./version-C15BftsD.js";
3
+ import { t as getCdkdVersion } from "./version-IwTfNQ-K.js";
4
4
  import { AsyncLocalStorage } from "node:async_hooks";
5
5
  import { createHash, randomUUID } from "node:crypto";
6
6
  import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
@@ -17109,7 +17109,8 @@ var DagBuilder = class {
17109
17109
  resourceIds.forEach((logicalId) => {
17110
17110
  const resource = this.parser.getResource(template, logicalId);
17111
17111
  graph.setNode(logicalId, resource);
17112
- this.logger.debug(`Added node: ${logicalId} (${resource?.Type})`);
17112
+ const typeText = resource?.Type == null ? "<no Type>" : displayIdent(resource.Type);
17113
+ this.logger.debug(`Added node: ${displayIdent(logicalId)} (${typeText})`);
17113
17114
  });
17114
17115
  this.logger.debug(`Total nodes: ${resourceIds.length}`);
17115
17116
  const parameterNames = new Set(Object.keys(template.Parameters ?? {}));
@@ -17123,15 +17124,15 @@ var DagBuilder = class {
17123
17124
  for (const depId of dependencies) {
17124
17125
  if (skip?.has(depId)) {
17125
17126
  relaxedEdgeCount++;
17126
- this.logger.debug(`Skipped CDK-defensive DependsOn edge: ${depId} -> ${logicalId} (default; opt out with --no-aggressive-vpc-parallel)`);
17127
+ this.logger.debug(`Skipped CDK-defensive DependsOn edge: ${displayIdent(depId)} -> ${displayIdent(logicalId)} (default; opt out with --no-aggressive-vpc-parallel)`);
17127
17128
  continue;
17128
17129
  }
17129
17130
  if (graph.hasNode(depId)) {
17130
17131
  graph.setEdge(depId, logicalId);
17131
17132
  edgeCount++;
17132
- this.logger.debug(`Added edge: ${depId} -> ${logicalId}`);
17133
- } else if (parameterNames.has(depId)) this.logger.debug(`Skipped Parameter reference: ${logicalId} -> ${depId}`);
17134
- else this.logger.warn(`Resource ${logicalId} depends on ${depId}, but ${depId} not found in template`);
17133
+ this.logger.debug(`Added edge: ${displayIdent(depId)} -> ${displayIdent(logicalId)}`);
17134
+ } else if (parameterNames.has(depId)) this.logger.debug(`Skipped Parameter reference: ${displayIdent(logicalId)} -> ${displayIdent(depId)}`);
17135
+ else this.logger.warn(`Resource ${displayIdent(logicalId)} depends on ${displayIdent(depId)}, but ${displayIdent(depId)} not found in template`);
17135
17136
  }
17136
17137
  }
17137
17138
  if (relaxedEdgeCount > 0) this.logger.info(`[DagBuilder] Relaxed ${relaxedEdgeCount} CDK-defensive DependsOn edge(s) (default; opt out with --no-aggressive-vpc-parallel)`);
@@ -17140,7 +17141,7 @@ var DagBuilder = class {
17140
17141
  edgeCount += this.addLambdaVpcEdges(graph, template);
17141
17142
  if (!alg.isAcyclic(graph)) {
17142
17143
  const cycles = this.findCycles(graph);
17143
- throw new DependencyError(`Circular dependency detected in template. Cycles: ${cycles.map((c) => c.join(" -> ")).join("; ")}`);
17144
+ throw new DependencyError(`Circular dependency detected in template. Cycles: ${cycles.map((c) => c.map((n) => displayIdent(n)).join(" -> ")).join("; ")}`);
17144
17145
  }
17145
17146
  return graph;
17146
17147
  }
@@ -17172,9 +17173,9 @@ var DagBuilder = class {
17172
17173
  });
17173
17174
  if (readyNodes.length === 0) {
17174
17175
  const remaining = graphCopy.nodes();
17175
- throw new DependencyError(`Circular dependency detected. Remaining nodes: ${remaining.join(", ")}`);
17176
+ throw new DependencyError(`Circular dependency detected. Remaining nodes: ${remaining.map((n) => displayIdent(n)).join(", ")}`);
17176
17177
  }
17177
- this.logger.debug(`Level ${levelNum}: ${readyNodes.length} resources - ${readyNodes.join(", ")}`);
17178
+ this.logger.debug(`Level ${levelNum}: ${readyNodes.length} resources - ${readyNodes.map((n) => displayIdent(n)).join(", ")}`);
17178
17179
  levels.push(readyNodes);
17179
17180
  readyNodes.forEach((node) => {
17180
17181
  graphCopy.removeNode(node);
@@ -17291,7 +17292,7 @@ var DagBuilder = class {
17291
17292
  if (graph.hasEdge(policyId, logicalId)) continue;
17292
17293
  graph.setEdge(policyId, logicalId);
17293
17294
  added++;
17294
- this.logger.debug(`Added implicit edge (custom resource policy): ${policyId} -> ${logicalId}`);
17295
+ this.logger.debug(`Added implicit edge (custom resource policy): ${displayIdent(policyId)} -> ${displayIdent(logicalId)}`);
17295
17296
  }
17296
17297
  }
17297
17298
  if (added > 0) this.logger.debug(`Added ${added} implicit edges for custom resource policies`);
@@ -17322,7 +17323,7 @@ var DagBuilder = class {
17322
17323
  if (graph.hasEdge(depId, dependentId)) continue;
17323
17324
  graph.setEdge(depId, dependentId);
17324
17325
  added++;
17325
- this.logger.debug(`Added implicit edge (lambda vpc): ${depId} -> ${dependentId}`);
17326
+ this.logger.debug(`Added implicit edge (lambda vpc): ${displayIdent(depId)} -> ${displayIdent(dependentId)}`);
17326
17327
  }
17327
17328
  if (added > 0) this.logger.debug(`Added ${added} implicit edges for Lambda VpcConfig`);
17328
17329
  return added;
@@ -27188,14 +27189,14 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
27188
27189
  if (!targetRegion) return ambient;
27189
27190
  const target = canonicalizeRegion(targetRegion);
27190
27191
  const loggedTarget = targetLogText ?? (targetRegion === this.explicitRegion ? this.explicitRegionLogText : void 0) ?? target;
27191
- if (!isClientSafeRegion(target)) throw markNonRetryable(new IntrinsicResolutionRefusalError(`Refusing to build AWS clients for the region '${stripControlChars(loggedTarget).slice(0, 64)}': it is not a valid AWS region name, and a region is substituted into the AWS service hostname.`));
27192
+ if (!isClientSafeRegion(target)) throw markNonRetryable(new IntrinsicResolutionRefusalError(`Refusing to build AWS clients for the region '${displaySafe(stripControlChars(loggedTarget)).slice(0, 64)}': it is not a valid AWS region name, and a region is substituted into the AWS service hostname.`));
27192
27193
  if (typeof ambient.withRegion !== "function") return ambient;
27193
27194
  const cached = this.regionScopedClients.get(target);
27194
27195
  if (cached) return cached;
27195
27196
  if (canonicalizeRegion(ambient.configuredRegion) === target) return ambient;
27196
27197
  const scoped = ambient.withRegion(target);
27197
27198
  this.regionScopedClients.set(target, scoped);
27198
- this.logger.debug(`Using region-scoped AWS clients for ${loggedTarget}`);
27199
+ this.logger.debug(`Using region-scoped AWS clients for ${displaySafe(loggedTarget)}`);
27199
27200
  return scoped;
27200
27201
  }
27201
27202
  /**
@@ -27261,7 +27262,10 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
27261
27262
  */
27262
27263
  async resolveParameters(template, userParameters, options) {
27263
27264
  const inheritedSecrets = options?.inheritedSecrets;
27264
- const maskInherited = (text) => inheritedSecrets && inheritedSecrets.size > 0 ? maskSecretsInText(text, inheritedSecrets) : text;
27265
+ const maskInherited = (text) => {
27266
+ const mask = (value) => inheritedSecrets && inheritedSecrets.size > 0 ? maskSecretsInText(value, inheritedSecrets) : value;
27267
+ return displaySafe(mask(stripControlChars(mask(text))));
27268
+ };
27265
27269
  const inheritedLogContext = {
27266
27270
  template,
27267
27271
  resources: {},
@@ -27366,7 +27370,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
27366
27370
  for (const name of Object.keys(templateConditions)) try {
27367
27371
  await withSharedDrainBudget(() => evaluateByName(name));
27368
27372
  } catch (error) {
27369
- this.logger.warn(this.maskSecretsForLog(`Failed to evaluate condition ${name}: ${error instanceof Error ? error.message : String(error)}, assuming false`, maskingContext));
27373
+ this.logger.warn(this.displayMasked(`Failed to evaluate condition ${name}: ${error instanceof Error ? error.message : String(error)}, assuming false`, maskingContext));
27370
27374
  conditions[name] = false;
27371
27375
  inProgress.delete(name);
27372
27376
  }
@@ -27664,10 +27668,11 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
27664
27668
  this.logger.debug(`Resolved Ref to pseudo parameter: ${logicalId} -> ${valueStr}`);
27665
27669
  return pseudoValue;
27666
27670
  }
27667
- const notFoundMsg = `Ref ${logicalId} not found (not a resource, parameter, or pseudo parameter)`;
27671
+ const loggedLogicalId = this.displayMasked(logicalId, context);
27672
+ const notFoundMsg = `Ref ${loggedLogicalId} not found (not a resource, parameter, or pseudo parameter)`;
27668
27673
  if (context.bestEffort) this.logger.debug(notFoundMsg);
27669
27674
  else this.logger.warn(notFoundMsg);
27670
- throw markNonRetryable(/* @__PURE__ */ new Error(`Ref ${logicalId} not found`));
27675
+ throw markNonRetryable(/* @__PURE__ */ new Error(`Ref ${loggedLogicalId} not found`));
27671
27676
  }
27672
27677
  /**
27673
27678
  * Resolve the value a CloudFormation `Ref` returns for a resource.
@@ -27849,7 +27854,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
27849
27854
  }
27850
27855
  }
27851
27856
  if (resource.resourceType === NESTED_STACK_RESOURCE_TYPE$1 && attributeName.startsWith(NESTED_STACK_OUTPUT_ATTRIBUTE_PREFIX)) {
27852
- const declared = Object.keys(resource.attributes ?? {}).filter((k) => k.startsWith(NESTED_STACK_OUTPUT_ATTRIBUTE_PREFIX)).sort().map((k) => this.maskSecretsForLog(this.outputNameLogText(k, context), context));
27857
+ const declared = Object.keys(resource.attributes ?? {}).filter((k) => k.startsWith(NESTED_STACK_OUTPUT_ATTRIBUTE_PREFIX)).sort().map((k) => this.displayMasked(this.outputNameLogText(k, context), context));
27853
27858
  const declaredText = declared.length > 0 ? declared.join(", ") : "(none)";
27854
27859
  throw markNonRetryable(new IntrinsicResolutionRefusalError(`Cannot resolve Fn::GetAtt [${logicalId}, ${this.displayMasked(attributeName, context)}]: the nested stack '${logicalId}' declares no output named '${this.displayMasked(this.outputNameLogText(attributeName, context), context)}'. Its outputs are ${this.displayMasked(declaredText, context)}. Check the output name in the nested stack's template, and deploy the child stack again if you have just added it.`));
27855
27860
  }
@@ -27905,7 +27910,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
27905
27910
  const declared = context.noEchoAttributeResources?.get(logicalId);
27906
27911
  if ((declared === true || declared !== void 0 && declared.has(attributeName)) && context.recordedSecretValues) recordMaskOnlyValuesIn(value, context.recordedSecretValues);
27907
27912
  if (context.redactedAttributeReads !== void 0 && carriesSecretMask(value)) {
27908
- const maskedAttributeName = this.maskSecretsForLog(attributeName, context);
27913
+ const maskedAttributeName = this.displayMasked(attributeName, context);
27909
27914
  this.pushRedactedAttributeRead(context, {
27910
27915
  kind: "attribute",
27911
27916
  logicalId,
@@ -28806,13 +28811,13 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
28806
28811
  } catch (getAttError) {
28807
28812
  if (getAttError instanceof IntrinsicResolutionRefusalError) throw getAttError;
28808
28813
  this.rethrowStructuralSubFailure(varNameStr, getAttError, context);
28809
- this.logger.warn(this.maskSecretsForLog(this.subPlaceholderWarning(varNameStr, getAttError), context));
28814
+ this.logger.warn(this.displayMasked(this.subPlaceholderWarning(varNameStr, getAttError), context));
28810
28815
  replacement = match[0];
28811
28816
  }
28812
28817
  else {
28813
28818
  if (refError instanceof IntrinsicResolutionRefusalError) throw refError;
28814
28819
  this.rethrowStructuralSubFailure(varNameStr, refError, context);
28815
- this.logger.warn(this.maskSecretsForLog(this.subPlaceholderWarning(varNameStr, refError), context));
28820
+ this.logger.warn(this.displayMasked(this.subPlaceholderWarning(varNameStr, refError), context));
28816
28821
  replacement = match[0];
28817
28822
  }
28818
28823
  }
@@ -29193,7 +29198,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
29193
29198
  return recovered;
29194
29199
  }
29195
29200
  if (context.redactedAttributeReads !== void 0) {
29196
- const loggedOrigin = this.maskSecretsForLog(origin, context);
29201
+ const loggedOrigin = this.displayMasked(origin, context);
29197
29202
  this.pushRedactedAttributeRead(context, {
29198
29203
  kind: "cross-stack",
29199
29204
  display: loggedOrigin
@@ -29287,7 +29292,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
29287
29292
  const target = canonicalizeRegion(producerRegion);
29288
29293
  if (target === canonicalizeRegion(this.explicitRegion)) return this;
29289
29294
  const regionText = producerRegionLogText !== void 0 ? canonicalizeRegion(producerRegionLogText) : this.regionLogText(producerRegion, context);
29290
- const guestRegionText = this.maskThenStripThenMask(regionText, context);
29295
+ const guestRegionText = this.displayMasked(regionText, context);
29291
29296
  const cached = this.producerRegionResolvers.get(target);
29292
29297
  if (cached) {
29293
29298
  if (cached.explicitRegionLogText !== guestRegionText) cached.explicitRegionLogText = "***";
@@ -29313,7 +29318,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
29313
29318
  const exportName = await this.resolveValue(importValueArg, context);
29314
29319
  if (typeof exportName !== "string") throw new Error(`Fn::ImportValue: export name must resolve to a string, got ${typeof exportName}`);
29315
29320
  if (!context.stateBackend) throw new Error("Fn::ImportValue: state backend is required for cross-stack references");
29316
- const loggedExportName = this.maskSecretsForLog(exportName, context);
29321
+ const loggedExportName = this.displayMasked(exportName, context);
29317
29322
  this.logger.debug(`Resolving Fn::ImportValue: ${loggedExportName}`);
29318
29323
  if (context.exportIndex) {
29319
29324
  let entry;
@@ -29442,7 +29447,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
29442
29447
  * `OutputName` is the overwhelmingly common cause, and the list is what makes
29443
29448
  * the error actionable.
29444
29449
  *
29445
- * `maskSecretsForLog` reads the consumer pass's log twin first (issue #3150),
29450
+ * `maskSecretsRaw` reads the consumer pass's log twin first (issue #3150),
29446
29451
  * so a key equal to a name this pass assembled around a short secret is
29447
29452
  * masked. Residual, stated rather than hidden: the needles and twins belong to the
29448
29453
  * CONSUMER's resolution, so a plaintext sitting in a PRODUCER key that this
@@ -29493,7 +29498,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
29493
29498
  } catch (error) {
29494
29499
  const message = error instanceof Error ? error.message : String(error);
29495
29500
  const cfnNameMask = this.positionalNameMask([[stackName, this.displayMasked(stackName, context)], [region, this.displayMasked(loggedRegionText, context)]]);
29496
- this.logger.warn(`Fn::GetStackOutput: CloudFormation DescribeStacks fallback failed for stack '${this.displayMasked(stackName, context)}' (${this.displayMasked(loggedRegionText, context)}): ${displayAwsMessage(this.maskSecretsForLog(cfnNameMask ? cfnNameMask(message) : message, context))}. Grant cloudformation:DescribeStacks to resolve outputs from CloudFormation-managed stacks, or pass --no-cfn-fallback to disable the fallback.`);
29501
+ this.logger.warn(`Fn::GetStackOutput: CloudFormation DescribeStacks fallback failed for stack '${this.displayMasked(stackName, context)}' (${this.displayMasked(loggedRegionText, context)}): ${displayAwsMessage(this.displayMasked(cfnNameMask ? cfnNameMask(message) : message, context))}. Grant cloudformation:DescribeStacks to resolve outputs from CloudFormation-managed stacks, or pass --no-cfn-fallback to disable the fallback.`);
29497
29502
  return;
29498
29503
  }
29499
29504
  }
@@ -29616,7 +29621,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
29616
29621
  if (!roleArn && context.stackName && context.stackName === stackName && canonicalizeRegion(region) === canonicalizeRegion(this.resolverRegion)) throw new Error(`Fn::GetStackOutput: cannot reference own stack '${this.displayMasked(stackName, context)}' in the same region '${this.displayMasked(loggedRegionText, context)}'`);
29617
29622
  const loggedStackName = this.displayMasked(stackName, context);
29618
29623
  const loggedOutputName = this.displayMasked(outputName, context);
29619
- const loggedRegion = this.maskSecretsForLog(loggedRegionText, context);
29624
+ const loggedRegion = this.displayMasked(loggedRegionText, context);
29620
29625
  const shownRoleArn = roleArn ? displayIdent(roleArn, { maxCodePoints: 613 }) : "";
29621
29626
  this.logger.debug(`Resolving Fn::GetStackOutput: StackName=${loggedStackName}, Region=${loggedRegion}, OutputName=${loggedOutputName}${roleArn ? `, RoleArn=${shownRoleArn}` : ""}`);
29622
29627
  let stateData;
@@ -29706,7 +29711,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
29706
29711
  * own comment says why. What this clause is not is redundant against
29707
29712
  * `raw !== masked`: `rememberLogTwin` has no empty-key guard and
29708
29713
  * `splitLogTwins` registers every piece it produces, so `registeredLogTwin`
29709
- * can answer `***` for the empty string and make `maskSecretsForLog('')`
29714
+ * can answer `***` for the empty string and make `maskSecretsRaw('')`
29710
29715
  * differ from `''`. Neither call site can reach it — both refuse an empty
29711
29716
  * name upstream — so it fences nothing measured today.
29712
29717
  *
@@ -29931,7 +29936,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
29931
29936
  this.logger.debug(`Resolved Fn::GetAZs from cache: ${this.displayMasked(loggedRegionText ?? region, context)} -> ${JSON.stringify(this.maskValueLeaves(cached, context))}`);
29932
29937
  return cached;
29933
29938
  }
29934
- const ec2Client = this.clientsForRegion(clientRegion, loggedRegionText === void 0 ? void 0 : this.maskSecretsForLog(loggedRegionText, context)).ec2;
29939
+ const ec2Client = this.clientsForRegion(clientRegion, loggedRegionText === void 0 ? void 0 : this.displayMasked(loggedRegionText, context)).ec2;
29935
29940
  let azNames;
29936
29941
  try {
29937
29942
  azNames = ((await ec2Client.send(new DescribeAvailabilityZonesCommand({ Filters: [{
@@ -29980,9 +29985,31 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
29980
29985
  * Results are cached to avoid repeated API calls.
29981
29986
  */
29982
29987
  /**
29983
- * Mask any resolved secret value out of a string bound for a log line, using
29984
- * the secrets recorded on the resolution pass (GHSA fix). No-op when the pass
29985
- * recorded no secrets.
29988
+ * The SECRET answer alone: mask any resolved secret value out of `text`,
29989
+ * using the secrets recorded on the resolution pass (GHSA fix). No-op when
29990
+ * the pass recorded no secrets.
29991
+ *
29992
+ * ## NOT a display form, and the name says so
29993
+ *
29994
+ * This was `maskSecretsForLog` until go-to-k/cdkd#3426, and the name was the
29995
+ * defect. It answers "does this text contain a recorded secret" and makes no
29996
+ * claim about CONTROL CHARACTERS — but it read as "the spelling a log line
29997
+ * takes", so TEN local bindings took its result and interpolated it later,
29998
+ * one of them reaching an `Fn::ImportValue` warn and throw with a live
29999
+ * `ESC[2K` + CR from a template-supplied export name (measured on this tree,
30000
+ * at DEFAULT verbosity, on the DEFAULT path). Renaming it is what makes the
30001
+ * hazard visible at the BINDING rather than at the render: `const x =
30002
+ * this.maskSecretsRaw(...)` states that more work is owed.
30003
+ *
30004
+ * Reachable from ONE place, {@link maskThenStripThenMask}, which is itself
30005
+ * reachable only from {@link displayMasked}. That containment is the whole
30006
+ * mechanism and it is enforced, not conventional:
30007
+ * `scripts/check-resolver-mask-coverage.ts` does not list this method in
30008
+ * `MASKERS`, so its AST walk — which RESOLVES an interpolated identifier to
30009
+ * its declaration — reports any render that reaches it, through a binding or
30010
+ * directly. Do not add it to that list, and do not call it from a new site.
30011
+ *
30012
+ * ## What the masking itself does
29986
30013
  *
29987
30014
  * A value with a registered LOG TWIN prints as its twin first (issue
29988
30015
  * [#3150](https://github.com/go-to-k/cdkd/issues/3150)). The needle mask
@@ -29992,7 +30019,8 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
29992
30019
  * reference) printed in the clear at every site that handed its RAW value
29993
30020
  * here, although the pass had registered where the secret sits. Looking the
29994
30021
  * twin up HERE, rather than at each such site, is what makes the class
29995
- * closed for raw values: every one of those sites already calls this method.
30022
+ * closed for raw values: every one of those sites already reaches this
30023
+ * method through the builder.
29996
30024
  * The twin prints as it is: it is the raw text with masked spans, so it
29997
30025
  * holds no recorded needle the raw text lacks. When the needle mask ALSO
29998
30026
  * changes the raw text the whole text is masked instead, the rule
@@ -30000,8 +30028,21 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30000
30028
  * cannot be merged. What this cannot see is a value TRANSFORMED before it
30001
30029
  * arrives (a lowercased region, a sliced output name, an assembled
30002
30030
  * sentence); those sites derive their text from the twin themselves.
30031
+ *
30032
+ * ## The SELF-COMPARISON, and why it did not block the strip
30033
+ *
30034
+ * The line below compares `maskNeedlesForLog(text) !== text` — the NEEDLE
30035
+ * mask, not this method's own result — so making the RENDER path strip
30036
+ * changes no comparison anywhere. An earlier revision of `displayMasked`'s
30037
+ * comment said stripping could not move inside "the masker" because its
30038
+ * result is also a comparison; that was a claim about this expression, and
30039
+ * the expression's operand is a different function. The measurement that
30040
+ * settled it: every one of this method's 20 escaping call sites rendered
30041
+ * into a log line, a throw, or a `display:` field that becomes one — none
30042
+ * compared, persisted or re-parsed the result — so the render path could
30043
+ * take the strip whole.
30003
30044
  */
30004
- maskSecretsForLog(text, context) {
30045
+ maskSecretsRaw(text, context) {
30005
30046
  const registered = this.registeredLogTwin(text, context);
30006
30047
  if (registered === void 0) return this.maskNeedlesForLog(text, context);
30007
30048
  return this.maskNeedlesForLog(text, context) !== text ? "***" : registered;
@@ -30020,19 +30061,19 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30020
30061
  const raw = error instanceof Error ? error.message : String(error);
30021
30062
  return {
30022
30063
  unit,
30023
- subject: this.maskSecretsForLog(subject, context),
30024
- message: this.maskSecretsForLog(preRedact === void 0 ? raw : preRedact(raw), context),
30064
+ subject: this.displayMasked(subject, context),
30065
+ message: this.displayMasked(preRedact === void 0 ? raw : preRedact(raw), context),
30025
30066
  error,
30026
30067
  carriedDynamicReference: carriesDynamicReference(rawInput),
30027
30068
  carriedFetchableReference: carriesFetchableDynamicReference(rawInput)
30028
30069
  };
30029
30070
  }
30030
30071
  /**
30031
- * The needle mask alone: {@link maskSecretsForLog} without the log-twin
30072
+ * The needle mask alone: {@link maskSecretsRaw} without the log-twin
30032
30073
  * lookup. For the two DETECTORS that must ask the needle mask apart from the
30033
30074
  * position mask: `logTwinText`, which asks it of a value that already has a
30034
30075
  * twin, and `resolveBase64`, whose other operand is the position mask. A
30035
- * message masks through `maskSecretsForLog`.
30076
+ * message masks through `displayMasked`.
30036
30077
  */
30037
30078
  maskNeedlesForLog(text, context) {
30038
30079
  let masked = text;
@@ -30060,7 +30101,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30060
30101
  * part of it outside the span. The value's own needle mask cannot be merged
30061
30102
  * with the twin's positions, so the line gives both up for `***`: never
30062
30103
  * more text than either mask alone would print. Returns the text BEFORE the
30063
- * needle mask; each log line wraps it in `maskSecretsForLog` itself, so the
30104
+ * needle mask; each log line wraps it in `displayMasked` itself, so the
30064
30105
  * resolver's mask-coverage checker sees a masker at the site.
30065
30106
  */
30066
30107
  logTwinText(result, twin, context) {
@@ -30112,12 +30153,12 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30112
30153
  * the leaf treated as a resolution product — masked whole when it is a
30113
30154
  * recorded secret, otherwise the masked twin this pass registered for it —
30114
30155
  * and then `logTwinText`'s whole-line guard. The caller still wraps the
30115
- * result in `maskSecretsForLog`. Used where the text is needed BEFORE that
30156
+ * result in `displayMasked`. Used where the text is needed BEFORE that
30116
30157
  * masker, or apart from it: the `Fn::Base64` line and its detector, and the
30117
30158
  * names issue [#3150](https://github.com/go-to-k/cdkd/issues/3150)
30118
30159
  * transforms or composes before printing (`regionLogText`,
30119
30160
  * `outputNameLogText`, the invalid-region refusals, the cross-stack `origin`
30120
- * strings). A leaf printed as it is needs none of it: `maskSecretsForLog`
30161
+ * strings). A leaf printed as it is needs none of it: `displayMasked`
30121
30162
  * looks the twin up itself, which is how `maskValueLeaves` gives its lines
30122
30163
  * and the THROWN messages it masks (the `Fn::Cidr` argument refusals, for
30123
30164
  * one) the same position mask.
@@ -30357,7 +30398,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30357
30398
  maskValueLeaves(value, context) {
30358
30399
  const done = /* @__PURE__ */ new Map();
30359
30400
  const walk = (node) => {
30360
- if (typeof node === "string") return this.maskSecretsForLog(node, context);
30401
+ if (typeof node === "string") return this.displayMasked(node, context);
30361
30402
  if (node === null || typeof node !== "object") return node;
30362
30403
  const memo = done.get(node);
30363
30404
  if (memo !== void 0) return memo;
@@ -30369,7 +30410,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30369
30410
  }
30370
30411
  const out = Object.create(null);
30371
30412
  done.set(node, out);
30372
- for (const [key, child] of Object.entries(node)) out[this.maskSecretsForLog(key, context)] = walk(child);
30413
+ for (const [key, child] of Object.entries(node)) out[this.displayMasked(key, context)] = walk(child);
30373
30414
  return out;
30374
30415
  };
30375
30416
  return walk(value);
@@ -30400,10 +30441,18 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30400
30441
  * of the text in hand. A value this resolver resolved cannot be that text
30401
30442
  * (the split copy is itself recorded, so the first mask catches it), but a
30402
30443
  * template LITERAL can: issue #3150's region-scoped clients refusal prints
30403
- * a producer-region guest's region through this helper, and a literal ARN
30404
- * region spelling a recorded `st-1` as `s` + U+0001 + `t-1` is masked only
30405
- * by the second pass (`intrinsic-resolver-name-argument-log-twin.test.ts`
30406
- * pins both halves on that route).
30444
+ * a producer-region guest's region through {@link displayMasked}, and a
30445
+ * literal ARN region spelling a recorded `st-1` as `s` + U+0001 + `t-1` is
30446
+ * masked only by the second pass
30447
+ * (`intrinsic-resolver-name-argument-log-twin.test.ts` pins both halves on
30448
+ * that route).
30449
+ *
30450
+ * ONE CALLER, {@link displayMasked}, since go-to-k/cdkd#3426. It is most of
30451
+ * the answer and reads like all of it — it omits `displaySafe`, and
30452
+ * therefore `U+2028` / `U+2029` and the bidi overrides — so a site reaching
30453
+ * for it directly is the near-miss back onto the treadmill. It is not in
30454
+ * `MASKERS` in `scripts/check-resolver-mask-coverage.ts`, so a render that
30455
+ * reaches it (through a binding or directly) is reported there.
30407
30456
  *
30408
30457
  * THE BOUND, since this file's job is to state them: this covers a needle
30409
30458
  * split by a character `stripControlChars` removes. A needle split by
@@ -30412,59 +30461,67 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30412
30461
  * solved here.
30413
30462
  */
30414
30463
  maskThenStripThenMask(value, context) {
30415
- return this.maskSecretsForLog(stripControlChars(this.maskSecretsForLog(value, context)), context);
30464
+ return this.maskSecretsRaw(stripControlChars(this.maskSecretsRaw(value, context)), context);
30416
30465
  }
30417
30466
  /**
30418
- * The ONE way a masked value reaches a message in this file.
30467
+ * The ONE way a masked value reaches a message in this file — and, since
30468
+ * go-to-k/cdkd#3426, the ONLY exit from the masking machinery at all.
30419
30469
  *
30420
30470
  * ## Why this exists rather than a rule about call sites
30421
30471
  *
30422
- * `maskSecretsForLog` answers "does this text contain a recorded secret". It
30423
- * makes NO claim about control characters, and it cannot be taught to: its
30424
- * result is also used as a COMPARISON (`maskNeedlesForLog(text) !== text`
30425
- * decides whether a twin was registered), so stripping inside it would change
30426
- * what that comparison means at every call site.
30427
- *
30428
- * That split produced a four-round treadmill on go-to-k/cdkd#3408. Round 1
30429
- * found the four `Fn::GetStackOutput` throws rendering a masked name raw and
30430
- * fixed them. Round 2 found the CloudFormation-fallback warn — the DEFAULT
30431
- * path, at DEFAULT verbosity — and the self-reference throw. Round 3 found
30432
- * the `reresolveCrossStackValue` origin builder and
30433
- * `describeAvailableOutputs`. Each round fixed what it found and the next
30434
- * round found more, because the population was never enumerated. Measured
30435
- * 2026-09-19 with a comment-stripped scan: SEVENTY-ONE interpolations
30436
- * rendered a `maskSecretsForLog` result directly, plus thirteen hand-spelled
30472
+ * {@link maskSecretsRaw} answers "does this text contain a recorded secret"
30473
+ * and makes NO claim about control characters. That split produced a
30474
+ * four-round treadmill on go-to-k/cdkd#3408. Round 1 found the four
30475
+ * `Fn::GetStackOutput` throws rendering a masked name raw and fixed them.
30476
+ * Round 2 found the CloudFormation-fallback warn — the DEFAULT path, at
30477
+ * DEFAULT verbosity — and the self-reference throw. Round 3 found the
30478
+ * `reresolveCrossStackValue` origin builder and `describeAvailableOutputs`.
30479
+ * Each round fixed what it found and the next round found more, because the
30480
+ * population was never enumerated. Measured 2026-09-19 with a
30481
+ * comment-stripped scan: SEVENTY-ONE interpolations rendered a bare masker
30482
+ * result directly, plus thirteen hand-spelled
30437
30483
  * `displaySafe(maskThenStripThenMask(...))` compositions and two bare
30438
30484
  * `maskThenStripThenMask` interpolations — and three reviewers between them
30439
30485
  * reached eight of the eighty-six.
30440
30486
  *
30441
- * So the repair is not another site. Interpolating the MASKER is now itself
30442
- * the defect, and this is the only sanctioned way to render one — which turns
30443
- * "did someone remember to strip here" into a property one scanner checks
30444
- * over the whole file at once.
30445
- * `tests/unit/deployment/resolver-display-masked-population.test.ts` is that
30446
- * scanner: it fails on any `${this.maskSecretsForLog(...)}`, so a new raw
30447
- * render in THAT SHAPE cannot be added silently.
30448
- *
30449
- * ## KNOWN RESIDUAL — the class is NARROWED, not closed
30450
- *
30451
- * Stated here rather than implied away, because an earlier revision of this
30452
- * comment claimed the class was "closed by CONSTRUCTION" and that is FALSE.
30453
- * The scanner is line-shaped and forbids only the `${this.<masker>(` spelling.
30454
- * TEN local bindings take a raw masker result and interpolate it later, which
30455
- * it cannot see — and at least one is a live exposure:
30456
- * `loggedExportName` (bound from `maskSecretsForLog`) reaches an
30457
- * `Fn::ImportValue` throw carrying an unstripped ESC and CR, measured on this
30458
- * tree. `loggedSecretId`, `loggedJsonKey`, `loggedParameterName`,
30459
- * `maskedAttributeName` and `loggedOrigin` are the same shape.
30460
- *
30461
- * Do NOT close those by hand at the ten sites: that is the fifth round of the
30462
- * enumeration this builder exists to end, and the mechanism that resolves an
30463
- * identifier to its initializer ALREADY EXISTS in this repo —
30464
- * `sanitizedLocals` in
30465
- * `tests/unit/cli/local-profile-display-population.test.ts`.
30466
- * go-to-k/cdkd#3426 owns binding the scanner to it; go-to-k/cdkd#3405 and
30467
- * go-to-k/cdkd#3411 own the surrounding scope and parser work.
30487
+ * ROUND FIVE was the BINDING shape: `const loggedExportName =
30488
+ * this.<masker>(...)` interpolated later, which a line-shaped scanner
30489
+ * forbidding `${this.<masker>(` structurally cannot see. Ten of them existed,
30490
+ * and `loggedExportName` was a LIVE exposure — an `Fn::ImportValue` export
30491
+ * name carrying `ESC[2K` + CR reached a warn AND a throw unstripped, at
30492
+ * default verbosity on the default path.
30493
+ *
30494
+ * Patching those ten sites would have been the fifth round of one
30495
+ * enumeration. What closes the class instead is that there is no longer a
30496
+ * masking answer a site can reach WITHOUT the strip: every escaping call of
30497
+ * the old `maskSecretsForLog` now calls this builder, the raw masker is
30498
+ * reachable only through {@link maskThenStripThenMask}, and that helper is
30499
+ * reachable only from here.
30500
+ *
30501
+ * ## What keeps it closed
30502
+ *
30503
+ * `scripts/check-resolver-mask-coverage.ts` — an AST walk that already
30504
+ * RESOLVES an interpolated identifier to its declaration and judges the
30505
+ * initializer. Its `MASKERS` list names the functions a render may reach,
30506
+ * and since go-to-k/cdkd#3426 every entry on it SANITIZES as well as masks.
30507
+ * So a binding of a raw masker is a finding wherever it is later
30508
+ * interpolated, by the same mechanism that already answered the secret
30509
+ * question — no second scanner, and nothing line-shaped.
30510
+ * `tests/unit/deployment/resolver-display-masked-population.test.ts` pins the
30511
+ * population and the builder bodies beside it.
30512
+ *
30513
+ * KNOWN BOUND, stated rather than implied away: a site carrying an
30514
+ * exclusion marker is exempt from that walk, because the marker answers the
30515
+ * SECRET question ("this value cannot carry a plaintext"), which is not the
30516
+ * control-character question. Such a site sanitizes by hand or not at all —
30517
+ * `clientsForRegion`'s two region renders are both markered, and both
30518
+ * sanitize. Widening the walk to judge every interpolated value is
30519
+ * go-to-k/cdkd#3405's mixed-render scope, not this builder's.
30520
+ *
30521
+ * (The marker's literal spelling is deliberately not written in this comment:
30522
+ * the checker scans the raw text for it, and a prose mention parses as a
30523
+ * marker no site consumes — which it then reports STALE. Measured while
30524
+ * writing this paragraph.)
30468
30525
  *
30469
30526
  * ## What it does, in order
30470
30527
  *
@@ -30478,8 +30535,8 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30478
30535
  *
30479
30536
  * It is listed in `MASKERS` in `scripts/check-resolver-mask-coverage.ts`,
30480
30537
  * which is a SECURITY decision and a sound one: every path through it passes
30481
- * `maskSecretsForLog`, so it is strictly stronger than the entry it replaces
30482
- * and cannot be weaker at any input.
30538
+ * the needle-and-twin mask, twice, so it is strictly stronger than the bare
30539
+ * masker it replaced and cannot be weaker at any input.
30483
30540
  */
30484
30541
  displayMasked(value, context) {
30485
30542
  return displaySafe(this.maskThenStripThenMask(value, context));
@@ -30489,16 +30546,16 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30489
30546
  * the same reason as {@link displayMasked} and closed by the same scanner.
30490
30547
  *
30491
30548
  * `logTextOfLeaf` resolves a value to its registered twin (or `SECRET_MASK`),
30492
- * which is a MASKING answer and, like `maskSecretsForLog`'s, says nothing
30549
+ * which is a MASKING answer and, like `maskSecretsRaw`'s, says nothing
30493
30550
  * about control characters. Four `origin` builders interpolated it raw — the
30494
30551
  * `Fn::ImportValue` pair, the `Fn::GetStackOutput` one and the nested-stack
30495
30552
  * attribute one — and those strings flow into `redactedAttributeReads[].display`
30496
30553
  * and out through a `ProvisioningError` message.
30497
30554
  *
30498
- * This route is why fixing the masker alone did not close the class:
30499
- * `displayMasked` covers every site that interpolates `maskSecretsForLog`,
30500
- * and these interpolate something else. Two routes, two names, one scanner
30501
- * forbidding the raw form of both.
30555
+ * This route is why fixing the secret masker alone did not close the class:
30556
+ * `displayMasked` covers every site that renders a needle-masked value, and
30557
+ * these render something else. Two routes, two names, one checker refusing
30558
+ * the raw form of both.
30502
30559
  *
30503
30560
  * Composed rather than re-derived. `maskSecretsInText` is idempotent (see
30504
30561
  * {@link maskThenStripThenMask}), so masking twin text again costs nothing
@@ -30557,7 +30614,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30557
30614
  continue;
30558
30615
  }
30559
30616
  const regionVerdict = classifyReplaySecretRegion(fullMatch, this.explicitRegion ?? this.resolverRegion, context?.producerRegions);
30560
- if (regionVerdict.kind === "ambiguous") throw markNonRetryable(new DynamicReferenceRegionAmbiguousError(`Refusing to resolve the secret reference ${this.displayMasked(tokenLogText, context)}: it names '${this.displayMasked(nameLogText(regionVerdict.secretName), context)}' without a region, and this stack reads from ${this.displayMasked(regionVerdict.foreignProducerRegions.map((r) => this.maskSecretsForLog(r, context)).join(", "), context)} as well as its own region. cdkd cannot tell which one must answer, and resolving against the wrong one yields a different secret. Spell the reference as a full ARN to say which region owns it.`));
30617
+ if (regionVerdict.kind === "ambiguous") throw markNonRetryable(new DynamicReferenceRegionAmbiguousError(`Refusing to resolve the secret reference ${this.displayMasked(tokenLogText, context)}: it names '${this.displayMasked(nameLogText(regionVerdict.secretName), context)}' without a region, and this stack reads from ${this.displayMasked(regionVerdict.foreignProducerRegions.map((r) => this.displayMasked(r, context)).join(", "), context)} as well as its own region. cdkd cannot tell which one must answer, and resolving against the wrong one yields a different secret. Spell the reference as a full ARN to say which region owns it.`));
30561
30618
  if (regionVerdict.kind === "named-region") {
30562
30619
  const foreign = await this.resolverForProducerRegion(regionVerdict.region, context, nameLogText(regionVerdict.region)).resolveDynamicReferencesWithLogTwin(fullMatch, fullMatch, withoutProducerRegions(context), {
30563
30620
  tokenLogText,
@@ -30626,7 +30683,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30626
30683
  isSecret = true;
30627
30684
  resolved = param.value;
30628
30685
  } else {
30629
- this.logger.warn(this.maskSecretsForLog(`Unsupported dynamic reference service: ${this.displayMasked(nameLogText(String(service)), context)}`, context));
30686
+ this.logger.warn(this.displayMasked(`Unsupported dynamic reference service: ${this.displayMasked(nameLogText(String(service)), context)}`, context));
30630
30687
  complete = false;
30631
30688
  continue;
30632
30689
  }
@@ -30714,8 +30771,8 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30714
30771
  } else secretId = afterService;
30715
30772
  if (!versionStage) versionStage = "AWSCURRENT";
30716
30773
  if (!secretId) throw new Error("Dynamic reference: secretsmanager SECRET_ID is required");
30717
- const loggedSecretId = this.maskSecretsForLog(nameLogText(secretId), context);
30718
- const loggedJsonKey = this.maskSecretsForLog(nameLogText(jsonKey), context);
30774
+ const loggedSecretId = this.displayMasked(nameLogText(secretId), context);
30775
+ const loggedJsonKey = this.displayMasked(nameLogText(jsonKey), context);
30719
30776
  this.logger.debug(`Resolving dynamic reference: secretsmanager:${loggedSecretId}:SecretString:${loggedJsonKey}:${this.displayMasked(nameLogText(versionStage), context)}:${this.displayMasked(nameLogText(versionId), context)}`);
30720
30777
  const client = this.clientsForRegion(this.explicitRegion).secretsManager;
30721
30778
  const command = new GetSecretValueCommand({
@@ -30880,7 +30937,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
30880
30937
  async resolveSSMReference(parts, decrypt, service, context, nameLogText) {
30881
30938
  const parameterName = parts.slice(1).join(":");
30882
30939
  if (!parameterName) throw new Error(`Dynamic reference: ${service} PARAMETER_NAME is required`);
30883
- const loggedParameterName = this.maskSecretsForLog(nameLogText(parameterName), context);
30940
+ const loggedParameterName = this.displayMasked(nameLogText(parameterName), context);
30884
30941
  this.logger.debug(`Resolving dynamic reference: ${service}:${loggedParameterName}`);
30885
30942
  const client = this.clientsForRegion(this.explicitRegion).ssm;
30886
30943
  const command = new GetParameterCommand({
@@ -32578,7 +32635,7 @@ var CloudControlProvider = class {
32578
32635
  const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
32579
32636
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
32580
32637
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
32581
- const { ASGProvider } = await import("./asg-provider-De5KONKr.js").then((n) => n.n);
32638
+ const { ASGProvider } = await import("./asg-provider-DNzgk-BS.js").then((n) => n.n);
32582
32639
  const asgProvider = new ASGProvider();
32583
32640
  return withIndeterminateGuard(await asgProvider.delete(logicalId, physicalId, resourceType, _properties, context), indeterminateGuard);
32584
32641
  }
@@ -45645,4 +45702,4 @@ var DeployEngine = class DeployEngine {
45645
45702
 
45646
45703
  //#endregion
45647
45704
  export { secretBearing as $, SynthesisError as $i, recordMaskOnlyValue as $n, AssetManifestLoader as $r, s3BucketArn as $t, extractDeploymentEventError as A, getAwsClients as Ai, refuseMalformedState as An, BOOTSTRAP_MARKER_PREFIX as Ar, isImpossibleEmptyStoredAttribute as At, toCfnInteger as B, IntrinsicResolutionRefusalError as Bi, STATE_SOURCED_BASELINE_RULES as Bn, buildDockerImage as Br, coerceCfnBoolean as Bt, buildFinalSnapshotIdentifier as C, canonicalizeRegion as Ci, producerRecordKey as Cn, stringifyValue as Cr, isTerminationProtectionPropagationError as Ct, refusesFinalSnapshot as D, clearBucketRegionCache as Di, refuseMalformedOutputsForDestroy as Dn, loadPublishableAssetManifest as Dr, cfnRefValueFromPhysicalId as Dt, isFinalSnapshotError as E, processStackMessages as Ei, refuseMalformedOutputs as En, createAssetRedirectResolver as Er, carriesFetchableDynamicReference as Et, isStatefulRecreateTargetSync as F, ConfigError as Fi, findSilentDropProperties as Fn, parseBootstrapMarker as Fr, isSettledInstanceState as Ft, gray as G, NestedStackChildDirectDestroyError as Gi, createSecretMasker as Gn, formatDockerLoginError as Gr, readConfigString as Gt, formatResourceLine as H, LocalStartServiceError as Hi, STATE_SOURCED_READBACK_RULES as Hn, describeDockerExecFailure as Hr, configBooleanRefusal as Ht, renderStatefulReason as I, CrossAccountSecretRefusalError as Ii, describeTypeWithThrottleRetry as In, readBootstrapMarkerBody as Ir, WAFv2WebACLProvider as It, yellow as J, ResourceTimeoutError as Ji, identityKeyFor as Jn, redactDockerArgvValues as Jr, requireConfigObject as Jt, green as K, PartialFailureError as Ki, dynamicReferenceTokens as Kn, getDockerCmd as Kr, replayWarn as Kt, WARM_THROUGHPUT_MEMBERS as L, DependencyError as Li, withRetry as Ln, validateAssetBucketName as Lr, normalizeAwsTagsToCfn as Lt, planOrphanAdoption as M, setAwsClients as Mi, repairMalformedResourcePropertiesForReadOnly as Mn, ensureAssetStorage as Mr, isUnboundTemplateParameter as Mt, MULTI_REGION_RECREATE_BLOCKED_TYPES as N, AssetError as Ni, repairMalformedResourcesForReadOnly as Nn, getBootstrapMarkerKey as Nr, parameterTypeMayLoseSecretIdentity as Nt, unsupportedFinalSnapshotError as O, resolveBucketRegion as Oi, refuseMalformedResourcePropertiesForOrphan as On, rewriteTemplateAssetReferences as Or, coerceParameterTypedValue as Ot, isStatefulRecreateTargetForReplace as P, CdkdError as Pi, findActionableSilentDrops as Pn, isCrossRegionRedirect as Pr, refStateLookupFromResource as Pt, isExportAliasCollision as Q, StateError as Qi, maskSecretsInText as Qn, stripControlChars as Qr, withSharedDrainBudget as Qt, coerceWarmThroughput as R, DeployCancelledError as Ri, DagBuilder as Rn, validateContainerRepoName as Rr, resolveExplicitPhysicalId as Rt, PRE_DELETE_SNAPSHOT_TYPES as S, PARTITION_TABLE as Si, malformedStateRefusalMessage as Sn, AssetPublisher as Sr, disableInstanceApiTermination as St, createPreDeleteFinalSnapshot as T, AssemblyReader as Ti, refuseMalformedNestedChildOutputs as Tn, buildAssetRedirectMap as Tr, carriesDynamicReference as Tt, bold as U, LockError as Ui, TEMPLATE_SOURCED_RULES as Un, describeDockerFailure as Ur, configIntegerRefusal as Ut, toFiniteNumber as V, LocalInvokeBuildError as Vi, STATE_SOURCED_CROSS_GENERATION_RULES as Vn, describeDockerCapturedOutput as Vr, coerceCfnInteger as Vt, cyan as W, MalformedProducerRecordRefusalError as Wi, carriesSecretMask as Wn, dockerSpawnEnvWithSensitive as Wr, configStringRefusal as Wt, collectPublishedOutputNames as X, StackHasActiveImportsError as Xi, markSameGenerationBag as Xn, runDockerStreaming as Xr, classifyReplaySecretRegion as Xt, collectDeclaredOutputNames as Y, ResourceUpdateNotSupportedError as Yi, isSingleDynamicReferenceToken as Yn, runDockerForeground as Yr, requireConfigString as Yt, exportAliasCollisionScrubWarning as Z, StackTerminationProtectionError as Zi, maskSecretsInError as Zn, escapeRegExp$1 as Zr, producerRegionsFromState as Zt, isSecretBearingReferenceString as _, findLargeInlineResources as _i, malformedOutputsRefusalMessage as _n, importableOutputs as _r, isWaitAbandonedError as _t, DeploymentEventsStore as a, isRetryableTransientError as aa, resolveApp as ai, AWS_CREDENTIAL_ENV_KEYS as an, rebuildClientForBucketRegion as ar, clearOnUpdateRemoval as at, bindingSkippedOutputs as b, decodeListingKey as bi, malformedResourcePropertiesWarning as bn, orphansCarriedFrom as br, deleteIndeterminateGuards as bt, replayFailedOperations as c, markNonRetryable as ca, resolveSkipPrefix as ci, envCredentialsAreAssumedRole as cn, buildLockContentionMessage as cr, createMaskedRetryLogger as ct, updatePartialReason as d, describeAwsFailure as da, resolveUseCdkBootstrapAssets as di, STATE_RESOURCES_MALFORMED as dn, shellQuote as dr, beginCommandInterruptScope as dt, formatError as ea, getDockerImageBySourceHash as ei, s3BucketDomainName as en, recoverMaskedOutput as er, secretBearingStateKeyWarning as et, withResourceDeadline as f, safeStringify$1 as fa, stateBucketExistenceConfirmed as fi, hasReadableOutputs as fn, CUSTOM_RESOURCE_RESPONSE_PREFIX as fr, endCommandInterruptScope as ft, bagHoldsSecretExpression as g, MIGRATE_TMP_PREFIX as gi, malformedLocalOutputsWarning as gn, importableOutputKeys as gr, CloudControlProvider as gt, computeImplicitDeleteEdges as h, CFN_TEMPLATE_URL_LIMIT as hi, malformedExportSourceWarning as hn, hasReadableExportSet as hr, startInterruptWatch as ht, DeploymentEventsReader as i, isMarkedNonRetryable as ia, getLegacyStateBucketName as ii, applyRoleArnIfSet as in, S3StateBackend as ir, collectInlinePolicyNamesManagedBySiblings as it, makeSiblingClaimReader as j, resetAwsClients as ji, repairMalformedOutputsForReadOnly as jn, assertAssetBucketRegion as jr, isNamelessDynamicReferenceError as jt, makeCanonicalizePropertiesFn as k, AwsClients as ki, refuseMalformedResourcesForDestroy as kn, AssetModeResolver as kr, getAccountInfo as kt, replayRollback as l, markRedactedCause as la, resolveStateBucketWithDefault as li, DiffCalculator as ln, forceQuitRecoveryClause as lr, maskDeep as lt, IMPLICIT_DELETE_DEPENDENCIES as m, CFN_TEMPLATE_BODY_LIMIT as mi, malformedExportNamesWarning as mn, exportNamesCarriedFrom as mr, isInterruptedWaitError as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, normalizeAwsError as na, synthesisStatusMessage as ni, s3BucketRegionalDomainName as nn, scrubResourceRecord as nr, getCurrentResourceSecrets as nt, planFailedOps as o, isThrottlingError as oa, resolveAutoAssetStorage as oi, applyCallerIdentityCredentials as on, UNREPRODUCIBLE_LOCK_CLAUSE as or, ProviderRegistry as ot, maskingRetryLogger as p, __exportAll as pa, warnDeprecatedNoPrefixCliFlag as pi, hasReadableResources as pn, DEFAULT_STATE_PREFIX as pr, interruptWatchListenerCount as pt, red as q, ProvisioningError as qi, errorCauseChain as qn, partitionSensitiveEnv as qr, requireConfigArray as qt, DeployEngine as r, withErrorHandling as ra, getDefaultStateBucketName as ri, s3BucketWebsiteUrl as rn, LockManager as rr, IAMRoleProvider as rt, planRollback as s, isTransientServerError as sa, resolveCaptureObservedState as si, callerEnvCredentials as sn, buildForceUnlockCommand as sr, wouldReturnToSdkProvider as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, isCdkdError as ta, Synthesizer as ti, s3BucketDualStackDomainName as tn, redactSecretsForState as tr, secretSafeKeyDisplay as tt, updatePartialMessage as u, retryClassificationText as ua, resolveStateBucketWithDefaultAndSource as ui, INTRINSIC_KEYS as un, formatLockExpiry as ur, maskerOrIdentity as ut, keptWholeReasonText as v, uploadCfnTemplate as vi, malformedOutputsWarning as vn, isReadableBag as vr, slowCcOperationTimeoutMs as vt, ccRoutedFinalSnapshotError as w, derivePartitionAndUrlSuffix as wi, refuseDivergentRecordRegionForDestroy as wn, WorkGraph as wr, IntrinsicFunctionResolver as wt, ATOMIC_FINAL_SNAPSHOT_TYPES as x, expectedOwnerParam as xi, malformedResourcesWarning as xn, shouldRetainResource as xr, deleteSkipReason as xt, mergeNoChangeOutputs as y, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as yi, malformedRenderedContainersWarning as yn, orphansAfterRollback as yr, UNSPECIFIED_SKIP_REASON as yt, isWarmThroughputDecrease as z, DynamicReferenceRegionAmbiguousError as zi, TemplateParser as zn, buildDenyExternalAccessPolicy as zr, assertRegionMatch as zt };
45648
- //# sourceMappingURL=deploy-engine-mI1Xv1oi.js.map
45705
+ //# sourceMappingURL=deploy-engine-21iNqwR3.js.map