@checkdigit/eslint-plugin 7.6.0-PR.75-04b9 → 7.6.0-PR.75-c06b

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.
@@ -192,23 +192,18 @@ var rule = createRule({
192
192
  return {
193
193
  // eslint-disable-next-line max-lines-per-function
194
194
  'CallExpression[callee.property.name="expect"]': (supertestCall) => {
195
- assert.ok(supertestCall.callee.type === AST_NODE_TYPES.MemberExpression);
196
- if (supertestCall.callee.object.type === AST_NODE_TYPES.CallExpression && supertestCall.callee.object.callee.type === AST_NODE_TYPES.MemberExpression && supertestCall.callee.object.callee.property.type === AST_NODE_TYPES.Identifier && supertestCall.callee.object.callee.property.name === "expect") {
197
- return;
198
- }
199
195
  try {
200
- if (isUsedInArrayOrAsArgument(supertestCall) || getEnclosingFunction(supertestCall)?.async === false) {
196
+ assert.ok(supertestCall.callee.type === AST_NODE_TYPES.MemberExpression);
197
+ if (supertestCall.callee.object.type !== AST_NODE_TYPES.CallExpression || supertestCall.callee.object.callee.type === AST_NODE_TYPES.MemberExpression && supertestCall.callee.object.callee.property.type === AST_NODE_TYPES.Identifier && supertestCall.callee.object.callee.property.name === "expect") {
201
198
  return;
202
199
  }
203
- const fixtureFunction = supertestCall.callee.object;
204
- if (fixtureFunction.type !== AST_NODE_TYPES.CallExpression) {
200
+ if (isUsedInArrayOrAsArgument(supertestCall) || getEnclosingFunction(supertestCall)?.async === false) {
205
201
  return;
206
202
  }
207
203
  const indentation = getIndentation(supertestCall, sourceCode);
208
204
  const fixtureCallInformation = {};
205
+ const fixtureFunction = supertestCall.callee.object;
209
206
  analyzeFixtureCall(fixtureFunction, fixtureCallInformation, sourceCode);
210
- sourceCode.getText(fixtureCallInformation.fixtureNode);
211
- sourceCode.getText(fixtureCallInformation.rootNode);
212
207
  fixtureCallInformation.assertions?.flat().map((ass) => sourceCode.getText(ass));
213
208
  const {
214
209
  variable: responseVariable,
@@ -343,4 +338,4 @@ export {
343
338
  no_supertest_default as default,
344
339
  ruleId
345
340
  };
346
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLXN1cGVydGVzdC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLFVBQVUsY0FBYztBQUVqQyxTQUFTLGdCQUFnQixtQkFBNkI7QUFJdEQ7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxPQUFPLHlCQUF5QjtBQUNoQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGlDQUFpQztBQUMxQyxTQUFTLDhCQUE4Qix1Q0FBdUM7QUFFdkUsSUFBTSxTQUFTO0FBdUJ0QixTQUFTLG1CQUFtQixNQUErQixTQUFpQyxZQUF3QjtBQUNsSCxRQUFNLFNBQVMsVUFBVSxJQUFJO0FBQzdCLFNBQU8sR0FBRyxRQUFRLHFEQUFxRDtBQUV2RSxNQUFJO0FBQ0osTUFBSSxPQUFPLFNBQVMsZUFBZSxpQkFBaUI7QUFFbEQsWUFBUSxjQUFjO0FBQ3RCLFlBQVEsV0FBVztBQUFBLEVBQ3JCLFdBQ0UsT0FBTyxTQUFTLGVBQWUsbUJBQy9CLE9BQU8sU0FBUyxlQUFlLGtCQUMvQixPQUFPLFNBQVMsZUFBZSx5QkFDL0I7QUFFQSxZQUFRLGNBQWM7QUFDdEIsWUFBUSxXQUFXO0FBQUEsRUFDckIsV0FBVyxPQUFPLFNBQVMsZUFBZSxpQkFBaUI7QUFDekQsWUFBUSxjQUFjO0FBQ3RCLFVBQU0scUJBQXFCLHNCQUFzQixNQUFNO0FBQ3ZELFdBQU8sR0FBRyxrQkFBa0I7QUFDNUIsVUFBTSxjQUFjLFVBQVUsTUFBTTtBQUNwQyxRQUFJLGFBQWEsU0FBUyxlQUFlLGtCQUFrQjtBQUN6RCxjQUFRLFdBQVc7QUFDbkIsY0FBUSxzQkFBc0I7QUFDOUIsVUFBSSxZQUFZLFNBQVMsU0FBUyxlQUFlLGNBQWMsWUFBWSxTQUFTLFNBQVMsUUFBUTtBQUNuRyxnQkFBUSxzQkFBc0I7QUFBQSxNQUNoQztBQUNBLFVBQ0UsWUFBWSxTQUFTLFNBQVMsZUFBZSxlQUM1QyxZQUFZLFNBQVMs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
341
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLXN1cGVydGVzdC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLFVBQVUsY0FBYztBQUVqQyxTQUFTLGdCQUFnQixtQkFBNkI7QUFJdEQ7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxPQUFPLHlCQUF5QjtBQUNoQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGlDQUFpQztBQUMxQyxTQUFTLDhCQUE4Qix1Q0FBdUM7QUFFdkUsSUFBTSxTQUFTO0FBdUJ0QixTQUFTLG1CQUFtQixNQUErQixTQUFpQyxZQUF3QjtBQUNsSCxRQUFNLFNBQVMsVUFBVSxJQUFJO0FBQzdCLFNBQU8sR0FBRyxRQUFRLHFEQUFxRDtBQUV2RSxNQUFJO0FBQ0osTUFBSSxPQUFPLFNBQVMsZUFBZSxpQkFBaUI7QUFFbEQsWUFBUSxjQUFjO0FBQ3RCLFlBQVEsV0FBVztBQUFBLEVBQ3JCLFdBQ0UsT0FBTyxTQUFTLGVBQWUsbUJBQy9CLE9BQU8sU0FBUyxlQUFlLGtCQUMvQixPQUFPLFNBQVMsZUFBZSx5QkFDL0I7QUFFQSxZQUFRLGNBQWM7QUFDdEIsWUFBUSxXQUFXO0FBQUEsRUFDckIsV0FBVyxPQUFPLFNBQVMsZUFBZSxpQkFBaUI7QUFDekQsWUFBUSxjQUFjO0FBQ3RCLFVBQU0scUJBQXFCLHNCQUFzQixNQUFNO0FBQ3ZELFdBQU8sR0FBRyxrQkFBa0I7QUFDNUIsVUFBTSxjQUFjLFVBQVUsTUFBTTtBQUNwQyxRQUFJLGFBQWEsU0FBUyxlQUFlLGtCQUFrQjtBQUN6RCxjQUFRLFdBQVc7QUFDbkIsY0FBUSxzQkFBc0I7QUFDOUIsVUFBSSxZQUFZLFNBQVMsU0FBUyxlQUFlLGNBQWMsWUFBWSxTQUFTLFNBQVMsUUFBUTtBQUNuRyxnQkFBUSxzQkFBc0I7QUFBQSxNQUNoQztBQUNBLFVBQ0UsWUFBWSxTQUFTLFNBQVMsZUFBZSxlQUM1QyxZQUFZLFNBQVMs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
@@ -0,0 +1,170 @@
1
+ // src/agent/supertest-then.ts
2
+ import { strict as assert } from "node:assert";
3
+ import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
4
+ import { getEnclosingFunction, getParent, isUsedInArrayOrAsArgument } from "../library/ts-tree.mjs";
5
+ import getDocumentationUrl from "../get-documentation-url.mjs";
6
+ import { getIndentation } from "../library/format.mjs";
7
+ var ruleId = "supertest-then";
8
+ function analyzeFixtureCall(call, results, sourceCode) {
9
+ const parent = getParent(call);
10
+ if (!parent) {
11
+ return;
12
+ }
13
+ let nextCall;
14
+ if (parent.type !== AST_NODE_TYPES.MemberExpression) {
15
+ results.fixtureNode = call;
16
+ return;
17
+ }
18
+ if (parent.property.type === AST_NODE_TYPES.Identifier) {
19
+ if (parent.property.name === "expect") {
20
+ const assertionCall = getParent(parent);
21
+ assert.ok(assertionCall && assertionCall.type === AST_NODE_TYPES.CallExpression);
22
+ results.assertions = [...results.assertions ?? [], assertionCall.arguments];
23
+ nextCall = assertionCall;
24
+ }
25
+ } else {
26
+ throw new Error(`Unexpected TSESTree.Expression in fixture/supertest call ${sourceCode.getText(parent)}.`);
27
+ }
28
+ if (nextCall) {
29
+ analyzeFixtureCall(nextCall, results, sourceCode);
30
+ }
31
+ }
32
+ function createResponseAssertions(fixtureCallInformation, sourceCode, responseVariableName) {
33
+ let statusAssertion;
34
+ const nonStatusAssertions = [];
35
+ for (const expectArguments of fixtureCallInformation.assertions ?? []) {
36
+ if (expectArguments.length === 1) {
37
+ const [assertionArgument] = expectArguments;
38
+ assert.ok(assertionArgument);
39
+ if (assertionArgument.type === AST_NODE_TYPES.MemberExpression && assertionArgument.object.type === AST_NODE_TYPES.Identifier && assertionArgument.object.name === "StatusCodes" || assertionArgument.type === AST_NODE_TYPES.Literal || sourceCode.getText(assertionArgument).includes("StatusCodes.")) {
40
+ statusAssertion = `assert.equal(${responseVariableName}.status, ${sourceCode.getText(assertionArgument)})`;
41
+ } else if (assertionArgument.type === AST_NODE_TYPES.ArrowFunctionExpression) {
42
+ let functionBody = sourceCode.getText(assertionArgument.body);
43
+ const [originalResponseArgument] = assertionArgument.params;
44
+ assert.ok(originalResponseArgument?.type === AST_NODE_TYPES.Identifier);
45
+ const originalResponseArgumentName = originalResponseArgument.name;
46
+ if (originalResponseArgumentName !== responseVariableName) {
47
+ functionBody = functionBody.replace(
48
+ new RegExp(`\\b${originalResponseArgumentName}\\b`, "ug"),
49
+ responseVariableName
50
+ );
51
+ }
52
+ nonStatusAssertions.push(`assert.doesNotThrow(()=>${functionBody})`);
53
+ } else if (assertionArgument.type === AST_NODE_TYPES.Identifier) {
54
+ nonStatusAssertions.push(
55
+ `assert.doesNotThrow(()=>${sourceCode.getText(assertionArgument)}(${responseVariableName}))`
56
+ );
57
+ } else if (assertionArgument.type === AST_NODE_TYPES.ObjectExpression || assertionArgument.type === AST_NODE_TYPES.CallExpression) {
58
+ nonStatusAssertions.push(
59
+ `assert.deepEqual(await ${responseVariableName}.json(), ${sourceCode.getText(assertionArgument)})`
60
+ );
61
+ } else {
62
+ throw new Error(`Unexpected Supertest assertion argument: ".expect(${sourceCode.getText(assertionArgument)})`);
63
+ }
64
+ } else if (expectArguments.length === 2) {
65
+ const [headerName, headerValue] = expectArguments;
66
+ assert.ok(headerName && headerValue);
67
+ const headersReference = `${responseVariableName}.headers`;
68
+ if (headerValue.type === AST_NODE_TYPES.Literal && headerValue.value instanceof RegExp) {
69
+ nonStatusAssertions.push(
70
+ `assert.ok(${headersReference}.get(${sourceCode.getText(headerName)}).match(${sourceCode.getText(headerValue)}))`
71
+ );
72
+ } else {
73
+ nonStatusAssertions.push(
74
+ `assert.equal(${headersReference}.get(${sourceCode.getText(headerName)}), ${sourceCode.getText(headerValue)})`
75
+ );
76
+ }
77
+ }
78
+ }
79
+ return {
80
+ statusAssertion,
81
+ nonStatusAssertions
82
+ };
83
+ }
84
+ var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
85
+ var rule = createRule({
86
+ name: ruleId,
87
+ meta: {
88
+ type: "suggestion",
89
+ docs: {
90
+ description: "Prefer native fetch API over customized fixture API.",
91
+ url: getDocumentationUrl(ruleId)
92
+ },
93
+ messages: {
94
+ preferNativeFetch: "Prefer native fetch API over customized fixture API.",
95
+ // shouldUseHeaderGetter: 'Getter should be used to access response headers.',
96
+ unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.'
97
+ },
98
+ fixable: "code",
99
+ schema: []
100
+ },
101
+ defaultOptions: [],
102
+ create(context) {
103
+ const sourceCode = context.sourceCode;
104
+ const scopeManager = sourceCode.scopeManager;
105
+ assert.ok(scopeManager);
106
+ return {
107
+ 'CallExpression[callee.property.name="expect"]': (supertestCall) => {
108
+ try {
109
+ assert.ok(supertestCall.callee.type === AST_NODE_TYPES.MemberExpression);
110
+ if (supertestCall.callee.object.type !== AST_NODE_TYPES.CallExpression || supertestCall.callee.object.callee.type === AST_NODE_TYPES.MemberExpression && supertestCall.callee.object.callee.property.type === AST_NODE_TYPES.Identifier && supertestCall.callee.object.callee.property.name === "expect") {
111
+ return;
112
+ }
113
+ if (!(isUsedInArrayOrAsArgument(supertestCall) || getEnclosingFunction(supertestCall)?.async === false)) {
114
+ return;
115
+ }
116
+ const fixtureFunction = supertestCall.callee.object;
117
+ const indentation = getIndentation(supertestCall, sourceCode);
118
+ const [urlArgumentNode] = supertestCall.arguments;
119
+ assert.ok(urlArgumentNode !== void 0);
120
+ const fixtureCallInformation = {};
121
+ analyzeFixtureCall(fixtureFunction, fixtureCallInformation, sourceCode);
122
+ const responseVariableNameToUse = "res";
123
+ const { statusAssertion, nonStatusAssertions } = createResponseAssertions(
124
+ fixtureCallInformation,
125
+ sourceCode,
126
+ responseVariableNameToUse
127
+ );
128
+ const disableLintComment = "// eslint-disable-next-line @checkdigit/no-promise-instance-method";
129
+ const fetchCallText = sourceCode.getText(fixtureFunction);
130
+ const appendingAssignmentAndAssertionText = [
131
+ ...statusAssertion !== void 0 ? [statusAssertion] : [],
132
+ ...nonStatusAssertions
133
+ ].join(`;
134
+ ${indentation}`);
135
+ const replacementText = fixtureCallInformation.assertions ? [
136
+ disableLintComment,
137
+ `${fetchCallText}.then((${responseVariableNameToUse}) => {`,
138
+ appendingAssignmentAndAssertionText === "" ? "" : ` ${appendingAssignmentAndAssertionText};`,
139
+ ` return ${responseVariableNameToUse};`,
140
+ `})`
141
+ ].join(`
142
+ ${indentation}`) : fetchCallText;
143
+ context.report({
144
+ node: supertestCall,
145
+ messageId: "preferNativeFetch",
146
+ fix(fixer) {
147
+ return fixer.replaceText(fixtureCallInformation.fixtureNode, replacementText);
148
+ }
149
+ });
150
+ } catch (error) {
151
+ console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
152
+ context.report({
153
+ node: supertestCall,
154
+ messageId: "unknownError",
155
+ data: {
156
+ fileName: context.filename,
157
+ error: error instanceof Error ? error.toString() : JSON.stringify(error)
158
+ }
159
+ });
160
+ }
161
+ }
162
+ };
163
+ }
164
+ });
165
+ var supertest_then_default = rule;
166
+ export {
167
+ supertest_then_default as default,
168
+ ruleId
169
+ };
170
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L3N1cGVydGVzdC10aGVuLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLFNBQVMsVUFBVSxjQUFjO0FBR2pDLFNBQVMsZ0JBQWdCLG1CQUE2QjtBQUd0RCxTQUFTLHNCQUFzQixXQUFXLGlDQUFpQztBQUMzRSxPQUFPLHlCQUF5QjtBQUNoQyxTQUFTLHNCQUFzQjtBQUd4QixJQUFNLFNBQVM7QUFVdEIsU0FBUyxtQkFBbUIsTUFBK0IsU0FBaUMsWUFBd0I7QUFDbEgsUUFBTSxTQUFTLFVBQVUsSUFBSTtBQUM3QixNQUFJLENBQUMsUUFBUTtBQUNYO0FBQUEsRUFDRjtBQUVBLE1BQUk7QUFDSixNQUFJLE9BQU8sU0FBUyxlQUFlLGtCQUFrQjtBQUNuRCxZQUFRLGNBQWM7QUFDdEI7QUFBQSxFQUNGO0FBRUEsTUFBSSxPQUFPLFNBQVMsU0FBUyxlQUFlLFlBQVk7QUFDdEQsUUFBSSxPQUFPLFNBQVMsU0FBUyxVQUFVO0FBRXJDLFlBQU0sZ0JBQWdCLFVBQVUsTUFBTTtBQUN0QyxhQUFPLEdBQUcsaUJBQWlCLGNBQWMsU0FBUyxlQUFlLGNBQWM7QUFDL0UsY0FBUSxhQUFhLENBQUMsR0FBSSxRQUFRLGNBQWMsQ0FBQyxHQUFJLGNBQWMsU0FBa0M7QUFDckcsaUJBQVc7QUFBQSxJQUNiO0FBQUEsRUFDRixPQUFPO0FBQ0wsVUFBTSxJQUFJLE1BQU0sNERBQTRELFdBQVcsUUFBUSxNQUFNLENBQUMsR0FBRztBQUFBLEVBQzNHO0FBQ0EsTUFBSSxVQUFVO0FBQ1osdUJBQW1CLFVBQVUsU0FBUyxVQUFVO0FBQUEsRUFDbEQ7QUFDRjtBQUdBLFNBQVMseUJBQ1Asd0JBQ0EsWUFDQSxzQkFDQTtBQUNBLE1BQUk7QUFDSixRQUFNLHNCQUFnQyxDQUFDO0FBQ3ZDLGFBQVcsbUJBQW1CLHVCQUF1QixjQUFjLENBQUMsR0FBRztBQUNyRSxRQUFJLGdCQUFnQixXQUFXLEdBQUc7QUFDaEMsWUFBTSxDQUFDLGlCQUFpQixJQUFJO0FB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
@@ -14,6 +14,7 @@ import invalidJsonStringify, { ruleId as invalidJsonStringifyRuleId } from "./in
14
14
  import noDuplicatedImports, { ruleId as noDuplicatedImportsRuleId } from "./no-duplicated-imports.mjs";
15
15
  import noFixture, { ruleId as noFixtureRuleId } from "./agent/no-fixture.mjs";
16
16
  import noSupertest, { ruleId as noSupertestRuleId } from "./agent/no-supertest.mjs";
17
+ import supertestThen, { ruleId as supertestThenRuleId } from "./agent/supertest-then.mjs";
17
18
  import noLegacyServiceTyping, { ruleId as noLegacyServiceTypingRuleId } from "./no-legacy-service-typing.mjs";
18
19
  import noMappedResponse, { ruleId as noMappedResponseRuleId } from "./agent/no-mapped-response.mjs";
19
20
  import noPromiseInstanceMethod, { ruleId as noPromiseInstanceMethodRuleId } from "./no-promise-instance-method.mjs";
@@ -64,6 +65,7 @@ var rules = {
64
65
  [noPromiseInstanceMethodRuleId]: noPromiseInstanceMethod,
65
66
  [noFixtureRuleId]: noFixture,
66
67
  [noSupertestRuleId]: noSupertest,
68
+ [supertestThenRuleId]: supertestThen,
67
69
  [fetchThenRuleId]: fetchThen,
68
70
  [noServiceWrapperRuleId]: noServiceWrapper,
69
71
  [noStatusCodeRuleId]: noStatusCode,
@@ -122,6 +124,7 @@ var configs = {
122
124
  [`@checkdigit/${addUrlDomainRuleId}`]: "off",
123
125
  [`@checkdigit/${noFixtureRuleId}`]: "off",
124
126
  [`@checkdigit/${noSupertestRuleId}`]: "off",
127
+ [`@checkdigit/${supertestThenRuleId}`]: "off",
125
128
  [`@checkdigit/${noServiceWrapperRuleId}`]: "off",
126
129
  [`@checkdigit/${noStatusCodeRuleId}`]: "off",
127
130
  [`@checkdigit/${fetchResponseBodyJsonRuleId}`]: "off",
@@ -171,6 +174,7 @@ var configs = {
171
174
  [`@checkdigit/${addUrlDomainRuleId}`]: "off",
172
175
  [`@checkdigit/${noFixtureRuleId}`]: "off",
173
176
  [`@checkdigit/${noSupertestRuleId}`]: "off",
177
+ [`@checkdigit/${supertestThenRuleId}`]: "off",
174
178
  [`@checkdigit/${noServiceWrapperRuleId}`]: "off",
175
179
  [`@checkdigit/${noStatusCodeRuleId}`]: "off",
176
180
  [`@checkdigit/${fetchResponseBodyJsonRuleId}`]: "off",
@@ -214,7 +218,8 @@ var configs = {
214
218
  [`@checkdigit/${addBasePathImportRuleId}`]: "error",
215
219
  [`@checkdigit/${addAssertImportRuleId}`]: "error",
216
220
  [`@checkdigit/${noFixtureRuleId}`]: "error",
217
- [`@checkdigit/${noSupertestRuleId}`]: "error"
221
+ [`@checkdigit/${noSupertestRuleId}`]: "error",
222
+ [`@checkdigit/${supertestThenRuleId}`]: "error"
218
223
  }
219
224
  },
220
225
  {
@@ -263,4 +268,4 @@ var src_default = defaultToExport;
263
268
  export {
264
269
  src_default as default
265
270
  };
266
- //# sourceMappingURL=data:application/json;base64,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
271
+ //# sourceMappingURL=data:application/json;base64,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
@@ -0,0 +1,4 @@
1
+ import { ESLintUtils } from '@typescript-eslint/utils';
2
+ export declare const ruleId = "supertest-then";
3
+ declare const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'>;
4
+ export default rule;
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@checkdigit/eslint-plugin","version":"7.6.0-PR.75-04b9","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.15.0","@typescript-eslint/utils":"^8.15.0","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.15.0","@types/debug":"^4.1.12","@types/eslint":"^9.6.1","@types/eslint-config-prettier":"^6.11.3","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/rule-tester":"^8.15.0","eslint":"^9.15.0","eslint-config-prettier":"^9.1.0","eslint-import-resolver-typescript":"^3.6.3","eslint-plugin-eslint-plugin":"^6.3.2","eslint-plugin-import":"^2.31.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-no-secrets":"^1.1.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.15.0"},"peerDependencies":{"eslint":">=9 <10"},"engines":{"node":">=20.17"}}
1
+ {"name":"@checkdigit/eslint-plugin","version":"7.6.0-PR.75-c06b","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.15.0","@typescript-eslint/utils":"^8.15.0","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.15.0","@types/debug":"^4.1.12","@types/eslint":"^9.6.1","@types/eslint-config-prettier":"^6.11.3","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/rule-tester":"^8.15.0","eslint":"^9.15.0","eslint-config-prettier":"^9.1.0","eslint-import-resolver-typescript":"^3.6.3","eslint-plugin-eslint-plugin":"^6.3.2","eslint-plugin-import":"^2.31.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-no-secrets":"^1.1.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.15.0"},"peerDependencies":{"eslint":">=9 <10"},"engines":{"node":">=20.17"}}
@@ -284,33 +284,28 @@ const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'> = creat
284
284
  supertestCall: TSESTree.CallExpression,
285
285
  // eslint-disable-next-line sonarjs/cognitive-complexity
286
286
  ) => {
287
- assert.ok(supertestCall.callee.type === AST_NODE_TYPES.MemberExpression);
288
- if (
289
- supertestCall.callee.object.type === AST_NODE_TYPES.CallExpression &&
290
- supertestCall.callee.object.callee.type === AST_NODE_TYPES.MemberExpression &&
291
- supertestCall.callee.object.callee.property.type === AST_NODE_TYPES.Identifier &&
292
- supertestCall.callee.object.callee.property.name === 'expect'
293
- ) {
294
- // skip nested expect calls, only focus on the top level
295
- return;
296
- }
297
287
  try {
298
- if (isUsedInArrayOrAsArgument(supertestCall) || getEnclosingFunction(supertestCall)?.async === false) {
299
- // skip and leave it to "fetch-then" rule to handle it because no "await" can be used here
288
+ assert.ok(supertestCall.callee.type === AST_NODE_TYPES.MemberExpression);
289
+ if (
290
+ supertestCall.callee.object.type !== AST_NODE_TYPES.CallExpression ||
291
+ (supertestCall.callee.object.callee.type === AST_NODE_TYPES.MemberExpression &&
292
+ supertestCall.callee.object.callee.property.type === AST_NODE_TYPES.Identifier &&
293
+ supertestCall.callee.object.callee.property.name === 'expect')
294
+ ) {
295
+ // skip nested expect calls, only focus on the top level
300
296
  return;
301
297
  }
302
298
 
303
- const fixtureFunction = supertestCall.callee.object;
304
- if (fixtureFunction.type !== AST_NODE_TYPES.CallExpression) {
299
+ if (isUsedInArrayOrAsArgument(supertestCall) || getEnclosingFunction(supertestCall)?.async === false) {
300
+ // skip and leave it to "fetch-then" rule to handle it because no "await" can be used here
305
301
  return;
306
302
  }
307
303
 
308
304
  const indentation = getIndentation(supertestCall, sourceCode);
309
305
 
310
306
  const fixtureCallInformation = {} as FixtureCallInformation;
307
+ const fixtureFunction = supertestCall.callee.object;
311
308
  analyzeFixtureCall(fixtureFunction, fixtureCallInformation, sourceCode);
312
- sourceCode.getText(fixtureCallInformation.fixtureNode);
313
- sourceCode.getText(fixtureCallInformation.rootNode);
314
309
  fixtureCallInformation.assertions?.flat().map((ass) => sourceCode.getText(ass));
315
310
 
316
311
  const {
@@ -0,0 +1,322 @@
1
+ // agent/supertest-then.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 { ScopeManager, Variable } from '@typescript-eslint/scope-manager';
12
+ import { AST_NODE_TYPES, ESLintUtils, TSESTree } from '@typescript-eslint/utils';
13
+ import type { SourceCode } from '@typescript-eslint/utils/ts-eslint';
14
+
15
+ import { getEnclosingFunction, getParent, isUsedInArrayOrAsArgument } from '../library/ts-tree';
16
+ import getDocumentationUrl from '../get-documentation-url';
17
+ import { getIndentation } from '../library/format';
18
+ // import { isInvalidResponseHeadersAccess } from './fetch';
19
+
20
+ export const ruleId = 'supertest-then';
21
+
22
+ interface FixtureCallInformation {
23
+ fixtureNode: TSESTree.CallExpression;
24
+ requestBody?: TSESTree.Expression;
25
+ requestHeaders?: { name: TSESTree.Expression; value: TSESTree.Expression }[];
26
+ assertions?: TSESTree.Expression[][];
27
+ }
28
+
29
+ // recursively analyze the fixture/supertest call chain to collect information of request/response
30
+ function analyzeFixtureCall(call: TSESTree.CallExpression, results: FixtureCallInformation, sourceCode: SourceCode) {
31
+ const parent = getParent(call);
32
+ if (!parent) {
33
+ return;
34
+ }
35
+
36
+ let nextCall;
37
+ if (parent.type !== AST_NODE_TYPES.MemberExpression) {
38
+ results.fixtureNode = call;
39
+ return;
40
+ }
41
+
42
+ if (parent.property.type === AST_NODE_TYPES.Identifier) {
43
+ if (parent.property.name === 'expect') {
44
+ // supertest assertions
45
+ const assertionCall = getParent(parent);
46
+ assert.ok(assertionCall && assertionCall.type === AST_NODE_TYPES.CallExpression);
47
+ results.assertions = [...(results.assertions ?? []), assertionCall.arguments as TSESTree.Expression[]];
48
+ nextCall = assertionCall;
49
+ }
50
+ } else {
51
+ throw new Error(`Unexpected TSESTree.Expression in fixture/supertest call ${sourceCode.getText(parent)}.`);
52
+ }
53
+ if (nextCall) {
54
+ analyzeFixtureCall(nextCall, results, sourceCode);
55
+ }
56
+ }
57
+
58
+ // eslint-disable-next-line sonarjs/cognitive-complexity
59
+ function createResponseAssertions(
60
+ fixtureCallInformation: FixtureCallInformation,
61
+ sourceCode: SourceCode,
62
+ responseVariableName: string,
63
+ ) {
64
+ let statusAssertion: string | undefined;
65
+ const nonStatusAssertions: string[] = [];
66
+ for (const expectArguments of fixtureCallInformation.assertions ?? []) {
67
+ if (expectArguments.length === 1) {
68
+ const [assertionArgument] = expectArguments;
69
+ assert.ok(assertionArgument);
70
+ if (
71
+ (assertionArgument.type === AST_NODE_TYPES.MemberExpression &&
72
+ assertionArgument.object.type === AST_NODE_TYPES.Identifier &&
73
+ assertionArgument.object.name === 'StatusCodes') ||
74
+ assertionArgument.type === AST_NODE_TYPES.Literal ||
75
+ sourceCode.getText(assertionArgument).includes('StatusCodes.')
76
+ ) {
77
+ // status code assertion
78
+ statusAssertion = `assert.equal(${responseVariableName}.status, ${sourceCode.getText(assertionArgument)})`;
79
+ } else if (assertionArgument.type === AST_NODE_TYPES.ArrowFunctionExpression) {
80
+ // callback assertion using arrow function
81
+ let functionBody = sourceCode.getText(assertionArgument.body);
82
+
83
+ const [originalResponseArgument] = assertionArgument.params;
84
+ assert.ok(originalResponseArgument?.type === AST_NODE_TYPES.Identifier);
85
+ const originalResponseArgumentName = originalResponseArgument.name;
86
+ if (originalResponseArgumentName !== responseVariableName) {
87
+ functionBody = functionBody.replace(
88
+ new RegExp(`\\b${originalResponseArgumentName}\\b`, 'ug'),
89
+ responseVariableName,
90
+ );
91
+ }
92
+ nonStatusAssertions.push(`assert.doesNotThrow(()=>${functionBody})`);
93
+ } else if (assertionArgument.type === AST_NODE_TYPES.Identifier) {
94
+ // callback assertion using function reference
95
+ nonStatusAssertions.push(
96
+ `assert.doesNotThrow(()=>${sourceCode.getText(assertionArgument)}(${responseVariableName}))`,
97
+ );
98
+ } else if (
99
+ assertionArgument.type === AST_NODE_TYPES.ObjectExpression ||
100
+ assertionArgument.type === AST_NODE_TYPES.CallExpression
101
+ ) {
102
+ // body deep equal assertion
103
+ nonStatusAssertions.push(
104
+ `assert.deepEqual(await ${responseVariableName}.json(), ${sourceCode.getText(assertionArgument)})`,
105
+ );
106
+ } else {
107
+ throw new Error(`Unexpected Supertest assertion argument: ".expect(${sourceCode.getText(assertionArgument)})`);
108
+ }
109
+ } else if (expectArguments.length === 2) {
110
+ // header assertion
111
+ const [headerName, headerValue] = expectArguments;
112
+ assert.ok(headerName && headerValue);
113
+ const headersReference = `${responseVariableName}.headers`;
114
+ if (headerValue.type === AST_NODE_TYPES.Literal && headerValue.value instanceof RegExp) {
115
+ nonStatusAssertions.push(
116
+ `assert.ok(${headersReference}.get(${sourceCode.getText(headerName)}).match(${sourceCode.getText(headerValue)}))`,
117
+ );
118
+ } else {
119
+ nonStatusAssertions.push(
120
+ `assert.equal(${headersReference}.get(${sourceCode.getText(headerName)}), ${sourceCode.getText(headerValue)})`,
121
+ );
122
+ }
123
+ }
124
+ }
125
+ return {
126
+ statusAssertion,
127
+ nonStatusAssertions,
128
+ };
129
+ }
130
+
131
+ // function getResponseHeadersAccesses(responseVariables: Variable[], scopeManager: ScopeManager, sourceCode: SourceCode) {
132
+ // const responseHeadersAccesses: TSESTree.MemberExpression[] = [];
133
+ // for (const responseVariable of responseVariables) {
134
+ // for (const responseReference of responseVariable.references) {
135
+ // const responseAccess = getParent(responseReference.identifier);
136
+ // if (!responseAccess || responseAccess.type !== AST_NODE_TYPES.MemberExpression) {
137
+ // continue;
138
+ // }
139
+
140
+ // const responseAccessParent = getParent(responseAccess);
141
+ // if (!responseAccessParent) {
142
+ // continue;
143
+ // }
144
+
145
+ // if (
146
+ // responseAccessParent.type === AST_NODE_TYPES.CallExpression &&
147
+ // responseAccessParent.arguments[0]?.type === AST_NODE_TYPES.ArrowFunctionExpression
148
+ // ) {
149
+ // // map-like operation against responses, e.g. responses.map((response) => response.headers.etag)
150
+ // responseHeadersAccesses.push(
151
+ // ...getResponseHeadersAccesses(
152
+ // scopeManager.getDeclaredVariables(responseAccessParent.arguments[0]),
153
+ // scopeManager,
154
+ // sourceCode,
155
+ // ),
156
+ // );
157
+ // continue;
158
+ // }
159
+
160
+ // if (
161
+ // responseAccess.computed &&
162
+ // responseAccess.property.type === AST_NODE_TYPES.Literal &&
163
+ // responseAccessParent.type === AST_NODE_TYPES.MemberExpression
164
+ // ) {
165
+ // // header access through indexed responses array, e.g. responses[0].headers, responses[1].get(...), etc.
166
+ // responseHeadersAccesses.push(responseAccessParent);
167
+ // } else {
168
+ // responseHeadersAccesses.push(responseAccess);
169
+ // }
170
+ // }
171
+ // }
172
+ // return responseHeadersAccesses;
173
+ // }
174
+
175
+ const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
176
+ const rule: ESLintUtils.RuleModule<
177
+ 'unknownError' | 'preferNativeFetch'
178
+ // | 'shouldUseHeaderGetter'
179
+ > = createRule({
180
+ name: ruleId,
181
+ meta: {
182
+ type: 'suggestion',
183
+ docs: {
184
+ description: 'Prefer native fetch API over customized fixture API.',
185
+ url: getDocumentationUrl(ruleId),
186
+ },
187
+ messages: {
188
+ preferNativeFetch: 'Prefer native fetch API over customized fixture API.',
189
+ // shouldUseHeaderGetter: 'Getter should be used to access response headers.',
190
+ unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.',
191
+ },
192
+ fixable: 'code',
193
+ schema: [],
194
+ },
195
+ defaultOptions: [],
196
+ create(context) {
197
+ const sourceCode = context.sourceCode;
198
+ const scopeManager = sourceCode.scopeManager;
199
+ assert.ok(scopeManager);
200
+
201
+ return {
202
+ 'CallExpression[callee.property.name="expect"]': (supertestCall: TSESTree.CallExpression) => {
203
+ try {
204
+ assert.ok(supertestCall.callee.type === AST_NODE_TYPES.MemberExpression);
205
+ if (
206
+ supertestCall.callee.object.type !== AST_NODE_TYPES.CallExpression ||
207
+ (supertestCall.callee.object.callee.type === AST_NODE_TYPES.MemberExpression &&
208
+ supertestCall.callee.object.callee.property.type === AST_NODE_TYPES.Identifier &&
209
+ supertestCall.callee.object.callee.property.name === 'expect')
210
+ ) {
211
+ // skip nested expect calls, only focus on the top level
212
+ return;
213
+ }
214
+
215
+ if (!(isUsedInArrayOrAsArgument(supertestCall) || getEnclosingFunction(supertestCall)?.async === false)) {
216
+ return;
217
+ }
218
+
219
+ const fixtureFunction = supertestCall.callee.object;
220
+ const indentation = getIndentation(supertestCall, sourceCode);
221
+
222
+ const [urlArgumentNode] = supertestCall.arguments; // e.g. `/sample-service/v1/ping`
223
+ assert.ok(urlArgumentNode !== undefined);
224
+
225
+ const fixtureCallInformation = {} as FixtureCallInformation;
226
+ analyzeFixtureCall(fixtureFunction, fixtureCallInformation, sourceCode);
227
+
228
+ const responseVariableNameToUse = 'res';
229
+ const { statusAssertion, nonStatusAssertions } = createResponseAssertions(
230
+ fixtureCallInformation,
231
+ sourceCode,
232
+ responseVariableNameToUse,
233
+ );
234
+
235
+ // add variable declaration if needed
236
+ const disableLintComment = '// eslint-disable-next-line @checkdigit/no-promise-instance-method';
237
+ const fetchCallText = sourceCode.getText(fixtureFunction);
238
+ const appendingAssignmentAndAssertionText = [
239
+ ...(statusAssertion !== undefined ? [statusAssertion] : []),
240
+ ...nonStatusAssertions,
241
+ ].join(`;\n${indentation}`);
242
+ const replacementText = fixtureCallInformation.assertions
243
+ ? [
244
+ disableLintComment,
245
+ `${fetchCallText}.then((${responseVariableNameToUse}) => {`,
246
+ appendingAssignmentAndAssertionText === '' ? '' : ` ${appendingAssignmentAndAssertionText};`,
247
+ ` return ${responseVariableNameToUse};`,
248
+ `})`,
249
+ ].join(`\n${indentation}`)
250
+ : fetchCallText;
251
+
252
+ context.report({
253
+ node: supertestCall,
254
+ messageId: 'preferNativeFetch',
255
+ fix(fixer) {
256
+ return fixer.replaceText(fixtureCallInformation.fixtureNode, replacementText);
257
+ },
258
+ });
259
+
260
+ // const responsesVariable = getEnclosingStatement(fixtureCallInformation.fixtureNode);
261
+ // if (!responsesVariable) {
262
+ // return;
263
+ // }
264
+
265
+ // const responseVariableReferences = scopeManager.getDeclaredVariables(responsesVariable);
266
+ // const responseHeadersAccesses = getResponseHeadersAccesses(
267
+ // responseVariableReferences,
268
+ // scopeManager,
269
+ // sourceCode,
270
+ // );
271
+ // for (const responseHeadersAccess of responseHeadersAccesses) {
272
+ // if (isInvalidResponseHeadersAccess(responseHeadersAccess)) {
273
+ // const headerAccess = getParent(responseHeadersAccess);
274
+ // if (headerAccess?.type === AST_NODE_TYPES.MemberExpression) {
275
+ // const headerNameNode = headerAccess.property;
276
+ // const headerName = headerAccess.computed
277
+ // ? sourceCode.getText(headerNameNode)
278
+ // : `'${sourceCode.getText(headerNameNode)}'`;
279
+ // const headerAccessReplacementText = `${sourceCode.getText(headerAccess.object)}.get(${headerName})`;
280
+
281
+ // context.report({
282
+ // node: headerAccess,
283
+ // messageId: 'shouldUseHeaderGetter',
284
+ // fix(fixer) {
285
+ // return fixer.replaceText(headerAccess, headerAccessReplacementText);
286
+ // },
287
+ // });
288
+ // } else if (
289
+ // headerAccess?.type === AST_NODE_TYPES.CallExpression &&
290
+ // responseHeadersAccess.property.type === AST_NODE_TYPES.Identifier &&
291
+ // responseHeadersAccess.property.name === 'get'
292
+ // ) {
293
+ // const headerAccessReplacementText = `${sourceCode.getText(responseHeadersAccess.object)}.headers.get(${sourceCode.getText(headerAccess.arguments[0])})`;
294
+
295
+ // context.report({
296
+ // node: headerAccess,
297
+ // messageId: 'shouldUseHeaderGetter',
298
+ // fix(fixer) {
299
+ // return fixer.replaceText(headerAccess, headerAccessReplacementText);
300
+ // },
301
+ // });
302
+ // }
303
+ // }
304
+ // }
305
+ } catch (error) {
306
+ // eslint-disable-next-line no-console
307
+ console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
308
+ context.report({
309
+ node: supertestCall,
310
+ messageId: 'unknownError',
311
+ data: {
312
+ fileName: context.filename,
313
+ error: error instanceof Error ? error.toString() : JSON.stringify(error),
314
+ },
315
+ });
316
+ }
317
+ },
318
+ };
319
+ },
320
+ });
321
+
322
+ export default rule;
package/src/index.ts CHANGED
@@ -23,6 +23,7 @@ import invalidJsonStringify, { ruleId as invalidJsonStringifyRuleId } from './in
23
23
  import noDuplicatedImports, { ruleId as noDuplicatedImportsRuleId } from './no-duplicated-imports';
24
24
  import noFixture, { ruleId as noFixtureRuleId } from './agent/no-fixture';
25
25
  import noSupertest, { ruleId as noSupertestRuleId } from './agent/no-supertest';
26
+ import supertestThen, { ruleId as supertestThenRuleId } from './agent/supertest-then';
26
27
  import noLegacyServiceTyping, { ruleId as noLegacyServiceTypingRuleId } from './no-legacy-service-typing';
27
28
  import noMappedResponse, { ruleId as noMappedResponseRuleId } from './agent/no-mapped-response';
28
29
  import noPromiseInstanceMethod, { ruleId as noPromiseInstanceMethodRuleId } from './no-promise-instance-method';
@@ -74,6 +75,7 @@ const rules: Record<string, TSESLint.LooseRuleDefinition> = {
74
75
  [noPromiseInstanceMethodRuleId]: noPromiseInstanceMethod,
75
76
  [noFixtureRuleId]: noFixture,
76
77
  [noSupertestRuleId]: noSupertest,
78
+ [supertestThenRuleId]: supertestThen,
77
79
  [fetchThenRuleId]: fetchThen,
78
80
  [noServiceWrapperRuleId]: noServiceWrapper,
79
81
  [noStatusCodeRuleId]: noStatusCode,
@@ -134,6 +136,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
134
136
  [`@checkdigit/${addUrlDomainRuleId}`]: 'off',
135
137
  [`@checkdigit/${noFixtureRuleId}`]: 'off',
136
138
  [`@checkdigit/${noSupertestRuleId}`]: 'off',
139
+ [`@checkdigit/${supertestThenRuleId}`]: 'off',
137
140
  [`@checkdigit/${noServiceWrapperRuleId}`]: 'off',
138
141
  [`@checkdigit/${noStatusCodeRuleId}`]: 'off',
139
142
  [`@checkdigit/${fetchResponseBodyJsonRuleId}`]: 'off',
@@ -183,6 +186,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
183
186
  [`@checkdigit/${addUrlDomainRuleId}`]: 'off',
184
187
  [`@checkdigit/${noFixtureRuleId}`]: 'off',
185
188
  [`@checkdigit/${noSupertestRuleId}`]: 'off',
189
+ [`@checkdigit/${supertestThenRuleId}`]: 'off',
186
190
  [`@checkdigit/${noServiceWrapperRuleId}`]: 'off',
187
191
  [`@checkdigit/${noStatusCodeRuleId}`]: 'off',
188
192
  [`@checkdigit/${fetchResponseBodyJsonRuleId}`]: 'off',
@@ -227,6 +231,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
227
231
  [`@checkdigit/${addAssertImportRuleId}`]: 'error',
228
232
  [`@checkdigit/${noFixtureRuleId}`]: 'error',
229
233
  [`@checkdigit/${noSupertestRuleId}`]: 'error',
234
+ [`@checkdigit/${supertestThenRuleId}`]: 'error',
230
235
  },
231
236
  },
232
237
  {