@checkdigit/eslint-plugin 7.15.0-PR.117-a0b1 → 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,13 +17,13 @@ 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";
23
24
  import noSideEffects from "./no-side-effects.mjs";
24
25
  import noRandomV4UUID from "./no-random-v4-uuid.mjs";
25
26
  import noTestImport from "./no-test-import.mjs";
26
- import noTypeAssertionAs from "./no-type-assertion-as.mjs";
27
27
  import noUtil from "./no-util.mjs";
28
28
  import noUuid from "./no-uuid.mjs";
29
29
  import noWallabyComment from "./no-wallaby-comment.mjs";
@@ -47,7 +47,6 @@ var rules = {
47
47
  "no-test-import": noTestImport,
48
48
  "no-wallaby-comment": noWallabyComment,
49
49
  "no-side-effects": noSideEffects,
50
- "no-type-assertion-as": noTypeAssertionAs,
51
50
  "regular-expression-comment": regexComment,
52
51
  "require-assert-predicate-rejects-throws": requireAssertPredicateRejectsThrows,
53
52
  "object-literal-response": objectLiteralResponse,
@@ -58,6 +57,7 @@ var rules = {
58
57
  [noDuplicatedImportsRuleId]: noDuplicatedImports,
59
58
  [noServeRuntimeRuleId]: noServeRuntime,
60
59
  [requireServiceCallResponseDeclarationRuleId]: requireServiceCallResponseDeclaration,
60
+ [requireAwsConfigRuleId]: requireAwsConfig,
61
61
  [requireFixedServicesImportRuleId]: requireFixedServicesImport,
62
62
  [requireTypeOutOfTypeOnlyImportsRuleId]: requireTypeOutOfTypeOnlyImports
63
63
  };
@@ -84,7 +84,6 @@ var configs = {
84
84
  "@checkdigit/require-ts-extension-imports-exports": "error",
85
85
  "@checkdigit/no-wallaby-comment": "error",
86
86
  "@checkdigit/no-side-effects": "error",
87
- "@checkdigit/no-type-assertion-as": "error",
88
87
  "@checkdigit/regular-expression-comment": "error",
89
88
  "@checkdigit/require-assert-predicate-rejects-throws": "error",
90
89
  "@checkdigit/object-literal-response": "error",
@@ -97,7 +96,8 @@ var configs = {
97
96
  [`@checkdigit/${requireFixedServicesImportRuleId}`]: "error",
98
97
  [`@checkdigit/${requireTypeOutOfTypeOnlyImportsRuleId}`]: "error",
99
98
  [`@checkdigit/${noServeRuntimeRuleId}`]: "error",
100
- [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: "error"
99
+ [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: "error",
100
+ [`@checkdigit/${requireAwsConfigRuleId}`]: "error"
101
101
  }
102
102
  }
103
103
  ],
@@ -120,7 +120,6 @@ var configs = {
120
120
  "@checkdigit/require-ts-extension-imports-exports": "error",
121
121
  "@checkdigit/no-wallaby-comment": "off",
122
122
  "@checkdigit/no-side-effects": "error",
123
- "@checkdigit/no-type-assertion-as": "error",
124
123
  "@checkdigit/regular-expression-comment": "error",
125
124
  "@checkdigit/require-assert-predicate-rejects-throws": "error",
126
125
  "@checkdigit/object-literal-response": "error",
@@ -133,7 +132,8 @@ var configs = {
133
132
  [`@checkdigit/${requireFixedServicesImportRuleId}`]: "off",
134
133
  [`@checkdigit/${requireTypeOutOfTypeOnlyImportsRuleId}`]: "error",
135
134
  [`@checkdigit/${noServeRuntimeRuleId}`]: "off",
136
- [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: "off"
135
+ [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: "off",
136
+ [`@checkdigit/${requireAwsConfigRuleId}`]: "off"
137
137
  }
138
138
  }
139
139
  ]
@@ -146,4 +146,4 @@ var index_default = defaultToExport;
146
146
  export {
147
147
  index_default as default
148
148
  };
149
- //# sourceMappingURL=data:application/json;base64,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QUFHO0FBQUEsUUFDaEQsQ0FBQyxlQUFlLGdDQUFnQyxFQUFFLEdBQUc7QUFBQSxRQUNyRCxDQUFDLGVBQWUseUJBQXlCLEVBQUUsR0FBRztBQUFBLFFBQzlDLENBQUMsZUFBZSxnQ0FBZ0MsRUFBRSxHQUFHO0FBQUEsUUFDckQsQ0FBQyxlQUFlLHFDQUFxQyxFQUFFLEdBQUc7QUFBQSxRQUMxRCxDQUFDLGVBQWUsb0JBQW9CLEVBQUUsR0FBRztBQUFBLFFBQ3pDLENBQUMsZUFBZSwyQ0FBMkMsRUFBRSxHQUFHO0FBQUEsTUFDbEU7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1g7QUFBQSxNQUNFLE9BQU8sQ0FBQyxTQUFTO0FBQUEsTUFDakIsU0FBUztBQUFBLFFBQ1AsZUFBZTtBQUFBLE1BQ2pCO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDTCwrQkFBK0I7QUFBQSxRQUMvQix1QkFBdUI7QUFBQSxRQUN2QixpQ0FBaUM7QUFBQSxRQUNqQyxpQ0FBaUM7QUFBQSxRQUNqQyxxQ0FBcUM7QUFBQSxRQUNyQyx1QkFBdUI7QUFBQSxRQUN2Qix1QkFBdUI7QUFBQSxRQUN2QixzQ0FBc0M7QUFBQSxRQUN0QyxxQ0FBcUM7QUFBQSxRQUNyQyxvREFBb0Q7QUFBQSxRQUNwRCxrQ0FBa0M7QUFBQSxRQUNsQywrQkFBK0I7QUFBQSxRQUMvQixvQ0FBb0M7QUFBQSxRQUNwQywwQ0FBMEM7QUFBQSxRQUMxQyx1REFBdUQ7QUFBQSxRQUN2RCx1Q0FBdUM7QUFBQSxRQUN2Qyw4QkFBOEI7QUFBQSxRQUM5QixDQUFDLGVBQWUsMEJBQTBCLEVBQUUsR0FBRztBQUFBLFFBQy9DLENBQUMsZUFBZSw2QkFBNkIsRUFBRSxHQUFHO0FBQUEsUUFDbEQsQ0FBQyxlQUFlLDJCQUEyQixFQUFFLEdBQUc7QUFBQSxRQUNoRCxDQUFDLGVBQWUsZ0NBQWdDLEVBQUUsR0FBRztBQUFBLFFBQ3JELENBQUMsZUFBZSx5QkFBeUIsRUFBRSxHQUFHO0FBQUEsUUFDOUMsQ0FBQyxlQUFlLGdDQUFnQyxFQUFFLEdBQUc7QUFBQSxRQUNyRCxDQUFDLGVBQWUscUNBQXFDLEVBQUUsR0FBRztBQUFBLFFBQzFELENBQUMsZUFBZSxvQkFBb0IsRUFBRSxHQUFHO0FBQUEsUUFDekMsQ0FBQyxlQUFlLDJDQUEyQyxFQUFFLEdBQUc7QUFBQSxNQUNsRTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxJQUFNLGtCQUVGO0FBQUEsRUFDRixHQUFHO0FBQUEsRUFDSDtBQUNGO0FBQ0EsSUFBTyxnQkFBUTsiLAogICJuYW1lcyI6IFtdCn0K
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 +1 @@
1
- {"name":"@checkdigit/eslint-plugin","version":"7.15.0-PR.117-a0b1","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.23.0","@typescript-eslint/utils":"^8.23.0","http-status-codes":"^2.3.0","ts-api-utils":"^2.0.1"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^6.1.0","@checkdigit/typescript-config":"^9.0.0","@eslint/js":"^9.19.0","@types/eslint":"^9.6.1","@types/eslint-config-prettier":"^6.11.3","@typescript-eslint/parser":"^8.23.0","@typescript-eslint/rule-tester":"^8.23.0","eslint":"^9.19.0","eslint-config-prettier":"^10.0.1","eslint-import-resolver-typescript":"^3.7.0","eslint-plugin-eslint-plugin":"^6.4.0","eslint-plugin-import":"^2.31.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.23.0"},"peerDependencies":{"eslint":">=9 <10"},"engines":{"node":">=22.14"}}
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,13 +26,13 @@ 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';
32
33
  import noSideEffects from './no-side-effects.ts';
33
34
  import noRandomV4UUID from './no-random-v4-uuid.ts';
34
35
  import noTestImport from './no-test-import.ts';
35
- import noTypeAssertionAs from './no-type-assertion-as.ts';
36
36
  import noUtil from './no-util.ts';
37
37
  import noUuid from './no-uuid.ts';
38
38
  import noWallabyComment from './no-wallaby-comment.ts';
@@ -57,7 +57,6 @@ const rules: Record<string, TSESLint.LooseRuleDefinition> = {
57
57
  'no-test-import': noTestImport,
58
58
  'no-wallaby-comment': noWallabyComment,
59
59
  'no-side-effects': noSideEffects,
60
- 'no-type-assertion-as': noTypeAssertionAs,
61
60
  'regular-expression-comment': regexComment,
62
61
  'require-assert-predicate-rejects-throws': requireAssertPredicateRejectsThrows,
63
62
  'object-literal-response': objectLiteralResponse,
@@ -68,6 +67,7 @@ const rules: Record<string, TSESLint.LooseRuleDefinition> = {
68
67
  [noDuplicatedImportsRuleId]: noDuplicatedImports,
69
68
  [noServeRuntimeRuleId]: noServeRuntime,
70
69
  [requireServiceCallResponseDeclarationRuleId]: requireServiceCallResponseDeclaration,
70
+ [requireAwsConfigRuleId]: requireAwsConfig,
71
71
  [requireFixedServicesImportRuleId]: requireFixedServicesImport,
72
72
  [requireTypeOutOfTypeOnlyImportsRuleId]: requireTypeOutOfTypeOnlyImports,
73
73
  };
@@ -96,7 +96,6 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
96
96
  '@checkdigit/require-ts-extension-imports-exports': 'error',
97
97
  '@checkdigit/no-wallaby-comment': 'error',
98
98
  '@checkdigit/no-side-effects': 'error',
99
- '@checkdigit/no-type-assertion-as': 'error',
100
99
  '@checkdigit/regular-expression-comment': 'error',
101
100
  '@checkdigit/require-assert-predicate-rejects-throws': 'error',
102
101
  '@checkdigit/object-literal-response': 'error',
@@ -110,6 +109,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
110
109
  [`@checkdigit/${requireTypeOutOfTypeOnlyImportsRuleId}`]: 'error',
111
110
  [`@checkdigit/${noServeRuntimeRuleId}`]: 'error',
112
111
  [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: 'error',
112
+ [`@checkdigit/${requireAwsConfigRuleId}`]: 'error',
113
113
  },
114
114
  },
115
115
  ],
@@ -132,7 +132,6 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
132
132
  '@checkdigit/require-ts-extension-imports-exports': 'error',
133
133
  '@checkdigit/no-wallaby-comment': 'off',
134
134
  '@checkdigit/no-side-effects': 'error',
135
- '@checkdigit/no-type-assertion-as': 'error',
136
135
  '@checkdigit/regular-expression-comment': 'error',
137
136
  '@checkdigit/require-assert-predicate-rejects-throws': 'error',
138
137
  '@checkdigit/object-literal-response': 'error',
@@ -146,6 +145,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
146
145
  [`@checkdigit/${requireTypeOutOfTypeOnlyImportsRuleId}`]: 'error',
147
146
  [`@checkdigit/${noServeRuntimeRuleId}`]: 'off',
148
147
  [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: 'off',
148
+ [`@checkdigit/${requireAwsConfigRuleId}`]: 'off',
149
149
  },
150
150
  },
151
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;
@@ -1,46 +0,0 @@
1
- // src/no-type-assertion-as.ts
2
- import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
3
- var ruleId = "no-as-type-assertion";
4
- var NO_AS_TYPE_ASSERTION = "NO_AS_TYPE_ASSERTION";
5
- var createRule = ESLintUtils.RuleCreator((name) => name);
6
- var rule = createRule({
7
- name: ruleId,
8
- meta: {
9
- type: "problem",
10
- docs: {
11
- description: "Disallow the use of `as` type assertions and suggest using `satisfies` instead"
12
- },
13
- schema: [],
14
- messages: {
15
- [NO_AS_TYPE_ASSERTION]: "Avoid using `as` type assertions. Use `satisfies` instead."
16
- }
17
- },
18
- defaultOptions: [],
19
- create(context) {
20
- const parserServices = ESLintUtils.getParserServices(context);
21
- const checker = parserServices.program.getTypeChecker();
22
- return {
23
- TSAsExpression(node) {
24
- if (node.parent.type === AST_NODE_TYPES.TSAsExpression) {
25
- return;
26
- }
27
- const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node.expression);
28
- const originalType = checker.getTypeAtLocation(tsNode);
29
- const targetType = checker.getTypeAtLocation(parserServices.esTreeNodeToTSNodeMap.get(node.typeAnnotation));
30
- if (!checker.isTypeAssignableTo(originalType, targetType)) {
31
- return;
32
- }
33
- context.report({
34
- node,
35
- messageId: NO_AS_TYPE_ASSERTION
36
- });
37
- }
38
- };
39
- }
40
- });
41
- var no_type_assertion_as_default = rule;
42
- export {
43
- no_type_assertion_as_default as default,
44
- ruleId
45
- };
46
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vLXR5cGUtYXNzZXJ0aW9uLWFzLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLFNBQVMsZ0JBQWdCLG1CQUE2QjtBQUUvQyxJQUFNLFNBQVM7QUFDdEIsSUFBTSx1QkFBdUI7QUFFN0IsSUFBTSxhQUFhLFlBQVksWUFBWSxDQUFDLFNBQVMsSUFBSTtBQUV6RCxJQUFNLE9BQTRELFdBQVc7QUFBQSxFQUMzRSxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsUUFBUSxDQUFDO0FBQUEsSUFDVCxVQUFVO0FBQUEsTUFDUixDQUFDLG9CQUFvQixHQUFHO0FBQUEsSUFDMUI7QUFBQSxFQUNGO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLFVBQU0saUJBQWlCLFlBQVksa0JBQWtCLE9BQU87QUFDNUQsVUFBTSxVQUFVLGVBQWUsUUFBUSxlQUFlO0FBRXRELFdBQU87QUFBQSxNQUNMLGVBQWUsTUFBK0I7QUFDNUMsWUFBSSxLQUFLLE9BQU8sU0FBUyxlQUFlLGdCQUFnQjtBQUN0RDtBQUFBLFFBQ0Y7QUFFQSxjQUFNLFNBQVMsZUFBZSxzQkFBc0IsSUFBSSxLQUFLLFVBQVU7QUFDdkUsY0FBTSxlQUFlLFFBQVEsa0JBQWtCLE1BQU07QUFDckQsY0FBTSxhQUFhLFFBQVEsa0JBQWtCLGVBQWUsc0JBQXNCLElBQUksS0FBSyxjQUFjLENBQUM7QUFHMUcsWUFBSSxDQUFDLFFBQVEsbUJBQW1CLGNBQWMsVUFBVSxHQUFHO0FBQ3pEO0FBQUEsUUFDRjtBQUVBLGdCQUFRLE9BQU87QUFBQSxVQUNiO0FBQUEsVUFDQSxXQUFXO0FBQUEsUUFDYixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sK0JBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -1,5 +0,0 @@
1
- import { ESLintUtils } from '@typescript-eslint/utils';
2
- export declare const ruleId = "no-as-type-assertion";
3
- declare const NO_AS_TYPE_ASSERTION = "NO_AS_TYPE_ASSERTION";
4
- declare const rule: ESLintUtils.RuleModule<typeof NO_AS_TYPE_ASSERTION>;
5
- export default rule;
@@ -1,57 +0,0 @@
1
- // no-type-assertion-as.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, TSESTree } from '@typescript-eslint/utils';
10
-
11
- export const ruleId = 'no-as-type-assertion';
12
- const NO_AS_TYPE_ASSERTION = 'NO_AS_TYPE_ASSERTION';
13
-
14
- const createRule = ESLintUtils.RuleCreator((name) => name);
15
-
16
- const rule: ESLintUtils.RuleModule<typeof NO_AS_TYPE_ASSERTION> = createRule({
17
- name: ruleId,
18
- meta: {
19
- type: 'problem',
20
- docs: {
21
- description: 'Disallow the use of `as` type assertions and suggest using `satisfies` instead',
22
- },
23
- schema: [],
24
- messages: {
25
- [NO_AS_TYPE_ASSERTION]: 'Avoid using `as` type assertions. Use `satisfies` instead.',
26
- },
27
- },
28
- defaultOptions: [],
29
- create(context) {
30
- const parserServices = ESLintUtils.getParserServices(context);
31
- const checker = parserServices.program.getTypeChecker();
32
-
33
- return {
34
- TSAsExpression(node: TSESTree.TSAsExpression) {
35
- if (node.parent.type === AST_NODE_TYPES.TSAsExpression) {
36
- return;
37
- }
38
-
39
- const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node.expression);
40
- const originalType = checker.getTypeAtLocation(tsNode);
41
- const targetType = checker.getTypeAtLocation(parserServices.esTreeNodeToTSNodeMap.get(node.typeAnnotation));
42
-
43
- // Ensure the types are not assignable
44
- if (!checker.isTypeAssignableTo(originalType, targetType)) {
45
- return;
46
- }
47
-
48
- context.report({
49
- node,
50
- messageId: NO_AS_TYPE_ASSERTION,
51
- });
52
- },
53
- };
54
- },
55
- });
56
-
57
- export default rule;