@go-to-k/cdkd 0.290.47 → 0.290.49

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-DpaXQZoG.js";
2
+ import { n as isVersionOnlyInvocation, t as getCdkdVersion } from "./version-usurnP89.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-Ct6XLmfo.js");
77
+ const { buildProgram } = await import("./program-DGTp7UIn.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-DpaXQZoG.js";
3
+ import { t as getCdkdVersion } from "./version-usurnP89.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";
@@ -35,6 +35,7 @@ import { GetHostedZoneCommand, ListHostedZonesByNameCommand, Route53Client } fro
35
35
  import { DescribeListenersCommand, DescribeLoadBalancersCommand, ElasticLoadBalancingV2Client } from "@aws-sdk/client-elastic-load-balancing-v2";
36
36
  import { KMSClient, ListAliasesCommand } from "@aws-sdk/client-kms";
37
37
  import { readFile } from "fs/promises";
38
+ import { isAbsolute as isAbsolute$1, resolve as resolve$1 } from "path";
38
39
  import { CreateRepositoryCommand, DescribeImagesCommand as DescribeImagesCommand$1, DescribeRepositoriesCommand, ECRClient, GetAuthorizationTokenCommand, PutImageTagMutabilityCommand } from "@aws-sdk/client-ecr";
39
40
  import { inspect } from "node:util";
40
41
  import { hostname } from "os";
@@ -2952,7 +2953,10 @@ function resolveThroughLinks(target, hops = 0, climbs = 0) {
2952
2953
  * (`path.join`, NOT `path.resolve`), so the verdict is about the path the
2953
2954
  * caller will actually open. `join`'s handling of an absolute candidate makes
2954
2955
  * this arm strictly more permissive than a `resolve`-based one would be; an
2955
- * absolute value therefore stays a matter for each site's own tripwire.
2956
+ * absolute value therefore stays a matter for each site's own tripwire — and
2957
+ * for a site that HONOURS one, {@link absoluteAssemblyPathEscape} below is the
2958
+ * sibling that answers containment for it, because this function structurally
2959
+ * cannot.
2956
2960
  *
2957
2961
  * The SYMLINK arm exists because the lexical arm alone leaves an equivalent
2958
2962
  * hole: `cdk.out/link -> /etc` plus a candidate of `link/passwd` is lexically
@@ -3002,6 +3006,97 @@ function resolveAssemblyPath(dir, candidate, options) {
3002
3006
  };
3003
3007
  }
3004
3008
  /**
3009
+ * Whether an ALREADY-ABSOLUTE assembly-supplied path lies outside `bound`.
3010
+ *
3011
+ * {@link resolveAssemblyPath} cannot answer this, and the reason is structural
3012
+ * rather than an oversight: its lexical arm joins with `path.join`, which does
3013
+ * NOT honour a leading separator, so an absolute candidate is folded INTO the
3014
+ * directory (`join('/tmp/cdk.out', '/abs/foo')` is `/tmp/cdk.out/abs/foo`) and
3015
+ * the verdict describes a path no caller will open. A site that HONOURS an
3016
+ * absolute value needs the verdict about the value itself.
3017
+ *
3018
+ * The one caller is `cdkd local invoke` / `cdkd local start-api`'s
3019
+ * `Metadata['aws:asset:path']` (issue
3020
+ * [#3494](https://github.com/go-to-k/cdkd/issues/3494)). Those honour an
3021
+ * absolute path because `cdk synth --no-staging` emits one — CDK writes the
3022
+ * asset's absolute SOURCE directory under `aws:cdk:disable-asset-staging`,
3023
+ * usually outside the outdir — and they WARN rather than refuse when it leaves
3024
+ * the bound, so this returns a verdict rather than throwing.
3025
+ *
3026
+ * It exists HERE, beside `resolveAssemblyPath`, so the containment rule has one
3027
+ * spelling: it reuses this module's own {@link isInside} and
3028
+ * {@link resolveThroughLinks}, symlink arm included, rather than letting a
3029
+ * caller re-spell `path.relative` and drift from it.
3030
+ *
3031
+ * `bound` itself is NOT an escape, unlike in `resolveAssemblyPath`, where an
3032
+ * empty `path.relative` means "names the directory rather than a file inside
3033
+ * it". An asset path legitimately names a DIRECTORY, so a value equal to the
3034
+ * bound is inside it and reporting it as outside would be a false statement.
3035
+ *
3036
+ * **The real-path walk runs on the ACCEPTING side too, not only to find a
3037
+ * symlink escape.** The two paths arrive here INDEPENDENTLY — the bound from
3038
+ * `-a` or the assembly's own `directoryName`, the target from the manifest —
3039
+ * so they can be two spellings of one directory (`/var/…` and `/private/var/…`
3040
+ * on macOS). `resolveAssemblyPath` never meets that, its candidate being built
3041
+ * by joining onto the base. Left alone it warned "outside the assembly" about
3042
+ * an ordinary `cdk synth --no-staging` asset, and a warning that cries wolf is
3043
+ * worse than none.
3044
+ */
3045
+ function absoluteAssemblyPathEscape(bound, absolutePath) {
3046
+ const resolvedBound = path.resolve(bound);
3047
+ const target = path.resolve(absolutePath);
3048
+ const realBound = resolveThroughLinks(resolvedBound);
3049
+ const realTarget = resolveThroughLinks(target);
3050
+ if (!isInside(resolvedBound, target) && target !== resolvedBound) {
3051
+ if (realBound === void 0 || realTarget === void 0 || !isInside(realBound, realTarget) && realTarget !== realBound) return {
3052
+ contained: false,
3053
+ escape: "lexical",
3054
+ path: target
3055
+ };
3056
+ return;
3057
+ }
3058
+ if (realBound !== void 0) {
3059
+ if (realTarget !== void 0 && !isInside(realBound, realTarget) && realTarget !== realBound) return {
3060
+ contained: false,
3061
+ escape: "symlink",
3062
+ path: target,
3063
+ realPath: realTarget
3064
+ };
3065
+ }
3066
+ }
3067
+ /**
3068
+ * Whether `candidate` names the SAME DIRECTORY as `bound`, by any spelling.
3069
+ *
3070
+ * It lives here, beside {@link absoluteAssemblyPathEscape}, because it asks
3071
+ * that function's question one step further on and must use its machinery to
3072
+ * answer: `path.resolve` equality is a LEXICAL test, and the two paths reach a
3073
+ * caller independently — the bound from `-a` or the assembly's own
3074
+ * `directoryName`, the candidate from the manifest — so one directory has
3075
+ * several spellings. `/tmp/cdk.out` and `/private/tmp/cdk.out` on macOS;
3076
+ * `<cdk.out>/self` where `self` is a symlink to `cdk.out`; both at once.
3077
+ *
3078
+ * **A caller that re-spells this as `resolve(a) === resolve(b)` gets a test
3079
+ * that misses every spelling but one**, which is how
3080
+ * [#3532](https://github.com/go-to-k/cdkd/issues/3532)'s asset resolvers first
3081
+ * shipped their whole-assembly warning: `absoluteAssemblyPathEscape`
3082
+ * exonerates a second spelling of the bound as INSIDE — correctly — and the
3083
+ * lexical equality beside it then said "not the bound", so the one value
3084
+ * meaning "the entire assembly is this asset" passed both tests in silence.
3085
+ * Ask this instead; do not re-derive it.
3086
+ *
3087
+ * Conservative on failure: an unresolvable side answers from the lexical
3088
+ * comparison alone, so it can only ever say "not the same", never wrongly
3089
+ * claim identity.
3090
+ */
3091
+ function namesTheSameDirectory(bound, candidate) {
3092
+ const resolvedBound = path.resolve(bound);
3093
+ const target = path.resolve(candidate);
3094
+ if (target === resolvedBound) return true;
3095
+ const realBound = resolveThroughLinks(resolvedBound);
3096
+ const realTarget = resolveThroughLinks(target);
3097
+ return realBound !== void 0 && realTarget !== void 0 && realBound === realTarget;
3098
+ }
3099
+ /**
3005
3100
  * The shared tail of every containment refusal: what the value resolved to,
3006
3101
  * what it escaped, and why that means the assembly is not CDK-generated. Each
3007
3102
  * call site supplies its own subject ("Stack 'X' has templateFile='...' which
@@ -6970,6 +7065,36 @@ function setsEqual(a, b) {
6970
7065
  return true;
6971
7066
  }
6972
7067
 
7068
+ //#endregion
7069
+ //#region src/assets/absolute-asset-path-warning.ts
7070
+ /**
7071
+ * The one OTHER thing worth a line: the source resolves to the app's output
7072
+ * directory ITSELF, so the sink gets the whole assembly — every template and
7073
+ * every staged asset — rather than one asset directory.
7074
+ *
7075
+ * It is a WARNING and not a refusal for the same reason its sibling is, and it
7076
+ * must not be silent for a reason the sibling does not share: both resolvers
7077
+ * accept this value (issue
7078
+ * [#3532](https://github.com/go-to-k/cdkd/issues/3532)) because the absolute
7079
+ * arm treats the bound as inside and the two arms must agree, and because the
7080
+ * local twin legitimately bind-mounts a directory. But on THIS layer the sink
7081
+ * is an upload or an image build, so "package the whole output directory and
7082
+ * send it to a bucket this manifest named" is exactly the sentence a user
7083
+ * needs and exactly the one an accept-silently arm withholds. No real `cdk
7084
+ * synth` emits `source.path: "."`, so this costs a legitimate run nothing.
7085
+ */
7086
+ function warnWholeAssemblyAsSource(w) {
7087
+ getLogger().child("assets").warn(`${w.subject} has ${w.field} naming the output directory ITSELF: '${displaySafe(w.outdir)}'. cdkd will ${w.sink} — that is the WHOLE assembly, every template and every staged asset, not one asset directory. No CDK synth emits this, so treat this assembly as untrusted unless you wrote that path yourself.`);
7088
+ }
7089
+ /**
7090
+ * Emit it. Deliberately `warn`, never `throw`: the one producer of this shape
7091
+ * is a real `cdk synth --no-staging`, and refusing rejects the output of a
7092
+ * documented CDK CLI flag.
7093
+ */
7094
+ function warnAbsoluteAssetPath(w) {
7095
+ getLogger().child("assets").warn(`${w.subject} has an absolute ${w.field} pointing outside the assembly: '${displaySafe(w.absolute)}'` + (w.escape.escape === "symlink" ? ` (through a symbolic link to '${displaySafe(w.escape.realPath)}')` : "") + `. cdkd will ${w.sink}. This is what cdk synth --no-staging emits, and is expected for it; if you did not synthesize with that flag, treat this assembly as untrusted: an absolute source path is honoured as written, so nothing but this line stands between it and that step.`);
7096
+ }
7097
+
6973
7098
  //#endregion
6974
7099
  //#region src/assets/asset-manifest-loader.ts
6975
7100
  /**
@@ -6984,9 +7109,80 @@ function setsEqual(a, b) {
6984
7109
  * primitive with the caller's own credentials, which is the harm the manifest
6985
7110
  * FILE's own containment check cites. One function so the loader and the
6986
7111
  * publisher cannot disagree about which file is published.
6987
- */
6988
- function resolveFileAssetSourcePath(manifestDir, asset, assetOutdir = manifestDir) {
7112
+ *
7113
+ * **An ABSOLUTE `source.path` is HONOURED, and warned about when it leaves
7114
+ * `assetOutdir`** (issue
7115
+ * [#3532](https://github.com/go-to-k/cdkd/issues/3532)). It used to be neither
7116
+ * honoured nor refused: `resolveAssemblyPath` joins with `path.join`, which
7117
+ * does not honour a leading separator, so an absolute value was folded INTO
7118
+ * the outdir, read as CONTAINED, and died later at `statSync` with an `ENOENT`
7119
+ * naming a path that exists nowhere and that the user never wrote. Three
7120
+ * things decide the arm:
7121
+ *
7122
+ * - `cdk synth --no-staging` emits exactly this shape. Under
7123
+ * `aws:cdk:disable-asset-staging` upstream `AssetStaging.relativeStagedPath`
7124
+ * returns the staged path verbatim, so every `files[*].source.path` is the
7125
+ * asset's absolute SOURCE directory, normally outside the outdir. Refusing it
7126
+ * rejects the output of a documented CDK CLI flag.
7127
+ * - Upstream `cdk deploy` resolves the field with `path.resolve(manifestDir,
7128
+ * p)`, which honours an absolute value and publishes it. Refusing here would
7129
+ * make cdkd diverge from the CLI it is meant to complement.
7130
+ * - So for an ABSOLUTE value the warning is the whole signal, and no
7131
+ * containment boundary is left.
7132
+ *
7133
+ * **State plainly what that gave up, because the first version of this comment
7134
+ * did not and was wrong.** It copied the local twin's line — "the relative arm
7135
+ * buys nothing against an adversary, who would write the absolute spelling" —
7136
+ * which is TRUE there and FALSE here, and the difference is the whole point.
7137
+ * `resolveAssetCodeDirectory` already honoured absolute paths before
7138
+ * [#3494](https://github.com/go-to-k/cdkd/issues/3494), so that change only
7139
+ * added a warning to an open door. HERE the door was SHUT: measured on
7140
+ * `path.resolve(path.join(base, c))`, `/Users/victim/.aws`, `/etc/passwd`,
7141
+ * `//etc/passwd` and `/etc/./passwd` all folded INSIDE the outdir and died at
7142
+ * `statSync`, `/../etc/passwd` was refused lexically, and a planted symlink
7143
+ * was refused by the symlink arm — so NO spelling reached an arbitrary host
7144
+ * file. Accidentally, but completely.
7145
+ *
7146
+ * What this opens, therefore, is real and new: a hand-written manifest can now
7147
+ * have any readable directory zipped to a bucket it names, with the operator's
7148
+ * credentials, gated only by the warning. It is accepted because upstream
7149
+ * `@aws-cdk/cdk-assets-lib` does the same with no containment at all
7150
+ * (`path.resolve(this.workDir, source.path)`, `private/handlers/files.js`), so
7151
+ * cdkd stays strictly MORE protective than the CLI it complements while still
7152
+ * running what `cdk synth --no-staging` emits. The relative arm still catches
7153
+ * an accidental or legacy `..` and costs nothing, which is why it stays — but
7154
+ * it is no longer a boundary against anyone who chose the value. The docs say
7155
+ * this to users in the same words; do not soften either copy.
7156
+ */
7157
+ function resolveFileAssetSourcePath(manifestDir, asset, assetOutdir, sink) {
7158
+ if (isAbsolute$1(asset.source.path)) {
7159
+ const absolute = resolve$1(asset.source.path);
7160
+ const escape = absoluteAssemblyPathEscape(assetOutdir, absolute);
7161
+ if (escape !== void 0) warnAbsoluteAssetPath({
7162
+ subject: `File asset '${displaySafe(asset.displayName)}'`,
7163
+ field: "source.path",
7164
+ absolute,
7165
+ escape,
7166
+ sink
7167
+ });
7168
+ else if (namesTheSameDirectory(assetOutdir, absolute)) warnWholeAssemblyAsSource({
7169
+ subject: `File asset '${displaySafe(asset.displayName)}'`,
7170
+ field: "source.path",
7171
+ outdir: absolute,
7172
+ sink
7173
+ });
7174
+ return absolute;
7175
+ }
6989
7176
  const resolved = resolveAssemblyPath(manifestDir, asset.source.path, { containWithin: assetOutdir });
7177
+ if (!resolved.contained && namesTheSameDirectory(assetOutdir, resolved.path)) {
7178
+ warnWholeAssemblyAsSource({
7179
+ subject: `File asset '${displaySafe(asset.displayName)}'`,
7180
+ field: "source.path",
7181
+ outdir: resolved.path,
7182
+ sink
7183
+ });
7184
+ return resolved.path;
7185
+ }
6990
7186
  if (!resolved.contained) throw new Error(`File asset '${displaySafe(asset.displayName)}' has source.path='${displaySafe(asset.source.path)}' which ${renderAssemblyPathEscape(resolved, assetOutdir, "publish it")}`);
6991
7187
  return resolved.path;
6992
7188
  }
@@ -7060,18 +7256,26 @@ var AssetManifestLoader = class {
7060
7256
  /**
7061
7257
  * Get asset source path (absolute path)
7062
7258
  *
7063
- * Refuses a `source.path` resolving outside `cdkOutputDir` (issue
7064
- * [#3489](https://github.com/go-to-k/cdkd/issues/3489)). The manifest is
7065
- * assembly-supplied and `cdkd deploy -a <dir>` consumes a pre-synthesized
7066
- * one, so a `source.path` of `../../../home/<user>/.aws` would otherwise be
7067
- * packaged and uploaded to a bucket the SAME manifest names.
7259
+ * Refuses a RELATIVE `source.path` resolving outside `assetOutdir` (issue
7260
+ * [#3489](https://github.com/go-to-k/cdkd/issues/3489)); an ABSOLUTE one is
7261
+ * honoured and warned about instead (issue
7262
+ * [#3532](https://github.com/go-to-k/cdkd/issues/3532)) — see
7263
+ * {@link resolveFileAssetSourcePath} for why the two arms differ. The
7264
+ * manifest is assembly-supplied and `cdkd deploy -a <dir>` consumes a
7265
+ * pre-synthesized one, so a `source.path` of `../../../home/<user>/.aws`
7266
+ * would otherwise be packaged and uploaded to a bucket the SAME manifest
7267
+ * names.
7068
7268
  *
7069
7269
  * @param cdkOutputDir CDK output directory
7070
7270
  * @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.
7071
7275
  * @returns Absolute path to asset source
7072
7276
  */
7073
- getAssetSourcePath(cdkOutputDir, asset, assetOutdir) {
7074
- return resolveFileAssetSourcePath(cdkOutputDir, asset, assetOutdir ?? cdkOutputDir);
7277
+ getAssetSourcePath(cdkOutputDir, asset, assetOutdir, sink) {
7278
+ return resolveFileAssetSourcePath(cdkOutputDir, asset, assetOutdir, sink);
7075
7279
  }
7076
7280
  /**
7077
7281
  * Resolve asset destination values (replace ${AWS::AccountId}, ${AWS::Region}, etc.)
@@ -7161,10 +7365,16 @@ var FileAssetPublisher = class {
7161
7365
  * @param cdkOutputDir CDK output directory (cdk.out)
7162
7366
  * @param accountId AWS account ID
7163
7367
  * @param region AWS region
7164
- * @param profile AWS profile (optional)
7368
+ *
7369
+ * There is deliberately NO `profile` parameter. It was unused, and being
7370
+ * OPTIONAL and last it let a pre-go-to-k/cdkd#3532 call
7371
+ * `(…, accountId, region, profile)` keep compiling with the profile NAME
7372
+ * bound to `assetOutdir` — the required bound catches a DROP, not a SWAP,
7373
+ * so the parameter that made the swap expressible is gone instead.
7165
7374
  */
7166
- async publish(assetHash, asset, cdkOutputDir, accountId, region, _profile, assetOutdir) {
7167
- const sourcePath = resolveFileAssetSourcePath(cdkOutputDir, asset, assetOutdir ?? cdkOutputDir);
7375
+ async publish(assetHash, asset, cdkOutputDir, accountId, region, assetOutdir) {
7376
+ 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");
7168
7378
  for (const [, dest] of Object.entries(asset.destinations)) {
7169
7379
  const bucketName = this.resolvePlaceholders(dest.bucketName, accountId, region);
7170
7380
  const objectKey = this.resolvePlaceholders(dest.objectKey, accountId, region);
@@ -8498,9 +8708,12 @@ function describeDockerCapturedOutput(error, args, fallback) {
8498
8708
  //#endregion
8499
8709
  //#region src/assets/docker-build.ts
8500
8710
  /**
8501
- * Where a Docker asset's build context lives, refusing a `source.directory`
8502
- * that resolves outside `cdkOutDir` (issue
8503
- * [#3489](https://github.com/go-to-k/cdkd/issues/3489)).
8711
+ * Where a Docker asset's build context lives, refusing a RELATIVE
8712
+ * `source.directory` that resolves outside `assetOutdir` (issue
8713
+ * [#3489](https://github.com/go-to-k/cdkd/issues/3489)) and HONOURING an
8714
+ * ABSOLUTE one with a warning when it leaves that bound (issue
8715
+ * [#3532](https://github.com/go-to-k/cdkd/issues/3532); the reasoning is in
8716
+ * `resolveFileAssetSourcePath`, and the two must not diverge).
8504
8717
  *
8505
8718
  * The field is assembly-supplied and used BOTH as the executable's cwd and as
8506
8719
  * the `docker build` cwd, so an escaping value sends a directory from outside
@@ -8514,11 +8727,42 @@ function describeDockerCapturedOutput(error, args, fallback) {
8514
8727
  * Twin of `resolveFileAssetSourcePath` and `resolveVerboseTemplatePath`.
8515
8728
  * Exported for unit testing.
8516
8729
  */
8517
- function resolveDockerContextDirectory(manifestDir, directory, wrapError, assetOutdir = manifestDir) {
8730
+ function resolveDockerContextDirectory(manifestDir, directory, wrapError, assetOutdir, sink, assetId) {
8731
+ if (isAbsolute$1(directory)) {
8732
+ const absolute = resolve$1(directory);
8733
+ const escape = absoluteAssemblyPathEscape(assetOutdir, absolute);
8734
+ if (escape !== void 0) warnAbsoluteAssetPath({
8735
+ subject: dockerSubject(assetId),
8736
+ field: "source.directory",
8737
+ absolute,
8738
+ escape,
8739
+ sink
8740
+ });
8741
+ else if (namesTheSameDirectory(assetOutdir, absolute)) warnWholeAssemblyAsSource({
8742
+ subject: dockerSubject(assetId),
8743
+ field: "source.directory",
8744
+ outdir: absolute,
8745
+ sink
8746
+ });
8747
+ return absolute;
8748
+ }
8518
8749
  const resolved = resolveAssemblyPath(manifestDir, directory, { containWithin: assetOutdir });
8750
+ if (!resolved.contained && namesTheSameDirectory(assetOutdir, resolved.path)) {
8751
+ warnWholeAssemblyAsSource({
8752
+ subject: dockerSubject(assetId),
8753
+ field: "source.directory",
8754
+ outdir: resolved.path,
8755
+ sink
8756
+ });
8757
+ return resolved.path;
8758
+ }
8519
8759
  if (!resolved.contained) throw wrapError(`asset source.directory='${displaySafe(directory)}' which ${renderAssemblyPathEscape(resolved, assetOutdir, "build it")}`);
8520
8760
  return resolved.path;
8521
8761
  }
8762
+ /** One spelling of the warning subject, so the two arms cannot drift. */
8763
+ function dockerSubject(assetId) {
8764
+ return assetId === void 0 ? "A Docker asset" : `Docker asset '${displaySafe(assetId)}'`;
8765
+ }
8522
8766
  /**
8523
8767
  * Build a Docker image from a CDK asset source. Returns the local image
8524
8768
  * tag the caller should use for `docker tag` / `docker push` (publisher)
@@ -8537,11 +8781,11 @@ function resolveDockerContextDirectory(manifestDir, directory, wrapError, assetO
8537
8781
  async function buildDockerImage(asset, cdkOutDir, options) {
8538
8782
  const source = asset.source;
8539
8783
  const logger = getLogger().child("docker-build");
8540
- const contextDirectory = (directory) => resolveDockerContextDirectory(cdkOutDir, directory, options.wrapError, options.assetOutdir);
8784
+ const contextDirectory = (directory, sink) => resolveDockerContextDirectory(cdkOutDir, directory, options.wrapError, options.assetOutdir ?? cdkOutDir, sink, options.tag);
8541
8785
  if (source.executable && source.executable.length > 0) {
8542
8786
  const [cmd, ...args] = source.executable;
8543
8787
  if (!cmd) throw options.wrapError("asset source.executable[] is empty");
8544
- const cwd = source.directory ? contextDirectory(source.directory) : cdkOutDir;
8788
+ const cwd = source.directory ? contextDirectory(source.directory, "run this asset's source.executable with that directory as its working directory") : cdkOutDir;
8545
8789
  const shownExecutable = redactDockerArgvValues(source.executable).join(" ");
8546
8790
  logger.debug(`Building Docker image via executable: ${shownExecutable} (cwd=${cwd})`);
8547
8791
  let result;
@@ -8565,7 +8809,7 @@ async function buildDockerImage(asset, cdkOutDir, options) {
8565
8809
  }
8566
8810
  if (!options.tag) throw options.wrapError("buildDockerImage(directory mode) requires options.tag");
8567
8811
  const buildArgs = buildDockerBuildCommand(source, options.tag, options.platform);
8568
- const contextDir = contextDirectory(source.directory);
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");
8569
8813
  buildArgs.push(".");
8570
8814
  logger.debug(`${getDockerCmd()} ${redactDockerArgvValues(buildArgs).join(" ")} (cwd=${displaySafe(contextDir)})`);
8571
8815
  try {
@@ -8680,7 +8924,7 @@ var DockerAssetPublisher = class {
8680
8924
  continue;
8681
8925
  }
8682
8926
  const localTag = `cdkd-asset-${assetHash}`;
8683
- await this.buildImage(asset, cdkOutputDir, localTag);
8927
+ await this.buildImage(asset, cdkOutputDir, localTag, cdkOutputDir);
8684
8928
  await this.tagAndPushWithLazyLogin(client, localTag, ecrUri, accountId, destRegion);
8685
8929
  this.logger.debug(`✅ Published: ${ecrUri}`);
8686
8930
  } finally {
@@ -8757,7 +9001,7 @@ var DockerAssetPublisher = class {
8757
9001
  async buildImage(asset, cdkOutputDir, tag, assetOutdir) {
8758
9002
  const actualTag = await buildDockerImage(asset, cdkOutputDir, {
8759
9003
  tag,
8760
- ...assetOutdir !== void 0 && { assetOutdir },
9004
+ assetOutdir,
8761
9005
  wrapError: (stderr) => new AssetError(`Docker build failed: ${stderr}`)
8762
9006
  });
8763
9007
  if (actualTag !== tag) {
@@ -10149,8 +10393,7 @@ var AssetPublisher = class {
10149
10393
  cdkOutputDir,
10150
10394
  assetOutdir,
10151
10395
  accountId: options.accountId,
10152
- region: options.region,
10153
- ...options.profile && { profile: options.profile }
10396
+ region: options.region
10154
10397
  }
10155
10398
  });
10156
10399
  nodeIds.push(nodeId);
@@ -10197,7 +10440,7 @@ var AssetPublisher = class {
10197
10440
  */
10198
10441
  async executeNode(node) {
10199
10442
  const data = node.data;
10200
- if (data.kind === "file") await this.filePublisher.publish(data.hash, data.asset, data.cdkOutputDir, data.accountId, data.region, data.profile, data.assetOutdir);
10443
+ if (data.kind === "file") await this.filePublisher.publish(data.hash, data.asset, data.cdkOutputDir, data.accountId, data.region, data.assetOutdir);
10201
10444
  else if (data.kind === "docker-build") await this.dockerPublisher.build(data.asset, data.cdkOutputDir, data.localTag, data.assetOutdir);
10202
10445
  else if (data.kind === "docker-publish") await this.dockerPublisher.push(data.asset, data.accountId, data.region, data.localTag);
10203
10446
  this.logger.debug(`✅ ${node.id}`);
@@ -34619,7 +34862,7 @@ var CloudControlProvider = class {
34619
34862
  const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
34620
34863
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
34621
34864
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
34622
- const { ASGProvider } = await import("./asg-provider-LZQSJyN2.js").then((n) => n.n);
34865
+ const { ASGProvider } = await import("./asg-provider-06Q6iut6.js").then((n) => n.n);
34623
34866
  const asgProvider = new ASGProvider();
34624
34867
  return withIndeterminateGuard(await asgProvider.delete(logicalId, physicalId, resourceType, _properties, context), indeterminateGuard);
34625
34868
  }
@@ -48328,5 +48571,5 @@ var DeployEngine = class DeployEngine {
48328
48571
  };
48329
48572
 
48330
48573
  //#endregion
48331
- export { yellow as $, AssemblyReader as $i, safeStackName as $n, assertAssetBucketRegion as $r, requireConfigObject as $t, createPreDeleteFinalSnapshot as A, ResourceTimeoutError as Aa, resolveCaptureObservedState as Ai, malformedOutputsRefusalMessage as An, formatLockExpiry as Ar, carriesDynamicReference as At, isStatefulRecreateTargetSync as B, isMarkedNonRetryable as Ba, MIGRATE_TMP_PREFIX as Bi, refuseMalformedOrphansForDestroy as Bn, isReadableBag as Br, isSettledInstanceState as Bt, namesAnyDeclaredParameter as C, LocalInvokeBuildError as Ca, getDockerImageBySourceHash as Ci, isReadableResourceEntry as Cn, LockManager as Cr, slowCcOperationTimeoutMs as Ct, PRE_DELETE_SNAPSHOT_TYPES as D, NestedStackChildDirectDestroyError as Da, getLegacyStateBucketName as Di, malformedOrphanRecordsWarning as Dn, buildForceUnlockCommand as Dr, disableInstanceApiTermination as Dt, ATOMIC_FINAL_SNAPSHOT_TYPES as E, MalformedProducerRecordRefusalError as Ea, getDefaultStateBucketName as Ei, malformedLocalOutputsWarning as En, UNREPRODUCIBLE_LOCK_CLAUSE as Er, deleteSkipReason as Et, extractDeploymentEventError as F, SynthesisError as Fa, stateBucketExistenceConfirmed as Fi, malformedResourcesWarning as Fn, hasReadableExportSet as Fr, isImpossibleEmptyStoredAttribute as Ft, toCfnInteger as G, markRedactedCause as Ga, injectiveKeyPrefix as Gi, refuseMalformedResourcesForDestroy as Gn, stringifyValue as Gr, coerceCfnBoolean as Gt, WARM_THROUGHPUT_MEMBERS as H, isThrottlingError as Ha, uploadCfnTemplate as Hi, refuseMalformedOutputsForDestroy as Hn, orphansCarriedFrom as Hr, normalizeAwsTagsToCfn as Ht, makeSiblingClaimReader as I, formatError as Ia, warnDeprecatedNoPrefixCliFlag as Ii, malformedStateRefusalMessage as In, hasReasonlessBaselineRefusal as Ir, isNamelessDynamicReferenceError as It, bold as J, safeStringify$1 as Ja, decodeListingKey as Ji, repairMalformedOutputsForReadOnly as Jn, createAssetRedirectResolver as Jr, configIntegerRefusal as Jt, toFiniteNumber as K, retryClassificationText as Ka, producerCoordinateKey as Ki, refuseMalformedState as Kn, WorkGraph as Kr, coerceCfnInteger as Kt, planOrphanAdoption as L, isCdkdError as La, ssmResolvedValueType as Li, refuseDivergentRecordRegionForDestroy as Ln, hasUnverifiableParameterRefusal as Lr, isUnboundTemplateParameter as Lt, refusesFinalSnapshot as M, StackHasActiveImportsError as Ma, resolveStateBucketWithDefault as Mi, malformedRenderedContainersWarning as Mn, CUSTOM_RESOURCE_RESPONSE_PREFIX as Mr, cfnRefValueFromPhysicalId as Mt, unsupportedFinalSnapshotError as N, StackTerminationProtectionError as Na, resolveStateBucketWithDefaultAndSource as Ni, malformedResourceEntriesWarning as Nn, DEFAULT_STATE_PREFIX as Nr, coerceParameterTypedValue as Nt, buildFinalSnapshotIdentifier as O, PartialFailureError as Oa, resolveApp as Oi, malformedOrphansRefusalMessage as On, buildLockContentionMessage as Or, isTerminationProtectionPropagationError as Ot, makeCanonicalizePropertiesFn as P, StateError 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, normalizeAwsError as Ra, CFN_TEMPLATE_BODY_LIMIT as Ri, refuseMalformedNestedChildOutputs as Rn, importableOutputKeys as Rr, parameterTypeMayLoseSecretIdentity as Rt, computeParameterTaint as S, IntrinsicResolutionRefusalError as Sa, AssetManifestLoader as Si, hasReadableResources as Sn, scrubResourceRecord as Sr, isWaitAbandonedError as St, resourcesNamingDeclaredParameter as T, LockError as Ta, synthesisStatusMessage as Ti, malformedExportSourceWarning as Tn, rebuildClientForBucketRegion as Tr, deleteIndeterminateGuards as Tt, coerceWarmThroughput as U, isTransientServerError as Ua, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Ui, refuseMalformedResourceEntries as Un, shouldRetainResource as Ur, resolveExplicitPhysicalId as Ut, renderStatefulReason as V, isRetryableTransientError as Va, findLargeInlineResources as Vi, refuseMalformedOutputs as Vn, orphansAfterRollback as Vr, WAFv2WebACLProvider as Vt, isWarmThroughputDecrease as W, markNonRetryable as Wa, injectiveKey as Wi, refuseMalformedResourcePropertiesForOrphan as Wn, AssetPublisher as Wr, assertRegionMatch as Wt, gray as X, PARTITION_TABLE as Xi, repairMalformedResourcePropertiesForReadOnly as Xn, rewriteTemplateAssetReferences as Xr, readConfigString as Xt, cyan as Y, __exportAll 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 _, ConfigError 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, DeployCancelledError as ba, escapeRegExp$1 as bi, hasReadableOrphans as bn, recoverMaskedOutput as br, startInterruptWatch as bt, replayFailedOperations as c, resolveAssemblyPath as ca, buildDockerImage as ci, s3BucketWebsiteUrl as cn, STATE_SOURCED_READBACK_RULES as cr, IAMRoleProvider as ct, updatePartialMessage as d, AwsClients 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, getAwsClients as fa, describeDockerFailure as fi, callerEnvCredentials as fn, dynamicReferenceTokens as fr, wouldReturnToSdkProvider as ft, computeImplicitDeleteEdges as g, CdkdError as ga, partitionSensitiveEnv as gi, STATE_RESOURCES_MALFORMED as gn, markSameGenerationBag as gr, beginCommandInterruptScope as gt, IMPLICIT_DELETE_DEPENDENCIES as h, AssetError 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, ResourceUpdateNotSupportedError as ja, resolveSkipPrefix as ji, malformedOutputsWarning as jn, shellQuote as jr, carriesFetchableDynamicReference as jt, ccRoutedFinalSnapshotError as k, ProvisioningError as ka, resolveAutoAssetStorage as ki, malformedOrphansWarning as kn, forceQuitRecoveryClause as kr, IntrinsicFunctionResolver as kt, replayRollback as l, clearBucketRegionCache as la, resolveDockerContextDirectory as li, applyRoleArnIfSet as ln, TEMPLATE_SOURCED_RULES as lr, collectInlinePolicyNamesManagedBySiblings as lt, maskingRetryLogger as m, setAwsClients 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, resetAwsClients as pa, dockerSpawnEnvWithSensitive as pi, envCredentialsAreAssumedRole as pn, errorCauseChain as pr, createMaskedRetryLogger as pt, formatResourceLine as q, describeAwsFailure 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, renderAssemblyPathEscape 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, resolveBucketRegion as ua, describeDockerCapturedOutput as ui, AWS_CREDENTIAL_ENV_KEYS as un, carriesSecretMask as ur, clearOnUpdateRemoval as ut, isSecretBearingReferenceString as v, CrossAccountSecretRefusalError as va, runDockerForeground as vi, UNREADABLE_RESOURCES_MAP_ROW as vn, maskSecretsInText as vr, interruptWatchListenerCount as vt, reachableDivergentParameters as w, LocalStartServiceError as wa, Synthesizer as wi, malformedExportNamesWarning as wn, S3StateBackend as wr, UNSPECIFIED_SKIP_REASON as wt, bindingSkippedOutputs as x, DynamicReferenceRegionAmbiguousError as xa, stripControlChars as xi, hasReadableOutputs as xn, redactSecretsForState as xr, CloudControlProvider as xt, keptWholeReasonText as y, DependencyError as ya, runDockerStreaming as yi, displayLogicalId as yn, recordMaskOnlyValue as yr, isInterruptedWaitError as yt, isStatefulRecreateTargetForReplace as z, withErrorHandling as za, CFN_TEMPLATE_URL_LIMIT as zi, refuseMalformedOrphans as zn, importableOutputs as zr, refStateLookupFromResource as zt };
48332
- //# sourceMappingURL=deploy-engine-DzSrzD0b.js.map
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