@checkdigit/eslint-plugin 7.14.0 → 7.15.0-PR.134-5bf7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,6 +17,7 @@ import noServeRuntime, { ruleId as noServeRuntimeRuleId } from "./no-serve-runti
17
17
  import requireServiceCallResponseDeclaration, {
18
18
  ruleId as requireServiceCallResponseDeclarationRuleId
19
19
  } from "./require-service-call-response-declaration.mjs";
20
+ import requireAwsConfig, { ruleId as requireAwsConfigRuleId } from "./require-aws-config.mjs";
20
21
  import filePathComment from "./file-path-comment.mjs";
21
22
  import noCardNumbers from "./no-card-numbers.mjs";
22
23
  import noEnum from "./no-enum.mjs";
@@ -56,6 +57,7 @@ var rules = {
56
57
  [noDuplicatedImportsRuleId]: noDuplicatedImports,
57
58
  [noServeRuntimeRuleId]: noServeRuntime,
58
59
  [requireServiceCallResponseDeclarationRuleId]: requireServiceCallResponseDeclaration,
60
+ [requireAwsConfigRuleId]: requireAwsConfig,
59
61
  [requireFixedServicesImportRuleId]: requireFixedServicesImport,
60
62
  [requireTypeOutOfTypeOnlyImportsRuleId]: requireTypeOutOfTypeOnlyImports
61
63
  };
@@ -94,7 +96,8 @@ var configs = {
94
96
  [`@checkdigit/${requireFixedServicesImportRuleId}`]: "error",
95
97
  [`@checkdigit/${requireTypeOutOfTypeOnlyImportsRuleId}`]: "error",
96
98
  [`@checkdigit/${noServeRuntimeRuleId}`]: "error",
97
- [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: "error"
99
+ [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: "error",
100
+ [`@checkdigit/${requireAwsConfigRuleId}`]: "error"
98
101
  }
99
102
  }
100
103
  ],
@@ -129,7 +132,8 @@ var configs = {
129
132
  [`@checkdigit/${requireFixedServicesImportRuleId}`]: "off",
130
133
  [`@checkdigit/${requireTypeOutOfTypeOnlyImportsRuleId}`]: "error",
131
134
  [`@checkdigit/${noServeRuntimeRuleId}`]: "off",
132
- [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: "off"
135
+ [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: "off",
136
+ [`@checkdigit/${requireAwsConfigRuleId}`]: "off"
133
137
  }
134
138
  }
135
139
  ]
@@ -142,4 +146,4 @@ var index_default = defaultToExport;
142
146
  export {
143
147
  index_default as default
144
148
  };
145
- //# sourceMappingURL=data:application/json;base64,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QUFDLGVBQWUseUJBQXlCLEVBQUUsR0FBRztBQUFBLFFBQzlDLENBQUMsZUFBZSxnQ0FBZ0MsRUFBRSxHQUFHO0FBQUEsUUFDckQsQ0FBQyxlQUFlLHFDQUFxQyxFQUFFLEdBQUc7QUFBQSxRQUMxRCxDQUFDLGVBQWUsb0JBQW9CLEVBQUUsR0FBRztBQUFBLFFBQ3pDLENBQUMsZUFBZSwyQ0FBMkMsRUFBRSxHQUFHO0FBQUEsTUFDbEU7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1g7QUFBQSxNQUNFLE9BQU8sQ0FBQyxTQUFTO0FBQUEsTUFDakIsU0FBUztBQUFBLFFBQ1AsZUFBZTtBQUFBLE1BQ2pCO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDTCwrQkFBK0I7QUFBQSxRQUMvQix1QkFBdUI7QUFBQSxRQUN2QixpQ0FBaUM7QUFBQSxRQUNqQyxpQ0FBaUM7QUFBQSxRQUNqQyxxQ0FBcUM7QUFBQSxRQUNyQyx1QkFBdUI7QUFBQSxRQUN2Qix1QkFBdUI7QUFBQSxRQUN2QixzQ0FBc0M7QUFBQSxRQUN0QyxxQ0FBcUM7QUFBQSxRQUNyQyxvREFBb0Q7QUFBQSxRQUNwRCxrQ0FBa0M7QUFBQSxRQUNsQywrQkFBK0I7QUFBQSxRQUMvQiwwQ0FBMEM7QUFBQSxRQUMxQyx1REFBdUQ7QUFBQSxRQUN2RCx1Q0FBdUM7QUFBQSxRQUN2Qyw4QkFBOEI7QUFBQSxRQUM5QixDQUFDLGVBQWUsMEJBQTBCLEVBQUUsR0FBRztBQUFBLFFBQy9DLENBQUMsZUFBZSw2QkFBNkIsRUFBRSxHQUFHO0FBQUEsUUFDbEQsQ0FBQyxlQUFlLDJCQUEyQixFQUFFLEdBQUc7QUFBQSxRQUNoRCxDQUFDLGVBQWUsZ0NBQWdDLEVBQUUsR0FBRztBQUFBLFFBQ3JELENBQUMsZUFBZSx5QkFBeUIsRUFBRSxHQUFHO0FBQUEsUUFDOUMsQ0FBQyxlQUFlLGdDQUFnQyxFQUFFLEdBQUc7QUFBQSxRQUNyRCxDQUFDLGVBQWUscUNBQXFDLEVBQUUsR0FBRztBQUFBLFFBQzFELENBQUMsZUFBZSxvQkFBb0IsRUFBRSxHQUFHO0FBQUEsUUFDekMsQ0FBQyxlQUFlLDJDQUEyQyxFQUFFLEdBQUc7QUFBQSxNQUNsRTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxJQUFNLGtCQUVGO0FBQUEsRUFDRixHQUFHO0FBQUEsRUFDSDtBQUNGO0FBQ0EsSUFBTyxnQkFBUTsiLAogICJuYW1lcyI6IFtdCn0K
149
+ //# sourceMappingURL=data:application/json;base64,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
@@ -0,0 +1,17 @@
1
+ // src/is-aws-sdk-v3-used.ts
2
+ import { promises as fs } from "node:fs";
3
+ async function isAwsSdkV3Used() {
4
+ const isService = process.env["SERVICE_NAME"] !== void 0;
5
+ if (!isService) {
6
+ return false;
7
+ }
8
+ const packageJson = JSON.parse(await fs.readFile("package.json", "utf-8"));
9
+ const dependencies = packageJson.dependencies ?? {};
10
+ const hasAwsSdkV3Dependency = Object.keys(dependencies).some((dependency) => dependency.startsWith("@aws-sdk/"));
11
+ const isAwsSdkV2Used = Object.keys(dependencies).some((dependency) => dependency === "@checkdigit/aws") || packageJson.service?.awsSdkV2 === true;
12
+ return !isAwsSdkV2Used && hasAwsSdkV3Dependency;
13
+ }
14
+ export {
15
+ isAwsSdkV3Used as default
16
+ };
17
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2lzLWF3cy1zZGstdjMtdXNlZC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFFQSxTQUFTLFlBQVksVUFBVTtBQUUvQixlQUFPLGlCQUEwRDtBQUMvRCxRQUFNLFlBQVksUUFBUSxJQUFJLGNBQWMsTUFBTTtBQUNsRCxNQUFJLENBQUMsV0FBVztBQUNkLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxjQUFjLEtBQUssTUFBTSxNQUFNLEdBQUcsU0FBUyxnQkFBZ0IsT0FBTyxDQUFDO0FBTXpFLFFBQU0sZUFBZSxZQUFZLGdCQUFnQixDQUFDO0FBRWxELFFBQU0sd0JBQXdCLE9BQU8sS0FBSyxZQUFZLEVBQUUsS0FBSyxDQUFDLGVBQWUsV0FBVyxXQUFXLFdBQVcsQ0FBQztBQUMvRyxRQUFNLGlCQUNKLE9BQU8sS0FBSyxZQUFZLEVBQUUsS0FBSyxDQUFDLGVBQWUsZUFBZSxpQkFBaUIsS0FDL0UsWUFBWSxTQUFTLGFBQWE7QUFFcEMsU0FBTyxDQUFDLGtCQUFrQjtBQUM1QjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,53 @@
1
+ // src/require-aws-config.ts
2
+ import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
3
+ import getDocumentationUrl from "./get-documentation-url.mjs";
4
+ var ruleId = "require-aws-config";
5
+ var MESSAGE_ID_REQUIRE_AWS_CONFIG = "requireAwsConfig";
6
+ var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
7
+ var rule = createRule({
8
+ name: ruleId,
9
+ meta: {
10
+ type: "problem",
11
+ docs: {
12
+ description: "Require to apply @checkdigit/aws-config along with qualifier instead of using aws client directly."
13
+ },
14
+ messages: {
15
+ [MESSAGE_ID_REQUIRE_AWS_CONFIG]: "Please apply @checkdigit/aws-config along with qualifier instead of using aws client {{awsClientName}} directly."
16
+ },
17
+ schema: []
18
+ },
19
+ defaultOptions: [],
20
+ create(context) {
21
+ const { isAwsSdkV3Used } = context.settings;
22
+ if (isAwsSdkV3Used !== true) {
23
+ return {};
24
+ }
25
+ return {
26
+ NewExpression(node) {
27
+ if (node.callee.type === AST_NODE_TYPES.Identifier && node.callee.name.endsWith("Client")) {
28
+ context.report({
29
+ node,
30
+ messageId: MESSAGE_ID_REQUIRE_AWS_CONFIG,
31
+ data: { awsClientName: node.callee.name }
32
+ });
33
+ } else if (node.callee.type === AST_NODE_TYPES.MemberExpression) {
34
+ const property = node.callee.property;
35
+ if (property.type === AST_NODE_TYPES.Identifier && property.name.endsWith("Client")) {
36
+ context.report({
37
+ node,
38
+ messageId: MESSAGE_ID_REQUIRE_AWS_CONFIG,
39
+ data: { awsClientName: property.name }
40
+ });
41
+ }
42
+ }
43
+ }
44
+ };
45
+ }
46
+ });
47
+ var require_aws_config_default = rule;
48
+ export {
49
+ MESSAGE_ID_REQUIRE_AWS_CONFIG,
50
+ require_aws_config_default as default,
51
+ ruleId
52
+ };
53
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlcXVpcmUtYXdzLWNvbmZpZy50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLGdCQUFnQixtQkFBbUI7QUFDNUMsT0FBTyx5QkFBeUI7QUFFekIsSUFBTSxTQUFTO0FBQ2YsSUFBTSxnQ0FBZ0M7QUFDN0MsSUFBTSxhQUFhLFlBQVksWUFBWSxDQUFDLFNBQVMsb0JBQW9CLElBQUksQ0FBQztBQUU5RSxJQUFNLE9BQXFFLFdBQVc7QUFBQSxFQUNwRixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQyw2QkFBNkIsR0FDNUI7QUFBQSxJQUNKO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxFQUNYO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLFVBQU0sRUFBRSxlQUFlLElBQUksUUFBUTtBQUNuQyxRQUFJLG1CQUFtQixNQUFNO0FBQzNCLGFBQU8sQ0FBQztBQUFBLElBQ1Y7QUFFQSxXQUFPO0FBQUEsTUFDTCxjQUFjLE1BQU07QUFDbEIsWUFBSSxLQUFLLE9BQU8sU0FBUyxlQUFlLGNBQWMsS0FBSyxPQUFPLEtBQUssU0FBUyxRQUFRLEdBQUc7QUFDekYsa0JBQVEsT0FBTztBQUFBLFlBQ2I7QUFBQSxZQUNBLFdBQVc7QUFBQSxZQUNYLE1BQU0sRUFBRSxlQUFlLEtBQUssT0FBTyxLQUFLO0FBQUEsVUFDMUMsQ0FBQztBQUFBLFFBQ0gsV0FBVyxLQUFLLE9BQU8sU0FBUyxlQUFlLGtCQUFrQjtBQUUvRCxnQkFBTSxXQUFXLEtBQUssT0FBTztBQUM3QixjQUFJLFNBQVMsU0FBUyxlQUFlLGNBQWMsU0FBUyxLQUFLLFNBQVMsUUFBUSxHQUFHO0FBQ25GLG9CQUFRLE9BQU87QUFBQSxjQUNiO0FBQUEsY0FDQSxXQUFXO0FBQUEsY0FDWCxNQUFNLEVBQUUsZUFBZSxTQUFTLEtBQUs7QUFBQSxZQUN2QyxDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDO0FBRUQsSUFBTyw2QkFBUTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1 @@
1
+ export default function isAwsSdkV3Used(): Promise<boolean>;
@@ -0,0 +1,5 @@
1
+ import { ESLintUtils } from '@typescript-eslint/utils';
2
+ export declare const ruleId = "require-aws-config";
3
+ export declare const MESSAGE_ID_REQUIRE_AWS_CONFIG = "requireAwsConfig";
4
+ declare const rule: ESLintUtils.RuleModule<typeof MESSAGE_ID_REQUIRE_AWS_CONFIG>;
5
+ export default rule;
package/package.json CHANGED
@@ -1,96 +1 @@
1
- {
2
- "name": "@checkdigit/eslint-plugin",
3
- "version": "7.14.0",
4
- "description": "Check Digit eslint plugins",
5
- "keywords": [
6
- "eslint",
7
- "eslintplugin"
8
- ],
9
- "homepage": "https://github.com/checkdigit/eslint-plugin#readme",
10
- "bugs": {
11
- "url": "https://github.com/checkdigit/eslint-plugin/issues"
12
- },
13
- "repository": {
14
- "type": "git",
15
- "url": "https://github.com/checkdigit/eslint-plugin"
16
- },
17
- "license": "MIT",
18
- "author": "Check Digit, LLC",
19
- "sideEffects": false,
20
- "type": "module",
21
- "exports": {
22
- ".": {
23
- "types": "./dist-types/index.d.ts",
24
- "import": "./dist-mjs/index.mjs",
25
- "default": "./dist-mjs/index.mjs"
26
- }
27
- },
28
- "files": [
29
- "src",
30
- "dist-types",
31
- "dist-mjs",
32
- "!src/**/test/**",
33
- "!src/**/*.test.ts",
34
- "!src/**/*.spec.ts",
35
- "!dist-types/**/test/**",
36
- "!dist-types/**/*.test.d.ts",
37
- "!dist-types/**/*.spec.d.ts",
38
- "!dist-mjs/**/test/**",
39
- "!dist-mjs/**/*.test.mjs",
40
- "!dist-mjs/**/*.spec.mjs",
41
- "SECURITY.md"
42
- ],
43
- "scripts": {
44
- "build:dist-mjs": "rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs",
45
- "build:dist-types": "rimraf dist-types && npx builder --type=types --outDir=dist-types",
46
- "ci:compile": "tsc --noEmit",
47
- "ci:coverage": "NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true",
48
- "ci:lint": "npm run lint",
49
- "ci:style": "npm run prettier",
50
- "ci:test": "NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false",
51
- "lint": "eslint --max-warnings 0 .",
52
- "lint:fix": "eslint --max-warnings 0 --fix .",
53
- "prepare": "",
54
- "prepublishOnly": "npm run build:dist-types && npm run build:dist-mjs",
55
- "prettier": "prettier --ignore-path .gitignore --list-different .",
56
- "prettier:fix": "prettier --ignore-path .gitignore --write .",
57
- "test": "npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"
58
- },
59
- "prettier": "@checkdigit/prettier-config",
60
- "jest": {
61
- "preset": "@checkdigit/jest-config"
62
- },
63
- "dependencies": {
64
- "@typescript-eslint/type-utils": "^8.23.0",
65
- "@typescript-eslint/utils": "^8.23.0",
66
- "http-status-codes": "^2.3.0",
67
- "ts-api-utils": "^2.0.1"
68
- },
69
- "devDependencies": {
70
- "@checkdigit/jest-config": "^6.0.2",
71
- "@checkdigit/prettier-config": "^6.1.0",
72
- "@checkdigit/typescript-config": "^9.0.0",
73
- "@eslint/js": "^9.19.0",
74
- "@types/eslint": "^9.6.1",
75
- "@types/eslint-config-prettier": "^6.11.3",
76
- "@typescript-eslint/parser": "^8.23.0",
77
- "@typescript-eslint/rule-tester": "^8.23.0",
78
- "eslint": "^9.19.0",
79
- "eslint-config-prettier": "^10.0.1",
80
- "eslint-import-resolver-typescript": "^3.7.0",
81
- "eslint-plugin-eslint-plugin": "^6.4.0",
82
- "eslint-plugin-import": "^2.31.0",
83
- "eslint-plugin-no-only-tests": "^3.3.0",
84
- "eslint-plugin-no-secrets": "^2.2.1",
85
- "eslint-plugin-node": "^11.1.0",
86
- "eslint-plugin-sonarjs": "1.0.4",
87
- "rimraf": "^6.0.1",
88
- "typescript-eslint": "^8.23.0"
89
- },
90
- "peerDependencies": {
91
- "eslint": ">=9 <10"
92
- },
93
- "engines": {
94
- "node": ">=22.14"
95
- }
96
- }
1
+ {"name":"@checkdigit/eslint-plugin","version":"7.15.0-PR.134-5bf7","description":"Check Digit eslint plugins","keywords":["eslint","eslintplugin"],"homepage":"https://github.com/checkdigit/eslint-plugin#readme","bugs":{"url":"https://github.com/checkdigit/eslint-plugin/issues"},"repository":{"type":"git","url":"https://github.com/checkdigit/eslint-plugin"},"license":"MIT","author":"Check Digit, LLC","sideEffects":false,"type":"module","exports":{".":{"types":"./dist-types/index.d.ts","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"files":["src","dist-types","dist-mjs","!src/**/test/**","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/test/**","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-mjs/**/test/**","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"],"scripts":{"build:dist-mjs":"rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs","build:dist-types":"rimraf dist-types && npx builder --type=types --outDir=dist-types","ci:compile":"tsc --noEmit","ci:coverage":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true","ci:lint":"npm run lint","ci:style":"npm run prettier","ci:test":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false","lint":"eslint --max-warnings 0 .","lint:fix":"eslint --max-warnings 0 --fix .","prepare":"","prepublishOnly":"npm run build:dist-types && npm run build:dist-mjs","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"},"prettier":"@checkdigit/prettier-config","jest":{"preset":"@checkdigit/jest-config"},"dependencies":{"@typescript-eslint/type-utils":"^8.45.0","@typescript-eslint/utils":"^8.45.0","http-status-codes":"^2.3.0","ts-api-utils":"^2.1.0"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^6.1.0","@checkdigit/typescript-config":"^9.3.1","@eslint/js":"^9.36.0","@types/eslint":"^9.6.1","@types/eslint-config-prettier":"^6.11.3","@typescript-eslint/parser":"^8.45.0","@typescript-eslint/rule-tester":"^8.45.0","eslint":"^9.36.0","eslint-config-prettier":"^10.1.8","eslint-import-resolver-typescript":"^3.7.0","eslint-plugin-eslint-plugin":"^6.4.0","eslint-plugin-import":"^2.32.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-no-secrets":"^2.2.1","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"1.0.4","rimraf":"^6.0.1","typescript-eslint":"^8.45.0"},"peerDependencies":{"eslint":">=9 <10"},"engines":{"node":">=22.15"}}
package/src/index.ts CHANGED
@@ -26,6 +26,7 @@ import noServeRuntime, { ruleId as noServeRuntimeRuleId } from './no-serve-runti
26
26
  import requireServiceCallResponseDeclaration, {
27
27
  ruleId as requireServiceCallResponseDeclarationRuleId,
28
28
  } from './require-service-call-response-declaration.ts';
29
+ import requireAwsConfig, { ruleId as requireAwsConfigRuleId } from './require-aws-config.ts';
29
30
  import filePathComment from './file-path-comment.ts';
30
31
  import noCardNumbers from './no-card-numbers.ts';
31
32
  import noEnum from './no-enum.ts';
@@ -66,6 +67,7 @@ const rules: Record<string, TSESLint.LooseRuleDefinition> = {
66
67
  [noDuplicatedImportsRuleId]: noDuplicatedImports,
67
68
  [noServeRuntimeRuleId]: noServeRuntime,
68
69
  [requireServiceCallResponseDeclarationRuleId]: requireServiceCallResponseDeclaration,
70
+ [requireAwsConfigRuleId]: requireAwsConfig,
69
71
  [requireFixedServicesImportRuleId]: requireFixedServicesImport,
70
72
  [requireTypeOutOfTypeOnlyImportsRuleId]: requireTypeOutOfTypeOnlyImports,
71
73
  };
@@ -107,6 +109,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
107
109
  [`@checkdigit/${requireTypeOutOfTypeOnlyImportsRuleId}`]: 'error',
108
110
  [`@checkdigit/${noServeRuntimeRuleId}`]: 'error',
109
111
  [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: 'error',
112
+ [`@checkdigit/${requireAwsConfigRuleId}`]: 'error',
110
113
  },
111
114
  },
112
115
  ],
@@ -142,6 +145,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
142
145
  [`@checkdigit/${requireTypeOutOfTypeOnlyImportsRuleId}`]: 'error',
143
146
  [`@checkdigit/${noServeRuntimeRuleId}`]: 'off',
144
147
  [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: 'off',
148
+ [`@checkdigit/${requireAwsConfigRuleId}`]: 'off',
145
149
  },
146
150
  },
147
151
  ],
@@ -0,0 +1,25 @@
1
+ // is-aws-sdk-v3-used.ts
2
+
3
+ import { promises as fs } from 'node:fs';
4
+
5
+ export default async function isAwsSdkV3Used(): Promise<boolean> {
6
+ const isService = process.env['SERVICE_NAME'] !== undefined;
7
+ if (!isService) {
8
+ return false;
9
+ }
10
+
11
+ const packageJson = JSON.parse(await fs.readFile('package.json', 'utf-8')) as {
12
+ dependencies?: Record<string, string>;
13
+ service?: {
14
+ awsSdkV2?: boolean;
15
+ };
16
+ };
17
+ const dependencies = packageJson.dependencies ?? {};
18
+
19
+ const hasAwsSdkV3Dependency = Object.keys(dependencies).some((dependency) => dependency.startsWith('@aws-sdk/'));
20
+ const isAwsSdkV2Used =
21
+ Object.keys(dependencies).some((dependency) => dependency === '@checkdigit/aws') ||
22
+ packageJson.service?.awsSdkV2 === true;
23
+
24
+ return !isAwsSdkV2Used && hasAwsSdkV3Dependency;
25
+ }
@@ -0,0 +1,60 @@
1
+ // require-aws-config.ts
2
+
3
+ /*
4
+ * Copyright (c) 2021-2025 Check Digit, LLC
5
+ *
6
+ * This code is licensed under the MIT license (see LICENSE.txt for details).
7
+ */
8
+
9
+ import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils';
10
+ import getDocumentationUrl from './get-documentation-url.ts';
11
+
12
+ export const ruleId = 'require-aws-config';
13
+ export const MESSAGE_ID_REQUIRE_AWS_CONFIG = 'requireAwsConfig';
14
+ const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
15
+
16
+ const rule: ESLintUtils.RuleModule<typeof MESSAGE_ID_REQUIRE_AWS_CONFIG> = createRule({
17
+ name: ruleId,
18
+ meta: {
19
+ type: 'problem',
20
+ docs: {
21
+ description: 'Require to apply @checkdigit/aws-config along with qualifier instead of using aws client directly.',
22
+ },
23
+ messages: {
24
+ [MESSAGE_ID_REQUIRE_AWS_CONFIG]:
25
+ 'Please apply @checkdigit/aws-config along with qualifier instead of using aws client {{awsClientName}} directly.',
26
+ },
27
+ schema: [],
28
+ },
29
+ defaultOptions: [],
30
+ create(context) {
31
+ const { isAwsSdkV3Used } = context.settings;
32
+ if (isAwsSdkV3Used !== true) {
33
+ return {};
34
+ }
35
+
36
+ return {
37
+ NewExpression(node) {
38
+ if (node.callee.type === AST_NODE_TYPES.Identifier && node.callee.name.endsWith('Client')) {
39
+ context.report({
40
+ node,
41
+ messageId: MESSAGE_ID_REQUIRE_AWS_CONFIG,
42
+ data: { awsClientName: node.callee.name },
43
+ });
44
+ } else if (node.callee.type === AST_NODE_TYPES.MemberExpression) {
45
+ // Handle `new AWS.DynamoDBClient()` style (MemberExpression)
46
+ const property = node.callee.property;
47
+ if (property.type === AST_NODE_TYPES.Identifier && property.name.endsWith('Client')) {
48
+ context.report({
49
+ node,
50
+ messageId: MESSAGE_ID_REQUIRE_AWS_CONFIG,
51
+ data: { awsClientName: property.name },
52
+ });
53
+ }
54
+ }
55
+ },
56
+ };
57
+ },
58
+ });
59
+
60
+ export default rule;