@go-to-k/cdkd 0.278.34 → 0.278.36
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-Cta08VYI.js → asg-provider-5hYG8VHd.js} +2 -2
- package/dist/{asg-provider-Cta08VYI.js.map → asg-provider-5hYG8VHd.js.map} +1 -1
- package/dist/cli.js +171 -65
- package/dist/cli.js.map +1 -1
- package/dist/{deploy-engine-Dp2u4Ktr.js → deploy-engine-iHGY-Q_U.js} +75 -7
- package/dist/{deploy-engine-Dp2u4Ktr.js.map → deploy-engine-iHGY-Q_U.js.map} +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -1
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { $ as
|
|
2
|
+
import { $ as describeTypeWithThrottleRetry, $t as AwsClients, A as red, At as Synthesizer, B as isTerminationProtectionPropagationError, Bt as resolveUseCdkBootstrapAssets, C as isStatefulRecreateTargetSync, Ct as buildDockerImage, D as cyan, Dt as runDockerStreaming, E as bold, Et as runDockerForeground, F as ProviderRegistry, Ft as resolveAutoAssetStorage, G as normalizeAwsTagsToCfn, Gt as MIGRATE_TMP_PREFIX, H as cfnRefValueFromPhysicalId, Ht as warnDeprecatedNoPrefixCliFlag, I as findActionableSilentDrops, It as resolveCaptureObservedState, J as readConfigString, Jt as expectedOwnerParam, K as resolveExplicitPhysicalId, Kt as findLargeInlineResources, L as CloudControlProvider, Lt as resolveSkipPrefix, M as IAMRoleProvider, Mt as getDefaultStateBucketName, N as collectInlinePolicyNamesManagedBySiblings, Nt as getLegacyStateBucketName, O as gray, Ot as AssetManifestLoader, P as clearOnUpdateRemoval, Pt as resolveApp, Q as DiffCalculator, Qt as resolveBucketRegion, R as slowCcOperationTimeoutMs, Rt as resolveStateBucketWithDefault, S as MULTI_REGION_RECREATE_BLOCKED_TYPES, St as validateContainerRepoName, T as formatResourceLine, Tn as withErrorHandling, Tt as getDockerCmd, U as refStateLookupFromResource, Ut as CFN_TEMPLATE_BODY_LIMIT, V as IntrinsicFunctionResolver, Vt as stateBucketExistenceConfirmed, W as WAFv2WebACLProvider, Wt as CFN_TEMPLATE_URL_LIMIT, X as requireConfigString, Xt as processStackMessages, Y as requireConfigArray, Yt as AssemblyReader, Z as applyRoleArnIfSet, _ as createPreDeleteFinalSnapshot, _n as ResourceUpdateNotSupportedError, _t as BOOTSTRAP_MARKER_PREFIX, a as DeploymentEventsStore, at as LockManager, b as unsupportedFinalSnapshotError, bt as parseBootstrapMarker, c as replayFailedOperations, cn as LocalInvokeBuildError$1, ct as shouldRetainResource, d as IMPLICIT_DELETE_DEPENDENCIES, dt as WorkGraph, en as getAwsClients, et as withRetry, f as computeImplicitDeleteEdges, fn as MissingCdkCliError, ft as buildAssetRedirectMap, g as ccRoutedFinalSnapshotError, gn as ResourceTimeoutError, gt as AssetModeResolver, h as buildFinalSnapshotIdentifier, hn as ProvisioningError, ht as rewriteTemplateAssetReferences, i as DeploymentEventsReader, in as CdkdError, it as TemplateParser, j as yellow, jt as synthesisStatusMessage, k as green, kt as getDockerImageBySourceHash, l as replayRollback, ln as LocalMigrateError, lt as AssetPublisher, m as PRE_DELETE_SNAPSHOT_TYPES, mn as PartialFailureError, mt as loadPublishableAssetManifest, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as setAwsClients, nt as isThrottlingError, o as planFailedOps, ot as S3StateBackend, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as NestedStackChildDirectDestroyError, pt as createAssetRedirectResolver, q as assertRegionMatch, qt as uploadCfnTemplate, r as DeployEngine, rt as DagBuilder, s as planRollback, sn as DeployCancelledError, st as rebuildClientForBucketRegion, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as resetAwsClients, tt as isRetryableTransientError, u as withResourceDeadline, un as LocalStartServiceError, ut as stringifyValue, v as isFinalSnapshotError, vn as StackHasActiveImportsError, vt as ensureAssetStorage, w as renderStatefulReason, wn as normalizeAwsError, wt as formatDockerLoginError, x as extractDeploymentEventError, xt as validateAssetBucketName, y as refusesFinalSnapshot, yn as StackTerminationProtectionError, yt as getBootstrapMarkerKey, z as disableInstanceApiTermination, zt as resolveStateBucketWithDefaultAndSource } from "./deploy-engine-iHGY-Q_U.js";
|
|
3
3
|
import { a as getLiveRenderer, c as PATTERN_B_RESOURCE_TYPES, d as generateResourceNameWithFallback, f as withSkipPrefix, i as runStackBuffered, n as getLogger, o as PATTERN_B_NAME_OPTIONS, p as withStackName, s as PATTERN_B_NAME_PROPERTIES, u as generateResourceName } from "./logger-BYMEE-BS.js";
|
|
4
|
-
import { t as ASGProvider } from "./asg-provider-
|
|
4
|
+
import { t as ASGProvider } from "./asg-provider-5hYG8VHd.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";
|
|
@@ -66,7 +66,8 @@ import { CodeCommitClient, CreateCommitCommand, CreateRepositoryCommand as Creat
|
|
|
66
66
|
import AdmZip from "adm-zip";
|
|
67
67
|
import { CreateLifecyclePolicyCommand, DLMClient, DeleteLifecyclePolicyCommand as DeleteLifecyclePolicyCommand$1, GetLifecyclePolicyCommand as GetLifecyclePolicyCommand$1, ResourceNotFoundException as ResourceNotFoundException$14, TagResourceCommand as TagResourceCommand$21, UntagResourceCommand as UntagResourceCommand$21, UpdateLifecyclePolicyCommand } from "@aws-sdk/client-dlm";
|
|
68
68
|
import { CreateVectorBucketCommand, DeleteIndexCommand, DeleteVectorBucketCommand, GetVectorBucketCommand, ListIndexesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$17, S3VectorsClient, TagResourceCommand as TagResourceCommand$22, UntagResourceCommand as UntagResourceCommand$22 } from "@aws-sdk/client-s3vectors";
|
|
69
|
-
import {
|
|
69
|
+
import { ListTagsForResourceCommand as ListTagsForResourceCommand$18, S3ControlClient, TagResourceCommand as TagResourceCommand$23, UntagResourceCommand as UntagResourceCommand$23 } from "@aws-sdk/client-s3-control";
|
|
70
|
+
import { CreateNamespaceCommand, CreateTableBucketCommand, CreateTableCommand as CreateTableCommand$2, DeleteNamespaceCommand as DeleteNamespaceCommand$1, DeleteTableBucketCommand, DeleteTableCommand as DeleteTableCommand$2, GetTableBucketCommand, GetTableCommand as GetTableCommand$1, ListNamespacesCommand as ListNamespacesCommand$1, ListTableBucketsCommand, ListTablesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$19, NotFoundException as NotFoundException$6, S3TablesClient, TagResourceCommand as TagResourceCommand$24, UntagResourceCommand as UntagResourceCommand$24 } from "@aws-sdk/client-s3tables";
|
|
70
71
|
import { Document, Pair, Scalar, YAMLMap, YAMLSeq, parse as parse$1, stringify } from "yaml";
|
|
71
72
|
import { createLocalStartAgentCoreCommand, createLocalStartCloudFrontCommand, createLocalStateProvider, getEmbedConfig, isCfnFlagPresent, listTargets, rejectExplicitCfnStackWithMultipleStacks, resolveCfnFallbackRegion, setEmbedConfig, substituteAgainstState, substituteAgainstStateAsync, substituteEnvVarsFromState, substituteEnvVarsFromStateAsync } from "cdk-local";
|
|
72
73
|
import { A2A_CONTAINER_PORT, A2A_PATH, AGENTCORE_A2A_PROTOCOL, AGENTCORE_AGUI_PROTOCOL, AGENTCORE_MCP_PROTOCOL, ConnectionRegistry, EcsTaskResolutionError, HOST_GATEWAY_MIN_VERSION, LocalInvokeBuildError, MCP_CONTAINER_PORT, MCP_PATH, a2aInvokeOnce, addAlbSpecificOptions, addCommonEcsServiceOptions, addStartServiceSpecificOptions, albStrategy, architectureToPlatform, attachAuthorizers, attachStageContext, availableApiIdentifiers, bufferToBody, buildAgentCoreCodeImage, buildCognitoJwksUrl, buildConnectEvent, buildContainerImage, buildCorsConfigByApiId, buildCorsConfigFromCloudFrontChain, buildDisconnectEvent, buildJwksUrlFromIssuer, buildMessageEvent, buildMgmtEndpointEnvUrl, buildStageMap, classifySourceChange, createAuthorizerCache, createFileWatcher, createFileWatcher as createFileWatcher$1, createJwksCache, createWatchPredicates, defaultCredentialsLoader, derivePseudoParametersFromRegion, discoverRoutes, discoverWebSocketApis, downloadAndExtractS3Bundle, filterRoutesByApiIdentifier, groupRoutesByServer, handleConnectionsRequest, invokeAgentCore, invokeAgentCoreWs, materializeLayerFromArn, mcpInvokeOnce, parseConnectionsPath, parseSelectionExpressionPath, pickAgentCoreCandidateStack, pickAgentCoreCandidateStack as pickAgentCoreCandidateStack$1, probeHostGatewaySupport, readMtlsMaterialsFromDisk, resolveAgentCoreTarget, resolveEnvVars, resolveHostGatewayExtraHosts, resolveRuntimeCodeMountPath, resolveRuntimeFileExtension, resolveRuntimeImage, resolveSingleTarget, resolveWatchConfig, runEcsServiceEmulator, signAgentCoreInvocation, startApiServer, substituteImagePlaceholders, tryResolveImageFnJoin, verifyJwtViaDiscovery, waitForAgentCorePing } from "cdk-local/internal";
|
|
@@ -9689,7 +9690,7 @@ var LambdaUrlProvider = class {
|
|
|
9689
9690
|
this.logger.debug(`Creating Lambda URL ${logicalId}`);
|
|
9690
9691
|
const targetFunctionArn = properties["TargetFunctionArn"];
|
|
9691
9692
|
if (!targetFunctionArn) throw new ProvisioningError(`TargetFunctionArn is required for Lambda URL ${logicalId}`, resourceType, logicalId);
|
|
9692
|
-
const authType = properties["AuthType"]
|
|
9693
|
+
const authType = requireConfigString(properties["AuthType"], "NONE", "AWS::Lambda::Url AuthType");
|
|
9693
9694
|
try {
|
|
9694
9695
|
const cors = properties["Cors"];
|
|
9695
9696
|
const createParams = {
|
|
@@ -9733,7 +9734,7 @@ var LambdaUrlProvider = class {
|
|
|
9733
9734
|
};
|
|
9734
9735
|
const updateParams = {
|
|
9735
9736
|
FunctionName: physicalId,
|
|
9736
|
-
AuthType: properties["AuthType"]
|
|
9737
|
+
AuthType: requireConfigString(properties["AuthType"], "NONE", "AWS::Lambda::Url AuthType")
|
|
9737
9738
|
};
|
|
9738
9739
|
const invokeMode = clearOnUpdateRemoval(properties["InvokeMode"], previousProperties["InvokeMode"], "BUFFERED");
|
|
9739
9740
|
if (invokeMode !== void 0) updateParams.InvokeMode = invokeMode;
|
|
@@ -12317,11 +12318,18 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
12317
12318
|
if (billingMode === "PROVISIONED") createParams.ProvisionedThroughput = derivePerCallProvisionedThroughput(properties, currentRegion);
|
|
12318
12319
|
const streamSpecInput = properties["StreamSpecification"];
|
|
12319
12320
|
const needsStream = replicas.some((r) => r["Region"] !== currentRegion) || replicas.length > 1;
|
|
12320
|
-
if (streamSpecInput
|
|
12321
|
-
|
|
12322
|
-
|
|
12323
|
-
|
|
12324
|
-
|
|
12321
|
+
if (streamSpecInput != null) {
|
|
12322
|
+
let streamViewType;
|
|
12323
|
+
try {
|
|
12324
|
+
streamViewType = readConfigString(streamSpecInput, "StreamViewType", "NEW_AND_OLD_IMAGES", "AWS::DynamoDB::GlobalTable StreamSpecification");
|
|
12325
|
+
} catch (error) {
|
|
12326
|
+
throw new ProvisioningError(error instanceof Error ? error.message : String(error), resourceType, logicalId, void 0, error instanceof Error ? error : void 0);
|
|
12327
|
+
}
|
|
12328
|
+
createParams.StreamSpecification = {
|
|
12329
|
+
StreamEnabled: true,
|
|
12330
|
+
StreamViewType: streamViewType
|
|
12331
|
+
};
|
|
12332
|
+
} else if (needsStream) {
|
|
12325
12333
|
this.logger.info(`Auto-enabling streams (NEW_AND_OLD_IMAGES) on ${logicalId} — required for cross-region replication`);
|
|
12326
12334
|
createParams.StreamSpecification = {
|
|
12327
12335
|
StreamEnabled: true,
|
|
@@ -12577,7 +12585,7 @@ var DynamoDBGlobalTableProvider = class {
|
|
|
12577
12585
|
if (properties["StreamSpecification"] !== void 0 && !deepEqual$1(properties["StreamSpecification"], previousProperties["StreamSpecification"])) {
|
|
12578
12586
|
flatUpdate.StreamSpecification = {
|
|
12579
12587
|
StreamEnabled: true,
|
|
12580
|
-
StreamViewType: properties["StreamSpecification"]
|
|
12588
|
+
StreamViewType: readConfigString(properties["StreamSpecification"], "StreamViewType", "NEW_AND_OLD_IMAGES", "AWS::DynamoDB::GlobalTable StreamSpecification")
|
|
12581
12589
|
};
|
|
12582
12590
|
flatChanged = true;
|
|
12583
12591
|
}
|
|
@@ -21934,8 +21942,9 @@ var CloudFrontOAIProvider = class {
|
|
|
21934
21942
|
*/
|
|
21935
21943
|
async create(logicalId, resourceType, properties) {
|
|
21936
21944
|
this.logger.debug(`Creating CloudFront OAI ${logicalId}`);
|
|
21937
|
-
const
|
|
21945
|
+
const config = properties["CloudFrontOriginAccessIdentityConfig"];
|
|
21938
21946
|
try {
|
|
21947
|
+
const comment = readConfigString(config, "Comment", "", "AWS::CloudFront::CloudFrontOriginAccessIdentity CloudFrontOriginAccessIdentityConfig");
|
|
21939
21948
|
const oai = (await this.cloudFrontClient.send(new CreateCloudFrontOriginAccessIdentityCommand({ CloudFrontOriginAccessIdentityConfig: {
|
|
21940
21949
|
CallerReference: logicalId,
|
|
21941
21950
|
Comment: comment
|
|
@@ -21970,8 +21979,9 @@ var CloudFrontOAIProvider = class {
|
|
|
21970
21979
|
*/
|
|
21971
21980
|
async update(logicalId, physicalId, resourceType, properties, _previousProperties) {
|
|
21972
21981
|
this.logger.debug(`Updating CloudFront OAI ${logicalId}: ${physicalId}`);
|
|
21973
|
-
const
|
|
21982
|
+
const config = properties["CloudFrontOriginAccessIdentityConfig"];
|
|
21974
21983
|
try {
|
|
21984
|
+
const comment = readConfigString(config, "Comment", "", "AWS::CloudFront::CloudFrontOriginAccessIdentity CloudFrontOriginAccessIdentityConfig");
|
|
21975
21985
|
const getResponse = await this.cloudFrontClient.send(new GetCloudFrontOriginAccessIdentityCommand({ Id: physicalId }));
|
|
21976
21986
|
const etag = getResponse.ETag;
|
|
21977
21987
|
if (!etag) throw new Error("GetCloudFrontOriginAccessIdentity did not return ETag");
|
|
@@ -25035,7 +25045,12 @@ var ECSProvider = class {
|
|
|
25035
25045
|
const newServiceName = properties["ServiceName"];
|
|
25036
25046
|
const oldServiceName = previousProperties["ServiceName"];
|
|
25037
25047
|
if (newServiceName && oldServiceName && newServiceName !== oldServiceName) throw new ProvisioningError(`Cannot update ServiceName for ECS service ${logicalId} (immutable property, requires replacement)`, resourceType, logicalId, physicalId);
|
|
25038
|
-
|
|
25048
|
+
let deploymentControllerType;
|
|
25049
|
+
try {
|
|
25050
|
+
deploymentControllerType = readConfigString(properties["DeploymentController"], "Type", "ECS", "AWS::ECS::Service DeploymentController");
|
|
25051
|
+
} catch (error) {
|
|
25052
|
+
throw new ProvisioningError(error instanceof Error ? error.message : String(error), resourceType, logicalId, physicalId, error instanceof Error ? error : void 0);
|
|
25053
|
+
}
|
|
25039
25054
|
const isEcsController = deploymentControllerType === "ECS";
|
|
25040
25055
|
const loadBalancersChanged = JSON.stringify(previousProperties["LoadBalancers"] ?? null) !== JSON.stringify(properties["LoadBalancers"] ?? null);
|
|
25041
25056
|
const serviceRegistriesChanged = JSON.stringify(previousProperties["ServiceRegistries"] ?? null) !== JSON.stringify(properties["ServiceRegistries"] ?? null);
|
|
@@ -29919,13 +29934,14 @@ var Route53Provider = class {
|
|
|
29919
29934
|
if (!name) throw new ProvisioningError(`Name is required for hosted zone ${logicalId}`, resourceType, logicalId);
|
|
29920
29935
|
try {
|
|
29921
29936
|
const hostedZoneConfig = properties["HostedZoneConfig"];
|
|
29937
|
+
const createComment = readConfigString(hostedZoneConfig, "Comment", "", "AWS::Route53::HostedZone HostedZoneConfig");
|
|
29922
29938
|
const vpcs = properties["VPCs"];
|
|
29923
29939
|
const firstVpc = vpcs && vpcs.length > 0 ? vpcs[0] : void 0;
|
|
29924
29940
|
const response = await this.getClient().send(new CreateHostedZoneCommand({
|
|
29925
29941
|
Name: name,
|
|
29926
29942
|
CallerReference: `${logicalId}-${Date.now()}`,
|
|
29927
|
-
...
|
|
29928
|
-
Comment:
|
|
29943
|
+
...createComment !== "" ? { HostedZoneConfig: {
|
|
29944
|
+
Comment: createComment,
|
|
29929
29945
|
...firstVpc ? { PrivateZone: true } : {}
|
|
29930
29946
|
} } : firstVpc ? { HostedZoneConfig: { PrivateZone: true } } : {},
|
|
29931
29947
|
...firstVpc ? { VPC: {
|
|
@@ -29983,7 +29999,8 @@ var Route53Provider = class {
|
|
|
29983
29999
|
async updateHostedZone(logicalId, physicalId, resourceType, properties, previousProperties) {
|
|
29984
30000
|
this.logger.debug(`Updating Route 53 hosted zone ${logicalId}: ${physicalId}`);
|
|
29985
30001
|
try {
|
|
29986
|
-
const
|
|
30002
|
+
const hostedZoneConfig = properties["HostedZoneConfig"];
|
|
30003
|
+
const comment = readConfigString(hostedZoneConfig, "Comment", "", "AWS::Route53::HostedZone HostedZoneConfig");
|
|
29987
30004
|
await this.getClient().send(new UpdateHostedZoneCommentCommand({
|
|
29988
30005
|
Id: physicalId,
|
|
29989
30006
|
Comment: comment
|
|
@@ -42382,8 +42399,8 @@ var CodeBuildProvider = class {
|
|
|
42382
42399
|
* object literal returned against a declared type IS excess-property checked,
|
|
42383
42400
|
* which turns each member name into a compile-time fact (issue #1386).
|
|
42384
42401
|
*/
|
|
42385
|
-
mapSource(source) {
|
|
42386
|
-
if (
|
|
42402
|
+
mapSource(source, containerPath) {
|
|
42403
|
+
if (source == null) return { type: "NO_SOURCE" };
|
|
42387
42404
|
let buildspec;
|
|
42388
42405
|
if (source["BuildSpec"] !== void 0) {
|
|
42389
42406
|
const bs = source["BuildSpec"];
|
|
@@ -42393,7 +42410,7 @@ var CodeBuildProvider = class {
|
|
|
42393
42410
|
const cfnGitSubmodules = source["GitSubmodulesConfig"];
|
|
42394
42411
|
const cfnBuildStatus = source["BuildStatusConfig"];
|
|
42395
42412
|
return {
|
|
42396
|
-
type: source
|
|
42413
|
+
type: readConfigString(source, "Type", "NO_SOURCE", containerPath),
|
|
42397
42414
|
buildspec,
|
|
42398
42415
|
location: source["Location"],
|
|
42399
42416
|
gitCloneDepth: source["GitCloneDepth"],
|
|
@@ -42411,10 +42428,10 @@ var CodeBuildProvider = class {
|
|
|
42411
42428
|
} : void 0
|
|
42412
42429
|
};
|
|
42413
42430
|
}
|
|
42414
|
-
mapArtifacts(artifacts) {
|
|
42415
|
-
if (
|
|
42431
|
+
mapArtifacts(artifacts, containerPath) {
|
|
42432
|
+
if (artifacts == null) return { type: "NO_ARTIFACTS" };
|
|
42416
42433
|
return {
|
|
42417
|
-
type: artifacts
|
|
42434
|
+
type: readConfigString(artifacts, "Type", "NO_ARTIFACTS", containerPath),
|
|
42418
42435
|
location: artifacts["Location"],
|
|
42419
42436
|
path: artifacts["Path"],
|
|
42420
42437
|
name: artifacts["Name"],
|
|
@@ -42472,9 +42489,9 @@ var CodeBuildProvider = class {
|
|
|
42472
42489
|
};
|
|
42473
42490
|
}
|
|
42474
42491
|
const cfnSecondarySources = properties["SecondarySources"];
|
|
42475
|
-
const secondarySources = cfnSecondarySources ? cfnSecondarySources.map((s) => this.mapSource(s))
|
|
42492
|
+
const secondarySources = cfnSecondarySources == null ? void 0 : requireConfigArray(cfnSecondarySources, "AWS::CodeBuild::Project SecondarySources").map((s) => this.mapSource(s, "AWS::CodeBuild::Project SecondarySources[]"));
|
|
42476
42493
|
const cfnSecondaryArtifacts = properties["SecondaryArtifacts"];
|
|
42477
|
-
const secondaryArtifacts = cfnSecondaryArtifacts ? cfnSecondaryArtifacts.map((a) => this.mapArtifacts(a))
|
|
42494
|
+
const secondaryArtifacts = cfnSecondaryArtifacts == null ? void 0 : requireConfigArray(cfnSecondaryArtifacts, "AWS::CodeBuild::Project SecondaryArtifacts").map((a) => this.mapArtifacts(a, "AWS::CodeBuild::Project SecondaryArtifacts[]"));
|
|
42478
42495
|
const cfnSecondarySourceVersions = properties["SecondarySourceVersions"];
|
|
42479
42496
|
const secondarySourceVersions = cfnSecondarySourceVersions ? cfnSecondarySourceVersions.map((sv) => ({
|
|
42480
42497
|
sourceIdentifier: sv["SourceIdentifier"],
|
|
@@ -42505,10 +42522,10 @@ var CodeBuildProvider = class {
|
|
|
42505
42522
|
}
|
|
42506
42523
|
return {
|
|
42507
42524
|
name,
|
|
42508
|
-
source: this.mapSource(source),
|
|
42525
|
+
source: this.mapSource(source, "AWS::CodeBuild::Project Source"),
|
|
42509
42526
|
environment: {
|
|
42510
|
-
type: environment
|
|
42511
|
-
computeType: environment
|
|
42527
|
+
type: readConfigString(environment, "Type", "LINUX_CONTAINER", "AWS::CodeBuild::Project Environment"),
|
|
42528
|
+
computeType: readConfigString(environment, "ComputeType", "BUILD_GENERAL1_SMALL", "AWS::CodeBuild::Project Environment"),
|
|
42512
42529
|
image: environment?.["Image"],
|
|
42513
42530
|
environmentVariables: envVars ? envVars.map((v) => ({
|
|
42514
42531
|
name: v.Name,
|
|
@@ -42529,7 +42546,7 @@ var CodeBuildProvider = class {
|
|
|
42529
42546
|
} : void 0
|
|
42530
42547
|
},
|
|
42531
42548
|
serviceRole,
|
|
42532
|
-
artifacts: this.mapArtifacts(artifacts),
|
|
42549
|
+
artifacts: this.mapArtifacts(artifacts, "AWS::CodeBuild::Project Artifacts"),
|
|
42533
42550
|
tags: tags ? tags.map((t) => ({
|
|
42534
42551
|
key: t.Key,
|
|
42535
42552
|
value: t.Value
|
|
@@ -43894,9 +43911,11 @@ var S3DirectoryBucketProvider = class {
|
|
|
43894
43911
|
handledProperties = /* @__PURE__ */ new Map([["AWS::S3Express::DirectoryBucket", /* @__PURE__ */ new Set([
|
|
43895
43912
|
"DataRedundancy",
|
|
43896
43913
|
"LocationName",
|
|
43897
|
-
"BucketName"
|
|
43914
|
+
"BucketName",
|
|
43915
|
+
"Tags"
|
|
43898
43916
|
])]]);
|
|
43899
43917
|
ec2Client;
|
|
43918
|
+
s3ControlClient;
|
|
43900
43919
|
providerRegion = process.env["AWS_REGION"];
|
|
43901
43920
|
constructor() {
|
|
43902
43921
|
const awsClients = getAwsClients();
|
|
@@ -43908,6 +43927,17 @@ var S3DirectoryBucketProvider = class {
|
|
|
43908
43927
|
return this.ec2Client;
|
|
43909
43928
|
}
|
|
43910
43929
|
/**
|
|
43930
|
+
* Directory-bucket tags live on the S3 control plane: `PutBucketTagging`
|
|
43931
|
+
* is documented "not supported for directory buckets", and the tag CRUD
|
|
43932
|
+
* after create is S3 Control's `TagResource` / `UntagResource` /
|
|
43933
|
+
* `ListTagsForResource` (requiring the `s3express:TagResource` /
|
|
43934
|
+
* `s3express:UntagResource` / `s3express:ListTagsForResource` permissions).
|
|
43935
|
+
*/
|
|
43936
|
+
getS3ControlClient() {
|
|
43937
|
+
if (!this.s3ControlClient) this.s3ControlClient = new S3ControlClient(this.providerRegion ? { region: this.providerRegion } : {});
|
|
43938
|
+
return this.s3ControlClient;
|
|
43939
|
+
}
|
|
43940
|
+
/**
|
|
43911
43941
|
* Convert AZ name (us-east-1a) to AZ ID (use1-az1) via EC2 DescribeAvailabilityZones
|
|
43912
43942
|
*/
|
|
43913
43943
|
async getAzId(azName) {
|
|
@@ -43938,7 +43968,16 @@ var S3DirectoryBucketProvider = class {
|
|
|
43938
43968
|
* Build attributes for a directory bucket
|
|
43939
43969
|
*/
|
|
43940
43970
|
async buildAttributes(bucketName) {
|
|
43941
|
-
return { Arn:
|
|
43971
|
+
return { Arn: await this.buildBucketArn(bucketName) };
|
|
43972
|
+
}
|
|
43973
|
+
/**
|
|
43974
|
+
* Directory bucket ARN: `arn:aws:s3express:{region}:{account}:bucket/{name}`.
|
|
43975
|
+
* Also the `ResourceArn` for the S3 Control tag operations. Callers that
|
|
43976
|
+
* already resolved the account (for the S3 Control `AccountId` parameter)
|
|
43977
|
+
* pass it in so the STS lookup runs once per operation.
|
|
43978
|
+
*/
|
|
43979
|
+
async buildBucketArn(bucketName, accountId) {
|
|
43980
|
+
return `arn:aws:s3express:${await this.getRegion()}:${accountId ?? await this.getAccountId()}:bucket/${bucketName}`;
|
|
43942
43981
|
}
|
|
43943
43982
|
/**
|
|
43944
43983
|
* Create an S3 Express Directory Bucket
|
|
@@ -43953,6 +43992,8 @@ var S3DirectoryBucketProvider = class {
|
|
|
43953
43992
|
maxLength: 64,
|
|
43954
43993
|
lowercase: true
|
|
43955
43994
|
})}--${azId}--x-s3`;
|
|
43995
|
+
const tags = properties["Tags"];
|
|
43996
|
+
const includeTags = tags != null && !(Array.isArray(tags) && tags.length === 0);
|
|
43956
43997
|
try {
|
|
43957
43998
|
await this.s3Client.send(new CreateBucketCommand({
|
|
43958
43999
|
Bucket: bucketName,
|
|
@@ -43964,7 +44005,8 @@ var S3DirectoryBucketProvider = class {
|
|
|
43964
44005
|
Location: {
|
|
43965
44006
|
Name: azId,
|
|
43966
44007
|
Type: "AvailabilityZone"
|
|
43967
|
-
}
|
|
44008
|
+
},
|
|
44009
|
+
...includeTags ? { Tags: tags } : {}
|
|
43968
44010
|
}
|
|
43969
44011
|
}));
|
|
43970
44012
|
this.logger.debug(`Created S3 Express Directory Bucket: ${bucketName}`);
|
|
@@ -43981,28 +44023,60 @@ var S3DirectoryBucketProvider = class {
|
|
|
43981
44023
|
/**
|
|
43982
44024
|
* Update an S3 Express Directory Bucket
|
|
43983
44025
|
*
|
|
43984
|
-
*
|
|
44026
|
+
* `BucketName` / `DataRedundancy` / `LocationName` are create-only (the
|
|
44027
|
+
* registry-schema fallback classifies changes to them as replacement), so
|
|
44028
|
+
* the only in-place mutable property is `Tags` — applied via S3 Control's
|
|
44029
|
+
* `TagResource` / `UntagResource` (the directory-bucket tag CRUD; the
|
|
44030
|
+
* bucket-level `PutBucketTagging` is not supported for directory buckets).
|
|
44031
|
+
* `TagResource` is additive-only, so a tag dropped from the template
|
|
44032
|
+
* (partial removal) — or the entire `Tags` property removed (full removal,
|
|
44033
|
+
* `newTags === undefined`) — would survive on AWS unless the removed keys
|
|
44034
|
+
* are explicitly `UntagResource`d.
|
|
43985
44035
|
*/
|
|
43986
|
-
update(logicalId, physicalId,
|
|
43987
|
-
|
|
43988
|
-
|
|
43989
|
-
|
|
43990
|
-
|
|
43991
|
-
|
|
44036
|
+
async update(logicalId, physicalId, resourceType, properties, previousProperties) {
|
|
44037
|
+
try {
|
|
44038
|
+
const newTags = properties["Tags"];
|
|
44039
|
+
const oldTags = previousProperties["Tags"];
|
|
44040
|
+
const malformedNewTags = newTags != null && !Array.isArray(newTags);
|
|
44041
|
+
const newKeys = new Set((Array.isArray(newTags) ? newTags : []).map((t) => t.Key).filter((k) => !!k));
|
|
44042
|
+
const removedKeys = malformedNewTags ? [] : (Array.isArray(oldTags) ? oldTags : []).map((t) => t.Key).filter((k) => !!k && !newKeys.has(k));
|
|
44043
|
+
const tagsToApply = malformedNewTags || Array.isArray(newTags) && newTags.length > 0 ? newTags : void 0;
|
|
44044
|
+
if (JSON.stringify(newTags) !== JSON.stringify(oldTags) && (removedKeys.length > 0 || tagsToApply !== void 0)) {
|
|
44045
|
+
const accountId = await this.getAccountId();
|
|
44046
|
+
const resourceArn = await this.buildBucketArn(physicalId, accountId);
|
|
44047
|
+
if (removedKeys.length > 0) await this.getS3ControlClient().send(new UntagResourceCommand$23({
|
|
44048
|
+
AccountId: accountId,
|
|
44049
|
+
ResourceArn: resourceArn,
|
|
44050
|
+
TagKeys: removedKeys
|
|
44051
|
+
}));
|
|
44052
|
+
if (tagsToApply) await this.getS3ControlClient().send(new TagResourceCommand$23({
|
|
44053
|
+
AccountId: accountId,
|
|
44054
|
+
ResourceArn: resourceArn,
|
|
44055
|
+
Tags: tagsToApply
|
|
44056
|
+
}));
|
|
44057
|
+
this.logger.debug(`Updated tags for S3 Express Directory Bucket ${physicalId}`);
|
|
44058
|
+
} else this.logger.debug(`Update for S3 Express Directory Bucket ${logicalId} is a no-op (no tag changes; other properties are immutable)`);
|
|
44059
|
+
return {
|
|
44060
|
+
physicalId,
|
|
44061
|
+
wasReplaced: false
|
|
44062
|
+
};
|
|
44063
|
+
} catch (error) {
|
|
44064
|
+
const cause = error instanceof Error ? error : void 0;
|
|
44065
|
+
throw new ProvisioningError(`Failed to update S3 Express Directory Bucket ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, physicalId, cause);
|
|
44066
|
+
}
|
|
43992
44067
|
}
|
|
43993
44068
|
/**
|
|
43994
44069
|
* Delete an S3 Express Directory Bucket
|
|
43995
44070
|
*
|
|
43996
44071
|
* CloudFormation-parity data guard (issue #1344, sibling of #1340): a
|
|
43997
44072
|
* non-empty directory bucket is only auto-emptied when the user opted in —
|
|
43998
|
-
* the `aws-cdk:auto-delete-objects` tag on the bucket (
|
|
43999
|
-
*
|
|
44000
|
-
*
|
|
44001
|
-
*
|
|
44002
|
-
*
|
|
44003
|
-
*
|
|
44004
|
-
*
|
|
44005
|
-
* bucket you tried to delete is not empty", 409).
|
|
44073
|
+
* the `aws-cdk:auto-delete-objects` tag on the bucket (a first-class
|
|
44074
|
+
* template `Tags` entry now that `Tags` is a handled property, issue #609)
|
|
44075
|
+
* or the deploy engine's `--force-stateful-recreation` consent on a
|
|
44076
|
+
* replacement delete (`DeleteContext.forceDataDelete`). Otherwise the
|
|
44077
|
+
* not-empty error surfaces exactly like CloudFormation's DELETE_FAILED
|
|
44078
|
+
* (live-A/B-verified 2026-08-03: CFn fails a non-empty DirectoryBucket
|
|
44079
|
+
* delete with "The bucket you tried to delete is not empty", 409).
|
|
44006
44080
|
*
|
|
44007
44081
|
* Directory buckets do not support versioning, so the opted-in auto-empty
|
|
44008
44082
|
* only needs to delete current objects.
|
|
@@ -44011,15 +44085,8 @@ var S3DirectoryBucketProvider = class {
|
|
|
44011
44085
|
this.logger.debug(`Deleting S3 Express Directory Bucket ${logicalId}: ${physicalId}`);
|
|
44012
44086
|
const allowAutoEmpty = context?.forceDataDelete === true || hasCdkAutoDeleteTag(properties, "aws-cdk:auto-delete-objects");
|
|
44013
44087
|
try {
|
|
44014
|
-
|
|
44015
|
-
this.logger.info(`Emptying directory bucket ${physicalId} before deletion (auto-delete opt-in present)`);
|
|
44016
|
-
await this.emptyBucket(physicalId);
|
|
44017
|
-
}
|
|
44018
|
-
await this.s3Client.send(new DeleteBucketCommand({ Bucket: physicalId }));
|
|
44019
|
-
this.logger.debug(`Successfully deleted S3 Express Directory Bucket ${logicalId}`);
|
|
44088
|
+
await this.deleteBucketWithEmptyRetry(logicalId, physicalId, allowAutoEmpty);
|
|
44020
44089
|
} catch (error) {
|
|
44021
|
-
const notEmptyMsg = error instanceof Error ? error.message : String(error);
|
|
44022
|
-
if (!allowAutoEmpty && (notEmptyMsg.includes("not empty") || notEmptyMsg.includes("BucketNotEmpty"))) throw new ProvisioningError(`Failed to delete S3 Express Directory Bucket ${logicalId}: bucket ${physicalId} is not empty. Matching CloudFormation, cdkd does not delete a non-empty directory bucket without an explicit opt-in. Delete all objects first (e.g. aws s3 rm s3://${physicalId} --recursive) and destroy again.`, resourceType, logicalId, physicalId, error instanceof Error ? error : void 0);
|
|
44023
44090
|
if (error instanceof Error && (error.name === "NoSuchBucket" || error.name === "BucketNotFound")) {
|
|
44024
44091
|
assertRegionMatch(await this.s3Client.config.region(), context?.expectedRegion, resourceType, logicalId, physicalId);
|
|
44025
44092
|
this.logger.debug(`Bucket ${physicalId} does not exist, skipping deletion`);
|
|
@@ -44030,6 +44097,35 @@ var S3DirectoryBucketProvider = class {
|
|
|
44030
44097
|
}
|
|
44031
44098
|
}
|
|
44032
44099
|
/**
|
|
44100
|
+
* Delete the bucket, absorbing the write race on an opted-in auto-empty:
|
|
44101
|
+
* an object written between the empty pass and the delete makes AWS reject
|
|
44102
|
+
* the delete as not-empty, so re-empty and retry (bounded) — the same
|
|
44103
|
+
* bounded loop as the standard-bucket sibling, ported per issue #609's
|
|
44104
|
+
* "Tags becomes a handled property" note (the tag opt-in is mainstream
|
|
44105
|
+
* now, so the ~zero-opt-in rationale for skipping the loop in PR #1347 no
|
|
44106
|
+
* longer holds). Without the opt-in, the first not-empty error surfaces
|
|
44107
|
+
* as the CloudFormation-parity guard (issue #1344).
|
|
44108
|
+
*/
|
|
44109
|
+
async deleteBucketWithEmptyRetry(logicalId, bucketName, allowAutoEmpty) {
|
|
44110
|
+
const maxAttempts = 3;
|
|
44111
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) try {
|
|
44112
|
+
await this.s3Client.send(new DeleteBucketCommand({ Bucket: bucketName }));
|
|
44113
|
+
this.logger.debug(`Successfully deleted S3 Express Directory Bucket ${logicalId}`);
|
|
44114
|
+
return;
|
|
44115
|
+
} catch (error) {
|
|
44116
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
44117
|
+
if (msg.includes("not empty") || msg.includes("BucketNotEmpty")) {
|
|
44118
|
+
if (!allowAutoEmpty) throw new Error(`bucket ${bucketName} is not empty. Matching CloudFormation, cdkd does not delete a non-empty directory bucket without an explicit opt-in. Delete all objects first (e.g. aws s3 rm s3://${bucketName} --recursive) and destroy again.`);
|
|
44119
|
+
this.logger.info(`Directory bucket ${bucketName} not empty (attempt ${attempt}/${maxAttempts}), emptying (auto-delete opt-in present)...`);
|
|
44120
|
+
await this.emptyBucket(bucketName);
|
|
44121
|
+
continue;
|
|
44122
|
+
}
|
|
44123
|
+
throw error;
|
|
44124
|
+
}
|
|
44125
|
+
await this.s3Client.send(new DeleteBucketCommand({ Bucket: bucketName }));
|
|
44126
|
+
this.logger.debug(`Successfully deleted S3 Express Directory Bucket ${logicalId}`);
|
|
44127
|
+
}
|
|
44128
|
+
/**
|
|
44033
44129
|
* Empty all objects from a directory bucket.
|
|
44034
44130
|
* Lists and deletes objects in batches of 1000.
|
|
44035
44131
|
*/
|
|
@@ -44060,10 +44156,11 @@ var S3DirectoryBucketProvider = class {
|
|
|
44060
44156
|
* CFn-property shape.
|
|
44061
44157
|
*
|
|
44062
44158
|
* Issues `HeadBucket` to verify existence and surfaces `BucketName`
|
|
44063
|
-
* (the physicalId)
|
|
44064
|
-
*
|
|
44065
|
-
*
|
|
44066
|
-
*
|
|
44159
|
+
* (the physicalId) plus `Tags` (via S3 Control `ListTagsForResource`,
|
|
44160
|
+
* the directory-bucket tag read). `DataRedundancy` and `LocationName`
|
|
44161
|
+
* are not exposed by any cheap S3 Express API — the only way to inspect
|
|
44162
|
+
* them is by parsing the bucket name's `--<az-id>--x-s3` suffix, which is
|
|
44163
|
+
* best effort. We surface them when they are recoverable from the bucket
|
|
44067
44164
|
* name to give the comparator a chance to detect mismatches.
|
|
44068
44165
|
*
|
|
44069
44166
|
* `--<az-id>--x-s3` suffix parsing: directory bucket names follow the
|
|
@@ -44089,8 +44186,17 @@ var S3DirectoryBucketProvider = class {
|
|
|
44089
44186
|
}
|
|
44090
44187
|
const result = { BucketName: physicalId };
|
|
44091
44188
|
if (physicalId.endsWith("--x-s3")) result["DataRedundancy"] = "SingleAvailabilityZone";
|
|
44189
|
+
result["Tags"] = await this.readTags(physicalId);
|
|
44092
44190
|
return result;
|
|
44093
44191
|
}
|
|
44192
|
+
async readTags(bucketName) {
|
|
44193
|
+
const accountId = await this.getAccountId();
|
|
44194
|
+
const resourceArn = await this.buildBucketArn(bucketName, accountId);
|
|
44195
|
+
return normalizeAwsTagsToCfn((await this.getS3ControlClient().send(new ListTagsForResourceCommand$18({
|
|
44196
|
+
AccountId: accountId,
|
|
44197
|
+
ResourceArn: resourceArn
|
|
44198
|
+
}))).Tags);
|
|
44199
|
+
}
|
|
44094
44200
|
/**
|
|
44095
44201
|
* Adopt an existing S3 Express Directory Bucket into cdkd state.
|
|
44096
44202
|
*
|
|
@@ -44576,7 +44682,7 @@ var S3TablesProvider = class {
|
|
|
44576
44682
|
*/
|
|
44577
44683
|
async readTagsBestEffort(resourceArn) {
|
|
44578
44684
|
try {
|
|
44579
|
-
const tags = (await this.getClient().send(new ListTagsForResourceCommand$
|
|
44685
|
+
const tags = (await this.getClient().send(new ListTagsForResourceCommand$19({ resourceArn }))).tags ?? {};
|
|
44580
44686
|
const out = [];
|
|
44581
44687
|
for (const [Key, Value] of Object.entries(tags)) out.push({
|
|
44582
44688
|
Key,
|
|
@@ -44630,7 +44736,7 @@ var S3TablesProvider = class {
|
|
|
44630
44736
|
const resourceArn = await this.lookupTableArn(tableBucketARN, namespace, name);
|
|
44631
44737
|
if (!resourceArn) throw new ProvisioningError(`applyTableTagsDiff: GetTable returned no tableARN for ${physicalId} — table is gone or state is out-of-sync. Refusing to silently drop the tag update (run 'cdkd state orphan ${logicalId}' to clean up if the table was deleted out-of-band).`, resourceType, logicalId, physicalId);
|
|
44632
44738
|
if (removedKeys.length > 0) try {
|
|
44633
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
44739
|
+
await this.getClient().send(new UntagResourceCommand$24({
|
|
44634
44740
|
resourceArn,
|
|
44635
44741
|
tagKeys: removedKeys
|
|
44636
44742
|
}));
|
|
@@ -44639,7 +44745,7 @@ var S3TablesProvider = class {
|
|
|
44639
44745
|
throw new ProvisioningError(`applyTableTagsDiff: UntagResource failed for ${resourceArn} (keys: ${removedKeys.join(", ")}): ${err instanceof Error ? err.message : String(err)}. State has NOT been updated so the next deploy will retry the tag-diff.`, resourceType, logicalId, physicalId, cause);
|
|
44640
44746
|
}
|
|
44641
44747
|
if (Object.keys(upserts).length > 0) try {
|
|
44642
|
-
await this.getClient().send(new TagResourceCommand$
|
|
44748
|
+
await this.getClient().send(new TagResourceCommand$24({
|
|
44643
44749
|
resourceArn,
|
|
44644
44750
|
tags: upserts
|
|
44645
44751
|
}));
|
|
@@ -44671,7 +44777,7 @@ var S3TablesProvider = class {
|
|
|
44671
44777
|
if (removedKeys.length === 0 && Object.keys(upserts).length === 0) return;
|
|
44672
44778
|
const resourceArn = physicalId;
|
|
44673
44779
|
if (removedKeys.length > 0) try {
|
|
44674
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
44780
|
+
await this.getClient().send(new UntagResourceCommand$24({
|
|
44675
44781
|
resourceArn,
|
|
44676
44782
|
tagKeys: removedKeys
|
|
44677
44783
|
}));
|
|
@@ -44680,7 +44786,7 @@ var S3TablesProvider = class {
|
|
|
44680
44786
|
throw new ProvisioningError(`applyTableBucketTagsDiff: UntagResource failed for ${resourceArn} (keys: ${removedKeys.join(", ")}): ${err instanceof Error ? err.message : String(err)}. State has NOT been updated so the next deploy will retry the tag-diff.`, resourceType, logicalId, physicalId, cause);
|
|
44681
44787
|
}
|
|
44682
44788
|
if (Object.keys(upserts).length > 0) try {
|
|
44683
|
-
await this.getClient().send(new TagResourceCommand$
|
|
44789
|
+
await this.getClient().send(new TagResourceCommand$24({
|
|
44684
44790
|
resourceArn,
|
|
44685
44791
|
tags: upserts
|
|
44686
44792
|
}));
|
|
@@ -66600,7 +66706,7 @@ function createMigrateCommand() {
|
|
|
66600
66706
|
*/
|
|
66601
66707
|
function buildProgram() {
|
|
66602
66708
|
const program = new Command();
|
|
66603
|
-
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.278.
|
|
66709
|
+
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.278.36");
|
|
66604
66710
|
program.hook("preAction", (_thisCommand, actionCommand) => {
|
|
66605
66711
|
const { profile } = actionCommand.optsWithGlobals();
|
|
66606
66712
|
if (profile !== void 0) process.env["AWS_PROFILE"] = profile;
|