@go-to-k/cdkd 0.281.7 → 0.281.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { $ as requireConfigArray, $t as expectedOwnerParam, A as green, An as withErrorHandling, At as getDockerCmd, B as slowCcOperationTimeoutMs, Bt as resolveAutoAssetStorage, C as MULTI_REGION_RECREATE_BLOCKED_TYPES, Cn as StackHasActiveImportsError, Ct as ensureAssetStorage, D as bold, Dt as validateContainerRepoName, E as formatResourceLine, Et as validateAssetBucketName, F as clearOnUpdateRemoval, Ft as Synthesizer, G as refStateLookupFromResource, Gt as resolveUseCdkBootstrapAssets, H as isTerminationProtectionPropagationError, Ht as resolveSkipPrefix, I as ProviderRegistry, It as synthesisStatusMessage, J as resolveExplicitPhysicalId, Jt as CFN_TEMPLATE_BODY_LIMIT, K as WAFv2WebACLProvider, Kt as stateBucketExistenceConfirmed, L as findActionableSilentDrops, Lt as getDefaultStateBucketName, M as yellow, Mt as runDockerStreaming, N as IAMRoleProvider, Nt as AssetManifestLoader, O as cyan, Ot as buildDockerImage, P as collectInlinePolicyNamesManagedBySiblings, Pt as getDockerImageBySourceHash, Q as replayWarn, Qt as uploadCfnTemplate, R as findSilentDropProperties, Rt as getLegacyStateBucketName, S as extractDeploymentEventError, Sn as ResourceUpdateNotSupportedError, St as BOOTSTRAP_MARKER_PREFIX, T as renderStatefulReason, Tt as parseBootstrapMarker, U as IntrinsicFunctionResolver, Ut as resolveStateBucketWithDefault, V as disableInstanceApiTermination, Vt as resolveCaptureObservedState, W as cfnRefValueFromPhysicalId, Wt as resolveStateBucketWithDefaultAndSource, X as configStringRefusal, Xt as MIGRATE_TMP_PREFIX, Y as assertRegionMatch, Yt as CFN_TEMPLATE_URL_LIMIT, Z as readConfigString, Zt as findLargeInlineResources, _ as createPreDeleteFinalSnapshot, _n as MissingCdkCliError, _t as buildAssetRedirectMap, a as DeploymentEventsStore, an as getAwsClients, at as withRetry, b as unsupportedFinalSnapshotError, bn as ProvisioningError, bt as rewriteTemplateAssetReferences, c as replayFailedOperations, ct as DagBuilder, d as IMPLICIT_DELETE_DEPENDENCIES, dt as S3StateBackend, en as AssemblyReader, et as requireConfigObject, f as computeImplicitDeleteEdges, fn as DeployCancelledError, ft as rebuildClientForBucketRegion, g as ccRoutedFinalSnapshotError, gt as WorkGraph, h as buildFinalSnapshotIdentifier, hn as LocalStartServiceError, ht as stringifyValue, i as DeploymentEventsReader, in as AwsClients, it as describeTypeWithThrottleRetry, j as red, jt as runDockerForeground, k as gray, kn as normalizeAwsError, kt as formatDockerLoginError, l as replayRollback, ln as CdkdError, lt as TemplateParser, m as PRE_DELETE_SNAPSHOT_TYPES, mn as LocalMigrateError, mt as AssetPublisher, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nt as applyRoleArnIfSet, o as planFailedOps, on as resetAwsClients, ot as isRetryableTransientError, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as LocalInvokeBuildError$1, pt as shouldRetainResource, q as normalizeAwsTagsToCfn, qt as warnDeprecatedNoPrefixCliFlag, r as DeployEngine, rn as resolveBucketRegion, rt as DiffCalculator, s as planRollback, sn as setAwsClients, st as isThrottlingError, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as processStackMessages, tt as requireConfigString, u as withResourceDeadline, ut as LockManager, v as isFinalSnapshotError, vn as NestedStackChildDirectDestroyError, vt as createAssetRedirectResolver, w as isStatefulRecreateTargetSync, wn as StackTerminationProtectionError, wt as getBootstrapMarkerKey, x as makeCanonicalizePropertiesFn, xn as ResourceTimeoutError, xt as AssetModeResolver, y as refusesFinalSnapshot, yn as PartialFailureError, yt as loadPublishableAssetManifest, z as CloudControlProvider, zt as resolveApp } from "./deploy-engine-B8Qo1vPU.js";
2
+ import { $ as requireConfigArray, $t as expectedOwnerParam, A as green, An as withErrorHandling, At as getDockerCmd, B as slowCcOperationTimeoutMs, Bt as resolveAutoAssetStorage, C as MULTI_REGION_RECREATE_BLOCKED_TYPES, Cn as StackHasActiveImportsError, Ct as ensureAssetStorage, D as bold, Dt as validateContainerRepoName, E as formatResourceLine, Et as validateAssetBucketName, F as clearOnUpdateRemoval, Ft as Synthesizer, G as refStateLookupFromResource, Gt as resolveUseCdkBootstrapAssets, H as isTerminationProtectionPropagationError, Ht as resolveSkipPrefix, I as ProviderRegistry, It as synthesisStatusMessage, J as resolveExplicitPhysicalId, Jt as CFN_TEMPLATE_BODY_LIMIT, K as WAFv2WebACLProvider, Kt as stateBucketExistenceConfirmed, L as findActionableSilentDrops, Lt as getDefaultStateBucketName, M as yellow, Mt as runDockerStreaming, N as IAMRoleProvider, Nt as AssetManifestLoader, O as cyan, Ot as buildDockerImage, P as collectInlinePolicyNamesManagedBySiblings, Pt as getDockerImageBySourceHash, Q as replayWarn, Qt as uploadCfnTemplate, R as findSilentDropProperties, Rt as getLegacyStateBucketName, S as extractDeploymentEventError, Sn as ResourceUpdateNotSupportedError, St as BOOTSTRAP_MARKER_PREFIX, T as renderStatefulReason, Tt as parseBootstrapMarker, U as IntrinsicFunctionResolver, Ut as resolveStateBucketWithDefault, V as disableInstanceApiTermination, Vt as resolveCaptureObservedState, W as cfnRefValueFromPhysicalId, Wt as resolveStateBucketWithDefaultAndSource, X as configStringRefusal, Xt as MIGRATE_TMP_PREFIX, Y as assertRegionMatch, Yt as CFN_TEMPLATE_URL_LIMIT, Z as readConfigString, Zt as findLargeInlineResources, _ as createPreDeleteFinalSnapshot, _n as MissingCdkCliError, _t as buildAssetRedirectMap, a as DeploymentEventsStore, an as getAwsClients, at as withRetry, b as unsupportedFinalSnapshotError, bn as ProvisioningError, bt as rewriteTemplateAssetReferences, c as replayFailedOperations, ct as DagBuilder, d as IMPLICIT_DELETE_DEPENDENCIES, dt as S3StateBackend, en as AssemblyReader, et as requireConfigObject, f as computeImplicitDeleteEdges, fn as DeployCancelledError, ft as rebuildClientForBucketRegion, g as ccRoutedFinalSnapshotError, gt as WorkGraph, h as buildFinalSnapshotIdentifier, hn as LocalStartServiceError, ht as stringifyValue, i as DeploymentEventsReader, in as AwsClients, it as describeTypeWithThrottleRetry, j as red, jt as runDockerForeground, k as gray, kn as normalizeAwsError, kt as formatDockerLoginError, l as replayRollback, ln as CdkdError, lt as TemplateParser, m as PRE_DELETE_SNAPSHOT_TYPES, mn as LocalMigrateError, mt as AssetPublisher, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nt as applyRoleArnIfSet, o as planFailedOps, on as resetAwsClients, ot as isRetryableTransientError, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as LocalInvokeBuildError$1, pt as shouldRetainResource, q as normalizeAwsTagsToCfn, qt as warnDeprecatedNoPrefixCliFlag, r as DeployEngine, rn as resolveBucketRegion, rt as DiffCalculator, s as planRollback, sn as setAwsClients, st as isThrottlingError, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as processStackMessages, tt as requireConfigString, u as withResourceDeadline, ut as LockManager, v as isFinalSnapshotError, vn as NestedStackChildDirectDestroyError, vt as createAssetRedirectResolver, w as isStatefulRecreateTargetSync, wn as StackTerminationProtectionError, wt as getBootstrapMarkerKey, x as makeCanonicalizePropertiesFn, xn as ResourceTimeoutError, xt as AssetModeResolver, y as refusesFinalSnapshot, yn as PartialFailureError, yt as loadPublishableAssetManifest, z as CloudControlProvider, zt as resolveApp } from "./deploy-engine-OafbuSbc.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-Lj_P_wtb.js";
4
+ import { t as ASGProvider } from "./asg-provider-BhomRJhR.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";
@@ -11746,23 +11746,28 @@ var LambdaLayerVersionProvider = class {
11746
11746
  * ## What this does NOT cover
11747
11747
  *
11748
11748
  * The claim is "every composite packer this change reaches", not "every `|`
11749
- * join in the tree". Two deliberate exclusions, recorded so the scope is not
11749
+ * join in the tree". One deliberate exclusion, recorded so the scope is not
11750
11750
  * read as wider than it is:
11751
11751
  *
11752
- * - **`route53-provider.ts`'s three packers** (`AWS::Route53::RecordSet` and
11753
- * its siblings) are NOT guarded — the file was owned by a parallel lane when
11754
- * this shipped. The exposure there is bounded rather than absent:
11755
- * `parseRecordSetCompositeId` requires EXACTLY three parts, so a four-part
11756
- * id is REJECTED rather than mis-decoded into a different record. That is
11757
- * the loud failure mode, not the silent-wrong-resource one this helper
11758
- * exists for — but the deploy still records an id nothing can decode, so the
11759
- * type belongs here whenever that lane lands. Tracked in issue
11760
- * [#1711](https://github.com/go-to-k/cdkd/issues/1711).
11761
11752
  * - **`intrinsic-function-resolver.ts`'s `|` joins** (the WAFv2 and
11762
11753
  * `AWS::Events::Rule` arms) are out of scope by KIND, not by ownership: they
11763
11754
  * build a `Ref` VALUE for the template resolver, never a physicalId cdkd
11764
11755
  * records and later splits. Nothing decodes them, so an ambiguous join has
11765
11756
  * no decode site to go wrong at.
11757
+ *
11758
+ * ## Guarding the PACKERS is not the whole story
11759
+ *
11760
+ * A packer that refuses ambiguity does nothing about an id an EARLIER binary
11761
+ * already recorded, or one an `import` was handed — and a type whose decoder is
11762
+ * loose will mis-decode both. Issue #1711 is where that was learned:
11763
+ * `AWS::Route53::RecordSet`'s `parseRecordSetCompositeId` accepts any three
11764
+ * NON-EMPTY segments, so a record name carrying two pipes decoded to a
11765
+ * DIFFERENT hosted zone at three sites this helper never sees — an `import`
11766
+ * early accept, an identity-resolution short-circuit, and `delete`'s own parse,
11767
+ * where `cdkd destroy` then reported success over a live record. When adopting
11768
+ * this guard for a new type, audit its DECODE sites in the same change and make
11769
+ * each one cross-check the parsed segments against something it can verify them
11770
+ * with (Route 53 uses the template's own `Name` / `Type`).
11766
11771
  */
11767
11772
  /** The character every composite physicalId in this codebase joins segments with. */
11768
11773
  const COMPOSITE_ID_SEPARATOR = "|";
@@ -33705,10 +33710,10 @@ var Route53Provider = class {
33705
33710
  if (!this.route53Client) this.route53Client = new Route53Client(this.providerRegion ? { region: this.providerRegion } : {});
33706
33711
  return this.route53Client;
33707
33712
  }
33708
- async create(logicalId, resourceType, properties) {
33713
+ async create(logicalId, resourceType, properties, context) {
33709
33714
  switch (resourceType) {
33710
33715
  case "AWS::Route53::HostedZone": return this.createHostedZone(logicalId, resourceType, properties);
33711
- case "AWS::Route53::RecordSet": return this.createRecordSet(logicalId, resourceType, properties);
33716
+ case "AWS::Route53::RecordSet": return this.createRecordSet(logicalId, resourceType, properties, context);
33712
33717
  default: throw new ProvisioningError(`Unsupported resource type: ${resourceType}`, resourceType, logicalId);
33713
33718
  }
33714
33719
  }
@@ -33937,11 +33942,25 @@ var Route53Provider = class {
33937
33942
  default: return;
33938
33943
  }
33939
33944
  }
33940
- async createRecordSet(logicalId, resourceType, properties) {
33945
+ async createRecordSet(logicalId, resourceType, properties, context) {
33941
33946
  this.logger.debug(`Creating Route 53 record set ${logicalId}`);
33942
33947
  const hostedZoneId = await this.resolveHostedZoneId(properties, logicalId, resourceType);
33943
33948
  const recordName = properties["Name"];
33944
33949
  const recordType = properties["Type"];
33950
+ const compositeId = packCompositeId(resourceType, logicalId, [
33951
+ {
33952
+ name: "hostedZoneId",
33953
+ value: hostedZoneId
33954
+ },
33955
+ {
33956
+ name: "recordName",
33957
+ value: recordName
33958
+ },
33959
+ {
33960
+ name: "recordType",
33961
+ value: recordType
33962
+ }
33963
+ ], context?.replayingState === true ? { onRefusal: (message) => this.logger.warn(message) } : void 0);
33945
33964
  try {
33946
33965
  const resourceRecordSet = this.buildResourceRecordSet(properties);
33947
33966
  const comment = properties["Comment"];
@@ -33955,7 +33974,6 @@ var Route53Provider = class {
33955
33974
  }]
33956
33975
  }
33957
33976
  }));
33958
- const compositeId = `${hostedZoneId}|${recordName}|${recordType}`;
33959
33977
  this.logger.debug(`Successfully created record set ${logicalId}: ${compositeId}`);
33960
33978
  return {
33961
33979
  physicalId: compositeId,
@@ -33972,6 +33990,20 @@ var Route53Provider = class {
33972
33990
  const hostedZoneId = await this.resolveHostedZoneId(properties, logicalId, resourceType, physicalId);
33973
33991
  const recordName = properties["Name"];
33974
33992
  const recordType = properties["Type"];
33993
+ const compositeId = packCompositeId(resourceType, logicalId, [
33994
+ {
33995
+ name: "hostedZoneId",
33996
+ value: hostedZoneId
33997
+ },
33998
+ {
33999
+ name: "recordName",
34000
+ value: recordName
34001
+ },
34002
+ {
34003
+ name: "recordType",
34004
+ value: recordType
34005
+ }
34006
+ ], { onRefusal: (message) => this.logger.warn(message) });
33975
34007
  try {
33976
34008
  const resourceRecordSet = this.buildResourceRecordSet(properties);
33977
34009
  const comment = properties["Comment"];
@@ -33985,7 +34017,6 @@ var Route53Provider = class {
33985
34017
  }]
33986
34018
  }
33987
34019
  }));
33988
- const compositeId = `${hostedZoneId}|${recordName}|${recordType}`;
33989
34020
  this.logger.debug(`Successfully updated record set ${logicalId}`);
33990
34021
  return {
33991
34022
  physicalId: compositeId,
@@ -34000,7 +34031,8 @@ var Route53Provider = class {
34000
34031
  async deleteRecordSet(logicalId, physicalId, resourceType, properties, context) {
34001
34032
  this.logger.debug(`Deleting Route 53 record set ${logicalId}: ${physicalId}`);
34002
34033
  if (!properties) throw new ProvisioningError(`Properties required to delete record set ${logicalId}`, resourceType, logicalId, physicalId);
34003
- const composite = parseRecordSetCompositeId(physicalId);
34034
+ const parsedComposite = parseRecordSetCompositeId(physicalId);
34035
+ const composite = parsedComposite && this.compositeAgreesWithTemplate(parsedComposite, properties) ? parsedComposite : void 0;
34004
34036
  let hostedZoneId;
34005
34037
  if (composite) hostedZoneId = composite.hostedZoneId;
34006
34038
  else try {
@@ -34433,7 +34465,7 @@ var Route53Provider = class {
34433
34465
  */
34434
34466
  async resolveRecordSetIdentity(physicalId, properties, options) {
34435
34467
  const composite = parseRecordSetCompositeId(physicalId);
34436
- if (composite) return composite;
34468
+ if (composite && (!properties || this.compositeAgreesWithTemplate(composite, properties))) return composite;
34437
34469
  if (!properties) return void 0;
34438
34470
  const name = typeof properties["Name"] === "string" ? properties["Name"] : physicalId;
34439
34471
  const type = properties["Type"];
@@ -34612,6 +34644,52 @@ var Route53Provider = class {
34612
34644
  }
34613
34645
  }
34614
34646
  /**
34647
+ * Does a parsed composite agree with the properties recorded alongside it?
34648
+ *
34649
+ * Called from all THREE sites that split a stored id back apart —
34650
+ * `importRecordSet`'s early accept, `resolveRecordSetIdentity`, and
34651
+ * `deleteRecordSet` — because `parseRecordSetCompositeId` asks only for three
34652
+ * NON-EMPTY segments, which a record NAME carrying two pipes satisfies
34653
+ * (issue #1711).
34654
+ *
34655
+ * Each check is applied only when the template side is a usable string, so an
34656
+ * unresolved intrinsic or an absent field leaves the pre-#1711 behavior
34657
+ * exactly as it was. When BOTH are unusable this returns `true` and the
34658
+ * mis-decode is still reachable — an accepted bound, since the alternative is
34659
+ * refusing every id on a bag cdkd cannot read, and the identity resolution the
34660
+ * fall-through leads to needs those same fields anyway.
34661
+ *
34662
+ * The NAME check is what catches the residual the TYPE check alone leaves: a
34663
+ * name like `a|b|A` on a record whose `Type` really is `A` agrees on the type
34664
+ * and still decodes to the wrong zone. The TYPE check is in turn the sole
34665
+ * discriminator only where the NAME is unusable, which is why both are here.
34666
+ *
34667
+ * **A false REJECTION is what this must not do, and the argument is
34668
+ * REACHABILITY rather than cost.** The cost differs per caller and is not
34669
+ * uniformly small: at `deleteRecordSet` the fall-through re-resolves the zone
34670
+ * with `requireUnambiguousZoneName`, which THROWS on a split-horizon
34671
+ * `HostedZoneName` and would turn a working destroy into a failed one. It
34672
+ * cannot fire, because every composite is packed from the same
34673
+ * `properties['Name']` / `['Type']` the engine records beside it — create,
34674
+ * update and the import canonicalization all use one bag — so a genuine
34675
+ * composite always agrees with the bag it is stored with. `Type` being
34676
+ * updateable does not break that: `update()` returns the RE-PACKED id, which
34677
+ * is recorded together with the new properties. The one real divergence is
34678
+ * cosmetic and absorbed on purpose — `canonicalizeQueryName` makes the name
34679
+ * compare case- and trailing-dot-insensitive, so a template spelling the name
34680
+ * without CDK's dot is not rejected.
34681
+ *
34682
+ * Note two of the three callers pass a STATE-borne bag rather than a template
34683
+ * one; the reachability argument above is what covers them.
34684
+ */
34685
+ compositeAgreesWithTemplate(parsed, properties) {
34686
+ const templateType = properties["Type"];
34687
+ if (typeof templateType === "string" && templateType && parsed.type !== templateType) return false;
34688
+ const templateName = properties["Name"];
34689
+ if (typeof templateName === "string" && templateName && canonicalizeQueryName(parsed.name) !== canonicalizeQueryName(templateName)) return false;
34690
+ return true;
34691
+ }
34692
+ /**
34615
34693
  * Adopt an existing record set (issue #1658).
34616
34694
  *
34617
34695
  * cdkd's physicalId is the composite `<hostedZoneId>|<Name>|<Type>` that
@@ -34654,7 +34732,8 @@ var Route53Provider = class {
34654
34732
  async importRecordSet(input) {
34655
34733
  const known = input.knownPhysicalId;
34656
34734
  if (!known) return null;
34657
- if (parseRecordSetCompositeId(known)) return {
34735
+ const parsedKnown = parseRecordSetCompositeId(known);
34736
+ if (parsedKnown && this.compositeAgreesWithTemplate(parsedKnown, input.properties)) return {
34658
34737
  physicalId: known,
34659
34738
  attributes: {}
34660
34739
  };
@@ -34667,7 +34746,22 @@ var Route53Provider = class {
34667
34746
  };
34668
34747
  const identity = await this.resolveRecordSetIdentity(known, input.properties, { requireUnambiguousZoneName: true });
34669
34748
  if (!identity) return adoptVerbatim("the template does not unambiguously resolve to a hosted zone + Name + Type");
34670
- const compositeId = `${identity.hostedZoneId}|${identity.name}|${identity.type}`;
34749
+ const segments = [
34750
+ {
34751
+ name: "hostedZoneId",
34752
+ value: identity.hostedZoneId
34753
+ },
34754
+ {
34755
+ name: "recordName",
34756
+ value: identity.name
34757
+ },
34758
+ {
34759
+ name: "recordType",
34760
+ value: identity.type
34761
+ }
34762
+ ];
34763
+ if (compositeIdSeparatorRefusal(input.resourceType, input.logicalId, segments) !== void 0) return adoptVerbatim(`the resolved hosted zone + Name + Type would pack an ambiguous id — a segment contains '${"|"}', which cdkd uses as this type's physical-id separator`);
34764
+ const compositeId = packCompositeId(input.resourceType, input.logicalId, segments);
34671
34765
  let observed;
34672
34766
  try {
34673
34767
  observed = await this.readRecordSet(compositeId);
@@ -73207,7 +73301,7 @@ function createMigrateCommand() {
73207
73301
  */
73208
73302
  function buildProgram() {
73209
73303
  const program = new Command();
73210
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.281.7");
73304
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.281.8");
73211
73305
  program.hook("preAction", (_thisCommand, actionCommand) => {
73212
73306
  const { profile } = actionCommand.optsWithGlobals();
73213
73307
  if (profile !== void 0) process.env["AWS_PROFILE"] = profile;