Skip to content

Commit 7c7bac3

Browse files
committed
fix(packages): maintain singleton config object
1 parent a727545 commit 7c7bac3

File tree

42 files changed

+294
-132
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+294
-132
lines changed

clients/client-s3/src/S3Client.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,9 @@ export class S3Client extends __Client<
862862
this.middlewareStack.use(getRegionRedirectMiddlewarePlugin(this.config));
863863
this.middlewareStack.use(getS3ExpressPlugin(this.config));
864864
this.middlewareStack.use(getS3ExpressHttpSigningPlugin(this.config));
865+
if ((_config_0 as unknown) !== this.config) {
866+
throw new Error(`${this.constructor.name} - ConfigCustodyError`);
867+
}
865868
}
866869

867870
/**

clients/client-s3/src/auth/httpAuthSchemeProvider.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,5 @@ export const resolveHttpAuthSchemeConfig = <T>(
324324
): T & HttpAuthSchemeResolvedConfig => {
325325
const config_0 = resolveAwsSdkSigV4Config(config);
326326
const config_1 = resolveAwsSdkSigV4AConfig(config_0);
327-
return {
328-
...config_1,
329-
} as T & HttpAuthSchemeResolvedConfig;
327+
return Object.assign(config_1, {}) as T & HttpAuthSchemeResolvedConfig;
330328
};

clients/client-s3/src/endpoint/EndpointParameters.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,15 @@ export type ClientResolvedEndpointParameters = ClientInputEndpointParameters & {
2424
export const resolveClientEndpointParameters = <T>(
2525
options: T & ClientInputEndpointParameters
2626
): T & ClientResolvedEndpointParameters => {
27-
return {
28-
...options,
27+
return Object.assign(options, {
2928
useFipsEndpoint: options.useFipsEndpoint ?? false,
3029
useDualstackEndpoint: options.useDualstackEndpoint ?? false,
3130
forcePathStyle: options.forcePathStyle ?? false,
3231
useAccelerateEndpoint: options.useAccelerateEndpoint ?? false,
3332
useGlobalEndpoint: options.useGlobalEndpoint ?? false,
3433
disableMultiregionAccessPoints: options.disableMultiregionAccessPoints ?? false,
3534
defaultSigningName: "s3",
36-
};
35+
});
3736
};
3837

3938
export const commonParams = {

clients/client-s3/src/models/models_0.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// smithy-typescript generated code
22
import { ExceptionOptionType as __ExceptionOptionType, SENSITIVE_STRING } from "@smithy/smithy-client";
3-
43
import { StreamingBlobTypes } from "@smithy/types";
54

65
import { S3ServiceException as __BaseException } from "./S3ServiceException";

clients/client-s3/src/models/models_1.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// smithy-typescript generated code
22
import { ExceptionOptionType as __ExceptionOptionType, SENSITIVE_STRING } from "@smithy/smithy-client";
3-
43
import { StreamingBlobTypes } from "@smithy/types";
54

65
import {
@@ -41,7 +40,6 @@ import {
4140
Tag,
4241
TransitionDefaultMinimumObjectSize,
4342
} from "./models_0";
44-
4543
import { S3ServiceException as __BaseException } from "./S3ServiceException";
4644

4745
/**

clients/client-s3/src/runtimeExtensions.ts

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,24 @@ export interface RuntimeExtensionsConfig {
2323
extensions: RuntimeExtension[];
2424
}
2525

26-
const asPartial = <T extends Partial<S3ExtensionConfiguration>>(t: T) => t;
27-
2826
/**
2927
* @internal
3028
*/
3129
export const resolveRuntimeExtensions = (runtimeConfig: any, extensions: RuntimeExtension[]) => {
32-
const extensionConfiguration: S3ExtensionConfiguration = {
33-
...asPartial(getAwsRegionExtensionConfiguration(runtimeConfig)),
34-
...asPartial(getDefaultExtensionConfiguration(runtimeConfig)),
35-
...asPartial(getHttpHandlerExtensionConfiguration(runtimeConfig)),
36-
...asPartial(getHttpAuthExtensionConfiguration(runtimeConfig)),
37-
};
30+
const extensionConfiguration: S3ExtensionConfiguration = Object.assign(
31+
getAwsRegionExtensionConfiguration(runtimeConfig),
32+
getDefaultExtensionConfiguration(runtimeConfig),
33+
getHttpHandlerExtensionConfiguration(runtimeConfig),
34+
getHttpAuthExtensionConfiguration(runtimeConfig)
35+
);
3836

3937
extensions.forEach((extension) => extension.configure(extensionConfiguration));
4038

41-
return {
42-
...runtimeConfig,
43-
...resolveAwsRegionExtensionConfiguration(extensionConfiguration),
44-
...resolveDefaultRuntimeConfig(extensionConfiguration),
45-
...resolveHttpHandlerRuntimeConfig(extensionConfiguration),
46-
...resolveHttpAuthRuntimeConfig(extensionConfiguration),
47-
};
39+
return Object.assign(
40+
runtimeConfig,
41+
resolveAwsRegionExtensionConfiguration(extensionConfiguration),
42+
resolveDefaultRuntimeConfig(extensionConfiguration),
43+
resolveHttpHandlerRuntimeConfig(extensionConfiguration),
44+
resolveHttpAuthRuntimeConfig(extensionConfiguration)
45+
);
4846
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { describe, expect, test as it } from "vitest";
2+
3+
import { resolveAccountIdEndpointModeConfig } from "./AccountIdEndpointModeConfigResolver";
4+
5+
describe(resolveAccountIdEndpointModeConfig.name, () => {
6+
it("maintains object custody", () => {
7+
const input = {};
8+
expect(resolveAccountIdEndpointModeConfig(input)).toBe(input);
9+
});
10+
});

packages/core/src/submodules/account-id-endpoint/AccountIdEndpointModeConfigResolver.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,9 @@ export interface AccountIdEndpointModeResolvedConfig {
3838
export const resolveAccountIdEndpointModeConfig = <T>(
3939
input: T & AccountIdEndpointModeInputConfig & PreviouslyResolved
4040
): T & AccountIdEndpointModeResolvedConfig => {
41-
const accountIdEndpointModeProvider = normalizeProvider(
42-
input.accountIdEndpointMode ?? DEFAULT_ACCOUNT_ID_ENDPOINT_MODE
43-
);
44-
return {
45-
...input,
41+
const { accountIdEndpointMode } = input;
42+
const accountIdEndpointModeProvider = normalizeProvider(accountIdEndpointMode ?? DEFAULT_ACCOUNT_ID_ENDPOINT_MODE);
43+
return Object.assign(input, {
4644
accountIdEndpointMode: async () => {
4745
const accIdMode = await accountIdEndpointModeProvider();
4846
if (!validateAccountIdEndpointMode(accIdMode)) {
@@ -52,5 +50,5 @@ export const resolveAccountIdEndpointModeConfig = <T>(
5250
}
5351
return accIdMode;
5452
},
55-
};
53+
});
5654
};

packages/core/src/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4AConfig.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,9 @@ describe(resolveAwsSdkSigV4AConfig.name, () => {
99
expect(typeof config.sigv4aSigningRegionSet).toEqual("function");
1010
expect(await config.sigv4aSigningRegionSet()).toEqual(undefined);
1111
});
12+
13+
it("maintains object custody", () => {
14+
const input = {};
15+
expect(resolveAwsSdkSigV4AConfig(input)).toBe(input);
16+
});
1217
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { describe, expect, test as it, vi } from "vitest";
2+
3+
import { resolveAwsSdkSigV4Config } from "./resolveAwsSdkSigV4Config";
4+
5+
describe(resolveAwsSdkSigV4Config.name, () => {
6+
it("maintains object custody", () => {
7+
const input = {
8+
region: "",
9+
sha256: vi.fn(),
10+
serviceId: "",
11+
useFipsEndpoint: async () => false,
12+
useDualstackEndpoint: async () => false,
13+
};
14+
expect(resolveAwsSdkSigV4Config(input)).toBe(input);
15+
});
16+
});

0 commit comments

Comments
 (0)