Skip to content

Commit 359c78c

Browse files
authored
chore(middleware-bucket-endpoint): use booleanSelector from node-config-provider (#2946)
1 parent 01ff860 commit 359c78c

8 files changed

+133
-122
lines changed

packages/middleware-bucket-endpoint/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919
"license": "Apache-2.0",
2020
"dependencies": {
2121
"@aws-sdk/protocol-http": "3.38.0",
22+
"@aws-sdk/node-config-provider": "3.39.0",
2223
"@aws-sdk/types": "3.38.0",
2324
"@aws-sdk/util-arn-parser": "3.37.0",
2425
"tslib": "^2.3.0"
2526
},
2627
"devDependencies": {
2728
"@aws-sdk/middleware-stack": "3.38.0",
28-
"@aws-sdk/node-config-provider": "3.39.0",
2929
"@types/jest": "^26.0.4",
3030
"jest": "^26.1.0",
3131
"typescript": "~4.3.5"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { booleanSelector, SelectorType } from "@aws-sdk/node-config-provider";
2+
3+
import {
4+
NODE_DISABLE_MULTIREGION_ACCESS_POINT_CONFIG_OPTIONS,
5+
NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME,
6+
NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME,
7+
} from "./NodeDisableMultiregionAccessPointConfigOptions";
8+
9+
jest.mock("@aws-sdk/node-config-provider");
10+
11+
describe("NODE_USE_ARN_REGION_CONFIG_OPTIONS", () => {
12+
afterEach(() => {
13+
jest.clearAllMocks();
14+
});
15+
16+
const test = (func: Function, obj: { [key: string]: string }, key: string, type: SelectorType) => {
17+
it.each([true, false, undefined])("returns %s", (output) => {
18+
(booleanSelector as jest.Mock).mockReturnValueOnce(output);
19+
expect(func(obj)).toEqual(output);
20+
expect(booleanSelector).toBeCalledWith(obj, key, type);
21+
});
22+
23+
it("throws error", () => {
24+
const mockError = new Error("error");
25+
(booleanSelector as jest.Mock).mockImplementationOnce(() => {
26+
throw mockError;
27+
});
28+
expect(() => {
29+
func(obj);
30+
}).toThrow(mockError);
31+
});
32+
};
33+
34+
describe("calls booleanSelector for environmentVariableSelector", () => {
35+
const env: { [NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME]: any } = {} as any;
36+
const { environmentVariableSelector } = NODE_DISABLE_MULTIREGION_ACCESS_POINT_CONFIG_OPTIONS;
37+
test(environmentVariableSelector, env, NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME, SelectorType.ENV);
38+
});
39+
40+
describe("calls booleanSelector for configFileSelector", () => {
41+
const profileContent: { [NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME]: any } = {} as any;
42+
const { configFileSelector } = NODE_DISABLE_MULTIREGION_ACCESS_POINT_CONFIG_OPTIONS;
43+
test(configFileSelector, profileContent, NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME, SelectorType.CONFIG);
44+
});
45+
46+
it("returns false for default", () => {
47+
const { default: defaultValue } = NODE_DISABLE_MULTIREGION_ACCESS_POINT_CONFIG_OPTIONS;
48+
expect(defaultValue).toEqual(false);
49+
});
50+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { LoadedConfigSelectors } from "@aws-sdk/node-config-provider";
2+
import { booleanSelector, SelectorType } from "@aws-sdk/node-config-provider";
3+
4+
export const NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME = "AWS_S3_DISABLE_MULTIREGION_ACCESS_POINTS";
5+
export const NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME = "s3_disable_multiregion_access_points";
6+
7+
export const NODE_DISABLE_MULTIREGION_ACCESS_POINT_CONFIG_OPTIONS: LoadedConfigSelectors<boolean> = {
8+
environmentVariableSelector: (env: NodeJS.ProcessEnv) =>
9+
booleanSelector(env, NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME, SelectorType.ENV),
10+
configFileSelector: (profile) =>
11+
booleanSelector(profile, NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME, SelectorType.CONFIG),
12+
default: false,
13+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { booleanSelector, SelectorType } from "@aws-sdk/node-config-provider";
2+
3+
import {
4+
NODE_USE_ARN_REGION_CONFIG_OPTIONS,
5+
NODE_USE_ARN_REGION_ENV_NAME,
6+
NODE_USE_ARN_REGION_INI_NAME,
7+
} from "./NodeUseArnRegionConfigOptions";
8+
9+
jest.mock("@aws-sdk/node-config-provider");
10+
11+
describe("NODE_USE_ARN_REGION_CONFIG_OPTIONS", () => {
12+
afterEach(() => {
13+
jest.clearAllMocks();
14+
});
15+
16+
const test = (func: Function, obj: { [key: string]: string }, key: string, type: SelectorType) => {
17+
it.each([true, false, undefined])("returns %s", (output) => {
18+
(booleanSelector as jest.Mock).mockReturnValueOnce(output);
19+
expect(func(obj)).toEqual(output);
20+
expect(booleanSelector).toBeCalledWith(obj, key, type);
21+
});
22+
23+
it("throws error", () => {
24+
const mockError = new Error("error");
25+
(booleanSelector as jest.Mock).mockImplementationOnce(() => {
26+
throw mockError;
27+
});
28+
expect(() => {
29+
func(obj);
30+
}).toThrow(mockError);
31+
});
32+
};
33+
34+
describe("calls booleanSelector for environmentVariableSelector", () => {
35+
const env: { [NODE_USE_ARN_REGION_ENV_NAME]: any } = {} as any;
36+
const { environmentVariableSelector } = NODE_USE_ARN_REGION_CONFIG_OPTIONS;
37+
test(environmentVariableSelector, env, NODE_USE_ARN_REGION_ENV_NAME, SelectorType.ENV);
38+
});
39+
40+
describe("calls booleanSelector for configFileSelector", () => {
41+
const profileContent: { [NODE_USE_ARN_REGION_INI_NAME]: any } = {} as any;
42+
const { configFileSelector } = NODE_USE_ARN_REGION_CONFIG_OPTIONS;
43+
test(configFileSelector, profileContent, NODE_USE_ARN_REGION_INI_NAME, SelectorType.CONFIG);
44+
});
45+
46+
it("returns false for default", () => {
47+
const { default: defaultValue } = NODE_USE_ARN_REGION_CONFIG_OPTIONS;
48+
expect(defaultValue).toEqual(false);
49+
});
50+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { LoadedConfigSelectors } from "@aws-sdk/node-config-provider";
2+
import { booleanSelector, SelectorType } from "@aws-sdk/node-config-provider";
3+
4+
export const NODE_USE_ARN_REGION_ENV_NAME = "AWS_S3_USE_ARN_REGION";
5+
export const NODE_USE_ARN_REGION_INI_NAME = "s3_use_arn_region";
6+
7+
/**
8+
* Config to load useArnRegion from environment variables and shared INI files
9+
*
10+
* @api private
11+
*/
12+
export const NODE_USE_ARN_REGION_CONFIG_OPTIONS: LoadedConfigSelectors<boolean> = {
13+
environmentVariableSelector: (env: NodeJS.ProcessEnv) =>
14+
booleanSelector(env, NODE_USE_ARN_REGION_ENV_NAME, SelectorType.ENV),
15+
configFileSelector: (profile) => booleanSelector(profile, NODE_USE_ARN_REGION_INI_NAME, SelectorType.CONFIG),
16+
default: false,
17+
};

packages/middleware-bucket-endpoint/src/configuration.spec.ts

-68
This file was deleted.

packages/middleware-bucket-endpoint/src/configurations.ts

-53
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { LoadedConfigSelectors } from "@aws-sdk/node-config-provider";
21
import { Provider, RegionInfoProvider } from "@aws-sdk/types";
32

43
export interface BucketEndpointInputConfig {
@@ -92,55 +91,3 @@ export function resolveBucketEndpointConfig<T>(
9291
: () => Promise.resolve(disableMultiregionAccessPoints),
9392
};
9493
}
95-
96-
export const NODE_USE_ARN_REGION_ENV_NAME = "AWS_S3_USE_ARN_REGION";
97-
export const NODE_USE_ARN_REGION_INI_NAME = "s3_use_arn_region";
98-
99-
export const NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME = "AWS_S3_DISABLE_MULTIREGION_ACCESS_POINTS";
100-
export const NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME = "s3_disable_multiregion_access_points";
101-
102-
/**
103-
* Config to load useArnRegion from environment variables and shared INI files
104-
*
105-
* @api private
106-
*/
107-
export const NODE_USE_ARN_REGION_CONFIG_OPTIONS: LoadedConfigSelectors<boolean> = {
108-
environmentVariableSelector: (env: NodeJS.ProcessEnv) => {
109-
if (!Object.prototype.hasOwnProperty.call(env, NODE_USE_ARN_REGION_ENV_NAME)) return undefined;
110-
if (env[NODE_USE_ARN_REGION_ENV_NAME] === "true") return true;
111-
if (env[NODE_USE_ARN_REGION_ENV_NAME] === "false") return false;
112-
throw new Error(
113-
`Cannot load env ${NODE_USE_ARN_REGION_ENV_NAME}. Expected "true" or "false", got ${env[NODE_USE_ARN_REGION_ENV_NAME]}.`
114-
);
115-
},
116-
configFileSelector: (profile) => {
117-
if (!Object.prototype.hasOwnProperty.call(profile, NODE_USE_ARN_REGION_INI_NAME)) return undefined;
118-
if (profile[NODE_USE_ARN_REGION_INI_NAME] === "true") return true;
119-
if (profile[NODE_USE_ARN_REGION_INI_NAME] === "false") return false;
120-
throw new Error(
121-
`Cannot load shared config entry ${NODE_USE_ARN_REGION_INI_NAME}. Expected "true" or "false", got ${profile[NODE_USE_ARN_REGION_INI_NAME]}.`
122-
);
123-
},
124-
default: false,
125-
};
126-
127-
export const NODE_DISABLE_MULTIREGION_ACCESS_POINT_CONFIG_OPTIONS: LoadedConfigSelectors<boolean> = {
128-
environmentVariableSelector: (env: NodeJS.ProcessEnv) => {
129-
if (!Object.prototype.hasOwnProperty.call(env, NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME)) return undefined;
130-
if (env[NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME] === "true") return true;
131-
if (env[NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME] === "false") return false;
132-
throw new Error(
133-
`Cannot load env ${NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME}. Expected "true" or "false", got ${env[NODE_DISABLE_MULTIREGION_ACCESS_POINT_ENV_NAME]}.`
134-
);
135-
},
136-
configFileSelector: (profile) => {
137-
if (!Object.prototype.hasOwnProperty.call(profile, NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME))
138-
return undefined;
139-
if (profile[NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME] === "true") return true;
140-
if (profile[NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME] === "false") return false;
141-
throw new Error(
142-
`Cannot load shared config entry ${NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME}. Expected "true" or "false", got ${profile[NODE_DISABLE_MULTIREGION_ACCESS_POINT_INI_NAME]}.`
143-
);
144-
},
145-
default: false,
146-
};

packages/middleware-bucket-endpoint/src/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
export * from "./NodeDisableMultiregionAccessPointConfigOptions";
2+
export * from "./NodeUseArnRegionConfigOptions";
13
export * from "./bucketEndpointMiddleware";
24
export * from "./bucketHostname";
35
export * from "./configurations";

0 commit comments

Comments
 (0)