@go-to-k/cdkd 0.281.7 → 0.281.9
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-Lj_P_wtb.js → asg-provider-C4zMjWYv.js} +2 -2
- package/dist/{asg-provider-Lj_P_wtb.js.map → asg-provider-C4zMjWYv.js.map} +1 -1
- package/dist/cli.js +299 -95
- package/dist/cli.js.map +1 -1
- package/dist/{deploy-engine-B8Qo1vPU.js → deploy-engine-DQ9kW3Pu.js} +101 -10
- package/dist/deploy-engine-DQ9kW3Pu.js.map +1 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-B8Qo1vPU.js.map +0 -1
|
@@ -10393,12 +10393,15 @@ const AWS_NO_VALUE = Symbol("AWS::NoValue");
|
|
|
10393
10393
|
* - already correct, no change needed: EC2::EIP (before-first-pipe),
|
|
10394
10394
|
* S3Tables::Namespace / ::Table (added by the 2026-07-03 close-out audit),
|
|
10395
10395
|
* ECS::Service (before-first-pipe; stores the bare ARN on the SDK path);
|
|
10396
|
-
* - KNOWN WRONG and
|
|
10396
|
+
* - was KNOWN WRONG and not fixable by a Set entry; FIXED by issue #1681,
|
|
10397
|
+
* each with a mechanism of its own rather than an entry here:
|
|
10397
10398
|
* AppSync::ApiKey / ::DataSource / ::Resolver (`Ref` returns the resource
|
|
10398
|
-
* ARN,
|
|
10399
|
-
*
|
|
10400
|
-
*
|
|
10401
|
-
*
|
|
10399
|
+
* ARN, which is no segment of the compound id — recovered from the
|
|
10400
|
+
* provider-recorded ARN attribute via {@link REF_RETURNS_ARN_FROM_STATE})
|
|
10401
|
+
* and Route53::RecordSet (`Ref` returns "the name of the record" — the
|
|
10402
|
+
* MIDDLE segment of `<hostedZoneId>|<name>|<type>`, which neither
|
|
10403
|
+
* after-LAST-pipe nor before-FIRST-pipe yields, so it takes
|
|
10404
|
+
* {@link REF_RETURNS_SEGMENT_AT_INDEX}).
|
|
10402
10405
|
*/
|
|
10403
10406
|
const REF_RETURNS_SEGMENT_AFTER_PIPE = /* @__PURE__ */ new Set([
|
|
10404
10407
|
"AWS::ApiGateway::Model",
|
|
@@ -10475,6 +10478,61 @@ const REF_RETURNS_SEGMENT_BEFORE_FIRST_PIPE = /* @__PURE__ */ new Set([
|
|
|
10475
10478
|
*/
|
|
10476
10479
|
const REF_RETURNS_NAME_FROM_ARN = /* @__PURE__ */ new Map([["AWS::Events::Rule", ":rule/"], ["AWS::CloudTrail::Trail", ":trail/"]]);
|
|
10477
10480
|
/**
|
|
10481
|
+
* Third sibling of the two `REF_RETURNS_SEGMENT_*_PIPE` Sets, for a compound id
|
|
10482
|
+
* whose `Ref` segment is neither the first nor the last (issue #1681).
|
|
10483
|
+
*
|
|
10484
|
+
* `AWS::Route53::RecordSet` is the only entry: `Route53Provider` stores
|
|
10485
|
+
* `<hostedZoneId>|<name>|<type>` while CloudFormation's `Ref` returns "the name
|
|
10486
|
+
* of the record" (docs-verified 2026-08-12) — the MIDDLE segment. Neither
|
|
10487
|
+
* existing Set can express that (after-LAST-pipe yields the record TYPE `A`,
|
|
10488
|
+
* before-FIRST-pipe yields the hosted zone id), which is why the type was filed
|
|
10489
|
+
* rather than added to one of them.
|
|
10490
|
+
*
|
|
10491
|
+
* Value: `arity` is the EXACT segment count the extraction is valid for and
|
|
10492
|
+
* `index` the 0-based segment to return. Requiring the exact arity rather than
|
|
10493
|
+
* a minimum is what keeps this safe on a mis-arity'd id: cdkd's own
|
|
10494
|
+
* `parseRecordSetCompositeId` also demands exactly three parts, so a record
|
|
10495
|
+
* whose name contained a `|` is already rejected everywhere else, and returning
|
|
10496
|
+
* a confidently-wrong middle segment here would be worse than passing the raw
|
|
10497
|
+
* id through. Anything that does not match falls through to the raw physical id,
|
|
10498
|
+
* the same graceful degradation the `stateLookup` recoveries use.
|
|
10499
|
+
*
|
|
10500
|
+
* Same maintenance rules as the two Sets: docs-verified `Ref` semantics per
|
|
10501
|
+
* type, a whole-service-family audit before adding one, and a pinning unit test
|
|
10502
|
+
* asserting the RESOLVED value (not merely map membership).
|
|
10503
|
+
*/
|
|
10504
|
+
const REF_RETURNS_SEGMENT_AT_INDEX = /* @__PURE__ */ new Map([["AWS::Route53::RecordSet", {
|
|
10505
|
+
arity: 3,
|
|
10506
|
+
index: 1
|
|
10507
|
+
}]]);
|
|
10508
|
+
/**
|
|
10509
|
+
* Compound-id types whose CFn `Ref` is the resource ARN, recovered from an ARN
|
|
10510
|
+
* ATTRIBUTE the provider recorded at create time (issue #1681).
|
|
10511
|
+
*
|
|
10512
|
+
* The three `AWS::AppSync::*` child types pack a compound physical id
|
|
10513
|
+
* (`<apiId>|<name>`, `<apiId>|<typeName>|<fieldName>`, `<apiId>|<apiKeyId>`)
|
|
10514
|
+
* while CloudFormation's `Ref` returns the resource ARN (all three
|
|
10515
|
+
* docs-verified 2026-08-12). The ARN is not a SEGMENT of the id, so no
|
|
10516
|
+
* `REF_RETURNS_SEGMENT_*` mechanism can produce it — it has to be recovered,
|
|
10517
|
+
* and the same `stateLookup` seam the S3Tables / Backup / CodeCommit cases use
|
|
10518
|
+
* is preferred over string-building an ARN here: `AppSyncProvider` records the
|
|
10519
|
+
* real ARN (from the create response where AWS reports one, else reconstructed
|
|
10520
|
+
* from the deploy's own partition / region / account), so the resolver does not
|
|
10521
|
+
* have to re-derive account context it may not share with the provider.
|
|
10522
|
+
*
|
|
10523
|
+
* Value: the attribute keys to try, in order.
|
|
10524
|
+
*
|
|
10525
|
+
* Degradation is deliberate and matches the sibling recoveries — an IMPORTED
|
|
10526
|
+
* child records `attributes: {}` (`AppSyncProvider.import` returns the physical
|
|
10527
|
+
* id only), so the lookup misses and the raw compound id is returned rather
|
|
10528
|
+
* than a fabricated ARN.
|
|
10529
|
+
*/
|
|
10530
|
+
const REF_RETURNS_ARN_FROM_STATE = /* @__PURE__ */ new Map([
|
|
10531
|
+
["AWS::AppSync::ApiKey", ["Arn"]],
|
|
10532
|
+
["AWS::AppSync::DataSource", ["DataSourceArn"]],
|
|
10533
|
+
["AWS::AppSync::Resolver", ["ResolverArn"]]
|
|
10534
|
+
]);
|
|
10535
|
+
/**
|
|
10478
10536
|
* Build a {@link RefStateLookup} from a resource's stored state maps, checking
|
|
10479
10537
|
* `properties` first (the template value CFn `Ref` mirrors) then `attributes`.
|
|
10480
10538
|
* Only non-empty string values qualify — an intrinsic-shaped or empty value is
|
|
@@ -10503,7 +10561,9 @@ function refStateLookupFromResource(resource) {
|
|
|
10503
10561
|
* `stateLookup` (optional) recovers a `Ref` value that the physical id cannot
|
|
10504
10562
|
* yield — the `AWS::S3Tables::Table` CC-routed case, whose bare TableARN ends
|
|
10505
10563
|
* in a UUID (not the table name CFn `Ref` returns), so the name is read from
|
|
10506
|
-
* the stored `TableName` property/attribute instead (issue #974)
|
|
10564
|
+
* the stored `TableName` property/attribute instead (issue #974) — and, since
|
|
10565
|
+
* issue #1681, the {@link REF_RETURNS_ARN_FROM_STATE} types, whose `Ref` is an
|
|
10566
|
+
* ARN that is no segment of their compound id.
|
|
10507
10567
|
*/
|
|
10508
10568
|
function cfnRefValueFromPhysicalId(resourceType, physicalId, stateLookup) {
|
|
10509
10569
|
if (resourceType === "AWS::S3Tables::Table" && !physicalId.includes("|") && stateLookup) {
|
|
@@ -10541,9 +10601,33 @@ function cfnRefValueFromPhysicalId(resourceType, physicalId, stateLookup) {
|
|
|
10541
10601
|
const pipeIdx = physicalId.indexOf("|");
|
|
10542
10602
|
if (pipeIdx >= 0) return physicalId.substring(0, pipeIdx);
|
|
10543
10603
|
}
|
|
10604
|
+
const segmentSpec = REF_RETURNS_SEGMENT_AT_INDEX.get(resourceType);
|
|
10605
|
+
if (segmentSpec) {
|
|
10606
|
+
const parts = physicalId.split("|");
|
|
10607
|
+
if (parts.length === segmentSpec.arity) {
|
|
10608
|
+
const segment = parts[segmentSpec.index];
|
|
10609
|
+
if (segment) return segment;
|
|
10610
|
+
}
|
|
10611
|
+
}
|
|
10612
|
+
const arnAttributeKeys = REF_RETURNS_ARN_FROM_STATE.get(resourceType);
|
|
10613
|
+
if (arnAttributeKeys && stateLookup) {
|
|
10614
|
+
const arn = stateLookup(arnAttributeKeys);
|
|
10615
|
+
if (arn && !isPlaceholderArn(arn)) return arn;
|
|
10616
|
+
}
|
|
10544
10617
|
return physicalId;
|
|
10545
10618
|
}
|
|
10546
10619
|
/**
|
|
10620
|
+
* True for an ARN carrying a wildcard in its region or account position — the
|
|
10621
|
+
* shape cdkd's AppSync provider recorded before issue #1681. Matched
|
|
10622
|
+
* positionally (fields 3 and 4 of `arn:<partition>:<service>:<region>:<account>`)
|
|
10623
|
+
* rather than by substring, so a legitimate ARN whose RESOURCE segment contains
|
|
10624
|
+
* `*` (an IAM policy resource pattern, an S3 key prefix) is never rejected.
|
|
10625
|
+
*/
|
|
10626
|
+
function isPlaceholderArn(arn) {
|
|
10627
|
+
const fields = arn.split(":");
|
|
10628
|
+
return fields.length >= 5 && (fields[3] === "*" || fields[4] === "*");
|
|
10629
|
+
}
|
|
10630
|
+
/**
|
|
10547
10631
|
* Intrinsic-function keys the resolver knows how to handle.
|
|
10548
10632
|
*
|
|
10549
10633
|
* A CloudFormation intrinsic is ALWAYS a single-key object — `{ "Ref": ... }`
|
|
@@ -10994,6 +11078,13 @@ var IntrinsicFunctionResolver = class {
|
|
|
10994
11078
|
* not the name), so the resolver passes the resource's stored `properties` /
|
|
10995
11079
|
* `attributes` as a `stateLookup` and `cfnRefValueFromPhysicalId` recovers
|
|
10996
11080
|
* the name from the `TableName` property (issue #974).
|
|
11081
|
+
*
|
|
11082
|
+
* Two further mechanisms cover compounds neither Set can express (issue
|
|
11083
|
+
* #1681): {@link REF_RETURNS_SEGMENT_AT_INDEX} for an INTERIOR segment
|
|
11084
|
+
* (`AWS::Route53::RecordSet`'s `<hostedZoneId>|<name>|<type>` -> the record
|
|
11085
|
+
* name), and {@link REF_RETURNS_ARN_FROM_STATE} for the `AWS::AppSync::*`
|
|
11086
|
+
* children, whose `Ref` is an ARN recovered from the provider-recorded ARN
|
|
11087
|
+
* attribute through the same `stateLookup` seam.
|
|
10997
11088
|
*/
|
|
10998
11089
|
resolveRefValue(resource) {
|
|
10999
11090
|
return cfnRefValueFromPhysicalId(resource.resourceType, resource.physicalId, refStateLookupFromResource(resource));
|
|
@@ -13076,7 +13167,7 @@ var CloudControlProvider = class {
|
|
|
13076
13167
|
if (context?.finalSnapshotIdentifier !== void 0) throw new ProvisioningError(`${logicalId} (${resourceType}) requires a final snapshot (DeletionPolicy: Snapshot), but the Cloud Control API delete route has no final-snapshot parameter. Re-run with --skip-final-snapshot after snapshotting manually, or retain the resource.`, resourceType, logicalId, physicalId);
|
|
13077
13168
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
13078
13169
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
13079
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
13170
|
+
const { ASGProvider } = await import("./asg-provider-C4zMjWYv.js").then((n) => n.n);
|
|
13080
13171
|
await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
|
|
13081
13172
|
return;
|
|
13082
13173
|
}
|
|
@@ -19950,7 +20041,7 @@ const FLUSH_INTERVAL_MS = 2e3;
|
|
|
19950
20041
|
const FLUSH_EVENT_THRESHOLD = 50;
|
|
19951
20042
|
/** Build-time cdkd version, with a dev fallback for non-built contexts. */
|
|
19952
20043
|
function getCdkdVersion() {
|
|
19953
|
-
return "0.281.
|
|
20044
|
+
return "0.281.9";
|
|
19954
20045
|
}
|
|
19955
20046
|
/**
|
|
19956
20047
|
* Generate a time-sortable unique run id, e.g.
|
|
@@ -22118,5 +22209,5 @@ var DeployEngine = class {
|
|
|
22118
22209
|
};
|
|
22119
22210
|
|
|
22120
22211
|
//#endregion
|
|
22121
|
-
export {
|
|
22122
|
-
//# sourceMappingURL=deploy-engine-
|
|
22212
|
+
export { replayWarn as $, uploadCfnTemplate as $t, green as A, normalizeAwsError as An, formatDockerLoginError as At, slowCcOperationTimeoutMs as B, resolveApp as Bt, MULTI_REGION_RECREATE_BLOCKED_TYPES as C, ResourceUpdateNotSupportedError as Cn, BOOTSTRAP_MARKER_PREFIX as Ct, bold as D, SynthesisError as Dn, validateAssetBucketName as Dt, formatResourceLine as E, StateError as En, parseBootstrapMarker as Et, clearOnUpdateRemoval as F, getDockerImageBySourceHash as Ft, getAccountInfo as G, resolveStateBucketWithDefaultAndSource as Gt, isTerminationProtectionPropagationError as H, resolveCaptureObservedState as Ht, ProviderRegistry as I, Synthesizer as It, normalizeAwsTagsToCfn as J, warnDeprecatedNoPrefixCliFlag as Jt, refStateLookupFromResource as K, resolveUseCdkBootstrapAssets as Kt, findActionableSilentDrops as L, synthesisStatusMessage as Lt, yellow as M, __exportAll as Mn, runDockerForeground as Mt, IAMRoleProvider as N, runDockerStreaming as Nt, cyan as O, formatError as On, validateContainerRepoName as Ot, collectInlinePolicyNamesManagedBySiblings as P, AssetManifestLoader as Pt, readConfigString as Q, findLargeInlineResources as Qt, findSilentDropProperties as R, getDefaultStateBucketName as Rt, extractDeploymentEventError as S, ResourceTimeoutError as Sn, AssetModeResolver as St, renderStatefulReason as T, StackTerminationProtectionError as Tn, getBootstrapMarkerKey as Tt, IntrinsicFunctionResolver as U, resolveSkipPrefix as Ut, disableInstanceApiTermination as V, resolveAutoAssetStorage as Vt, cfnRefValueFromPhysicalId as W, resolveStateBucketWithDefault as Wt, assertRegionMatch as X, CFN_TEMPLATE_URL_LIMIT as Xt, resolveExplicitPhysicalId as Y, CFN_TEMPLATE_BODY_LIMIT as Yt, configStringRefusal as Z, MIGRATE_TMP_PREFIX as Zt, createPreDeleteFinalSnapshot as _, LockError as _n, WorkGraph as _t, DeploymentEventsStore as a, AwsClients as an, describeTypeWithThrottleRetry as at, unsupportedFinalSnapshotError as b, PartialFailureError as bn, loadPublishableAssetManifest as bt, replayFailedOperations as c, setAwsClients as cn, isThrottlingError as ct, IMPLICIT_DELETE_DEPENDENCIES as d, ConfigError as dn, LockManager as dt, expectedOwnerParam as en, requireConfigArray as et, computeImplicitDeleteEdges as f, DependencyError as fn, S3StateBackend as ft, ccRoutedFinalSnapshotError as g, LocalStartServiceError as gn, stringifyValue as gt, buildFinalSnapshotIdentifier as h, LocalMigrateError as hn, AssetPublisher as ht, DeploymentEventsReader as i, resolveBucketRegion as in, DiffCalculator as it, red as j, withErrorHandling as jn, getDockerCmd as jt, gray as k, isCdkdError as kn, buildDockerImage as kt, replayRollback as l, AssetError as ln, DagBuilder as lt, PRE_DELETE_SNAPSHOT_TYPES as m, LocalInvokeBuildError as mn, shouldRetainResource as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, processStackMessages as nn, requireConfigString as nt, planFailedOps as o, getAwsClients as on, withRetry as ot, ATOMIC_FINAL_SNAPSHOT_TYPES as p, DeployCancelledError as pn, rebuildClientForBucketRegion as pt, WAFv2WebACLProvider as q, stateBucketExistenceConfirmed as qt, DeployEngine as r, clearBucketRegionCache as rn, applyRoleArnIfSet as rt, planRollback as s, resetAwsClients as sn, isRetryableTransientError as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, AssemblyReader as tn, requireConfigObject as tt, withResourceDeadline as u, CdkdError as un, TemplateParser as ut, isFinalSnapshotError as v, MissingCdkCliError as vn, buildAssetRedirectMap as vt, isStatefulRecreateTargetSync as w, StackHasActiveImportsError as wn, ensureAssetStorage as wt, makeCanonicalizePropertiesFn as x, ProvisioningError as xn, rewriteTemplateAssetReferences as xt, refusesFinalSnapshot as y, NestedStackChildDirectDestroyError as yn, createAssetRedirectResolver as yt, CloudControlProvider as z, getLegacyStateBucketName as zt };
|
|
22213
|
+
//# sourceMappingURL=deploy-engine-DQ9kW3Pu.js.map
|