@go-to-k/cdkd 0.115.0 → 0.115.2

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.
@@ -15,12 +15,11 @@ import { GetParameterCommand, SSMClient } from "@aws-sdk/client-ssm";
15
15
  import { GetCloudFrontOriginAccessIdentityCommand } from "@aws-sdk/client-cloudfront";
16
16
  import { createReadStream, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
17
17
  import { basename, join, resolve } from "node:path";
18
- import { execFile, spawn } from "node:child_process";
18
+ import { spawn } from "node:child_process";
19
19
  import { homedir, tmpdir } from "node:os";
20
20
  import { GetHostedZoneCommand, ListHostedZonesByNameCommand, Route53Client } from "@aws-sdk/client-route-53";
21
21
  import { DescribeListenersCommand, DescribeLoadBalancersCommand, ElasticLoadBalancingV2Client } from "@aws-sdk/client-elastic-load-balancing-v2";
22
22
  import { KMSClient, ListAliasesCommand } from "@aws-sdk/client-kms";
23
- import { promisify } from "node:util";
24
23
  import { DescribeImagesCommand as DescribeImagesCommand$1, ECRClient, GetAuthorizationTokenCommand } from "@aws-sdk/client-ecr";
25
24
  import { hostname } from "os";
26
25
  import graphlib from "graphlib";
@@ -2796,82 +2795,202 @@ var FileAssetPublisher = class {
2796
2795
  }
2797
2796
  };
2798
2797
 
2798
+ //#endregion
2799
+ //#region src/utils/docker-cmd.ts
2800
+ /**
2801
+ * Shared helpers for invoking the docker-compatible CLI binary across cdkd.
2802
+ *
2803
+ * Two parity decisions with `aws-cdk-cli`'s `cdk-assets-lib`:
2804
+ * 1. `CDK_DOCKER` env var swaps the binary so podman / finch users can
2805
+ * run cdkd without code changes (`CDK_DOCKER=podman cdkd deploy`).
2806
+ * 2. `runDockerStreaming` uses streaming spawn rather than `execFile`'s
2807
+ * buffered `maxBuffer` ceiling. BuildKit's progress output can run to
2808
+ * tens of MB on multi-stage builds with `# syntax=docker/dockerfile:1`
2809
+ * frontend downloads + heredoc / `RUN --mount=...` features; the 50 MB
2810
+ * `execFile` ceiling cdkd used to set silently killed those builds
2811
+ * with `ERR_CHILD_PROCESS_STDIO_MAXBUFFER`.
2812
+ *
2813
+ * Output handling: stdout/stderr are collected in memory unconditionally so
2814
+ * `runDockerStreaming` can return them to the caller for error wrapping.
2815
+ * When the logger is at debug level (i.e. the user passed `--verbose`),
2816
+ * the chunks are ALSO mirrored to `process.stdout` / `process.stderr` so
2817
+ * the user sees live build progress.
2818
+ */
2819
+ /**
2820
+ * Return the docker-compatible CLI binary to invoke. Matches CDK CLI:
2821
+ * `CDK_DOCKER` env var overrides the default `docker` so users on
2822
+ * podman / finch / nerdctl can swap without changing cdkd code.
2823
+ */
2824
+ function getDockerCmd() {
2825
+ const override = process.env["CDK_DOCKER"];
2826
+ return override && override.length > 0 ? override : "docker";
2827
+ }
2828
+ /**
2829
+ * Spawn a docker-compatible CLI binary (resolved via `getDockerCmd`) with
2830
+ * streaming I/O. Collects stdout/stderr in memory and resolves with both
2831
+ * on exit code 0; rejects with a `SpawnError` carrying both streams on any
2832
+ * non-zero exit so the caller can wrap with its own error class without
2833
+ * losing the upstream output.
2834
+ *
2835
+ * No `maxBuffer` ceiling: BuildKit progress output frequently exceeds the
2836
+ * `child_process.execFile` default of 1 MB (cdkd previously bumped to 50 MB
2837
+ * but BuildKit + frontend pulls can still exceed that on first-time builds).
2838
+ */
2839
+ async function runDockerStreaming(args, options = {}) {
2840
+ return spawnStreaming(getDockerCmd(), args, options);
2841
+ }
2842
+ /**
2843
+ * Generic streaming spawn — used by `runDockerStreaming` AND by the
2844
+ * `executable` source mode in `docker-build.ts` (which runs an arbitrary
2845
+ * user-supplied build command, not docker).
2846
+ */
2847
+ async function spawnStreaming(cmd, args, options = {}) {
2848
+ const streamLive = options.streamLive ?? getLogger().getLevel() === "debug";
2849
+ const env = options.env ? mergeEnv(options.env) : void 0;
2850
+ return new Promise((resolve, reject) => {
2851
+ const child = spawn(cmd, args, {
2852
+ cwd: options.cwd,
2853
+ env,
2854
+ stdio: [
2855
+ options.input ? "pipe" : "ignore",
2856
+ "pipe",
2857
+ "pipe"
2858
+ ]
2859
+ });
2860
+ const stdoutChunks = [];
2861
+ const stderrChunks = [];
2862
+ child.stdout.on("data", (chunk) => {
2863
+ stdoutChunks.push(chunk);
2864
+ if (streamLive) process.stdout.write(chunk);
2865
+ });
2866
+ child.stderr.on("data", (chunk) => {
2867
+ stderrChunks.push(chunk);
2868
+ if (streamLive) process.stderr.write(chunk);
2869
+ });
2870
+ child.once("error", (err) => {
2871
+ if (err.code === "ENOENT") {
2872
+ const usingOverride = process.env["CDK_DOCKER"] === cmd && cmd !== "docker";
2873
+ reject(/* @__PURE__ */ new Error(usingOverride ? `Failed to find and execute '${cmd}' (resolved via CDK_DOCKER). Install '${cmd}' or unset CDK_DOCKER to fall back to 'docker'.` : `Failed to find and execute '${cmd}'. Install Docker (or set the 'CDK_DOCKER' environment variable to a compatible binary such as podman / finch).`));
2874
+ } else reject(err);
2875
+ });
2876
+ child.once("close", (code) => {
2877
+ const stdout = Buffer.concat(stdoutChunks).toString("utf-8");
2878
+ const stderr = Buffer.concat(stderrChunks).toString("utf-8");
2879
+ if (code === 0) resolve({
2880
+ stdout,
2881
+ stderr
2882
+ });
2883
+ else {
2884
+ const message = stderr.trim() || stdout.trim() || `${cmd} ${args[0] ?? ""} exited with code ${code}`;
2885
+ const err = new Error(message);
2886
+ err.stderr = stderr;
2887
+ err.stdout = stdout;
2888
+ err.exitCode = code;
2889
+ reject(err);
2890
+ }
2891
+ });
2892
+ if (options.input !== void 0) {
2893
+ child.stdin.on("error", () => {});
2894
+ child.stdin.write(options.input);
2895
+ child.stdin.end();
2896
+ }
2897
+ });
2898
+ }
2899
+ function mergeEnv(overrides) {
2900
+ const merged = { ...process.env };
2901
+ for (const [k, v] of Object.entries(overrides)) if (v === void 0) delete merged[k];
2902
+ else merged[k] = v;
2903
+ return merged;
2904
+ }
2905
+
2799
2906
  //#endregion
2800
2907
  //#region src/assets/docker-build.ts
2801
- const execFileAsync$1 = promisify(execFile);
2802
- /**
2803
- * Shared `docker build` invocation used by both
2804
- * `src/assets/docker-asset-publisher.ts` (publish to ECR) and
2805
- * `src/local/docker-image-builder.ts` (run a container Lambda locally
2806
- * via `cdkd local invoke`).
2807
- *
2808
- * Invariants preserved across the two callers:
2809
- * - `maxBuffer: 50 * 1024 * 1024` so a verbose `docker build` log doesn't
2810
- * blow up `execFile`'s default 1 MB buffer.
2811
- * - Build args iterate in the order `Object.entries(...)` returns them so
2812
- * the resulting layer cache is stable across runs (any reordering would
2813
- * bust caches for both the publisher and local invoke).
2814
- * - Errors carry the captured stderr so the user can re-run `docker build`
2815
- * directly to debug. The error class is parameterized: each consumer
2816
- * wraps the failure with its own typed error (`AssetError` for the
2817
- * publisher, `LocalInvokeBuildError` for local invoke) so the existing
2818
- * error-handling chain on each side keeps working unchanged.
2819
- *
2820
- * `platform` is new in PR 5: container Lambdas declare `Architectures:
2821
- * [x86_64]` (default) or `[arm64]`, and the local-invoke caller MUST pass the
2822
- * matching `linux/amd64` / `linux/arm64` so the built image can run on the
2823
- * developer's host (which may have the opposite arch). The publisher caller
2824
- * defaults to `undefined` for backward compatibility — passing through is
2825
- * the no-op, the user's local docker default arch picks up.
2826
- */
2827
- /**
2828
- * Build a Docker image from a CDK asset's source description.
2829
- *
2830
- * @param asset The `DockerImageAsset` entry from the cdk asset
2831
- * manifest (carries `directory`, `dockerFile`, build args,
2832
- * target, outputs).
2833
- * @param cdkOutDir Absolute path to the CDK output directory (`cdk.out`).
2834
- * Used to resolve `asset.source.directory` to a real
2835
- * build context on disk.
2836
- * @param tag Local image tag to apply (`-t`). The caller chooses a
2837
- * deterministic tag so subsequent runs hit Docker's
2838
- * layer cache (publisher uses `cdkd-asset-<hash>`;
2839
- * local-invoke uses `cdkd-local-invoke-<hash>`).
2840
- * @param platform Optional `--platform` value (e.g. `linux/amd64`,
2841
- * `linux/arm64`). When `undefined` the flag is omitted
2842
- * and Docker uses its default platform.
2843
- * @param wrapError Function the caller provides to wrap the underlying
2844
- * `docker build` failure in a typed error specific to
2845
- * its call site.
2846
- * @throws Whatever `wrapError` returns when `docker build` exits non-zero.
2847
- */
2848
- async function buildDockerImage(asset, cdkOutDir, tag, options) {
2908
+ /**
2909
+ * Build a Docker image from a CDK asset source. Returns the local image
2910
+ * tag the caller should use for `docker tag` / `docker push` (publisher)
2911
+ * or `docker run` (local-invoke).
2912
+ *
2913
+ * Two source modes (mirrors CDK CLI):
2914
+ * - `executable`: run the user-supplied command, capture stdout, return
2915
+ * it as the local tag. The script is responsible for building AND
2916
+ * tagging; cdkd just reads the tag from stdout. Used for Bazel /
2917
+ * custom build pipelines that produce images outside `docker build`.
2918
+ * - `directory`: standard `docker build <dir>` with the full BuildKit
2919
+ * flag set described above. Caller must pass `options.tag`.
2920
+ *
2921
+ * `executable` takes precedence when both fields are set (matches CDK CLI).
2922
+ */
2923
+ async function buildDockerImage(asset, cdkOutDir, options) {
2924
+ const source = asset.source;
2849
2925
  const logger = getLogger().child("docker-build");
2926
+ if (source.executable && source.executable.length > 0) {
2927
+ const [cmd, ...args] = source.executable;
2928
+ if (!cmd) throw options.wrapError("asset source.executable[] is empty");
2929
+ const cwd = source.directory ? `${cdkOutDir}/${source.directory}` : cdkOutDir;
2930
+ logger.debug(`Building Docker image via executable: ${source.executable.join(" ")} (cwd=${cwd})`);
2931
+ let result;
2932
+ try {
2933
+ result = await spawnStreaming(cmd, args, { cwd });
2934
+ } catch (err) {
2935
+ const e = err;
2936
+ throw options.wrapError(e.stderr || e.message || String(err));
2937
+ }
2938
+ const tag = result.stdout.trim();
2939
+ if (!tag) throw options.wrapError(`docker build executable produced no output (expected the local image tag on stdout): ${cmd} ${args.join(" ")}`);
2940
+ return tag;
2941
+ }
2942
+ if (!source.directory) throw options.wrapError(`DockerImageAssetSource must set either 'directory' or 'executable' (got: ${JSON.stringify(source)})`);
2943
+ if (!options.tag) throw options.wrapError("buildDockerImage(directory mode) requires options.tag");
2944
+ const buildArgs = buildDockerBuildCommand(source, options.tag, options.platform);
2945
+ const contextDir = `${cdkOutDir}/${source.directory}`;
2946
+ buildArgs.push(".");
2947
+ logger.debug(`${getDockerCmd()} ${buildArgs.join(" ")} (cwd=${contextDir})`);
2948
+ try {
2949
+ await runDockerStreaming(buildArgs, {
2950
+ cwd: contextDir,
2951
+ env: { BUILDX_NO_DEFAULT_ATTESTATIONS: "1" }
2952
+ });
2953
+ } catch (err) {
2954
+ const e = err;
2955
+ throw options.wrapError(e.stderr || e.message || String(err));
2956
+ }
2957
+ return options.tag;
2958
+ }
2959
+ /**
2960
+ * Construct the `docker build` argv (without the trailing context directory).
2961
+ *
2962
+ * Exported for unit-test inspection — keeps the flag-ordering assertions
2963
+ * independent of the spawn machinery.
2964
+ */
2965
+ function buildDockerBuildCommand(source, tag, platformOverride) {
2850
2966
  const args = [
2851
2967
  "build",
2852
2968
  "-t",
2853
2969
  tag
2854
2970
  ];
2855
- if (options.platform) args.push("--platform", options.platform);
2856
- if (asset.source.dockerFile) args.push("-f", asset.source.dockerFile);
2857
- if (asset.source.dockerBuildArgs) for (const [key, value] of Object.entries(asset.source.dockerBuildArgs)) args.push("--build-arg", `${key}=${value}`);
2858
- if (asset.source.dockerBuildTarget) args.push("--target", asset.source.dockerBuildTarget);
2859
- if (asset.source.dockerOutputs) for (const output of asset.source.dockerOutputs) args.push("--output", output);
2860
- const contextDir = `${cdkOutDir}/${asset.source.directory}`;
2861
- args.push(contextDir);
2862
- logger.debug(`docker ${args.join(" ")}`);
2863
- try {
2864
- await execFileAsync$1("docker", args, { maxBuffer: 50 * 1024 * 1024 });
2865
- } catch (error) {
2866
- const err = error;
2867
- const stderr = err.stderr || err.message || String(error);
2868
- throw options.wrapError(stderr);
2869
- }
2971
+ if (source.dockerBuildArgs) for (const [k, v] of Object.entries(source.dockerBuildArgs)) args.push("--build-arg", `${k}=${v}`);
2972
+ if (source.dockerBuildContexts) for (const [k, v] of Object.entries(source.dockerBuildContexts)) args.push("--build-context", `${k}=${v}`);
2973
+ if (source.dockerBuildSecrets) for (const [k, v] of Object.entries(source.dockerBuildSecrets)) args.push("--secret", `id=${k},${v}`);
2974
+ if (source.dockerBuildSsh) args.push("--ssh", source.dockerBuildSsh);
2975
+ if (source.dockerBuildTarget) args.push("--target", source.dockerBuildTarget);
2976
+ if (source.dockerFile) args.push("-f", source.dockerFile);
2977
+ if (source.networkMode) args.push("--network", source.networkMode);
2978
+ const platform = platformOverride ?? source.platform;
2979
+ if (platform) args.push("--platform", platform);
2980
+ if (source.dockerOutputs) for (const output of source.dockerOutputs) args.push(`--output=${output}`);
2981
+ if (source.cacheFrom) for (const c of source.cacheFrom) args.push("--cache-from", cacheOptionToFlag(c));
2982
+ if (source.cacheTo) args.push("--cache-to", cacheOptionToFlag(source.cacheTo));
2983
+ if (source.cacheDisabled) args.push("--no-cache");
2984
+ return args;
2985
+ }
2986
+ function cacheOptionToFlag(option) {
2987
+ let flag = `type=${option.type}`;
2988
+ if (option.params) for (const [k, v] of Object.entries(option.params)) flag += `,${k}=${v}`;
2989
+ return flag;
2870
2990
  }
2871
2991
 
2872
2992
  //#endregion
2873
2993
  //#region src/assets/docker-asset-publisher.ts
2874
- const execFileAsync = promisify(execFile);
2875
2994
  /**
2876
2995
  * Publishes Docker image assets to ECR
2877
2996
  *
@@ -2913,7 +3032,13 @@ var DockerAssetPublisher = class {
2913
3032
  }
2914
3033
  }
2915
3034
  /**
2916
- * Build a Docker image (public, used by WorkGraph asset-build nodes)
3035
+ * Build a Docker image (public, used by WorkGraph asset-build nodes).
3036
+ *
3037
+ * For `directory` source mode the build tags the result as `localTag`
3038
+ * directly via `docker build -t`. For `executable` source mode the
3039
+ * user-supplied script returns its own tag; cdkd re-tags it to `localTag`
3040
+ * via `docker tag` so the downstream `push()` step (which is wired to
3041
+ * `localTag` at graph-construction time) keeps working unchanged.
2917
3042
  */
2918
3043
  async build(asset, cdkOutputDir, localTag) {
2919
3044
  await this.buildImage(asset, cdkOutputDir, localTag);
@@ -2961,69 +3086,79 @@ var DockerAssetPublisher = class {
2961
3086
  /**
2962
3087
  * Build Docker image — delegates to the shared `buildDockerImage`
2963
3088
  * helper so this code path stays in sync with `cdkd local invoke`'s
2964
- * container-Lambda build path. `--platform` is currently not threaded
2965
- * through here (publish-assets has no Architectures hint to consult);
2966
- * a follow-up can lift this once the asset manifest carries a
2967
- * platform field.
3089
+ * container-Lambda build path. `--platform` is read from the asset
3090
+ * manifest's `source.platform` (when set); cdkd does not currently
3091
+ * inject a publish-side override.
3092
+ *
3093
+ * `buildDockerImage` returns the actual local tag. For `directory`
3094
+ * source mode that's always `tag`. For `executable` source mode the
3095
+ * user's script returns its own tag; we re-tag via `docker tag` so the
3096
+ * downstream push step finds the image under the deterministic
3097
+ * `cdkd-asset-<hash>` name it expects.
2968
3098
  */
2969
3099
  async buildImage(asset, cdkOutputDir, tag) {
2970
- await buildDockerImage(asset, cdkOutputDir, tag, { wrapError: (stderr) => new AssetError(`Docker build failed: ${stderr}`) });
3100
+ const actualTag = await buildDockerImage(asset, cdkOutputDir, {
3101
+ tag,
3102
+ wrapError: (stderr) => new AssetError(`Docker build failed: ${stderr}`)
3103
+ });
3104
+ if (actualTag !== tag) {
3105
+ this.logger.debug(`Re-tagging executable-built image '${actualTag}' → '${tag}'`);
3106
+ try {
3107
+ await this.tagImage(actualTag, tag);
3108
+ } catch (err) {
3109
+ throw new AssetError(`Docker tag failed re-tagging '${actualTag}' → '${tag}': ${err.message ?? String(err)}`);
3110
+ }
3111
+ }
2971
3112
  }
2972
3113
  /**
2973
- * Authenticate with ECR
3114
+ * Authenticate with ECR via `docker login --password-stdin`.
2974
3115
  */
2975
3116
  async ecrLogin(client, accountId, region) {
2976
3117
  const authData = (await client.send(new GetAuthorizationTokenCommand({}))).authorizationData?.[0];
2977
3118
  if (!authData?.authorizationToken) throw new AssetError("Failed to get ECR authorization token");
2978
3119
  const [username, password] = Buffer.from(authData.authorizationToken, "base64").toString().split(":");
3120
+ if (!username || password === void 0) throw new AssetError("ECR authorization token has unexpected shape (missing username/password)");
2979
3121
  const endpoint = authData.proxyEndpoint || `https://${accountId}.dkr.ecr.${region}.amazonaws.com`;
2980
- await new Promise((resolve, reject) => {
2981
- const proc = spawn("docker", [
3122
+ try {
3123
+ await runDockerStreaming([
2982
3124
  "login",
2983
3125
  "--username",
2984
3126
  username,
2985
3127
  "--password-stdin",
2986
3128
  endpoint
2987
- ], { stdio: [
2988
- "pipe",
2989
- "pipe",
2990
- "pipe"
2991
- ] });
2992
- let stderr = "";
2993
- proc.stderr?.on("data", (data) => {
2994
- stderr += data.toString();
2995
- });
2996
- proc.on("close", (code) => {
2997
- if (code === 0) resolve();
2998
- else reject(new AssetError(`ECR login failed: ${stderr.trim()}`));
2999
- });
3000
- proc.on("error", (err) => {
3001
- reject(new AssetError(`ECR login failed: ${err.message}`));
3002
- });
3003
- proc.stdin?.write(password);
3004
- proc.stdin?.end();
3005
- });
3129
+ ], { input: password });
3130
+ } catch (err) {
3131
+ const e = err;
3132
+ throw new AssetError(`ECR login failed: ${e.stderr?.trim() || e.message || String(err)}`);
3133
+ }
3006
3134
  }
3007
3135
  /**
3008
3136
  * Tag Docker image
3009
3137
  */
3010
3138
  async tagImage(source, target) {
3011
- await execFileAsync("docker", [
3012
- "tag",
3013
- source,
3014
- target
3015
- ]);
3139
+ try {
3140
+ await runDockerStreaming([
3141
+ "tag",
3142
+ source,
3143
+ target
3144
+ ]);
3145
+ } catch (err) {
3146
+ const e = err;
3147
+ throw new AssetError(`Docker tag failed: ${e.stderr?.trim() || e.message || String(err)}`);
3148
+ }
3016
3149
  }
3017
3150
  /**
3018
- * Push Docker image
3151
+ * Push Docker image. Streams progress to stdout/stderr (via
3152
+ * `runDockerStreaming`) when the logger is at debug level, otherwise
3153
+ * captures silently and surfaces stderr on non-zero exit.
3019
3154
  */
3020
3155
  async pushImage(uri) {
3021
3156
  this.logger.debug(`Pushing: ${uri}`);
3022
3157
  try {
3023
- await execFileAsync("docker", ["push", uri], { maxBuffer: 50 * 1024 * 1024 });
3024
- } catch (error) {
3025
- const err = error;
3026
- throw new AssetError(`Docker push failed: ${err.stderr || err.message || String(error)}`);
3158
+ await runDockerStreaming(["push", uri]);
3159
+ } catch (err) {
3160
+ const e = err;
3161
+ throw new AssetError(`Docker push failed: ${e.stderr?.trim() || e.message || String(err)}`);
3027
3162
  }
3028
3163
  }
3029
3164
  /**
@@ -9605,5 +9740,5 @@ var DeployEngine = class {
9605
9740
  };
9606
9741
 
9607
9742
  //#endregion
9608
- export { SynthesisError as $, resolveApp as A, CdkdError as B, AssetPublisher as C, Synthesizer as D, buildDockerImage as E, warnDeprecatedNoPrefixCliFlag as F, PartialFailureError as G, DependencyError as H, AssemblyReader as I, ResourceUpdateNotSupportedError as J, ProvisioningError as K, clearBucketRegionCache as L, resolveSkipPrefix as M, resolveStateBucketWithDefault as N, getDefaultStateBucketName as O, resolveStateBucketWithDefaultAndSource as P, StateError as Q, resolveBucketRegion as R, shouldRetainResource as S, WorkGraph as T, LocalInvokeBuildError as U, ConfigError as V, LockError as W, StackHasActiveImportsError as X, RouteDiscoveryError as Y, StackTerminationProtectionError as Z, DiffCalculator as _, withRetry as a, getLogger as at, LockManager as b, collectInlinePolicyNamesManagedBySiblings as c, getLiveRenderer as ct, normalizeAwsTagsToCfn as d, generateResourceName as dt, formatError as et, resolveExplicitPhysicalId as f, generateResourceNameWithFallback as ft, IntrinsicFunctionResolver as g, assertRegionMatch as h, withResourceDeadline as i, ConsoleLogger as it, resolveCaptureObservedState as j, getLegacyStateBucketName as k, CDK_PATH_TAG as l, PATTERN_B_NAME_PROPERTIES as lt, CloudControlProvider as m, withStackName as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, normalizeAwsError as nt, IMPLICIT_DELETE_DEPENDENCIES as o, setLogger as ot, ProviderRegistry as p, withSkipPrefix as pt, ResourceTimeoutError as q, DeployEngine as r, withErrorHandling as rt, IAMRoleProvider as s, runStackBuffered as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, isCdkdError as tt, matchesCdkPath as u, PATTERN_B_RESOURCE_TYPES as ut, DagBuilder as v, stringifyValue as w, S3StateBackend as x, TemplateParser as y, AssetError as z };
9609
- //# sourceMappingURL=deploy-engine-CAg_d5uX.js.map
9743
+ export { StackTerminationProtectionError as $, getDefaultStateBucketName as A, resolveBucketRegion as B, AssetPublisher as C, getDockerCmd as D, buildDockerImage as E, resolveStateBucketWithDefault as F, LocalInvokeBuildError as G, CdkdError as H, resolveStateBucketWithDefaultAndSource as I, ProvisioningError as J, LockError as K, warnDeprecatedNoPrefixCliFlag as L, resolveApp as M, resolveCaptureObservedState as N, runDockerStreaming as O, resolveSkipPrefix as P, StackHasActiveImportsError as Q, AssemblyReader as R, shouldRetainResource as S, WorkGraph as T, ConfigError as U, AssetError as V, DependencyError as W, ResourceUpdateNotSupportedError as X, ResourceTimeoutError as Y, RouteDiscoveryError as Z, DiffCalculator as _, withRetry as a, withErrorHandling as at, LockManager as b, collectInlinePolicyNamesManagedBySiblings as c, setLogger as ct, normalizeAwsTagsToCfn as d, PATTERN_B_NAME_PROPERTIES as dt, StateError as et, resolveExplicitPhysicalId as f, PATTERN_B_RESOURCE_TYPES as ft, IntrinsicFunctionResolver as g, withStackName as gt, assertRegionMatch as h, withSkipPrefix as ht, withResourceDeadline as i, normalizeAwsError as it, getLegacyStateBucketName as j, Synthesizer as k, CDK_PATH_TAG as l, runStackBuffered as lt, CloudControlProvider as m, generateResourceNameWithFallback as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, formatError as nt, IMPLICIT_DELETE_DEPENDENCIES as o, ConsoleLogger as ot, ProviderRegistry as p, generateResourceName as pt, PartialFailureError as q, DeployEngine as r, isCdkdError as rt, IAMRoleProvider as s, getLogger as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, SynthesisError as tt, matchesCdkPath as u, getLiveRenderer as ut, DagBuilder as v, stringifyValue as w, S3StateBackend as x, TemplateParser as y, clearBucketRegionCache as z };
9744
+ //# sourceMappingURL=deploy-engine-AoZgViZN.js.map