@checkdigit/eslint-plugin 7.16.0 → 7.17.0-PR.137-4843
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.
- package/dist-mjs/aws/require-aws-bare-bones.mjs +54 -0
- package/dist-mjs/index.mjs +8 -4
- package/dist-mjs/invalid-json-stringify.mjs +2 -2
- package/dist-mjs/object-literal-response.mjs +3 -3
- package/dist-types/aws/require-aws-bare-bones.d.ts +5 -0
- package/package.json +1 -96
- package/src/aws/require-aws-bare-bones.ts +67 -0
- package/src/index.ts +5 -1
- package/src/invalid-json-stringify.ts +1 -1
- package/src/object-literal-response.ts +2 -2
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// src/aws/require-aws-bare-bones.ts
|
|
2
|
+
import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
|
|
3
|
+
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
4
|
+
var ruleId = "require-aws-bare-bones";
|
|
5
|
+
var MESSAGE_ID_AGGREGATED_CLIENT = "noAggregatedClient";
|
|
6
|
+
var BARE_BONES_SUFFIXES = /(?:Client|Command|Exception|Input|Output)$/u;
|
|
7
|
+
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
8
|
+
function isAwsSdkClientModule(importDeclaration) {
|
|
9
|
+
return typeof importDeclaration.source.value === "string" && importDeclaration.source.value.startsWith("@aws-sdk/client-");
|
|
10
|
+
}
|
|
11
|
+
function isAggregatedClient(name) {
|
|
12
|
+
return !BARE_BONES_SUFFIXES.test(name);
|
|
13
|
+
}
|
|
14
|
+
var rule = createRule({
|
|
15
|
+
name: ruleId,
|
|
16
|
+
meta: {
|
|
17
|
+
type: "problem",
|
|
18
|
+
docs: {
|
|
19
|
+
description: "Disallow importing aggregated AWS SDK v3 clients. Use bare-bones pattern (Client + Command) for better tree-shaking."
|
|
20
|
+
},
|
|
21
|
+
messages: {
|
|
22
|
+
[MESSAGE_ID_AGGREGATED_CLIENT]: 'Do not import aggregated AWS SDK v3 client "{{clientName}}". Use bare-bones pattern ({{clientName}}Client + Command) instead.'
|
|
23
|
+
},
|
|
24
|
+
schema: []
|
|
25
|
+
},
|
|
26
|
+
defaultOptions: [],
|
|
27
|
+
create(context) {
|
|
28
|
+
return {
|
|
29
|
+
ImportDeclaration(node) {
|
|
30
|
+
if (!isAwsSdkClientModule(node)) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
for (const specifier of node.specifiers) {
|
|
34
|
+
const isTypeImport = specifier.type === AST_NODE_TYPES.ImportSpecifier && specifier.importKind === "type";
|
|
35
|
+
const isException = specifier.local.name.endsWith("Exception");
|
|
36
|
+
if (specifier.type === AST_NODE_TYPES.ImportSpecifier && !isTypeImport && !isException && isAggregatedClient(specifier.local.name)) {
|
|
37
|
+
context.report({
|
|
38
|
+
node: specifier,
|
|
39
|
+
messageId: MESSAGE_ID_AGGREGATED_CLIENT,
|
|
40
|
+
data: { clientName: specifier.local.name }
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
var require_aws_bare_bones_default = rule;
|
|
49
|
+
export {
|
|
50
|
+
MESSAGE_ID_AGGREGATED_CLIENT,
|
|
51
|
+
require_aws_bare_bones_default as default,
|
|
52
|
+
ruleId
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2F3cy9yZXF1aXJlLWF3cy1iYXJlLWJvbmVzLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLFNBQVMsZ0JBQWdCLG1CQUE2QjtBQUN0RCxPQUFPLHlCQUF5QjtBQUV6QixJQUFNLFNBQVM7QUFDZixJQUFNLCtCQUErQjtBQUU1QyxJQUFNLHNCQUFzQjtBQUU1QixJQUFNLGFBQWEsWUFBWSxZQUFZLENBQUMsU0FBUyxvQkFBb0IsSUFBSSxDQUFDO0FBRTlFLFNBQVMscUJBQXFCLG1CQUF3RDtBQUNwRixTQUNFLE9BQU8sa0JBQWtCLE9BQU8sVUFBVSxZQUFZLGtCQUFrQixPQUFPLE1BQU0sV0FBVyxrQkFBa0I7QUFFdEg7QUFFQSxTQUFTLG1CQUFtQixNQUF1QjtBQUNqRCxTQUFPLENBQUMsb0JBQW9CLEtBQUssSUFBSTtBQUN2QztBQUVBLElBQU0sT0FBb0UsV0FBVztBQUFBLEVBQ25GLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQ0U7QUFBQSxJQUNKO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixDQUFDLDRCQUE0QixHQUMzQjtBQUFBLElBQ0o7QUFBQSxJQUNBLFFBQVEsQ0FBQztBQUFBLEVBQ1g7QUFBQSxFQUNBLGdCQUFnQixDQUFDO0FBQUEsRUFDakIsT0FBTyxTQUFTO0FBQ2QsV0FBTztBQUFBLE1BQ0wsa0JBQWtCLE1BQU07QUFDdEIsWUFBSSxDQUFDLHFCQUFxQixJQUFJLEdBQUc7QUFDL0I7QUFBQSxRQUNGO0FBRUEsbUJBQVcsYUFBYSxLQUFLLFlBQVk7QUFDdkMsZ0JBQU0sZUFBZSxVQUFVLFNBQVMsZUFBZSxtQkFBbUIsVUFBVSxlQUFlO0FBQ25HLGdCQUFNLGNBQWMsVUFBVSxNQUFNLEtBQUssU0FBUyxXQUFXO0FBRTdELGNBQ0UsVUFBVSxTQUFTLGVBQWUsbUJBQ2xDLENBQUMsZ0JBQ0QsQ0FBQyxlQUNELG1CQUFtQixVQUFVLE1BQU0sSUFBSSxHQUN2QztBQUNBLG9CQUFRLE9BQU87QUFBQSxjQUNiLE1BQU07QUFBQSxjQUNOLFdBQVc7QUFBQSxjQUNYLE1BQU0sRUFBRSxZQUFZLFVBQVUsTUFBTSxLQUFLO0FBQUEsWUFDM0MsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8saUNBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/dist-mjs/index.mjs
CHANGED
|
@@ -17,8 +17,9 @@ 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 requireConsistentRead, { ruleId as requireConsistentReadRuleId } from "./aws/require-consistent-read.mjs";
|
|
21
20
|
import requireAwsConfig, { ruleId as requireAwsConfigRuleId } from "./aws/require-aws-config.mjs";
|
|
21
|
+
import requireAWSBareBones, { ruleId as requireAWSBareBonesRuleId } from "./aws/require-aws-bare-bones.mjs";
|
|
22
|
+
import requireConsistentRead, { ruleId as requireConsistentReadRuleId } from "./aws/require-consistent-read.mjs";
|
|
22
23
|
import filePathComment from "./file-path-comment.mjs";
|
|
23
24
|
import noCardNumbers from "./no-card-numbers.mjs";
|
|
24
25
|
import noEnum from "./no-enum.mjs";
|
|
@@ -62,6 +63,7 @@ var rules = {
|
|
|
62
63
|
[requireAwsConfigRuleId]: requireAwsConfig,
|
|
63
64
|
[requireFixedServicesImportRuleId]: requireFixedServicesImport,
|
|
64
65
|
[requireTypeOutOfTypeOnlyImportsRuleId]: requireTypeOutOfTypeOnlyImports,
|
|
66
|
+
[requireAWSBareBonesRuleId]: requireAWSBareBones,
|
|
65
67
|
[requireConsistentReadRuleId]: requireConsistentRead
|
|
66
68
|
};
|
|
67
69
|
var plugin = {
|
|
@@ -101,7 +103,8 @@ var configs = {
|
|
|
101
103
|
[`@checkdigit/${noServeRuntimeRuleId}`]: "error",
|
|
102
104
|
[`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: "error",
|
|
103
105
|
[`@checkdigit/${requireConsistentReadRuleId}`]: "error",
|
|
104
|
-
[`@checkdigit/${requireAwsConfigRuleId}`]: "error"
|
|
106
|
+
[`@checkdigit/${requireAwsConfigRuleId}`]: "error",
|
|
107
|
+
[`@checkdigit/${requireAWSBareBonesRuleId}`]: "error"
|
|
105
108
|
}
|
|
106
109
|
}
|
|
107
110
|
],
|
|
@@ -138,7 +141,8 @@ var configs = {
|
|
|
138
141
|
[`@checkdigit/${noServeRuntimeRuleId}`]: "off",
|
|
139
142
|
[`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: "off",
|
|
140
143
|
[`@checkdigit/${requireConsistentReadRuleId}`]: "off",
|
|
141
|
-
[`@checkdigit/${requireAwsConfigRuleId}`]: "off"
|
|
144
|
+
[`@checkdigit/${requireAwsConfigRuleId}`]: "off",
|
|
145
|
+
[`@checkdigit/${requireAWSBareBonesRuleId}`]: "off"
|
|
142
146
|
}
|
|
143
147
|
}
|
|
144
148
|
]
|
|
@@ -152,4 +156,4 @@ export {
|
|
|
152
156
|
index_default as default,
|
|
153
157
|
default2 as isAwsSdkV3Used
|
|
154
158
|
};
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,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
|
|
@@ -33,7 +33,7 @@ var invalid_json_stringify_default = {
|
|
|
33
33
|
CallExpression(node) {
|
|
34
34
|
if (node.callee.type === "MemberExpression" && node.callee.object.type === "Identifier" && node.callee.object.name === "JSON" && node.callee.property.type === "Identifier" && node.callee.property.name === "stringify") {
|
|
35
35
|
const argument = node.arguments[0];
|
|
36
|
-
if (argument
|
|
36
|
+
if (argument?.type === "Identifier") {
|
|
37
37
|
invalidParameterNamePatterns.some((invalidParameterNamePattern) => {
|
|
38
38
|
if (invalidParameterNamePattern.test(argument.name)) {
|
|
39
39
|
context.report({
|
|
@@ -69,4 +69,4 @@ export {
|
|
|
69
69
|
invalid_json_stringify_default as default,
|
|
70
70
|
ruleId
|
|
71
71
|
};
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2ludmFsaWQtanNvbi1zdHJpbmdpZnkudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBR0EsT0FBTyx5QkFBeUI7QUFRekIsSUFBTSxTQUFTO0FBQ2YsSUFBTSx5QkFBeUI7QUFDdEMsSUFBTSxrQkFBa0IsQ0FBQyxlQUFlO0FBRXhDLElBQU8saUNBQVE7QUFBQSxFQUNiLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQ0U7QUFBQSxNQUNGLEtBQUssb0JBQW9CLE1BQU07QUFBQSxJQUNqQztBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ047QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLE9BQU87QUFBQSxVQUNMLGFBQWE7QUFBQSxVQUNiLE1BQU07QUFBQSxVQUNOLFVBQVU7QUFBQSxRQUNaO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsc0JBQXNCLEdBQUc7QUFBQSxJQUM1QjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1QsZ0JBQWdCO0FBQUEsRUFDbEI7QUFBQSxFQUNBLE9BQU8sU0FBUztBQUNkLFVBQU0sVUFBVyxRQUFRLFFBQVEsQ0FBQyxLQUFLO0FBQ3ZDLFVBQU0sK0JBQStCLFFBQVEsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLFFBQVEsR0FBRyxDQUFDO0FBRXBGLFdBQU87QUFBQSxNQUNMLGVBQWUsTUFBTTtBQUNuQixZQUNFLEtBQUssT0FBTyxTQUFTLHNCQUNyQixLQUFLLE9BQU8sT0FBTyxTQUFTLGdCQUM1QixLQUFLLE9BQU8sT0FBTyxTQUFTLFVBQzVCLEtBQUssT0FBTyxTQUFTLFNBQVMsZ0JBQzlCLEtBQUssT0FBTyxTQUFTLFNBQVMsYUFDOUI7QUFDQSxnQkFBTSxXQUFXLEtBQUssVUFBVSxDQUFDO0FBQ2pDLGNBQUksVUFBVSxTQUFTLGNBQWM7QUFDbkMseUNBQTZCLEtBQUssQ0FBQyxnQ0FBZ0M7QUFDakUsa0JBQUksNEJBQTRCLEtBQUssU0FBUyxJQUFJLEdBQUc7QUFDbkQsd0JBQVEsT0FBTztBQUFBLGtCQUNiO0FBQUEsa0JBQ0EsV0FBVztBQUFBLGtCQUNYLE1BQU07QUFBQSxvQkFDSixlQUFlLFNBQVM7QUFBQSxrQkFDMUI7QUFBQSxrQkFDQSxTQUFTO0FBQUEsb0JBQ1A7QUFBQSxzQkFDRSxXQUFXO0FBQUEsc0JBQ1gsTUFBTTtBQUFBLHdCQUNKLGVBQWUsU0FBUztBQUFBLHNCQUMxQjtBQUFBLHNCQUNBLElBQUksT0FBTztBQUNULCtCQUFPLE1BQU0sWUFBWSxNQUFNLFVBQVUsU0FBUyxJQUFJLEdBQUc7QUFBQSxzQkFDM0Q7QUFBQSxvQkFDRjtBQUFBLGtCQUNGO0FBQUEsZ0JBQ0YsQ0FBQztBQUNELHVCQUFPO0FBQUEsY0FDVDtBQUNBLHFCQUFPO0FBQUEsWUFDVCxDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -38,7 +38,7 @@ var object_literal_response_default = {
|
|
|
38
38
|
messageId: REQUIRE_OBJECT_LITERAL_MESSAGE_ID
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
|
-
if (responseContext
|
|
41
|
+
if (responseContext?.type === "ObjectExpression") {
|
|
42
42
|
const headers = responseContext.properties.find(
|
|
43
43
|
(property) => property.type === "Property" && property.key.type === "Identifier" && property.key.name === "headers"
|
|
44
44
|
);
|
|
@@ -49,7 +49,7 @@ var object_literal_response_default = {
|
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
if (responseContext
|
|
52
|
+
if (responseContext?.type === "ObjectExpression") {
|
|
53
53
|
const status = responseContext.properties.find(
|
|
54
54
|
(property) => property.type === "Property" && property.key.type === "Identifier" && property.key.name === "status"
|
|
55
55
|
);
|
|
@@ -85,4 +85,4 @@ export {
|
|
|
85
85
|
REQUIRE_OBJECT_LITERAL_MESSAGE_ID,
|
|
86
86
|
object_literal_response_default as default
|
|
87
87
|
};
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL29iamVjdC1saXRlcmFsLXJlc3BvbnNlLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVdPLElBQU0sb0NBQW9DO0FBQzFDLElBQU0sdURBQ1g7QUFDSyxJQUFNLGdEQUFnRDtBQUc3RCxJQUFNLHFCQUFxQixDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRztBQUdsRSxJQUFNLHlCQUF5QjtBQUFBLEVBQzdCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGO0FBRUEsSUFBTyxrQ0FBUTtBQUFBLEVBQ2IsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFDRTtBQUFBLE1BQ0YsS0FBSztBQUFBLElBQ1A7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsaUNBQWlDLEdBQUc7QUFBQSxNQUNyQyxDQUFDLG9EQUFvRCxHQUFHO0FBQUEsTUFDeEQsQ0FBQyw2Q0FBNkMsR0FBRztBQUFBLElBQ25EO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTyxTQUFTO0FBQ2QsV0FBTztBQUFBO0FBQUEsTUFFTCxlQUFlLE1BQXNCO0FBQ25DLFlBQUksS0FBSyxPQUFPLFNBQVMsZ0JBQWdCLEtBQUssT0FBTyxTQUFTLGVBQWU7QUFDM0UsZ0JBQU0sa0JBQWtCLEtBQUssVUFBVSxDQUFDO0FBR3hDLGNBQUksbUJBQW1CLGdCQUFnQixTQUFTLG9CQUFvQjtBQUNsRSxvQkFBUSxPQUFPO0FBQUEsY0FDYixNQUFNO0FBQUEsY0FDTixXQUFXO0FBQUEsWUFDYixDQUFDO0FBQUEsVUFDSDtBQUdBLGNBQUksaUJBQWlCLFNBQVMsb0JBQW9CO0FBQ2hELGtCQUFNLFVBQVUsZ0JBQWdCLFdBQVc7QUFBQSxjQUN6QyxDQUFDLGFBQ0MsU0FBUyxTQUFTLGNBQWMsU0FBUyxJQUFJLFNBQVMsZ0JBQWdCLFNBQVMsSUFBSSxTQUFTO0FBQUEsWUFDaEc7QUFDQSxnQkFBSSxZQUFZLFVBQWEsUUFBUSxNQUFNLFNBQVMsb0JBQW9CO0FBQ3RFLHNCQUFRLE9BQU87QUFBQSxnQkFDYixNQUFNO0FBQUEsZ0JBQ04sV0FBVztBQUFBLGNBQ2IsQ0FBQztBQUFBLFlBQ0g7QUFBQSxVQUNGO0FBR0EsY0FBSSxpQkFBaUIsU0FBUyxvQkFBb0I7QUFDaEQsa0JBQU0sU0FBUyxnQkFBZ0IsV0FBVztBQUFBLGNBQ3hDLENBQUMsYUFDQyxTQUFTLFNBQVMsY0FBYyxTQUFTLElBQUksU0FBUyxnQkFBZ0IsU0FBUyxJQUFJLFNBQVM7QUFBQSxZQUNoRztBQUNBLGdCQUFJO0FBQ0osZ0JBQUksT0FBTyxNQUFNLFNBQVMsb0JBQW9CO0FBQzVDLHFDQUNFLE9BQU8sTUFBTSxPQUFPLFNBQVMsZ0JBQzdCLE9BQU8sTUFBTSxPQUFPLFNBQVMsaUJBQzdCLE9BQU8sTUFBTSxTQUFTLFNBQVMsZ0JBQy9CLHVCQUF1QixTQUFTLE9BQU8sTUFBTSxTQUFTLElBQUk7QUFBQSxZQUM5RCxXQUFXLE9BQU8sTUFBTSxTQUFTLFdBQVc7QUFDMUMscUNBQ0UsT0FBTyxPQUFPLE1BQU0sVUFBVSxZQUFZLG1CQUFtQixTQUFTLE9BQU8sTUFBTSxLQUFLO0FBQUEsWUFDNUY7QUFDQSxnQkFBSSx5QkFBeUIsT0FBTztBQUVsQyxvQkFBTSxPQUFPLGdCQUFnQixXQUFXO0FBQUEsZ0JBQ3RDLENBQUMsYUFDQyxTQUFTLFNBQVMsY0FBYyxTQUFTLElBQUksU0FBUyxnQkFBZ0IsU0FBUyxJQUFJLFNBQVM7QUFBQSxjQUNoRztBQUNBLGtCQUFJLFNBQVMsUUFBVztBQUN0QjtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxLQUFLLE1BQU0sU0FBUyxvQkFBb0I7QUFDMUMsd0JBQVEsT0FBTztBQUFBLGtCQUNiLE1BQU07QUFBQSxrQkFDTixXQUFXO0FBQUEsZ0JBQ2IsQ0FBQztBQUFBLGNBQ0g7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
2
|
+
export declare const ruleId = "require-aws-bare-bones";
|
|
3
|
+
export declare const MESSAGE_ID_AGGREGATED_CLIENT = "noAggregatedClient";
|
|
4
|
+
declare const rule: ESLintUtils.RuleModule<typeof MESSAGE_ID_AGGREGATED_CLIENT>;
|
|
5
|
+
export default rule;
|
package/package.json
CHANGED
|
@@ -1,96 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@checkdigit/eslint-plugin",
|
|
3
|
-
"version": "7.16.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.46.0",
|
|
65
|
-
"@typescript-eslint/utils": "^8.46.0",
|
|
66
|
-
"http-status-codes": "^2.3.0",
|
|
67
|
-
"ts-api-utils": "^2.1.0"
|
|
68
|
-
},
|
|
69
|
-
"devDependencies": {
|
|
70
|
-
"@checkdigit/jest-config": "^6.0.2",
|
|
71
|
-
"@checkdigit/prettier-config": "^6.1.0",
|
|
72
|
-
"@checkdigit/typescript-config": "^9.3.2",
|
|
73
|
-
"@eslint/js": "^9.37.0",
|
|
74
|
-
"@types/eslint": "^9.6.1",
|
|
75
|
-
"@types/eslint-config-prettier": "^6.11.3",
|
|
76
|
-
"@typescript-eslint/parser": "^8.46.0",
|
|
77
|
-
"@typescript-eslint/rule-tester": "^8.46.0",
|
|
78
|
-
"eslint": "^9.37.0",
|
|
79
|
-
"eslint-config-prettier": "^10.1.8",
|
|
80
|
-
"eslint-import-resolver-typescript": "^4.4.4",
|
|
81
|
-
"eslint-plugin-eslint-plugin": "^6.4.0",
|
|
82
|
-
"eslint-plugin-import": "^2.32.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.46.0"
|
|
89
|
-
},
|
|
90
|
-
"peerDependencies": {
|
|
91
|
-
"eslint": ">=9 <10"
|
|
92
|
-
},
|
|
93
|
-
"engines": {
|
|
94
|
-
"node": ">=22.18"
|
|
95
|
-
}
|
|
96
|
-
}
|
|
1
|
+
{"name":"@checkdigit/eslint-plugin","version":"7.17.0-PR.137-4843","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.46.0","@typescript-eslint/utils":"^8.46.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.2","@eslint/js":"^9.37.0","@types/eslint":"^9.6.1","@types/eslint-config-prettier":"^6.11.3","@typescript-eslint/parser":"^8.46.0","@typescript-eslint/rule-tester":"^8.46.0","eslint":"^9.37.0","eslint-config-prettier":"^10.1.8","eslint-import-resolver-typescript":"^4.4.4","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.46.0"},"peerDependencies":{"eslint":">=9 <10"},"engines":{"node":">=22.18"}}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// require-aws-bare-bones.ts
|
|
2
|
+
|
|
3
|
+
import { AST_NODE_TYPES, ESLintUtils, TSESTree } from '@typescript-eslint/utils';
|
|
4
|
+
import getDocumentationUrl from '../get-documentation-url.ts';
|
|
5
|
+
|
|
6
|
+
export const ruleId = 'require-aws-bare-bones';
|
|
7
|
+
export const MESSAGE_ID_AGGREGATED_CLIENT = 'noAggregatedClient';
|
|
8
|
+
|
|
9
|
+
const BARE_BONES_SUFFIXES = /(?:Client|Command|Exception|Input|Output)$/u;
|
|
10
|
+
|
|
11
|
+
const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
12
|
+
|
|
13
|
+
function isAwsSdkClientModule(importDeclaration: TSESTree.ImportDeclaration): boolean {
|
|
14
|
+
return (
|
|
15
|
+
typeof importDeclaration.source.value === 'string' && importDeclaration.source.value.startsWith('@aws-sdk/client-')
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function isAggregatedClient(name: string): boolean {
|
|
20
|
+
return !BARE_BONES_SUFFIXES.test(name);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const rule: ESLintUtils.RuleModule<typeof MESSAGE_ID_AGGREGATED_CLIENT> = createRule({
|
|
24
|
+
name: ruleId,
|
|
25
|
+
meta: {
|
|
26
|
+
type: 'problem',
|
|
27
|
+
docs: {
|
|
28
|
+
description:
|
|
29
|
+
'Disallow importing aggregated AWS SDK v3 clients. Use bare-bones pattern (Client + Command) for better tree-shaking.',
|
|
30
|
+
},
|
|
31
|
+
messages: {
|
|
32
|
+
[MESSAGE_ID_AGGREGATED_CLIENT]:
|
|
33
|
+
'Do not import aggregated AWS SDK v3 client "{{clientName}}". Use bare-bones pattern ({{clientName}}Client + Command) instead.',
|
|
34
|
+
},
|
|
35
|
+
schema: [],
|
|
36
|
+
},
|
|
37
|
+
defaultOptions: [],
|
|
38
|
+
create(context) {
|
|
39
|
+
return {
|
|
40
|
+
ImportDeclaration(node) {
|
|
41
|
+
if (!isAwsSdkClientModule(node)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
for (const specifier of node.specifiers) {
|
|
46
|
+
const isTypeImport = specifier.type === AST_NODE_TYPES.ImportSpecifier && specifier.importKind === 'type';
|
|
47
|
+
const isException = specifier.local.name.endsWith('Exception');
|
|
48
|
+
|
|
49
|
+
if (
|
|
50
|
+
specifier.type === AST_NODE_TYPES.ImportSpecifier &&
|
|
51
|
+
!isTypeImport &&
|
|
52
|
+
!isException &&
|
|
53
|
+
isAggregatedClient(specifier.local.name)
|
|
54
|
+
) {
|
|
55
|
+
context.report({
|
|
56
|
+
node: specifier,
|
|
57
|
+
messageId: MESSAGE_ID_AGGREGATED_CLIENT,
|
|
58
|
+
data: { clientName: specifier.local.name },
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
export default rule;
|
package/src/index.ts
CHANGED
|
@@ -26,8 +26,9 @@ 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 requireConsistentRead, { ruleId as requireConsistentReadRuleId } from './aws/require-consistent-read.ts';
|
|
30
29
|
import requireAwsConfig, { ruleId as requireAwsConfigRuleId } from './aws/require-aws-config.ts';
|
|
30
|
+
import requireAWSBareBones, { ruleId as requireAWSBareBonesRuleId } from './aws/require-aws-bare-bones.ts';
|
|
31
|
+
import requireConsistentRead, { ruleId as requireConsistentReadRuleId } from './aws/require-consistent-read.ts';
|
|
31
32
|
import filePathComment from './file-path-comment.ts';
|
|
32
33
|
import noCardNumbers from './no-card-numbers.ts';
|
|
33
34
|
import noEnum from './no-enum.ts';
|
|
@@ -73,6 +74,7 @@ const rules: Record<string, TSESLint.LooseRuleDefinition> = {
|
|
|
73
74
|
[requireAwsConfigRuleId]: requireAwsConfig,
|
|
74
75
|
[requireFixedServicesImportRuleId]: requireFixedServicesImport,
|
|
75
76
|
[requireTypeOutOfTypeOnlyImportsRuleId]: requireTypeOutOfTypeOnlyImports,
|
|
77
|
+
[requireAWSBareBonesRuleId]: requireAWSBareBones,
|
|
76
78
|
[requireConsistentReadRuleId]: requireConsistentRead,
|
|
77
79
|
};
|
|
78
80
|
|
|
@@ -115,6 +117,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
|
|
|
115
117
|
[`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: 'error',
|
|
116
118
|
[`@checkdigit/${requireConsistentReadRuleId}`]: 'error',
|
|
117
119
|
[`@checkdigit/${requireAwsConfigRuleId}`]: 'error',
|
|
120
|
+
[`@checkdigit/${requireAWSBareBonesRuleId}`]: 'error',
|
|
118
121
|
},
|
|
119
122
|
},
|
|
120
123
|
],
|
|
@@ -152,6 +155,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
|
|
|
152
155
|
[`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: 'off',
|
|
153
156
|
[`@checkdigit/${requireConsistentReadRuleId}`]: 'off',
|
|
154
157
|
[`@checkdigit/${requireAwsConfigRuleId}`]: 'off',
|
|
158
|
+
[`@checkdigit/${requireAWSBareBonesRuleId}`]: 'off',
|
|
155
159
|
},
|
|
156
160
|
},
|
|
157
161
|
],
|
|
@@ -51,7 +51,7 @@ export default {
|
|
|
51
51
|
node.callee.property.name === 'stringify'
|
|
52
52
|
) {
|
|
53
53
|
const argument = node.arguments[0];
|
|
54
|
-
if (argument
|
|
54
|
+
if (argument?.type === 'Identifier') {
|
|
55
55
|
invalidParameterNamePatterns.some((invalidParameterNamePattern) => {
|
|
56
56
|
if (invalidParameterNamePattern.test(argument.name)) {
|
|
57
57
|
context.report({
|
|
@@ -59,7 +59,7 @@ export default {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
// check response headers
|
|
62
|
-
if (responseContext
|
|
62
|
+
if (responseContext?.type === 'ObjectExpression') {
|
|
63
63
|
const headers = responseContext.properties.find(
|
|
64
64
|
(property) =>
|
|
65
65
|
property.type === 'Property' && property.key.type === 'Identifier' && property.key.name === 'headers',
|
|
@@ -73,7 +73,7 @@ export default {
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
// check response body
|
|
76
|
-
if (responseContext
|
|
76
|
+
if (responseContext?.type === 'ObjectExpression') {
|
|
77
77
|
const status = responseContext.properties.find(
|
|
78
78
|
(property) =>
|
|
79
79
|
property.type === 'Property' && property.key.type === 'Identifier' && property.key.name === 'status',
|