@go-to-k/cdkd 0.283.18 → 0.283.19

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 coerceCfnBoolean, $t as resolveStateBucketWithDefault, A as cyan, An as MissingCdkCliError, At as AssetModeResolver, B as findSilentDropProperties, Bt as getDockerCmd, C as makeCanonicalizePropertiesFn, Ct as stringifyValue, D as renderStatefulReason, Dn as LocalMigrateError, Dt as loadPublishableAssetManifest, E as isStatefulRecreateTargetSync, En as LocalInvokeBuildError$1, Et as createAssetRedirectResolver, F as IAMRoleProvider, Fn as ResourceUpdateNotSupportedError, Ft as validateAssetBucketName, G as IntrinsicFunctionResolver, Gn as isRetryableTransientError, Gt as Synthesizer, H as slowCcOperationTimeoutMs, Hn as normalizeAwsError, Ht as runDockerStreaming, I as collectInlinePolicyNamesManagedBySiblings, In as StackHasActiveImportsError, It as validateContainerRepoName, J as refStateLookupFromResource, Jt as getLegacyStateBucketName, K as cfnRefValueFromPhysicalId, Kn as isThrottlingError, Kt as synthesisStatusMessage, L as clearOnUpdateRemoval, Ln as StackTerminationProtectionError, Lt as buildDenyExternalAccessPolicy, M as green, Mn as PartialFailureError, Mt as ensureAssetStorage, N as red, Nn as ProvisioningError, Nt as getBootstrapMarkerKey, O as formatResourceLine, On as LocalStartServiceError, Ot as rewriteTemplateAssetReferences, P as yellow, Pn as ResourceTimeoutError, Pt as parseBootstrapMarker, Q as assertRegionMatch, Qt as resolveSkipPrefix, R as ProviderRegistry, Rt as buildDockerImage, S as unsupportedFinalSnapshotError, Sn as CdkdError, St as AssetPublisher, T as MULTI_REGION_RECREATE_BLOCKED_TYPES, Tn as DeployCancelledError, Tt as buildAssetRedirectMap, U as disableInstanceApiTermination, Un as withErrorHandling, Ut as AssetManifestLoader, V as CloudControlProvider, Vt as runDockerForeground, W as isTerminationProtectionPropagationError, Wn as isMarkedNonRetryable, Wt as getDockerImageBySourceHash, X as normalizeAwsTagsToCfn, Xt as resolveAutoAssetStorage, Y as WAFv2WebACLProvider, Yt as resolveApp, Z as resolveExplicitPhysicalId, Zt as resolveCaptureObservedState, _ as buildFinalSnapshotIdentifier, _n as AwsClients, _t as TemplateParser, a as DeploymentEventsStore, an as CFN_TEMPLATE_URL_LIMIT, at as requireConfigObject, b as isFinalSnapshotError, bn as setAwsClients, bt as rebuildClientForBucketRegion, c as replayFailedOperations, cn as uploadCfnTemplate, ct as s3BucketDomainName, d as deleteSkipReason, dn as canonicalizeRegion, dt as s3BucketWebsiteUrl, en as resolveStateBucketWithDefaultAndSource, et as configBooleanRefusal, f as withResourceDeadline, fn as derivePartitionAndUrlSuffix, ft as applyRoleArnIfSet, g as PRE_DELETE_SNAPSHOT_TYPES, gn as resolveBucketRegion, gt as DagBuilder, h as ATOMIC_FINAL_SNAPSHOT_TYPES, ht as withRetry, i as DeploymentEventsReader, in as CFN_TEMPLATE_BODY_LIMIT, it as requireConfigArray, j as gray, jn as NestedStackChildDirectDestroyError, jt as BOOTSTRAP_MARKER_PREFIX, k as bold, kt as escapeRegExp, l as replayRollback, ln as expectedOwnerParam, lt as s3BucketDualStackDomainName, m as computeImplicitDeleteEdges, mn as processStackMessages, mt as describeTypeWithThrottleRetry, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as stateBucketExistenceConfirmed, nt as readConfigString, o as planFailedOps, on as MIGRATE_TMP_PREFIX, ot as requireConfigString, p as IMPLICIT_DELETE_DEPENDENCIES, pn as AssemblyReader, pt as DiffCalculator, q as getAccountInfo, qn as markNonRetryable, qt as getDefaultStateBucketName, r as DeployEngine, rn as warnDeprecatedNoPrefixCliFlag, rt as replayWarn, s as planRollback, sn as findLargeInlineResources, st as s3BucketArn, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as resolveUseCdkBootstrapAssets, tt as configStringRefusal, u as UNSPECIFIED_SKIP_REASON, un as PARTITION_TABLE, ut as s3BucketRegionalDomainName, v as ccRoutedFinalSnapshotError, vn as getAwsClients, vt as LockManager, w as extractDeploymentEventError, wt as WorkGraph, x as refusesFinalSnapshot, xt as shouldRetainResource, y as createPreDeleteFinalSnapshot, yn as resetAwsClients, yt as S3StateBackend, z as findActionableSilentDrops, zt as formatDockerLoginError } from "./deploy-engine-B-0iA5XV.js";
2
+ import { $ as coerceCfnBoolean, $t as resolveStateBucketWithDefault, A as cyan, An as MissingCdkCliError, At as AssetModeResolver, B as findSilentDropProperties, Bt as getDockerCmd, C as makeCanonicalizePropertiesFn, Ct as stringifyValue, D as renderStatefulReason, Dn as LocalMigrateError, Dt as loadPublishableAssetManifest, E as isStatefulRecreateTargetSync, En as LocalInvokeBuildError$1, Et as createAssetRedirectResolver, F as IAMRoleProvider, Fn as ResourceUpdateNotSupportedError, Ft as validateAssetBucketName, G as IntrinsicFunctionResolver, Gn as isRetryableTransientError, Gt as Synthesizer, H as slowCcOperationTimeoutMs, Hn as normalizeAwsError, Ht as runDockerStreaming, I as collectInlinePolicyNamesManagedBySiblings, In as StackHasActiveImportsError, It as validateContainerRepoName, J as refStateLookupFromResource, Jt as getLegacyStateBucketName, K as cfnRefValueFromPhysicalId, Kn as isThrottlingError, Kt as synthesisStatusMessage, L as clearOnUpdateRemoval, Ln as StackTerminationProtectionError, Lt as buildDenyExternalAccessPolicy, M as green, Mn as PartialFailureError, Mt as ensureAssetStorage, N as red, Nn as ProvisioningError, Nt as getBootstrapMarkerKey, O as formatResourceLine, On as LocalStartServiceError, Ot as rewriteTemplateAssetReferences, P as yellow, Pn as ResourceTimeoutError, Pt as parseBootstrapMarker, Q as assertRegionMatch, Qt as resolveSkipPrefix, R as ProviderRegistry, Rt as buildDockerImage, S as unsupportedFinalSnapshotError, Sn as CdkdError, St as AssetPublisher, T as MULTI_REGION_RECREATE_BLOCKED_TYPES, Tn as DeployCancelledError, Tt as buildAssetRedirectMap, U as disableInstanceApiTermination, Un as withErrorHandling, Ut as AssetManifestLoader, V as CloudControlProvider, Vt as runDockerForeground, W as isTerminationProtectionPropagationError, Wn as isMarkedNonRetryable, Wt as getDockerImageBySourceHash, X as normalizeAwsTagsToCfn, Xt as resolveAutoAssetStorage, Y as WAFv2WebACLProvider, Yt as resolveApp, Z as resolveExplicitPhysicalId, Zt as resolveCaptureObservedState, _ as buildFinalSnapshotIdentifier, _n as AwsClients, _t as TemplateParser, a as DeploymentEventsStore, an as CFN_TEMPLATE_URL_LIMIT, at as requireConfigObject, b as isFinalSnapshotError, bn as setAwsClients, bt as rebuildClientForBucketRegion, c as replayFailedOperations, cn as uploadCfnTemplate, ct as s3BucketDomainName, d as deleteSkipReason, dn as canonicalizeRegion, dt as s3BucketWebsiteUrl, en as resolveStateBucketWithDefaultAndSource, et as configBooleanRefusal, f as withResourceDeadline, fn as derivePartitionAndUrlSuffix, ft as applyRoleArnIfSet, g as PRE_DELETE_SNAPSHOT_TYPES, gn as resolveBucketRegion, gt as DagBuilder, h as ATOMIC_FINAL_SNAPSHOT_TYPES, ht as withRetry, i as DeploymentEventsReader, in as CFN_TEMPLATE_BODY_LIMIT, it as requireConfigArray, j as gray, jn as NestedStackChildDirectDestroyError, jt as BOOTSTRAP_MARKER_PREFIX, k as bold, kt as escapeRegExp, l as replayRollback, ln as expectedOwnerParam, lt as s3BucketDualStackDomainName, m as computeImplicitDeleteEdges, mn as processStackMessages, mt as describeTypeWithThrottleRetry, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as stateBucketExistenceConfirmed, nt as readConfigString, o as planFailedOps, on as MIGRATE_TMP_PREFIX, ot as requireConfigString, p as IMPLICIT_DELETE_DEPENDENCIES, pn as AssemblyReader, pt as DiffCalculator, q as getAccountInfo, qn as markNonRetryable, qt as getDefaultStateBucketName, r as DeployEngine, rn as warnDeprecatedNoPrefixCliFlag, rt as replayWarn, s as planRollback, sn as findLargeInlineResources, st as s3BucketArn, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as resolveUseCdkBootstrapAssets, tt as configStringRefusal, u as UNSPECIFIED_SKIP_REASON, un as PARTITION_TABLE, ut as s3BucketRegionalDomainName, v as ccRoutedFinalSnapshotError, vn as getAwsClients, vt as LockManager, w as extractDeploymentEventError, wt as WorkGraph, x as refusesFinalSnapshot, xt as shouldRetainResource, y as createPreDeleteFinalSnapshot, yn as resetAwsClients, yt as S3StateBackend, z as findActionableSilentDrops, zt as formatDockerLoginError } from "./deploy-engine-UVLw029j.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-D8Ln3-ij.js";
4
+ import { t as ASGProvider } from "./asg-provider-B260vt0k.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";
@@ -38111,6 +38111,58 @@ var Route53Provider = class {
38111
38111
  };
38112
38112
  }
38113
38113
  /**
38114
+ * The attribute set for a hosted zone adopted through the NAME-lookup
38115
+ * branch (issue #1875). `null` means DECLINE the row.
38116
+ *
38117
+ * Unlike the `knownPhysicalId` branch — whose verification call already
38118
+ * carries the delegation set — this branch resolves the zone through
38119
+ * `ListHostedZonesByName`, which does NOT return one, so the attributes
38120
+ * cost one extra `GetHostedZone`.
38121
+ *
38122
+ * **A vanished zone DECLINES, it does not degrade.** `NoSuchHostedZone`
38123
+ * between the list and this read is exactly the condition the
38124
+ * `knownPhysicalId` branch answers with `null` / `skipped-not-found`, and
38125
+ * adopting a zone that demonstrably no longer exists is worse than
38126
+ * declining it — the next deploy would compare against a record for
38127
+ * something AWS does not have. The two branches must agree; everything
38128
+ * else degrades.
38129
+ *
38130
+ * **The degraded answer is the EMPTY map, and that is load-bearing rather
38131
+ * than tidy.** `import.ts`'s attribute carry-over is gated on the returned
38132
+ * map being NON-empty (`row.attributes && Object.keys(...).length > 0 ?
38133
+ * row.attributes : undefined`, then `?? priorAttributes ?? {}`) — a gate
38134
+ * that exists precisely because almost every provider spells
38135
+ * `attributes: {}` explicitly. So a partial `{ Id }` is NON-empty, takes
38136
+ * the row branch, and OVERWRITES a previously-recorded good map: a zone
38137
+ * imported successfully once and re-imported while `route53:GetHostedZone`
38138
+ * is denied would LOSE its stored `NameServers`, leaving state strictly
38139
+ * worse than before this fix. `{}` falls through and preserves it. Do NOT
38140
+ * "improve" this into keeping what it can — that is the one change that
38141
+ * makes the failure path destructive.
38142
+ *
38143
+ * NEVER throws otherwise, matching the convention the neighbouring
38144
+ * adoption paths already use (`AppSyncProvider.childImportAttributes`,
38145
+ * issue #1728, and `importRecordSet`'s canonicalization, which adopts
38146
+ * VERBATIM rather than declining): an import must not hard-fail because
38147
+ * one optional attribute could not be read. `import.ts` only aborts when
38148
+ * ZERO resources import, so under `--migrate-from-cloudformation` a throw
38149
+ * here would cost the row at exactly the moment the CloudFormation stack
38150
+ * is being retired — the resource would end up in NEITHER CloudFormation
38151
+ * nor cdkd state.
38152
+ */
38153
+ async hostedZoneImportAttributes(zoneId, logicalId) {
38154
+ try {
38155
+ return {
38156
+ Id: zoneId,
38157
+ NameServers: (await this.getClient().send(new GetHostedZoneCommand({ Id: zoneId }))).DelegationSet?.NameServers ?? []
38158
+ };
38159
+ } catch (error) {
38160
+ if (error instanceof Error && error.name === "NoSuchHostedZone") return null;
38161
+ this.logger.warn(`Imported hosted zone ${zoneId} but could not read its NameServers: ${error instanceof Error ? error.message : String(error)}. The zone is adopted without them (any attributes already in state for this zone are kept). Re-run \`cdkd import --resource ${logicalId}=${zoneId} --force\` once the permission is granted, or make a template change that forces an UPDATE — a plain \`cdkd deploy\` does NOT heal the record, because an unchanged zone is NO_CHANGE and never calls update().`);
38162
+ return {};
38163
+ }
38164
+ }
38165
+ /**
38114
38166
  * Adopt an existing hosted zone (issue #1702).
38115
38167
  *
38116
38168
  * An explicit `--resource` id is ground truth and is only VERIFIED. With no
@@ -38132,13 +38184,44 @@ var Route53Provider = class {
38132
38184
  * (`skipped-not-found`, the next deploy creates the zone) while an
38133
38185
  * ambiguous name or a failed lookup throws, which `importOne` records as
38134
38186
  * `failed` for this row alone.
38187
+ *
38188
+ * BOTH branches record the same `{ Id, NameServers }` attribute set a
38189
+ * `cdkd deploy` CREATE records (issue #1875). Recording `attributes: {}`
38190
+ * left an adopted zone with no `NameServers` in state, and nothing else
38191
+ * rescues it: `IntrinsicFunctionResolver.resolveGetAtt`'s flat-attribute
38192
+ * branch misses (so PR #1868's legacy comma-string normalization, which
38193
+ * lives in that branch, never runs either), `constructAttribute` has no
38194
+ * `AWS::Route53::HostedZone` case, and resolution falls through to
38195
+ * `guardedPhysicalIdFallback`, which hands back the zone id STRING — so a
38196
+ * downstream `Fn::Join` threw `second argument must be a list` and the
38197
+ * Output was silently dropped. `provider.getAttribute` does return the list
38198
+ * but is only reached from the orphan-rewriter path, never from ordinary
38199
+ * template resolution.
38200
+ *
38201
+ * The delegation set is normalized `?? []` — a LIST, never a comma string —
38202
+ * exactly as `createHostedZone` / `updateHostedZone` / `getHostedZoneAttribute`
38203
+ * do, so an imported zone and a deployed one resolve IDENTICALLY. A
38204
+ * divergence here would be a phantom-drift hazard as well as a resolution
38205
+ * one.
38206
+ *
38207
+ * **A plain `cdkd deploy` does NOT rewrite these attributes**, so do not
38208
+ * offer one as the remedy when a read fails. `deploy-engine.ts` `continue`s
38209
+ * on `NO_CHANGE`, so an unchanged zone never reaches `update()` and its
38210
+ * `attributes` are never rewritten; `kickOffAutoRefreshObservedProperties`
38211
+ * refreshes `observedProperties`, a different field. What DOES rewrite the
38212
+ * record is re-running the import for that row
38213
+ * (`cdkd import --resource <logicalId>=<zoneId> --force`, which re-enters
38214
+ * this method) or a template change that forces a real UPDATE.
38135
38215
  */
38136
38216
  async importHostedZone(input) {
38137
38217
  if (input.knownPhysicalId) try {
38138
- await this.getClient().send(new GetHostedZoneCommand({ Id: input.knownPhysicalId }));
38218
+ const response = await this.getClient().send(new GetHostedZoneCommand({ Id: input.knownPhysicalId }));
38139
38219
  return {
38140
38220
  physicalId: input.knownPhysicalId,
38141
- attributes: {}
38221
+ attributes: {
38222
+ Id: input.knownPhysicalId.replace("/hostedzone/", ""),
38223
+ NameServers: response.DelegationSet?.NameServers ?? []
38224
+ }
38142
38225
  };
38143
38226
  } catch (err) {
38144
38227
  if (err instanceof Error && err.name === "NoSuchHostedZone") return null;
@@ -38147,16 +38230,19 @@ var Route53Provider = class {
38147
38230
  const zoneName = input.properties["Name"];
38148
38231
  if (typeof zoneName !== "string" || !zoneName) return null;
38149
38232
  try {
38233
+ const zoneId = await this.resolveHostedZoneId({ HostedZoneName: zoneName }, input.logicalId, input.resourceType, void 0, {
38234
+ requireUnambiguousZoneName: true,
38235
+ requirePrivateZone: templateZoneVisibility(input.properties),
38236
+ subject: {
38237
+ noun: "hosted zone",
38238
+ remedy: `pass --resource ${input.logicalId}=<hostedZoneId> to adopt it explicitly`
38239
+ }
38240
+ });
38241
+ const attributes = await this.hostedZoneImportAttributes(zoneId, input.logicalId);
38242
+ if (attributes === null) return null;
38150
38243
  return {
38151
- physicalId: await this.resolveHostedZoneId({ HostedZoneName: zoneName }, input.logicalId, input.resourceType, void 0, {
38152
- requireUnambiguousZoneName: true,
38153
- requirePrivateZone: templateZoneVisibility(input.properties),
38154
- subject: {
38155
- noun: "hosted zone",
38156
- remedy: `pass --resource ${input.logicalId}=<hostedZoneId> to adopt it explicitly`
38157
- }
38158
- }),
38159
- attributes: {}
38244
+ physicalId: zoneId,
38245
+ attributes
38160
38246
  };
38161
38247
  } catch (error) {
38162
38248
  if (error instanceof HostedZoneNameNotFoundError) return null;
@@ -78728,7 +78814,7 @@ function createMigrateCommand() {
78728
78814
  */
78729
78815
  function buildProgram() {
78730
78816
  const program = new Command();
78731
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.283.18");
78817
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.283.19");
78732
78818
  program.hook("preAction", (_thisCommand, actionCommand) => {
78733
78819
  const { profile } = actionCommand.optsWithGlobals();
78734
78820
  if (profile !== void 0) process.env["AWS_PROFILE"] = profile;