From bbb99ff8dc5d9c26e8e8e3a3ee1374df3b155f83 Mon Sep 17 00:00:00 2001 From: siddsriv Date: Fri, 4 Oct 2024 15:58:08 +0000 Subject: [PATCH 1/7] fix(codegen): accIdEpMode config resolver generation plugin --- clients/client-dynamodb/package.json | 1 + clients/client-dynamodb/src/DynamoDBClient.ts | 22 +++++++++++++------ .../typescript/codegen/AddBuiltinPlugins.java | 5 +++++ .../aws/typescript/codegen/AwsDependency.java | 19 +++++++++++++--- .../AccountIdEndpointModeConfigResolver.ts | 6 ++--- 5 files changed, 40 insertions(+), 13 deletions(-) diff --git a/clients/client-dynamodb/package.json b/clients/client-dynamodb/package.json index b71bffb784ee..f254fc78b55a 100644 --- a/clients/client-dynamodb/package.json +++ b/clients/client-dynamodb/package.json @@ -23,6 +23,7 @@ "@aws-sdk/client-sso-oidc": "*", "@aws-sdk/client-sts": "*", "@aws-sdk/core": "*", + "@aws-sdk/core/account-id-endpoint": "*", "@aws-sdk/credential-provider-node": "*", "@aws-sdk/middleware-endpoint-discovery": "*", "@aws-sdk/middleware-host-header": "*", diff --git a/clients/client-dynamodb/src/DynamoDBClient.ts b/clients/client-dynamodb/src/DynamoDBClient.ts index dd5540cf7a59..5a999d0f8030 100644 --- a/clients/client-dynamodb/src/DynamoDBClient.ts +++ b/clients/client-dynamodb/src/DynamoDBClient.ts @@ -1,5 +1,10 @@ // smithy-typescript generated code -import { AccountIdEndpointMode } from "@aws-sdk/core/account-id-endpoint"; +import { + AccountIdEndpointMode, + AccountIdEndpointModeInputConfig, + AccountIdEndpointModeResolvedConfig, + resolveAccountIdEndpointModeConfig, +} from "@aws-sdk/core/account-id-endpoint"; import { EndpointDiscoveryInputConfig, EndpointDiscoveryResolvedConfig, @@ -465,6 +470,7 @@ export type DynamoDBClientConfigType = Partial<__SmithyConfiguration<__HttpHandl RetryInputConfig & RegionInputConfig & HostHeaderInputConfig & + AccountIdEndpointModeInputConfig & EndpointInputConfig & HttpAuthSchemeInputConfig & EndpointDiscoveryInputConfig & @@ -486,6 +492,7 @@ export type DynamoDBClientResolvedConfigType = __SmithyResolvedConfiguration<__H RetryResolvedConfig & RegionResolvedConfig & HostHeaderResolvedConfig & + AccountIdEndpointModeResolvedConfig & EndpointResolvedConfig & HttpAuthSchemeResolvedConfig & EndpointDiscoveryResolvedConfig & @@ -535,14 +542,15 @@ export class DynamoDBClient extends __Client< const _config_3 = resolveRetryConfig(_config_2); const _config_4 = resolveRegionConfig(_config_3); const _config_5 = resolveHostHeaderConfig(_config_4); - const _config_6 = resolveEndpointConfig(_config_5); - const _config_7 = resolveHttpAuthSchemeConfig(_config_6); - const _config_8 = resolveEndpointDiscoveryConfig(_config_7, { + const _config_6 = resolveAccountIdEndpointModeConfig(_config_5); + const _config_7 = resolveEndpointConfig(_config_6); + const _config_8 = resolveHttpAuthSchemeConfig(_config_7); + const _config_9 = resolveEndpointDiscoveryConfig(_config_8, { endpointDiscoveryCommandCtor: DescribeEndpointsCommand, }); - const _config_9 = resolveRuntimeExtensions(_config_8, configuration?.extensions || []); - super(_config_9); - this.config = _config_9; + const _config_10 = resolveRuntimeExtensions(_config_9, configuration?.extensions || []); + super(_config_10); + this.config = _config_10; this.middlewareStack.use(getUserAgentPlugin(this.config)); this.middlewareStack.use(getRetryPlugin(this.config)); this.middlewareStack.use(getContentLengthPlugin(this.config)); diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddBuiltinPlugins.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddBuiltinPlugins.java index b3092fdd623d..1f934d644f89 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddBuiltinPlugins.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddBuiltinPlugins.java @@ -48,6 +48,11 @@ public List getClientPlugins() { RuntimeClientPlugin.builder() .withConventions(AwsDependency.RECURSION_DETECTION_MIDDLEWARE.dependency, "RecursionDetection", HAS_MIDDLEWARE) + .build(), + // AccountIdEndpointMode field + RuntimeClientPlugin.builder() + .withConventions(AwsDependency.AWS_SDK_CORE_ACCOUNT_ID_ENDPOINT.dependency, "AccountIdEndpointMode", HAS_CONFIG) + .servicePredicate((m, s) -> isAwsService(s) || isSigV4Service(s)) .build() ); } diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java index b3c5fd61aa14..38277b86d0e6 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java @@ -39,6 +39,7 @@ public enum AwsDependency implements Dependency { AWS_SDK_CORE(NORMAL_DEPENDENCY, "@aws-sdk/core"), + AWS_SDK_CORE_ACCOUNT_ID_ENDPOINT(NORMAL_DEPENDENCY, "@aws-sdk/core/account-id-endpoint", AWS_SDK_CORE.version), MIDDLEWARE_SIGNING(NORMAL_DEPENDENCY, "@aws-sdk/middleware-signing"), MIDDLEWARE_TOKEN(NORMAL_DEPENDENCY, "@aws-sdk/middleware-token"), CREDENTIAL_PROVIDER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/credential-provider-node"), @@ -146,11 +147,23 @@ private static final class SdkVersion { VERSIONS = Collections.unmodifiableMap(versions); } + private static String getBasePackageName(String packageName) { + if (packageName.startsWith("@aws-sdk/")) { + // For @aws-sdk scoped packages, consider everything up to the second slash as the base package + int secondSlashIndex = packageName.indexOf('/', "@aws-sdk/".length()); + return secondSlashIndex == -1 ? packageName : packageName.substring(0, secondSlashIndex); + } else { + // For other packages, use the entire name + return packageName; + } + } + private static String expectVersion(String packageName) { - if (!VERSIONS.containsKey(packageName)) { - throw new IllegalArgumentException("No version for " + packageName); + String basePackageName = getBasePackageName(packageName); + if (!VERSIONS.containsKey(basePackageName)) { + throw new IllegalArgumentException("No version for " + basePackageName); } - return VERSIONS.get(packageName); + return VERSIONS.get(basePackageName); } } } diff --git a/packages/core/src/submodules/account-id-endpoint/AccountIdEndpointModeConfigResolver.ts b/packages/core/src/submodules/account-id-endpoint/AccountIdEndpointModeConfigResolver.ts index 5ede2063600c..b7f7ad0f943e 100644 --- a/packages/core/src/submodules/account-id-endpoint/AccountIdEndpointModeConfigResolver.ts +++ b/packages/core/src/submodules/account-id-endpoint/AccountIdEndpointModeConfigResolver.ts @@ -38,12 +38,12 @@ export interface AccountIdEndpointModeResolvedConfig { export const resolveAccountIdEndpointModeConfig = ( input: T & AccountIdEndpointModeInputConfig & PreviouslyResolved ): T & AccountIdEndpointModeResolvedConfig => { + const accountIdEndpointModeProvider = normalizeProvider( + input.accountIdEndpointMode ?? DEFAULT_ACCOUNT_ID_ENDPOINT_MODE + ); return { ...input, accountIdEndpointMode: async () => { - const accountIdEndpointModeProvider = normalizeProvider( - input.accountIdEndpointMode ?? DEFAULT_ACCOUNT_ID_ENDPOINT_MODE - ); const accIdMode = await accountIdEndpointModeProvider(); if (!validateAccountIdEndpointMode(accIdMode)) { throw new Error( From 75c1d2124fb363251cd82bf5f542b680fda4e21d Mon Sep 17 00:00:00 2001 From: siddsriv Date: Fri, 4 Oct 2024 16:43:01 +0000 Subject: [PATCH 2/7] chore(codegen): move to accIdEpMode TS integration) --- clients/client-dynamodb/package.json | 1 - .../typescript/codegen/AddBuiltinPlugins.java | 5 - .../aws/typescript/codegen/AwsDependency.java | 295 +++++++++--------- 3 files changed, 141 insertions(+), 160 deletions(-) diff --git a/clients/client-dynamodb/package.json b/clients/client-dynamodb/package.json index f254fc78b55a..b71bffb784ee 100644 --- a/clients/client-dynamodb/package.json +++ b/clients/client-dynamodb/package.json @@ -23,7 +23,6 @@ "@aws-sdk/client-sso-oidc": "*", "@aws-sdk/client-sts": "*", "@aws-sdk/core": "*", - "@aws-sdk/core/account-id-endpoint": "*", "@aws-sdk/credential-provider-node": "*", "@aws-sdk/middleware-endpoint-discovery": "*", "@aws-sdk/middleware-host-header": "*", diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddBuiltinPlugins.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddBuiltinPlugins.java index 1f934d644f89..b3092fdd623d 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddBuiltinPlugins.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddBuiltinPlugins.java @@ -48,11 +48,6 @@ public List getClientPlugins() { RuntimeClientPlugin.builder() .withConventions(AwsDependency.RECURSION_DETECTION_MIDDLEWARE.dependency, "RecursionDetection", HAS_MIDDLEWARE) - .build(), - // AccountIdEndpointMode field - RuntimeClientPlugin.builder() - .withConventions(AwsDependency.AWS_SDK_CORE_ACCOUNT_ID_ENDPOINT.dependency, "AccountIdEndpointMode", HAS_CONFIG) - .servicePredicate((m, s) -> isAwsService(s) || isSigV4Service(s)) .build() ); } diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java index 38277b86d0e6..535ecb81d370 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java @@ -13,157 +13,144 @@ * permissions and limitations under the License. */ -package software.amazon.smithy.aws.typescript.codegen; - -import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.DEV_DEPENDENCY; -import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.NORMAL_DEPENDENCY; -import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.PEER_DEPENDENCY; - -import java.io.IOException; -import java.io.StringReader; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import software.amazon.smithy.codegen.core.SymbolDependency; -import software.amazon.smithy.typescript.codegen.Dependency; -import software.amazon.smithy.utils.IoUtils; -import software.amazon.smithy.utils.SmithyInternalApi; - -/** - * This enum should define all TypeScript dependencies that are introduced by - * this package. - */ -@SmithyInternalApi -public enum AwsDependency implements Dependency { - - AWS_SDK_CORE(NORMAL_DEPENDENCY, "@aws-sdk/core"), - AWS_SDK_CORE_ACCOUNT_ID_ENDPOINT(NORMAL_DEPENDENCY, "@aws-sdk/core/account-id-endpoint", AWS_SDK_CORE.version), - MIDDLEWARE_SIGNING(NORMAL_DEPENDENCY, "@aws-sdk/middleware-signing"), - MIDDLEWARE_TOKEN(NORMAL_DEPENDENCY, "@aws-sdk/middleware-token"), - CREDENTIAL_PROVIDER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/credential-provider-node"), - ACCEPT_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-api-gateway"), - S3_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3"), - ADD_EXPECT_CONTINUE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-expect-continue"), - GLACIER_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-glacier"), - MACHINELEARNING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-machinelearning"), - S3_CONTROL_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3-control"), - SSEC_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-ssec"), - RDS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-rds"), - LOCATION_CONSTRAINT(NORMAL_DEPENDENCY, "@aws-sdk/middleware-location-constraint"), - ROUTE53_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-route53"), - EC2_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-ec2"), - BUCKET_ENDPOINT_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-bucket-endpoint"), - MIDDLEWARE_HOST_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-host-header"), - SQS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sqs"), - BODY_CHECKSUM_GENERATOR_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-browser"), - BODY_CHECKSUM_GENERATOR_NODE(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-node"), - XML_BUILDER(NORMAL_DEPENDENCY, "@aws-sdk/xml-builder"), - UUID_GENERATOR(NORMAL_DEPENDENCY, "uuid", "^9.0.1"), - UUID_GENERATOR_TYPES(DEV_DEPENDENCY, "@types/uuid", "^9.0.4"), - MIDDLEWARE_EVENTSTREAM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-eventstream"), - AWS_SDK_EVENTSTREAM_HANDLER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-handler-node"), - TRANSCRIBE_STREAMING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-transcribe-streaming"), - STS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sts"), - STS_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sts"), - STS_CLIENT_PEER(PEER_DEPENDENCY, "@aws-sdk/client-sts"), - SSO_OIDC_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sso-oidc"), - MIDDLEWARE_LOGGER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-logger"), - MIDDLEWARE_USER_AGENT("dependencies", "@aws-sdk/middleware-user-agent"), - AWS_SDK_UTIL_USER_AGENT_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-browser"), - AWS_SDK_UTIL_USER_AGENT_NODE(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-node"), - MIDDLEWARE_ENDPOINT_DISCOVERY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-endpoint-discovery"), - AWS_CRYPTO_SHA1_BROWSER(NORMAL_DEPENDENCY, "@aws-crypto/sha1-browser", "5.2.0"), - SIGNATURE_V4_MULTIREGION(NORMAL_DEPENDENCY, "@aws-sdk/signature-v4-multi-region"), - RECURSION_DETECTION_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-recursion-detection"), - MIDDLEWARE_WEBSOCKET(NORMAL_DEPENDENCY, "@aws-sdk/middleware-websocket"), - - // Conditionally added when httpChecksum trait is present - @Deprecated MD5_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/md5-js", "3.374.0"), - @Deprecated STREAM_HASHER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/hash-stream-node", "3.374.0"), - @Deprecated STREAM_HASHER_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/hash-blob-browser", "3.374.0"), - FLEXIBLE_CHECKSUMS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-flexible-checksums"), - - // Conditionally added when auth trait is present - MIDDLEWARE_API_KEY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-api-key"), - - // Conditionally added when EndpointRuleSetTrait is present - UTIL_ENDPOINTS(NORMAL_DEPENDENCY, "@aws-sdk/util-endpoints"), - - // Conditionally added when @httpBearerAuth is used in an AWS service - TOKEN_PROVIDERS(NORMAL_DEPENDENCY, "@aws-sdk/token-providers"), - TYPES(NORMAL_DEPENDENCY, "@aws-sdk/types"), - REGION_CONFIG_RESOLVER(NORMAL_DEPENDENCY, "@aws-sdk/region-config-resolver"), - - CLIENT_DYNAMODB_PEER(PEER_DEPENDENCY, "@aws-sdk/client-dynamodb", "^3.0.0"), - UTIL_DYNAMODB(NORMAL_DEPENDENCY, "@aws-sdk/util-dynamodb", "*"); - - - public final String packageName; - public final String version; - public final SymbolDependency dependency; - - AwsDependency(String type, String name) { - this(type, name, SdkVersion.expectVersion(name)); - } - - AwsDependency(String type, String name, String version) { - this.dependency = SymbolDependency.builder().dependencyType(type).packageName(name).version(version).build(); - this.packageName = name; - this.version = version; - } - - - @Override - public List getDependencies() { - return Collections.singletonList(dependency); - } - - @Override - public String getPackageName() { - return this.packageName; - } - - private static final class SdkVersion { - private static final Map VERSIONS; - - static { - String rawProperties = - IoUtils.readUtf8Url(AwsDependency.class.getResource("sdkVersions.properties")).trim(); - Properties p = new Properties(); - try { - p.load(new StringReader(rawProperties)); - } catch (IOException e) { - throw new IllegalArgumentException("Could not read sdkVersions.properties"); - } - - final Map versions = new HashMap<>(p.size()); - p.forEach((k, v) -> { - if (versions.put(k.toString(), v.toString()) != null) { - throw new IllegalArgumentException("Multiple versions defined for " + k.toString()); - } - }); - VERSIONS = Collections.unmodifiableMap(versions); - } - - private static String getBasePackageName(String packageName) { - if (packageName.startsWith("@aws-sdk/")) { - // For @aws-sdk scoped packages, consider everything up to the second slash as the base package - int secondSlashIndex = packageName.indexOf('/', "@aws-sdk/".length()); - return secondSlashIndex == -1 ? packageName : packageName.substring(0, secondSlashIndex); - } else { - // For other packages, use the entire name - return packageName; - } - } - - private static String expectVersion(String packageName) { - String basePackageName = getBasePackageName(packageName); - if (!VERSIONS.containsKey(basePackageName)) { - throw new IllegalArgumentException("No version for " + basePackageName); - } - return VERSIONS.get(basePackageName); - } - } -} + package software.amazon.smithy.aws.typescript.codegen; + + import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.DEV_DEPENDENCY; + import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.NORMAL_DEPENDENCY; + import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.PEER_DEPENDENCY; + + import java.io.IOException; + import java.io.StringReader; + import java.util.Collections; + import java.util.HashMap; + import java.util.List; + import java.util.Map; + import java.util.Properties; + import software.amazon.smithy.codegen.core.SymbolDependency; + import software.amazon.smithy.typescript.codegen.Dependency; + import software.amazon.smithy.utils.IoUtils; + import software.amazon.smithy.utils.SmithyInternalApi; + + /** + * This enum should define all TypeScript dependencies that are introduced by + * this package. + */ + @SmithyInternalApi + public enum AwsDependency implements Dependency { + + AWS_SDK_CORE(NORMAL_DEPENDENCY, "@aws-sdk/core"), + MIDDLEWARE_SIGNING(NORMAL_DEPENDENCY, "@aws-sdk/middleware-signing"), + MIDDLEWARE_TOKEN(NORMAL_DEPENDENCY, "@aws-sdk/middleware-token"), + CREDENTIAL_PROVIDER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/credential-provider-node"), + ACCEPT_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-api-gateway"), + S3_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3"), + ADD_EXPECT_CONTINUE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-expect-continue"), + GLACIER_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-glacier"), + MACHINELEARNING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-machinelearning"), + S3_CONTROL_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3-control"), + SSEC_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-ssec"), + RDS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-rds"), + LOCATION_CONSTRAINT(NORMAL_DEPENDENCY, "@aws-sdk/middleware-location-constraint"), + ROUTE53_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-route53"), + EC2_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-ec2"), + BUCKET_ENDPOINT_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-bucket-endpoint"), + MIDDLEWARE_HOST_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-host-header"), + SQS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sqs"), + BODY_CHECKSUM_GENERATOR_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-browser"), + BODY_CHECKSUM_GENERATOR_NODE(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-node"), + XML_BUILDER(NORMAL_DEPENDENCY, "@aws-sdk/xml-builder"), + UUID_GENERATOR(NORMAL_DEPENDENCY, "uuid", "^9.0.1"), + UUID_GENERATOR_TYPES(DEV_DEPENDENCY, "@types/uuid", "^9.0.4"), + MIDDLEWARE_EVENTSTREAM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-eventstream"), + AWS_SDK_EVENTSTREAM_HANDLER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-handler-node"), + TRANSCRIBE_STREAMING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-transcribe-streaming"), + STS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sts"), + STS_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sts"), + STS_CLIENT_PEER(PEER_DEPENDENCY, "@aws-sdk/client-sts"), + SSO_OIDC_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sso-oidc"), + MIDDLEWARE_LOGGER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-logger"), + MIDDLEWARE_USER_AGENT("dependencies", "@aws-sdk/middleware-user-agent"), + AWS_SDK_UTIL_USER_AGENT_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-browser"), + AWS_SDK_UTIL_USER_AGENT_NODE(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-node"), + MIDDLEWARE_ENDPOINT_DISCOVERY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-endpoint-discovery"), + AWS_CRYPTO_SHA1_BROWSER(NORMAL_DEPENDENCY, "@aws-crypto/sha1-browser", "5.2.0"), + SIGNATURE_V4_MULTIREGION(NORMAL_DEPENDENCY, "@aws-sdk/signature-v4-multi-region"), + RECURSION_DETECTION_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-recursion-detection"), + MIDDLEWARE_WEBSOCKET(NORMAL_DEPENDENCY, "@aws-sdk/middleware-websocket"), + + // Conditionally added when httpChecksum trait is present + @Deprecated MD5_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/md5-js", "3.374.0"), + @Deprecated STREAM_HASHER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/hash-stream-node", "3.374.0"), + @Deprecated STREAM_HASHER_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/hash-blob-browser", "3.374.0"), + FLEXIBLE_CHECKSUMS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-flexible-checksums"), + + // Conditionally added when auth trait is present + MIDDLEWARE_API_KEY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-api-key"), + + // Conditionally added when EndpointRuleSetTrait is present + UTIL_ENDPOINTS(NORMAL_DEPENDENCY, "@aws-sdk/util-endpoints"), + + // Conditionally added when @httpBearerAuth is used in an AWS service + TOKEN_PROVIDERS(NORMAL_DEPENDENCY, "@aws-sdk/token-providers"), + TYPES(NORMAL_DEPENDENCY, "@aws-sdk/types"), + REGION_CONFIG_RESOLVER(NORMAL_DEPENDENCY, "@aws-sdk/region-config-resolver"), + + CLIENT_DYNAMODB_PEER(PEER_DEPENDENCY, "@aws-sdk/client-dynamodb", "^3.0.0"), + UTIL_DYNAMODB(NORMAL_DEPENDENCY, "@aws-sdk/util-dynamodb", "*"); + + + public final String packageName; + public final String version; + public final SymbolDependency dependency; + + AwsDependency(String type, String name) { + this(type, name, SdkVersion.expectVersion(name)); + } + + AwsDependency(String type, String name, String version) { + this.dependency = SymbolDependency.builder().dependencyType(type).packageName(name).version(version).build(); + this.packageName = name; + this.version = version; + } + + + @Override + public List getDependencies() { + return Collections.singletonList(dependency); + } + + @Override + public String getPackageName() { + return this.packageName; + } + + private static final class SdkVersion { + private static final Map VERSIONS; + + static { + String rawProperties = + IoUtils.readUtf8Url(AwsDependency.class.getResource("sdkVersions.properties")).trim(); + Properties p = new Properties(); + try { + p.load(new StringReader(rawProperties)); + } catch (IOException e) { + throw new IllegalArgumentException("Could not read sdkVersions.properties"); + } + + final Map versions = new HashMap<>(p.size()); + p.forEach((k, v) -> { + if (versions.put(k.toString(), v.toString()) != null) { + throw new IllegalArgumentException("Multiple versions defined for " + k.toString()); + } + }); + VERSIONS = Collections.unmodifiableMap(versions); + } + + private static String expectVersion(String packageName) { + if (!VERSIONS.containsKey(packageName)) { + throw new IllegalArgumentException("No version for " + packageName); + } + return VERSIONS.get(packageName); + } + } + } \ No newline at end of file From f818dfe37cbd55ef02fd54764959a86c174c0b84 Mon Sep 17 00:00:00 2001 From: siddsriv Date: Fri, 4 Oct 2024 17:01:00 +0000 Subject: [PATCH 3/7] chore(codegen): ddb client with accIdepMode config resolver fixed imports --- clients/client-dynamodb/src/DynamoDBClient.ts | 14 +-- ...AddAccountIdEndpointModeRuntimeConfig.java | 87 ++++++++++++++----- 2 files changed, 71 insertions(+), 30 deletions(-) diff --git a/clients/client-dynamodb/src/DynamoDBClient.ts b/clients/client-dynamodb/src/DynamoDBClient.ts index 5a999d0f8030..1671eacbcf9a 100644 --- a/clients/client-dynamodb/src/DynamoDBClient.ts +++ b/clients/client-dynamodb/src/DynamoDBClient.ts @@ -466,11 +466,11 @@ export interface ClientDefaults extends Partial<__SmithyConfiguration<__HttpHand */ export type DynamoDBClientConfigType = Partial<__SmithyConfiguration<__HttpHandlerOptions>> & ClientDefaults & + AccountIdEndpointModeInputConfig & UserAgentInputConfig & RetryInputConfig & RegionInputConfig & HostHeaderInputConfig & - AccountIdEndpointModeInputConfig & EndpointInputConfig & HttpAuthSchemeInputConfig & EndpointDiscoveryInputConfig & @@ -488,11 +488,11 @@ export interface DynamoDBClientConfig extends DynamoDBClientConfigType {} export type DynamoDBClientResolvedConfigType = __SmithyResolvedConfiguration<__HttpHandlerOptions> & Required & RuntimeExtensionsConfig & + AccountIdEndpointModeResolvedConfig & UserAgentResolvedConfig & RetryResolvedConfig & RegionResolvedConfig & HostHeaderResolvedConfig & - AccountIdEndpointModeResolvedConfig & EndpointResolvedConfig & HttpAuthSchemeResolvedConfig & EndpointDiscoveryResolvedConfig & @@ -538,11 +538,11 @@ export class DynamoDBClient extends __Client< constructor(...[configuration]: __CheckOptionalClientConfig) { const _config_0 = __getRuntimeConfig(configuration || {}); const _config_1 = resolveClientEndpointParameters(_config_0); - const _config_2 = resolveUserAgentConfig(_config_1); - const _config_3 = resolveRetryConfig(_config_2); - const _config_4 = resolveRegionConfig(_config_3); - const _config_5 = resolveHostHeaderConfig(_config_4); - const _config_6 = resolveAccountIdEndpointModeConfig(_config_5); + const _config_2 = resolveAccountIdEndpointModeConfig(_config_1); + const _config_3 = resolveUserAgentConfig(_config_2); + const _config_4 = resolveRetryConfig(_config_3); + const _config_5 = resolveRegionConfig(_config_4); + const _config_6 = resolveHostHeaderConfig(_config_5); const _config_7 = resolveEndpointConfig(_config_6); const _config_8 = resolveHttpAuthSchemeConfig(_config_7); const _config_9 = resolveEndpointDiscoveryConfig(_config_8, { diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java index fcd413bacc0a..bde9ed4ad645 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java @@ -7,12 +7,15 @@ import static software.amazon.smithy.aws.typescript.codegen.AwsTraitsUtils.isAwsService; import static software.amazon.smithy.aws.typescript.codegen.AwsTraitsUtils.isSigV4Service; + import static software.amazon.smithy.typescript.codegen.integration.RuntimeClientPlugin.Convention.HAS_CONFIG; import java.util.HashMap; + import java.util.List; import java.util.Map; import java.util.Optional; import java.util.function.Consumer; import java.util.logging.Logger; + import software.amazon.smithy.codegen.core.Symbol; import software.amazon.smithy.codegen.core.SymbolProvider; import software.amazon.smithy.model.Model; import software.amazon.smithy.model.shapes.ServiceShape; @@ -22,6 +25,7 @@ import software.amazon.smithy.typescript.codegen.TypeScriptSettings; import software.amazon.smithy.typescript.codegen.TypeScriptWriter; import software.amazon.smithy.typescript.codegen.endpointsV2.RuleSetParameterFinder; + import software.amazon.smithy.typescript.codegen.integration.RuntimeClientPlugin; import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration; import software.amazon.smithy.utils.SmithyInternalApi; @@ -43,24 +47,20 @@ public void addConfigInterfaceFields( ) { if (isAwsService(settings, model)) { ServiceShape service = settings.getService(model); - Optional endpointRuleSetTrait = service.getTrait(EndpointRuleSetTrait.class); - if (endpointRuleSetTrait.isPresent()) { - RuleSetParameterFinder ruleSetParameterFinder = new RuleSetParameterFinder(service); - if (ruleSetParameterFinder.getBuiltInParams().containsKey("AccountIdEndpointMode")) { - writer.addDependency(AwsDependency.AWS_SDK_CORE); - // TODO: change to addImportSubmodule when available; smithy-ts, #pull-1280 - writer.addImport("AccountIdEndpointMode", "AccountIdEndpointMode", - "@aws-sdk/core/account-id-endpoint"); + if(hasAccountIdEndpointParam(service)) { + writer.addImportSubmodule("AccountIdEndpointMode", null, + AwsDependency.AWS_SDK_CORE, "/account-id-endpoint"); writer.writeDocs("Defines if the AWS AccountId will be used for endpoint routing."); - writer.write("accountIdEndpointMode?: AccountIdEndpointMode | " - + "__Provider;\n"); - } + writer.write("accountIdEndpointMode?: AccountIdEndpointMode | " + + "__Provider;\n"); + writer.addImportSubmodule("resolveAccountIdEndpointModeConfig", null, + AwsDependency.AWS_SDK_CORE, "/account-id-endpoint"); } } } @Override - public Map> getRuntimeConfigWriters( + public Map> getRuntimeConfigWriters( TypeScriptSettings settings, Model model, SymbolProvider symbolProvider, @@ -76,23 +76,19 @@ public Map> getRuntimeConfigWriters( switch (target) { case BROWSER: runtimeConfigs.put("accountIdEndpointMode", writer -> { - writer.addDependency(AwsDependency.AWS_SDK_CORE); - // TODO: change to addImportSubmodule when available - writer.addImport("DEFAULT_ACCOUNT_ID_ENDPOINT_MODE", "DEFAULT_ACCOUNT_ID_ENDPOINT_MODE", - "@aws-sdk/core/account-id-endpoint"); + writer.addImportSubmodule("DEFAULT_ACCOUNT_ID_ENDPOINT_MODE", null, + AwsDependency.AWS_SDK_CORE, + "/account-id-endpoint"); writer.write("(() => Promise.resolve(DEFAULT_ACCOUNT_ID_ENDPOINT_MODE))"); }); break; case NODE: runtimeConfigs.put("accountIdEndpointMode", writer -> { - writer.addDependency(TypeScriptDependency.NODE_CONFIG_PROVIDER); writer.addImport("loadConfig", "loadNodeConfig", TypeScriptDependency.NODE_CONFIG_PROVIDER); - writer.addDependency(AwsDependency.AWS_SDK_CORE); - // TODO: change to addImportSubmodule when available - writer.addImport("NODE_ACCOUNT_ID_ENDPOINT_MODE_CONFIG_OPTIONS", - "NODE_ACCOUNT_ID_ENDPOINT_MODE_CONFIG_OPTIONS", - "@aws-sdk/core/account-id-endpoint"); + writer.addImportSubmodule("NODE_ACCOUNT_ID_ENDPOINT_MODE_CONFIG_OPTIONS", + null, AwsDependency.AWS_SDK_CORE, + "/account-id-endpoint"); writer.write( "loadNodeConfig(NODE_ACCOUNT_ID_ENDPOINT_MODE_CONFIG_OPTIONS)"); }); @@ -106,4 +102,49 @@ public Map> getRuntimeConfigWriters( } return runtimeConfigs; } - } + + // AccountIdEndpointMode resolver + @Override + public List getClientPlugins() { + return List.of( + RuntimeClientPlugin.builder() + .inputConfig( + Symbol.builder() + .namespace( + AwsDependency.AWS_SDK_CORE.getPackageName() + "/account-id-endpoint", "/" + ) + .name("AccountIdEndpointModeInputConfig") + .build() + ) + .resolvedConfig( + Symbol.builder() + .namespace( + AwsDependency.AWS_SDK_CORE.getPackageName() + "/account-id-endpoint", "/" + ) + .name("AccountIdEndpointModeResolvedConfig") + .build() + ) + .resolveFunction( + Symbol.builder() + .namespace( + AwsDependency.AWS_SDK_CORE.getPackageName() + "/account-id-endpoint", "/" + ) + .name("resolveAccountIdEndpointModeConfig") + .build() + ) + .servicePredicate((m, s) -> hasAccountIdEndpointParam(s)) + .build() + ); + } + + private boolean hasAccountIdEndpointParam(ServiceShape service) { + Optional endpointRuleSetTrait = service.getTrait(EndpointRuleSetTrait.class); + if (endpointRuleSetTrait.isPresent()) { + RuleSetParameterFinder ruleSetParameterFinder = new RuleSetParameterFinder(service); + if (ruleSetParameterFinder.getBuiltInParams().containsKey("AccountIdEndpointMode")) { + return true; + } + } + return false; + } +} From f14903e4009d58c9eb9d0bd56e0276fa8bdb544a Mon Sep 17 00:00:00 2001 From: siddsriv Date: Fri, 4 Oct 2024 17:08:21 +0000 Subject: [PATCH 4/7] chore(codegen): formatting fix --- ...AddAccountIdEndpointModeRuntimeConfig.java | 4 +- .../aws/typescript/codegen/AwsDependency.java | 310 +++++++++--------- 2 files changed, 157 insertions(+), 157 deletions(-) diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java index bde9ed4ad645..1b38571ba8ff 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java @@ -60,7 +60,7 @@ public void addConfigInterfaceFields( } @Override - public Map> getRuntimeConfigWriters( + public Map> getRuntimeConfigWriters( TypeScriptSettings settings, Model model, SymbolProvider symbolProvider, @@ -137,7 +137,7 @@ public List getClientPlugins() { ); } - private boolean hasAccountIdEndpointParam(ServiceShape service) { + private boolean hasAccountIdEndpointParam(ServiceShape service) { Optional endpointRuleSetTrait = service.getTrait(EndpointRuleSetTrait.class); if (endpointRuleSetTrait.isPresent()) { RuleSetParameterFinder ruleSetParameterFinder = new RuleSetParameterFinder(service); diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java index 535ecb81d370..631341add81b 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java @@ -1,156 +1,156 @@ /* - * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - - package software.amazon.smithy.aws.typescript.codegen; - - import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.DEV_DEPENDENCY; - import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.NORMAL_DEPENDENCY; - import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.PEER_DEPENDENCY; - - import java.io.IOException; - import java.io.StringReader; - import java.util.Collections; - import java.util.HashMap; - import java.util.List; - import java.util.Map; - import java.util.Properties; - import software.amazon.smithy.codegen.core.SymbolDependency; - import software.amazon.smithy.typescript.codegen.Dependency; - import software.amazon.smithy.utils.IoUtils; - import software.amazon.smithy.utils.SmithyInternalApi; - - /** - * This enum should define all TypeScript dependencies that are introduced by - * this package. - */ - @SmithyInternalApi - public enum AwsDependency implements Dependency { - - AWS_SDK_CORE(NORMAL_DEPENDENCY, "@aws-sdk/core"), - MIDDLEWARE_SIGNING(NORMAL_DEPENDENCY, "@aws-sdk/middleware-signing"), - MIDDLEWARE_TOKEN(NORMAL_DEPENDENCY, "@aws-sdk/middleware-token"), - CREDENTIAL_PROVIDER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/credential-provider-node"), - ACCEPT_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-api-gateway"), - S3_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3"), - ADD_EXPECT_CONTINUE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-expect-continue"), - GLACIER_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-glacier"), - MACHINELEARNING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-machinelearning"), - S3_CONTROL_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3-control"), - SSEC_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-ssec"), - RDS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-rds"), - LOCATION_CONSTRAINT(NORMAL_DEPENDENCY, "@aws-sdk/middleware-location-constraint"), - ROUTE53_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-route53"), - EC2_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-ec2"), - BUCKET_ENDPOINT_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-bucket-endpoint"), - MIDDLEWARE_HOST_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-host-header"), - SQS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sqs"), - BODY_CHECKSUM_GENERATOR_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-browser"), - BODY_CHECKSUM_GENERATOR_NODE(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-node"), - XML_BUILDER(NORMAL_DEPENDENCY, "@aws-sdk/xml-builder"), - UUID_GENERATOR(NORMAL_DEPENDENCY, "uuid", "^9.0.1"), - UUID_GENERATOR_TYPES(DEV_DEPENDENCY, "@types/uuid", "^9.0.4"), - MIDDLEWARE_EVENTSTREAM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-eventstream"), - AWS_SDK_EVENTSTREAM_HANDLER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-handler-node"), - TRANSCRIBE_STREAMING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-transcribe-streaming"), - STS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sts"), - STS_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sts"), - STS_CLIENT_PEER(PEER_DEPENDENCY, "@aws-sdk/client-sts"), - SSO_OIDC_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sso-oidc"), - MIDDLEWARE_LOGGER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-logger"), - MIDDLEWARE_USER_AGENT("dependencies", "@aws-sdk/middleware-user-agent"), - AWS_SDK_UTIL_USER_AGENT_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-browser"), - AWS_SDK_UTIL_USER_AGENT_NODE(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-node"), - MIDDLEWARE_ENDPOINT_DISCOVERY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-endpoint-discovery"), - AWS_CRYPTO_SHA1_BROWSER(NORMAL_DEPENDENCY, "@aws-crypto/sha1-browser", "5.2.0"), - SIGNATURE_V4_MULTIREGION(NORMAL_DEPENDENCY, "@aws-sdk/signature-v4-multi-region"), - RECURSION_DETECTION_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-recursion-detection"), - MIDDLEWARE_WEBSOCKET(NORMAL_DEPENDENCY, "@aws-sdk/middleware-websocket"), - - // Conditionally added when httpChecksum trait is present - @Deprecated MD5_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/md5-js", "3.374.0"), - @Deprecated STREAM_HASHER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/hash-stream-node", "3.374.0"), - @Deprecated STREAM_HASHER_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/hash-blob-browser", "3.374.0"), - FLEXIBLE_CHECKSUMS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-flexible-checksums"), - - // Conditionally added when auth trait is present - MIDDLEWARE_API_KEY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-api-key"), - - // Conditionally added when EndpointRuleSetTrait is present - UTIL_ENDPOINTS(NORMAL_DEPENDENCY, "@aws-sdk/util-endpoints"), - - // Conditionally added when @httpBearerAuth is used in an AWS service - TOKEN_PROVIDERS(NORMAL_DEPENDENCY, "@aws-sdk/token-providers"), - TYPES(NORMAL_DEPENDENCY, "@aws-sdk/types"), - REGION_CONFIG_RESOLVER(NORMAL_DEPENDENCY, "@aws-sdk/region-config-resolver"), - - CLIENT_DYNAMODB_PEER(PEER_DEPENDENCY, "@aws-sdk/client-dynamodb", "^3.0.0"), - UTIL_DYNAMODB(NORMAL_DEPENDENCY, "@aws-sdk/util-dynamodb", "*"); - - - public final String packageName; - public final String version; - public final SymbolDependency dependency; - - AwsDependency(String type, String name) { - this(type, name, SdkVersion.expectVersion(name)); - } - - AwsDependency(String type, String name, String version) { - this.dependency = SymbolDependency.builder().dependencyType(type).packageName(name).version(version).build(); - this.packageName = name; - this.version = version; - } - - - @Override - public List getDependencies() { - return Collections.singletonList(dependency); - } - - @Override - public String getPackageName() { - return this.packageName; - } - - private static final class SdkVersion { - private static final Map VERSIONS; - - static { - String rawProperties = - IoUtils.readUtf8Url(AwsDependency.class.getResource("sdkVersions.properties")).trim(); - Properties p = new Properties(); - try { - p.load(new StringReader(rawProperties)); - } catch (IOException e) { - throw new IllegalArgumentException("Could not read sdkVersions.properties"); - } - - final Map versions = new HashMap<>(p.size()); - p.forEach((k, v) -> { - if (versions.put(k.toString(), v.toString()) != null) { - throw new IllegalArgumentException("Multiple versions defined for " + k.toString()); - } - }); - VERSIONS = Collections.unmodifiableMap(versions); - } - - private static String expectVersion(String packageName) { - if (!VERSIONS.containsKey(packageName)) { - throw new IllegalArgumentException("No version for " + packageName); - } - return VERSIONS.get(packageName); - } - } - } \ No newline at end of file +* Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"). +* You may not use this file except in compliance with the License. +* A copy of the License is located at +* +* http://aws.amazon.com/apache2.0 +* +* or in the "license" file accompanying this file. This file is distributed +* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +* express or implied. See the License for the specific language governing +* permissions and limitations under the License. +*/ + +package software.amazon.smithy.aws.typescript.codegen; + +import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.DEV_DEPENDENCY; +import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.NORMAL_DEPENDENCY; +import static software.amazon.smithy.typescript.codegen.TypeScriptDependency.PEER_DEPENDENCY; + +import java.io.IOException; +import java.io.StringReader; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import software.amazon.smithy.codegen.core.SymbolDependency; +import software.amazon.smithy.typescript.codegen.Dependency; +import software.amazon.smithy.utils.IoUtils; +import software.amazon.smithy.utils.SmithyInternalApi; + +/** + * This enum should define all TypeScript dependencies that are introduced by +* this package. +*/ +@SmithyInternalApi +public enum AwsDependency implements Dependency { + +AWS_SDK_CORE(NORMAL_DEPENDENCY, "@aws-sdk/core"), +MIDDLEWARE_SIGNING(NORMAL_DEPENDENCY, "@aws-sdk/middleware-signing"), +MIDDLEWARE_TOKEN(NORMAL_DEPENDENCY, "@aws-sdk/middleware-token"), +CREDENTIAL_PROVIDER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/credential-provider-node"), +ACCEPT_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-api-gateway"), +S3_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3"), +ADD_EXPECT_CONTINUE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-expect-continue"), +GLACIER_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-glacier"), +MACHINELEARNING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-machinelearning"), +S3_CONTROL_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3-control"), +SSEC_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-ssec"), +RDS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-rds"), +LOCATION_CONSTRAINT(NORMAL_DEPENDENCY, "@aws-sdk/middleware-location-constraint"), +ROUTE53_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-route53"), +EC2_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-ec2"), +BUCKET_ENDPOINT_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-bucket-endpoint"), +MIDDLEWARE_HOST_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-host-header"), +SQS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sqs"), +BODY_CHECKSUM_GENERATOR_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-browser"), +BODY_CHECKSUM_GENERATOR_NODE(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-node"), +XML_BUILDER(NORMAL_DEPENDENCY, "@aws-sdk/xml-builder"), +UUID_GENERATOR(NORMAL_DEPENDENCY, "uuid", "^9.0.1"), +UUID_GENERATOR_TYPES(DEV_DEPENDENCY, "@types/uuid", "^9.0.4"), +MIDDLEWARE_EVENTSTREAM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-eventstream"), +AWS_SDK_EVENTSTREAM_HANDLER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-handler-node"), +TRANSCRIBE_STREAMING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-transcribe-streaming"), +STS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sts"), +STS_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sts"), +STS_CLIENT_PEER(PEER_DEPENDENCY, "@aws-sdk/client-sts"), +SSO_OIDC_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sso-oidc"), +MIDDLEWARE_LOGGER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-logger"), +MIDDLEWARE_USER_AGENT("dependencies", "@aws-sdk/middleware-user-agent"), +AWS_SDK_UTIL_USER_AGENT_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-browser"), +AWS_SDK_UTIL_USER_AGENT_NODE(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-node"), +MIDDLEWARE_ENDPOINT_DISCOVERY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-endpoint-discovery"), +AWS_CRYPTO_SHA1_BROWSER(NORMAL_DEPENDENCY, "@aws-crypto/sha1-browser", "5.2.0"), +SIGNATURE_V4_MULTIREGION(NORMAL_DEPENDENCY, "@aws-sdk/signature-v4-multi-region"), +RECURSION_DETECTION_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-recursion-detection"), +MIDDLEWARE_WEBSOCKET(NORMAL_DEPENDENCY, "@aws-sdk/middleware-websocket"), + +// Conditionally added when httpChecksum trait is present +@Deprecated MD5_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/md5-js", "3.374.0"), +@Deprecated STREAM_HASHER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/hash-stream-node", "3.374.0"), +@Deprecated STREAM_HASHER_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/hash-blob-browser", "3.374.0"), +FLEXIBLE_CHECKSUMS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-flexible-checksums"), + +// Conditionally added when auth trait is present +MIDDLEWARE_API_KEY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-api-key"), + +// Conditionally added when EndpointRuleSetTrait is present +UTIL_ENDPOINTS(NORMAL_DEPENDENCY, "@aws-sdk/util-endpoints"), + +// Conditionally added when @httpBearerAuth is used in an AWS service +TOKEN_PROVIDERS(NORMAL_DEPENDENCY, "@aws-sdk/token-providers"), +TYPES(NORMAL_DEPENDENCY, "@aws-sdk/types"), +REGION_CONFIG_RESOLVER(NORMAL_DEPENDENCY, "@aws-sdk/region-config-resolver"), + +CLIENT_DYNAMODB_PEER(PEER_DEPENDENCY, "@aws-sdk/client-dynamodb", "^3.0.0"), +UTIL_DYNAMODB(NORMAL_DEPENDENCY, "@aws-sdk/util-dynamodb", "*"); + + +public final String packageName; +public final String version; +public final SymbolDependency dependency; + +AwsDependency(String type, String name) { + this(type, name, SdkVersion.expectVersion(name)); +} + +AwsDependency(String type, String name, String version) { + this.dependency = SymbolDependency.builder().dependencyType(type).packageName(name).version(version).build(); + this.packageName = name; + this.version = version; +} + + +@Override +public List getDependencies() { + return Collections.singletonList(dependency); +} + +@Override +public String getPackageName() { + return this.packageName; +} + +private static final class SdkVersion { + private static final Map VERSIONS; + + static { + String rawProperties = + IoUtils.readUtf8Url(AwsDependency.class.getResource("sdkVersions.properties")).trim(); + Properties p = new Properties(); + try { + p.load(new StringReader(rawProperties)); + } catch (IOException e) { + throw new IllegalArgumentException("Could not read sdkVersions.properties"); + } + + final Map versions = new HashMap<>(p.size()); + p.forEach((k, v) -> { + if (versions.put(k.toString(), v.toString()) != null) { + throw new IllegalArgumentException("Multiple versions defined for " + k.toString()); + } + }); + VERSIONS = Collections.unmodifiableMap(versions); + } + + private static String expectVersion(String packageName) { + if (!VERSIONS.containsKey(packageName)) { + throw new IllegalArgumentException("No version for " + packageName); + } + return VERSIONS.get(packageName); + } +} +} \ No newline at end of file From f35c39176116ebce62008c08033abe9f0f46da0d Mon Sep 17 00:00:00 2001 From: siddsriv Date: Fri, 4 Oct 2024 17:13:00 +0000 Subject: [PATCH 5/7] chore(codegen): formatting fix --- ...AddAccountIdEndpointModeRuntimeConfig.java | 269 +++++++++--------- .../aws/typescript/codegen/AwsDependency.java | 240 ++++++++-------- 2 files changed, 254 insertions(+), 255 deletions(-) diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java index 1b38571ba8ff..7a067984c2c6 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java @@ -1,150 +1,149 @@ /* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 - */ + */ - package software.amazon.smithy.aws.typescript.codegen; +package software.amazon.smithy.aws.typescript.codegen; - import static software.amazon.smithy.aws.typescript.codegen.AwsTraitsUtils.isAwsService; - import static software.amazon.smithy.aws.typescript.codegen.AwsTraitsUtils.isSigV4Service; - import static software.amazon.smithy.typescript.codegen.integration.RuntimeClientPlugin.Convention.HAS_CONFIG; +import static software.amazon.smithy.aws.typescript.codegen.AwsTraitsUtils.isAwsService; +import static software.amazon.smithy.aws.typescript.codegen.AwsTraitsUtils.isSigV4Service; - import java.util.HashMap; - import java.util.List; - import java.util.Map; - import java.util.Optional; - import java.util.function.Consumer; - import java.util.logging.Logger; - import software.amazon.smithy.codegen.core.Symbol; - import software.amazon.smithy.codegen.core.SymbolProvider; - import software.amazon.smithy.model.Model; - import software.amazon.smithy.model.shapes.ServiceShape; - import software.amazon.smithy.rulesengine.traits.EndpointRuleSetTrait; - import software.amazon.smithy.typescript.codegen.LanguageTarget; - import software.amazon.smithy.typescript.codegen.TypeScriptDependency; - import software.amazon.smithy.typescript.codegen.TypeScriptSettings; - import software.amazon.smithy.typescript.codegen.TypeScriptWriter; - import software.amazon.smithy.typescript.codegen.endpointsV2.RuleSetParameterFinder; - import software.amazon.smithy.typescript.codegen.integration.RuntimeClientPlugin; - import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration; - import software.amazon.smithy.utils.SmithyInternalApi; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Consumer; +import java.util.logging.Logger; +import software.amazon.smithy.codegen.core.Symbol; +import software.amazon.smithy.codegen.core.SymbolProvider; +import software.amazon.smithy.model.Model; +import software.amazon.smithy.model.shapes.ServiceShape; +import software.amazon.smithy.rulesengine.traits.EndpointRuleSetTrait; +import software.amazon.smithy.typescript.codegen.LanguageTarget; +import software.amazon.smithy.typescript.codegen.TypeScriptDependency; +import software.amazon.smithy.typescript.codegen.TypeScriptSettings; +import software.amazon.smithy.typescript.codegen.TypeScriptWriter; +import software.amazon.smithy.typescript.codegen.endpointsV2.RuleSetParameterFinder; +import software.amazon.smithy.typescript.codegen.integration.RuntimeClientPlugin; +import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration; +import software.amazon.smithy.utils.SmithyInternalApi; - /** - * Generates accountIdEndpointMode configuration field for service clients - * that have the AccountIdEndpointMode built-in param in the ruleset. - */ - @SmithyInternalApi - public final class AddAccountIdEndpointModeRuntimeConfig implements TypeScriptIntegration { +/** + * Generates accountIdEndpointMode configuration field for service clients + * that have the AccountIdEndpointMode built-in param in the ruleset. + */ +@SmithyInternalApi +public final class AddAccountIdEndpointModeRuntimeConfig implements TypeScriptIntegration { - private static final Logger LOGGER = Logger.getLogger(AddAccountIdEndpointModeRuntimeConfig.class.getName()); + private static final Logger LOGGER = Logger.getLogger(AddAccountIdEndpointModeRuntimeConfig.class.getName()); - @Override - public void addConfigInterfaceFields( - TypeScriptSettings settings, - Model model, - SymbolProvider symbolProvider, - TypeScriptWriter writer - ) { - if (isAwsService(settings, model)) { - ServiceShape service = settings.getService(model); - if(hasAccountIdEndpointParam(service)) { - writer.addImportSubmodule("AccountIdEndpointMode", null, - AwsDependency.AWS_SDK_CORE, "/account-id-endpoint"); - writer.writeDocs("Defines if the AWS AccountId will be used for endpoint routing."); - writer.write("accountIdEndpointMode?: AccountIdEndpointMode | " + - "__Provider;\n"); - writer.addImportSubmodule("resolveAccountIdEndpointModeConfig", null, - AwsDependency.AWS_SDK_CORE, "/account-id-endpoint"); - } - } - } + @Override + public void addConfigInterfaceFields( + TypeScriptSettings settings, + Model model, + SymbolProvider symbolProvider, + TypeScriptWriter writer + ) { + if (isAwsService(settings, model)) { + ServiceShape service = settings.getService(model); + if(hasAccountIdEndpointParam(service)) { + writer.addImportSubmodule("AccountIdEndpointMode", null, + AwsDependency.AWS_SDK_CORE, "/account-id-endpoint"); + writer.writeDocs("Defines if the AWS AccountId will be used for endpoint routing."); + writer.write("accountIdEndpointMode?: AccountIdEndpointMode | " + + "__Provider;\n"); + writer.addImportSubmodule("resolveAccountIdEndpointModeConfig", null, + AwsDependency.AWS_SDK_CORE, "/account-id-endpoint"); + } + } + } - @Override - public Map> getRuntimeConfigWriters( - TypeScriptSettings settings, - Model model, - SymbolProvider symbolProvider, - LanguageTarget target - ) { - ServiceShape service = settings.getService(model); - Map> runtimeConfigs = new HashMap<>(); - if (isAwsService(settings, model) || isSigV4Service(settings, model)) { - Optional endpointRuleSetTrait = service.getTrait(EndpointRuleSetTrait.class); - if (endpointRuleSetTrait.isPresent()) { - RuleSetParameterFinder ruleSetParameterFinder = new RuleSetParameterFinder(service); - if (ruleSetParameterFinder.getBuiltInParams().containsKey("AccountIdEndpointMode")) { - switch (target) { - case BROWSER: - runtimeConfigs.put("accountIdEndpointMode", writer -> { - writer.addImportSubmodule("DEFAULT_ACCOUNT_ID_ENDPOINT_MODE", null, - AwsDependency.AWS_SDK_CORE, - "/account-id-endpoint"); - writer.write("(() => Promise.resolve(DEFAULT_ACCOUNT_ID_ENDPOINT_MODE))"); - }); - break; - case NODE: - runtimeConfigs.put("accountIdEndpointMode", writer -> { - writer.addImport("loadConfig", "loadNodeConfig", - TypeScriptDependency.NODE_CONFIG_PROVIDER); - writer.addImportSubmodule("NODE_ACCOUNT_ID_ENDPOINT_MODE_CONFIG_OPTIONS", - null, AwsDependency.AWS_SDK_CORE, - "/account-id-endpoint"); - writer.write( - "loadNodeConfig(NODE_ACCOUNT_ID_ENDPOINT_MODE_CONFIG_OPTIONS)"); - }); - break; - default: - LOGGER.warning("AccountIdEndpointMode config not supported for target: " + target); - break; - } - } - } - } - return runtimeConfigs; - } + @Override + public Map> getRuntimeConfigWriters( + TypeScriptSettings settings, + Model model, + SymbolProvider symbolProvider, + LanguageTarget target + ) { + ServiceShape service = settings.getService(model); + Map> runtimeConfigs = new HashMap<>(); + if (isAwsService(settings, model) || isSigV4Service(settings, model)) { + Optional endpointRuleSetTrait = service.getTrait(EndpointRuleSetTrait.class); + if (endpointRuleSetTrait.isPresent()) { + RuleSetParameterFinder ruleSetParameterFinder = new RuleSetParameterFinder(service); + if (ruleSetParameterFinder.getBuiltInParams().containsKey("AccountIdEndpointMode")) { + switch (target) { + case BROWSER: + runtimeConfigs.put("accountIdEndpointMode", writer -> { + writer.addImportSubmodule("DEFAULT_ACCOUNT_ID_ENDPOINT_MODE", null, + AwsDependency.AWS_SDK_CORE, + "/account-id-endpoint"); + writer.write("(() => Promise.resolve(DEFAULT_ACCOUNT_ID_ENDPOINT_MODE))"); + }); + break; + case NODE: + runtimeConfigs.put("accountIdEndpointMode", writer -> { + writer.addImport("loadConfig", "loadNodeConfig", + TypeScriptDependency.NODE_CONFIG_PROVIDER); + writer.addImportSubmodule("NODE_ACCOUNT_ID_ENDPOINT_MODE_CONFIG_OPTIONS", + null, AwsDependency.AWS_SDK_CORE, + "/account-id-endpoint"); + writer.write( + "loadNodeConfig(NODE_ACCOUNT_ID_ENDPOINT_MODE_CONFIG_OPTIONS)"); + }); + break; + default: + LOGGER.warning("AccountIdEndpointMode config not supported for target: " + target); + break; + } + } + } + } + return runtimeConfigs; + } // AccountIdEndpointMode resolver - @Override - public List getClientPlugins() { - return List.of( - RuntimeClientPlugin.builder() - .inputConfig( - Symbol.builder() - .namespace( - AwsDependency.AWS_SDK_CORE.getPackageName() + "/account-id-endpoint", "/" - ) - .name("AccountIdEndpointModeInputConfig") - .build() - ) - .resolvedConfig( - Symbol.builder() - .namespace( - AwsDependency.AWS_SDK_CORE.getPackageName() + "/account-id-endpoint", "/" - ) - .name("AccountIdEndpointModeResolvedConfig") - .build() - ) - .resolveFunction( - Symbol.builder() - .namespace( - AwsDependency.AWS_SDK_CORE.getPackageName() + "/account-id-endpoint", "/" - ) - .name("resolveAccountIdEndpointModeConfig") - .build() - ) - .servicePredicate((m, s) -> hasAccountIdEndpointParam(s)) - .build() - ); - } + @Override + public List getClientPlugins() { + return List.of( + RuntimeClientPlugin.builder() + .inputConfig( + Symbol.builder() + .namespace( + AwsDependency.AWS_SDK_CORE.getPackageName() + "/account-id-endpoint", "/" + ) + .name("AccountIdEndpointModeInputConfig") + .build() + ) + .resolvedConfig( + Symbol.builder() + .namespace( + AwsDependency.AWS_SDK_CORE.getPackageName() + "/account-id-endpoint", "/" + ) + .name("AccountIdEndpointModeResolvedConfig") + .build() + ) + .resolveFunction( + Symbol.builder() + .namespace( + AwsDependency.AWS_SDK_CORE.getPackageName() + "/account-id-endpoint", "/" + ) + .name("resolveAccountIdEndpointModeConfig") + .build() + ) + .servicePredicate((m, s) -> hasAccountIdEndpointParam(s)) + .build() + ); + } - private boolean hasAccountIdEndpointParam(ServiceShape service) { - Optional endpointRuleSetTrait = service.getTrait(EndpointRuleSetTrait.class); - if (endpointRuleSetTrait.isPresent()) { - RuleSetParameterFinder ruleSetParameterFinder = new RuleSetParameterFinder(service); - if (ruleSetParameterFinder.getBuiltInParams().containsKey("AccountIdEndpointMode")) { - return true; - } + private boolean hasAccountIdEndpointParam(ServiceShape service) { + Optional endpointRuleSetTrait = service.getTrait(EndpointRuleSetTrait.class); + if (endpointRuleSetTrait.isPresent()) { + RuleSetParameterFinder ruleSetParameterFinder = new RuleSetParameterFinder(service); + if (ruleSetParameterFinder.getBuiltInParams().containsKey("AccountIdEndpointMode")) { + return true; } - return false; - } + } + return false; + } } diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java index 631341add81b..b3c5fd61aa14 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java @@ -1,17 +1,17 @@ /* -* Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. -* -* Licensed under the Apache License, Version 2.0 (the "License"). -* You may not use this file except in compliance with the License. -* A copy of the License is located at -* -* http://aws.amazon.com/apache2.0 -* -* or in the "license" file accompanying this file. This file is distributed -* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. See the License for the specific language governing -* permissions and limitations under the License. -*/ + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ package software.amazon.smithy.aws.typescript.codegen; @@ -33,124 +33,124 @@ /** * This enum should define all TypeScript dependencies that are introduced by -* this package. -*/ + * this package. + */ @SmithyInternalApi public enum AwsDependency implements Dependency { -AWS_SDK_CORE(NORMAL_DEPENDENCY, "@aws-sdk/core"), -MIDDLEWARE_SIGNING(NORMAL_DEPENDENCY, "@aws-sdk/middleware-signing"), -MIDDLEWARE_TOKEN(NORMAL_DEPENDENCY, "@aws-sdk/middleware-token"), -CREDENTIAL_PROVIDER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/credential-provider-node"), -ACCEPT_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-api-gateway"), -S3_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3"), -ADD_EXPECT_CONTINUE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-expect-continue"), -GLACIER_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-glacier"), -MACHINELEARNING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-machinelearning"), -S3_CONTROL_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3-control"), -SSEC_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-ssec"), -RDS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-rds"), -LOCATION_CONSTRAINT(NORMAL_DEPENDENCY, "@aws-sdk/middleware-location-constraint"), -ROUTE53_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-route53"), -EC2_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-ec2"), -BUCKET_ENDPOINT_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-bucket-endpoint"), -MIDDLEWARE_HOST_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-host-header"), -SQS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sqs"), -BODY_CHECKSUM_GENERATOR_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-browser"), -BODY_CHECKSUM_GENERATOR_NODE(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-node"), -XML_BUILDER(NORMAL_DEPENDENCY, "@aws-sdk/xml-builder"), -UUID_GENERATOR(NORMAL_DEPENDENCY, "uuid", "^9.0.1"), -UUID_GENERATOR_TYPES(DEV_DEPENDENCY, "@types/uuid", "^9.0.4"), -MIDDLEWARE_EVENTSTREAM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-eventstream"), -AWS_SDK_EVENTSTREAM_HANDLER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-handler-node"), -TRANSCRIBE_STREAMING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-transcribe-streaming"), -STS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sts"), -STS_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sts"), -STS_CLIENT_PEER(PEER_DEPENDENCY, "@aws-sdk/client-sts"), -SSO_OIDC_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sso-oidc"), -MIDDLEWARE_LOGGER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-logger"), -MIDDLEWARE_USER_AGENT("dependencies", "@aws-sdk/middleware-user-agent"), -AWS_SDK_UTIL_USER_AGENT_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-browser"), -AWS_SDK_UTIL_USER_AGENT_NODE(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-node"), -MIDDLEWARE_ENDPOINT_DISCOVERY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-endpoint-discovery"), -AWS_CRYPTO_SHA1_BROWSER(NORMAL_DEPENDENCY, "@aws-crypto/sha1-browser", "5.2.0"), -SIGNATURE_V4_MULTIREGION(NORMAL_DEPENDENCY, "@aws-sdk/signature-v4-multi-region"), -RECURSION_DETECTION_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-recursion-detection"), -MIDDLEWARE_WEBSOCKET(NORMAL_DEPENDENCY, "@aws-sdk/middleware-websocket"), - -// Conditionally added when httpChecksum trait is present -@Deprecated MD5_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/md5-js", "3.374.0"), -@Deprecated STREAM_HASHER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/hash-stream-node", "3.374.0"), -@Deprecated STREAM_HASHER_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/hash-blob-browser", "3.374.0"), -FLEXIBLE_CHECKSUMS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-flexible-checksums"), - -// Conditionally added when auth trait is present -MIDDLEWARE_API_KEY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-api-key"), - -// Conditionally added when EndpointRuleSetTrait is present -UTIL_ENDPOINTS(NORMAL_DEPENDENCY, "@aws-sdk/util-endpoints"), - -// Conditionally added when @httpBearerAuth is used in an AWS service -TOKEN_PROVIDERS(NORMAL_DEPENDENCY, "@aws-sdk/token-providers"), -TYPES(NORMAL_DEPENDENCY, "@aws-sdk/types"), -REGION_CONFIG_RESOLVER(NORMAL_DEPENDENCY, "@aws-sdk/region-config-resolver"), - -CLIENT_DYNAMODB_PEER(PEER_DEPENDENCY, "@aws-sdk/client-dynamodb", "^3.0.0"), -UTIL_DYNAMODB(NORMAL_DEPENDENCY, "@aws-sdk/util-dynamodb", "*"); - - -public final String packageName; -public final String version; -public final SymbolDependency dependency; - -AwsDependency(String type, String name) { - this(type, name, SdkVersion.expectVersion(name)); -} + AWS_SDK_CORE(NORMAL_DEPENDENCY, "@aws-sdk/core"), + MIDDLEWARE_SIGNING(NORMAL_DEPENDENCY, "@aws-sdk/middleware-signing"), + MIDDLEWARE_TOKEN(NORMAL_DEPENDENCY, "@aws-sdk/middleware-token"), + CREDENTIAL_PROVIDER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/credential-provider-node"), + ACCEPT_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-api-gateway"), + S3_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3"), + ADD_EXPECT_CONTINUE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-expect-continue"), + GLACIER_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-glacier"), + MACHINELEARNING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-machinelearning"), + S3_CONTROL_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-s3-control"), + SSEC_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-ssec"), + RDS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-rds"), + LOCATION_CONSTRAINT(NORMAL_DEPENDENCY, "@aws-sdk/middleware-location-constraint"), + ROUTE53_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-route53"), + EC2_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-ec2"), + BUCKET_ENDPOINT_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-bucket-endpoint"), + MIDDLEWARE_HOST_HEADER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-host-header"), + SQS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sqs"), + BODY_CHECKSUM_GENERATOR_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-browser"), + BODY_CHECKSUM_GENERATOR_NODE(NORMAL_DEPENDENCY, "@aws-sdk/body-checksum-node"), + XML_BUILDER(NORMAL_DEPENDENCY, "@aws-sdk/xml-builder"), + UUID_GENERATOR(NORMAL_DEPENDENCY, "uuid", "^9.0.1"), + UUID_GENERATOR_TYPES(DEV_DEPENDENCY, "@types/uuid", "^9.0.4"), + MIDDLEWARE_EVENTSTREAM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-eventstream"), + AWS_SDK_EVENTSTREAM_HANDLER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-handler-node"), + TRANSCRIBE_STREAMING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-transcribe-streaming"), + STS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sts"), + STS_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sts"), + STS_CLIENT_PEER(PEER_DEPENDENCY, "@aws-sdk/client-sts"), + SSO_OIDC_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sso-oidc"), + MIDDLEWARE_LOGGER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-logger"), + MIDDLEWARE_USER_AGENT("dependencies", "@aws-sdk/middleware-user-agent"), + AWS_SDK_UTIL_USER_AGENT_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-browser"), + AWS_SDK_UTIL_USER_AGENT_NODE(NORMAL_DEPENDENCY, "@aws-sdk/util-user-agent-node"), + MIDDLEWARE_ENDPOINT_DISCOVERY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-endpoint-discovery"), + AWS_CRYPTO_SHA1_BROWSER(NORMAL_DEPENDENCY, "@aws-crypto/sha1-browser", "5.2.0"), + SIGNATURE_V4_MULTIREGION(NORMAL_DEPENDENCY, "@aws-sdk/signature-v4-multi-region"), + RECURSION_DETECTION_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-recursion-detection"), + MIDDLEWARE_WEBSOCKET(NORMAL_DEPENDENCY, "@aws-sdk/middleware-websocket"), + + // Conditionally added when httpChecksum trait is present + @Deprecated MD5_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/md5-js", "3.374.0"), + @Deprecated STREAM_HASHER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/hash-stream-node", "3.374.0"), + @Deprecated STREAM_HASHER_BROWSER(NORMAL_DEPENDENCY, "@aws-sdk/hash-blob-browser", "3.374.0"), + FLEXIBLE_CHECKSUMS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-flexible-checksums"), + + // Conditionally added when auth trait is present + MIDDLEWARE_API_KEY(NORMAL_DEPENDENCY, "@aws-sdk/middleware-api-key"), + + // Conditionally added when EndpointRuleSetTrait is present + UTIL_ENDPOINTS(NORMAL_DEPENDENCY, "@aws-sdk/util-endpoints"), + + // Conditionally added when @httpBearerAuth is used in an AWS service + TOKEN_PROVIDERS(NORMAL_DEPENDENCY, "@aws-sdk/token-providers"), + TYPES(NORMAL_DEPENDENCY, "@aws-sdk/types"), + REGION_CONFIG_RESOLVER(NORMAL_DEPENDENCY, "@aws-sdk/region-config-resolver"), + + CLIENT_DYNAMODB_PEER(PEER_DEPENDENCY, "@aws-sdk/client-dynamodb", "^3.0.0"), + UTIL_DYNAMODB(NORMAL_DEPENDENCY, "@aws-sdk/util-dynamodb", "*"); + + + public final String packageName; + public final String version; + public final SymbolDependency dependency; + + AwsDependency(String type, String name) { + this(type, name, SdkVersion.expectVersion(name)); + } -AwsDependency(String type, String name, String version) { - this.dependency = SymbolDependency.builder().dependencyType(type).packageName(name).version(version).build(); - this.packageName = name; - this.version = version; -} + AwsDependency(String type, String name, String version) { + this.dependency = SymbolDependency.builder().dependencyType(type).packageName(name).version(version).build(); + this.packageName = name; + this.version = version; + } -@Override -public List getDependencies() { - return Collections.singletonList(dependency); -} + @Override + public List getDependencies() { + return Collections.singletonList(dependency); + } -@Override -public String getPackageName() { - return this.packageName; -} + @Override + public String getPackageName() { + return this.packageName; + } + + private static final class SdkVersion { + private static final Map VERSIONS; + + static { + String rawProperties = + IoUtils.readUtf8Url(AwsDependency.class.getResource("sdkVersions.properties")).trim(); + Properties p = new Properties(); + try { + p.load(new StringReader(rawProperties)); + } catch (IOException e) { + throw new IllegalArgumentException("Could not read sdkVersions.properties"); + } -private static final class SdkVersion { - private static final Map VERSIONS; - - static { - String rawProperties = - IoUtils.readUtf8Url(AwsDependency.class.getResource("sdkVersions.properties")).trim(); - Properties p = new Properties(); - try { - p.load(new StringReader(rawProperties)); - } catch (IOException e) { - throw new IllegalArgumentException("Could not read sdkVersions.properties"); + final Map versions = new HashMap<>(p.size()); + p.forEach((k, v) -> { + if (versions.put(k.toString(), v.toString()) != null) { + throw new IllegalArgumentException("Multiple versions defined for " + k.toString()); + } + }); + VERSIONS = Collections.unmodifiableMap(versions); } - final Map versions = new HashMap<>(p.size()); - p.forEach((k, v) -> { - if (versions.put(k.toString(), v.toString()) != null) { - throw new IllegalArgumentException("Multiple versions defined for " + k.toString()); + private static String expectVersion(String packageName) { + if (!VERSIONS.containsKey(packageName)) { + throw new IllegalArgumentException("No version for " + packageName); } - }); - VERSIONS = Collections.unmodifiableMap(versions); - } - - private static String expectVersion(String packageName) { - if (!VERSIONS.containsKey(packageName)) { - throw new IllegalArgumentException("No version for " + packageName); + return VERSIONS.get(packageName); } - return VERSIONS.get(packageName); } } -} \ No newline at end of file From d64e9951f539992837ff30211744c31c3bf97f8c Mon Sep 17 00:00:00 2001 From: siddsriv Date: Fri, 4 Oct 2024 17:14:50 +0000 Subject: [PATCH 6/7] chore(codegen): formatting fix --- .../codegen/AddAccountIdEndpointModeRuntimeConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java index 7a067984c2c6..26aab32e90e0 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java @@ -1,7 +1,7 @@ /* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 - */ + */ package software.amazon.smithy.aws.typescript.codegen; From f95a1d3ea3685d29e6674ea4c5b5f8c36dc66231 Mon Sep 17 00:00:00 2001 From: siddsriv Date: Fri, 4 Oct 2024 17:26:19 +0000 Subject: [PATCH 7/7] chore(codegen): formatting fix --- ...AddAccountIdEndpointModeRuntimeConfig.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java index 26aab32e90e0..7a1c9b95f96e 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddAccountIdEndpointModeRuntimeConfig.java @@ -46,12 +46,12 @@ public void addConfigInterfaceFields( ) { if (isAwsService(settings, model)) { ServiceShape service = settings.getService(model); - if(hasAccountIdEndpointParam(service)) { + if (hasAccountIdEndpointParam(service)) { writer.addImportSubmodule("AccountIdEndpointMode", null, AwsDependency.AWS_SDK_CORE, "/account-id-endpoint"); writer.writeDocs("Defines if the AWS AccountId will be used for endpoint routing."); - writer.write("accountIdEndpointMode?: AccountIdEndpointMode | " + - "__Provider;\n"); + writer.write("accountIdEndpointMode?: AccountIdEndpointMode | " + + "__Provider;\n"); writer.addImportSubmodule("resolveAccountIdEndpointModeConfig", null, AwsDependency.AWS_SDK_CORE, "/account-id-endpoint"); } @@ -137,13 +137,13 @@ public List getClientPlugins() { } private boolean hasAccountIdEndpointParam(ServiceShape service) { - Optional endpointRuleSetTrait = service.getTrait(EndpointRuleSetTrait.class); - if (endpointRuleSetTrait.isPresent()) { - RuleSetParameterFinder ruleSetParameterFinder = new RuleSetParameterFinder(service); - if (ruleSetParameterFinder.getBuiltInParams().containsKey("AccountIdEndpointMode")) { - return true; + Optional endpointRuleSetTrait = service.getTrait(EndpointRuleSetTrait.class); + if (endpointRuleSetTrait.isPresent()) { + RuleSetParameterFinder ruleSetParameterFinder = new RuleSetParameterFinder(service); + if (ruleSetParameterFinder.getBuiltInParams().containsKey("AccountIdEndpointMode")) { + return true; + } } - } - return false; + return false; } }