@checkdigit/eslint-plugin 7.3.0-PR.75-0187 → 7.3.0-PR.75-428c
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/agent-test-wiring.mjs +59 -37
- package/dist-mjs/index.mjs +5 -1
- package/package.json +1 -1
- package/src/agent/agent-test-wiring.ts +71 -38
- package/src/index.ts +4 -0
|
@@ -4,6 +4,13 @@ import { AST_TOKEN_TYPES, ESLintUtils, TSESTree } from "@typescript-eslint/utils
|
|
|
4
4
|
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
5
5
|
var ruleId = "agent-test-wiring";
|
|
6
6
|
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
7
|
+
var STATEMENT_FIXTURE_RESET = "fixture.reset()";
|
|
8
|
+
var STATEMENT_FIXTURE_RESET_AWAITED = `await ${STATEMENT_FIXTURE_RESET};`;
|
|
9
|
+
var STATEMENT_AGENT_DECLARATION = "let agent: Agent;";
|
|
10
|
+
var STATEMENT_AGENT_CREATION = "agent = await createAgent();";
|
|
11
|
+
var STATEMENT_AGENT_REGISTER = "agent.register(await fixturePlugin(fixture));";
|
|
12
|
+
var STATEMENT_AGENT_ENABLE = "agent.enable();";
|
|
13
|
+
var STATEMENT_AGENT_DISPOSE = "await agent[Symbol.asyncDispose]();";
|
|
7
14
|
var rule = createRule({
|
|
8
15
|
name: ruleId,
|
|
9
16
|
meta: {
|
|
@@ -22,20 +29,29 @@ var rule = createRule({
|
|
|
22
29
|
create(context) {
|
|
23
30
|
const sourceCode = context.sourceCode;
|
|
24
31
|
const importDeclarations = /* @__PURE__ */ new Map();
|
|
25
|
-
let
|
|
26
|
-
let
|
|
32
|
+
let isFixtureUsed = false;
|
|
33
|
+
let beforeAll;
|
|
34
|
+
let afterAll;
|
|
27
35
|
return {
|
|
28
36
|
ImportDeclaration(importDeclaration) {
|
|
29
37
|
const moduleName = importDeclaration.source.value;
|
|
30
38
|
importDeclarations.set(moduleName, importDeclaration);
|
|
39
|
+
if (moduleName === "@checkdigit/fixture" && importDeclaration.specifiers.some(
|
|
40
|
+
(specifier) => specifier.type === TSESTree.AST_NODE_TYPES.ImportSpecifier && specifier.imported.type === TSESTree.AST_NODE_TYPES.Identifier && specifier.imported.name === "createFixture"
|
|
41
|
+
)) {
|
|
42
|
+
isFixtureUsed = true;
|
|
43
|
+
}
|
|
31
44
|
},
|
|
32
45
|
'CallExpression[callee.name="beforeAll"]': (callExpression) => {
|
|
33
|
-
|
|
46
|
+
beforeAll = callExpression;
|
|
34
47
|
},
|
|
35
48
|
'CallExpression[callee.name="afterAll"]': (callExpression) => {
|
|
36
|
-
|
|
49
|
+
afterAll = callExpression;
|
|
37
50
|
},
|
|
38
51
|
"Program:exit"(program) {
|
|
52
|
+
if (!isFixtureUsed) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
39
55
|
try {
|
|
40
56
|
let jestImportFixer;
|
|
41
57
|
let agentImportFixer;
|
|
@@ -66,59 +82,65 @@ import createAgent, { type Agent } from '@checkdigit/agent';`
|
|
|
66
82
|
fixturePluginImportFixer = (fixer) => fixer.insertTextAfter(lastImportDeclaration, `
|
|
67
83
|
import fixturePlugin from '../../plugin/fixture.test';`);
|
|
68
84
|
}
|
|
69
|
-
if (
|
|
70
|
-
const
|
|
71
|
-
assert.ok(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
);
|
|
79
|
-
if (targetStatement !== void 0) {
|
|
80
|
-
const beforeAllBodyText = sourceCode.getText(arrowFunctionBody);
|
|
81
|
-
if (!beforeAllBodyText.includes("agent = await createAgent();")) {
|
|
85
|
+
if (beforeAll !== void 0) {
|
|
86
|
+
const beforeAllArgument = beforeAll.arguments[0];
|
|
87
|
+
assert.ok(beforeAllArgument !== void 0);
|
|
88
|
+
if (!sourceCode.getText(beforeAllArgument).includes(STATEMENT_AGENT_CREATION)) {
|
|
89
|
+
if (beforeAllArgument.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression && beforeAllArgument.body.type === TSESTree.AST_NODE_TYPES.BlockStatement) {
|
|
90
|
+
const fixtureResetStatement = beforeAllArgument.body.body.find(
|
|
91
|
+
(statement) => sourceCode.getText(statement) === STATEMENT_FIXTURE_RESET_AWAITED
|
|
92
|
+
);
|
|
93
|
+
assert.ok(fixtureResetStatement !== void 0);
|
|
82
94
|
beforeAllFixer = (fixer) => fixer.replaceText(
|
|
83
|
-
|
|
95
|
+
fixtureResetStatement,
|
|
84
96
|
[
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
STATEMENT_AGENT_CREATION,
|
|
98
|
+
STATEMENT_AGENT_REGISTER,
|
|
99
|
+
STATEMENT_AGENT_ENABLE,
|
|
100
|
+
STATEMENT_FIXTURE_RESET_AWAITED
|
|
89
101
|
].join("\n")
|
|
90
102
|
);
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
103
|
+
} else {
|
|
104
|
+
beforeAllFixer = (fixer) => fixer.replaceText(
|
|
105
|
+
beforeAllArgument,
|
|
106
|
+
[
|
|
107
|
+
`async () => {`,
|
|
108
|
+
STATEMENT_AGENT_CREATION,
|
|
109
|
+
STATEMENT_AGENT_REGISTER,
|
|
110
|
+
STATEMENT_AGENT_ENABLE,
|
|
111
|
+
STATEMENT_FIXTURE_RESET_AWAITED,
|
|
112
|
+
`}`
|
|
113
|
+
].join("\n")
|
|
94
114
|
);
|
|
95
115
|
}
|
|
116
|
+
agentDeclarationFixer = (fixer) => (
|
|
117
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
118
|
+
fixer.insertTextBefore(beforeAll, `${STATEMENT_AGENT_DECLARATION}
|
|
119
|
+
`)
|
|
120
|
+
);
|
|
96
121
|
}
|
|
97
122
|
}
|
|
98
|
-
if (
|
|
99
|
-
const afterAllArrowFunctionExpression =
|
|
123
|
+
if (afterAll !== void 0) {
|
|
124
|
+
const afterAllArrowFunctionExpression = afterAll.arguments[0];
|
|
100
125
|
assert.ok(
|
|
101
126
|
afterAllArrowFunctionExpression !== void 0 && afterAllArrowFunctionExpression.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression
|
|
102
127
|
);
|
|
103
128
|
const arrowFunctionBody = afterAllArrowFunctionExpression.body;
|
|
104
129
|
assert.ok(arrowFunctionBody.type === TSESTree.AST_NODE_TYPES.BlockStatement);
|
|
105
130
|
const afterAllBodyText = sourceCode.getText(arrowFunctionBody);
|
|
106
|
-
if (!afterAllBodyText.includes(
|
|
131
|
+
if (!afterAllBodyText.includes(STATEMENT_AGENT_DISPOSE)) {
|
|
107
132
|
const lastStatement = arrowFunctionBody.body.at(-1);
|
|
108
133
|
assert.ok(lastStatement);
|
|
109
|
-
afterAllFixer = (fixer) => fixer.insertTextAfter(lastStatement,
|
|
134
|
+
afterAllFixer = (fixer) => fixer.insertTextAfter(lastStatement, STATEMENT_AGENT_DISPOSE);
|
|
110
135
|
}
|
|
111
|
-
} else if (
|
|
112
|
-
const nextToken = sourceCode.getTokenAfter(
|
|
136
|
+
} else if (beforeAll !== void 0) {
|
|
137
|
+
const nextToken = sourceCode.getTokenAfter(beforeAll);
|
|
113
138
|
afterAllFixer = (fixer) => fixer.insertTextAfter(
|
|
114
139
|
nextToken !== null && nextToken.type === AST_TOKEN_TYPES.Punctuator ? nextToken : (
|
|
115
140
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
116
|
-
|
|
141
|
+
beforeAll
|
|
117
142
|
),
|
|
118
|
-
`
|
|
119
|
-
afterAll(async () => {
|
|
120
|
-
await agent[Symbol.asyncDispose]();
|
|
121
|
-
});`
|
|
143
|
+
["", `afterAll(async () => {`, STATEMENT_AGENT_DISPOSE, `});`].join("\n")
|
|
122
144
|
);
|
|
123
145
|
}
|
|
124
146
|
if (jestImportFixer !== void 0 || agentImportFixer !== void 0 || fixturePluginImportFixer !== void 0 || agentDeclarationFixer !== void 0 || beforeAllFixer !== void 0 || afterAllFixer !== void 0) {
|
|
@@ -167,4 +189,4 @@ export {
|
|
|
167
189
|
agent_test_wiring_default as default,
|
|
168
190
|
ruleId
|
|
169
191
|
};
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L2FnZW50LXRlc3Qtd2lyaW5nLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLFNBQVMsVUFBVSxjQUFjO0FBRWpDLFNBQVMsaUJBQWlCLGFBQWEsZ0JBQWdCO0FBR3ZELE9BQU8seUJBQXlCO0FBRXpCLElBQU0sU0FBUztBQUV0QixJQUFNLGFBQWEsWUFBWSxZQUFZLENBQUMsU0FBUyxvQkFBb0IsSUFBSSxDQUFDO0FBRTlFLElBQU0sMEJBQTBCO0FBQ2hDLElBQU0sa0NBQWtDLFNBQVMsdUJBQXVCO0FBQ3hFLElBQU0sOEJBQThCO0FBQ3BDLElBQU0sMkJBQTJCO0FBQ2pDLElBQU0sMkJBQTJCO0FBQ2pDLElBQU0seUJBQXlCO0FBQy9CLElBQU0sMEJBQTBCO0FBRWhDLElBQU0sT0FBb0UsV0FBVztBQUFBLEVBQ25GLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixrQkFBa0I7QUFBQSxNQUNsQixjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULFFBQVEsQ0FBQztBQUFBLEVBQ1g7QUFBQSxFQUNBLGdCQUFnQixDQUFDO0FBQUEsRUFDakIsT0FBTyxTQUFTO0FBQ2QsVUFBTSxhQUFhLFFBQVE7QUFDM0IsVUFBTSxxQkFBcUIsb0JBQUksSUFBd0M7QUFDdkUsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSTtBQUNKLFFBQUk7QUFFSixXQUFPO0FBQUEsTUFDTCxrQkFBa0IsbUJBQW1CO0FBQ25DLGNBQU0sYUFBYSxrQkFBa0IsT0FBTztBQUM1QywyQkFBbUIsSUFBSSxZQUFZLGlCQUFpQjtBQUNwRCxZQUNFLGVBQWUseUJBQ2Ysa0JBQWtCLFdBQVc7QUFBQSxVQUMzQixDQUFDLGNBQ0MsVUFBVSxTQUFTLFNBQVMsZUFBZSxtQkFDM0MsVUFBVSxTQUFTLFNBQVMsU0FB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
|
package/dist-mjs/index.mjs
CHANGED
|
@@ -143,6 +143,8 @@ var configs = {
|
|
|
143
143
|
"agent-phase-1-test": [
|
|
144
144
|
{
|
|
145
145
|
files: ["**/*.spec.ts", "**/*.test.ts", "src/api/v*/index.ts"],
|
|
146
|
+
// eslint-disable-next-line sonarjs/no-duplicate-string
|
|
147
|
+
ignores: ["src/plugin/**"],
|
|
146
148
|
plugins: {
|
|
147
149
|
"@checkdigit": plugin
|
|
148
150
|
},
|
|
@@ -163,6 +165,7 @@ var configs = {
|
|
|
163
165
|
},
|
|
164
166
|
{
|
|
165
167
|
files: ["**/*.spec.ts"],
|
|
168
|
+
ignores: ["src/plugin/**"],
|
|
166
169
|
plugins: {
|
|
167
170
|
"@checkdigit": plugin
|
|
168
171
|
},
|
|
@@ -174,6 +177,7 @@ var configs = {
|
|
|
174
177
|
"agent-phase-2-production": [
|
|
175
178
|
{
|
|
176
179
|
files: ["**/*.ts"],
|
|
180
|
+
ignores: ["src/plugin/**"],
|
|
177
181
|
plugins: {
|
|
178
182
|
"@checkdigit": plugin
|
|
179
183
|
},
|
|
@@ -202,4 +206,4 @@ var src_default = defaultToExport;
|
|
|
202
206
|
export {
|
|
203
207
|
src_default as default
|
|
204
208
|
};
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,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LFFBQ3BELENBQUMsZUFBZSxlQUFlLEVBQUUsR0FBRztBQUFBLFFBQ3BDLENBQUMsZUFBZSwrQkFBK0IsRUFBRSxHQUFHO0FBQUEsUUFDcEQsQ0FBQyxlQUFlLDhCQUE4QixFQUFFLEdBQUc7QUFBQSxRQUNuRCxDQUFDLGVBQWUscUJBQXFCLEVBQUUsR0FBRztBQUFBLFFBQzFDLENBQUMsZUFBZSw4QkFBOEIsRUFBRSxHQUFHO0FBQUEsTUFDckQ7QUFBQSxJQUNGO0FBQUEsSUFDQTtBQUFBLE1BQ0UsT0FBTyxDQUFDLGNBQWM7QUFBQSxNQUN0QixTQUFTLENBQUMsZUFBZTtBQUFBLE1BQ3pCLFNBQVM7QUFBQSxRQUNQLGVBQWU7QUFBQSxNQUNqQjtBQUFBLE1BQ0EsT0FBTztBQUFBLFFBQ0wsQ0FBQyxlQUFlLHFCQUFxQixFQUFFLEdBQUc7QUFBQSxNQUM1QztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSw0QkFBNEI7QUFBQSxJQUMxQjtBQUFBLE1BQ0UsT0FBTyxDQUFDLFNBQVM7QUFBQSxNQUNqQixTQUFTLENBQUMsZUFBZTtBQUFBLE1BQ3pCLFNBQVM7QUFBQSxRQUNQLGVBQWU7QUFBQSxNQUNqQjtBQUFBLE1BQ0EsT0FBTztBQUFBLFFBQ0wsQ0FBQyxlQUFlLHNCQUFzQixFQUFFLEdBQUc7QUFBQSxRQUMzQyxDQUFDLGVBQWUsa0JBQWtCLEVBQUUsR0FBRztBQUFBLFFBQ3ZDLENBQUMsZUFBZSxlQUFlLEVBQUUsR0FBRztBQUFBLFFBQ3BDLENBQUMsZUFBZSxzQkFBc0IsRUFBRSxHQUFHO0FBQUEsUUFDM0MsQ0FBQyxlQUFlLGtCQUFrQixFQUFFLEdBQUc7QUFBQSxRQUN2QyxDQUFDLGVBQWUsMkJBQTJCLEVBQUUsR0FBRztBQUFBLFFBQ2hELENBQUMsZUFBZSwrQkFBK0IsRUFBRSxHQUFHO0FBQUEsUUFDcEQsQ0FBQyxlQUFlLGVBQWUsRUFBRSxHQUFHO0FBQUEsUUFDcEMsQ0FBQyxlQUFlLCtCQUErQixFQUFFLEdBQUc7QUFBQSxRQUNwRCxDQUFDLGVBQWUsOEJBQThCLEVBQUUsR0FBRztBQUFBLFFBQ25ELENBQUMsZUFBZSxxQkFBcUIsRUFBRSxHQUFHO0FBQUEsUUFDMUMsQ0FBQyxlQUFlLDhCQUE4QixFQUFFLEdBQUc7QUFBQSxNQUNyRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxJQUFNLGtCQUVGO0FBQUEsRUFDRixHQUFHO0FBQUEsRUFDSDtBQUNGO0FBQ0EsSUFBTyxjQUFROyIsCiAgIm5hbWVzIjogW10KfQo=
|
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-428c","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.10.0","@typescript-eslint/utils":"8.10.0","debug":"^4.3.7","ts-api-utils":"^1.3.0"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^5.5.1","@checkdigit/typescript-config":"^8.0.0","@eslint/js":"^9.13.0","@types/debug":"^4.1.12","@types/eslint":"^9.6.1","@types/eslint-config-prettier":"^6.11.3","@typescript-eslint/parser":"8.10.0","@typescript-eslint/rule-tester":"8.10.0","eslint":"^9.13.0","eslint-config-prettier":"^9.1.0","eslint-import-resolver-typescript":"^3.6.3","eslint-plugin-eslint-plugin":"^6.2.0","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.10.0"},"peerDependencies":{"eslint":">=9 <10"},"engines":{"node":">=20.17"}}
|
|
@@ -7,14 +7,24 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { strict as assert } from 'node:assert';
|
|
10
|
+
|
|
10
11
|
import { AST_TOKEN_TYPES, ESLintUtils, TSESTree } from '@typescript-eslint/utils';
|
|
11
12
|
import type { RuleFix, RuleFixer } from '@typescript-eslint/utils/ts-eslint';
|
|
13
|
+
|
|
12
14
|
import getDocumentationUrl from '../get-documentation-url';
|
|
13
15
|
|
|
14
16
|
export const ruleId = 'agent-test-wiring';
|
|
15
17
|
|
|
16
18
|
const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
17
19
|
|
|
20
|
+
const STATEMENT_FIXTURE_RESET = 'fixture.reset()';
|
|
21
|
+
const STATEMENT_FIXTURE_RESET_AWAITED = `await ${STATEMENT_FIXTURE_RESET};`;
|
|
22
|
+
const STATEMENT_AGENT_DECLARATION = 'let agent: Agent;';
|
|
23
|
+
const STATEMENT_AGENT_CREATION = 'agent = await createAgent();';
|
|
24
|
+
const STATEMENT_AGENT_REGISTER = 'agent.register(await fixturePlugin(fixture));';
|
|
25
|
+
const STATEMENT_AGENT_ENABLE = 'agent.enable();';
|
|
26
|
+
const STATEMENT_AGENT_DISPOSE = 'await agent[Symbol.asyncDispose]();';
|
|
27
|
+
|
|
18
28
|
const rule: ESLintUtils.RuleModule<'updateTestWiring' | 'unknownError'> = createRule({
|
|
19
29
|
name: ruleId,
|
|
20
30
|
meta: {
|
|
@@ -33,21 +43,37 @@ const rule: ESLintUtils.RuleModule<'updateTestWiring' | 'unknownError'> = create
|
|
|
33
43
|
create(context) {
|
|
34
44
|
const sourceCode = context.sourceCode;
|
|
35
45
|
const importDeclarations = new Map<string, TSESTree.ImportDeclaration>();
|
|
36
|
-
let
|
|
37
|
-
let
|
|
46
|
+
let isFixtureUsed = false;
|
|
47
|
+
let beforeAll: TSESTree.CallExpression | undefined;
|
|
48
|
+
let afterAll: TSESTree.CallExpression | undefined;
|
|
38
49
|
|
|
39
50
|
return {
|
|
40
51
|
ImportDeclaration(importDeclaration) {
|
|
41
52
|
const moduleName = importDeclaration.source.value;
|
|
42
53
|
importDeclarations.set(moduleName, importDeclaration);
|
|
54
|
+
if (
|
|
55
|
+
moduleName === '@checkdigit/fixture' &&
|
|
56
|
+
importDeclaration.specifiers.some(
|
|
57
|
+
(specifier) =>
|
|
58
|
+
specifier.type === TSESTree.AST_NODE_TYPES.ImportSpecifier &&
|
|
59
|
+
specifier.imported.type === TSESTree.AST_NODE_TYPES.Identifier &&
|
|
60
|
+
specifier.imported.name === 'createFixture',
|
|
61
|
+
)
|
|
62
|
+
) {
|
|
63
|
+
isFixtureUsed = true;
|
|
64
|
+
}
|
|
43
65
|
},
|
|
44
66
|
'CallExpression[callee.name="beforeAll"]': (callExpression: TSESTree.CallExpression) => {
|
|
45
|
-
|
|
67
|
+
beforeAll = callExpression;
|
|
46
68
|
},
|
|
47
69
|
'CallExpression[callee.name="afterAll"]': (callExpression: TSESTree.CallExpression) => {
|
|
48
|
-
|
|
70
|
+
afterAll = callExpression;
|
|
49
71
|
},
|
|
50
72
|
'Program:exit'(program) {
|
|
73
|
+
if (!isFixtureUsed) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
|
|
51
77
|
try {
|
|
52
78
|
let jestImportFixer: ((fixer: RuleFixer) => RuleFix) | undefined;
|
|
53
79
|
let agentImportFixer: ((fixer: RuleFixer) => RuleFix) | undefined;
|
|
@@ -89,40 +115,50 @@ const rule: ESLintUtils.RuleModule<'updateTestWiring' | 'unknownError'> = create
|
|
|
89
115
|
fixer.insertTextAfter(lastImportDeclaration, `\nimport fixturePlugin from '../../plugin/fixture.test';`);
|
|
90
116
|
}
|
|
91
117
|
|
|
92
|
-
if (
|
|
93
|
-
const
|
|
94
|
-
assert.ok(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
118
|
+
if (beforeAll !== undefined) {
|
|
119
|
+
const beforeAllArgument = beforeAll.arguments[0];
|
|
120
|
+
assert.ok(beforeAllArgument !== undefined);
|
|
121
|
+
if (!sourceCode.getText(beforeAllArgument).includes(STATEMENT_AGENT_CREATION)) {
|
|
122
|
+
if (
|
|
123
|
+
beforeAllArgument.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression &&
|
|
124
|
+
beforeAllArgument.body.type === TSESTree.AST_NODE_TYPES.BlockStatement
|
|
125
|
+
) {
|
|
126
|
+
const fixtureResetStatement = beforeAllArgument.body.body.find(
|
|
127
|
+
(statement) => sourceCode.getText(statement) === STATEMENT_FIXTURE_RESET_AWAITED,
|
|
128
|
+
);
|
|
129
|
+
assert.ok(fixtureResetStatement !== undefined);
|
|
130
|
+
beforeAllFixer = (fixer: RuleFixer) =>
|
|
131
|
+
fixer.replaceText(
|
|
132
|
+
fixtureResetStatement,
|
|
133
|
+
[
|
|
134
|
+
STATEMENT_AGENT_CREATION,
|
|
135
|
+
STATEMENT_AGENT_REGISTER,
|
|
136
|
+
STATEMENT_AGENT_ENABLE,
|
|
137
|
+
STATEMENT_FIXTURE_RESET_AWAITED,
|
|
138
|
+
].join('\n'),
|
|
139
|
+
);
|
|
140
|
+
} else {
|
|
107
141
|
beforeAllFixer = (fixer: RuleFixer) =>
|
|
108
142
|
fixer.replaceText(
|
|
109
|
-
|
|
143
|
+
beforeAllArgument,
|
|
110
144
|
[
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
145
|
+
`async () => {`,
|
|
146
|
+
STATEMENT_AGENT_CREATION,
|
|
147
|
+
STATEMENT_AGENT_REGISTER,
|
|
148
|
+
STATEMENT_AGENT_ENABLE,
|
|
149
|
+
STATEMENT_FIXTURE_RESET_AWAITED,
|
|
150
|
+
`}`,
|
|
115
151
|
].join('\n'),
|
|
116
152
|
);
|
|
117
|
-
agentDeclarationFixer = (fixer: RuleFixer) =>
|
|
118
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
119
|
-
fixer.insertTextBefore(beforeAllCallExpression!, 'let agent: Agent;\n');
|
|
120
153
|
}
|
|
154
|
+
agentDeclarationFixer = (fixer: RuleFixer) =>
|
|
155
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
156
|
+
fixer.insertTextBefore(beforeAll!, `${STATEMENT_AGENT_DECLARATION}\n`);
|
|
121
157
|
}
|
|
122
158
|
}
|
|
123
159
|
|
|
124
|
-
if (
|
|
125
|
-
const afterAllArrowFunctionExpression =
|
|
160
|
+
if (afterAll !== undefined) {
|
|
161
|
+
const afterAllArrowFunctionExpression = afterAll.arguments[0];
|
|
126
162
|
assert.ok(
|
|
127
163
|
afterAllArrowFunctionExpression !== undefined &&
|
|
128
164
|
afterAllArrowFunctionExpression.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression,
|
|
@@ -131,23 +167,20 @@ const rule: ESLintUtils.RuleModule<'updateTestWiring' | 'unknownError'> = create
|
|
|
131
167
|
assert.ok(arrowFunctionBody.type === TSESTree.AST_NODE_TYPES.BlockStatement);
|
|
132
168
|
|
|
133
169
|
const afterAllBodyText = sourceCode.getText(arrowFunctionBody);
|
|
134
|
-
if (!afterAllBodyText.includes(
|
|
170
|
+
if (!afterAllBodyText.includes(STATEMENT_AGENT_DISPOSE)) {
|
|
135
171
|
const lastStatement = arrowFunctionBody.body.at(-1);
|
|
136
172
|
assert.ok(lastStatement);
|
|
137
|
-
afterAllFixer = (fixer: RuleFixer) =>
|
|
138
|
-
fixer.insertTextAfter(lastStatement, 'await agent[Symbol.asyncDispose]();');
|
|
173
|
+
afterAllFixer = (fixer: RuleFixer) => fixer.insertTextAfter(lastStatement, STATEMENT_AGENT_DISPOSE);
|
|
139
174
|
}
|
|
140
|
-
} else if (
|
|
141
|
-
const nextToken = sourceCode.getTokenAfter(
|
|
175
|
+
} else if (beforeAll !== undefined) {
|
|
176
|
+
const nextToken = sourceCode.getTokenAfter(beforeAll);
|
|
142
177
|
afterAllFixer = (fixer: RuleFixer) =>
|
|
143
178
|
fixer.insertTextAfter(
|
|
144
179
|
nextToken !== null && nextToken.type === AST_TOKEN_TYPES.Punctuator
|
|
145
180
|
? nextToken
|
|
146
181
|
: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
await agent[Symbol.asyncDispose]();
|
|
150
|
-
});`,
|
|
182
|
+
beforeAll!,
|
|
183
|
+
['', `afterAll(async () => {`, STATEMENT_AGENT_DISPOSE, `});`].join('\n'),
|
|
151
184
|
);
|
|
152
185
|
}
|
|
153
186
|
|
package/src/index.ts
CHANGED
|
@@ -155,6 +155,8 @@ const configs: Record<string, TSESLint.FlatConfig.Config | TSESLint.FlatConfig.C
|
|
|
155
155
|
'agent-phase-1-test': [
|
|
156
156
|
{
|
|
157
157
|
files: ['**/*.spec.ts', '**/*.test.ts', 'src/api/v*/index.ts'],
|
|
158
|
+
// eslint-disable-next-line sonarjs/no-duplicate-string
|
|
159
|
+
ignores: ['src/plugin/**'],
|
|
158
160
|
plugins: {
|
|
159
161
|
'@checkdigit': plugin,
|
|
160
162
|
},
|
|
@@ -175,6 +177,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config | TSESLint.FlatConfig.C
|
|
|
175
177
|
},
|
|
176
178
|
{
|
|
177
179
|
files: ['**/*.spec.ts'],
|
|
180
|
+
ignores: ['src/plugin/**'],
|
|
178
181
|
plugins: {
|
|
179
182
|
'@checkdigit': plugin,
|
|
180
183
|
},
|
|
@@ -186,6 +189,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config | TSESLint.FlatConfig.C
|
|
|
186
189
|
'agent-phase-2-production': [
|
|
187
190
|
{
|
|
188
191
|
files: ['**/*.ts'],
|
|
192
|
+
ignores: ['src/plugin/**'],
|
|
189
193
|
plugins: {
|
|
190
194
|
'@checkdigit': plugin,
|
|
191
195
|
},
|