@checkdigit/eslint-plugin 7.3.0-PR.75-dffd → 7.3.0-PR.75-e3bc
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/agent/add-assert-import.mjs +58 -0
- package/dist-mjs/agent/fix-function-call-arguments.mjs +2 -3
- package/dist-mjs/agent/no-service-wrapper.mjs +3 -3
- package/dist-mjs/agent/url.mjs +10 -4
- package/dist-mjs/index.mjs +13 -8
- package/dist-mjs/no-legacy-service-typing.mjs +39 -0
- package/dist-mjs/{agent/no-serve-runtime.mjs → no-serve-runtime.mjs} +3 -3
- package/dist-mjs/require-resolve-full-response.mjs +7 -5
- package/dist-types/agent/add-assert-import.d.ts +4 -0
- package/dist-types/agent/url.d.ts +1 -2
- package/dist-types/no-legacy-service-typing.d.ts +5 -0
- package/package.json +1 -1
- package/src/agent/add-assert-import.ts +74 -0
- package/src/agent/fix-function-call-arguments.ts +4 -2
- package/src/agent/no-service-wrapper.ts +2 -2
- package/src/agent/url.ts +11 -4
- package/src/index.ts +9 -4
- package/src/no-legacy-service-typing.ts +49 -0
- package/src/{agent/no-serve-runtime.ts → no-serve-runtime.ts} +2 -2
- package/src/require-resolve-full-response.ts +7 -5
- package/dist-mjs/agent/no-full-response.mjs +0 -35
- package/dist-types/agent/no-full-response.d.ts +0 -4
- package/src/agent/no-full-response.ts +0 -41
- /package/dist-types/{agent/no-serve-runtime.d.ts → no-serve-runtime.d.ts} +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// src/agent/add-assert-import.ts
|
|
2
|
+
import { strict as assert } from "node:assert";
|
|
3
|
+
import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
|
|
4
|
+
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
5
|
+
var ruleId = "add-assert-import";
|
|
6
|
+
var ASSERT_IMPORT_STATEMENT = "import { strict as assert } from 'node:assert';";
|
|
7
|
+
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
8
|
+
var rule = createRule({
|
|
9
|
+
name: ruleId,
|
|
10
|
+
meta: {
|
|
11
|
+
type: "suggestion",
|
|
12
|
+
docs: {
|
|
13
|
+
description: "Add import of assert module of node."
|
|
14
|
+
},
|
|
15
|
+
messages: {
|
|
16
|
+
addAssertImport: "Add import of assert module of node."
|
|
17
|
+
},
|
|
18
|
+
fixable: "code",
|
|
19
|
+
schema: []
|
|
20
|
+
},
|
|
21
|
+
defaultOptions: [],
|
|
22
|
+
create(context) {
|
|
23
|
+
let isAssertImported = false;
|
|
24
|
+
let isAssertUsed = false;
|
|
25
|
+
return {
|
|
26
|
+
ImportDeclaration: (node) => {
|
|
27
|
+
if (node.source.value === "assert" || node.source.value === "node:assert") {
|
|
28
|
+
isAssertImported = true;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
CallExpression: (callExpression) => {
|
|
32
|
+
if (callExpression.callee.type === AST_NODE_TYPES.Identifier && callExpression.callee.name === "assert" || callExpression.callee.type === AST_NODE_TYPES.MemberExpression && callExpression.callee.object.type === AST_NODE_TYPES.Identifier && callExpression.callee.object.name === "assert") {
|
|
33
|
+
isAssertUsed = true;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"Program:exit": (program) => {
|
|
37
|
+
if (isAssertUsed && !isAssertImported) {
|
|
38
|
+
const firstStatement = program.body[0];
|
|
39
|
+
assert(firstStatement);
|
|
40
|
+
context.report({
|
|
41
|
+
node: program,
|
|
42
|
+
messageId: "addAssertImport",
|
|
43
|
+
fix(fixer) {
|
|
44
|
+
return fixer.insertTextBefore(firstStatement, `${ASSERT_IMPORT_STATEMENT}
|
|
45
|
+
`);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
var add_assert_import_default = rule;
|
|
54
|
+
export {
|
|
55
|
+
add_assert_import_default as default,
|
|
56
|
+
ruleId
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L2FkZC1hc3NlcnQtaW1wb3J0LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLFNBQVMsVUFBVSxjQUFjO0FBRWpDLFNBQVMsZ0JBQWdCLG1CQUFtQjtBQUU1QyxPQUFPLHlCQUF5QjtBQUV6QixJQUFNLFNBQVM7QUFFdEIsSUFBTSwwQkFBMEI7QUFFaEMsSUFBTSxhQUFhLFlBQVksWUFBWSxDQUFDLFNBQVMsb0JBQW9CLElBQUksQ0FBQztBQUU5RSxJQUFNLE9BQWtELFdBQVc7QUFBQSxFQUNqRSxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsaUJBQWlCO0FBQUEsSUFDbkI7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULFFBQVEsQ0FBQztBQUFBLEVBQ1g7QUFBQSxFQUNBLGdCQUFnQixDQUFDO0FBQUEsRUFDakIsT0FBTyxTQUFTO0FBQ2QsUUFBSSxtQkFBbUI7QUFDdkIsUUFBSSxlQUFlO0FBRW5CLFdBQU87QUFBQSxNQUNMLG1CQUFtQixDQUFDLFNBQVM7QUFDM0IsWUFBSSxLQUFLLE9BQU8sVUFBVSxZQUFZLEtBQUssT0FBTyxVQUFVLGVBQWU7QUFDekUsNkJBQW1CO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBQUEsTUFDQSxnQkFBZ0IsQ0FBQyxtQkFBbUI7QUFFbEMsWUFDRyxlQUFlLE9BQU8sU0FBUyxlQUFlLGNBQWMsZUFBZSxPQUFPLFNBQVMsWUFDM0YsZUFBZSxPQUFPLFNBQVMsZUFBZSxvQkFDN0MsZUFBZSxPQUFPLE9BQU8sU0FBUyxlQUFlLGNBQ3JELGVBQWUsT0FBTyxPQUFPLFNBQVMsVUFDeEM7QUFDQSx5QkFBZTtBQUFBLFFBQ2pCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZ0JBQWdCLENBQUMsWUFBWTtBQUUzQixZQUFJLGdCQUFnQixDQUFDLGtCQUFrQjtBQUNyQyxnQkFBTSxpQkFBaUIsUUFBUSxLQUFLLENBQUM7QUFDckMsaUJBQU8sY0FBYztBQUNyQixrQkFBUSxPQUFPO0FBQUEsWUFDYixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsWUFDWCxJQUFJLE9BQU87QUFDVCxxQkFBTyxNQUFNLGlCQUFpQixnQkFBZ0IsR0FBRyx1QkFBdUI7QUFBQSxDQUFJO0FBQUEsWUFDOUU7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sNEJBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -60,8 +60,7 @@ var rule = createRule({
|
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
62
|
const signature = signatures[0];
|
|
63
|
-
|
|
64
|
-
if (signature.typeParameters !== void 0 && signature.typeParameters.length > 0) {
|
|
63
|
+
if (signature === void 0 || signature.typeParameters !== void 0 && signature.typeParameters.length > 0) {
|
|
65
64
|
return;
|
|
66
65
|
}
|
|
67
66
|
log("signature:", signature.getDeclaration().getText());
|
|
@@ -148,4 +147,4 @@ export {
|
|
|
148
147
|
fix_function_call_arguments_default as default,
|
|
149
148
|
ruleId
|
|
150
149
|
};
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L2ZpeC1mdW5jdGlvbi1jYWxsLWFyZ3VtZW50cy50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLFVBQVUsY0FBYztBQUNqQyxTQUFTLG1CQUE2QjtBQUN0QyxPQUFPLFdBQVc7QUFDbEIsT0FBTyx5QkFBeUI7QUFFekIsSUFBTSxTQUFTO0FBS3RCLElBQU0sa0JBQWtCO0FBQUEsRUFDdEIsY0FBYztBQUFBLElBQ1o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxJQUFNLGFBQWEsWUFBWSxZQUFZLENBQUMsU0FBUyxvQkFBb0IsSUFBSSxDQUFDO0FBQzlFLElBQU0sTUFBTSxNQUFNLDJDQUEyQztBQUU3RCxJQUFNLE9BR0YsV0FBVztBQUFBLEVBQ2IsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLHFDQUFxQztBQUFBLE1BQ3JDLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLE1BQ047QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxVQUNWLGNBQWM7QUFBQSxZQUNaLGFBQWE7QUFBQSxZQUNiLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxjQUNMLE1BQU07QUFBQSxZQUNSO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxRQUNBLHNCQUFzQjtBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLGdCQUFnQixDQUFDLGVBQWU7QUFBQSxFQUNoQyxPQUFPLFNBQVM7QUFFZCxVQUFNLEVBQUUsYUFBYSxJQUFJLFFBQVEsUUFBUSxDQUFDLEtBQUs7QUFDL0MsVUFBTSxpQkFBaUIsWUFBWSxrQkFBa0IsT0FBTztBQUM1RCxVQUFNLGNBQWMsZUFBZSxRQUFRLGVB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
|
|
@@ -5,7 +5,7 @@ import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
|
|
|
5
5
|
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
6
6
|
import { getEnclosingScopeNode } from "../library/ts-tree.mjs";
|
|
7
7
|
import { getIndentation } from "../library/format.mjs";
|
|
8
|
-
import {
|
|
8
|
+
import { isServiceApiCallUrl, replaceEndpointUrlPrefixWithDomain } from "./url.mjs";
|
|
9
9
|
var ruleId = "no-service-wrapper";
|
|
10
10
|
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
11
11
|
var rule = createRule({
|
|
@@ -32,7 +32,7 @@ var rule = createRule({
|
|
|
32
32
|
function isUrlArgumentValid(urlArgument, scope) {
|
|
33
33
|
if (urlArgument?.type === AST_NODE_TYPES.Literal && typeof urlArgument.value === "string" || urlArgument?.type === AST_NODE_TYPES.TemplateLiteral) {
|
|
34
34
|
const urlText = sourceCode.getText(urlArgument);
|
|
35
|
-
return
|
|
35
|
+
return isServiceApiCallUrl(urlText);
|
|
36
36
|
}
|
|
37
37
|
if (urlArgument?.type === AST_NODE_TYPES.Identifier) {
|
|
38
38
|
const foundVariable = scope.variables.find((variable) => variable.name === urlArgument.name);
|
|
@@ -180,4 +180,4 @@ export {
|
|
|
180
180
|
no_service_wrapper_default as default,
|
|
181
181
|
ruleId
|
|
182
182
|
};
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLXNlcnZpY2Utd3JhcHBlci50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLFVBQVUsY0FBYztBQUVqQyxTQUFTLHNCQUFrQztBQUMzQyxTQUFTLGdCQUFnQixtQkFBNkI7QUFFdEQsT0FBTyx5QkFBeUI7QUFDaEMsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxxQkFBcUIsMENBQTBDO0FBRWpFLElBQU0sU0FBUztBQUV0QixJQUFNLGFBQWEsWUFBWSxZQUFZLENBQUMsU0FBUyxvQkFBb0IsSUFBSSxDQUFDO0FBRTlFLElBQU0sT0FBd0YsV0FBVztBQUFBLEVBQ3ZHLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixtQkFBbUI7QUFBQSxNQUNuQixnQkFDRTtBQUFBLE1BQ0YsY0FDRTtBQUFBLElBQ0o7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULFFBQVEsQ0FBQztBQUFBLEVBQ1g7QUFBQSxFQUNBLGdCQUFnQixDQUFDO0FBQUEsRUFDakIsT0FBTyxTQUFTO0FBQ2QsVUFBTSxhQUFhLFFBQVE7QUFDM0IsVUFBTSxlQUFlLFdBQVc7QUFDaEMsVUFBTSxnQkFBZ0IsWUFBWSxrQkFBa0IsT0FBTztBQUMzRCxVQUFNLGNBQWMsY0FBYyxRQUFRLGVBQWU7QUFFekQsYUFBUyxtQkFBbUIsYUFBd0MsT0FBYztBQUNoRixVQUNHLGFBQWEsU0FBUyxlQUFlLFdBQVcsT0FBTyxZQUFZLFVBQVUsWUFDOUUsYUFBYSxTQUFTLGVBQWUsaUJBQ3JDO0FBQ0EsY0FBTSxVQUFVLFdBQVcsUUFBUSxXQUFXO0FBQzlDLGVBQU8sb0JBQW9CLE9BQU87QUFBQSxNQUNwQztBQUVBLFVBQUksYUFBYSxTQUFTLGVBQWUsWUFBWTtBQUNuRCxjQUFNLGdCQUFnQixNQUFNLFVB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
|
package/dist-mjs/agent/url.mjs
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
// src/agent/url.ts
|
|
2
2
|
var PLAIN_URL_REGEXP = /^[`']\/\w+(?<serviceNamePart>-\w+)*\/v\d+\/(?<any>.|\r|\n)+[`']$/u;
|
|
3
3
|
var TOKENIZED_URL_REGEXP = /^`\$\{(?<serviceNamePart>[A-Z]+_)*BASE_PATH\}\/(?<any>.|\r|\n)+`$/u;
|
|
4
|
+
function isServiceApiCallUrl(url) {
|
|
5
|
+
return PLAIN_URL_REGEXP.test(url) || TOKENIZED_URL_REGEXP.test(url);
|
|
6
|
+
}
|
|
4
7
|
function replaceEndpointUrlPrefixWithBasePath(url) {
|
|
5
|
-
return url.replace(
|
|
8
|
+
return url.replace(
|
|
9
|
+
/^(?<quotStart>[`'])\/(?<servicename>\w+(?<parts>-\w+)*)(?<path>\/v\d+\/)(?<endpoint>(?<any>.|\r|\n)+)(?<quotEnd>[`'])$/u,
|
|
10
|
+
// eslint-disable-next-line no-template-curly-in-string
|
|
11
|
+
"`${BASE_PATH}/$5`"
|
|
12
|
+
);
|
|
6
13
|
}
|
|
7
14
|
function replaceEndpointUrlPrefixWithDomain(url) {
|
|
8
15
|
return url.replace(
|
|
@@ -17,10 +24,9 @@ function addBasePathUrlDomain(url) {
|
|
|
17
24
|
);
|
|
18
25
|
}
|
|
19
26
|
export {
|
|
20
|
-
PLAIN_URL_REGEXP,
|
|
21
|
-
TOKENIZED_URL_REGEXP,
|
|
22
27
|
addBasePathUrlDomain,
|
|
28
|
+
isServiceApiCallUrl,
|
|
23
29
|
replaceEndpointUrlPrefixWithBasePath,
|
|
24
30
|
replaceEndpointUrlPrefixWithDomain
|
|
25
31
|
};
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L3VybC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFHQSxJQUFNLG1CQUEyQjtBQUVqQyxJQUFNLHVCQUErQjtBQUU5QixTQUFTLG9CQUFvQixLQUFzQjtBQUN4RCxTQUFPLGlCQUFpQixLQUFLLEdBQUcsS0FBSyxxQkFBcUIsS0FBSyxHQUFHO0FBQ3BFO0FBRU8sU0FBUyxxQ0FBcUMsS0FBcUI7QUFDeEUsU0FBTyxJQUFJO0FBQUEsSUFDVDtBQUFBO0FBQUEsSUFFQTtBQUFBLEVBQ0Y7QUFDRjtBQUVPLFNBQVMsbUNBQW1DLEtBQXFCO0FBQ3RFLFNBQU8sSUFBSTtBQUFBLElBQ1Q7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGO0FBRU8sU0FBUyxxQkFBcUIsS0FBcUI7QUFDeEQsU0FBTyxJQUFJO0FBQUEsSUFDVDtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/dist-mjs/index.mjs
CHANGED
|
@@ -12,7 +12,7 @@ import fixFunctionCallArguments, {
|
|
|
12
12
|
import invalidJsonStringify, { ruleId as invalidJsonStringifyRuleId } from "./invalid-json-stringify.mjs";
|
|
13
13
|
import noDuplicatedImports, { ruleId as noDuplicatedImportsRuleId } from "./no-duplicated-imports.mjs";
|
|
14
14
|
import noFixture, { ruleId as noFixtureRuleId } from "./agent/no-fixture.mjs";
|
|
15
|
-
import
|
|
15
|
+
import noLegacyServiceTyping, { ruleId as noLegacyServiceTypingRuleId } from "./no-legacy-service-typing.mjs";
|
|
16
16
|
import noMappedResponse, { ruleId as noMappedResponseRuleId } from "./agent/no-mapped-response.mjs";
|
|
17
17
|
import noPromiseInstanceMethod, { ruleId as noPromiseInstanceMethodRuleId } from "./no-promise-instance-method.mjs";
|
|
18
18
|
import noServiceWrapper, { ruleId as noServiceWrapperRuleId } from "./agent/no-service-wrapper.mjs";
|
|
@@ -31,9 +31,10 @@ import requireResolveFullResponse, {
|
|
|
31
31
|
import requireTypeOutOfTypeOnlyImports, {
|
|
32
32
|
ruleId as requireTypeOutOfTypeOnlyImportsRuleId
|
|
33
33
|
} from "./require-type-out-of-type-only-imports.mjs";
|
|
34
|
-
import noServeRuntime, { ruleId as noServeRuntimeRuleId } from "./
|
|
34
|
+
import noServeRuntime, { ruleId as noServeRuntimeRuleId } from "./no-serve-runtime.mjs";
|
|
35
35
|
import addBasePathConst, { ruleId as addBasePathConstRuleId } from "./agent/add-base-path-const.mjs";
|
|
36
36
|
import addBasePathImport, { ruleId as addBasePathImportRuleId } from "./agent/add-base-path-import.mjs";
|
|
37
|
+
import addAssertImport, { ruleId as addAssertImportRuleId } from "./agent/add-assert-import.mjs";
|
|
37
38
|
import filePathComment from "./file-path-comment.mjs";
|
|
38
39
|
import noCardNumbers from "./no-card-numbers.mjs";
|
|
39
40
|
import noTestImport from "./no-test-import.mjs";
|
|
@@ -62,13 +63,14 @@ var rules = {
|
|
|
62
63
|
[fetchResponseBodyJsonRuleId]: fetchResponseBodyJson,
|
|
63
64
|
[fetchResponseHeaderGetterRuleId]: fetchResponseHeaderGetter,
|
|
64
65
|
[addUrlDomainRuleId]: addUrlDomain,
|
|
65
|
-
[
|
|
66
|
+
[noLegacyServiceTypingRuleId]: noLegacyServiceTyping,
|
|
66
67
|
[noMappedResponseRuleId]: noMappedResponse,
|
|
67
68
|
[requireResolveFullResponseRuleId]: requireResolveFullResponse,
|
|
68
69
|
[noDuplicatedImportsRuleId]: noDuplicatedImports,
|
|
69
70
|
[noServeRuntimeRuleId]: noServeRuntime,
|
|
70
71
|
[addBasePathConstRuleId]: addBasePathConst,
|
|
71
72
|
[addBasePathImportRuleId]: addBasePathImport,
|
|
73
|
+
[addAssertImportRuleId]: addAssertImport,
|
|
72
74
|
[requireFixedServicesImportRuleId]: requireFixedServicesImport,
|
|
73
75
|
[requireTypeOutOfTypeOnlyImportsRuleId]: requireTypeOutOfTypeOnlyImports,
|
|
74
76
|
[noUnusedFunctionArgumentsRuleId]: noUnusedFunctionArguments,
|
|
@@ -99,7 +101,7 @@ var configs = {
|
|
|
99
101
|
"@checkdigit/no-test-import": "error",
|
|
100
102
|
[`@checkdigit/${invalidJsonStringifyRuleId}`]: "error",
|
|
101
103
|
[`@checkdigit/${noPromiseInstanceMethodRuleId}`]: "error",
|
|
102
|
-
[`@checkdigit/${
|
|
104
|
+
[`@checkdigit/${noLegacyServiceTypingRuleId}`]: "error",
|
|
103
105
|
[`@checkdigit/${requireResolveFullResponseRuleId}`]: "error",
|
|
104
106
|
[`@checkdigit/${noDuplicatedImportsRuleId}`]: "error",
|
|
105
107
|
[`@checkdigit/${requireFixedServicesImportRuleId}`]: "error",
|
|
@@ -120,7 +122,8 @@ var configs = {
|
|
|
120
122
|
[`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: "off",
|
|
121
123
|
[`@checkdigit/${agentTestWiringRuleId}`]: "off",
|
|
122
124
|
[`@checkdigit/${addBasePathConstRuleId}`]: "off",
|
|
123
|
-
[`@checkdigit/${addBasePathImportRuleId}`]: "off"
|
|
125
|
+
[`@checkdigit/${addBasePathImportRuleId}`]: "off",
|
|
126
|
+
[`@checkdigit/${addAssertImportRuleId}`]: "off"
|
|
124
127
|
// --- agent rules END ---
|
|
125
128
|
}
|
|
126
129
|
}
|
|
@@ -168,7 +171,8 @@ var configs = {
|
|
|
168
171
|
[`@checkdigit/${noUnusedImportsRuleId}`]: "error",
|
|
169
172
|
[`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: "error",
|
|
170
173
|
[`@checkdigit/${addBasePathConstRuleId}`]: "error",
|
|
171
|
-
[`@checkdigit/${addBasePathImportRuleId}`]: "error"
|
|
174
|
+
[`@checkdigit/${addBasePathImportRuleId}`]: "error",
|
|
175
|
+
[`@checkdigit/${addAssertImportRuleId}`]: "error"
|
|
172
176
|
}
|
|
173
177
|
},
|
|
174
178
|
{
|
|
@@ -203,7 +207,8 @@ var configs = {
|
|
|
203
207
|
[`@checkdigit/${noUnusedImportsRuleId}`]: "error",
|
|
204
208
|
[`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: "error",
|
|
205
209
|
[`@checkdigit/${addBasePathConstRuleId}`]: "error",
|
|
206
|
-
[`@checkdigit/${addBasePathImportRuleId}`]: "error"
|
|
210
|
+
[`@checkdigit/${addBasePathImportRuleId}`]: "error",
|
|
211
|
+
[`@checkdigit/${addAssertImportRuleId}`]: "error"
|
|
207
212
|
}
|
|
208
213
|
}
|
|
209
214
|
]
|
|
@@ -216,4 +221,4 @@ var src_default = defaultToExport;
|
|
|
216
221
|
export {
|
|
217
222
|
src_default as default
|
|
218
223
|
};
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,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
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// src/no-legacy-service-typing.ts
|
|
2
|
+
import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
|
|
3
|
+
import getDocumentationUrl from "./get-documentation-url.mjs";
|
|
4
|
+
var ruleId = "no-legacy-service-typing";
|
|
5
|
+
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
6
|
+
var DISALLOWED_SERVICE_TYPINGS = ["FullResponse", "Endpoint"];
|
|
7
|
+
var rule = createRule({
|
|
8
|
+
name: ruleId,
|
|
9
|
+
meta: {
|
|
10
|
+
type: "problem",
|
|
11
|
+
docs: {
|
|
12
|
+
description: "Legacy service typings should not be used."
|
|
13
|
+
},
|
|
14
|
+
messages: {
|
|
15
|
+
noLegacyServiceTyping: "Please remove the usage of legacy service typings."
|
|
16
|
+
},
|
|
17
|
+
schema: [{ type: "array", items: { type: "string" } }]
|
|
18
|
+
},
|
|
19
|
+
defaultOptions: [DISALLOWED_SERVICE_TYPINGS],
|
|
20
|
+
create(context) {
|
|
21
|
+
return {
|
|
22
|
+
TSTypeReference: (typeReference) => {
|
|
23
|
+
if (typeReference.typeName.type === AST_NODE_TYPES.Identifier && // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
24
|
+
(context.options[0] ?? DISALLOWED_SERVICE_TYPINGS).includes(typeReference.typeName.name)) {
|
|
25
|
+
context.report({
|
|
26
|
+
messageId: "noLegacyServiceTyping",
|
|
27
|
+
node: typeReference
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
var no_legacy_service_typing_default = rule;
|
|
35
|
+
export {
|
|
36
|
+
no_legacy_service_typing_default as default,
|
|
37
|
+
ruleId
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vLWxlZ2FjeS1zZXJ2aWNlLXR5cGluZy50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLGdCQUFnQixtQkFBNkI7QUFDdEQsT0FBTyx5QkFBeUI7QUFFekIsSUFBTSxTQUFTO0FBRXRCLElBQU0sYUFBYSxZQUFZLFlBQVksQ0FBQyxTQUFTLG9CQUFvQixJQUFJLENBQUM7QUFFOUUsSUFBTSw2QkFBbUQsQ0FBQyxnQkFBZ0IsVUFBVTtBQUVwRixJQUFNLE9BQTZGLFdBQVc7QUFBQSxFQUM1RyxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsdUJBQXVCO0FBQUEsSUFDekI7QUFBQSxJQUNBLFFBQVEsQ0FBQyxFQUFFLE1BQU0sU0FBUyxPQUFPLEVBQUUsTUFBTSxTQUFTLEVBQUUsQ0FBQztBQUFBLEVBQ3ZEO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQywwQkFBMEI7QUFBQSxFQUMzQyxPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUEsTUFDTCxpQkFBaUIsQ0FBQyxrQkFBNEM7QUFDNUQsWUFDRSxjQUFjLFNBQVMsU0FBUyxlQUFlO0FBQUEsU0FFOUMsUUFBUSxRQUFRLENBQUMsS0FBSyw0QkFBNEIsU0FBUyxjQUFjLFNBQVMsSUFBSSxHQUN2RjtBQUNBLGtCQUFRLE9BQU87QUFBQSxZQUNiLFdBQVc7QUFBQSxZQUNYLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sbUNBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// src/
|
|
1
|
+
// src/no-serve-runtime.ts
|
|
2
2
|
import { ESLintUtils } from "@typescript-eslint/utils";
|
|
3
|
-
import getDocumentationUrl from "
|
|
3
|
+
import getDocumentationUrl from "./get-documentation-url.mjs";
|
|
4
4
|
var ruleId = "no-serve-runtime";
|
|
5
5
|
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
6
6
|
var rule = createRule({
|
|
@@ -34,4 +34,4 @@ export {
|
|
|
34
34
|
no_serve_runtime_default as default,
|
|
35
35
|
ruleId
|
|
36
36
|
};
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vLXNlcnZlLXJ1bnRpbWUudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBUUEsU0FBUyxtQkFBNkI7QUFDdEMsT0FBTyx5QkFBeUI7QUFFekIsSUFBTSxTQUFTO0FBRXRCLElBQU0sYUFBYSxZQUFZLFlBQVksQ0FBQyxTQUFTLG9CQUFvQixJQUFJLENBQUM7QUFFOUUsSUFBTSxPQUFpRCxXQUFXO0FBQUEsRUFDaEUsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLGdCQUFnQjtBQUFBLElBQ2xCO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxFQUNYO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLFdBQU87QUFBQSxNQUNMLG1CQUFtQixDQUFDLHNCQUFrRDtBQUNwRSxZQUFJLGtCQUFrQixPQUFPLFVBQVUsNkJBQTZCO0FBQ2xFLGtCQUFRLE9BQU87QUFBQSxZQUNiLFdBQVc7QUFBQSxZQUNYLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sMkJBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -36,10 +36,12 @@ var rule = createRule({
|
|
|
36
36
|
const foundVariable = scope.variables.find((variable) => variable.name === urlArgument.name);
|
|
37
37
|
if (foundVariable) {
|
|
38
38
|
const variableDefinition = foundVariable.defs.find((def) => def.type === DefinitionType.Variable);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
if (variableDefinition) {
|
|
40
|
+
const variableDefinitionNode = variableDefinition.node;
|
|
41
|
+
assert.ok(variableDefinitionNode.init, "Variable definition node has no init property");
|
|
42
|
+
return isUrlArgumentValid(variableDefinitionNode.init, scope);
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
43
45
|
}
|
|
44
46
|
}
|
|
45
47
|
return false;
|
|
@@ -155,4 +157,4 @@ export {
|
|
|
155
157
|
require_resolve_full_response_default as default,
|
|
156
158
|
ruleId
|
|
157
159
|
};
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlcXVpcmUtcmVzb2x2ZS1mdWxsLXJlc3BvbnNlLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLFNBQVMsVUFBVSxjQUFjO0FBQ2pDLFNBQVMsZ0JBQWdCLG1CQUE2QjtBQUN0RCxTQUFTLHNCQUFrQztBQUMzQyxPQUFPLHlCQUF5QjtBQUNoQyxTQUFTLDZCQUE2QjtBQUUvQixJQUFNLFNBQVM7QUFFZixJQUFNLG1CQUEyQjtBQUVqQyxJQUFNLHVCQUErQjtBQUU1QyxJQUFNLGFBQWEsWUFBWSxZQUFZLENBQUMsU0FBUyxvQkFBb0IsSUFBSSxDQUFDO0FBRTlFLElBQU0sT0FBa0UsV0FBVztBQUFBLEVBQ2pGLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixnQkFDRTtBQUFBLE1BQ0YsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxFQUNYO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLFVBQU0sYUFBYSxRQUFRO0FBQzNCLFVBQU0sZUFBZSxXQUFXO0FBQ2hDLFVBQU0sZ0JBQWdCLFlBQVksa0JBQWtCLE9BQU87QUFDM0QsVUFBTSxjQUFjLGNBQWMsUUFBUSxlQUFlO0FBRXpELGFBQVMsbUJBQW1CLGFBQXdDLE9BQWM7QUFDaEYsVUFDRyxhQUFhLFNBQVMsZUFBZSxXQUFXLE9BQU8sWUFBWSxVQUFVLFlBQzlFLGFBQWEsU0FBUyxlQUFlLGlCQUNyQztBQUNBLGNBQU0sVUFBVSxXQUFXLFFBQVEsV0FBVztBQUM5QyxlQUFPLGlCQUFpQixLQUFLLE9BQU8sS0FBSyxxQkFBcUIsS0FBSyxPQUFPO0FBQUEsTUFDNUU7QUFFQSxVQUFJLGFBQWEsU0FBUyxlQUFlLFlBQVk7QUFDbkQsY0FBTSxnQkFBZ0IsTUFBTSxVQUFVLEtBQUssQ0FBQyxhQUFhLFNBQVMsU0FBUyxZQUFZLElBQUk7QUFDM0YsWUFBSSxlQUFlO0FBQ2pCLGdCQUFNLHFCQUFxQixjQUFjLEtBQUssS0FBSyxDQUFDLFFBQVEsSUFBSSxTQUFTLGVBQWUsUUFBUTtBQUNoRyxjQUFJLG9CQUFvQjtBQUN0QixrQkFBTSx5QkFBeUIsbUJBQW1CO0FBQ2xELG1CQUFPLEdBQUcsdUJBQXVCLE1BQU0sK0NBQStDO0FBQ3RGLG1CQUFPLG1CQUFtQix1QkFBdUIsTUFBTSxLQUFLO0FBQUEsVUFDOUQ7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxhQUFTLFFBQVEsWUFBaUM7QUFDaEQsWUFBTSxXQUFXLGNBQWMsc0JBQXNCLElBQUksVUFBVTtBQUNuRSxZQUFNLGVBQWUsWUFBWSxrQkFBa0IsUUFBUTtBQUMzRCxhQUFPLFlBQVksYUFBYSxZQUFZO0FBQUEsSUFDOUM7QUFFQSxhQUFTLGtCQUFrQixNQUFjO0FBQ3ZDLGFBQU8saUJBQWlCLEtBQUssSUFBSTtBQUFBLElBQ25DO0FBRUEsYUFBUyx1QkFBdUIsYUFBc0M7QUFDcEUsWUFBTSxTQUFTLFlBQVk7QUFDM0IsVUFBSSxPQUFPLFNBQVMsZUFBZSxrQkFBa0I7QUFDbkQsZUFBTztBQUFBLE1BQ1Q7QUFFQSxZQUFNLFdBQVcsT0FBTztBQUN4QixVQUFJLFNBQVMsU0FBUyxlQUFlLFlBQVk7QUFDL0MsZUFBTyxRQUFRLFFBQVEsTUFBTSxjQUFjLGtCQUFrQixTQUFTLElBQUk7QUFBQSxNQUM1RTtBQUNBLFVBQUksU0FBUyxTQUFTLGVBQWUsZ0JBQWdCO0FBQ25ELGVBQU87QUFBQSxNQUNUO0FBRUEsWUFBTSxDQUFDLGVBQWUsSUFBSSxTQUFTO0FBQ25DLFVBQUksaUJBQWlCLFNBQVMsZUFBZSxZQUFZO0FBQ3ZELGVBQU87QUFBQSxNQUNUO0FBQ0EsVUFBSSxnQkFBZ0IsU0FBUyxtQkFBbUIsUUFBUSxlQUFlLE1BQU0sa0JBQWtCO0FBQzdGLGVBQU87QUFBQSxNQUNUO0FBQ0EsWUFBTSxVQUFVLFNBQVM7QUFDekIsVUFBSSxRQUFRLFNBQVMsZUFBZSxZQUFZO0FBQzlDLGVBQU8sUUFBUSxPQUFPLE1BQU07QUFBQSxNQUM5QjtBQUVBLFVBQUksUUFBUSxTQUFTLGVBQWUsa0JBQWtCO0FBQ3BELGVBQU87QUFBQSxNQUNUO0FBQ0EsWUFBTSxXQUFXLFFBQVE7QUFDekIsVUFBSSxTQUFTLFNBQVMsZUFBZSxZQUFZO0FBQy9DLGVBQU8sUUFBUSxRQUFRLE1BQU07QUFBQSxNQUMvQjtBQUVBLFVBQUksU0FBUyxTQUFTLGVBQWUsa0JBQWtCO0FBQ3JELGVBQU87QUFBQSxNQUNUO0FBQ0EsWUFBTSxnQkFBZ0IsU0FBUztBQUMvQixVQUFJLGNBQWMsU0FBUyxlQUFlLFlBQVk7QUFDcEQsZUFBTyxDQUFDLGlCQUFpQixpQ0FBaUMsRUFBRSxTQUFTLFFBQVEsYUFBYSxDQUFDO0FBQUEsTUFDN0Y7QUFHQSxVQUFJLGNBQWMsU0FBUyxlQUFlLGtCQUFrQjtBQUMxRCxlQUFPO0FBQUEsTUFDVDtBQUNBLFlBQU0sVUFBVSxjQUFjO0FBQzlCLFVBQUksUUFBUSxTQUFTLGVBQWUsWUFBWTtBQUM5QyxlQUFPLFFBQVEsU0FBUyxhQUFhLFFBQVEsT0FBTyxNQUFNO0FBQUEsTUFDNUQ7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU87QUFBQSxNQUNMLDBFQUEwRSxDQUN4RSxnQkFDRztBQUNILFlBQUk7QUFDRixjQUFJLENBQUMsdUJBQXVCLFdBQVcsR0FBRztBQUN4QztBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxxQkFBcUIsc0JBQXNCLFdBQVc7QUFDNUQsaUJBQU8sR0FBRyxvQkFBb0IsaUNBQWlDO0FBQy9ELGdCQUFNLFFBQVEsY0FBYyxRQUFRLGtCQUFrQjtBQUN0RCxpQkFBTyxHQUFHLE9BQU8sb0JBQW9CO0FBQ3JDLGdCQUFNLGNBQWMsWUFBWSxVQUFVLENBQUM7QUFDM0MsY0FBSSxDQUFDLG1CQUFtQixhQUFhLEtBQUssR0FBRztBQUMzQztBQUFBLFVBQ0Y7QUFFQSxpQkFBTyxHQUFHLFlBQVksT0FBTyxTQUFTLGVBQWUsZ0JBQWdCO0FBQ3JFLGlCQUFPLEdBQUcsWUFBWSxPQUFPLFNBQVMsU0FBUyxlQUFlLFVBQVU7QUFHeEUsZ0JBQU0sU0FBUyxZQUFZLE9BQU8sU0FBUztBQUczQyxnQkFBTSxrQkFBa0IsQ0FBQyxPQUFPLFFBQVEsS0FBSyxFQUFFLFNBQVMsTUFBTSxJQUMxRCxZQUFZLFVBQVUsQ0FBQyxJQUN2QixZQUFZLFVBQVUsQ0FBQztBQUMzQixjQUFJLG9CQUFvQixVQUFhLGdCQUFnQixTQUFTLGVBQWUsa0JBQWtCO0FBQzdGLG9CQUFRLE9BQU87QUFBQSxjQUNiLE1BQU07QUFBQSxjQUNOLFdBQVc7QUFBQSxZQUNiLENBQUM7QUFDRDtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxrQ0FBa0MsZ0JBQWdCLFdBQVc7QUFBQSxZQUNqRSxDQUFDLGFBQ0MsU0FBUyxTQUFTLGVBQWUsWUFDakMsU0FBUyxJQUFJLFNBQVMsZUFBZSxjQUNyQyxTQUFTLElBQUksU0FBUztBQUFBLFVBQzFCO0FBQ0EsY0FDRSxpQ0FBaUMsU0FBUyxlQUFlLFlBQ3pELGdDQUFnQyxNQUFNLFNBQVMsZUFBZSxXQUM5RCxnQ0FBZ0MsTUFBTSxVQUFVLE1BQ2hEO0FBQ0Esb0JBQVEsT0FBTztBQUFBLGNBQ2IsTUFBTTtBQUFBLGNBQ04sV0FBVztBQUFBLFlBQ2IsQ0FBQztBQUNEO0FBQUEsVUFDRjtBQUFBLFFBQ0YsU0FBUyxPQUFPO0FBRWQsa0JBQVEsTUFBTSxtQkFBbUIsTUFBTSxtQkFBbUIsUUFBUSxRQUFRLE1BQU0sS0FBSztBQUNyRixrQkFBUSxPQUFPO0FBQUEsWUFDYixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsWUFDWCxNQUFNO0FBQUEsY0FDSixVQUFVLFFBQVE7QUFBQSxjQUNsQixPQUFPLGlCQUFpQixRQUFRLE1BQU0sU0FBUyxJQUFJLEtBQUssVUFBVSxLQUFLO0FBQUEsWUFDekU7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sd0NBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export declare
|
|
2
|
-
export declare const TOKENIZED_URL_REGEXP: RegExp;
|
|
1
|
+
export declare function isServiceApiCallUrl(url: string): boolean;
|
|
3
2
|
export declare function replaceEndpointUrlPrefixWithBasePath(url: string): string;
|
|
4
3
|
export declare function replaceEndpointUrlPrefixWithDomain(url: string): string;
|
|
5
4
|
export declare function addBasePathUrlDomain(url: string): string;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
2
|
+
export declare const ruleId = "no-legacy-service-typing";
|
|
3
|
+
declare const DISALLOWED_SERVICE_TYPINGS: string[] | undefined;
|
|
4
|
+
declare const rule: ESLintUtils.RuleModule<'noLegacyServiceTyping', [typeof DISALLOWED_SERVICE_TYPINGS]>;
|
|
5
|
+
export default rule;
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@checkdigit/eslint-plugin","version":"7.3.0-PR.75-
|
|
1
|
+
{"name":"@checkdigit/eslint-plugin","version":"7.3.0-PR.75-e3bc","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.12.2","@typescript-eslint/utils":"8.12.2","debug":"^4.3.7","ts-api-utils":"^1.4.0"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^5.5.1","@checkdigit/typescript-config":"^8.0.0","@eslint/js":"^9.14.0","@types/debug":"^4.1.12","@types/eslint":"^9.6.1","@types/eslint-config-prettier":"^6.11.3","@typescript-eslint/parser":"8.12.2","@typescript-eslint/rule-tester":"8.12.2","eslint":"^9.14.0","eslint-config-prettier":"^9.1.0","eslint-import-resolver-typescript":"^3.6.3","eslint-plugin-eslint-plugin":"^6.3.1","eslint-plugin-import":"^2.31.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-no-secrets":"^1.0.2","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"1.0.4","http-status-codes":"^2.3.0","rimraf":"^6.0.1","typescript-eslint":"8.12.2"},"peerDependencies":{"eslint":">=9 <10"},"engines":{"node":">=20.17"}}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// agent/add-url-domain.ts
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2021-2024 Check Digit, LLC
|
|
5
|
+
*
|
|
6
|
+
* This code is licensed under the MIT license (see LICENSE.txt for details).
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { strict as assert } from 'node:assert';
|
|
10
|
+
|
|
11
|
+
import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils';
|
|
12
|
+
|
|
13
|
+
import getDocumentationUrl from '../get-documentation-url';
|
|
14
|
+
|
|
15
|
+
export const ruleId = 'add-assert-import';
|
|
16
|
+
|
|
17
|
+
const ASSERT_IMPORT_STATEMENT = "import { strict as assert } from 'node:assert';";
|
|
18
|
+
|
|
19
|
+
const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
20
|
+
|
|
21
|
+
const rule: ESLintUtils.RuleModule<'addAssertImport'> = createRule({
|
|
22
|
+
name: ruleId,
|
|
23
|
+
meta: {
|
|
24
|
+
type: 'suggestion',
|
|
25
|
+
docs: {
|
|
26
|
+
description: 'Add import of assert module of node.',
|
|
27
|
+
},
|
|
28
|
+
messages: {
|
|
29
|
+
addAssertImport: 'Add import of assert module of node.',
|
|
30
|
+
},
|
|
31
|
+
fixable: 'code',
|
|
32
|
+
schema: [],
|
|
33
|
+
},
|
|
34
|
+
defaultOptions: [],
|
|
35
|
+
create(context) {
|
|
36
|
+
let isAssertImported = false;
|
|
37
|
+
let isAssertUsed = false;
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
ImportDeclaration: (node) => {
|
|
41
|
+
if (node.source.value === 'assert' || node.source.value === 'node:assert') {
|
|
42
|
+
isAssertImported = true;
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
CallExpression: (callExpression) => {
|
|
46
|
+
// detect if assert is used
|
|
47
|
+
if (
|
|
48
|
+
(callExpression.callee.type === AST_NODE_TYPES.Identifier && callExpression.callee.name === 'assert') ||
|
|
49
|
+
(callExpression.callee.type === AST_NODE_TYPES.MemberExpression &&
|
|
50
|
+
callExpression.callee.object.type === AST_NODE_TYPES.Identifier &&
|
|
51
|
+
callExpression.callee.object.name === 'assert')
|
|
52
|
+
) {
|
|
53
|
+
isAssertUsed = true;
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
'Program:exit': (program) => {
|
|
57
|
+
// add assert import if necessary
|
|
58
|
+
if (isAssertUsed && !isAssertImported) {
|
|
59
|
+
const firstStatement = program.body[0];
|
|
60
|
+
assert(firstStatement);
|
|
61
|
+
context.report({
|
|
62
|
+
node: program,
|
|
63
|
+
messageId: 'addAssertImport',
|
|
64
|
+
fix(fixer) {
|
|
65
|
+
return fixer.insertTextBefore(firstStatement, `${ASSERT_IMPORT_STATEMENT}\n`);
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
export default rule;
|
|
@@ -88,8 +88,10 @@ const rule: ESLintUtils.RuleModule<
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
const signature = signatures[0];
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
if (
|
|
92
|
+
signature === undefined ||
|
|
93
|
+
(signature.typeParameters !== undefined && signature.typeParameters.length > 0)
|
|
94
|
+
) {
|
|
93
95
|
// ignore complex signatures with type parameters
|
|
94
96
|
return;
|
|
95
97
|
}
|
|
@@ -14,7 +14,7 @@ import { AST_NODE_TYPES, ESLintUtils, TSESTree } from '@typescript-eslint/utils'
|
|
|
14
14
|
import getDocumentationUrl from '../get-documentation-url';
|
|
15
15
|
import { getEnclosingScopeNode } from '../library/ts-tree';
|
|
16
16
|
import { getIndentation } from '../library/format';
|
|
17
|
-
import {
|
|
17
|
+
import { isServiceApiCallUrl, replaceEndpointUrlPrefixWithDomain } from './url';
|
|
18
18
|
|
|
19
19
|
export const ruleId = 'no-service-wrapper';
|
|
20
20
|
|
|
@@ -50,7 +50,7 @@ const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch' | 'inval
|
|
|
50
50
|
urlArgument?.type === AST_NODE_TYPES.TemplateLiteral
|
|
51
51
|
) {
|
|
52
52
|
const urlText = sourceCode.getText(urlArgument);
|
|
53
|
-
return
|
|
53
|
+
return isServiceApiCallUrl(urlText);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
if (urlArgument?.type === AST_NODE_TYPES.Identifier) {
|
package/src/agent/url.ts
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
// agent/url.ts
|
|
2
2
|
|
|
3
3
|
// eslint-disable-next-line @typescript-eslint/no-inferrable-types
|
|
4
|
-
|
|
4
|
+
const PLAIN_URL_REGEXP: RegExp = /^[`']\/\w+(?<serviceNamePart>-\w+)*\/v\d+\/(?<any>.|\r|\n)+[`']$/u;
|
|
5
5
|
// eslint-disable-next-line @typescript-eslint/no-inferrable-types
|
|
6
|
-
|
|
6
|
+
const TOKENIZED_URL_REGEXP: RegExp = /^`\$\{(?<serviceNamePart>[A-Z]+_)*BASE_PATH\}\/(?<any>.|\r|\n)+`$/u;
|
|
7
|
+
|
|
8
|
+
export function isServiceApiCallUrl(url: string): boolean {
|
|
9
|
+
return PLAIN_URL_REGEXP.test(url) || TOKENIZED_URL_REGEXP.test(url);
|
|
10
|
+
}
|
|
7
11
|
|
|
8
12
|
export function replaceEndpointUrlPrefixWithBasePath(url: string): string {
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
return url.replace(
|
|
14
|
+
/^(?<quotStart>[`'])\/(?<servicename>\w+(?<parts>-\w+)*)(?<path>\/v\d+\/)(?<endpoint>(?<any>.|\r|\n)+)(?<quotEnd>[`'])$/u,
|
|
15
|
+
// eslint-disable-next-line no-template-curly-in-string
|
|
16
|
+
'`${BASE_PATH}/$5`',
|
|
17
|
+
);
|
|
11
18
|
}
|
|
12
19
|
|
|
13
20
|
export function replaceEndpointUrlPrefixWithDomain(url: string): string {
|
package/src/index.ts
CHANGED
|
@@ -21,7 +21,7 @@ import fixFunctionCallArguments, {
|
|
|
21
21
|
import invalidJsonStringify, { ruleId as invalidJsonStringifyRuleId } from './invalid-json-stringify';
|
|
22
22
|
import noDuplicatedImports, { ruleId as noDuplicatedImportsRuleId } from './no-duplicated-imports';
|
|
23
23
|
import noFixture, { ruleId as noFixtureRuleId } from './agent/no-fixture';
|
|
24
|
-
import
|
|
24
|
+
import noLegacyServiceTyping, { ruleId as noLegacyServiceTypingRuleId } from './no-legacy-service-typing';
|
|
25
25
|
import noMappedResponse, { ruleId as noMappedResponseRuleId } from './agent/no-mapped-response';
|
|
26
26
|
import noPromiseInstanceMethod, { ruleId as noPromiseInstanceMethodRuleId } from './no-promise-instance-method';
|
|
27
27
|
import noServiceWrapper, { ruleId as noServiceWrapperRuleId } from './agent/no-service-wrapper';
|
|
@@ -40,9 +40,10 @@ import requireResolveFullResponse, {
|
|
|
40
40
|
import requireTypeOutOfTypeOnlyImports, {
|
|
41
41
|
ruleId as requireTypeOutOfTypeOnlyImportsRuleId,
|
|
42
42
|
} from './require-type-out-of-type-only-imports';
|
|
43
|
-
import noServeRuntime, { ruleId as noServeRuntimeRuleId } from './
|
|
43
|
+
import noServeRuntime, { ruleId as noServeRuntimeRuleId } from './no-serve-runtime';
|
|
44
44
|
import addBasePathConst, { ruleId as addBasePathConstRuleId } from './agent/add-base-path-const';
|
|
45
45
|
import addBasePathImport, { ruleId as addBasePathImportRuleId } from './agent/add-base-path-import';
|
|
46
|
+
import addAssertImport, { ruleId as addAssertImportRuleId } from './agent/add-assert-import';
|
|
46
47
|
import filePathComment from './file-path-comment';
|
|
47
48
|
import noCardNumbers from './no-card-numbers';
|
|
48
49
|
import noTestImport from './no-test-import';
|
|
@@ -72,13 +73,14 @@ const rules: Record<string, TSESLint.LooseRuleDefinition> = {
|
|
|
72
73
|
[fetchResponseBodyJsonRuleId]: fetchResponseBodyJson,
|
|
73
74
|
[fetchResponseHeaderGetterRuleId]: fetchResponseHeaderGetter,
|
|
74
75
|
[addUrlDomainRuleId]: addUrlDomain,
|
|
75
|
-
[
|
|
76
|
+
[noLegacyServiceTypingRuleId]: noLegacyServiceTyping,
|
|
76
77
|
[noMappedResponseRuleId]: noMappedResponse,
|
|
77
78
|
[requireResolveFullResponseRuleId]: requireResolveFullResponse,
|
|
78
79
|
[noDuplicatedImportsRuleId]: noDuplicatedImports,
|
|
79
80
|
[noServeRuntimeRuleId]: noServeRuntime,
|
|
80
81
|
[addBasePathConstRuleId]: addBasePathConst,
|
|
81
82
|
[addBasePathImportRuleId]: addBasePathImport,
|
|
83
|
+
[addAssertImportRuleId]: addAssertImport,
|
|
82
84
|
[requireFixedServicesImportRuleId]: requireFixedServicesImport,
|
|
83
85
|
[requireTypeOutOfTypeOnlyImportsRuleId]: requireTypeOutOfTypeOnlyImports,
|
|
84
86
|
[noUnusedFunctionArgumentsRuleId]: noUnusedFunctionArguments,
|
|
@@ -111,7 +113,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config | TSESLint.FlatConfig.C
|
|
|
111
113
|
'@checkdigit/no-test-import': 'error',
|
|
112
114
|
[`@checkdigit/${invalidJsonStringifyRuleId}`]: 'error',
|
|
113
115
|
[`@checkdigit/${noPromiseInstanceMethodRuleId}`]: 'error',
|
|
114
|
-
[`@checkdigit/${
|
|
116
|
+
[`@checkdigit/${noLegacyServiceTypingRuleId}`]: 'error',
|
|
115
117
|
[`@checkdigit/${requireResolveFullResponseRuleId}`]: 'error',
|
|
116
118
|
[`@checkdigit/${noDuplicatedImportsRuleId}`]: 'error',
|
|
117
119
|
[`@checkdigit/${requireFixedServicesImportRuleId}`]: 'error',
|
|
@@ -133,6 +135,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config | TSESLint.FlatConfig.C
|
|
|
133
135
|
[`@checkdigit/${agentTestWiringRuleId}`]: 'off',
|
|
134
136
|
[`@checkdigit/${addBasePathConstRuleId}`]: 'off',
|
|
135
137
|
[`@checkdigit/${addBasePathImportRuleId}`]: 'off',
|
|
138
|
+
[`@checkdigit/${addAssertImportRuleId}`]: 'off',
|
|
136
139
|
// --- agent rules END ---
|
|
137
140
|
},
|
|
138
141
|
},
|
|
@@ -181,6 +184,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config | TSESLint.FlatConfig.C
|
|
|
181
184
|
[`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: 'error',
|
|
182
185
|
[`@checkdigit/${addBasePathConstRuleId}`]: 'error',
|
|
183
186
|
[`@checkdigit/${addBasePathImportRuleId}`]: 'error',
|
|
187
|
+
[`@checkdigit/${addAssertImportRuleId}`]: 'error',
|
|
184
188
|
},
|
|
185
189
|
},
|
|
186
190
|
{
|
|
@@ -216,6 +220,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config | TSESLint.FlatConfig.C
|
|
|
216
220
|
[`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: 'error',
|
|
217
221
|
[`@checkdigit/${addBasePathConstRuleId}`]: 'error',
|
|
218
222
|
[`@checkdigit/${addBasePathImportRuleId}`]: 'error',
|
|
223
|
+
[`@checkdigit/${addAssertImportRuleId}`]: 'error',
|
|
219
224
|
},
|
|
220
225
|
},
|
|
221
226
|
],
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// no-full-response.ts
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2021-2024 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
|
+
import getDocumentationUrl from './get-documentation-url';
|
|
11
|
+
|
|
12
|
+
export const ruleId = 'no-legacy-service-typing';
|
|
13
|
+
|
|
14
|
+
const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
15
|
+
|
|
16
|
+
const DISALLOWED_SERVICE_TYPINGS: string[] | undefined = ['FullResponse', 'Endpoint'];
|
|
17
|
+
|
|
18
|
+
const rule: ESLintUtils.RuleModule<'noLegacyServiceTyping', [typeof DISALLOWED_SERVICE_TYPINGS]> = createRule({
|
|
19
|
+
name: ruleId,
|
|
20
|
+
meta: {
|
|
21
|
+
type: 'problem',
|
|
22
|
+
docs: {
|
|
23
|
+
description: 'Legacy service typings should not be used.',
|
|
24
|
+
},
|
|
25
|
+
messages: {
|
|
26
|
+
noLegacyServiceTyping: 'Please remove the usage of legacy service typings.',
|
|
27
|
+
},
|
|
28
|
+
schema: [{ type: 'array', items: { type: 'string' } }],
|
|
29
|
+
},
|
|
30
|
+
defaultOptions: [DISALLOWED_SERVICE_TYPINGS],
|
|
31
|
+
create(context) {
|
|
32
|
+
return {
|
|
33
|
+
TSTypeReference: (typeReference: TSESTree.TSTypeReference) => {
|
|
34
|
+
if (
|
|
35
|
+
typeReference.typeName.type === AST_NODE_TYPES.Identifier &&
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
37
|
+
(context.options[0] ?? DISALLOWED_SERVICE_TYPINGS).includes(typeReference.typeName.name)
|
|
38
|
+
) {
|
|
39
|
+
context.report({
|
|
40
|
+
messageId: 'noLegacyServiceTyping',
|
|
41
|
+
node: typeReference,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
export default rule;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// no-serve-runtime.ts
|
|
2
2
|
|
|
3
3
|
/*
|
|
4
4
|
* Copyright (c) 2021-2024 Check Digit, LLC
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';
|
|
10
|
-
import getDocumentationUrl from '
|
|
10
|
+
import getDocumentationUrl from './get-documentation-url';
|
|
11
11
|
|
|
12
12
|
export const ruleId = 'no-serve-runtime';
|
|
13
13
|
|
|
@@ -54,10 +54,12 @@ const rule: ESLintUtils.RuleModule<'invalidOptions' | 'unknownError'> = createRu
|
|
|
54
54
|
const foundVariable = scope.variables.find((variable) => variable.name === urlArgument.name);
|
|
55
55
|
if (foundVariable) {
|
|
56
56
|
const variableDefinition = foundVariable.defs.find((def) => def.type === DefinitionType.Variable);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
if (variableDefinition) {
|
|
58
|
+
const variableDefinitionNode = variableDefinition.node;
|
|
59
|
+
assert.ok(variableDefinitionNode.init, 'Variable definition node has no init property');
|
|
60
|
+
return isUrlArgumentValid(variableDefinitionNode.init, scope);
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
65
|
|
|
@@ -139,7 +141,7 @@ const rule: ESLintUtils.RuleModule<'invalidOptions' | 'unknownError'> = createRu
|
|
|
139
141
|
|
|
140
142
|
const enclosingScopeNode = getEnclosingScopeNode(serviceCall);
|
|
141
143
|
assert.ok(enclosingScopeNode, 'enclosingScopeNode is undefined');
|
|
142
|
-
const scope = scopeManager?.acquire(enclosingScopeNode);
|
|
144
|
+
const scope = scopeManager?.acquire(enclosingScopeNode); /*?*/
|
|
143
145
|
assert.ok(scope, 'scope is undefined');
|
|
144
146
|
const urlArgument = serviceCall.arguments[0];
|
|
145
147
|
if (!isUrlArgumentValid(urlArgument, scope)) {
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
// src/agent/no-full-response.ts
|
|
2
|
-
import { ESLintUtils } from "@typescript-eslint/utils";
|
|
3
|
-
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
4
|
-
var ruleId = "no-full-response";
|
|
5
|
-
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
6
|
-
var rule = createRule({
|
|
7
|
-
name: ruleId,
|
|
8
|
-
meta: {
|
|
9
|
-
type: "suggestion",
|
|
10
|
-
docs: {
|
|
11
|
-
description: "FullResponse type should not be used."
|
|
12
|
-
},
|
|
13
|
-
messages: {
|
|
14
|
-
noFullResponse: "Please remove the usage of FullResponse type."
|
|
15
|
-
},
|
|
16
|
-
schema: []
|
|
17
|
-
},
|
|
18
|
-
defaultOptions: [],
|
|
19
|
-
create(context) {
|
|
20
|
-
return {
|
|
21
|
-
'TSTypeReference[typeName.name="FullResponse"]': (typeReference) => {
|
|
22
|
-
context.report({
|
|
23
|
-
messageId: "noFullResponse",
|
|
24
|
-
node: typeReference
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
var no_full_response_default = rule;
|
|
31
|
-
export {
|
|
32
|
-
no_full_response_default as default,
|
|
33
|
-
ruleId
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLWZ1bGwtcmVzcG9uc2UudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBUUEsU0FBUyxtQkFBNkI7QUFDdEMsT0FBTyx5QkFBeUI7QUFFekIsSUFBTSxTQUFTO0FBRXRCLElBQU0sYUFBYSxZQUFZLFlBQVksQ0FBQyxTQUFTLG9CQUFvQixJQUFJLENBQUM7QUFFOUUsSUFBTSxPQUFpRCxXQUFXO0FBQUEsRUFDaEUsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLGdCQUFnQjtBQUFBLElBQ2xCO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxFQUNYO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLFdBQU87QUFBQSxNQUNMLGlEQUFpRCxDQUFDLGtCQUE0QztBQUM1RixnQkFBUSxPQUFPO0FBQUEsVUFDYixXQUFXO0FBQUEsVUFDWCxNQUFNO0FBQUEsUUFDUixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sMkJBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
// agent/no-full-response.ts
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
* Copyright (c) 2021-2024 Check Digit, LLC
|
|
5
|
-
*
|
|
6
|
-
* This code is licensed under the MIT license (see LICENSE.txt for details).
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';
|
|
10
|
-
import getDocumentationUrl from '../get-documentation-url';
|
|
11
|
-
|
|
12
|
-
export const ruleId = 'no-full-response';
|
|
13
|
-
|
|
14
|
-
const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
15
|
-
|
|
16
|
-
const rule: ESLintUtils.RuleModule<'noFullResponse'> = createRule({
|
|
17
|
-
name: ruleId,
|
|
18
|
-
meta: {
|
|
19
|
-
type: 'suggestion',
|
|
20
|
-
docs: {
|
|
21
|
-
description: 'FullResponse type should not be used.',
|
|
22
|
-
},
|
|
23
|
-
messages: {
|
|
24
|
-
noFullResponse: 'Please remove the usage of FullResponse type.',
|
|
25
|
-
},
|
|
26
|
-
schema: [],
|
|
27
|
-
},
|
|
28
|
-
defaultOptions: [],
|
|
29
|
-
create(context) {
|
|
30
|
-
return {
|
|
31
|
-
'TSTypeReference[typeName.name="FullResponse"]': (typeReference: TSESTree.TSTypeReference) => {
|
|
32
|
-
context.report({
|
|
33
|
-
messageId: 'noFullResponse',
|
|
34
|
-
node: typeReference,
|
|
35
|
-
});
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
},
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
export default rule;
|
|
File without changes
|