@checkdigit/eslint-plugin 7.6.0-PR.75-7ee9 → 7.6.0-PR.97-b19c

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.
Files changed (77) hide show
  1. package/dist-mjs/index.mjs +8 -156
  2. package/dist-mjs/no-status-code-assert.mjs +63 -0
  3. package/dist-mjs/require-resolve-full-response.mjs +5 -5
  4. package/dist-types/no-status-code-assert.d.ts +5 -0
  5. package/package.json +1 -1
  6. package/src/index.ts +4 -152
  7. package/src/no-status-code-assert.ts +85 -0
  8. package/src/require-resolve-full-response.ts +4 -4
  9. package/dist-mjs/agent/add-assert-import.mjs +0 -58
  10. package/dist-mjs/agent/add-base-path-const.mjs +0 -65
  11. package/dist-mjs/agent/add-base-path-import.mjs +0 -60
  12. package/dist-mjs/agent/add-url-domain.mjs +0 -61
  13. package/dist-mjs/agent/agent-test-wiring.mjs +0 -221
  14. package/dist-mjs/agent/fetch-response-body-json.mjs +0 -146
  15. package/dist-mjs/agent/fetch-response-header-getter.mjs +0 -117
  16. package/dist-mjs/agent/fetch-response-status.mjs +0 -76
  17. package/dist-mjs/agent/fetch-then.mjs +0 -273
  18. package/dist-mjs/agent/fetch.mjs +0 -48
  19. package/dist-mjs/agent/file.mjs +0 -43
  20. package/dist-mjs/agent/fix-function-call-arguments.mjs +0 -153
  21. package/dist-mjs/agent/no-fixture.mjs +0 -397
  22. package/dist-mjs/agent/no-mapped-response.mjs +0 -75
  23. package/dist-mjs/agent/no-service-wrapper.mjs +0 -185
  24. package/dist-mjs/agent/no-status-code.mjs +0 -59
  25. package/dist-mjs/agent/no-supertest.mjs +0 -346
  26. package/dist-mjs/agent/no-unused-function-argument.mjs +0 -79
  27. package/dist-mjs/agent/no-unused-imports.mjs +0 -81
  28. package/dist-mjs/agent/no-unused-service-variable.mjs +0 -74
  29. package/dist-mjs/agent/response-reference.mjs +0 -78
  30. package/dist-mjs/agent/supertest-then.mjs +0 -170
  31. package/dist-mjs/agent/url.mjs +0 -32
  32. package/dist-types/agent/add-assert-import.d.ts +0 -4
  33. package/dist-types/agent/add-base-path-const.d.ts +0 -4
  34. package/dist-types/agent/add-base-path-import.d.ts +0 -4
  35. package/dist-types/agent/add-url-domain.d.ts +0 -4
  36. package/dist-types/agent/agent-test-wiring.d.ts +0 -4
  37. package/dist-types/agent/fetch-response-body-json.d.ts +0 -4
  38. package/dist-types/agent/fetch-response-header-getter.d.ts +0 -4
  39. package/dist-types/agent/fetch-response-status.d.ts +0 -4
  40. package/dist-types/agent/fetch-then.d.ts +0 -4
  41. package/dist-types/agent/fetch.d.ts +0 -8
  42. package/dist-types/agent/file.d.ts +0 -7
  43. package/dist-types/agent/fix-function-call-arguments.d.ts +0 -9
  44. package/dist-types/agent/no-fixture.d.ts +0 -4
  45. package/dist-types/agent/no-mapped-response.d.ts +0 -4
  46. package/dist-types/agent/no-service-wrapper.d.ts +0 -4
  47. package/dist-types/agent/no-status-code.d.ts +0 -4
  48. package/dist-types/agent/no-supertest.d.ts +0 -4
  49. package/dist-types/agent/no-unused-function-argument.d.ts +0 -4
  50. package/dist-types/agent/no-unused-imports.d.ts +0 -4
  51. package/dist-types/agent/no-unused-service-variable.d.ts +0 -4
  52. package/dist-types/agent/response-reference.d.ts +0 -17
  53. package/dist-types/agent/supertest-then.d.ts +0 -4
  54. package/dist-types/agent/url.d.ts +0 -4
  55. package/src/agent/add-assert-import.ts +0 -74
  56. package/src/agent/add-base-path-const.ts +0 -81
  57. package/src/agent/add-base-path-import.ts +0 -69
  58. package/src/agent/add-url-domain.ts +0 -76
  59. package/src/agent/agent-test-wiring.ts +0 -273
  60. package/src/agent/fetch-response-body-json.ts +0 -194
  61. package/src/agent/fetch-response-header-getter.ts +0 -148
  62. package/src/agent/fetch-response-status.ts +0 -100
  63. package/src/agent/fetch-then.ts +0 -359
  64. package/src/agent/fetch.ts +0 -69
  65. package/src/agent/file.ts +0 -42
  66. package/src/agent/fix-function-call-arguments.ts +0 -200
  67. package/src/agent/no-fixture.ts +0 -581
  68. package/src/agent/no-mapped-response.ts +0 -84
  69. package/src/agent/no-service-wrapper.ts +0 -241
  70. package/src/agent/no-status-code.ts +0 -69
  71. package/src/agent/no-supertest.ts +0 -517
  72. package/src/agent/no-unused-function-argument.ts +0 -98
  73. package/src/agent/no-unused-imports.ts +0 -103
  74. package/src/agent/no-unused-service-variable.ts +0 -93
  75. package/src/agent/response-reference.ts +0 -153
  76. package/src/agent/supertest-then.ts +0 -230
  77. package/src/agent/url.ts +0 -32
@@ -1,397 +0,0 @@
1
- // src/agent/no-fixture.ts
2
- import { strict as assert } from "node:assert";
3
- import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
4
- import {
5
- getEnclosingFunction,
6
- getEnclosingScopeNode,
7
- getEnclosingStatement,
8
- getParent,
9
- isUsedInArrayOrAsArgument
10
- } from "../library/ts-tree.mjs";
11
- import getDocumentationUrl from "../get-documentation-url.mjs";
12
- import { getIndentation } from "../library/format.mjs";
13
- import { isValidPropertyName } from "../library/variable.mjs";
14
- import { analyzeResponseReferences } from "./response-reference.mjs";
15
- import {
16
- getResponseBodyRetrievalText,
17
- getResponseHeadersRetrievalText,
18
- getResponseStatusRetrievalText,
19
- hasAssertions
20
- } from "./fetch.mjs";
21
- import { replaceEndpointUrlPrefixWithBasePath } from "./url.mjs";
22
- var ruleId = "no-fixture";
23
- function analyzeFixtureCall(call, results, sourceCode) {
24
- const parent = getParent(call);
25
- assert.ok(parent, "parent should exist for fixture/supertest call node");
26
- let nextCall;
27
- if (parent.type === AST_NODE_TYPES.ReturnStatement) {
28
- results.fixtureNode = call;
29
- results.rootNode = parent;
30
- } else if (parent.type === AST_NODE_TYPES.ArrayExpression || parent.type === AST_NODE_TYPES.CallExpression || parent.type === AST_NODE_TYPES.ArrowFunctionExpression) {
31
- results.fixtureNode = call;
32
- results.rootNode = call;
33
- } else if (parent.type === AST_NODE_TYPES.AwaitExpression) {
34
- results.fixtureNode = call;
35
- const enclosingStatement = getEnclosingStatement(parent);
36
- assert.ok(enclosingStatement);
37
- const awaitParent = getParent(parent);
38
- if (awaitParent?.type === AST_NODE_TYPES.MemberExpression) {
39
- results.rootNode = parent;
40
- results.inlineStatementNode = enclosingStatement;
41
- if (awaitParent.property.type === AST_NODE_TYPES.Identifier && awaitParent.property.name === "body") {
42
- results.inlineBodyReference = awaitParent;
43
- }
44
- if (awaitParent.property.type === AST_NODE_TYPES.Identifier && (awaitParent.property.name === "status" || awaitParent.property.name === "statusCode")) {
45
- results.inlineStatusReference = awaitParent;
46
- }
47
- if (awaitParent.property.type === AST_NODE_TYPES.Identifier && (awaitParent.property.name === "header" || awaitParent.property.name === "headers")) {
48
- results.inlineHeadersReference = awaitParent;
49
- }
50
- } else if (enclosingStatement.type === AST_NODE_TYPES.VariableDeclaration) {
51
- results.variableDeclaration = enclosingStatement;
52
- results.rootNode = enclosingStatement;
53
- } else if (enclosingStatement.type === AST_NODE_TYPES.ExpressionStatement && enclosingStatement.expression.type === AST_NODE_TYPES.AssignmentExpression) {
54
- results.variableAssignment = enclosingStatement;
55
- results.rootNode = enclosingStatement;
56
- } else {
57
- results.rootNode = parent;
58
- }
59
- } else if (parent.type === AST_NODE_TYPES.MemberExpression && parent.property.type === AST_NODE_TYPES.Identifier) {
60
- if (parent.property.name === "expect") {
61
- const assertionCall = getParent(parent);
62
- assert.ok(assertionCall && assertionCall.type === AST_NODE_TYPES.CallExpression);
63
- results.assertions = [...results.assertions ?? [], assertionCall.arguments];
64
- nextCall = assertionCall;
65
- } else if (parent.property.name === "send") {
66
- const sendRequestBodyCall = getParent(parent);
67
- assert.ok(sendRequestBodyCall && sendRequestBodyCall.type === AST_NODE_TYPES.CallExpression);
68
- results.requestBody = sendRequestBodyCall.arguments[0];
69
- nextCall = sendRequestBodyCall;
70
- } else if (parent.property.name === "set") {
71
- const setRequestHeaderCall = getParent(parent);
72
- assert.ok(setRequestHeaderCall && setRequestHeaderCall.type === AST_NODE_TYPES.CallExpression);
73
- const [arg1, arg2] = setRequestHeaderCall.arguments;
74
- if (arg1.type === AST_NODE_TYPES.ObjectExpression) {
75
- results.requestHeadersObjectLiteral = arg1;
76
- } else {
77
- results.requestHeaders = [...results.requestHeaders ?? [], { name: arg1, value: arg2 }];
78
- }
79
- nextCall = setRequestHeaderCall;
80
- }
81
- } else {
82
- throw new Error(`Unexpected expression in fixture/supertest call ${sourceCode.getText(parent)}.`);
83
- }
84
- if (nextCall) {
85
- analyzeFixtureCall(nextCall, results, sourceCode);
86
- }
87
- }
88
- function createResponseAssertions(fixtureCallInformation, sourceCode, responseVariableName, destructuringResponseHeadersVariable) {
89
- let statusAssertion;
90
- const nonStatusAssertions = [];
91
- for (const expectArguments of fixtureCallInformation.assertions ?? []) {
92
- if (expectArguments.length === 1) {
93
- const [assertionArgument] = expectArguments;
94
- assert.ok(assertionArgument);
95
- 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.")) {
96
- statusAssertion = `assert.equal(${responseVariableName}.status, ${sourceCode.getText(assertionArgument)})`;
97
- } else if (assertionArgument.type === AST_NODE_TYPES.ArrowFunctionExpression) {
98
- let functionBody = sourceCode.getText(assertionArgument.body);
99
- const [originalResponseArgument] = assertionArgument.params;
100
- assert.ok(originalResponseArgument?.type === AST_NODE_TYPES.Identifier);
101
- const originalResponseArgumentName = originalResponseArgument.name;
102
- if (originalResponseArgumentName !== responseVariableName) {
103
- functionBody = functionBody.replace(
104
- new RegExp(`\\b${originalResponseArgumentName}\\b`, "ug"),
105
- responseVariableName
106
- );
107
- }
108
- nonStatusAssertions.push(`assert.doesNotThrow(()=>${functionBody})`);
109
- } else if (assertionArgument.type === AST_NODE_TYPES.Identifier) {
110
- nonStatusAssertions.push(
111
- `assert.doesNotThrow(()=>${sourceCode.getText(assertionArgument)}(${responseVariableName}))`
112
- );
113
- } else if (assertionArgument.type === AST_NODE_TYPES.ObjectExpression || assertionArgument.type === AST_NODE_TYPES.CallExpression) {
114
- nonStatusAssertions.push(
115
- `assert.deepEqual(await ${responseVariableName}.json(), ${sourceCode.getText(assertionArgument)})`
116
- );
117
- } else {
118
- throw new Error(`Unexpected Supertest assertion argument: ".expect(${sourceCode.getText(assertionArgument)})`);
119
- }
120
- } else if (expectArguments.length === 2) {
121
- const [headerName, headerValue] = expectArguments;
122
- assert.ok(headerName && headerValue);
123
- const headersReference = destructuringResponseHeadersVariable !== void 0 ? destructuringResponseHeadersVariable.name : `${responseVariableName}.headers`;
124
- if (headerValue.type === AST_NODE_TYPES.Literal && headerValue.value instanceof RegExp) {
125
- nonStatusAssertions.push(
126
- `assert.ok(${headersReference}.get(${sourceCode.getText(headerName)}).match(${sourceCode.getText(headerValue)}))`
127
- );
128
- } else {
129
- nonStatusAssertions.push(
130
- `assert.equal(${headersReference}.get(${sourceCode.getText(headerName)}), ${sourceCode.getText(headerValue)})`
131
- );
132
- }
133
- }
134
- }
135
- return {
136
- statusAssertion,
137
- nonStatusAssertions
138
- };
139
- }
140
- function getResponseVariableNameToUse(methodName, urlArgumentNode, originalUrlArgumentText, scopeManager, fixtureCallInformation, scopeVariablesMap) {
141
- if (fixtureCallInformation.variableAssignment) {
142
- assert.ok(
143
- fixtureCallInformation.variableAssignment.expression.type === AST_NODE_TYPES.AssignmentExpression && fixtureCallInformation.variableAssignment.expression.left.type === AST_NODE_TYPES.Identifier
144
- );
145
- return fixtureCallInformation.variableAssignment.expression.left.name;
146
- }
147
- if (fixtureCallInformation.variableDeclaration) {
148
- const firstDeclaration = fixtureCallInformation.variableDeclaration.declarations[0];
149
- if (firstDeclaration !== void 0 && firstDeclaration.id.type === AST_NODE_TYPES.Identifier) {
150
- return firstDeclaration.id.name;
151
- }
152
- }
153
- const enclosingScopeNode = getEnclosingScopeNode(fixtureCallInformation.rootNode);
154
- scopeManager.getDeclaredVariables(fixtureCallInformation.rootNode);
155
- assert.ok(enclosingScopeNode);
156
- const scope = scopeManager.acquire(enclosingScopeNode);
157
- assert.ok(scope !== null);
158
- let scopeVariables = scopeVariablesMap.get(scope);
159
- if (!scopeVariables) {
160
- scopeVariables = [...scope.set.keys()];
161
- scopeVariablesMap.set(scope, scopeVariables);
162
- }
163
- let responseVariableNameBase = "response";
164
- if (urlArgumentNode.type === AST_NODE_TYPES.Literal || urlArgumentNode.type === AST_NODE_TYPES.TemplateLiteral) {
165
- const urlWithoutQuotes = originalUrlArgumentText.replace(/['"`]/gu, "");
166
- const urlWithoutQuery = urlWithoutQuotes.includes("?") ? urlWithoutQuotes.slice(0, urlWithoutQuotes.indexOf("?")) : urlWithoutQuotes;
167
- const parts = urlWithoutQuery.startsWith("${") ? urlWithoutQuery.split("/").slice(1) : (
168
- // eslint-disable-next-line no-magic-numbers
169
- urlWithoutQuery.split("/").slice(3)
170
- );
171
- responseVariableNameBase = [...parts, methodName.toLocaleLowerCase()].map((part) => part.split(/[-=]/u)).flat().filter((part) => part.trim() !== "" && !/\$\{.*\}/u.test(part)).map((part) => `${part[0]?.toUpperCase() ?? ""}${part.slice(1)}`).join("");
172
- responseVariableNameBase = `${responseVariableNameBase[0]?.toLowerCase() ?? ""}${responseVariableNameBase.slice(1)}Response`;
173
- }
174
- let responseVariableCounter = 0;
175
- let responseVariableNameToUse;
176
- while (responseVariableNameToUse === void 0) {
177
- responseVariableNameToUse = `${responseVariableNameBase}${responseVariableCounter === 0 ? "" : responseVariableCounter.toString()}`;
178
- if (scopeVariables.includes(responseVariableNameToUse)) {
179
- responseVariableNameToUse = void 0;
180
- }
181
- responseVariableCounter++;
182
- }
183
- scopeVariables.push(responseVariableNameToUse);
184
- return responseVariableNameToUse;
185
- }
186
- function isResponseBodyRedefinition(responseBodyReference) {
187
- const parent = getParent(responseBodyReference);
188
- return parent?.type === AST_NODE_TYPES.VariableDeclarator && parent.id.type === AST_NODE_TYPES.Identifier;
189
- }
190
- var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
191
- var rule = createRule({
192
- name: ruleId,
193
- meta: {
194
- type: "suggestion",
195
- docs: {
196
- description: "Prefer native fetch API over customized fixture API.",
197
- url: getDocumentationUrl(ruleId)
198
- },
199
- messages: {
200
- preferNativeFetch: "Prefer native fetch API over customized fixture API.",
201
- unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.'
202
- },
203
- fixable: "code",
204
- schema: []
205
- },
206
- defaultOptions: [],
207
- // eslint-disable-next-line max-lines-per-function
208
- create(context) {
209
- const sourceCode = context.sourceCode;
210
- const scopeManager = sourceCode.scopeManager;
211
- assert.ok(scopeManager !== null);
212
- const scopeVariablesMap = /* @__PURE__ */ new Map();
213
- return {
214
- // eslint-disable-next-line max-lines-per-function
215
- 'CallExpression[callee.object.object.name="fixture"][callee.object.property.name="api"]': (fixtureCall) => {
216
- try {
217
- if (hasAssertions(fixtureCall) && (isUsedInArrayOrAsArgument(fixtureCall) || getEnclosingFunction(fixtureCall)?.async === false)) {
218
- return;
219
- }
220
- const fixtureFunction = fixtureCall.callee;
221
- assert.ok(fixtureFunction.type === AST_NODE_TYPES.MemberExpression);
222
- const indentation = getIndentation(fixtureCall, sourceCode);
223
- const [urlArgumentNode] = fixtureCall.arguments;
224
- assert.ok(urlArgumentNode !== void 0);
225
- const fixtureCallInformation = {};
226
- analyzeFixtureCall(fixtureCall, fixtureCallInformation, sourceCode);
227
- const {
228
- variable: responseVariable,
229
- bodyReferences: responseBodyReferences,
230
- headersReferences: responseHeadersReferences,
231
- statusReferences: responseStatusReferences,
232
- destructuringBodyVariable: destructuringResponseBodyVariable,
233
- destructuringStatusVariable: destructuringResponseStatusVariable,
234
- destructuringHeadersVariable: destructuringResponseHeadersVariable
235
- } = analyzeResponseReferences(fixtureCallInformation.variableDeclaration, scopeManager);
236
- const originalUrlArgumentText = sourceCode.getText(urlArgumentNode);
237
- const fetchUrlArgumentText = replaceEndpointUrlPrefixWithBasePath(originalUrlArgumentText);
238
- const methodNode = fixtureFunction.property;
239
- assert.ok(methodNode.type === AST_NODE_TYPES.Identifier);
240
- const methodName = methodNode.name.toUpperCase();
241
- const methodNameToUse = methodName === "DEL" ? "DELETE" : methodName;
242
- const fetchRequestArgumentLines = [
243
- "{",
244
- ` method: '${methodNameToUse}',`,
245
- ...fixtureCallInformation.requestBody ? [` body: JSON.stringify(${sourceCode.getText(fixtureCallInformation.requestBody)}),`] : [],
246
- // eslint-disable-next-line no-nested-ternary
247
- ...fixtureCallInformation.requestHeadersObjectLiteral ? [` headers: ${sourceCode.getText(fixtureCallInformation.requestHeadersObjectLiteral)},`] : fixtureCallInformation.requestHeaders ? [
248
- ` headers: {`,
249
- ...fixtureCallInformation.requestHeaders.map(
250
- ({ name, value }) => (
251
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions, no-nested-ternary, sonarjs/no-nested-template-literals
252
- ` ${name.type === AST_NODE_TYPES.Literal ? isValidPropertyName(name.value) ? name.value : `'${name.value}'` : `[${sourceCode.getText(name)}]`}: ${sourceCode.getText(value)},`
253
- )
254
- ),
255
- ` },`
256
- ] : [],
257
- "}"
258
- ].join(`
259
- ${indentation}`);
260
- const responseVariableNameToUse = getResponseVariableNameToUse(
261
- methodNameToUse,
262
- urlArgumentNode,
263
- originalUrlArgumentText,
264
- scopeManager,
265
- fixtureCallInformation,
266
- scopeVariablesMap
267
- );
268
- const isResponseBodyVariableRedefinitionNeeded = destructuringResponseBodyVariable !== void 0 || fixtureCallInformation.inlineBodyReference !== void 0 || responseBodyReferences.length > 0 && !responseBodyReferences.some(isResponseBodyRedefinition);
269
- const redefineResponseBodyVariableName = `${responseVariableNameToUse}Body`;
270
- const isResponseStatusVariableRedefinitionNeeded = destructuringResponseStatusVariable !== void 0 || fixtureCallInformation.inlineStatusReference !== void 0;
271
- const redefineResponseStatusVariableName = `${responseVariableNameToUse}Status`;
272
- const isResponseHeadersVariableRedefinitionNeeded = destructuringResponseHeadersVariable !== void 0 && // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
273
- destructuringResponseHeadersVariable.type === AST_NODE_TYPES.ObjectPattern || fixtureCallInformation.inlineHeadersReference !== void 0;
274
- const redefineResponseHeadersVariableName = `${responseVariableNameToUse}Headers`;
275
- const isResponseVariableRedefinitionNeeded = fixtureCallInformation.variableAssignment === void 0 && responseVariable === void 0 && fixtureCallInformation.assertions !== void 0 || isResponseBodyVariableRedefinitionNeeded || isResponseStatusVariableRedefinitionNeeded || isResponseHeadersVariableRedefinitionNeeded;
276
- const responseBodyHeadersVariableRedefineLines = isResponseVariableRedefinitionNeeded ? [
277
- // eslint-disable-next-line no-nested-ternary
278
- ...destructuringResponseBodyVariable ? [
279
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
280
- `${fixtureCallInformation.variableDeclaration?.kind ?? "const"} ${destructuringResponseBodyVariable.type === AST_NODE_TYPES.ObjectPattern ? sourceCode.getText(destructuringResponseBodyVariable) : destructuringResponseBodyVariable.name} = ${getResponseBodyRetrievalText(responseVariableNameToUse)}`
281
- ] : isResponseBodyVariableRedefinitionNeeded ? [
282
- `const ${redefineResponseBodyVariableName} = ${getResponseBodyRetrievalText(responseVariableNameToUse)}`
283
- ] : [],
284
- // eslint-disable-next-line no-nested-ternary
285
- ...destructuringResponseStatusVariable ? [
286
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
287
- `${fixtureCallInformation.variableDeclaration?.kind ?? "const"} ${destructuringResponseStatusVariable.type === AST_NODE_TYPES.ObjectPattern ? sourceCode.getText(destructuringResponseStatusVariable) : destructuringResponseStatusVariable.name} = ${getResponseStatusRetrievalText(responseVariableNameToUse)}`
288
- ] : isResponseStatusVariableRedefinitionNeeded ? [
289
- `const ${redefineResponseStatusVariableName} = ${getResponseStatusRetrievalText(responseVariableNameToUse)}`
290
- ] : [],
291
- // eslint-disable-next-line no-nested-ternary
292
- ...destructuringResponseHeadersVariable ? (
293
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
294
- destructuringResponseHeadersVariable.type === AST_NODE_TYPES.ObjectPattern ? destructuringResponseHeadersVariable.properties.map((property) => {
295
- assert.ok(property.type === AST_NODE_TYPES.Property);
296
- assert.equal(property.value.type, AST_NODE_TYPES.Identifier);
297
- return `${fixtureCallInformation.variableDeclaration?.kind ?? "const"} ${property.value.name} = ${getResponseHeadersRetrievalText(responseVariableNameToUse)}.get(${property.key.type === AST_NODE_TYPES.Literal ? sourceCode.getText(property.key) : `'${sourceCode.getText(property.key)}'`})`;
298
- }) : [
299
- `${fixtureCallInformation.variableDeclaration?.kind ?? "const"} ${destructuringResponseHeadersVariable.name} = ${getResponseHeadersRetrievalText(responseVariableNameToUse)}`
300
- ]
301
- ) : isResponseHeadersVariableRedefinitionNeeded ? [
302
- `const ${redefineResponseHeadersVariableName} = ${getResponseHeadersRetrievalText(responseVariableNameToUse)}`
303
- ] : []
304
- ] : [];
305
- const { statusAssertion, nonStatusAssertions } = createResponseAssertions(
306
- fixtureCallInformation,
307
- sourceCode,
308
- responseVariableNameToUse,
309
- destructuringResponseHeadersVariable
310
- );
311
- const fetchCallText = `fetch(${fetchUrlArgumentText}, ${fetchRequestArgumentLines})`;
312
- const fetchStatementText = !isResponseVariableRedefinitionNeeded ? fetchCallText : `${fixtureCallInformation.variableDeclaration?.kind ?? "const"} ${responseVariableNameToUse} = await ${fetchCallText}`;
313
- const nodeToReplace = isResponseVariableRedefinitionNeeded ? fixtureCallInformation.rootNode : fixtureCallInformation.fixtureNode;
314
- const appendingAssignmentAndAssertionText = [
315
- "",
316
- ...statusAssertion !== void 0 ? [statusAssertion] : [],
317
- ...responseBodyHeadersVariableRedefineLines,
318
- ...nonStatusAssertions
319
- ].join(`;
320
- ${indentation}`);
321
- context.report({
322
- node: fixtureCall,
323
- messageId: "preferNativeFetch",
324
- *fix(fixer) {
325
- if (fixtureCallInformation.inlineStatementNode) {
326
- const preInlineDeclaration = [
327
- fetchStatementText,
328
- `${appendingAssignmentAndAssertionText};
329
- ${indentation}`
330
- ].join(``);
331
- yield fixer.insertTextBefore(fixtureCallInformation.inlineStatementNode, preInlineDeclaration);
332
- } else {
333
- yield fixer.replaceText(nodeToReplace, fetchStatementText);
334
- const needEndingSemiColon = sourceCode.getText(nodeToReplace).endsWith(";");
335
- yield fixer.insertTextAfter(
336
- nodeToReplace,
337
- needEndingSemiColon ? `${appendingAssignmentAndAssertionText};` : appendingAssignmentAndAssertionText
338
- );
339
- }
340
- for (const responseBodyReference of responseBodyReferences) {
341
- yield fixer.replaceText(
342
- responseBodyReference,
343
- isResponseBodyVariableRedefinitionNeeded || !isResponseBodyRedefinition(responseBodyReference) ? redefineResponseBodyVariableName : getResponseBodyRetrievalText(responseVariableNameToUse)
344
- );
345
- }
346
- if (fixtureCallInformation.inlineBodyReference) {
347
- yield fixer.replaceText(fixtureCallInformation.inlineBodyReference, redefineResponseBodyVariableName);
348
- }
349
- for (const responseHeadersReference of responseHeadersReferences) {
350
- const parent = getParent(responseHeadersReference);
351
- assert.ok(parent);
352
- let headerName;
353
- if (parent.type === AST_NODE_TYPES.MemberExpression) {
354
- const headerNameNode = parent.property;
355
- headerName = parent.computed ? sourceCode.getText(headerNameNode) : `'${sourceCode.getText(headerNameNode)}'`;
356
- } else if (parent.type === AST_NODE_TYPES.CallExpression) {
357
- const headerNameNode = parent.arguments[0];
358
- headerName = sourceCode.getText(headerNameNode);
359
- }
360
- assert.ok(headerName !== void 0);
361
- yield fixer.replaceText(parent, `${responseVariableNameToUse}.headers.get(${headerName})`);
362
- }
363
- for (const responseStatusReference of responseStatusReferences) {
364
- if (responseStatusReference.property.type === AST_NODE_TYPES.Identifier && responseStatusReference.property.name === "statusCode") {
365
- yield fixer.replaceText(responseStatusReference.property, `status`);
366
- }
367
- }
368
- if (fixtureCallInformation.rootNode.type === AST_NODE_TYPES.ReturnStatement && fixtureCallInformation.assertions !== void 0) {
369
- yield fixer.insertTextAfter(
370
- fixtureCallInformation.rootNode,
371
- `
372
- ${indentation}return ${responseVariableNameToUse};`
373
- );
374
- }
375
- }
376
- });
377
- } catch (error) {
378
- console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
379
- context.report({
380
- node: fixtureCall,
381
- messageId: "unknownError",
382
- data: {
383
- fileName: context.filename,
384
- error: error instanceof Error ? error.toString() : JSON.stringify(error)
385
- }
386
- });
387
- }
388
- }
389
- };
390
- }
391
- });
392
- var no_fixture_default = rule;
393
- export {
394
- no_fixture_default as default,
395
- ruleId
396
- };
397
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLWZpeHR1cmUudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBUUEsU0FBUyxVQUFVLGNBQWM7QUFFakMsU0FBUyxnQkFBZ0IsbUJBQTZCO0FBSXREO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsT0FBTyx5QkFBeUI7QUFDaEMsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxpQ0FBaUM7QUFDMUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsNENBQTRDO0FBRTlDLElBQU0sU0FBUztBQXdCdEIsU0FBUyxtQkFBbUIsTUFBK0IsU0FBaUMsWUFBd0I7QUFDbEgsUUFBTSxTQUFTLFVBQVUsSUFBSTtBQUM3QixTQUFPLEdBQUcsUUFBUSxxREFBcUQ7QUFFdkUsTUFBSTtBQUNKLE1BQUksT0FBTyxTQUFTLGVBQWUsaUJBQWlCO0FBRWxELFlBQVEsY0FBYztBQUN0QixZQUFRLFdBQVc7QUFBQSxFQUNyQixXQUNFLE9BQU8sU0FBUyxlQUFlLG1CQUMvQixPQUFPLFNBQVMsZUFBZSxrQkFDL0IsT0FBTyxTQUFTLGVBQWUseUJBQy9CO0FBRUEsWUFBUSxjQUFjO0FBQ3RCLFlBQVEsV0FBVztBQUFBLEVBQ3JCLFdBQVcsT0FBTyxTQUFTLGVBQWUsaUJBQWlCO0FBQ3pELFlBQVEsY0FBYztBQUN0QixVQUFNLHFCQUFxQixzQkFBc0IsTUFBTTtBQUN2RCxXQUFPLEdBQUcsa0JBQWtCO0FBQzVCLFVBQU0sY0FBYyxVQUFVLE1BQU07QUFDcEMsUUFBSSxhQUFhLFNBQVMsZUFBZSxrQkFBa0I7QUFDekQsY0FBUSxXQUFXO0FBQ25CLGNBQVEsc0JBQXNCO0FBQzlCLFVBQUksWUFBWSxTQUFTLFNBQVMsZUFBZSxjQUFjLFlBQVksU0FBUyxTQUFTLFFBQVE7QUFDbkcsZ0JBQVEs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
@@ -1,75 +0,0 @@
1
- // src/agent/no-mapped-response.ts
2
- import { ESLintUtils } from "@typescript-eslint/utils";
3
- import getDocumentationUrl from "../get-documentation-url.mjs";
4
- var ruleId = "no-mapped-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: "Replace the usage of MappedResponse type with FetchResponse."
12
- },
13
- messages: {
14
- replaceFullResponseWithFetchResponse: "Replace the usage of FullResponse type with FetchResponse.",
15
- unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.'
16
- },
17
- fixable: "code",
18
- schema: []
19
- },
20
- defaultOptions: [],
21
- create(context) {
22
- const sourceCode = context.sourceCode;
23
- return {
24
- 'TSTypeReference[typeName.name="MappedResponse"]': (typeReference) => {
25
- try {
26
- context.report({
27
- messageId: "replaceFullResponseWithFetchResponse",
28
- node: typeReference,
29
- fix(fixer) {
30
- const typeParams = sourceCode.getText(typeReference.typeArguments);
31
- return fixer.replaceText(typeReference, `FetchResponse${typeParams || ""}`);
32
- }
33
- });
34
- } catch (error) {
35
- console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
36
- context.report({
37
- node: typeReference,
38
- messageId: "unknownError",
39
- data: {
40
- fileName: context.filename,
41
- error: error instanceof Error ? error.toString() : JSON.stringify(error)
42
- }
43
- });
44
- }
45
- },
46
- 'ImportSpecifier[imported.name="MappedResponse"]': (importSpecifier) => {
47
- try {
48
- context.report({
49
- messageId: "replaceFullResponseWithFetchResponse",
50
- node: importSpecifier.imported,
51
- fix(fixer) {
52
- return fixer.replaceText(importSpecifier.imported, "FetchResponse");
53
- }
54
- });
55
- } catch (error) {
56
- console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
57
- context.report({
58
- node: importSpecifier.imported,
59
- messageId: "unknownError",
60
- data: {
61
- fileName: context.filename,
62
- error: error instanceof Error ? error.toString() : JSON.stringify(error)
63
- }
64
- });
65
- }
66
- }
67
- };
68
- }
69
- });
70
- var no_mapped_response_default = rule;
71
- export {
72
- no_mapped_response_default as default,
73
- ruleId
74
- };
75
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLW1hcHBlZC1yZXNwb25zZS50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLG1CQUE2QjtBQUN0QyxPQUFPLHlCQUF5QjtBQUV6QixJQUFNLFNBQVM7QUFFdEIsSUFBTSxhQUFhLFlBQVksWUFBWSxDQUFDLFNBQVMsb0JBQW9CLElBQUksQ0FBQztBQUU5RSxJQUFNLE9BQXdGLFdBQVc7QUFBQSxFQUN2RyxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1Isc0NBQXNDO0FBQUEsTUFDdEMsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxRQUFRLENBQUM7QUFBQSxFQUNYO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLFVBQU0sYUFBYSxRQUFRO0FBRTNCLFdBQU87QUFBQSxNQUNMLG1EQUFtRCxDQUFDLGtCQUE0QztBQUM5RixZQUFJO0FBQ0Ysa0JBQVEsT0FBTztBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsTUFBTTtBQUFBLFlBQ04sSUFBSSxPQUFPO0FBQ1Qsb0JBQU0sYUFBYSxXQUFXLFFBQVEsY0FBYyxhQUFhO0FBQ2pFLHFCQUFPLE1BQU0sWUFBWSxlQUFlLGdCQUFnQixjQUFjLEVBQUUsRUFBRTtBQUFBLFlBQzVFO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSCxTQUFTLE9BQU87QUFFZCxrQkFBUSxNQUFNLG1CQUFtQixNQUFNLG1CQUFtQixRQUFRLFFBQVEsTUFBTSxLQUFLO0FBQ3JGLGtCQUFRLE9BQU87QUFBQSxZQUNiLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxZQUNYLE1BQU07QUFBQSxjQUNKLFVBQVUsUUFBUTtBQUFBLGNBQ2xCLE9BQU8saUJBQWlCLFFBQVEsTUFBTSxTQUFTLElBQUksS0FBSyxVQUFVLEtBQUs7QUFBQSxZQUN6RTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsTUFDQSxtREFBbUQsQ0FBQyxvQkFBOEM7QUFDaEcsWUFBSTtBQUNGLGtCQUFRLE9BQU87QUFBQSxZQUNiLFdBQVc7QUFBQSxZQUNYLE1BQU0sZ0JBQWdCO0FBQUEsWUFDdEIsSUFBSSxPQUFPO0FBQ1QscUJBQU8sTUFBTSxZQUFZLGdCQUFnQixVQUFVLGVBQWU7QUFBQSxZQUNwRTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0gsU0FBUyxPQUFPO0FBRWQsa0JBQVEsTUFBTSxtQkFBbUIsTUFBTSxtQkFBbUIsUUFBUSxRQUFRLE1BQU0sS0FBSztBQUNyRixrQkFBUSxPQUFPO0FBQUEsWUFDYixNQUFNLGdCQUFnQjtBQUFBLFlBQ3RCLFdBQVc7QUFBQSxZQUNYLE1BQU07QUFBQSxjQUNKLFVBQVUsUUFBUTtBQUFBLGNBQ2xCLE9BQU8saUJBQWlCLFFBQVEsTUFBTSxTQUFTLElBQUksS0FBSyxVQUFVLEtBQUs7QUFBQSxZQUN6RTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDO0FBRUQsSUFBTyw2QkFBUTsiLAogICJuYW1lcyI6IFtdCn0K