@go-to-k/cdkd 0.290.0 → 0.290.1

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.
@@ -1,8 +1,8 @@
1
- import { $ as getCurrentResourceSecrets, $n as validateAssetBucketName, $t as findActionableSilentDrops, A as planOrphanAdoption, An as CUSTOM_RESOURCE_RESPONSE_PREFIX, Ar as warnDeprecatedNoPrefixCliFlag, At as resolveExplicitPhysicalId, B as bold, Bn as WorkGraph, Br as derivePartitionAndUrlSuffix, Bt as requireConfigObject, C as createPreDeleteFinalSnapshot, Ci as markNonRetryable, Cn as S3StateBackend, Cr as resolveAutoAssetStorage, Ct as coerceParameterTypedValue, D as makeCanonicalizePropertiesFn, Dn as forceQuitRecoveryClause, Dr as resolveStateBucketWithDefaultAndSource, Dt as refStateLookupFromResource, E as unsupportedFinalSnapshotError, En as buildLockContentionMessage, Er as resolveStateBucketWithDefault, Et as parameterTypeMayLoseSecretIdentity, F as WARM_THROUGHPUT_MEMBERS, Fn as orphansAfterRollback, Fr as uploadCfnTemplate, Ft as configIntegerRefusal, G as yellow, Gn as AssetModeResolver, Gr as AwsClients, Gt as s3BucketArn, H as gray, Hn as createAssetRedirectResolver, Hr as processStackMessages, Ht as classifyReplaySecretRegion, I as coerceWarmThroughput$1, In as orphansCarriedFrom, Ir as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, It as configStringRefusal, J as exportAliasCollisionScrubWarning, Jn as ensureAssetStorage, Jr as setAwsClients, Jt as s3BucketRegionalDomainName, K as collectDeclaredOutputNames, Kn as BOOTSTRAP_MARKER_PREFIX, Kr as getAwsClients, Kt as s3BucketDomainName, L as isWarmThroughputDecrease, Ln as shouldRetainResource, Lr as expectedOwnerParam, Lt as readConfigString, M as isStatefulRecreateTargetForReplace, Mn as exportNamesCarriedFrom, Mr as CFN_TEMPLATE_URL_LIMIT, Mt as coerceCfnBoolean, N as isStatefulRecreateTargetSync, Nn as importableOutputKeys, Nr as MIGRATE_TMP_PREFIX, Nt as coerceCfnInteger, O as extractDeploymentEventError, On as formatLockExpiry, Or as resolveUseCdkBootstrapAssets, Ot as WAFv2WebACLProvider, P as renderStatefulReason, Pn as importableOutputs, Pr as findLargeInlineResources, Pt as configBooleanRefusal, Q as secretSafeKeyDisplay, Qn as readBootstrapMarkerBody, Qr as CrossAccountSecretRefusalError, Qt as INTRINSIC_KEYS, R as toFiniteNumber, Rn as AssetPublisher, Rr as PARTITION_TABLE, Rt as replayWarn, S as ccRoutedFinalSnapshotError, Si as isTransientServerError, Sn as LockManager, Sr as resolveApp, St as cfnRefValueFromPhysicalId, T as refusesFinalSnapshot, Ti as retryClassificationText, Tn as buildForceUnlockCommand, Tr as resolveSkipPrefix, Tt as isUnboundTemplateParameter, U as green, Un as loadPublishableAssetManifest, Ut as producerRegionsFromState, V as cyan, Vn as buildAssetRedirectMap, Vr as AssemblyReader, Vt as requireConfigString, W as red, Wn as rewriteTemplateAssetReferences, Wr as resolveBucketRegion, Wt as withSharedDrainBudget, X as secretBearing, Xn as isCrossRegionRedirect, Xr as CdkdError, Xt as applyRoleArnIfSet, Y as isExportAliasCollision, Yn as getBootstrapMarkerKey, Yt as s3BucketWebsiteUrl, Z as secretBearingStateKeyWarning, Zn as parseBootstrapMarker, Zt as DiffCalculator, _ as isSecretBearingReferenceString, _i as normalizeAwsError, _n as maskSecretsInText, _r as getDockerImageBySourceHash, _t as deleteSkipReason, a as DeploymentEventsStore, an as STATE_SOURCED_BASELINE_RULES, ar as describeDockerExecFailure, at as createMaskedRetryLogger, b as PRE_DELETE_SNAPSHOT_TYPES, bi as isRetryableTransientError, bn as redactSecretsForState, br as getDefaultStateBucketName, bt as IntrinsicFunctionResolver, c as replayFailedOperations, ci as ProvisioningError, cn as TEMPLATE_SOURCED_RULES, cr as formatDockerLoginError, ct as beginCommandInterruptScope, d as updatePartialReason, di as StackHasActiveImportsError, dn as dynamicReferenceTokens, dr as redactDockerArgvValues, dt as isInterruptedWaitError, ei as DeployCancelledError, en as findSilentDropProperties, er as validateContainerRepoName, et as IAMRoleProvider, f as withResourceDeadline, fi as StackTerminationProtectionError, fn as errorCauseChain, fr as runDockerForeground, ft as startInterruptWatch, g as bagHoldsSecretExpression, gn as maskSecretsInError, gr as AssetManifestLoader, gt as deleteIndeterminateGuards, h as computeImplicitDeleteEdges, hn as markSameGenerationBag, hr as stripControlChars, ht as UNSPECIFIED_SKIP_REASON, i as DeploymentEventsReader, ii as LocalStartServiceError, in as TemplateParser, ir as describeDockerCapturedOutput, it as wouldReturnToSdkProvider, j as MULTI_REGION_RECREATE_BLOCKED_TYPES, jn as DEFAULT_STATE_PREFIX, jr as CFN_TEMPLATE_BODY_LIMIT, jt as assertRegionMatch, k as makeSiblingClaimReader, kn as shellQuote, kr as stateBucketExistenceConfirmed, kt as normalizeAwsTagsToCfn, l as replayRollback, li as ResourceTimeoutError, ln as carriesSecretMask, lr as getDockerCmd, lt as endCommandInterruptScope, m as IMPLICIT_DELETE_DEPENDENCIES, mn as isSingleDynamicReferenceToken, mr as escapeRegExp, mt as slowCcOperationTimeoutMs, n as DEFAULT_RESOURCE_WARN_AFTER_MS, ni as IntrinsicResolutionRefusalError, nn as withRetry, nr as describeAwsFailure, nt as clearOnUpdateRemoval, o as planFailedOps, oi as NestedStackChildDirectDestroyError, on as STATE_SOURCED_CROSS_GENERATION_RULES, or as describeDockerFailure, ot as maskDeep, p as maskingRetryLogger, pn as identityKeyFor, pr as runDockerStreaming, pt as CloudControlProvider, q as collectPublishedOutputNames, qn as assertAssetBucketRegion, qr as resetAwsClients, qt as s3BucketDualStackDomainName, r as DeployEngine, ri as LocalInvokeBuildError$1, rn as DagBuilder, rr as buildDockerImage, rt as ProviderRegistry, s as planRollback, si as PartialFailureError, sn as STATE_SOURCED_READBACK_RULES, sr as dockerSpawnEnvWithSensitive, st as maskerOrIdentity, t as DEFAULT_RESOURCE_TIMEOUT_MS, ti as DynamicReferenceRegionAmbiguousError, tn as describeTypeWithThrottleRetry, tr as buildDenyExternalAccessPolicy, tt as collectInlinePolicyNamesManagedBySiblings, u as updatePartialMessage, ui as ResourceUpdateNotSupportedError, un as createSecretMasker, ur as partitionSensitiveEnv, ut as interruptWatchListenerCount, v as bindingSkippedOutputs, vi as withErrorHandling, vn as recordMaskOnlyValue, vr as Synthesizer, vt as disableInstanceApiTermination, w as isFinalSnapshotError, wi as markRedactedCause, wn as rebuildClientForBucketRegion, wr as resolveCaptureObservedState, wt as getAccountInfo, x as buildFinalSnapshotIdentifier, xi as isThrottlingError, xn as scrubResourceRecord, xr as getLegacyStateBucketName, xt as carriesDynamicReference, y as ATOMIC_FINAL_SNAPSHOT_TYPES, yi as isMarkedNonRetryable, yn as recoverMaskedOutput, yr as synthesisStatusMessage, yt as isTerminationProtectionPropagationError, z as formatResourceLine, zn as stringifyValue, zr as canonicalizeRegion, zt as requireConfigArray } from "./deploy-engine-C287P1jL.js";
1
+ import { $ as getCurrentResourceSecrets, $n as validateAssetBucketName, $t as findActionableSilentDrops, A as planOrphanAdoption, An as CUSTOM_RESOURCE_RESPONSE_PREFIX, Ar as warnDeprecatedNoPrefixCliFlag, At as resolveExplicitPhysicalId, B as bold, Bn as WorkGraph, Br as derivePartitionAndUrlSuffix, Bt as requireConfigObject, C as createPreDeleteFinalSnapshot, Ci as markNonRetryable, Cn as S3StateBackend, Cr as resolveAutoAssetStorage, Ct as coerceParameterTypedValue, D as makeCanonicalizePropertiesFn, Dn as forceQuitRecoveryClause, Dr as resolveStateBucketWithDefaultAndSource, Dt as refStateLookupFromResource, E as unsupportedFinalSnapshotError, En as buildLockContentionMessage, Er as resolveStateBucketWithDefault, Et as parameterTypeMayLoseSecretIdentity, F as WARM_THROUGHPUT_MEMBERS, Fn as orphansAfterRollback, Fr as uploadCfnTemplate, Ft as configIntegerRefusal, G as yellow, Gn as AssetModeResolver, Gr as AwsClients, Gt as s3BucketArn, H as gray, Hn as createAssetRedirectResolver, Hr as processStackMessages, Ht as classifyReplaySecretRegion, I as coerceWarmThroughput$1, In as orphansCarriedFrom, Ir as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, It as configStringRefusal, J as exportAliasCollisionScrubWarning, Jn as ensureAssetStorage, Jr as setAwsClients, Jt as s3BucketRegionalDomainName, K as collectDeclaredOutputNames, Kn as BOOTSTRAP_MARKER_PREFIX, Kr as getAwsClients, Kt as s3BucketDomainName, L as isWarmThroughputDecrease, Ln as shouldRetainResource, Lr as expectedOwnerParam, Lt as readConfigString, M as isStatefulRecreateTargetForReplace, Mn as exportNamesCarriedFrom, Mr as CFN_TEMPLATE_URL_LIMIT, Mt as coerceCfnBoolean, N as isStatefulRecreateTargetSync, Nn as importableOutputKeys, Nr as MIGRATE_TMP_PREFIX, Nt as coerceCfnInteger, O as extractDeploymentEventError, On as formatLockExpiry, Or as resolveUseCdkBootstrapAssets, Ot as WAFv2WebACLProvider, P as renderStatefulReason, Pn as importableOutputs, Pr as findLargeInlineResources, Pt as configBooleanRefusal, Q as secretSafeKeyDisplay, Qn as readBootstrapMarkerBody, Qr as CrossAccountSecretRefusalError, Qt as INTRINSIC_KEYS, R as toFiniteNumber, Rn as AssetPublisher, Rr as PARTITION_TABLE, Rt as replayWarn, S as ccRoutedFinalSnapshotError, Si as isTransientServerError, Sn as LockManager, Sr as resolveApp, St as cfnRefValueFromPhysicalId, T as refusesFinalSnapshot, Ti as retryClassificationText, Tn as buildForceUnlockCommand, Tr as resolveSkipPrefix, Tt as isUnboundTemplateParameter, U as green, Un as loadPublishableAssetManifest, Ut as producerRegionsFromState, V as cyan, Vn as buildAssetRedirectMap, Vr as AssemblyReader, Vt as requireConfigString, W as red, Wn as rewriteTemplateAssetReferences, Wr as resolveBucketRegion, Wt as withSharedDrainBudget, X as secretBearing, Xn as isCrossRegionRedirect, Xr as CdkdError, Xt as applyRoleArnIfSet, Y as isExportAliasCollision, Yn as getBootstrapMarkerKey, Yt as s3BucketWebsiteUrl, Z as secretBearingStateKeyWarning, Zn as parseBootstrapMarker, Zt as DiffCalculator, _ as isSecretBearingReferenceString, _i as normalizeAwsError, _n as maskSecretsInText, _r as getDockerImageBySourceHash, _t as deleteSkipReason, a as DeploymentEventsStore, an as STATE_SOURCED_BASELINE_RULES, ar as describeDockerExecFailure, at as createMaskedRetryLogger, b as PRE_DELETE_SNAPSHOT_TYPES, bi as isRetryableTransientError, bn as redactSecretsForState, br as getDefaultStateBucketName, bt as IntrinsicFunctionResolver, c as replayFailedOperations, ci as ProvisioningError, cn as TEMPLATE_SOURCED_RULES, cr as formatDockerLoginError, ct as beginCommandInterruptScope, d as updatePartialReason, di as StackHasActiveImportsError, dn as dynamicReferenceTokens, dr as redactDockerArgvValues, dt as isInterruptedWaitError, ei as DeployCancelledError, en as findSilentDropProperties, er as validateContainerRepoName, et as IAMRoleProvider, f as withResourceDeadline, fi as StackTerminationProtectionError, fn as errorCauseChain, fr as runDockerForeground, ft as startInterruptWatch, g as bagHoldsSecretExpression, gn as maskSecretsInError, gr as AssetManifestLoader, gt as deleteIndeterminateGuards, h as computeImplicitDeleteEdges, hn as markSameGenerationBag, hr as stripControlChars, ht as UNSPECIFIED_SKIP_REASON, i as DeploymentEventsReader, ii as LocalStartServiceError, in as TemplateParser, ir as describeDockerCapturedOutput, it as wouldReturnToSdkProvider, j as MULTI_REGION_RECREATE_BLOCKED_TYPES, jn as DEFAULT_STATE_PREFIX, jr as CFN_TEMPLATE_BODY_LIMIT, jt as assertRegionMatch, k as makeSiblingClaimReader, kn as shellQuote, kr as stateBucketExistenceConfirmed, kt as normalizeAwsTagsToCfn, l as replayRollback, li as ResourceTimeoutError, ln as carriesSecretMask, lr as getDockerCmd, lt as endCommandInterruptScope, m as IMPLICIT_DELETE_DEPENDENCIES, mn as isSingleDynamicReferenceToken, mr as escapeRegExp, mt as slowCcOperationTimeoutMs, n as DEFAULT_RESOURCE_WARN_AFTER_MS, ni as IntrinsicResolutionRefusalError, nn as withRetry, nr as describeAwsFailure, nt as clearOnUpdateRemoval, o as planFailedOps, oi as NestedStackChildDirectDestroyError, on as STATE_SOURCED_CROSS_GENERATION_RULES, or as describeDockerFailure, ot as maskDeep, p as maskingRetryLogger, pn as identityKeyFor, pr as runDockerStreaming, pt as CloudControlProvider, q as collectPublishedOutputNames, qn as assertAssetBucketRegion, qr as resetAwsClients, qt as s3BucketDualStackDomainName, r as DeployEngine, ri as LocalInvokeBuildError$1, rn as DagBuilder, rr as buildDockerImage, rt as ProviderRegistry, s as planRollback, si as PartialFailureError, sn as STATE_SOURCED_READBACK_RULES, sr as dockerSpawnEnvWithSensitive, st as maskerOrIdentity, t as DEFAULT_RESOURCE_TIMEOUT_MS, ti as DynamicReferenceRegionAmbiguousError, tn as describeTypeWithThrottleRetry, tr as buildDenyExternalAccessPolicy, tt as collectInlinePolicyNamesManagedBySiblings, u as updatePartialMessage, ui as ResourceUpdateNotSupportedError, un as createSecretMasker, ur as partitionSensitiveEnv, ut as interruptWatchListenerCount, v as bindingSkippedOutputs, vi as withErrorHandling, vn as recordMaskOnlyValue, vr as Synthesizer, vt as disableInstanceApiTermination, w as isFinalSnapshotError, wi as markRedactedCause, wn as rebuildClientForBucketRegion, wr as resolveCaptureObservedState, wt as getAccountInfo, x as buildFinalSnapshotIdentifier, xi as isThrottlingError, xn as scrubResourceRecord, xr as getLegacyStateBucketName, xt as carriesDynamicReference, y as ATOMIC_FINAL_SNAPSHOT_TYPES, yi as isMarkedNonRetryable, yn as recoverMaskedOutput, yr as synthesisStatusMessage, yt as isTerminationProtectionPropagationError, z as formatResourceLine, zn as stringifyValue, zr as canonicalizeRegion, zt as requireConfigArray } from "./deploy-engine-aYUEGRRl.js";
2
2
  import { _ as withSkipPrefix, b as displaySafe, c as PATTERN_B_NAME_OPTIONS, f as explicitNamePropertyFor, h as getCurrentStackName, i as reserveStdoutForPayload, l as PATTERN_B_NAME_PROPERTIES, m as generateResourceNameWithFallback, n as getLogger, o as runStackBuffered, p as generateResourceName, s as getLiveRenderer, u as PATTERN_B_RESOURCE_TYPES, v as withStackName, x as truncateCodePoints, y as UNRENDERABLE } from "./logger-DTEUzYP_.js";
3
3
  import { t as awsClientDefaults } from "./aws-client-defaults-D-iYiIJ6.js";
4
- import { t as getCdkdVersion } from "./version-DH53RtuA.js";
5
- import { r as protectedReplacementAdvice, t as ASGProvider } from "./asg-provider-DVXRJSN_.js";
4
+ import { t as getCdkdVersion } from "./version-DTli1mA9.js";
5
+ import { r as protectedReplacementAdvice, t as ASGProvider } from "./asg-provider-e05iqtU_.js";
6
6
  import { AsyncLocalStorage } from "node:async_hooks";
7
7
  import { createHash, randomBytes, randomUUID } from "node:crypto";
8
8
  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, NotFound, 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";
@@ -25847,6 +25847,88 @@ var EventBridgeRuleProvider = class {
25847
25847
  }
25848
25848
  };
25849
25849
 
25850
+ //#endregion
25851
+ //#region src/provisioning/attribute-map.ts
25852
+ /**
25853
+ * The ONE spelling of the attribute-map rule an SDK provider's `create()` /
25854
+ * `update()` / `import()` result follows (issue #3077, closing the `?? ''`
25855
+ * shape `docs/provider-development.md` forbids under "Never store an
25856
+ * empty-string placeholder"):
25857
+ *
25858
+ * an attribute cdkd could not read back is ABSENT from the map — never
25859
+ * recorded as the empty string, and never as a present-but-`undefined` key.
25860
+ *
25861
+ * The consumers of `ResourceState.attributes` all key off exactly that
25862
+ * distinction, and a sentinel puts every one of them on the wrong branch:
25863
+ *
25864
+ * - the deploy engine persists the map as-is, so `''` becomes the recorded
25865
+ * value of a field AWS never assigned;
25866
+ * - the intrinsic resolver serves a stored attribute whenever it is not
25867
+ * `undefined`, so `''` shadows `constructAttribute` forever — the
25868
+ * `AWS::EC2::Instance` IP / DNS / AZ arm re-describes the instance from
25869
+ * AWS only on a MISS, the `Arn` arms of the RDS family rebuild the ARN
25870
+ * only on a MISS;
25871
+ * - the Outputs export pass publishes whatever the resolver returned, so a
25872
+ * stored `''` is exported to every `Fn::ImportValue` consumer.
25873
+ *
25874
+ * It exists as a MODULE rather than a per-provider idiom because the rule was
25875
+ * prose and 96 attribute-position `?? ''` / `|| ''` / bare `''` sites across
25876
+ * 18 providers shipped anyway (measured 2026-09-14 with the TypeScript-compiler
25877
+ * walk that is now `tests/unit/provisioning/attribute-map.test.ts`). A helper
25878
+ * that DROPS the key is the one form a provider cannot spell wrong by habit.
25879
+ *
25880
+ * Two values are treated as "not read back":
25881
+ *
25882
+ * - `undefined`: the SDK's spelling of an unassigned optional member.
25883
+ * - `null`: no AWS SDK v3 read-back reports a scalar attribute as `null`, and
25884
+ * a stored `null` takes the resolver's "not `undefined`" hit branch exactly
25885
+ * like `''` does.
25886
+ *
25887
+ * Every other value is kept verbatim — INCLUDING an empty string AWS itself
25888
+ * reported (`false`, `0`, an empty array and an object likewise). The helper
25889
+ * stops cdkd MANUFACTURING `''` for a field it never read; a `''` that came
25890
+ * off the wire is a known value with a meaning the provider owns. The EC2
25891
+ * Instance provider is where that distinction is load-bearing: a `running`
25892
+ * instance with no public address is described with `PublicDnsName: ''` and
25893
+ * no `PublicIpAddress`, and CloudFormation answers `''` for both — a KNOWN
25894
+ * empty, recorded as such so a reference does not degrade to the instance id
25895
+ * on every resolution — while the same `''` on a `pending` instance means
25896
+ * "not yet", which that provider maps to `undefined` BEFORE calling this
25897
+ * helper (its `describedInstanceAttributes`). A caller that knows a `''`
25898
+ * means "unknown" is the one that must say so; this helper cannot tell.
25899
+ *
25900
+ * Deliberately NOT a general "compact this record" utility: it is scoped to
25901
+ * attribute maps. A property bag keeps its `undefined`-valued keys out by other
25902
+ * means (`.claude/rules/provider-property-fidelity.md`, "Remove the key rather
25903
+ * than setting it to `undefined`").
25904
+ *
25905
+ * A LEAF module (imports nothing) so every provider can take it without adding
25906
+ * an edge to the provider import ring.
25907
+ */
25908
+ /**
25909
+ * Build an attribute map from read-back values, omitting every key whose value
25910
+ * is `undefined` or `null`.
25911
+ */
25912
+ function definedAttributes(entries) {
25913
+ const out = {};
25914
+ for (const [key, value] of Object.entries(entries)) {
25915
+ if (value === void 0 || value === null) continue;
25916
+ out[key] = value;
25917
+ }
25918
+ return out;
25919
+ }
25920
+ /**
25921
+ * `String(value)` for a numeric read-back whose CloudFormation attribute is a
25922
+ * string (`Endpoint.Port`), or `undefined` when the field is unassigned — so
25923
+ * `definedAttributes` drops the key instead of recording the literal
25924
+ * `'undefined'`, which is what `String(described?.Port ?? '')` yields once its
25925
+ * `?? ''` is merely deleted.
25926
+ */
25927
+ function stringifyIfAssigned(value) {
25928
+ if (value === void 0 || value === null) return void 0;
25929
+ return String(value);
25930
+ }
25931
+
25850
25932
  //#endregion
25851
25933
  //#region src/provisioning/providers/eventbridge-bus-provider.ts
25852
25934
  /**
@@ -25909,14 +25991,14 @@ var EventBridgeBusProvider = class {
25909
25991
  const dlcCreate = sanitizeDeadLetterConfig(properties["DeadLetterConfig"]);
25910
25992
  if (dlcCreate) createParams.DeadLetterConfig = dlcCreate;
25911
25993
  if (properties["LogConfig"] !== void 0) createParams.LogConfig = properties["LogConfig"];
25912
- const eventBusArn = (await this.eventBridgeClient.send(new CreateEventBusCommand(createParams))).EventBusArn ?? "";
25994
+ const response = await this.eventBridgeClient.send(new CreateEventBusCommand(createParams));
25913
25995
  if (properties["Policy"]) {}
25914
25996
  return {
25915
25997
  physicalId: name,
25916
- attributes: {
25917
- Arn: eventBusArn,
25998
+ attributes: definedAttributes({
25999
+ Arn: response.EventBusArn,
25918
26000
  Name: name
25919
- }
26001
+ })
25920
26002
  };
25921
26003
  } catch (error) {
25922
26004
  const cause = error instanceof Error ? error : void 0;
@@ -26549,6 +26631,59 @@ function canonicalizeSgInlineRuleProtocols(properties) {
26549
26631
  * - AWS::EC2::SecurityGroupIngress
26550
26632
  * - AWS::EC2::Instance
26551
26633
  */
26634
+ /**
26635
+ * The `AWS::EC2::Instance` attribute map for a `DescribeInstances` read-back,
26636
+ * shared by `createInstance` and `updateInstance` so the two cannot answer
26637
+ * the same instance differently (issue #3077).
26638
+ *
26639
+ * The map distinguishes UNKNOWN from KNOWN-EMPTY, and the instance STATE is
26640
+ * what tells them apart:
26641
+ *
26642
+ * - `pending` (a `--no-wait` create, or an update racing one): the private
26643
+ * address, private DNS name and AZ are assigned at launch and are recorded
26644
+ * when present; the PUBLIC pair may simply not exist yet — the API
26645
+ * reports `PublicDnsName: ''` and no `PublicIpAddress` in that window — so
26646
+ * an empty or absent public member is UNKNOWN and its key is OMITTED. A
26647
+ * persisted `''` would shadow the resolver's live re-read for the life of
26648
+ * the record (the defect the issue reports); an absent key sends the next
26649
+ * `Fn::GetAtt` back to AWS.
26650
+ * - any settled state (`running`, `stopped`, ...): what AWS reports IS the
26651
+ * answer. A running instance in a private subnet is described exactly like
26652
+ * the pending window above — `PublicDnsName: ''`, no `PublicIpAddress` —
26653
+ * and CloudFormation answers `''` for both attributes, so the pair is
26654
+ * recorded as the known empty string rather than omitted: omitted, every
26655
+ * resolution would take the live arm, find nothing, and degrade to the
26656
+ * instance id with a warning, permanently, on an ordinary private-subnet
26657
+ * stack (review of the first cut).
26658
+ * - no `State` at all (a read-back that returned no instance, or a shape
26659
+ * without one): treated like `pending` — whatever members are present are
26660
+ * recorded, and an empty or absent public member is omitted, since nothing
26661
+ * says the instance has settled.
26662
+ *
26663
+ * `definedAttributes` then drops the `undefined` members; it keeps `''`, so the
26664
+ * pending-window normalization has to happen HERE, where the state is known.
26665
+ *
26666
+ * The residual that follows from the pending rule: a `--no-wait` create of an
26667
+ * instance in a PRIVATE subnet omits the public pair, and nothing later writes
26668
+ * it -- a no-change deploy's auto-refresh touches `observedProperties`, never
26669
+ * `attributes` -- so `Fn::GetAtt [.., PublicIp]` takes the resolver's live arm,
26670
+ * finds no address, and degrades to the instance id with a warning until the
26671
+ * next `update()` of that instance records the known-empty pair. Tracked on
26672
+ * go-to-k/cdkd#3096.
26673
+ */
26674
+ function describedInstanceAttributes(instanceId, instance) {
26675
+ const stateName = instance?.State?.Name;
26676
+ const settled = stateName !== void 0 && stateName !== "pending";
26677
+ const publicMember = (value) => settled ? value ?? "" : value || void 0;
26678
+ return definedAttributes({
26679
+ InstanceId: instanceId,
26680
+ PrivateIp: instance?.PrivateIpAddress,
26681
+ PublicIp: publicMember(instance?.PublicIpAddress),
26682
+ PrivateDnsName: instance?.PrivateDnsName,
26683
+ PublicDnsName: publicMember(instance?.PublicDnsName),
26684
+ AvailabilityZone: instance?.Placement?.AvailabilityZone
26685
+ });
26686
+ }
26552
26687
  var EC2Provider = class {
26553
26688
  ec2Client;
26554
26689
  logger = getLogger().child("EC2Provider");
@@ -26762,7 +26897,7 @@ var EC2Provider = class {
26762
26897
  CidrBlock: cidrBlock,
26763
26898
  InstanceTenancy: properties["InstanceTenancy"] ?? void 0
26764
26899
  }))).Vpc.VpcId;
26765
- let defaultSgId = "";
26900
+ let defaultSgId;
26766
26901
  try {
26767
26902
  if (properties["EnableDnsHostnames"] === true || properties["EnableDnsHostnames"] === "true") await this.ec2Client.send(new ModifyVpcAttributeCommand({
26768
26903
  VpcId: vpcId,
@@ -26781,7 +26916,7 @@ var EC2Provider = class {
26781
26916
  }, {
26782
26917
  Name: "group-name",
26783
26918
  Values: ["default"]
26784
- }] }))).SecurityGroups?.[0]?.GroupId || "";
26919
+ }] }))).SecurityGroups?.[0]?.GroupId;
26785
26920
  } catch {
26786
26921
  this.logger.debug(`Failed to get default SG for VPC ${vpcId}`);
26787
26922
  }
@@ -26797,12 +26932,11 @@ var EC2Provider = class {
26797
26932
  this.logger.debug(`Successfully created VPC ${logicalId}: ${vpcId}`);
26798
26933
  return {
26799
26934
  physicalId: vpcId,
26800
- attributes: {
26935
+ attributes: definedAttributes({
26801
26936
  VpcId: vpcId,
26802
26937
  CidrBlock: cidrBlock,
26803
- DefaultNetworkAcl: "",
26804
26938
  DefaultSecurityGroup: defaultSgId
26805
- }
26939
+ })
26806
26940
  };
26807
26941
  } catch (error) {
26808
26942
  const cause = error instanceof Error ? error : void 0;
@@ -28008,14 +28142,7 @@ var EC2Provider = class {
28008
28142
  } else await this.ensureIamInstanceProfileAssociated(instanceId, iamInstanceProfile.arn, iamInstanceProfile.name, logicalId);
28009
28143
  }
28010
28144
  const runningInstance = (await this.ec2Client.send(new DescribeInstancesCommand({ InstanceIds: [instanceId] }))).Reservations?.[0]?.Instances?.[0];
28011
- const attributes = {
28012
- InstanceId: instanceId,
28013
- PrivateIp: runningInstance?.PrivateIpAddress ?? "",
28014
- PublicIp: runningInstance?.PublicIpAddress ?? "",
28015
- PrivateDnsName: runningInstance?.PrivateDnsName ?? "",
28016
- PublicDnsName: runningInstance?.PublicDnsName ?? "",
28017
- AvailabilityZone: runningInstance?.Placement?.AvailabilityZone ?? ""
28018
- };
28145
+ const attributes = describedInstanceAttributes(instanceId, runningInstance);
28019
28146
  this.logger.debug(`Successfully created EC2 Instance ${logicalId}: ${instanceId}`);
28020
28147
  runInstancesToken.release();
28021
28148
  return {
@@ -28180,14 +28307,7 @@ var EC2Provider = class {
28180
28307
  return {
28181
28308
  physicalId,
28182
28309
  wasReplaced: false,
28183
- attributes: {
28184
- InstanceId: physicalId,
28185
- PrivateIp: instance?.PrivateIpAddress ?? "",
28186
- PublicIp: instance?.PublicIpAddress ?? "",
28187
- PrivateDnsName: instance?.PrivateDnsName ?? "",
28188
- PublicDnsName: instance?.PublicDnsName ?? "",
28189
- AvailabilityZone: instance?.Placement?.AvailabilityZone ?? ""
28190
- }
28310
+ attributes: describedInstanceAttributes(physicalId, instance)
28191
28311
  };
28192
28312
  } catch (error) {
28193
28313
  const cause = error instanceof Error ? error : void 0;
@@ -33631,7 +33751,7 @@ var CloudFrontDistributionProvider = class {
33631
33751
  DistributionConfig: sdkConfig
33632
33752
  }));
33633
33753
  const getResponse = await this.cloudFrontClient.send(new GetDistributionCommand({ Id: physicalId }));
33634
- const domainName = getResponse.Distribution?.DomainName ?? "";
33754
+ const domainName = getResponse.Distribution?.DomainName;
33635
33755
  const arn = getResponse.Distribution?.ARN;
33636
33756
  await this.applyTagDiff(arn, previousProperties["Tags"], properties["Tags"], physicalId, logicalId, resourceType);
33637
33757
  await this.settleDistribution(logicalId, physicalId);
@@ -33639,11 +33759,11 @@ var CloudFrontDistributionProvider = class {
33639
33759
  return {
33640
33760
  physicalId,
33641
33761
  wasReplaced: false,
33642
- attributes: {
33762
+ attributes: definedAttributes({
33643
33763
  Id: physicalId,
33644
33764
  DistributionId: physicalId,
33645
33765
  DomainName: domainName
33646
- }
33766
+ })
33647
33767
  };
33648
33768
  } catch (error) {
33649
33769
  if (error instanceof CdkdError) throw error;
@@ -34631,11 +34751,11 @@ var AgentCoreRuntimeProvider = class {
34631
34751
  * (issue #1179).
34632
34752
  */
34633
34753
  buildAttributes(response, agentRuntimeName) {
34634
- const attributes = {
34754
+ const attributes = definedAttributes({
34635
34755
  AgentRuntimeArn: response.agentRuntimeArn,
34636
34756
  AgentRuntimeId: response.agentRuntimeId,
34637
34757
  AgentRuntimeName: agentRuntimeName
34638
- };
34758
+ });
34639
34759
  if (response.agentRuntimeVersion !== void 0) attributes["AgentRuntimeVersion"] = response.agentRuntimeVersion;
34640
34760
  if (response.status !== void 0) attributes["Status"] = response.status;
34641
34761
  if (response.createdAt !== void 0) attributes["CreatedAt"] = response.createdAt.toISOString();
@@ -34749,7 +34869,7 @@ var AgentCoreRuntimeProvider = class {
34749
34869
  const resp = await this.client.send(new GetAgentRuntimeCommand({ agentRuntimeId: physicalId }));
34750
34870
  return {
34751
34871
  physicalId,
34752
- attributes: this.buildAttributes(resp, resp.agentRuntimeName ?? "")
34872
+ attributes: this.buildAttributes(resp, resp.agentRuntimeName)
34753
34873
  };
34754
34874
  } catch (err) {
34755
34875
  this.logger.debug(`Could not enrich imported BedrockAgentCore Runtime ${physicalId} attributes (${err instanceof Error ? err.message : String(err)}); recording AgentRuntimeId only (Fn::GetAtt resolves live via getAttribute)`);
@@ -34814,12 +34934,12 @@ var AgentCoreBrowserProvider = class {
34814
34934
  this.logger.debug(`Adopted default browser ${DEFAULT_BROWSER_ID} (${browserArn})`);
34815
34935
  return {
34816
34936
  physicalId: browserArn,
34817
- attributes: {
34937
+ attributes: definedAttributes({
34818
34938
  BrowserArn: browserArn,
34819
34939
  BrowserId: response.browserId ?? "aws.browser.v1",
34820
- Name: response.name ?? "",
34821
- Status: response.status ?? ""
34822
- }
34940
+ Name: response.name,
34941
+ Status: response.status
34942
+ })
34823
34943
  };
34824
34944
  } catch (error) {
34825
34945
  const cause = error instanceof Error ? error : void 0;
@@ -34872,12 +34992,12 @@ var AgentCoreBrowserProvider = class {
34872
34992
  const response = await this.client.send(new GetBrowserCommand({ browserId: DEFAULT_BROWSER_ID }));
34873
34993
  return {
34874
34994
  physicalId: response.browserArn,
34875
- attributes: {
34995
+ attributes: definedAttributes({
34876
34996
  BrowserArn: response.browserArn,
34877
34997
  BrowserId: response.browserId ?? "aws.browser.v1",
34878
- Name: response.name ?? "",
34879
- Status: response.status ?? ""
34880
- }
34998
+ Name: response.name,
34999
+ Status: response.status
35000
+ })
34881
35001
  };
34882
35002
  }
34883
35003
  };
@@ -34929,11 +35049,11 @@ var AgentCoreCodeInterpreterProvider = class {
34929
35049
  this.logger.debug(`Adopted default code interpreter ${DEFAULT_CODE_INTERPRETER_ID} (${codeInterpreterArn})`);
34930
35050
  return {
34931
35051
  physicalId: codeInterpreterArn,
34932
- attributes: {
35052
+ attributes: definedAttributes({
34933
35053
  CodeInterpreterArn: codeInterpreterArn,
34934
35054
  CodeInterpreterId: response.codeInterpreterId ?? "aws.codeinterpreter.v1",
34935
- Status: response.status ?? ""
34936
- }
35055
+ Status: response.status
35056
+ })
34937
35057
  };
34938
35058
  } catch (error) {
34939
35059
  const cause = error instanceof Error ? error : void 0;
@@ -34984,11 +35104,11 @@ var AgentCoreCodeInterpreterProvider = class {
34984
35104
  const response = await this.client.send(new GetCodeInterpreterCommand({ codeInterpreterId: DEFAULT_CODE_INTERPRETER_ID }));
34985
35105
  return {
34986
35106
  physicalId: response.codeInterpreterArn,
34987
- attributes: {
35107
+ attributes: definedAttributes({
34988
35108
  CodeInterpreterArn: response.codeInterpreterArn,
34989
35109
  CodeInterpreterId: response.codeInterpreterId ?? "aws.codeinterpreter.v1",
34990
- Status: response.status ?? ""
34991
- }
35110
+ Status: response.status
35111
+ })
34992
35112
  };
34993
35113
  }
34994
35114
  };
@@ -35100,12 +35220,12 @@ var AgentCoreEvaluatorProvider = class {
35100
35220
  this.logger.debug(`Created BedrockAgentCore Evaluator: ${evaluatorId} (${evaluatorArn})`);
35101
35221
  return {
35102
35222
  physicalId: evaluatorArn,
35103
- attributes: {
35223
+ attributes: definedAttributes({
35104
35224
  EvaluatorArn: evaluatorArn,
35105
35225
  EvaluatorId: evaluatorId,
35106
- Status: response.status ?? "",
35107
- CreatedAt: response.createdAt?.toISOString() ?? ""
35108
- }
35226
+ Status: response.status,
35227
+ CreatedAt: response.createdAt?.toISOString()
35228
+ })
35109
35229
  };
35110
35230
  } catch (error) {
35111
35231
  const cause = error instanceof Error ? error : void 0;
@@ -35135,12 +35255,12 @@ var AgentCoreEvaluatorProvider = class {
35135
35255
  return {
35136
35256
  physicalId: evaluatorArn,
35137
35257
  wasReplaced: false,
35138
- attributes: {
35258
+ attributes: definedAttributes({
35139
35259
  EvaluatorArn: evaluatorArn,
35140
35260
  EvaluatorId: response.evaluatorId ?? evaluatorIdFromArn(evaluatorArn),
35141
- Status: response.status ?? "",
35142
- UpdatedAt: response.updatedAt?.toISOString() ?? ""
35143
- }
35261
+ Status: response.status,
35262
+ UpdatedAt: response.updatedAt?.toISOString()
35263
+ })
35144
35264
  };
35145
35265
  } catch (error) {
35146
35266
  const cause = error instanceof Error ? error : void 0;
@@ -39151,13 +39271,13 @@ var RDSProvider = class {
39151
39271
  const described = await this.describeDBCluster(dbClusterIdentifier);
39152
39272
  return {
39153
39273
  physicalId: dbClusterIdentifier,
39154
- attributes: {
39155
- "Endpoint.Address": described?.Endpoint ?? "",
39156
- "Endpoint.Port": String(described?.Port ?? ""),
39157
- "ReadEndpoint.Address": described?.ReaderEndpoint ?? "",
39158
- Arn: described?.DBClusterArn ?? "",
39159
- DBClusterResourceId: described?.DbClusterResourceId ?? ""
39160
- }
39274
+ attributes: definedAttributes({
39275
+ "Endpoint.Address": described?.Endpoint,
39276
+ "Endpoint.Port": stringifyIfAssigned(described?.Port),
39277
+ "ReadEndpoint.Address": described?.ReaderEndpoint,
39278
+ Arn: described?.DBClusterArn,
39279
+ DBClusterResourceId: described?.DbClusterResourceId
39280
+ })
39161
39281
  };
39162
39282
  } catch (innerError) {
39163
39283
  try {
@@ -39219,13 +39339,13 @@ var RDSProvider = class {
39219
39339
  return {
39220
39340
  physicalId,
39221
39341
  wasReplaced: false,
39222
- attributes: {
39223
- "Endpoint.Address": described?.Endpoint ?? "",
39224
- "Endpoint.Port": String(described?.Port ?? ""),
39225
- "ReadEndpoint.Address": described?.ReaderEndpoint ?? "",
39226
- Arn: described?.DBClusterArn ?? "",
39227
- DBClusterResourceId: described?.DbClusterResourceId ?? ""
39228
- }
39342
+ attributes: definedAttributes({
39343
+ "Endpoint.Address": described?.Endpoint,
39344
+ "Endpoint.Port": stringifyIfAssigned(described?.Port),
39345
+ "ReadEndpoint.Address": described?.ReaderEndpoint,
39346
+ Arn: described?.DBClusterArn,
39347
+ DBClusterResourceId: described?.DbClusterResourceId
39348
+ })
39229
39349
  };
39230
39350
  } catch (error) {
39231
39351
  const cause = error instanceof Error ? error : void 0;
@@ -39304,11 +39424,11 @@ var RDSProvider = class {
39304
39424
  const described = await this.describeDBInstance(dbInstanceIdentifier);
39305
39425
  return {
39306
39426
  physicalId: dbInstanceIdentifier,
39307
- attributes: {
39308
- "Endpoint.Address": described?.Endpoint?.Address ?? "",
39309
- "Endpoint.Port": String(described?.Endpoint?.Port ?? ""),
39310
- Arn: described?.DBInstanceArn ?? ""
39311
- }
39427
+ attributes: definedAttributes({
39428
+ "Endpoint.Address": described?.Endpoint?.Address,
39429
+ "Endpoint.Port": stringifyIfAssigned(described?.Endpoint?.Port),
39430
+ Arn: described?.DBInstanceArn
39431
+ })
39312
39432
  };
39313
39433
  } catch (error) {
39314
39434
  if (error instanceof ProvisioningError) throw error;
@@ -39349,11 +39469,11 @@ var RDSProvider = class {
39349
39469
  return {
39350
39470
  physicalId,
39351
39471
  wasReplaced: false,
39352
- attributes: {
39353
- "Endpoint.Address": described?.Endpoint?.Address ?? "",
39354
- "Endpoint.Port": String(described?.Endpoint?.Port ?? ""),
39355
- Arn: described?.DBInstanceArn ?? ""
39356
- }
39472
+ attributes: definedAttributes({
39473
+ "Endpoint.Address": described?.Endpoint?.Address,
39474
+ "Endpoint.Port": stringifyIfAssigned(described?.Endpoint?.Port),
39475
+ Arn: described?.DBInstanceArn
39476
+ })
39357
39477
  };
39358
39478
  } catch (error) {
39359
39479
  const cause = error instanceof Error ? error : void 0;
@@ -39824,11 +39944,11 @@ var RDSDBProxyProvider = class {
39824
39944
  if (!endpoint || !dbProxyArn) throw new ProvisioningError(`Timed out waiting for DBProxy ${dbProxyName} to become available (last status: ${status ?? "unknown"})`, resourceType, logicalId, dbProxyName);
39825
39945
  return {
39826
39946
  physicalId: dbProxyName,
39827
- attributes: {
39947
+ attributes: definedAttributes({
39828
39948
  DBProxyArn: dbProxyArn,
39829
39949
  Endpoint: endpoint,
39830
- VpcId: vpcId ?? ""
39831
- }
39950
+ VpcId: vpcId
39951
+ })
39832
39952
  };
39833
39953
  }
39834
39954
  async update(logicalId, physicalId, resourceType, properties, previousProperties) {
@@ -40156,12 +40276,12 @@ var RDSDBProxyEndpointProvider = class {
40156
40276
  if (!endpoint || !arn) throw new ProvisioningError(`Timed out waiting for DBProxyEndpoint ${dbProxyEndpointName} to become available (last status: ${status ?? "unknown"})`, resourceType, logicalId, dbProxyEndpointName);
40157
40277
  return {
40158
40278
  physicalId: dbProxyEndpointName,
40159
- attributes: {
40279
+ attributes: definedAttributes({
40160
40280
  Endpoint: endpoint,
40161
40281
  DBProxyEndpointArn: arn,
40162
40282
  IsDefault: isDefault ?? false,
40163
- VpcId: vpcId ?? ""
40164
- }
40283
+ VpcId: vpcId
40284
+ })
40165
40285
  };
40166
40286
  }
40167
40287
  async update(logicalId, physicalId, resourceType, properties, previousProperties) {
@@ -40853,13 +40973,13 @@ var DocDBProvider = class {
40853
40973
  const described = await this.describeDBCluster(dbClusterIdentifier);
40854
40974
  return {
40855
40975
  physicalId: dbClusterIdentifier,
40856
- attributes: {
40857
- "Endpoint.Address": described?.Endpoint ?? "",
40858
- "Endpoint.Port": String(described?.Port ?? ""),
40859
- "ReadEndpoint.Address": described?.ReaderEndpoint ?? "",
40860
- Arn: described?.DBClusterArn ?? "",
40861
- ClusterResourceId: described?.DbClusterResourceId ?? ""
40862
- }
40976
+ attributes: definedAttributes({
40977
+ "Endpoint.Address": described?.Endpoint,
40978
+ "Endpoint.Port": stringifyIfAssigned(described?.Port),
40979
+ "ReadEndpoint.Address": described?.ReaderEndpoint,
40980
+ Arn: described?.DBClusterArn,
40981
+ ClusterResourceId: described?.DbClusterResourceId
40982
+ })
40863
40983
  };
40864
40984
  } catch (error) {
40865
40985
  if (error instanceof ProvisioningError) throw error;
@@ -40891,13 +41011,13 @@ var DocDBProvider = class {
40891
41011
  return {
40892
41012
  physicalId,
40893
41013
  wasReplaced: false,
40894
- attributes: {
40895
- "Endpoint.Address": described?.Endpoint ?? "",
40896
- "Endpoint.Port": String(described?.Port ?? ""),
40897
- "ReadEndpoint.Address": described?.ReaderEndpoint ?? "",
40898
- Arn: described?.DBClusterArn ?? "",
40899
- ClusterResourceId: described?.DbClusterResourceId ?? ""
40900
- }
41014
+ attributes: definedAttributes({
41015
+ "Endpoint.Address": described?.Endpoint,
41016
+ "Endpoint.Port": stringifyIfAssigned(described?.Port),
41017
+ "ReadEndpoint.Address": described?.ReaderEndpoint,
41018
+ Arn: described?.DBClusterArn,
41019
+ ClusterResourceId: described?.DbClusterResourceId
41020
+ })
40901
41021
  };
40902
41022
  } catch (error) {
40903
41023
  const cause = error instanceof Error ? error : void 0;
@@ -40962,11 +41082,11 @@ var DocDBProvider = class {
40962
41082
  const described = await this.describeDBInstance(dbInstanceIdentifier);
40963
41083
  return {
40964
41084
  physicalId: dbInstanceIdentifier,
40965
- attributes: {
40966
- "Endpoint.Address": described?.Endpoint?.Address ?? "",
40967
- "Endpoint.Port": String(described?.Endpoint?.Port ?? ""),
40968
- Arn: described?.DBInstanceArn ?? ""
40969
- }
41085
+ attributes: definedAttributes({
41086
+ "Endpoint.Address": described?.Endpoint?.Address,
41087
+ "Endpoint.Port": stringifyIfAssigned(described?.Endpoint?.Port),
41088
+ Arn: described?.DBInstanceArn
41089
+ })
40970
41090
  };
40971
41091
  } catch (error) {
40972
41092
  if (error instanceof ProvisioningError) throw error;
@@ -40990,11 +41110,11 @@ var DocDBProvider = class {
40990
41110
  return {
40991
41111
  physicalId,
40992
41112
  wasReplaced: false,
40993
- attributes: {
40994
- "Endpoint.Address": described?.Endpoint?.Address ?? "",
40995
- "Endpoint.Port": String(described?.Endpoint?.Port ?? ""),
40996
- Arn: described?.DBInstanceArn ?? ""
40997
- }
41113
+ attributes: definedAttributes({
41114
+ "Endpoint.Address": described?.Endpoint?.Address,
41115
+ "Endpoint.Port": stringifyIfAssigned(described?.Endpoint?.Port),
41116
+ Arn: described?.DBInstanceArn
41117
+ })
40998
41118
  };
40999
41119
  } catch (error) {
41000
41120
  const cause = error instanceof Error ? error : void 0;
@@ -41492,12 +41612,12 @@ var NeptuneProvider = class {
41492
41612
  const described = await this.describeDBCluster(dbClusterIdentifier);
41493
41613
  return {
41494
41614
  physicalId: dbClusterIdentifier,
41495
- attributes: {
41496
- "Endpoint.Address": described?.Endpoint ?? "",
41497
- "Endpoint.Port": String(described?.Port ?? ""),
41498
- "ReadEndpoint.Address": described?.ReaderEndpoint ?? "",
41499
- ClusterResourceId: described?.DbClusterResourceId ?? ""
41500
- }
41615
+ attributes: definedAttributes({
41616
+ "Endpoint.Address": described?.Endpoint,
41617
+ "Endpoint.Port": stringifyIfAssigned(described?.Port),
41618
+ "ReadEndpoint.Address": described?.ReaderEndpoint,
41619
+ ClusterResourceId: described?.DbClusterResourceId
41620
+ })
41501
41621
  };
41502
41622
  } catch (error) {
41503
41623
  if (error instanceof ProvisioningError) throw error;
@@ -41529,12 +41649,12 @@ var NeptuneProvider = class {
41529
41649
  return {
41530
41650
  physicalId,
41531
41651
  wasReplaced: false,
41532
- attributes: {
41533
- "Endpoint.Address": described?.Endpoint ?? "",
41534
- "Endpoint.Port": String(described?.Port ?? ""),
41535
- "ReadEndpoint.Address": described?.ReaderEndpoint ?? "",
41536
- ClusterResourceId: described?.DbClusterResourceId ?? ""
41537
- }
41652
+ attributes: definedAttributes({
41653
+ "Endpoint.Address": described?.Endpoint,
41654
+ "Endpoint.Port": stringifyIfAssigned(described?.Port),
41655
+ "ReadEndpoint.Address": described?.ReaderEndpoint,
41656
+ ClusterResourceId: described?.DbClusterResourceId
41657
+ })
41538
41658
  };
41539
41659
  } catch (error) {
41540
41660
  const cause = error instanceof Error ? error : void 0;
@@ -41602,10 +41722,10 @@ var NeptuneProvider = class {
41602
41722
  const described = await this.describeDBInstance(dbInstanceIdentifier);
41603
41723
  return {
41604
41724
  physicalId: dbInstanceIdentifier,
41605
- attributes: {
41606
- "Endpoint.Address": described?.Endpoint?.Address ?? "",
41607
- "Endpoint.Port": String(described?.Endpoint?.Port ?? "")
41608
- }
41725
+ attributes: definedAttributes({
41726
+ "Endpoint.Address": described?.Endpoint?.Address,
41727
+ "Endpoint.Port": stringifyIfAssigned(described?.Endpoint?.Port)
41728
+ })
41609
41729
  };
41610
41730
  } catch (error) {
41611
41731
  if (error instanceof ProvisioningError) throw error;
@@ -41631,10 +41751,10 @@ var NeptuneProvider = class {
41631
41751
  return {
41632
41752
  physicalId,
41633
41753
  wasReplaced: false,
41634
- attributes: {
41635
- "Endpoint.Address": described?.Endpoint?.Address ?? "",
41636
- "Endpoint.Port": String(described?.Endpoint?.Port ?? "")
41637
- }
41754
+ attributes: definedAttributes({
41755
+ "Endpoint.Address": described?.Endpoint?.Address,
41756
+ "Endpoint.Port": stringifyIfAssigned(described?.Endpoint?.Port)
41757
+ })
41638
41758
  };
41639
41759
  } catch (error) {
41640
41760
  const cause = error instanceof Error ? error : void 0;
@@ -45052,12 +45172,13 @@ var ElastiCacheProvider = class {
45052
45172
  const attributes = {};
45053
45173
  if (described?.CacheNodes?.[0]?.Endpoint) {
45054
45174
  const endpoint = described.CacheNodes[0].Endpoint;
45055
- attributes["RedisEndpoint.Address"] = endpoint.Address ?? "";
45056
- attributes["RedisEndpoint.Port"] = String(endpoint.Port ?? "");
45175
+ if (endpoint.Address !== void 0) attributes["RedisEndpoint.Address"] = endpoint.Address;
45176
+ if (endpoint.Port !== void 0) attributes["RedisEndpoint.Port"] = String(endpoint.Port);
45057
45177
  }
45058
45178
  if (described?.ConfigurationEndpoint) {
45059
- attributes["ConfigurationEndpoint.Address"] = described.ConfigurationEndpoint.Address ?? "";
45060
- attributes["ConfigurationEndpoint.Port"] = String(described.ConfigurationEndpoint.Port ?? "");
45179
+ const configurationEndpoint = described.ConfigurationEndpoint;
45180
+ if (configurationEndpoint.Address !== void 0) attributes["ConfigurationEndpoint.Address"] = configurationEndpoint.Address;
45181
+ if (configurationEndpoint.Port !== void 0) attributes["ConfigurationEndpoint.Port"] = String(configurationEndpoint.Port);
45061
45182
  }
45062
45183
  return {
45063
45184
  physicalId: cacheClusterId,
@@ -45100,12 +45221,13 @@ var ElastiCacheProvider = class {
45100
45221
  const attributes = {};
45101
45222
  if (described?.CacheNodes?.[0]?.Endpoint) {
45102
45223
  const endpoint = described.CacheNodes[0].Endpoint;
45103
- attributes["RedisEndpoint.Address"] = endpoint.Address ?? "";
45104
- attributes["RedisEndpoint.Port"] = String(endpoint.Port ?? "");
45224
+ if (endpoint.Address !== void 0) attributes["RedisEndpoint.Address"] = endpoint.Address;
45225
+ if (endpoint.Port !== void 0) attributes["RedisEndpoint.Port"] = String(endpoint.Port);
45105
45226
  }
45106
45227
  if (described?.ConfigurationEndpoint) {
45107
- attributes["ConfigurationEndpoint.Address"] = described.ConfigurationEndpoint.Address ?? "";
45108
- attributes["ConfigurationEndpoint.Port"] = String(described.ConfigurationEndpoint.Port ?? "");
45228
+ const configurationEndpoint = described.ConfigurationEndpoint;
45229
+ if (configurationEndpoint.Address !== void 0) attributes["ConfigurationEndpoint.Address"] = configurationEndpoint.Address;
45230
+ if (configurationEndpoint.Port !== void 0) attributes["ConfigurationEndpoint.Port"] = String(configurationEndpoint.Port);
45109
45231
  }
45110
45232
  return {
45111
45233
  physicalId,
@@ -45898,11 +46020,11 @@ var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
45898
46020
  }
45899
46021
  return {
45900
46022
  physicalId: serviceId,
45901
- attributes: {
46023
+ attributes: definedAttributes({
45902
46024
  Id: serviceId,
45903
- Arn: service.Arn || "",
45904
- Name: service.Name || name || ""
45905
- }
46025
+ Arn: service.Arn,
46026
+ Name: service.Name || name
46027
+ })
45906
46028
  };
45907
46029
  } catch (error) {
45908
46030
  const cause = error instanceof Error ? error : void 0;
@@ -47563,16 +47685,16 @@ var AppSyncProvider = class {
47563
47685
  createdApiId = response.graphqlApi?.apiId;
47564
47686
  const apiId = response.graphqlApi.apiId;
47565
47687
  const arn = response.graphqlApi.arn;
47566
- const graphQLUrl = response.graphqlApi.uris?.["GRAPHQL"] ?? "";
47688
+ const graphQLUrl = response.graphqlApi.uris?.["GRAPHQL"];
47567
47689
  await this.applyEnvironmentVariables(apiId, resourceType, logicalId, properties, void 0, context?.replayingState === true);
47568
47690
  this.logger.debug(`Successfully created GraphQL API ${logicalId}: ${apiId}`);
47569
47691
  return {
47570
47692
  physicalId: apiId,
47571
- attributes: {
47693
+ attributes: definedAttributes({
47572
47694
  ApiId: apiId,
47573
47695
  Arn: arn,
47574
47696
  GraphQLUrl: graphQLUrl
47575
- }
47697
+ })
47576
47698
  };
47577
47699
  } catch (error) {
47578
47700
  if (createdApiId) try {
@@ -58708,14 +58830,14 @@ var CodeCommitRepositoryProvider = class {
58708
58830
  * resolver can recover CFn's `Ref` value (the repository ID) from state.
58709
58831
  */
58710
58832
  toAttributes(metadata) {
58711
- return {
58712
- Arn: metadata?.Arn ?? "",
58713
- CloneUrlHttp: metadata?.cloneUrlHttp ?? "",
58714
- CloneUrlSsh: metadata?.cloneUrlSsh ?? "",
58715
- Name: metadata?.repositoryName ?? "",
58716
- KmsKeyId: metadata?.kmsKeyId ?? "",
58717
- RepositoryId: metadata?.repositoryId ?? ""
58718
- };
58833
+ return definedAttributes({
58834
+ Arn: metadata?.Arn,
58835
+ CloneUrlHttp: metadata?.cloneUrlHttp,
58836
+ CloneUrlSsh: metadata?.cloneUrlSsh,
58837
+ Name: metadata?.repositoryName,
58838
+ KmsKeyId: metadata?.kmsKeyId,
58839
+ RepositoryId: metadata?.repositoryId
58840
+ });
58719
58841
  }
58720
58842
  /**
58721
58843
  * Create a CodeCommit Repository
@@ -59527,18 +59649,18 @@ var S3VectorsProvider = class {
59527
59649
  const tagRecord = this.cfnTagsToRecord(properties["Tags"]);
59528
59650
  const tags = Object.keys(tagRecord).length > 0 ? tagRecord : void 0;
59529
59651
  try {
59530
- const vectorBucketArn = (await this.getClient().send(new CreateVectorBucketCommand({
59652
+ const result = await this.getClient().send(new CreateVectorBucketCommand({
59531
59653
  vectorBucketName,
59532
59654
  encryptionConfiguration: encryptionConfiguration ? {
59533
59655
  sseType: encryptionConfiguration["SseType"],
59534
59656
  kmsKeyArn: encryptionConfiguration["KmsKeyArn"]
59535
59657
  } : void 0,
59536
59658
  ...tags && Object.keys(tags).length > 0 ? { tags } : {}
59537
- }))).vectorBucketArn ?? "";
59659
+ }));
59538
59660
  this.logger.debug(`Successfully created S3 VectorBucket ${logicalId}: ${vectorBucketName}`);
59539
59661
  return {
59540
59662
  physicalId: vectorBucketName,
59541
- attributes: { VectorBucketArn: vectorBucketArn }
59663
+ attributes: definedAttributes({ VectorBucketArn: result.vectorBucketArn })
59542
59664
  };
59543
59665
  } catch (error) {
59544
59666
  const cause = error instanceof Error ? error : void 0;
@@ -61000,8 +61122,6 @@ var ECRProvider = class {
61000
61122
  ...tags ? { tags } : {}
61001
61123
  }))).repository;
61002
61124
  if (!repo?.repositoryName) throw new Error("CreateRepository did not return repository name");
61003
- const arn = repo.repositoryArn ?? "";
61004
- const repositoryUri = repo.repositoryUri ?? "";
61005
61125
  const lifecyclePolicy = properties["LifecyclePolicy"];
61006
61126
  if (lifecyclePolicy?.LifecyclePolicyText) {
61007
61127
  await this.getClient().send(new PutLifecyclePolicyCommand({
@@ -61022,10 +61142,10 @@ var ECRProvider = class {
61022
61142
  this.logger.debug(`Successfully created ECR Repository ${logicalId}: ${repo.repositoryName}`);
61023
61143
  return {
61024
61144
  physicalId: repo.repositoryName,
61025
- attributes: {
61026
- Arn: arn,
61027
- RepositoryUri: repositoryUri
61028
- }
61145
+ attributes: definedAttributes({
61146
+ Arn: repo.repositoryArn,
61147
+ RepositoryUri: repo.repositoryUri
61148
+ })
61029
61149
  };
61030
61150
  } catch (error) {
61031
61151
  const cause = error instanceof Error ? error : void 0;
@@ -61119,10 +61239,10 @@ var ECRProvider = class {
61119
61239
  return {
61120
61240
  physicalId,
61121
61241
  wasReplaced: false,
61122
- attributes: {
61123
- Arn: repo?.repositoryArn ?? "",
61124
- RepositoryUri: repo?.repositoryUri ?? ""
61125
- }
61242
+ attributes: definedAttributes({
61243
+ Arn: repo?.repositoryArn,
61244
+ RepositoryUri: repo?.repositoryUri
61245
+ })
61126
61246
  };
61127
61247
  } catch (error) {
61128
61248
  const cause = error instanceof Error ? error : void 0;
@@ -92057,4 +92177,4 @@ function buildProgram() {
92057
92177
 
92058
92178
  //#endregion
92059
92179
  export { buildProgram };
92060
- //# sourceMappingURL=program-DUmAMwgQ.js.map
92180
+ //# sourceMappingURL=program-CnTfNj2k.js.map