@go-to-k/cdkd 0.282.0 → 0.282.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.
- package/dist/{asg-provider-BSI5xl1o.js → asg-provider-B5EgvcoP.js} +2 -2
- package/dist/{asg-provider-BSI5xl1o.js.map → asg-provider-B5EgvcoP.js.map} +1 -1
- package/dist/cli.js +85 -18
- package/dist/cli.js.map +1 -1
- package/dist/{deploy-engine-CfcQQzbs.js → deploy-engine-6sSRIhrN.js} +4 -4
- package/dist/{deploy-engine-CfcQQzbs.js.map → deploy-engine-6sSRIhrN.js.map} +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { $ as configStringRefusal, $t as MIGRATE_TMP_PREFIX, A as green, At as validateContainerRepoName, B as slowCcOperationTimeoutMs, Bt as getDefaultStateBucketName, C as MULTI_REGION_RECREATE_BLOCKED_TYPES, Cn as
|
|
2
|
+
import { $ as configStringRefusal, $t as MIGRATE_TMP_PREFIX, A as green, At as validateContainerRepoName, B as slowCcOperationTimeoutMs, Bt as getDefaultStateBucketName, C as MULTI_REGION_RECREATE_BLOCKED_TYPES, Cn as NestedStackChildDirectDestroyError, Ct as rewriteTemplateAssetReferences, D as bold, Dn as ResourceUpdateNotSupportedError, Dt as getBootstrapMarkerKey, E as formatResourceLine, En as ResourceTimeoutError, Et as ensureAssetStorage, F as clearOnUpdateRemoval, Fn as withErrorHandling, Ft as runDockerStreaming, G as getAccountInfo, Gt as resolveSkipPrefix, H as isTerminationProtectionPropagationError, Ht as resolveApp, I as ProviderRegistry, It as AssetManifestLoader, J as normalizeAwsTagsToCfn, Jt as resolveUseCdkBootstrapAssets, K as refStateLookupFromResource, Kt as resolveStateBucketWithDefault, L as findActionableSilentDrops, Lt as getDockerImageBySourceHash, M as yellow, Mt as formatDockerLoginError, N as IAMRoleProvider, Nt as getDockerCmd, O as cyan, On as StackHasActiveImportsError, Ot as parseBootstrapMarker, P as collectInlinePolicyNamesManagedBySiblings, Pn as normalizeAwsError, Pt as runDockerForeground, Q as configBooleanRefusal, Qt as CFN_TEMPLATE_URL_LIMIT, R as findSilentDropProperties, Rt as Synthesizer, S as extractDeploymentEventError, Sn as MissingCdkCliError, St as loadPublishableAssetManifest, T as renderStatefulReason, Tn as ProvisioningError, Tt as BOOTSTRAP_MARKER_PREFIX, U as IntrinsicFunctionResolver, Ut as resolveAutoAssetStorage, V as disableInstanceApiTermination, Vt as getLegacyStateBucketName, W as cfnRefValueFromPhysicalId, Wt as resolveCaptureObservedState, X as assertRegionMatch, Xt as warnDeprecatedNoPrefixCliFlag, Y as resolveExplicitPhysicalId, Yt as stateBucketExistenceConfirmed, Z as coerceCfnBoolean, Zt as CFN_TEMPLATE_BODY_LIMIT, _ as createPreDeleteFinalSnapshot, _n as DeployCancelledError, _t as AssetPublisher, a as DeploymentEventsStore, an as AssemblyReader, at as applyRoleArnIfSet, b as unsupportedFinalSnapshotError, bn as LocalStartServiceError, bt as buildAssetRedirectMap, c as replayFailedOperations, cn as resolveBucketRegion, ct as withRetry, d as IMPLICIT_DELETE_DEPENDENCIES, dn as resetAwsClients, dt as DagBuilder, en as findLargeInlineResources, et as readConfigString, f as computeImplicitDeleteEdges, fn as setAwsClients, ft as TemplateParser, g as ccRoutedFinalSnapshotError, gt as shouldRetainResource, h as buildFinalSnapshotIdentifier, ht as rebuildClientForBucketRegion, i as DeploymentEventsReader, in as derivePartitionAndUrlSuffix, it as requireConfigString, j as red, jt as buildDockerImage, k as gray, kn as StackTerminationProtectionError, kt as validateAssetBucketName, l as replayRollback, ln as AwsClients, lt as isRetryableTransientError, m as PRE_DELETE_SNAPSHOT_TYPES, mn as CdkdError, mt as S3StateBackend, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as expectedOwnerParam, nt as requireConfigArray, o as planFailedOps, on as processStackMessages, ot as DiffCalculator, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pt as LockManager, q as WAFv2WebACLProvider, qt as resolveStateBucketWithDefaultAndSource, r as DeployEngine, rn as PARTITION_TABLE, rt as requireConfigObject, s as planRollback, st as describeTypeWithThrottleRetry, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as uploadCfnTemplate, tt as replayWarn, u as withResourceDeadline, un as getAwsClients, ut as isThrottlingError, v as isFinalSnapshotError, vn as LocalInvokeBuildError$1, vt as stringifyValue, w as isStatefulRecreateTargetSync, wn as PartialFailureError, wt as AssetModeResolver, x as makeCanonicalizePropertiesFn, xt as createAssetRedirectResolver, y as refusesFinalSnapshot, yn as LocalMigrateError, yt as WorkGraph, z as CloudControlProvider, zt as synthesisStatusMessage } from "./deploy-engine-6sSRIhrN.js";
|
|
3
3
|
import { a as getLiveRenderer, c as PATTERN_B_RESOURCE_TYPES, d as generateResourceNameWithFallback, h as withStackName, i as runStackBuffered, m as withSkipPrefix, n as getLogger, o as PATTERN_B_NAME_OPTIONS, s as PATTERN_B_NAME_PROPERTIES, u as generateResourceName } from "./logger-zRrlbaQt.js";
|
|
4
|
-
import { t as ASGProvider } from "./asg-provider-
|
|
4
|
+
import { t as ASGProvider } from "./asg-provider-B5EgvcoP.js";
|
|
5
5
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
6
6
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
7
7
|
import { CopyObjectCommand, CreateBucketCommand, DeleteBucketAnalyticsConfigurationCommand, DeleteBucketCommand, DeleteBucketCorsCommand, DeleteBucketEncryptionCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketOwnershipControlsCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketNotificationConfigurationCommand, GetBucketOwnershipControlsCommand, GetBucketPolicyCommand, GetBucketReplicationCommand, GetBucketTaggingCommand, GetBucketVersioningCommand, GetBucketWebsiteCommand, GetObjectCommand, GetObjectLockConfigurationCommand, GetPublicAccessBlockCommand, HeadBucketCommand, ListBucketAnalyticsConfigurationsCommand, ListBucketIntelligentTieringConfigurationsCommand, ListBucketInventoryConfigurationsCommand, ListBucketMetricsConfigurationsCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, PutBucketAccelerateConfigurationCommand, PutBucketAnalyticsConfigurationCommand, PutBucketCorsCommand, PutBucketEncryptionCommand, PutBucketIntelligentTieringConfigurationCommand, PutBucketInventoryConfigurationCommand, PutBucketLifecycleConfigurationCommand, PutBucketLoggingCommand, PutBucketMetricsConfigurationCommand, PutBucketNotificationConfigurationCommand, PutBucketOwnershipControlsCommand, PutBucketPolicyCommand, PutBucketReplicationCommand, PutBucketTaggingCommand, PutBucketVersioningCommand, PutBucketWebsiteCommand, PutObjectCommand, PutObjectLockConfigurationCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -52866,7 +52866,11 @@ async function runDestroyForStack(stackName, state, ctx) {
|
|
|
52866
52866
|
}
|
|
52867
52867
|
}
|
|
52868
52868
|
const remainingResources = { ...state.resources };
|
|
52869
|
+
const stateTargetFor = (logicalId, resourceType) => resourceType === NESTED_STACK_TYPE ? `${stackName}~${logicalId}` : stackName;
|
|
52869
52870
|
const skippedStateTargets = /* @__PURE__ */ new Set();
|
|
52871
|
+
const failedStateTargets = /* @__PURE__ */ new Set();
|
|
52872
|
+
/** `'cmd A' / 'cmd B'` — the quoted, slash-joined hint both summary arms print. */
|
|
52873
|
+
const hintFor = (command, targets) => targets.map((t) => `'${command} ${t}'`).join(" / ");
|
|
52870
52874
|
const buildDestroySnapshot = () => {
|
|
52871
52875
|
const { imports: _imports, outputReads: _outputReads, ...rest } = state;
|
|
52872
52876
|
return {
|
|
@@ -53031,7 +53035,7 @@ async function runDestroyForStack(stackName, state, ctx) {
|
|
|
53031
53035
|
if (deleteResult?.outcome === "skipped") {
|
|
53032
53036
|
logger.info(` ${formatResourceLine("skipped", logicalId, resource.resourceType, `skipped (${deleteResult.reason})`)}`);
|
|
53033
53037
|
result.skippedCount++;
|
|
53034
|
-
skippedStateTargets.add(resource.resourceType
|
|
53038
|
+
skippedStateTargets.add(stateTargetFor(logicalId, resource.resourceType));
|
|
53035
53039
|
ctx.eventRecorder?.record({
|
|
53036
53040
|
eventType: "RESOURCE_SKIPPED",
|
|
53037
53041
|
stackName,
|
|
@@ -53081,6 +53085,7 @@ async function runDestroyForStack(stackName, state, ctx) {
|
|
|
53081
53085
|
const wrapped = new ProvisioningError(error.message, resource.resourceType, logicalId, resource.physicalId, error);
|
|
53082
53086
|
logger.error(` ✗ Failed to delete ${logicalId}:`, wrapped.message);
|
|
53083
53087
|
result.errorCount++;
|
|
53088
|
+
failedStateTargets.add(stateTargetFor(logicalId, resource.resourceType));
|
|
53084
53089
|
ctx.eventRecorder?.record({
|
|
53085
53090
|
eventType: "RESOURCE_FAILED",
|
|
53086
53091
|
stackName,
|
|
@@ -53094,6 +53099,7 @@ async function runDestroyForStack(stackName, state, ctx) {
|
|
|
53094
53099
|
} else {
|
|
53095
53100
|
logger.error(` ✗ Failed to delete ${logicalId}:`, String(error));
|
|
53096
53101
|
result.errorCount++;
|
|
53102
|
+
failedStateTargets.add(stateTargetFor(logicalId, resource.resourceType));
|
|
53097
53103
|
ctx.eventRecorder?.record({
|
|
53098
53104
|
eventType: "RESOURCE_FAILED",
|
|
53099
53105
|
stackName,
|
|
@@ -53134,10 +53140,15 @@ async function runDestroyForStack(stackName, state, ctx) {
|
|
|
53134
53140
|
else if (result.interrupted && result.errorCount === 0) logger.warn(`\n${yellow("⚠")} ${bold(`Stack ${stackName} destroy interrupted`)} (${green(result.deletedCount)} deleted${retainedSuffix}${skippedSuffix}, ${result.errorCount} errors). State preserved — re-run 'cdkd destroy' / 'cdkd state destroy' to finish.`);
|
|
53135
53141
|
else if (result.errorCount === 0) {
|
|
53136
53142
|
const targets = [...skippedStateTargets];
|
|
53137
|
-
const showHint =
|
|
53138
|
-
const orphanHint =
|
|
53143
|
+
const showHint = hintFor("cdkd state show", targets);
|
|
53144
|
+
const orphanHint = hintFor("cdkd state orphan", targets);
|
|
53139
53145
|
logger.warn(`\n${yellow("⚠")} ${bold(`Stack ${stackName} partially destroyed`)} (${green(result.deletedCount)} deleted${retainedSuffix}${skippedSuffix}, ${result.errorCount} errors). cdkd could not address the skipped resource(s), so they may still exist in AWS. Fix the physicalId in state.json (${showHint}) and re-run, or delete them by hand and drop the records with ${orphanHint}.`);
|
|
53140
|
-
} else
|
|
53146
|
+
} else {
|
|
53147
|
+
const orphanHint = hintFor("cdkd state orphan", failedStateTargets.size > 0 ? [...failedStateTargets] : [stackName]);
|
|
53148
|
+
const skippedTargets = [...skippedStateTargets];
|
|
53149
|
+
const skippedClause = skippedTargets.length > 0 ? ` Separately, ${result.skippedCount} resource(s) were SKIPPED — cdkd could not address them, so no delete was issued and they may still exist in AWS. Fix the physicalId in state.json (${hintFor("cdkd state show", skippedTargets)}) and re-run, or delete them by hand and drop the records with ${hintFor("cdkd state orphan", skippedTargets)}.` : "";
|
|
53150
|
+
logger.warn(`\n${yellow("⚠")} ${bold(`Stack ${stackName} partially destroyed`)} (${green(result.deletedCount)} deleted${retainedSuffix}${skippedSuffix}, ${red(result.errorCount)} errors). State preserved — re-run 'cdkd destroy' / 'cdkd state destroy' to clean up. If the same resource keeps failing, ${orphanHint} is the last resort: it removes the state record without deleting AWS resources.` + skippedClause);
|
|
53151
|
+
}
|
|
53141
53152
|
} finally {
|
|
53142
53153
|
process.removeListener("SIGINT", sigintHandler);
|
|
53143
53154
|
renderer.stop();
|
|
@@ -53212,6 +53223,50 @@ function getCurrentNestedStackContext() {
|
|
|
53212
53223
|
return storage.getStore();
|
|
53213
53224
|
}
|
|
53214
53225
|
|
|
53226
|
+
//#endregion
|
|
53227
|
+
//#region src/provisioning/nested-stack-messages.ts
|
|
53228
|
+
/**
|
|
53229
|
+
* User-facing message builders for the nested-stack (`AWS::CloudFormation::Stack`)
|
|
53230
|
+
* delete path.
|
|
53231
|
+
*
|
|
53232
|
+
* **This module must stay a LEAF** — no imports, ever. It exists precisely so
|
|
53233
|
+
* the strings can be shared without dragging a module graph along: the obvious
|
|
53234
|
+
* home, `providers/nested-stack-provider.ts`, imports `destroy-runner.ts`
|
|
53235
|
+
* (it recurses into a child destroy), which imports `register-providers.ts`,
|
|
53236
|
+
* which imports every provider in the tree — including `nested-stack-provider`
|
|
53237
|
+
* itself. Importing the builder from there therefore pulled the whole provider
|
|
53238
|
+
* registry into two unrelated unit tests and closed that cycle. It is harmless
|
|
53239
|
+
* only for as long as nothing on the ring does module-scope work, which is not
|
|
53240
|
+
* a property any of those files promises. Adding an import here would silently
|
|
53241
|
+
* re-create the problem, so keep this file dependency-free.
|
|
53242
|
+
*/
|
|
53243
|
+
/**
|
|
53244
|
+
* The message `NestedStackProvider.delete` throws when the child stack's own
|
|
53245
|
+
* destroy reported `errorCount > 0` (issue
|
|
53246
|
+
* [#1777](https://github.com/go-to-k/cdkd/issues/1777)).
|
|
53247
|
+
*
|
|
53248
|
+
* A builder rather than an inline template literal so tests that need the exact
|
|
53249
|
+
* string cannot drift onto a stale hand-written copy. That matters more than
|
|
53250
|
+
* usual here, because both callers of `delete()` classify a delete failure by
|
|
53251
|
+
* MESSAGE: an already-deleted-shaped phrase (`not found` / `does not exist` /
|
|
53252
|
+
* `No policy found` / `NoSuchEntity` / `NotFoundException`, plus the deploy
|
|
53253
|
+
* engine's `was not found` / `ResourceNotFoundException`) is read as idempotent
|
|
53254
|
+
* success and DROPS the state row — the exact outcome this throw exists to
|
|
53255
|
+
* prevent. `tests/unit/provisioning/nested-stack-provider.test.ts` pins that
|
|
53256
|
+
* property against the union of both phrase sets.
|
|
53257
|
+
*
|
|
53258
|
+
* @param childStackName the child's `<parent>~<childLogicalId>` state key
|
|
53259
|
+
* @param errorCount resources in the child that failed to delete
|
|
53260
|
+
* @param alsoSkippedCount resources the child SKIPPED (no AWS call issued)
|
|
53261
|
+
* @param alsoInterrupted whether the child's destroy was also interrupted
|
|
53262
|
+
*/
|
|
53263
|
+
function nestedStackChildFailureMessage(childStackName, errorCount, alsoSkippedCount, alsoInterrupted) {
|
|
53264
|
+
const extra = [];
|
|
53265
|
+
if (alsoSkippedCount > 0) extra.push(`${alsoSkippedCount} resource(s) were also skipped`);
|
|
53266
|
+
if (alsoInterrupted) extra.push("the child destroy was also interrupted");
|
|
53267
|
+
return `Nested stack ${childStackName} failed to destroy: ${errorCount} resource(s) failed to delete` + (extra.length > 0 ? ` (${extra.join("; ")})` : "") + `. The child's state is PRESERVED and still lists them — inspect it with 'cdkd state show ${childStackName}', resolve the failure, and re-run the destroy. The parent's record of this nested stack is kept so the child stays reachable.`;
|
|
53268
|
+
}
|
|
53269
|
+
|
|
53215
53270
|
//#endregion
|
|
53216
53271
|
//#region src/provisioning/providers/nested-stack-provider.ts
|
|
53217
53272
|
/**
|
|
@@ -53378,6 +53433,7 @@ var NestedStackProvider = class {
|
|
|
53378
53433
|
...ctx.destroyOptions?.resourceWarnAfterByType && { resourceWarnAfterByType: ctx.destroyOptions.resourceWarnAfterByType },
|
|
53379
53434
|
...ctx.destroyOptions?.resourceTimeoutByType && { resourceTimeoutByType: ctx.destroyOptions.resourceTimeoutByType }
|
|
53380
53435
|
}));
|
|
53436
|
+
if (childResult.errorCount > 0) throw new Error(nestedStackChildFailureMessage(childStackName, childResult.errorCount, childResult.skippedCount, childResult.interrupted));
|
|
53381
53437
|
if (childResult.skippedCount > 0 || childResult.interrupted) {
|
|
53382
53438
|
const causes = [];
|
|
53383
53439
|
if (childResult.skippedCount > 0) causes.push(`skipped ${childResult.skippedCount} resource(s)`);
|
|
@@ -63558,6 +63614,24 @@ function escapeRegExp(value) {
|
|
|
63558
63614
|
*/
|
|
63559
63615
|
const KEY_TERMINATORS = "[^\\s\"'?]";
|
|
63560
63616
|
/**
|
|
63617
|
+
* URL suffixes gc must match that {@link PARTITION_TABLE} does NOT carry.
|
|
63618
|
+
*
|
|
63619
|
+
* Empty today, and deliberately kept as a declared seam rather than dropped:
|
|
63620
|
+
* it is what makes gc able to LEAD the derive table (issue #1785) now that
|
|
63621
|
+
* {@link AWS_URL_SUFFIXES} is built from it. Two directions need it:
|
|
63622
|
+
*
|
|
63623
|
+
* - A partition cdkd has recorded state for but whose region prefix is not in
|
|
63624
|
+
* the derive table yet. Adding it here is a one-line, reviewable change that
|
|
63625
|
+
* does not have to wait on the partition-table row.
|
|
63626
|
+
* - A suffix RETIRED from the derive table. Coupling propagates additions, but
|
|
63627
|
+
* a row EDITED or removed there would silently stop gc matching state files
|
|
63628
|
+
* already written with the old suffix — the irreversible direction. Such a
|
|
63629
|
+
* suffix moves here rather than disappearing. `tests/unit/cli/gc.test.ts`
|
|
63630
|
+
* fences that with a hand-written floor of the suffixes known today, so a
|
|
63631
|
+
* removal reds until it is carried over deliberately.
|
|
63632
|
+
*/
|
|
63633
|
+
const GC_EXTRA_URL_SUFFIXES = [];
|
|
63634
|
+
/**
|
|
63561
63635
|
* `(?:amazonaws\.com\.cn|amazonaws\.com|...)` — {@link AWS_URL_SUFFIXES} as a
|
|
63562
63636
|
* non-capturing alternation, LONGEST FIRST so `amazonaws.com.cn` is tried
|
|
63563
63637
|
* before its own `amazonaws.com` prefix instead of relying on backtracking.
|
|
@@ -63568,15 +63642,7 @@ const KEY_TERMINATORS = "[^\\s\"'?]";
|
|
|
63568
63642
|
* patterns. Making it capturing would shift every index by one and silently
|
|
63569
63643
|
* collect the suffix as if it were a key.
|
|
63570
63644
|
*/
|
|
63571
|
-
const URL_SUFFIX_ALTERNATION = `(?:${[...[
|
|
63572
|
-
"amazonaws.com",
|
|
63573
|
-
"amazonaws.com.cn",
|
|
63574
|
-
"amazonaws.eu",
|
|
63575
|
-
"c2s.ic.gov",
|
|
63576
|
-
"sc2s.sgov.gov",
|
|
63577
|
-
"cloud.adc-e.uk",
|
|
63578
|
-
"csp.hci.ic.gov"
|
|
63579
|
-
]].sort((a, b) => b.length - a.length).map(escapeRegExp).join("|")})`;
|
|
63645
|
+
const URL_SUFFIX_ALTERNATION = `(?:${[...[.../* @__PURE__ */ new Set([...PARTITION_TABLE.map((row) => row.urlSuffix), ...GC_EXTRA_URL_SUFFIXES])]].sort((a, b) => b.length - a.length).map(escapeRegExp).join("|")})`;
|
|
63580
63646
|
/**
|
|
63581
63647
|
* The HOST half of an ECR registry, as an alternation over the forms AWS
|
|
63582
63648
|
* serves: `<acct>.dkr.ecr.<region>.<urlSuffix>`, its FIPS sibling
|
|
@@ -63594,9 +63660,10 @@ const URL_SUFFIX_ALTERNATION = `(?:${[...[
|
|
|
63594
63660
|
* Account and region are matched loosely on purpose (see the extractor doc):
|
|
63595
63661
|
* collecting a reference from another account's or region's URI can only KEEP
|
|
63596
63662
|
* more, never delete more — which is also why the two extra forms are worth
|
|
63597
|
-
* carrying even though cdkd's own publisher writes the plain one. Issue #
|
|
63663
|
+
* carrying even though cdkd's own publisher writes the plain one. Issue #1793
|
|
63598
63664
|
* tracks deriving these host forms from ONE place shared with
|
|
63599
|
-
* `src/utils/ecr-uri.ts` instead of two hand-kept copies
|
|
63665
|
+
* `src/utils/ecr-uri.ts` instead of two hand-kept copies — that module matches
|
|
63666
|
+
* only the plain `dkr.ecr` form today, so the two already disagree.
|
|
63600
63667
|
*
|
|
63601
63668
|
* Every group is non-capturing, for the {@link URL_SUFFIX_ALTERNATION} reason.
|
|
63602
63669
|
*/
|
|
@@ -75483,7 +75550,7 @@ function createMigrateCommand() {
|
|
|
75483
75550
|
*/
|
|
75484
75551
|
function buildProgram() {
|
|
75485
75552
|
const program = new Command();
|
|
75486
|
-
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.282.
|
|
75553
|
+
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.282.2");
|
|
75487
75554
|
program.hook("preAction", (_thisCommand, actionCommand) => {
|
|
75488
75555
|
const { profile } = actionCommand.optsWithGlobals();
|
|
75489
75556
|
if (profile !== void 0) process.env["AWS_PROFILE"] = profile;
|