@go-to-k/cdkd 0.290.49 → 0.291.1

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-usurnP89.js";
2
+ import { n as isVersionOnlyInvocation, t as getCdkdVersion } from "./version-DREZx_Q6.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-DGTp7UIn.js");
77
+ const { buildProgram } = await import("./program-B2qAWvE2.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, D as truncateCodePoints, E as isPasteableIdent, 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-GASr9bAF.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-usurnP89.js";
3
+ import { t as getCdkdVersion } from "./version-DREZx_Q6.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";
@@ -3097,6 +3097,33 @@ function namesTheSameDirectory(bound, candidate) {
3097
3097
  return realBound !== void 0 && realTarget !== void 0 && realBound === realTarget;
3098
3098
  }
3099
3099
  /**
3100
+ * The escape verdict for an assembly-supplied path WITHOUT throwing, taking
3101
+ * whichever arm the value's own shape calls for.
3102
+ *
3103
+ * `resolveAssemblyPath` answers for a RELATIVE value and
3104
+ * {@link absoluteAssemblyPathEscape} for an ABSOLUTE one, and a caller that
3105
+ * only wants to WARN would otherwise branch on `path.isAbsolute` and call
3106
+ * both itself. Three sites already do exactly that
3107
+ * ([#3532](https://github.com/go-to-k/cdkd/issues/3532)'s two asset resolvers,
3108
+ * which must also THROW and so keep their own spelling), and the fourth —
3109
+ * [#3497](https://github.com/go-to-k/cdkd/issues/3497)'s BuildKit
3110
+ * passthroughs — has nothing to throw and a dozen values to judge. This is the
3111
+ * one spelling for that case.
3112
+ *
3113
+ * `base` is what a relative value resolves against; `bound` is what the result
3114
+ * must stay inside. They differ for a Stage. Returns `undefined` when the
3115
+ * value is fine, including when it names `bound` itself, which
3116
+ * {@link namesTheSameDirectory} answers — an asset path legitimately names a
3117
+ * directory and a caller that WARNS has no reason to complain about the
3118
+ * assembly root.
3119
+ */
3120
+ function assemblyPathEscape(base, bound, candidate) {
3121
+ if (path.isAbsolute(candidate)) return absoluteAssemblyPathEscape(bound, candidate);
3122
+ const resolved = resolveAssemblyPath(base, candidate, { containWithin: bound });
3123
+ if (resolved.contained || namesTheSameDirectory(bound, resolved.path)) return void 0;
3124
+ return resolved;
3125
+ }
3126
+ /**
3100
3127
  * The shared tail of every containment refusal: what the value resolved to,
3101
3128
  * what it escaped, and why that means the assembly is not CDK-generated. Each
3102
3129
  * call site supplies its own subject ("Stack 'X' has templateFile='...' which
@@ -7153,8 +7180,17 @@ function warnAbsoluteAssetPath(w) {
7153
7180
  * an accidental or legacy `..` and costs nothing, which is why it stays — but
7154
7181
  * it is no longer a boundary against anyone who chose the value. The docs say
7155
7182
  * this to users in the same words; do not soften either copy.
7183
+ *
7184
+ * **The leading positionals stay, and that is not an unfinished half of
7185
+ * [#3544](https://github.com/go-to-k/cdkd/issues/3544).** The Docker twin took
7186
+ * every parameter into its bag because `(manifestDir, directory)` were two
7187
+ * adjacent `string`s and swapping them compiled. Here the second parameter is
7188
+ * a `FileAsset`, so the same swap is a type error already. The invariant is
7189
+ * "no transposable adjacent same-typed pair", not "both twins look alike" —
7190
+ * converting this one buys nothing and costs every call site.
7156
7191
  */
7157
- function resolveFileAssetSourcePath(manifestDir, asset, assetOutdir, sink) {
7192
+ function resolveFileAssetSourcePath(manifestDir, asset, opts) {
7193
+ const { assetOutdir, sink } = opts;
7158
7194
  if (isAbsolute$1(asset.source.path)) {
7159
7195
  const absolute = resolve$1(asset.source.path);
7160
7196
  const escape = absoluteAssemblyPathEscape(assetOutdir, absolute);
@@ -7268,14 +7304,14 @@ var AssetManifestLoader = class {
7268
7304
  *
7269
7305
  * @param cdkOutputDir CDK output directory
7270
7306
  * @param asset File asset
7271
- * @param assetOutdir The app's outdir — the containment / warning bound.
7272
- * REQUIRED for the reason {@link resolveFileAssetSourcePath}'s own
7273
- * parameter is: a dropped bound narrows to the manifest directory and
7274
- * silently refuses every Stage asset.
7307
+ * @param opts The app's outdir and the sink clause; see
7308
+ * {@link FileAssetResolveOptions}. A bag rather than positionals because
7309
+ * both are `string` and a transposition otherwise compiled
7310
+ * (go-to-k/cdkd#3537).
7275
7311
  * @returns Absolute path to asset source
7276
7312
  */
7277
- getAssetSourcePath(cdkOutputDir, asset, assetOutdir, sink) {
7278
- return resolveFileAssetSourcePath(cdkOutputDir, asset, assetOutdir, sink);
7313
+ getAssetSourcePath(cdkOutputDir, asset, opts) {
7314
+ return resolveFileAssetSourcePath(cdkOutputDir, asset, opts);
7279
7315
  }
7280
7316
  /**
7281
7317
  * Resolve asset destination values (replace ${AWS::AccountId}, ${AWS::Region}, etc.)
@@ -7374,7 +7410,10 @@ var FileAssetPublisher = class {
7374
7410
  */
7375
7411
  async publish(assetHash, asset, cdkOutputDir, accountId, region, assetOutdir) {
7376
7412
  const destinations = Object.values(asset.destinations).map((d) => `s3://${this.resolvePlaceholders(d.bucketName, accountId, region)}/${this.resolvePlaceholders(d.objectKey, accountId, region)}`).map((u) => displaySafe(u));
7377
- const sourcePath = resolveFileAssetSourcePath(cdkOutputDir, asset, assetOutdir, destinations.length > 0 ? `package that path and upload it to ${destinations.join(", ")}` : "package that path, though this manifest names no destination for it");
7413
+ const sourcePath = resolveFileAssetSourcePath(cdkOutputDir, asset, {
7414
+ assetOutdir,
7415
+ sink: destinations.length > 0 ? `package that path and upload it to ${destinations.join(", ")}` : "package that path, though this manifest names no destination for it"
7416
+ });
7378
7417
  for (const [, dest] of Object.entries(asset.destinations)) {
7379
7418
  const bucketName = this.resolvePlaceholders(dest.bucketName, accountId, region);
7380
7419
  const objectKey = this.resolvePlaceholders(dest.objectKey, accountId, region);
@@ -8705,6 +8744,251 @@ function describeDockerCapturedOutput(error, args, fallback) {
8705
8744
  return redactDockerArgvInText(capturedStreamText(error, "stderr") || capturedStreamText(error, "stdout") || fallback, args);
8706
8745
  }
8707
8746
 
8747
+ //#endregion
8748
+ //#region src/assets/docker-cache-option.ts
8749
+ /**
8750
+ * Render a `DockerCacheOption` as the `--cache-from` / `--cache-to` value
8751
+ * BuildKit receives.
8752
+ *
8753
+ * Its own LEAF module, imported by both `docker-build.ts` (which pushes it
8754
+ * into the argv) and `manifest-passthrough-warnings.ts` (which judges it).
8755
+ * Not because those two form a cycle — `docker-build.ts` imports the warnings
8756
+ * module and not the reverse — but because the helper belongs to NEITHER: it
8757
+ * is the shared definition of what BuildKit will be handed, and keeping it in
8758
+ * the builder would make the judge import the thing it judges.
8759
+ *
8760
+ * **It is the one spelling on purpose, and the reason is a defect**
8761
+ * ([#3497](https://github.com/go-to-k/cdkd/issues/3497)): the warning layer
8762
+ * used to walk `option.params` STRUCTURALLY while the argv is this
8763
+ * concatenation, and neither `,` nor `=` is quoted here. A manifest could
8764
+ * therefore inject CSV through a field the walk did not treat as a path —
8765
+ * `type: 'local,dest=/home/victim/.ssh'` with no params at all renders
8766
+ * `--cache-to type=local,dest=/home/victim/.ssh`, a host WRITE that produced
8767
+ * no warning because `params` was empty. Judging the rendered STRING closes
8768
+ * that by construction: whatever BuildKit parses is what cdkd parsed.
8769
+ */
8770
+ function cacheOptionToFlag(option) {
8771
+ let flag = `type=${option.type}`;
8772
+ if (option.params) for (const [k, v] of Object.entries(option.params)) flag += `,${k}=${v}`;
8773
+ return flag;
8774
+ }
8775
+
8776
+ //#endregion
8777
+ //#region src/assets/manifest-passthrough-warnings.ts
8778
+ /**
8779
+ * Every candidate host path in a buildx option value.
8780
+ *
8781
+ * **Uniform, and over-inclusive on purpose.** Three review rounds found this
8782
+ * parser short in three different ways — `dest=` only (missing the
8783
+ * `--output=<path>` shorthand), case-sensitive `src` (missing `source=` and
8784
+ * `SRC=`), and a per-entry `=` requirement (missing every key after the first
8785
+ * in `--ssh k=./a.key,/home/victim/.ssh/id_rsa`). Each fix was a new special
8786
+ * case, and the next round found the next gap. So the rule is now one rule:
8787
+ * **a part with a key yields its value, a part without one yields itself**,
8788
+ * for every field. An over-inclusive candidate costs at most a warning about
8789
+ * a string that was never a path — and a value that is not a path resolves
8790
+ * inside the build context and is dropped before anything is printed.
8791
+ *
8792
+ * `write` is true only for an explicit `dest=`, or when the caller says the
8793
+ * whole field is a write target (`dockerOutputs`, whose bare-path form IS a
8794
+ * destination). It is NOT inferred from the field name: `cacheFrom` can carry
8795
+ * a `dest=` and `cacheTo` a `src=`.
8796
+ *
8797
+ * KNOWN INCOMPLETE, recorded rather than built, and this list is the whole of
8798
+ * what is left "safe by argument" in this module — four of five review rounds
8799
+ * broke something that lived in that category, so it is written down instead:
8800
+ *
8801
+ * - buildx parses these as CSV, so a quoted value containing a comma
8802
+ * (`dest="/tmp/a,b"`) is split wrongly here and its path is missed.
8803
+ * - the keyed rule takes `src` / `source` / `dest`, the documented spellings
8804
+ * that make BuildKit open a file. An UNDOCUMENTED alias, or a NEW key in a
8805
+ * future buildx, would slip past it, where the earlier take-every-key rule
8806
+ * would have caught it — that rule was given up because it cost live false
8807
+ * positives on `ref=` / `scope=` / `env=` at an ordinary project layout.
8808
+ * What was audited, per backend: `--secret` opens a file only through
8809
+ * `src` / `source` (`env` is a variable NAME); every `--output` exporter
8810
+ * only through `dest` (`name`, `push`, `compression*`, `annotation.*`,
8811
+ * `store`, the docker exporter's `context` are not paths); `--cache-to` and
8812
+ * `--cache-from` only under `type=local` (`registry`, `s3`, `azblob`, `gha`
8813
+ * reach the network or take inline values). For the CACHE flags alone there
8814
+ * is a second enumeration to keep in step: `src/utils/docker-cmd.ts`'s
8815
+ * `ARGV_PARAM_LIST_LOCATOR_PARAMS`, consulted under `ARGV_PARAM_LIST_FLAGS`
8816
+ * (`--cache-from` / `--cache-to`), lists the same backends for the
8817
+ * redaction side and agrees — **update both or neither.** `--secret` and
8818
+ * `--output` have no counterpart there, so a new exporter key is judged
8819
+ * here and nowhere else.
8820
+ * - a leading or trailing SPACE is trimmed here and is NOT trimmed by buildx
8821
+ * or by Go's CSV reader, so ` ../../x` is a directory literally named
8822
+ * `" .."` to the kernel while cdkd judges the trimmed spelling. It can only
8823
+ * OVER-warn, which is why it is recorded rather than removed.
8824
+ *
8825
+ * Both misses cost a WARNING, never a refusal, which is the whole reason
8826
+ * neither is worth a CSV parser or a wider net.
8827
+ *
8828
+ * Tolerant by construction: an unparseable value yields nothing rather than
8829
+ * throwing. This module only ever ADDS a warning and must never be why a
8830
+ * legitimate build fails.
8831
+ */
8832
+ function candidateHostPaths(value, opts) {
8833
+ const out = [];
8834
+ for (const part of value.split(",")) {
8835
+ const eq = part.indexOf("=");
8836
+ if (eq < 0) {
8837
+ const bare = part.trim();
8838
+ if (bare.length > 0) out.push({
8839
+ path: bare,
8840
+ write: opts.bareIsWrite
8841
+ });
8842
+ continue;
8843
+ }
8844
+ const key = part.slice(0, eq).trim().toLowerCase();
8845
+ const v = part.slice(eq + 1).trim();
8846
+ if (v.length === 0) continue;
8847
+ if (key !== "src" && key !== "source" && key !== "dest") continue;
8848
+ out.push({
8849
+ path: v,
8850
+ write: key === "dest"
8851
+ });
8852
+ }
8853
+ return out;
8854
+ }
8855
+ /** Every host path this source hands to BuildKit, with where it came from. */
8856
+ function hostPathsOf(source) {
8857
+ const refs = [];
8858
+ if (source.dockerFile) refs.push({
8859
+ field: "dockerFile",
8860
+ where: "dockerFile",
8861
+ path: source.dockerFile,
8862
+ write: false
8863
+ });
8864
+ for (const [k, v] of Object.entries(source.dockerBuildContexts ?? {})) {
8865
+ const rendered = `${k}=${v}`;
8866
+ const contextPath = rendered.slice(rendered.indexOf("=") + 1).trim();
8867
+ if (contextPath.length === 0) continue;
8868
+ refs.push({
8869
+ field: "dockerBuildContexts",
8870
+ where: k,
8871
+ path: contextPath,
8872
+ write: false
8873
+ });
8874
+ }
8875
+ const ssh = source.dockerBuildSsh ?? "";
8876
+ const sshEq = ssh.indexOf("=");
8877
+ (sshEq < 0 ? [] : ssh.slice(sshEq + 1).split(",")).forEach((entry, i) => {
8878
+ const p = entry.trim();
8879
+ if (p.length > 0) refs.push({
8880
+ field: "dockerBuildSsh",
8881
+ where: String(i),
8882
+ path: p,
8883
+ write: false
8884
+ });
8885
+ });
8886
+ for (const [k, v] of Object.entries(source.dockerBuildSecrets ?? {})) for (const { path: p, write } of candidateHostPaths(`id=${k},${v}`, { bareIsWrite: false })) refs.push({
8887
+ field: "dockerBuildSecrets",
8888
+ where: k,
8889
+ path: p,
8890
+ write
8891
+ });
8892
+ (source.cacheFrom ?? []).forEach((c, i) => {
8893
+ for (const { path: p, write } of candidateHostPaths(cacheOptionToFlag(c), { bareIsWrite: false })) refs.push({
8894
+ field: "cacheFrom",
8895
+ where: String(i),
8896
+ path: p,
8897
+ write
8898
+ });
8899
+ });
8900
+ if (source.cacheTo) for (const { path: p, write } of candidateHostPaths(cacheOptionToFlag(source.cacheTo), { bareIsWrite: false })) refs.push({
8901
+ field: "cacheTo",
8902
+ where: "cacheTo",
8903
+ path: p,
8904
+ write
8905
+ });
8906
+ (source.dockerOutputs ?? []).forEach((o, i) => {
8907
+ for (const { path: p, write } of candidateHostPaths(o, { bareIsWrite: true })) refs.push({
8908
+ field: "dockerOutputs",
8909
+ where: String(i),
8910
+ path: p,
8911
+ write
8912
+ });
8913
+ });
8914
+ return refs;
8915
+ }
8916
+ /**
8917
+ * Warn for each BuildKit passthrough whose host path leaves the assembly.
8918
+ *
8919
+ * `base` is the build context directory (what a relative value resolves
8920
+ * against); `bound` is the app's outdir.
8921
+ */
8922
+ function warnEscapingBuildKitPaths(source, base, bound) {
8923
+ const logger = getLogger().child("assets");
8924
+ const contextNarrows = assemblyPathEscape(base, base, resolve$1(bound)) !== void 0;
8925
+ for (const ref of hostPathsOf(source)) {
8926
+ if (!ref.write && contextNarrows && assemblyPathEscape(base, base, ref.path) === void 0) continue;
8927
+ const escape = assemblyPathEscape(base, bound, ref.path);
8928
+ if (escape === void 0) continue;
8929
+ const verb = ref.write ? "WRITE to" : "read";
8930
+ logger.warn(`Docker asset ${ref.field}` + (ref.where === ref.field ? "" : `['${displaySafe(ref.where)}']`) + ` names a host path outside the assembly, which ${renderAssemblyPathEscape(escape, bound, "load", `cdkd will ${verb} it during the image build, matching the CDK CLI — a pre-synthesized assembly is trusted input. If you did not produce this assembly, that is a host path it chose and the CloudFormation template does not show.`)}`);
8931
+ }
8932
+ }
8933
+ /**
8934
+ * Warn that a manifest-chosen command line is about to run on the host.
8935
+ *
8936
+ * **This is the one the decision singles out**, and it is not a containment
8937
+ * question: `source.executable` is an arbitrary argv cdkd spawns, so no path
8938
+ * check applies and no value of it is "safe". It breaks the reasonable
8939
+ * expectation that `-a <dir>` runs no code from the assembly, and nothing said
8940
+ * so before. Rendered through `redactDockerArgvValues`, because a build script
8941
+ * wrapping `docker build` carries the very `--build-arg` pairs the rest of
8942
+ * this layer masks.
8943
+ */
8944
+ function warnManifestExecutable(executable) {
8945
+ const [cmd, ...rest] = executable;
8946
+ const logger = getLogger().child("assets");
8947
+ logger.debug(`source.executable argv: ${redactDockerArgvValues([...executable]).join(" ")}`);
8948
+ logger.warn(`Docker asset source.executable runs a command this asset manifest chose, on this machine: '${displaySafe(cmd ?? "")}'` + (rest.length > 0 ? ` (with ${rest.length} argument(s); --verbose shows them)` : "") + ". cdkd runs it, matching the CDK CLI — a pre-synthesized assembly is trusted input. Note that this means deploying from a pre-synthesized assembly DOES execute code from it, which the CloudFormation template does not show.");
8949
+ }
8950
+ /**
8951
+ * One set per KIND rather than one set of composite keys. A `${kind}` + NUL +
8952
+ * `${name}` key would be a multi-part NUL-joined string, which this repo
8953
+ * fences as a record-key shape — and it is not one: it never leaves the
8954
+ * process, is never persisted, and a collision would suppress one duplicate
8955
+ * warning line. Two sets carry the same information with nothing to classify.
8956
+ */
8957
+ const warnedDestinations = {
8958
+ bucket: /* @__PURE__ */ new Set(),
8959
+ repository: /* @__PURE__ */ new Set()
8960
+ };
8961
+ /**
8962
+ * Warn that an asset destination is not bootstrap-shaped.
8963
+ *
8964
+ * `redirectFileAsset` rewrites a destination only when it matches a known
8965
+ * bootstrap shape, so anything else survives verbatim and cdkd uploads there
8966
+ * with the caller's credentials. A CUSTOM BOOTSTRAP IS LEGITIMATE — which is
8967
+ * why this warns and never refuses — but the name is worth printing, because
8968
+ * it is the one field a reader can recognise as not theirs.
8969
+ *
8970
+ * **Shape only, and an adversary can imitate a shape.**
8971
+ * `isDefaultBootstrapBucketName` accepts any qualifier, so
8972
+ * `cdk-<anything>-assets-<victim-account>-<region>` reads as recognized even
8973
+ * when the bucket lives in the attacker's account (S3 names are global and a
8974
+ * bucket policy can admit the victim's principal). This warning narrows what
8975
+ * a careless manifest gets away with; it is not an ownership check, and
8976
+ * nothing here should be read as one.
8977
+ *
8978
+ * `recognized` is whether the name is default-bootstrap-shaped for this
8979
+ * (account, region) or is cdkd's own asset storage. Judged on the FLATTENED
8980
+ * name and on shape, not on whether the redirect table rewrote it: in legacy
8981
+ * mode nothing is rewritten and every ordinary deploy would otherwise warn,
8982
+ * which is the cry-wolf failure this layer already learned once.
8983
+ */
8984
+ function warnUnrecognizedAssetDestination(opts) {
8985
+ if (opts.recognized) return;
8986
+ const seen = warnedDestinations[opts.kind];
8987
+ if (seen.has(opts.name)) return;
8988
+ seen.add(opts.name);
8989
+ getLogger().child("assets").warn(`Asset destination ${opts.kind} '${displaySafe(opts.name)}' is not a CDK-bootstrap or cdkd-managed name, so cdkd uploads there exactly as this asset manifest wrote it, with your credentials. That is what a custom bootstrap looks like and is expected for one; if you did not configure it, the manifest chose where your assets go.`);
8990
+ }
8991
+
8708
8992
  //#endregion
8709
8993
  //#region src/assets/docker-build.ts
8710
8994
  /**
@@ -8727,7 +9011,8 @@ function describeDockerCapturedOutput(error, args, fallback) {
8727
9011
  * Twin of `resolveFileAssetSourcePath` and `resolveVerboseTemplatePath`.
8728
9012
  * Exported for unit testing.
8729
9013
  */
8730
- function resolveDockerContextDirectory(manifestDir, directory, wrapError, assetOutdir, sink, assetId) {
9014
+ function resolveDockerContextDirectory(opts) {
9015
+ const { manifestDir, directory, wrapError, assetOutdir, sink, assetId } = opts;
8731
9016
  if (isAbsolute$1(directory)) {
8732
9017
  const absolute = resolve$1(directory);
8733
9018
  const escape = absoluteAssemblyPathEscape(assetOutdir, absolute);
@@ -8781,11 +9066,22 @@ function dockerSubject(assetId) {
8781
9066
  async function buildDockerImage(asset, cdkOutDir, options) {
8782
9067
  const source = asset.source;
8783
9068
  const logger = getLogger().child("docker-build");
8784
- const contextDirectory = (directory, sink) => resolveDockerContextDirectory(cdkOutDir, directory, options.wrapError, options.assetOutdir ?? cdkOutDir, sink, options.tag);
9069
+ const contextDirectory = (args) => resolveDockerContextDirectory({
9070
+ manifestDir: cdkOutDir,
9071
+ directory: args.directory,
9072
+ wrapError: options.wrapError,
9073
+ assetOutdir: options.assetOutdir ?? cdkOutDir,
9074
+ sink: args.sink,
9075
+ ...options.tag !== void 0 && { assetId: options.tag }
9076
+ });
8785
9077
  if (source.executable && source.executable.length > 0) {
8786
9078
  const [cmd, ...args] = source.executable;
8787
9079
  if (!cmd) throw options.wrapError("asset source.executable[] is empty");
8788
- const cwd = source.directory ? contextDirectory(source.directory, "run this asset's source.executable with that directory as its working directory") : cdkOutDir;
9080
+ warnManifestExecutable(source.executable);
9081
+ const cwd = source.directory ? contextDirectory({
9082
+ directory: source.directory,
9083
+ sink: "run this asset's source.executable with that directory as its working directory"
9084
+ }) : cdkOutDir;
8789
9085
  const shownExecutable = redactDockerArgvValues(source.executable).join(" ");
8790
9086
  logger.debug(`Building Docker image via executable: ${shownExecutable} (cwd=${cwd})`);
8791
9087
  let result;
@@ -8809,8 +9105,12 @@ async function buildDockerImage(asset, cdkOutDir, options) {
8809
9105
  }
8810
9106
  if (!options.tag) throw options.wrapError("buildDockerImage(directory mode) requires options.tag");
8811
9107
  const buildArgs = buildDockerBuildCommand(source, options.tag, options.platform);
8812
- const contextDir = contextDirectory(source.directory, "send that directory to BuildKit as the build context and bake it into the image pushed to the repository this manifest names");
9108
+ const contextDir = contextDirectory({
9109
+ directory: source.directory,
9110
+ sink: "send that directory to BuildKit as the build context and bake it into the image pushed to the repository this manifest names"
9111
+ });
8813
9112
  buildArgs.push(".");
9113
+ warnEscapingBuildKitPaths(source, contextDir, options.assetOutdir ?? cdkOutDir);
8814
9114
  logger.debug(`${getDockerCmd()} ${redactDockerArgvValues(buildArgs).join(" ")} (cwd=${displaySafe(contextDir)})`);
8815
9115
  try {
8816
9116
  await runDockerStreaming(buildArgs, {
@@ -8849,11 +9149,6 @@ function buildDockerBuildCommand(source, tag, platformOverride) {
8849
9149
  if (source.cacheDisabled) args.push("--no-cache");
8850
9150
  return args;
8851
9151
  }
8852
- function cacheOptionToFlag(option) {
8853
- let flag = `type=${option.type}`;
8854
- if (option.params) for (const [k, v] of Object.entries(option.params)) flag += `,${k}=${v}`;
8855
- return flag;
8856
- }
8857
9152
 
8858
9153
  //#endregion
8859
9154
  //#region src/assets/docker-asset-publisher.ts
@@ -10380,6 +10675,15 @@ var AssetPublisher = class {
10380
10675
  const nodeIds = [];
10381
10676
  const fileAssets = Object.entries(manifest.files || {}).filter(([, asset]) => !isCfnTemplateAssetPath(asset.source.path)).map(([hash, asset]) => [hash, redirect ? redirectFileAsset(asset, redirect) : asset]);
10382
10677
  for (const [hash, asset] of fileAssets) {
10678
+ for (const dest of Object.values(asset.destinations)) {
10679
+ const destRegion = dest.region ?? options.region;
10680
+ const name = flattenAssetPlaceholders(dest.bucketName, options.accountId, destRegion);
10681
+ warnUnrecognizedAssetDestination({
10682
+ kind: "bucket",
10683
+ name,
10684
+ recognized: isDefaultBootstrapBucketName(name, options.accountId, destRegion) || redirect !== void 0 && [...redirect.buckets.values()].includes(name)
10685
+ });
10686
+ }
10383
10687
  const nodeId = `asset-publish:${prefix}file:${hash}`;
10384
10688
  graph.addNode({
10385
10689
  id: nodeId,
@@ -10400,6 +10704,15 @@ var AssetPublisher = class {
10400
10704
  }
10401
10705
  for (const [hash, rawAsset] of Object.entries(manifest.dockerImages || {})) {
10402
10706
  const asset = redirect ? redirectDockerAsset(rawAsset, redirect) : rawAsset;
10707
+ for (const dest of Object.values(asset.destinations)) {
10708
+ const destRegion = dest.region ?? options.region;
10709
+ const name = flattenAssetPlaceholders(dest.repositoryName, options.accountId, destRegion);
10710
+ warnUnrecognizedAssetDestination({
10711
+ kind: "repository",
10712
+ name,
10713
+ recognized: isDefaultBootstrapRepoName(name, options.accountId, destRegion) || redirect !== void 0 && [...redirect.repos.values()].includes(name)
10714
+ });
10715
+ }
10403
10716
  const localTag = `cdkd-asset-${hash}`;
10404
10717
  const buildNodeId = `asset-build:${prefix}docker:${hash}`;
10405
10718
  const publishNodeId = `asset-publish:${prefix}docker:${hash}`;
@@ -34862,7 +35175,7 @@ var CloudControlProvider = class {
34862
35175
  const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
34863
35176
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
34864
35177
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
34865
- const { ASGProvider } = await import("./asg-provider-06Q6iut6.js").then((n) => n.n);
35178
+ const { ASGProvider } = await import("./asg-provider-IJRO7-KI.js").then((n) => n.n);
34866
35179
  const asgProvider = new ASGProvider();
34867
35180
  return withIndeterminateGuard(await asgProvider.delete(logicalId, physicalId, resourceType, _properties, context), indeterminateGuard);
34868
35181
  }
@@ -48571,5 +48884,5 @@ var DeployEngine = class DeployEngine {
48571
48884
  };
48572
48885
 
48573
48886
  //#endregion
48574
- export { yellow as $, AssemblyReader as $i, safeStackName as $n, assertAssetBucketRegion as $r, requireConfigObject as $t, createPreDeleteFinalSnapshot as A, ProvisioningError as Aa, resolveCaptureObservedState as Ai, malformedOutputsRefusalMessage as An, formatLockExpiry as Ar, carriesDynamicReference as At, isStatefulRecreateTargetSync as B, withErrorHandling as Ba, MIGRATE_TMP_PREFIX as Bi, refuseMalformedOrphansForDestroy as Bn, isReadableBag as Br, isSettledInstanceState as Bt, namesAnyDeclaredParameter as C, IntrinsicResolutionRefusalError as Ca, getDockerImageBySourceHash as Ci, isReadableResourceEntry as Cn, LockManager as Cr, slowCcOperationTimeoutMs as Ct, PRE_DELETE_SNAPSHOT_TYPES as D, MalformedProducerRecordRefusalError as Da, getLegacyStateBucketName as Di, malformedOrphanRecordsWarning as Dn, buildForceUnlockCommand as Dr, disableInstanceApiTermination as Dt, ATOMIC_FINAL_SNAPSHOT_TYPES as E, LockError as Ea, getDefaultStateBucketName as Ei, malformedLocalOutputsWarning as En, UNREPRODUCIBLE_LOCK_CLAUSE as Er, deleteSkipReason as Et, extractDeploymentEventError as F, StateError as Fa, stateBucketExistenceConfirmed as Fi, malformedResourcesWarning as Fn, hasReadableExportSet as Fr, isImpossibleEmptyStoredAttribute as Ft, toCfnInteger as G, markNonRetryable as Ga, injectiveKeyPrefix as Gi, refuseMalformedResourcesForDestroy as Gn, stringifyValue as Gr, coerceCfnBoolean as Gt, WARM_THROUGHPUT_MEMBERS as H, isRetryableTransientError as Ha, uploadCfnTemplate as Hi, refuseMalformedOutputsForDestroy as Hn, orphansCarriedFrom as Hr, normalizeAwsTagsToCfn as Ht, makeSiblingClaimReader as I, SynthesisError as Ia, warnDeprecatedNoPrefixCliFlag as Ii, malformedStateRefusalMessage as In, hasReasonlessBaselineRefusal as Ir, isNamelessDynamicReferenceError as It, bold as J, describeAwsFailure as Ja, decodeListingKey as Ji, repairMalformedOutputsForReadOnly as Jn, createAssetRedirectResolver as Jr, configIntegerRefusal as Jt, toFiniteNumber as K, markRedactedCause as Ka, producerCoordinateKey as Ki, refuseMalformedState as Kn, WorkGraph as Kr, coerceCfnInteger as Kt, planOrphanAdoption as L, formatError as La, ssmResolvedValueType as Li, refuseDivergentRecordRegionForDestroy as Ln, hasUnverifiableParameterRefusal as Lr, isUnboundTemplateParameter as Lt, refusesFinalSnapshot as M, ResourceUpdateNotSupportedError as Ma, resolveStateBucketWithDefault as Mi, malformedRenderedContainersWarning as Mn, CUSTOM_RESOURCE_RESPONSE_PREFIX as Mr, cfnRefValueFromPhysicalId as Mt, unsupportedFinalSnapshotError as N, StackHasActiveImportsError as Na, resolveStateBucketWithDefaultAndSource as Ni, malformedResourceEntriesWarning as Nn, DEFAULT_STATE_PREFIX as Nr, coerceParameterTypedValue as Nt, buildFinalSnapshotIdentifier as O, NestedStackChildDirectDestroyError as Oa, resolveApp as Oi, malformedOrphansRefusalMessage as On, buildLockContentionMessage as Or, isTerminationProtectionPropagationError as Ot, makeCanonicalizePropertiesFn as P, StackTerminationProtectionError as Pa, resolveUseCdkBootstrapAssets as Pi, malformedResourcePropertiesWarning as Pn, exportNamesCarriedFrom as Pr, getAccountInfo as Pt, red as Q, derivePartitionAndUrlSuffix as Qi, safeRegion as Qn, BOOTSTRAP_MARKER_PREFIX as Qr, requireConfigArray as Qt, MULTI_REGION_RECREATE_BLOCKED_TYPES as R, isCdkdError as Ra, CFN_TEMPLATE_BODY_LIMIT as Ri, refuseMalformedNestedChildOutputs as Rn, importableOutputKeys as Rr, parameterTypeMayLoseSecretIdentity as Rt, computeParameterTaint as S, DynamicReferenceRegionAmbiguousError as Sa, AssetManifestLoader as Si, hasReadableResources as Sn, scrubResourceRecord as Sr, isWaitAbandonedError as St, resourcesNamingDeclaredParameter as T, LocalStartServiceError as Ta, synthesisStatusMessage as Ti, malformedExportSourceWarning as Tn, rebuildClientForBucketRegion as Tr, deleteIndeterminateGuards as Tt, coerceWarmThroughput as U, isThrottlingError as Ua, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Ui, refuseMalformedResourceEntries as Un, shouldRetainResource as Ur, resolveExplicitPhysicalId as Ut, renderStatefulReason as V, isMarkedNonRetryable as Va, findLargeInlineResources as Vi, refuseMalformedOutputs as Vn, orphansAfterRollback as Vr, WAFv2WebACLProvider as Vt, isWarmThroughputDecrease as W, isTransientServerError as Wa, injectiveKey as Wi, refuseMalformedResourcePropertiesForOrphan as Wn, AssetPublisher as Wr, assertRegionMatch as Wt, gray as X, __exportAll as Xa, PARTITION_TABLE as Xi, repairMalformedResourcePropertiesForReadOnly as Xn, rewriteTemplateAssetReferences as Xr, readConfigString as Xt, cyan as Y, safeStringify$1 as Ya, expectedOwnerParam as Yi, repairMalformedResourceEntriesForReadOnly as Yn, loadPublishableAssetManifest as Yr, configStringRefusal as Yt, green as Z, canonicalizeRegion as Zi, repairMalformedResourcesForReadOnly as Zn, AssetModeResolver as Zr, replayWarn as Zt, bagHoldsSecretExpression as _, CdkdError as _a, redactDockerArgvValues as _i, UNREADABLE_ORPHANS_CONTAINER_ROW as _n, maskSecretsInError as _r, endCommandInterruptScope as _t, DeploymentEventsStore as a, nullPrototypeRecord as aa, validateAssetBucketName as ai, s3BucketDomainName as an, TemplateParser as ar, secretBearingStateKeyWarning as at, mergeNoChangeOutputs as b, DependencyError as ba, escapeRegExp$1 as bi, hasReadableOrphans as bn, recoverMaskedOutput as br, startInterruptWatch as bt, replayFailedOperations as c, renderAssemblyPathEscape as ca, buildDockerImage as ci, s3BucketWebsiteUrl as cn, STATE_SOURCED_READBACK_RULES as cr, IAMRoleProvider as ct, updatePartialMessage as d, resolveBucketRegion as da, describeDockerExecFailure as di, applyCallerIdentityCredentials as dn, createSecretMasker as dr, ProviderRegistry as dt, failedStageNote as ea, ensureAssetStorage as ei, requireConfigString as en, findActionableSilentDrops as er, collectDeclaredOutputNames as et, updatePartialReason as f, AwsClients as fa, describeDockerFailure as fi, callerEnvCredentials as fn, dynamicReferenceTokens as fr, wouldReturnToSdkProvider as ft, computeImplicitDeleteEdges as g, AssetError as ga, partitionSensitiveEnv as gi, STATE_RESOURCES_MALFORMED as gn, markSameGenerationBag as gr, beginCommandInterruptScope as gt, IMPLICIT_DELETE_DEPENDENCIES as h, setAwsClients as ha, getDockerCmd as hi, INTRINSIC_KEYS as hn, isSingleDynamicReferenceToken as hr, maskerOrIdentity as ht, DeploymentEventsReader as i, hasPlainPrototype$1 as ia, readBootstrapMarkerBody as ii, s3BucketArn as in, DagBuilder as ir, secretBearing as it, isFinalSnapshotError as j, ResourceTimeoutError as ja, resolveSkipPrefix as ji, malformedOutputsWarning as jn, shellQuote as jr, carriesFetchableDynamicReference as jt, ccRoutedFinalSnapshotError as k, PartialFailureError as ka, resolveAutoAssetStorage as ki, malformedOrphansWarning as kn, forceQuitRecoveryClause as kr, IntrinsicFunctionResolver as kt, replayRollback as l, resolveAssemblyPath as la, resolveDockerContextDirectory as li, applyRoleArnIfSet as ln, TEMPLATE_SOURCED_RULES as lr, collectInlinePolicyNamesManagedBySiblings as lt, maskingRetryLogger as m, resetAwsClients as ma, formatDockerLoginError as mi, DiffCalculator as mn, identityKeyFor as mr, maskDeep as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, defineOwnKey as na, isCrossRegionRedirect as ni, producerRegionsFromState as nn, describeTypeWithThrottleRetry as nr, exportAliasCollisionScrubWarning as nt, planFailedOps as o, ownValue as oa, validateContainerRepoName as oi, s3BucketDualStackDomainName as on, STATE_SOURCED_BASELINE_RULES as or, secretSafeKeyDisplay as ot, withResourceDeadline as p, getAwsClients as pa, dockerSpawnEnvWithSensitive as pi, envCredentialsAreAssumedRole as pn, errorCauseChain as pr, createMaskedRetryLogger as pt, formatResourceLine as q, retryClassificationText as qa, producerRecordKey as qi, repairMalformedOrphansForReadOnly as qn, buildAssetRedirectMap as qr, configBooleanRefusal as qt, DeployEngine as r, hasOwnKey as ra, parseBootstrapMarker as ri, withSharedDrainBudget as rn, withRetry as rr, isExportAliasCollision as rt, planRollback as s, absoluteAssemblyPathEscape as sa, buildDenyExternalAccessPolicy as si, s3BucketRegionalDomainName as sn, STATE_SOURCED_CROSS_GENERATION_RULES as sr, getCurrentResourceSecrets as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, processStackMessages as ta, getBootstrapMarkerKey as ti, classifyReplaySecretRegion as tn, findSilentDropProperties as tr, collectPublishedOutputNames as tt, resolveReplacementOldType as u, clearBucketRegionCache as ua, describeDockerCapturedOutput as ui, AWS_CREDENTIAL_ENV_KEYS as un, carriesSecretMask as ur, clearOnUpdateRemoval as ut, isSecretBearingReferenceString as v, ConfigError as va, runDockerForeground as vi, UNREADABLE_RESOURCES_MAP_ROW as vn, maskSecretsInText as vr, interruptWatchListenerCount as vt, reachableDivergentParameters as w, LocalInvokeBuildError as wa, Synthesizer as wi, malformedExportNamesWarning as wn, S3StateBackend as wr, UNSPECIFIED_SKIP_REASON as wt, bindingSkippedOutputs as x, DeployCancelledError as xa, stripControlChars as xi, hasReadableOutputs as xn, redactSecretsForState as xr, CloudControlProvider as xt, keptWholeReasonText as y, CrossAccountSecretRefusalError as ya, runDockerStreaming as yi, displayLogicalId as yn, recordMaskOnlyValue as yr, isInterruptedWaitError as yt, isStatefulRecreateTargetForReplace as z, normalizeAwsError as za, CFN_TEMPLATE_URL_LIMIT as zi, refuseMalformedOrphans as zn, importableOutputs as zr, refStateLookupFromResource as zt };
48575
- //# sourceMappingURL=deploy-engine-Cs0cRQIM.js.map
48887
+ export { yellow as $, derivePartitionAndUrlSuffix as $i, safeStackName as $n, assertAssetBucketRegion as $r, requireConfigObject as $t, createPreDeleteFinalSnapshot as A, PartialFailureError as Aa, resolveAutoAssetStorage as Ai, malformedOutputsRefusalMessage as An, formatLockExpiry as Ar, carriesDynamicReference as At, isStatefulRecreateTargetSync as B, normalizeAwsError as Ba, CFN_TEMPLATE_URL_LIMIT as Bi, refuseMalformedOrphansForDestroy as Bn, isReadableBag as Br, isSettledInstanceState as Bt, namesAnyDeclaredParameter as C, DynamicReferenceRegionAmbiguousError as Ca, AssetManifestLoader as Ci, isReadableResourceEntry as Cn, LockManager as Cr, slowCcOperationTimeoutMs as Ct, PRE_DELETE_SNAPSHOT_TYPES as D, LockError as Da, getDefaultStateBucketName as Di, malformedOrphanRecordsWarning as Dn, buildForceUnlockCommand as Dr, disableInstanceApiTermination as Dt, ATOMIC_FINAL_SNAPSHOT_TYPES as E, LocalStartServiceError as Ea, synthesisStatusMessage as Ei, malformedLocalOutputsWarning as En, UNREPRODUCIBLE_LOCK_CLAUSE as Er, deleteSkipReason as Et, extractDeploymentEventError as F, StackTerminationProtectionError as Fa, resolveUseCdkBootstrapAssets as Fi, malformedResourcesWarning as Fn, hasReadableExportSet as Fr, isImpossibleEmptyStoredAttribute as Ft, toCfnInteger as G, isTransientServerError as Ga, injectiveKey as Gi, refuseMalformedResourcesForDestroy as Gn, stringifyValue as Gr, coerceCfnBoolean as Gt, WARM_THROUGHPUT_MEMBERS as H, isMarkedNonRetryable as Ha, findLargeInlineResources as Hi, refuseMalformedOutputsForDestroy as Hn, orphansCarriedFrom as Hr, normalizeAwsTagsToCfn as Ht, makeSiblingClaimReader as I, StateError as Ia, stateBucketExistenceConfirmed as Ii, malformedStateRefusalMessage as In, hasReasonlessBaselineRefusal as Ir, isNamelessDynamicReferenceError as It, bold as J, retryClassificationText as Ja, producerRecordKey as Ji, repairMalformedOutputsForReadOnly as Jn, createAssetRedirectResolver as Jr, configIntegerRefusal as Jt, toFiniteNumber as K, markNonRetryable as Ka, injectiveKeyPrefix as Ki, refuseMalformedState as Kn, WorkGraph as Kr, coerceCfnInteger as Kt, planOrphanAdoption as L, SynthesisError as La, warnDeprecatedNoPrefixCliFlag as Li, refuseDivergentRecordRegionForDestroy as Ln, hasUnverifiableParameterRefusal as Lr, isUnboundTemplateParameter as Lt, refusesFinalSnapshot as M, ResourceTimeoutError as Ma, resolveSkipPrefix as Mi, malformedRenderedContainersWarning as Mn, CUSTOM_RESOURCE_RESPONSE_PREFIX as Mr, cfnRefValueFromPhysicalId as Mt, unsupportedFinalSnapshotError as N, ResourceUpdateNotSupportedError as Na, resolveStateBucketWithDefault as Ni, malformedResourceEntriesWarning as Nn, DEFAULT_STATE_PREFIX as Nr, coerceParameterTypedValue as Nt, buildFinalSnapshotIdentifier as O, MalformedProducerRecordRefusalError as Oa, getLegacyStateBucketName as Oi, malformedOrphansRefusalMessage as On, buildLockContentionMessage as Or, isTerminationProtectionPropagationError as Ot, makeCanonicalizePropertiesFn as P, StackHasActiveImportsError as Pa, resolveStateBucketWithDefaultAndSource as Pi, malformedResourcePropertiesWarning as Pn, exportNamesCarriedFrom as Pr, getAccountInfo as Pt, red as Q, canonicalizeRegion as Qi, safeRegion as Qn, BOOTSTRAP_MARKER_PREFIX as Qr, requireConfigArray as Qt, MULTI_REGION_RECREATE_BLOCKED_TYPES as R, formatError as Ra, ssmResolvedValueType as Ri, refuseMalformedNestedChildOutputs as Rn, importableOutputKeys as Rr, parameterTypeMayLoseSecretIdentity as Rt, computeParameterTaint as S, DeployCancelledError as Sa, stripControlChars as Si, hasReadableResources as Sn, scrubResourceRecord as Sr, isWaitAbandonedError as St, resourcesNamingDeclaredParameter as T, LocalInvokeBuildError as Ta, Synthesizer as Ti, malformedExportSourceWarning as Tn, rebuildClientForBucketRegion as Tr, deleteIndeterminateGuards as Tt, coerceWarmThroughput as U, isRetryableTransientError as Ua, uploadCfnTemplate as Ui, refuseMalformedResourceEntries as Un, shouldRetainResource as Ur, resolveExplicitPhysicalId as Ut, renderStatefulReason as V, withErrorHandling as Va, MIGRATE_TMP_PREFIX as Vi, refuseMalformedOutputs as Vn, orphansAfterRollback as Vr, WAFv2WebACLProvider as Vt, isWarmThroughputDecrease as W, isThrottlingError as Wa, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Wi, refuseMalformedResourcePropertiesForOrphan as Wn, AssetPublisher as Wr, assertRegionMatch as Wt, gray as X, safeStringify$1 as Xa, expectedOwnerParam as Xi, repairMalformedResourcePropertiesForReadOnly as Xn, rewriteTemplateAssetReferences as Xr, readConfigString as Xt, cyan as Y, describeAwsFailure as Ya, decodeListingKey as Yi, repairMalformedResourceEntriesForReadOnly as Yn, loadPublishableAssetManifest as Yr, configStringRefusal as Yt, green as Z, __exportAll as Za, PARTITION_TABLE as Zi, repairMalformedResourcesForReadOnly as Zn, AssetModeResolver as Zr, replayWarn as Zt, bagHoldsSecretExpression as _, AssetError as _a, partitionSensitiveEnv as _i, UNREADABLE_ORPHANS_CONTAINER_ROW as _n, maskSecretsInError as _r, endCommandInterruptScope as _t, DeploymentEventsStore as a, hasPlainPrototype$1 as aa, validateAssetBucketName as ai, s3BucketDomainName as an, TemplateParser as ar, secretBearingStateKeyWarning as at, mergeNoChangeOutputs as b, CrossAccountSecretRefusalError as ba, runDockerStreaming as bi, hasReadableOrphans as bn, recoverMaskedOutput as br, startInterruptWatch as bt, replayFailedOperations as c, absoluteAssemblyPathEscape as ca, buildDockerImage as ci, s3BucketWebsiteUrl as cn, STATE_SOURCED_READBACK_RULES as cr, IAMRoleProvider as ct, updatePartialMessage as d, clearBucketRegionCache as da, describeDockerCapturedOutput as di, applyCallerIdentityCredentials as dn, createSecretMasker as dr, ProviderRegistry as dt, AssemblyReader as ea, ensureAssetStorage as ei, requireConfigString as en, findActionableSilentDrops as er, collectDeclaredOutputNames as et, updatePartialReason as f, resolveBucketRegion as fa, describeDockerExecFailure as fi, callerEnvCredentials as fn, dynamicReferenceTokens as fr, wouldReturnToSdkProvider as ft, computeImplicitDeleteEdges as g, setAwsClients as ga, getDockerCmd as gi, STATE_RESOURCES_MALFORMED as gn, markSameGenerationBag as gr, beginCommandInterruptScope as gt, IMPLICIT_DELETE_DEPENDENCIES as h, resetAwsClients as ha, formatDockerLoginError as hi, INTRINSIC_KEYS as hn, isSingleDynamicReferenceToken as hr, maskerOrIdentity as ht, DeploymentEventsReader as i, hasOwnKey as ia, readBootstrapMarkerBody as ii, s3BucketArn as in, DagBuilder as ir, secretBearing as it, isFinalSnapshotError as j, ProvisioningError as ja, resolveCaptureObservedState as ji, malformedOutputsWarning as jn, shellQuote as jr, carriesFetchableDynamicReference as jt, ccRoutedFinalSnapshotError as k, NestedStackChildDirectDestroyError as ka, resolveApp as ki, malformedOrphansWarning as kn, forceQuitRecoveryClause as kr, IntrinsicFunctionResolver as kt, replayRollback as l, renderAssemblyPathEscape as la, resolveDockerContextDirectory as li, applyRoleArnIfSet as ln, TEMPLATE_SOURCED_RULES as lr, collectInlinePolicyNamesManagedBySiblings as lt, maskingRetryLogger as m, getAwsClients as ma, dockerSpawnEnvWithSensitive as mi, DiffCalculator as mn, identityKeyFor as mr, maskDeep as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, processStackMessages as na, isCrossRegionRedirect as ni, producerRegionsFromState as nn, describeTypeWithThrottleRetry as nr, exportAliasCollisionScrubWarning as nt, planFailedOps as o, nullPrototypeRecord as oa, validateContainerRepoName as oi, s3BucketDualStackDomainName as on, STATE_SOURCED_BASELINE_RULES as or, secretSafeKeyDisplay as ot, withResourceDeadline as p, AwsClients as pa, describeDockerFailure as pi, envCredentialsAreAssumedRole as pn, errorCauseChain as pr, createMaskedRetryLogger as pt, formatResourceLine as q, markRedactedCause as qa, producerCoordinateKey as qi, repairMalformedOrphansForReadOnly as qn, buildAssetRedirectMap as qr, configBooleanRefusal as qt, DeployEngine as r, defineOwnKey as ra, parseBootstrapMarker as ri, withSharedDrainBudget as rn, withRetry as rr, isExportAliasCollision as rt, planRollback as s, ownValue as sa, buildDenyExternalAccessPolicy as si, s3BucketRegionalDomainName as sn, STATE_SOURCED_CROSS_GENERATION_RULES as sr, getCurrentResourceSecrets as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, failedStageNote as ta, getBootstrapMarkerKey as ti, classifyReplaySecretRegion as tn, findSilentDropProperties as tr, collectPublishedOutputNames as tt, resolveReplacementOldType as u, resolveAssemblyPath as ua, warnManifestExecutable as ui, AWS_CREDENTIAL_ENV_KEYS as un, carriesSecretMask as ur, clearOnUpdateRemoval as ut, isSecretBearingReferenceString as v, CdkdError as va, redactDockerArgvValues as vi, UNREADABLE_RESOURCES_MAP_ROW as vn, maskSecretsInText as vr, interruptWatchListenerCount as vt, reachableDivergentParameters as w, IntrinsicResolutionRefusalError as wa, getDockerImageBySourceHash as wi, malformedExportNamesWarning as wn, S3StateBackend as wr, UNSPECIFIED_SKIP_REASON as wt, bindingSkippedOutputs as x, DependencyError as xa, escapeRegExp$1 as xi, hasReadableOutputs as xn, redactSecretsForState as xr, CloudControlProvider as xt, keptWholeReasonText as y, ConfigError as ya, runDockerForeground as yi, displayLogicalId as yn, recordMaskOnlyValue as yr, isInterruptedWaitError as yt, isStatefulRecreateTargetForReplace as z, isCdkdError as za, CFN_TEMPLATE_BODY_LIMIT as zi, refuseMalformedOrphans as zn, importableOutputs as zr, refStateLookupFromResource as zt };
48888
+ //# sourceMappingURL=deploy-engine-BZtFQu2S.js.map