@go-to-k/cdkd 0.290.0 → 0.290.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{asg-provider-DVXRJSN_.js → asg-provider-BsC_XndT.js} +2 -2
- package/dist/{asg-provider-DVXRJSN_.js.map → asg-provider-BsC_XndT.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-C287P1jL.js → deploy-engine-Nn9j2GPK.js} +78 -22
- package/dist/deploy-engine-Nn9j2GPK.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/{program-DUmAMwgQ.js → program-z-ESK5sd.js} +416 -182
- package/dist/{program-DUmAMwgQ.js.map → program-z-ESK5sd.js.map} +1 -1
- package/dist/{version-DH53RtuA.js → version-7XwrjRzX.js} +2 -2
- package/dist/{version-DH53RtuA.js.map → version-7XwrjRzX.js.map} +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-C287P1jL.js.map +0 -1
|
@@ -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-
|
|
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-Nn9j2GPK.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-
|
|
5
|
-
import { r as protectedReplacementAdvice, t as ASGProvider } from "./asg-provider-
|
|
4
|
+
import { t as getCdkdVersion } from "./version-7XwrjRzX.js";
|
|
5
|
+
import { r as protectedReplacementAdvice, t as ASGProvider } from "./asg-provider-BsC_XndT.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";
|
|
@@ -26,9 +26,9 @@ import { AddTagsToResourceCommand as AddTagsToResourceCommand$1, CreateCacheClus
|
|
|
26
26
|
import { ACMClient, AddTagsToCertificateCommand, DeleteCertificateCommand, DescribeCertificateCommand, ListTagsForCertificateCommand, RemoveTagsFromCertificateCommand, RequestCertificateCommand, ResourceNotFoundException as ResourceNotFoundException$7, UpdateCertificateOptionsCommand } from "@aws-sdk/client-acm";
|
|
27
27
|
import { CreateMicrovmImageCommand, DeleteMicrovmImageCommand, GetMicrovmImageCommand, LambdaMicrovmsClient, ListTagsCommand as ListTagsCommand$1, ResourceNotFoundException as ResourceNotFoundException$8, TagResourceCommand as TagResourceCommand$10, UntagResourceCommand as UntagResourceCommand$10, UpdateMicrovmImageCommand } from "@aws-sdk/client-lambda-microvms";
|
|
28
28
|
import * as fs from "node:fs";
|
|
29
|
-
import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
29
|
+
import { cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, readlinkSync, realpathSync, rmSync, statSync, symlinkSync, writeFileSync } from "node:fs";
|
|
30
30
|
import * as path from "node:path";
|
|
31
|
-
import { basename, dirname, isAbsolute, resolve } from "node:path";
|
|
31
|
+
import { basename, dirname, isAbsolute, join, resolve } from "node:path";
|
|
32
32
|
import { execFile, spawn } from "node:child_process";
|
|
33
33
|
import { tmpdir } from "node:os";
|
|
34
34
|
import { AssociateVPCWithHostedZoneCommand, ChangeResourceRecordSetsCommand, ChangeTagsForResourceCommand, CreateHostedZoneCommand, CreateQueryLoggingConfigCommand, DeleteHostedZoneCommand, DeleteQueryLoggingConfigCommand, DisassociateVPCFromHostedZoneCommand, GetHostedZoneCommand, HostedZoneAlreadyExists, ListHostedZonesByNameCommand, ListQueryLoggingConfigsCommand, ListResourceRecordSetsCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$8, Route53Client, UpdateHostedZoneCommentCommand, UpdateHostedZoneFeaturesCommand } from "@aws-sdk/client-route-53";
|
|
@@ -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
|
|
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:
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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
|
-
|
|
45060
|
-
attributes["ConfigurationEndpoint.
|
|
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
|
-
|
|
45108
|
-
attributes["ConfigurationEndpoint.
|
|
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
|
|
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
|
-
}))
|
|
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:
|
|
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;
|
|
@@ -83726,7 +83846,7 @@ function resolveAssetCodePath$1(stack, logicalId, resource) {
|
|
|
83726
83846
|
* **Order is preserved**: `Properties.Layers` is iterated left-to-right
|
|
83727
83847
|
* and the resulting `ResolvedLambdaLayer[]` carries the same order. The
|
|
83728
83848
|
* caller (`local-invoke.ts`'s `materializeLambdaLayers` and
|
|
83729
|
-
* `local-start-api.ts`'s server-boot pre-merge)
|
|
83849
|
+
* `local-start-api.ts`'s server-boot pre-merge) merges every
|
|
83730
83850
|
* entry into one host tmpdir in template order to honor AWS's
|
|
83731
83851
|
* "last-layer-wins" file-collision semantics — Docker rejects multiple
|
|
83732
83852
|
* bind mounts at the same target so cdkd cannot rely on overlay
|
|
@@ -83997,6 +84117,110 @@ function notFoundError$1(target, stack, resources) {
|
|
|
83997
84117
|
return new LocalInvokeResolutionError(msg.trimEnd());
|
|
83998
84118
|
}
|
|
83999
84119
|
|
|
84120
|
+
//#endregion
|
|
84121
|
+
//#region src/local/layer-tree-copy.ts
|
|
84122
|
+
/**
|
|
84123
|
+
* Merge one Lambda Layer's asset tree into the directory that will be
|
|
84124
|
+
* bind-mounted at `/opt`, with AWS's "last layer wins" semantic and with
|
|
84125
|
+
* symlinks kept VERBATIM (issue #3106).
|
|
84126
|
+
*
|
|
84127
|
+
* Why this is a hand-written walk and not `cpSync`. The merge used to be
|
|
84128
|
+
* `cpSync(src, dest, { recursive: true, force: true })`, and every
|
|
84129
|
+
* `cpSync`-shaped repair of it was measured wrong in some direction:
|
|
84130
|
+
*
|
|
84131
|
+
* - Without `verbatimSymlinks: true` (the default), `cpSync` rewrites a
|
|
84132
|
+
* RELATIVE link target to the ABSOLUTE path of the source on the host —
|
|
84133
|
+
* `bin/rel-link -> real.sh` arrives as `-> <cdk.out>/asset.<hash>/bin/
|
|
84134
|
+
* real.sh`, which is dangling inside the container, where only `dest`
|
|
84135
|
+
* is mounted. Measured on Node 22.12 / 24.21.
|
|
84136
|
+
* - WITH `verbatimSymlinks: true`, Node's C++ `cpSync` (every release
|
|
84137
|
+
* after 22.12) throws `EEXIST` when a later layer carries a symlink at a
|
|
84138
|
+
* path an earlier layer already placed one — `nodejs/node_modules/.bin/
|
|
84139
|
+
* <tool>` in two layers built from the same dependency is the ordinary
|
|
84140
|
+
* case. Measured by the go-to-k/cdkd#3118 review on 22.23 / 24.15 /
|
|
84141
|
+
* 24.21; the JS implementation on 22.12 does not throw, which is why
|
|
84142
|
+
* the floor alone did not show it.
|
|
84143
|
+
* - A `cpSync` + `readdirSync({ recursive: true })` pair was worse:
|
|
84144
|
+
* the recursive readdir DESCENDS INTO directory symlinks on every Node
|
|
84145
|
+
* after 22.12 (not on 22.12), so a cyclic link (`sub/up -> ..`, or a
|
|
84146
|
+
* pnpm-style `node_modules`) hung the merge, and an absolute link to a
|
|
84147
|
+
* host directory made the walk delete and write INSIDE that host
|
|
84148
|
+
* directory. And `cpSync`'s `force` writes THROUGH a destination that
|
|
84149
|
+
* is already a directory symlink, so a later layer's real directory
|
|
84150
|
+
* landed in the earlier layer's link target — on the host, when the
|
|
84151
|
+
* link was absolute. Same review, same versions.
|
|
84152
|
+
*
|
|
84153
|
+
* So the walk is explicit and recurses only on a real directory (`d_type`,
|
|
84154
|
+
* via `Dirent.isDirectory()`, which reports a directory symlink as a
|
|
84155
|
+
* symlink on 22.12 and 24.21 alike). Per entry, "last layer wins" is applied
|
|
84156
|
+
* the same way for every kind: whatever sits at the destination path that is
|
|
84157
|
+
* not of the same kind is removed first — a link, a file, or a whole
|
|
84158
|
+
* directory an earlier layer placed — then the entry lands. A symlink is
|
|
84159
|
+
* recreated with the SOURCE's own target string and never resolved, so an
|
|
84160
|
+
* absolute link stays absolute and a dangling one stays dangling, exactly as
|
|
84161
|
+
* AWS extracts the layer ZIP into `/opt`; nothing is ever written through a
|
|
84162
|
+
* link. A file is copied with `cpSync` (single file, `force`), which is what
|
|
84163
|
+
* preserves the mode bits, so a layer's `bin/<script>` keeps its `+x` — the
|
|
84164
|
+
* property the `local-invoke-layers` fixture executes through.
|
|
84165
|
+
*
|
|
84166
|
+
* The ROOT may itself be a symlink (an asset dir handed over through a link
|
|
84167
|
+
* passes `resolveAssetCodePath`'s `statSync`). `readdirSync` follows a root
|
|
84168
|
+
* link by itself, so the `realpathSync` is not what makes that case work,
|
|
84169
|
+
* and it does not move where a dangling or looping root fails either (the
|
|
84170
|
+
* first `readdirSync` raises the same `ENOENT` / `ELOOP` naming the asset
|
|
84171
|
+
* path); it only keeps every path the walk joins real.
|
|
84172
|
+
*
|
|
84173
|
+
* Bound, stated rather than handled: a FIFO or a socket inside a layer
|
|
84174
|
+
* makes the single-file `cpSync` throw (`ERR_FS_CP_FIFO_PIPE` /
|
|
84175
|
+
* `ERR_FS_CP_SOCKET`, immediately, never blocking) where the old recursive
|
|
84176
|
+
* copy skipped it in silence on some releases. CDK's own asset staging
|
|
84177
|
+
* cannot stage such an entry, so no real layer carries one.
|
|
84178
|
+
*
|
|
84179
|
+
* Both layer merges (`cdkd local invoke` and `cdkd local start-api`) call
|
|
84180
|
+
* this; keep them on the one helper rather than re-spelling copy options.
|
|
84181
|
+
*/
|
|
84182
|
+
function copyLayerTreeLastWins(src, dest) {
|
|
84183
|
+
mkdirSync(dest, { recursive: true });
|
|
84184
|
+
copyDirLastWins(realpathSync(src), dest);
|
|
84185
|
+
}
|
|
84186
|
+
function copyDirLastWins(fromDir, toDir) {
|
|
84187
|
+
for (const entry of readdirSync(fromDir, { withFileTypes: true })) {
|
|
84188
|
+
const from = join(fromDir, entry.name);
|
|
84189
|
+
const to = join(toDir, entry.name);
|
|
84190
|
+
if (entry.isSymbolicLink()) {
|
|
84191
|
+
removeUnless(to, "symlink");
|
|
84192
|
+
symlinkSync(readlinkSync(from), to);
|
|
84193
|
+
} else if (entry.isDirectory()) {
|
|
84194
|
+
removeUnless(to, "directory");
|
|
84195
|
+
mkdirSync(to, { recursive: true });
|
|
84196
|
+
copyDirLastWins(from, to);
|
|
84197
|
+
} else {
|
|
84198
|
+
removeUnless(to, "file");
|
|
84199
|
+
cpSync(from, to, { force: true });
|
|
84200
|
+
}
|
|
84201
|
+
}
|
|
84202
|
+
}
|
|
84203
|
+
/**
|
|
84204
|
+
* Clear the destination path unless what is there is already of `kind`. A
|
|
84205
|
+
* directory is kept so a later layer MERGES into it; a file is kept because
|
|
84206
|
+
* `cpSync` overwrites it in place; a symlink is always replaced (its target
|
|
84207
|
+
* string comes from the later layer).
|
|
84208
|
+
*/
|
|
84209
|
+
function removeUnless(to, kind) {
|
|
84210
|
+
let st;
|
|
84211
|
+
try {
|
|
84212
|
+
st = lstatSync(to);
|
|
84213
|
+
} catch {
|
|
84214
|
+
return;
|
|
84215
|
+
}
|
|
84216
|
+
if (kind === "directory" && st.isDirectory()) return;
|
|
84217
|
+
if (kind === "file" && st.isFile()) return;
|
|
84218
|
+
rmSync(to, {
|
|
84219
|
+
recursive: true,
|
|
84220
|
+
force: true
|
|
84221
|
+
});
|
|
84222
|
+
}
|
|
84223
|
+
|
|
84000
84224
|
//#endregion
|
|
84001
84225
|
//#region src/local/ecs-task-resolver.ts
|
|
84002
84226
|
function detectEcsImageResolutionNeeds(stack) {
|
|
@@ -87413,12 +87637,12 @@ async function resolveLocalBuildPlan$1(lambda) {
|
|
|
87413
87637
|
* when the entry is a same-stack asset. Literal-ARN entries always
|
|
87414
87638
|
* pre-materialize first.
|
|
87415
87639
|
* - 2+ layers → copy each into a fresh tmpdir IN ORDER (later
|
|
87416
|
-
* layers overwrite earlier files via `
|
|
87640
|
+
* layers overwrite earlier files via `copyLayerTreeLastWins`),
|
|
87417
87641
|
* bind-mount the tmpdir at `/opt`. Records the tmpdir in
|
|
87418
87642
|
* `layerTmpDirs` so `shutdown(...)` removes it.
|
|
87419
87643
|
*
|
|
87420
87644
|
* Issue #448: literal-ARN entries (`{kind: 'arn', ...}`) are downloaded
|
|
87421
|
-
* + unzipped via `lambda:GetLayerVersion` BEFORE the
|
|
87645
|
+
* + unzipped via `lambda:GetLayerVersion` BEFORE the merge
|
|
87422
87646
|
* branches run. Every per-ARN tmpdir is also recorded in `layerTmpDirs`
|
|
87423
87647
|
* so the same shutdown path cleans it up — even for the single-layer
|
|
87424
87648
|
* fast path that bind-mounts the dir directly.
|
|
@@ -87448,10 +87672,15 @@ async function materializeLambdaLayers$1(layers, layerTmpDirs, layerRoleArn) {
|
|
|
87448
87672
|
}
|
|
87449
87673
|
if (flat.length === 1) return flat[0].assetPath;
|
|
87450
87674
|
const dir = mkdtempSync(path.join(tmpdir(), "cdkd-local-start-api-layers-"));
|
|
87451
|
-
|
|
87452
|
-
|
|
87453
|
-
|
|
87454
|
-
|
|
87675
|
+
try {
|
|
87676
|
+
for (const layer of flat) copyLayerTreeLastWins(layer.assetPath, dir);
|
|
87677
|
+
} catch (error) {
|
|
87678
|
+
rmSync(dir, {
|
|
87679
|
+
recursive: true,
|
|
87680
|
+
force: true
|
|
87681
|
+
});
|
|
87682
|
+
throw error;
|
|
87683
|
+
}
|
|
87455
87684
|
layerTmpDirs.add(dir);
|
|
87456
87685
|
return dir;
|
|
87457
87686
|
}
|
|
@@ -91402,7 +91631,7 @@ async function resolveZipImagePlan(lambda, options) {
|
|
|
91402
91631
|
* - Stage 2: the resulting `{logicalId, assetPath}[]` list (in
|
|
91403
91632
|
* template order — ARN entries surface their `arn` as the
|
|
91404
91633
|
* `logicalId` for log lines) is handed to the existing
|
|
91405
|
-
* `materializeLambdaLayers`
|
|
91634
|
+
* `materializeLambdaLayers` merge path. AWS's "last layer
|
|
91406
91635
|
* wins" file-collision semantic is preserved across both layer
|
|
91407
91636
|
* kinds because the merge step is unchanged.
|
|
91408
91637
|
*/
|
|
@@ -91470,7 +91699,7 @@ function resolveTmpfsForLambda(lambda) {
|
|
|
91470
91699
|
* than copying since CDK has already unzipped the asset.
|
|
91471
91700
|
* 3. **Multiple layers**: copies each layer's contents into a fresh
|
|
91472
91701
|
* tmpdir IN ORDER (later layers overwrite earlier files via
|
|
91473
|
-
* `
|
|
91702
|
+
* `copyLayerTreeLastWins`), then bind-mounts the merged tmpdir at
|
|
91474
91703
|
* `/opt`. Returns `{ mount, tmpDir: <path> }` so the caller can
|
|
91475
91704
|
* `rmSync` the tmpdir on cleanup.
|
|
91476
91705
|
*
|
|
@@ -91487,10 +91716,15 @@ function materializeLambdaLayers(layers) {
|
|
|
91487
91716
|
readOnly: true
|
|
91488
91717
|
} };
|
|
91489
91718
|
const tmpDir = mkdtempSync(path.join(tmpdir(), "cdkd-local-invoke-layers-"));
|
|
91490
|
-
|
|
91491
|
-
|
|
91492
|
-
|
|
91493
|
-
|
|
91719
|
+
try {
|
|
91720
|
+
for (const layer of layers) copyLayerTreeLastWins(layer.assetPath, tmpDir);
|
|
91721
|
+
} catch (error) {
|
|
91722
|
+
rmSync(tmpDir, {
|
|
91723
|
+
recursive: true,
|
|
91724
|
+
force: true
|
|
91725
|
+
});
|
|
91726
|
+
throw error;
|
|
91727
|
+
}
|
|
91494
91728
|
return {
|
|
91495
91729
|
mount: {
|
|
91496
91730
|
hostPath: tmpDir,
|
|
@@ -92057,4 +92291,4 @@ function buildProgram() {
|
|
|
92057
92291
|
|
|
92058
92292
|
//#endregion
|
|
92059
92293
|
export { buildProgram };
|
|
92060
|
-
//# sourceMappingURL=program-
|
|
92294
|
+
//# sourceMappingURL=program-z-ESK5sd.js.map
|