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

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.
@@ -0,0 +1,346 @@
1
+ // src/agent/no-supertest.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 { analyzeResponseReferences } from "./response-reference.mjs";
14
+ import { getResponseBodyRetrievalText, getResponseHeadersRetrievalText } from "./fetch.mjs";
15
+ var ruleId = "no-supertest";
16
+ function analyzeFixtureCall(call, results, sourceCode) {
17
+ const parent = getParent(call);
18
+ assert.ok(parent, "parent should exist for fixture/supertest call node");
19
+ let nextCall;
20
+ if (parent.type === AST_NODE_TYPES.ReturnStatement) {
21
+ results.fixtureNode = call;
22
+ results.rootNode = parent;
23
+ } else if (parent.type === AST_NODE_TYPES.ArrayExpression || parent.type === AST_NODE_TYPES.CallExpression || parent.type === AST_NODE_TYPES.ArrowFunctionExpression) {
24
+ results.fixtureNode = call;
25
+ results.rootNode = call;
26
+ } else if (parent.type === AST_NODE_TYPES.AwaitExpression) {
27
+ results.fixtureNode = call;
28
+ const enclosingStatement = getEnclosingStatement(parent);
29
+ assert.ok(enclosingStatement);
30
+ const awaitParent = getParent(parent);
31
+ if (awaitParent?.type === AST_NODE_TYPES.MemberExpression) {
32
+ results.rootNode = parent;
33
+ results.inlineStatementNode = enclosingStatement;
34
+ if (awaitParent.property.type === AST_NODE_TYPES.Identifier && awaitParent.property.name === "body") {
35
+ results.inlineBodyReference = awaitParent;
36
+ }
37
+ if (awaitParent.property.type === AST_NODE_TYPES.Identifier && (awaitParent.property.name === "header" || awaitParent.property.name === "headers")) {
38
+ results.inlineHeadersReference = awaitParent;
39
+ }
40
+ } else if (enclosingStatement.type === AST_NODE_TYPES.VariableDeclaration) {
41
+ results.variableDeclaration = enclosingStatement;
42
+ results.rootNode = enclosingStatement;
43
+ } else if (enclosingStatement.type === AST_NODE_TYPES.ExpressionStatement && enclosingStatement.expression.type === AST_NODE_TYPES.AssignmentExpression) {
44
+ results.variableAssignment = enclosingStatement;
45
+ results.rootNode = enclosingStatement;
46
+ } else {
47
+ results.rootNode = parent;
48
+ }
49
+ } else if (parent.type === AST_NODE_TYPES.MemberExpression && parent.property.type === AST_NODE_TYPES.Identifier) {
50
+ if (parent.property.name === "expect") {
51
+ const assertionCall = getParent(parent);
52
+ assert.ok(assertionCall && assertionCall.type === AST_NODE_TYPES.CallExpression);
53
+ results.assertions = [...results.assertions ?? [], assertionCall.arguments];
54
+ nextCall = assertionCall;
55
+ } else if (parent.property.name === "send") {
56
+ const sendRequestBodyCall = getParent(parent);
57
+ assert.ok(sendRequestBodyCall && sendRequestBodyCall.type === AST_NODE_TYPES.CallExpression);
58
+ results.requestBody = sendRequestBodyCall.arguments[0];
59
+ nextCall = sendRequestBodyCall;
60
+ } else if (parent.property.name === "set") {
61
+ const setRequestHeaderCall = getParent(parent);
62
+ assert.ok(setRequestHeaderCall && setRequestHeaderCall.type === AST_NODE_TYPES.CallExpression);
63
+ const [arg1, arg2] = setRequestHeaderCall.arguments;
64
+ if (arg1.type === AST_NODE_TYPES.ObjectExpression) {
65
+ results.requestHeadersObjectLiteral = arg1;
66
+ } else {
67
+ results.requestHeaders = [...results.requestHeaders ?? [], { name: arg1, value: arg2 }];
68
+ }
69
+ nextCall = setRequestHeaderCall;
70
+ }
71
+ } else {
72
+ throw new Error(`Unexpected expression in fixture/supertest call ${sourceCode.getText(parent)}.`);
73
+ }
74
+ if (nextCall) {
75
+ analyzeFixtureCall(nextCall, results, sourceCode);
76
+ }
77
+ }
78
+ function createResponseAssertions(fixtureCallInformation, sourceCode, responseVariableName, destructuringResponseHeadersVariable) {
79
+ let statusAssertion;
80
+ const nonStatusAssertions = [];
81
+ for (const expectArguments of fixtureCallInformation.assertions ?? []) {
82
+ if (expectArguments.length === 1) {
83
+ const [assertionArgument] = expectArguments;
84
+ assert.ok(assertionArgument);
85
+ 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.")) {
86
+ statusAssertion = `assert.equal(${responseVariableName}.status, ${sourceCode.getText(assertionArgument)})`;
87
+ } else if (assertionArgument.type === AST_NODE_TYPES.ArrowFunctionExpression) {
88
+ let functionBody = sourceCode.getText(assertionArgument.body);
89
+ const [originalResponseArgument] = assertionArgument.params;
90
+ assert.ok(originalResponseArgument?.type === AST_NODE_TYPES.Identifier);
91
+ const originalResponseArgumentName = originalResponseArgument.name;
92
+ if (originalResponseArgumentName !== responseVariableName) {
93
+ functionBody = functionBody.replace(
94
+ new RegExp(`\\b${originalResponseArgumentName}\\b`, "ug"),
95
+ responseVariableName
96
+ );
97
+ }
98
+ nonStatusAssertions.push(`assert.doesNotThrow(()=>${functionBody})`);
99
+ } else if (assertionArgument.type === AST_NODE_TYPES.Identifier) {
100
+ nonStatusAssertions.push(
101
+ `assert.doesNotThrow(()=>${sourceCode.getText(assertionArgument)}(${responseVariableName}))`
102
+ );
103
+ } else if (assertionArgument.type === AST_NODE_TYPES.ObjectExpression || assertionArgument.type === AST_NODE_TYPES.CallExpression) {
104
+ nonStatusAssertions.push(
105
+ `assert.deepEqual(await ${responseVariableName}.json(), ${sourceCode.getText(assertionArgument)})`
106
+ );
107
+ } else {
108
+ throw new Error(`Unexpected Supertest assertion argument: ".expect(${sourceCode.getText(assertionArgument)})`);
109
+ }
110
+ } else if (expectArguments.length === 2) {
111
+ const [headerName, headerValue] = expectArguments;
112
+ assert.ok(headerName && headerValue);
113
+ const headersReference = destructuringResponseHeadersVariable !== void 0 ? destructuringResponseHeadersVariable.name : `${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
+ function getResponseVariableNameToUse(scopeManager, fixtureCallInformation, scopeVariablesMap) {
131
+ if (fixtureCallInformation.variableAssignment) {
132
+ assert.ok(
133
+ fixtureCallInformation.variableAssignment.expression.type === AST_NODE_TYPES.AssignmentExpression && fixtureCallInformation.variableAssignment.expression.left.type === AST_NODE_TYPES.Identifier
134
+ );
135
+ return fixtureCallInformation.variableAssignment.expression.left.name;
136
+ }
137
+ if (fixtureCallInformation.variableDeclaration) {
138
+ const firstDeclaration = fixtureCallInformation.variableDeclaration.declarations[0];
139
+ if (firstDeclaration !== void 0 && firstDeclaration.id.type === AST_NODE_TYPES.Identifier) {
140
+ return firstDeclaration.id.name;
141
+ }
142
+ }
143
+ const enclosingScopeNode = getEnclosingScopeNode(fixtureCallInformation.rootNode);
144
+ scopeManager.getDeclaredVariables(fixtureCallInformation.rootNode);
145
+ assert.ok(enclosingScopeNode);
146
+ const scope = scopeManager.acquire(enclosingScopeNode);
147
+ assert.ok(scope !== null);
148
+ let scopeVariables = scopeVariablesMap.get(scope);
149
+ if (!scopeVariables) {
150
+ scopeVariables = [...scope.set.keys()];
151
+ scopeVariablesMap.set(scope, scopeVariables);
152
+ }
153
+ let responseVariableCounter = 0;
154
+ let responseVariableNameToUse;
155
+ while (responseVariableNameToUse === void 0) {
156
+ responseVariableCounter++;
157
+ responseVariableNameToUse = `response${responseVariableCounter === 1 ? "" : responseVariableCounter.toString()}`;
158
+ if (scopeVariables.includes(responseVariableNameToUse)) {
159
+ responseVariableNameToUse = void 0;
160
+ }
161
+ }
162
+ scopeVariables.push(responseVariableNameToUse);
163
+ return responseVariableNameToUse;
164
+ }
165
+ function isResponseBodyRedefinition(responseBodyReference) {
166
+ const parent = getParent(responseBodyReference);
167
+ return parent?.type === AST_NODE_TYPES.VariableDeclarator && parent.id.type === AST_NODE_TYPES.Identifier;
168
+ }
169
+ var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
170
+ var rule = createRule({
171
+ name: ruleId,
172
+ meta: {
173
+ type: "suggestion",
174
+ docs: {
175
+ description: "Transform supertest assersions to regular node assertions.",
176
+ url: getDocumentationUrl(ruleId)
177
+ },
178
+ messages: {
179
+ preferNativeFetch: "Transform supertest assersions to regular node assertions.",
180
+ unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.'
181
+ },
182
+ fixable: "code",
183
+ schema: []
184
+ },
185
+ defaultOptions: [],
186
+ // eslint-disable-next-line max-lines-per-function
187
+ create(context) {
188
+ const sourceCode = context.sourceCode;
189
+ const scopeManager = sourceCode.scopeManager;
190
+ assert.ok(scopeManager !== null);
191
+ const scopeVariablesMap = /* @__PURE__ */ new Map();
192
+ return {
193
+ // eslint-disable-next-line max-lines-per-function
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
+ try {
200
+ if (isUsedInArrayOrAsArgument(supertestCall) || getEnclosingFunction(supertestCall)?.async === false) {
201
+ return;
202
+ }
203
+ const fixtureFunction = supertestCall.callee.object;
204
+ if (fixtureFunction.type !== AST_NODE_TYPES.CallExpression) {
205
+ return;
206
+ }
207
+ const indentation = getIndentation(supertestCall, sourceCode);
208
+ const fixtureCallInformation = {};
209
+ analyzeFixtureCall(fixtureFunction, fixtureCallInformation, sourceCode);
210
+ sourceCode.getText(fixtureCallInformation.fixtureNode);
211
+ sourceCode.getText(fixtureCallInformation.rootNode);
212
+ fixtureCallInformation.assertions?.flat().map((ass) => sourceCode.getText(ass));
213
+ const {
214
+ variable: responseVariable,
215
+ bodyReferences: responseBodyReferences,
216
+ headersReferences: responseHeadersReferences,
217
+ statusReferences: responseStatusReferences,
218
+ destructuringBodyVariable: destructuringResponseBodyVariable,
219
+ destructuringHeadersVariable: destructuringResponseHeadersVariable
220
+ } = analyzeResponseReferences(fixtureCallInformation.variableDeclaration, scopeManager);
221
+ const responseVariableNameToUse = getResponseVariableNameToUse(
222
+ scopeManager,
223
+ fixtureCallInformation,
224
+ scopeVariablesMap
225
+ );
226
+ const isResponseBodyVariableRedefinitionNeeded = destructuringResponseBodyVariable !== void 0 || fixtureCallInformation.inlineBodyReference !== void 0 || responseBodyReferences.length > 0 && !responseBodyReferences.some(isResponseBodyRedefinition);
227
+ const redefineResponseBodyVariableName = `${responseVariableNameToUse}Body`;
228
+ const isResponseHeadersVariableRedefinitionNeeded = destructuringResponseHeadersVariable !== void 0 && // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
229
+ destructuringResponseHeadersVariable.type === AST_NODE_TYPES.ObjectPattern || fixtureCallInformation.inlineHeadersReference !== void 0;
230
+ const redefineResponseHeadersVariableName = `${responseVariableNameToUse}Headers`;
231
+ const isResponseVariableRedefinitionNeeded = fixtureCallInformation.variableAssignment === void 0 && responseVariable === void 0 && fixtureCallInformation.assertions !== void 0 || isResponseBodyVariableRedefinitionNeeded || isResponseHeadersVariableRedefinitionNeeded;
232
+ const responseBodyHeadersVariableRedefineLines = isResponseVariableRedefinitionNeeded ? [
233
+ // eslint-disable-next-line no-nested-ternary
234
+ ...destructuringResponseBodyVariable ? [
235
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
236
+ `${fixtureCallInformation.variableDeclaration?.kind ?? "const"} ${destructuringResponseBodyVariable.type === AST_NODE_TYPES.ObjectPattern ? sourceCode.getText(destructuringResponseBodyVariable) : destructuringResponseBodyVariable.name} = ${getResponseBodyRetrievalText(responseVariableNameToUse)}`
237
+ ] : isResponseBodyVariableRedefinitionNeeded ? [
238
+ `const ${redefineResponseBodyVariableName} = ${getResponseBodyRetrievalText(responseVariableNameToUse)}`
239
+ ] : [],
240
+ // eslint-disable-next-line no-nested-ternary
241
+ ...destructuringResponseHeadersVariable ? (
242
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
243
+ destructuringResponseHeadersVariable.type === AST_NODE_TYPES.ObjectPattern ? destructuringResponseHeadersVariable.properties.map((property) => {
244
+ assert.ok(property.type === AST_NODE_TYPES.Property);
245
+ assert.ok(property.value.type === AST_NODE_TYPES.Identifier);
246
+ 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)}'`})`;
247
+ }) : [
248
+ `${fixtureCallInformation.variableDeclaration?.kind ?? "const"} ${destructuringResponseHeadersVariable.name} = ${getResponseHeadersRetrievalText(responseVariableNameToUse)}`
249
+ ]
250
+ ) : isResponseHeadersVariableRedefinitionNeeded ? [
251
+ `const ${redefineResponseHeadersVariableName} = ${getResponseHeadersRetrievalText(responseVariableNameToUse)}`
252
+ ] : []
253
+ ] : [];
254
+ const { statusAssertion, nonStatusAssertions } = createResponseAssertions(
255
+ fixtureCallInformation,
256
+ sourceCode,
257
+ responseVariableNameToUse,
258
+ destructuringResponseHeadersVariable
259
+ );
260
+ const fetchCallText = sourceCode.getText(fixtureFunction);
261
+ const fetchStatementText = !isResponseVariableRedefinitionNeeded ? fetchCallText : `${fixtureCallInformation.variableDeclaration?.kind ?? "const"} ${responseVariableNameToUse} = await ${fetchCallText}`;
262
+ const nodeToReplace = isResponseVariableRedefinitionNeeded ? fixtureCallInformation.rootNode : fixtureCallInformation.fixtureNode;
263
+ const appendingAssignmentAndAssertionText = [
264
+ "",
265
+ ...statusAssertion !== void 0 ? [statusAssertion] : [],
266
+ ...responseBodyHeadersVariableRedefineLines,
267
+ ...nonStatusAssertions
268
+ ].join(`;
269
+ ${indentation}`);
270
+ context.report({
271
+ node: supertestCall,
272
+ messageId: "preferNativeFetch",
273
+ *fix(fixer) {
274
+ if (fixtureCallInformation.inlineStatementNode) {
275
+ const preInlineDeclaration = [
276
+ fetchStatementText,
277
+ `${appendingAssignmentAndAssertionText};
278
+ ${indentation}`
279
+ ].join(``);
280
+ yield fixer.insertTextBefore(fixtureCallInformation.inlineStatementNode, preInlineDeclaration);
281
+ } else {
282
+ yield fixer.replaceText(nodeToReplace, fetchStatementText);
283
+ const needEndingSemiColon = sourceCode.getText(nodeToReplace).endsWith(";");
284
+ yield fixer.insertTextAfter(
285
+ nodeToReplace,
286
+ needEndingSemiColon ? `${appendingAssignmentAndAssertionText};` : appendingAssignmentAndAssertionText
287
+ );
288
+ }
289
+ for (const responseBodyReference of responseBodyReferences) {
290
+ yield fixer.replaceText(
291
+ responseBodyReference,
292
+ isResponseBodyVariableRedefinitionNeeded || !isResponseBodyRedefinition(responseBodyReference) ? redefineResponseBodyVariableName : getResponseBodyRetrievalText(responseVariableNameToUse)
293
+ );
294
+ }
295
+ if (fixtureCallInformation.inlineBodyReference) {
296
+ yield fixer.replaceText(fixtureCallInformation.inlineBodyReference, redefineResponseBodyVariableName);
297
+ }
298
+ for (const responseHeadersReference of responseHeadersReferences) {
299
+ const parent = getParent(responseHeadersReference);
300
+ assert.ok(parent);
301
+ let headerName;
302
+ if (parent.type === AST_NODE_TYPES.MemberExpression) {
303
+ const headerNameNode = parent.property;
304
+ headerName = parent.computed ? sourceCode.getText(headerNameNode) : `'${sourceCode.getText(headerNameNode)}'`;
305
+ } else if (parent.type === AST_NODE_TYPES.CallExpression) {
306
+ const headerNameNode = parent.arguments[0];
307
+ headerName = sourceCode.getText(headerNameNode);
308
+ }
309
+ assert.ok(headerName !== void 0);
310
+ yield fixer.replaceText(parent, `${responseVariableNameToUse}.headers.get(${headerName})`);
311
+ }
312
+ for (const responseStatusReference of responseStatusReferences) {
313
+ if (responseStatusReference.property.type === AST_NODE_TYPES.Identifier && responseStatusReference.property.name === "statusCode") {
314
+ yield fixer.replaceText(responseStatusReference.property, `status`);
315
+ }
316
+ }
317
+ if (fixtureCallInformation.rootNode.type === AST_NODE_TYPES.ReturnStatement && fixtureCallInformation.assertions !== void 0) {
318
+ yield fixer.insertTextAfter(
319
+ fixtureCallInformation.rootNode,
320
+ `
321
+ ${indentation}return ${responseVariableNameToUse};`
322
+ );
323
+ }
324
+ }
325
+ });
326
+ } catch (error) {
327
+ console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
328
+ context.report({
329
+ node: supertestCall,
330
+ messageId: "unknownError",
331
+ data: {
332
+ fileName: context.filename,
333
+ error: error instanceof Error ? error.toString() : JSON.stringify(error)
334
+ }
335
+ });
336
+ }
337
+ }
338
+ };
339
+ }
340
+ });
341
+ var no_supertest_default = rule;
342
+ export {
343
+ no_supertest_default as default,
344
+ ruleId
345
+ };
346
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLXN1cGVydGVzdC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLFVBQVUsY0FBYztBQUVqQyxTQUFTLGdCQUFnQixtQkFBNkI7QUFJdEQ7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxPQUFPLHlCQUF5QjtBQUNoQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGlDQUFpQztBQUMxQyxTQUFTLDhCQUE4Qix1Q0FBdUM7QUFFdkUsSUFBTSxTQUFTO0FBdUJ0QixTQUFTLG1CQUFtQixNQUErQixTQUFpQyxZQUF3QjtBQUNsSCxRQUFNLFNBQVMsVUFBVSxJQUFJO0FBQzdCLFNBQU8sR0FBRyxRQUFRLHFEQUFxRDtBQUV2RSxNQUFJO0FBQ0osTUFBSSxPQUFPLFNBQVMsZUFBZSxpQkFBaUI7QUFFbEQsWUFBUSxjQUFjO0FBQ3RCLFlBQVEsV0FBVztBQUFBLEVBQ3JCLFdBQ0UsT0FBTyxTQUFTLGVBQWUsbUJBQy9CLE9BQU8sU0FBUyxlQUFlLGtCQUMvQixPQUFPLFNBQVMsZUFBZSx5QkFDL0I7QUFFQSxZQUFRLGNBQWM7QUFDdEIsWUFBUSxXQUFXO0FBQUEsRUFDckIsV0FBVyxPQUFPLFNBQVMsZUFBZSxpQkFBaUI7QUFDekQsWUFBUSxjQUFjO0FBQ3RCLFVBQU0scUJBQXFCLHNCQUFzQixNQUFNO0FBQ3ZELFdBQU8sR0FBRyxrQkFBa0I7QUFDNUIsVUFBTSxjQUFjLFVBQVUsTUFBTTtBQUNwQyxRQUFJLGFBQWEsU0FBUyxlQUFlLGtCQUFrQjtBQUN6RCxjQUFRLFdBQVc7QUFDbkIsY0FBUSxzQkFBc0I7QUFDOUIsVUFBSSxZQUFZLFNBQVMsU0FBUyxlQUFlLGNBQWMsWUFBWSxTQUFTLFNBQVMsUUFBUTtBQUNuRyxnQkFBUSxzQkFBc0I7QUFBQSxNQUNoQztBQUNBLFVBQ0UsWUFBWSxTQUFTLFNBQVMsZUFBZSxlQUM1QyxZQUFZLFNBQVMs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
@@ -1,8 +1,8 @@
1
1
  // src/agent/response-reference.ts
2
2
  import { strict as assert } from "node:assert";
3
- import "eslint";
4
3
  import debug from "debug";
5
- import { getParent } from "../library/tree.mjs";
4
+ import { AST_NODE_TYPES } from "@typescript-eslint/utils";
5
+ import { getParent } from "../library/ts-tree.mjs";
6
6
  var log = debug("eslint-plugin:response-reference");
7
7
  function analyzeResponseReferences(variableDeclaration, scopeManager) {
8
8
  const results = {
@@ -19,41 +19,41 @@ function analyzeResponseReferences(variableDeclaration, scopeManager) {
19
19
  assert.ok(identifier);
20
20
  const identifierParent = getParent(identifier);
21
21
  assert.ok(identifierParent);
22
- if (identifierParent.type === "VariableDeclarator") {
22
+ if (identifierParent.type === AST_NODE_TYPES.VariableDeclarator) {
23
23
  results.variable = responseVariable;
24
24
  const responseReferences = responseVariable.references.map(
25
25
  (responseReference) => getParent(responseReference.identifier)
26
26
  );
27
27
  results.bodyReferences = responseReferences.filter(
28
- (node) => node?.type === "MemberExpression" && node.property.type === "Identifier" && node.property.name === "body"
28
+ (node) => node?.type === AST_NODE_TYPES.MemberExpression && node.property.type === AST_NODE_TYPES.Identifier && node.property.name === "body"
29
29
  );
30
30
  results.headersReferences = responseReferences.filter(
31
- (node) => node?.type === "MemberExpression" && node.property.type === "Identifier" && (node.property.name === "header" || node.property.name === "headers" || node.property.name === "get")
31
+ (node) => node?.type === AST_NODE_TYPES.MemberExpression && node.property.type === AST_NODE_TYPES.Identifier && (node.property.name === "header" || node.property.name === "headers" || node.property.name === "get")
32
32
  );
33
33
  results.statusReferences = responseReferences.filter(
34
- (node) => node?.type === "MemberExpression" && node.property.type === "Identifier" && (node.property.name === "status" || node.property.name === "statusCode")
34
+ (node) => node?.type === AST_NODE_TYPES.MemberExpression && node.property.type === AST_NODE_TYPES.Identifier && (node.property.name === "status" || node.property.name === "statusCode")
35
35
  );
36
36
  } else if (
37
37
  // body reference through destruction/renaming, e.g. "const { body } = ..."
38
- identifierParent.type === "Property" && identifierParent.key.type === "Identifier" && identifierParent.key.name === "body"
38
+ identifierParent.type === AST_NODE_TYPES.Property && identifierParent.key.type === AST_NODE_TYPES.Identifier && identifierParent.key.name === "body"
39
39
  ) {
40
40
  results.destructuringBodyVariable = responseVariable;
41
41
  } else if (
42
42
  // header reference through destruction/renaming, e.g. "const { headers } = ..."
43
- identifierParent.type === "Property" && identifierParent.key.type === "Identifier" && identifierParent.key.name === "headers"
43
+ identifierParent.type === AST_NODE_TYPES.Property && identifierParent.key.type === AST_NODE_TYPES.Identifier && identifierParent.key.name === "headers"
44
44
  ) {
45
45
  results.destructuringHeadersVariable = responseVariable;
46
46
  results.destructuringHeadersReferences = responseVariable.references.map((reference) => reference.identifier).map(getParent).filter(
47
- (parent) => parent?.type === "MemberExpression" && parent.property.type === "Identifier" && parent.property.name !== "get" && getParent(parent)?.type !== "CallExpression"
47
+ (parent) => parent?.type === AST_NODE_TYPES.MemberExpression && parent.property.type === AST_NODE_TYPES.Identifier && parent.property.name !== "get" && getParent(parent)?.type !== AST_NODE_TYPES.CallExpression
48
48
  );
49
- } else if (identifierParent.type === "Property") {
49
+ } else if (identifierParent.type === AST_NODE_TYPES.Property) {
50
50
  const parent = getParent(identifierParent);
51
- if (parent?.type === "ObjectPattern") {
51
+ if (parent?.type === AST_NODE_TYPES.ObjectPattern) {
52
52
  const parent2 = getParent(parent);
53
- if (parent2?.type === "Property" && parent2.key.type === "Identifier" && parent2.key.name === "body") {
53
+ if (parent2?.type === AST_NODE_TYPES.Property && parent2.key.type === AST_NODE_TYPES.Identifier && parent2.key.name === "body") {
54
54
  results.destructuringBodyVariable = parent;
55
55
  }
56
- if (parent2?.type === "Property" && parent2.key.type === "Identifier" && (parent2.key.name === "header" || parent2.key.name === "headers")) {
56
+ if (parent2?.type === AST_NODE_TYPES.Property && parent2.key.type === AST_NODE_TYPES.Identifier && (parent2.key.name === "header" || parent2.key.name === "headers")) {
57
57
  results.destructuringHeadersVariable = parent;
58
58
  }
59
59
  }
@@ -67,4 +67,4 @@ function analyzeResponseReferences(variableDeclaration, scopeManager) {
67
67
  export {
68
68
  analyzeResponseReferences
69
69
  };
70
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L3Jlc3BvbnNlLXJlZmVyZW5jZS50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLFVBQVUsY0FBYztBQUVqQyxPQUEyQjtBQUMzQixPQUFPLFdBQVc7QUFFbEIsU0FBUyxpQkFBaUI7QUFFMUIsSUFBTSxNQUFNLE1BQU0sa0NBQWtDO0FBTzdDLFNBQVMsMEJBQ2QscUJBQ0EsY0FTQTtBQUNBLFFBQU0sVUFRRjtBQUFBLElBQ0YsZ0JBQWdCLENBQUM7QUFBQSxJQUNqQixtQkFBbUIsQ0FBQztBQUFBLElBQ3BCLGtCQUFrQixDQUFDO0FBQUEsRUFDckI7QUFDQSxNQUFJLENBQUMscUJBQXFCO0FBQ3hCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxvQkFBb0IsYUFBYSxxQkFBcUIsbUJBQW1CO0FBQy9FLGFBQVcsb0JBQW9CLG1CQUFtQjtBQUNoRCxVQUFNLGFBQWEsaUJBQWlCLFlBQVksQ0FBQztBQUNqRCxXQUFPLEdBQUcsVUFBVTtBQUNwQixVQUFNLG1CQUFtQixVQUFVLFVBQVU7QUFDN0MsV0FBTyxHQUFHLGdCQUFnQjtBQUMxQixRQUFJLGlCQUFpQixTQUFTLHNCQUFzQjtBQUVsRCxjQUFRLFdBQVc7QUFDbkIsWUFBTSxxQkFBcUIsaUJBQWlCLFdBQVc7QUFBQSxRQUFJLENBQUMsc0JBQzFELFVBQVUsa0JBQWtCLFVBQVU7QUFBQSxNQUN4QztBQUVBLGNBQVEsaUJBQWlCLG1CQUFtQjtBQUFBLFFBQzFDLENBQUMsU0FDQyxNQUFNLFNBQVMsc0JBQXNCLEtBQUssU0FBUyxTQUFTLGdCQUFnQixLQUFLLFNBQVMsU0FBUztBQUFBLE1BQ3ZHO0FBRUEsY0FBUSxvQkFBb0IsbUJBQW1CO0FBQUEsUUFDN0MsQ0FBQyxTQUNDLE1BQU0sU0FBUyxzQkFDZixLQUFLLFNBQVMsU0FBUyxpQkFDdEIsS0FBSyxTQUFTLFNBQVMsWUFBWSxLQUFLLFNBQVMsU0FBUyxhQUFhLEtBQUssU0FBUyxTQUFTO0FBQUEsTUFDbkc7QUFFQSxjQUFRLG1CQUFtQixtQkFBbUI7QUFBQSxRQUM1QyxDQUFDLFNBQ0MsTUFBTSxTQUFTLHNCQUNmLEtBQUssU0FBUyxTQUFTLGlCQUN0QixLQUFLLFNBQVMsU0FBUyxZQUFZLEtBQUssU0FBUyxTQUFTO0FBQUEsTUFDL0Q7QUFBQSxJQUNGO0FBQUE7QUFBQSxNQUVFLGlCQUFpQixTQUFTLGNBQzFCLGlCQUFpQixJQUFJLFNBQVMsZ0JBQzlCLGlCQUFpQixJQUFJLFNBQVM7QUFBQSxNQUM5QjtBQUNBLGNBQVEsNEJBQTRCO0FBQUEsSUFDdEM7QUFBQTtBQUFBLE1BRUUsaUJBQWlCLFNBQVMsY0FDMUIsaUJBQWlCLElBQUksU0FBUyxnQkFDOUIsaUJBQWlCLElBQUksU0FBUztBQUFBLE1BQzlCO0FBQ0EsY0FBUSwrQkFBK0I7QUFDdkMsY0FBUSxpQ0FBaUMsaUJBQWlCLFdBQ3ZELElBQUksQ0FBQyxjQUFjLFVBQVUsVUFBVSxFQUN2QyxJQUFJLFNBQVMsRUFDYjtBQUFBLFFBQ0MsQ0FBQyxXQUNDLFFBQVEsU0FBUyxzQkFDakIsT0FBTyxTQUFTLFNBQVMsZ0JBQ3pCLE9BQU8sU0FBUyxTQUFTLFNBQ3pCLFVBQVUsTUFBTSxHQUFHLFNBQVM7QUFBQSxNQUNoQztBQUFBLElBQ0osV0FBVyxpQkFBaUIsU0FBUyxZQUFZO0FBQy9DLFlBQU0sU0FBUyxVQUFVLGdCQUFnQjtBQUN6QyxVQUFJLFFBQVEsU0FBUyxpQkFBaUI7QUFFcEMsY0FBTSxVQUFVLFVBQVUsTUFBTTtBQUNoQyxZQUFJLFNBQVMsU0FBUyxjQUFjLFFBQVEsSUFBSSxTQUFTLGdCQUFnQixRQUFRLElBQUksU0FBUyxRQUFRO0FBQ3BHLGtCQUFRLDRCQUE0QjtBQUFBLFFBQ3RDO0FBQ0EsWUFDRSxTQUFTLFNBQVMsY0FDbEIsUUFBUSxJQUFJLFNBQVMsaUJBQ3BCLFFBQVEsSUFBSSxTQUFTLFlBQVksUUFBUSxJQUFJLFNBQVMsWUFDdkQ7QUFDQSxrQkFBUSwrQkFBK0I7QUFBQSxRQUN6QztBQUFBLE1BQ0Y7QUFBQSxJQUNGLE9BQU87QUFDTCxVQUFJLDJDQUEyQyxnQkFBZ0I7QUFDL0QsWUFBTSxJQUFJLE1BQU0sd0NBQXdDLGlCQUFpQixJQUFJLEVBQUU7QUFBQSxJQUNqRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
70
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L3Jlc3BvbnNlLXJlZmVyZW5jZS50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLFVBQVUsY0FBYztBQUVqQyxPQUFPLFdBQVc7QUFFbEIsU0FBUyxzQkFBZ0M7QUFFekMsU0FBUyxpQkFBaUI7QUFFMUIsSUFBTSxNQUFNLE1BQU0sa0NBQWtDO0FBTzdDLFNBQVMsMEJBQ2QscUJBQ0EsY0FTQTtBQUNBLFFBQU0sVUFRRjtBQUFBLElBQ0YsZ0JBQWdCLENBQUM7QUFBQSxJQUNqQixtQkFBbUIsQ0FBQztBQUFBLElBQ3BCLGtCQUFrQixDQUFDO0FBQUEsRUFDckI7QUFDQSxNQUFJLENBQUMscUJBQXFCO0FBQ3hCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxvQkFBb0IsYUFBYSxxQkFBcUIsbUJBQW1CO0FBQy9FLGFBQVcsb0JBQW9CLG1CQUFtQjtBQUNoRCxVQUFNLGFBQWEsaUJBQWlCLFlBQVksQ0FBQztBQUNqRCxXQUFPLEdBQUcsVUFBVTtBQUNwQixVQUFNLG1CQUFtQixVQUFVLFVBQVU7QUFDN0MsV0FBTyxHQUFHLGdCQUFnQjtBQUMxQixRQUFJLGlCQUFpQixTQUFTLGVBQWUsb0JBQW9CO0FBRS9ELGNBQVEsV0FBVztBQUNuQixZQUFNLHFCQUFxQixpQkFBaUIsV0FBVztBQUFBLFFBQUksQ0FBQyxzQkFDMUQsVUFBVSxrQkFBa0IsVUFBVTtBQUFBLE1BQ3hDO0FBRUEsY0FBUSxpQkFBaUIsbUJBQW1CO0FBQUEsUUFDMUMsQ0FBQyxTQUNDLE1BQU0sU0FBUyxlQUFlLG9CQUM5QixLQUFLLFNBQVMsU0FBUyxlQUFlLGNBQ3RDLEtBQUssU0FBUyxTQUFTO0FBQUEsTUFDM0I7QUFFQSxjQUFRLG9CQUFvQixtQkFBbUI7QUFBQSxRQUM3QyxDQUFDLFNBQ0MsTUFBTSxTQUFTLGVBQWUsb0JBQzlCLEtBQUssU0FBUyxTQUFTLGVBQWUsZUFDckMsS0FBSyxTQUFTLFNBQVMsWUFBWSxLQUFLLFNBQVMsU0FBUyxhQUFhLEtBQUssU0FBUyxTQUFTO0FBQUEsTUFDbkc7QUFFQSxjQUFRLG1CQUFtQixtQkFBbUI7QUFBQSxRQUM1QyxDQUFDLFNBQ0MsTUFBTSxTQUFTLGVBQWUsb0JBQzlCLEtBQUssU0FBUyxTQUFTLGVBQWUsZUFDckMsS0FBSyxTQUFTLFNBQVMsWUFBWSxLQUFLLFNBQVMsU0FBUztBQUFBLE1BQy9EO0FBQUEsSUFDRjtBQUFBO0FBQUEsTUFFRSxpQkFBaUIsU0FBUyxlQUFlLFlBQ3pDLGlCQUFpQixJQUFJLFNBQVMsZUFBZSxjQUM3QyxpQkFBaUIsSUFBSSxTQUFTO0FBQUEsTUFDOUI7QUFDQSxjQUFRLDRCQUE0QjtBQUFBLElBQ3RDO0FBQUE7QUFBQSxNQUVFLGlCQUFpQixTQUFTLGVBQWUsWUFDekMsaUJBQWlCLElBQUksU0FBUyxlQUFlLGNBQzdDLGlCQUFpQixJQUFJLFNBQVM7QUFBQSxNQUM5QjtBQUNBLGNBQVEsK0JBQStCO0FBQ3ZDLGNBQVEsaUNBQWlDLGlCQUFpQixXQUN2RCxJQUFJLENBQUMsY0FBYyxVQUFVLFVBQVUsRUFDdkMsSUFBSSxTQUFTLEVBQ2I7QUFBQSxRQUNDLENBQUMsV0FDQyxRQUFRLFNBQVMsZUFBZSxvQkFDaEMsT0FBTyxTQUFTLFNBQVMsZUFBZSxjQUN4QyxPQUFPLFNBQVMsU0FBUyxTQUN6QixVQUFVLE1BQU0sR0FBRyxTQUFTLGVBQWU7QUFBQSxNQUMvQztBQUFBLElBQ0osV0FBVyxpQkFBaUIsU0FBUyxlQUFlLFVBQVU7QUFDNUQsWUFBTSxTQUFTLFVBQVUsZ0JBQWdCO0FBQ3pDLFVBQUksUUFBUSxTQUFTLGVBQWUsZUFBZTtBQUVqRCxjQUFNLFVBQVUsVUFBVSxNQUFNO0FBQ2hDLFlBQ0UsU0FBUyxTQUFTLGVBQWUsWUFDakMsUUFBUSxJQUFJLFNBQVMsZUFBZSxjQUNwQyxRQUFRLElBQUksU0FBUyxRQUNyQjtBQUNBLGtCQUFRLDRCQUE0QjtBQUFBLFFBQ3RDO0FBQ0EsWUFDRSxTQUFTLFNBQVMsZUFBZSxZQUNqQyxRQUFRLElBQUksU0FBUyxlQUFlLGVBQ25DLFFBQVEsSUFBSSxTQUFTLFlBQVksUUFBUSxJQUFJLFNBQVMsWUFDdkQ7QUFDQSxrQkFBUSwrQkFBK0I7QUFBQSxRQUN6QztBQUFBLE1BQ0Y7QUFBQSxJQUNGLE9BQU87QUFDTCxVQUFJLDJDQUEyQyxnQkFBZ0I7QUFDL0QsWUFBTSxJQUFJLE1BQU0sd0NBQXdDLGlCQUFpQixJQUFJLEVBQUU7QUFBQSxJQUNqRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -13,6 +13,7 @@ import fixFunctionCallArguments, {
13
13
  import invalidJsonStringify, { ruleId as invalidJsonStringifyRuleId } from "./invalid-json-stringify.mjs";
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
+ import noSupertest, { ruleId as noSupertestRuleId } from "./agent/no-supertest.mjs";
16
17
  import noLegacyServiceTyping, { ruleId as noLegacyServiceTypingRuleId } from "./no-legacy-service-typing.mjs";
17
18
  import noMappedResponse, { ruleId as noMappedResponseRuleId } from "./agent/no-mapped-response.mjs";
18
19
  import noPromiseInstanceMethod, { ruleId as noPromiseInstanceMethodRuleId } from "./no-promise-instance-method.mjs";
@@ -62,6 +63,7 @@ var rules = {
62
63
  [invalidJsonStringifyRuleId]: invalidJsonStringify,
63
64
  [noPromiseInstanceMethodRuleId]: noPromiseInstanceMethod,
64
65
  [noFixtureRuleId]: noFixture,
66
+ [noSupertestRuleId]: noSupertest,
65
67
  [fetchThenRuleId]: fetchThen,
66
68
  [noServiceWrapperRuleId]: noServiceWrapper,
67
69
  [noStatusCodeRuleId]: noStatusCode,
@@ -119,6 +121,7 @@ var configs = {
119
121
  [`@checkdigit/${noMappedResponseRuleId}`]: "off",
120
122
  [`@checkdigit/${addUrlDomainRuleId}`]: "off",
121
123
  [`@checkdigit/${noFixtureRuleId}`]: "off",
124
+ [`@checkdigit/${noSupertestRuleId}`]: "off",
122
125
  [`@checkdigit/${noServiceWrapperRuleId}`]: "off",
123
126
  [`@checkdigit/${noStatusCodeRuleId}`]: "off",
124
127
  [`@checkdigit/${fetchResponseBodyJsonRuleId}`]: "off",
@@ -167,6 +170,7 @@ var configs = {
167
170
  [`@checkdigit/${noMappedResponseRuleId}`]: "off",
168
171
  [`@checkdigit/${addUrlDomainRuleId}`]: "off",
169
172
  [`@checkdigit/${noFixtureRuleId}`]: "off",
173
+ [`@checkdigit/${noSupertestRuleId}`]: "off",
170
174
  [`@checkdigit/${noServiceWrapperRuleId}`]: "off",
171
175
  [`@checkdigit/${noStatusCodeRuleId}`]: "off",
172
176
  [`@checkdigit/${fetchResponseBodyJsonRuleId}`]: "off",
@@ -209,7 +213,8 @@ var configs = {
209
213
  [`@checkdigit/${addBasePathConstRuleId}`]: "error",
210
214
  [`@checkdigit/${addBasePathImportRuleId}`]: "error",
211
215
  [`@checkdigit/${addAssertImportRuleId}`]: "error",
212
- [`@checkdigit/${noFixtureRuleId}`]: "error"
216
+ [`@checkdigit/${noFixtureRuleId}`]: "error",
217
+ [`@checkdigit/${noSupertestRuleId}`]: "error"
213
218
  }
214
219
  },
215
220
  {
@@ -258,4 +263,4 @@ var src_default = defaultToExport;
258
263
  export {
259
264
  src_default as default
260
265
  };
261
- //# sourceMappingURL=data:application/json;base64,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
266
+ //# sourceMappingURL=data:application/json;base64,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
@@ -1,4 +1,4 @@
1
- import { type Rule } from 'eslint';
1
+ import { ESLintUtils } from '@typescript-eslint/utils';
2
2
  export declare const ruleId = "fetch-then";
3
- declare const rule: Rule.RuleModule;
3
+ declare const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch' | 'shouldUseHeaderGetter'>;
4
4
  export default rule;
@@ -1,5 +1,5 @@
1
- import type { Node } from 'estree';
1
+ import { TSESTree } from '@typescript-eslint/utils';
2
2
  export declare function getResponseBodyRetrievalText(responseVariableName: string): string;
3
3
  export declare function getResponseHeadersRetrievalText(responseVariableName: string): string;
4
- export declare function isInvalidResponseHeadersAccess(responseHeadersAccess: Node): boolean;
5
- export declare function hasAssertions(fixtureCall: Node): boolean;
4
+ export declare function isInvalidResponseHeadersAccess(responseHeadersAccess: TSESTree.Node): boolean;
5
+ export declare function hasAssertions(fixtureCall: TSESTree.Node): boolean;
@@ -1,4 +1,4 @@
1
- import { type Rule } from 'eslint';
1
+ import { ESLintUtils } from '@typescript-eslint/utils';
2
2
  export declare const ruleId = "no-fixture";
3
- declare const rule: Rule.RuleModule;
3
+ declare const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'>;
4
4
  export default rule;
@@ -0,0 +1,4 @@
1
+ import { ESLintUtils } from '@typescript-eslint/utils';
2
+ export declare const ruleId = "no-supertest";
3
+ declare const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'>;
4
+ export default rule;
@@ -1,16 +1,16 @@
1
- import type { MemberExpression, ObjectPattern, VariableDeclaration } from 'estree';
2
- import { type Scope } from 'eslint';
1
+ import { TSESTree } from '@typescript-eslint/utils';
2
+ import type { ScopeManager, Variable } from '@typescript-eslint/scope-manager';
3
3
  /**
4
4
  * analyze response related variables and their references
5
5
  * the implementation is for fixture API, but it can be used for fetch API as well since the tree structure is similar
6
6
  * @param variableDeclaration - variable declaration node
7
7
  */
8
- export declare function analyzeResponseReferences(variableDeclaration: VariableDeclaration | undefined, scopeManager: Scope.ScopeManager): {
9
- variable?: Scope.Variable;
10
- bodyReferences: MemberExpression[];
11
- headersReferences: MemberExpression[];
12
- statusReferences: MemberExpression[];
13
- destructuringBodyVariable?: Scope.Variable | ObjectPattern;
14
- destructuringHeadersVariable?: Scope.Variable | ObjectPattern;
15
- destructuringHeadersReferences?: MemberExpression[] | undefined;
8
+ export declare function analyzeResponseReferences(variableDeclaration: TSESTree.VariableDeclaration | undefined, scopeManager: ScopeManager): {
9
+ variable?: Variable;
10
+ bodyReferences: TSESTree.MemberExpression[];
11
+ headersReferences: TSESTree.MemberExpression[];
12
+ statusReferences: TSESTree.MemberExpression[];
13
+ destructuringBodyVariable?: Variable | TSESTree.ObjectPattern;
14
+ destructuringHeadersVariable?: Variable | TSESTree.ObjectPattern;
15
+ destructuringHeadersReferences?: TSESTree.MemberExpression[] | undefined;
16
16
  };
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@checkdigit/eslint-plugin","version":"7.6.0-PR.75-5da1","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-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"}}