@checkdigit/eslint-plugin 6.6.0-PR.75-487e → 6.6.0-PR.75-aede

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/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@checkdigit/eslint-plugin","version":"6.6.0-PR.75-487e","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","require":"./dist-cjs/index.cjs","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"files":["src","dist-types","dist-cjs","dist-mjs","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-cjs/**/*.test.cjs","!dist-cjs/**/*.spec.cjs","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"],"scripts":{"build:dist-cjs":"rimraf dist-cjs && npx builder --type=commonjs --sourceMap --entryPoint=index.ts --outDir=dist-cjs --outFile=index.cjs --external=espree && echo \"module.exports = module.exports.default;\" >> dist-cjs/index.cjs","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 --ignore-path .gitignore .","lint:fix":"eslint --ignore-path .gitignore . --fix","prepublishOnly":"npm run build:dist-types && npm run build:dist-cjs && 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":"7.18.0","@typescript-eslint/utils":"7.18.0","debug":"^4.3.7","ts-api-utils":"^1.3.0"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^5.5.0","@checkdigit/typescript-config":"6.0.0","@types/debug":"^4.1.12","@types/eslint":"8.56.10","@typescript-eslint/eslint-plugin":"7.18.0","@typescript-eslint/parser":"7.18.0","@typescript-eslint/rule-tester":"7.18.0","eslint-config-prettier":"^9.1.0","eslint-plugin-eslint-plugin":"^6.2.0","eslint-plugin-import":"^2.29.1","eslint-plugin-no-only-tests":"^3.1.0","eslint-plugin-no-secrets":"^1.0.2","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"0.24.0","http-status-codes":"^2.3.0"},"peerDependencies":{"eslint":">=8 <9"},"engines":{"node":">=20.14"}}
1
+ {"name":"@checkdigit/eslint-plugin","version":"6.6.0-PR.75-aede","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","require":"./dist-cjs/index.cjs","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"files":["src","dist-types","dist-cjs","dist-mjs","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-cjs/**/*.test.cjs","!dist-cjs/**/*.spec.cjs","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"],"scripts":{"build:dist-cjs":"rimraf dist-cjs && npx builder --type=commonjs --sourceMap --entryPoint=index.ts --outDir=dist-cjs --outFile=index.cjs --external=espree && echo \"module.exports = module.exports.default;\" >> dist-cjs/index.cjs","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 --ignore-path .gitignore .","lint:fix":"eslint --ignore-path .gitignore . --fix","prepublishOnly":"npm run build:dist-types && npm run build:dist-cjs && 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":"7.18.0","@typescript-eslint/utils":"7.18.0","debug":"^4.3.7","ts-api-utils":"^1.3.0"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^5.5.0","@checkdigit/typescript-config":"6.0.0","@types/debug":"^4.1.12","@types/eslint":"8.56.10","@typescript-eslint/eslint-plugin":"7.18.0","@typescript-eslint/parser":"7.18.0","@typescript-eslint/rule-tester":"7.18.0","eslint-config-prettier":"^9.1.0","eslint-plugin-eslint-plugin":"^6.2.0","eslint-plugin-import":"^2.29.1","eslint-plugin-no-only-tests":"^3.1.0","eslint-plugin-no-secrets":"^1.0.2","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"0.24.0","http-status-codes":"^2.3.0"},"peerDependencies":{"eslint":">=8 <9"},"engines":{"node":">=20.14"}}
@@ -0,0 +1,204 @@
1
+ // agent/agent-test-wiring.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_TOKEN_TYPES, ESLintUtils, TSESTree } from '@typescript-eslint/utils';
10
+ import type { RuleFix, RuleFixer } from '@typescript-eslint/utils/ts-eslint';
11
+ import { strict as assert } from 'node:assert';
12
+ import getDocumentationUrl from '../get-documentation-url';
13
+
14
+ export const ruleId = 'agent-test-wiring';
15
+
16
+ const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
17
+
18
+ const rule = createRule({
19
+ name: ruleId,
20
+ meta: {
21
+ type: 'suggestion',
22
+ docs: {
23
+ description: 'Update test wiring.',
24
+ },
25
+ messages: {
26
+ updateTestWiring: 'Updating test wiring.',
27
+ unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.',
28
+ },
29
+ fixable: 'code',
30
+ schema: [],
31
+ },
32
+ defaultOptions: [],
33
+ create(context) {
34
+ const sourceCode = context.sourceCode;
35
+ const importDeclarations = new Map<string, TSESTree.ImportDeclaration>();
36
+ let beforeAllCallExpression: TSESTree.CallExpression | undefined;
37
+ let afterAllCallExpression: TSESTree.CallExpression | undefined;
38
+
39
+ return {
40
+ ImportDeclaration(importDeclaration) {
41
+ const moduleName = importDeclaration.source.value;
42
+ importDeclarations.set(moduleName, importDeclaration);
43
+ },
44
+ 'CallExpression[callee.name="beforeAll"]': (callExpression: TSESTree.CallExpression) => {
45
+ beforeAllCallExpression = callExpression;
46
+ },
47
+ 'CallExpression[callee.name="afterAll"]': (callExpression: TSESTree.CallExpression) => {
48
+ afterAllCallExpression = callExpression;
49
+ },
50
+ 'Program:exit'(program) {
51
+ try {
52
+ let jestImportFixer: ((fixer: RuleFixer) => RuleFix) | undefined;
53
+ let agentImportFixer: ((fixer: RuleFixer) => RuleFix) | undefined;
54
+ let fixturePluginImportFixer: ((fixer: RuleFixer) => RuleFix) | undefined;
55
+ let agentDeclarationFixer: ((fixer: RuleFixer) => RuleFix) | undefined;
56
+ let beforeAllFixer: ((fixer: RuleFixer) => RuleFix) | undefined;
57
+ let afterAllFixer: ((fixer: RuleFixer) => RuleFix) | undefined;
58
+
59
+ const lastImportDeclaration = [...importDeclarations.values()].at(-1);
60
+ assert.ok(lastImportDeclaration);
61
+
62
+ const jestImportDeclaration = importDeclarations.get('@jest/globals');
63
+ if (
64
+ jestImportDeclaration &&
65
+ !jestImportDeclaration.specifiers.some(
66
+ (specifier) =>
67
+ specifier.type === TSESTree.AST_NODE_TYPES.ImportSpecifier && specifier.imported.name === 'afterAll',
68
+ )
69
+ ) {
70
+ const firstImportSpecifier = jestImportDeclaration.specifiers[0];
71
+ assert.ok(firstImportSpecifier);
72
+ jestImportFixer = (fixer: RuleFixer) => fixer.insertTextBefore(firstImportSpecifier, 'afterAll, ');
73
+ }
74
+
75
+ const agentImportDeclaration = importDeclarations.get('@checkdigit/agent');
76
+ if (!agentImportDeclaration) {
77
+ agentImportFixer = (fixer: RuleFixer) =>
78
+ fixer.insertTextAfter(
79
+ lastImportDeclaration,
80
+ `\nimport createAgent, { type Agent } from '@checkdigit/agent';`,
81
+ );
82
+ }
83
+
84
+ const fixturePluginImportDeclaration = importDeclarations.get('../../plugin/fixture.test');
85
+ if (!fixturePluginImportDeclaration) {
86
+ fixturePluginImportFixer = (fixer: RuleFixer) =>
87
+ fixer.insertTextAfter(lastImportDeclaration, `\nimport fixturePlugin from '../../plugin/fixture.test';`);
88
+ }
89
+
90
+ if (beforeAllCallExpression !== undefined) {
91
+ const beforeAllArrowFunctionExpression = beforeAllCallExpression.arguments[0];
92
+ assert.ok(
93
+ beforeAllArrowFunctionExpression !== undefined &&
94
+ beforeAllArrowFunctionExpression.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression,
95
+ );
96
+ const arrowFunctionBody = beforeAllArrowFunctionExpression.body;
97
+ assert.ok(arrowFunctionBody.type === TSESTree.AST_NODE_TYPES.BlockStatement);
98
+
99
+ const targetStatement = arrowFunctionBody.body.find(
100
+ (statement) => sourceCode.getText(statement) /*?*/ === 'await fixture.reset();',
101
+ );
102
+ if (targetStatement !== undefined) {
103
+ const beforeAllBodyText = sourceCode.getText(arrowFunctionBody);
104
+ if (!beforeAllBodyText.includes('agent = await createAgent();')) {
105
+ beforeAllFixer = (fixer: RuleFixer) =>
106
+ fixer.replaceText(
107
+ targetStatement,
108
+ [
109
+ 'agent = await createAgent();',
110
+ 'agent.register(await fixturePlugin(fixture));',
111
+ 'agent.enable();',
112
+ 'await fixture.reset();',
113
+ ].join('\n'),
114
+ );
115
+ }
116
+ if (!beforeAllBodyText.includes('let agent: Agent;')) {
117
+ agentDeclarationFixer = (fixer: RuleFixer) =>
118
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
119
+ fixer.insertTextBefore(beforeAllCallExpression!, 'let agent: Agent;\n');
120
+ }
121
+ }
122
+ }
123
+
124
+ if (afterAllCallExpression !== undefined) {
125
+ const afterAllArrowFunctionExpression = afterAllCallExpression.arguments[0];
126
+ assert.ok(
127
+ afterAllArrowFunctionExpression !== undefined &&
128
+ afterAllArrowFunctionExpression.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression,
129
+ );
130
+ const arrowFunctionBody = afterAllArrowFunctionExpression.body;
131
+ assert.ok(arrowFunctionBody.type === TSESTree.AST_NODE_TYPES.BlockStatement);
132
+
133
+ const afterAllBodyText = sourceCode.getText(arrowFunctionBody);
134
+ if (!afterAllBodyText.includes('await agent[Symbol.asyncDispose]();')) {
135
+ const lastStatement = arrowFunctionBody.body.at(-1);
136
+ assert.ok(lastStatement);
137
+ afterAllFixer = (fixer: RuleFixer) =>
138
+ fixer.insertTextAfter(lastStatement, 'await agent[Symbol.asyncDispose]();');
139
+ }
140
+ } else if (beforeAllCallExpression !== undefined) {
141
+ const nextToken = sourceCode.getTokenAfter(beforeAllCallExpression);
142
+ afterAllFixer = (fixer: RuleFixer) =>
143
+ fixer.insertTextAfter(
144
+ nextToken !== null && nextToken.type === AST_TOKEN_TYPES.Punctuator
145
+ ? nextToken
146
+ : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
147
+ beforeAllCallExpression!,
148
+ `\nafterAll(async () => {
149
+ await agent[Symbol.asyncDispose]();
150
+ });`,
151
+ );
152
+ }
153
+
154
+ if (
155
+ jestImportFixer !== undefined ||
156
+ agentImportFixer !== undefined ||
157
+ fixturePluginImportFixer !== undefined ||
158
+ agentDeclarationFixer !== undefined ||
159
+ beforeAllFixer !== undefined ||
160
+ afterAllFixer !== undefined
161
+ ) {
162
+ context.report({
163
+ messageId: 'updateTestWiring',
164
+ node: program,
165
+ *fix(fixer) {
166
+ if (jestImportFixer !== undefined) {
167
+ yield jestImportFixer(fixer);
168
+ }
169
+ if (agentImportFixer !== undefined) {
170
+ yield agentImportFixer(fixer);
171
+ }
172
+ if (fixturePluginImportFixer !== undefined) {
173
+ yield fixturePluginImportFixer(fixer);
174
+ }
175
+ if (agentDeclarationFixer !== undefined) {
176
+ yield agentDeclarationFixer(fixer);
177
+ }
178
+ if (beforeAllFixer !== undefined) {
179
+ yield beforeAllFixer(fixer);
180
+ }
181
+ if (afterAllFixer !== undefined) {
182
+ yield afterAllFixer(fixer);
183
+ }
184
+ },
185
+ });
186
+ }
187
+ } catch (error) {
188
+ // eslint-disable-next-line no-console
189
+ console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
190
+ context.report({
191
+ node: program,
192
+ messageId: 'unknownError',
193
+ data: {
194
+ fileName: context.filename,
195
+ error: error instanceof Error ? error.toString() : JSON.stringify(error),
196
+ },
197
+ });
198
+ }
199
+ },
200
+ };
201
+ },
202
+ });
203
+
204
+ export default rule;
@@ -17,7 +17,12 @@ export interface FixFunctionCallArgumentsRuleOptions {
17
17
  typesToCheck: string[];
18
18
  }
19
19
  const DEFAULT_OPTIONS = {
20
- typesToCheck: ['Configuration<ResolvedServices>', 'EMPTY_CONTEXT', 'Fixture'],
20
+ typesToCheck: [
21
+ 'Configuration<ResolvedServices>',
22
+ 'Fixture<ResolvedServices>',
23
+ 'InboundContext',
24
+ '{ get: () => string; }',
25
+ ],
21
26
  };
22
27
 
23
28
  const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
@@ -53,7 +58,7 @@ const rule = createRule({
53
58
  },
54
59
  defaultOptions: [DEFAULT_OPTIONS],
55
60
  create(context) {
56
- const { typesToCheck } = context.options[0] as FixFunctionCallArgumentsRuleOptions;
61
+ const { typesToCheck } = context.options[0] ?? DEFAULT_OPTIONS;
57
62
  const parserServices = ESLintUtils.getParserServices(context);
58
63
  const typeChecker = parserServices.program.getTypeChecker();
59
64
  const sourceCode = context.sourceCode;
package/src/index.ts CHANGED
@@ -7,6 +7,7 @@
7
7
  */
8
8
 
9
9
  import addUrlDomain, { ruleId as addUrlDomainRuleId } from './agent/add-url-domain';
10
+ import agentTestWiring, { ruleId as agentTestWiringRuleId } from './agent/agent-test-wiring';
10
11
  import fetchResponseBodyJson, { ruleId as fetchResponseBodyJsonRuleId } from './agent/fetch-response-body-json';
11
12
  import fetchResponseHeaderGetter, {
12
13
  ruleId as fetchResponseHeaderGetterRuleId,
@@ -77,6 +78,7 @@ export default {
77
78
  [noUnusedServiceVariablesRuleId]: noUnusedServiceVariables,
78
79
  [noUnusedImportsRuleId]: noUnusedImports,
79
80
  [fixFunctionCallArgumentsRuleId]: fixFunctionCallArguments,
81
+ [agentTestWiringRuleId]: agentTestWiring,
80
82
  },
81
83
  configs: {
82
84
  all: {
@@ -97,6 +99,7 @@ export default {
97
99
  [`@checkdigit/${noDuplicatedImportsRuleId}`]: 'error',
98
100
  [`@checkdigit/${requireFixedServicesImportRuleId}`]: 'error',
99
101
  [`@checkdigit/${requireTypeOutOfTypeOnlyImportsRuleId}`]: 'error',
102
+ // --- agent rules BEGIN ---
100
103
  [`@checkdigit/${noMappedResponseRuleId}`]: 'off',
101
104
  [`@checkdigit/${addUrlDomainRuleId}`]: 'off',
102
105
  [`@checkdigit/${noFixtureRuleId}`]: 'off',
@@ -109,6 +112,8 @@ export default {
109
112
  [`@checkdigit/${noUnusedServiceVariablesRuleId}`]: 'off',
110
113
  [`@checkdigit/${noUnusedImportsRuleId}`]: 'off',
111
114
  [`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: 'off',
115
+ [`@checkdigit/${agentTestWiringRuleId}`]: 'off',
116
+ // --- agent rules END ---
112
117
  },
113
118
  },
114
119
  recommended: {
@@ -130,39 +135,50 @@ export default {
130
135
  overrides: [
131
136
  {
132
137
  files: ['*.spec.ts', '*.test.ts', 'src/api/v*/index.ts'],
138
+ rules: {
139
+ [`@checkdigit/${noMappedResponseRuleId}`]: 'error',
140
+ [`@checkdigit/${addUrlDomainRuleId}`]: 'error',
141
+ [`@checkdigit/${noFixtureRuleId}`]: 'error',
142
+ [`@checkdigit/${noServiceWrapperRuleId}`]: 'error',
143
+ [`@checkdigit/${noStatusCodeRuleId}`]: 'error',
144
+ [`@checkdigit/${fetchResponseBodyJsonRuleId}`]: 'error',
145
+ [`@checkdigit/${fetchResponseHeaderGetterRuleId}`]: 'error',
146
+ [`@checkdigit/${fetchThenRuleId}`]: 'error',
147
+ [`@checkdigit/${noUnusedFunctionArgumentsRuleId}`]: 'error',
148
+ [`@checkdigit/${noUnusedServiceVariablesRuleId}`]: 'error',
149
+ [`@checkdigit/${noUnusedImportsRuleId}`]: 'error',
150
+ [`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: 'error',
151
+ },
152
+ },
153
+ {
154
+ files: ['*.spec.ts'],
155
+ rules: {
156
+ [`@checkdigit/${agentTestWiringRuleId}`]: 'error',
157
+ },
133
158
  },
134
159
  ],
135
- rules: {
136
- [`@checkdigit/${noMappedResponseRuleId}`]: 'error',
137
- [`@checkdigit/${addUrlDomainRuleId}`]: 'error',
138
- [`@checkdigit/${noFixtureRuleId}`]: 'error',
139
- [`@checkdigit/${noServiceWrapperRuleId}`]: 'error',
140
- [`@checkdigit/${noStatusCodeRuleId}`]: 'error',
141
- [`@checkdigit/${fetchResponseBodyJsonRuleId}`]: 'error',
142
- [`@checkdigit/${fetchResponseHeaderGetterRuleId}`]: 'error',
143
- [`@checkdigit/${fetchThenRuleId}`]: 'error',
144
- [`@checkdigit/${noUnusedFunctionArgumentsRuleId}`]: 'error',
145
- [`@checkdigit/${noUnusedServiceVariablesRuleId}`]: 'error',
146
- [`@checkdigit/${noUnusedImportsRuleId}`]: 'error',
147
- [`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: 'error',
148
- },
149
160
  },
150
161
  'agent-phase-2-production': {
151
- ignorePatterns: ['*.spec.ts', '*.test.ts'],
152
- rules: {
153
- [`@checkdigit/${noMappedResponseRuleId}`]: 'error',
154
- [`@checkdigit/${addUrlDomainRuleId}`]: 'error',
155
- [`@checkdigit/${noFixtureRuleId}`]: 'off',
156
- [`@checkdigit/${noServiceWrapperRuleId}`]: 'error',
157
- [`@checkdigit/${noStatusCodeRuleId}`]: 'error',
158
- [`@checkdigit/${fetchResponseBodyJsonRuleId}`]: 'error',
159
- [`@checkdigit/${fetchResponseHeaderGetterRuleId}`]: 'error',
160
- [`@checkdigit/${fetchThenRuleId}`]: 'error',
161
- [`@checkdigit/${noUnusedFunctionArgumentsRuleId}`]: 'error',
162
- [`@checkdigit/${noUnusedServiceVariablesRuleId}`]: 'error',
163
- [`@checkdigit/${noUnusedImportsRuleId}`]: 'error',
164
- [`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: 'error',
165
- },
162
+ overrides: [
163
+ {
164
+ files: ['*.ts'],
165
+ excludedFiles: ['*.spec.ts', '*.test.ts'],
166
+ rules: {
167
+ [`@checkdigit/${noMappedResponseRuleId}`]: 'error',
168
+ [`@checkdigit/${addUrlDomainRuleId}`]: 'error',
169
+ [`@checkdigit/${noFixtureRuleId}`]: 'off',
170
+ [`@checkdigit/${noServiceWrapperRuleId}`]: 'error',
171
+ [`@checkdigit/${noStatusCodeRuleId}`]: 'error',
172
+ [`@checkdigit/${fetchResponseBodyJsonRuleId}`]: 'error',
173
+ [`@checkdigit/${fetchResponseHeaderGetterRuleId}`]: 'error',
174
+ [`@checkdigit/${fetchThenRuleId}`]: 'error',
175
+ [`@checkdigit/${noUnusedFunctionArgumentsRuleId}`]: 'error',
176
+ [`@checkdigit/${noUnusedServiceVariablesRuleId}`]: 'error',
177
+ [`@checkdigit/${noUnusedImportsRuleId}`]: 'error',
178
+ [`@checkdigit/${fixFunctionCallArgumentsRuleId}`]: 'error',
179
+ },
180
+ },
181
+ ],
166
182
  },
167
183
  },
168
184
  };