@checkdigit/eslint-plugin 6.7.0-PR.80-48a3 → 6.8.0-PR.83-33f3

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.
@@ -33,17 +33,6 @@
33
33
  ],
34
34
  "format": "esm"
35
35
  },
36
- "src/no-promise-instance-method.ts": {
37
- "bytes": 1617,
38
- "imports": [
39
- {
40
- "path": "src/get-documentation-url.ts",
41
- "kind": "import-statement",
42
- "original": "./get-documentation-url"
43
- }
44
- ],
45
- "format": "esm"
46
- },
47
36
  "node_modules/eslint-visitor-keys/dist/eslint-visitor-keys.cjs": {
48
37
  "bytes": 7226,
49
38
  "imports": [],
@@ -12215,6 +12204,43 @@
12215
12204
  ],
12216
12205
  "format": "esm"
12217
12206
  },
12207
+ "src/agent/no-full-response.ts": {
12208
+ "bytes": 2331,
12209
+ "imports": [
12210
+ {
12211
+ "path": "node_modules/@typescript-eslint/utils/dist/index.js",
12212
+ "kind": "import-statement",
12213
+ "original": "@typescript-eslint/utils"
12214
+ },
12215
+ {
12216
+ "path": "node:assert",
12217
+ "kind": "import-statement",
12218
+ "external": true
12219
+ },
12220
+ {
12221
+ "path": "src/get-documentation-url.ts",
12222
+ "kind": "import-statement",
12223
+ "original": "../get-documentation-url"
12224
+ },
12225
+ {
12226
+ "path": "src/library/ts-tree.ts",
12227
+ "kind": "import-statement",
12228
+ "original": "../library/ts-tree"
12229
+ }
12230
+ ],
12231
+ "format": "esm"
12232
+ },
12233
+ "src/no-promise-instance-method.ts": {
12234
+ "bytes": 1617,
12235
+ "imports": [
12236
+ {
12237
+ "path": "src/get-documentation-url.ts",
12238
+ "kind": "import-statement",
12239
+ "original": "./get-documentation-url"
12240
+ }
12241
+ ],
12242
+ "format": "esm"
12243
+ },
12218
12244
  "src/require-resolve-full-response.ts": {
12219
12245
  "bytes": 7652,
12220
12246
  "imports": [
@@ -12247,7 +12273,7 @@
12247
12273
  "format": "esm"
12248
12274
  },
12249
12275
  "src/require-type-out-of-type-only-imports.ts": {
12250
- "bytes": 1901,
12276
+ "bytes": 1961,
12251
12277
  "imports": [
12252
12278
  {
12253
12279
  "path": "node_modules/@typescript-eslint/utils/dist/index.js",
@@ -12308,13 +12334,18 @@
12308
12334
  "format": "esm"
12309
12335
  },
12310
12336
  "src/index.ts": {
12311
- "bytes": 3317,
12337
+ "bytes": 3510,
12312
12338
  "imports": [
12313
12339
  {
12314
12340
  "path": "src/invalid-json-stringify.ts",
12315
12341
  "kind": "import-statement",
12316
12342
  "original": "./invalid-json-stringify"
12317
12343
  },
12344
+ {
12345
+ "path": "src/agent/no-full-response.ts",
12346
+ "kind": "import-statement",
12347
+ "original": "./agent/no-full-response"
12348
+ },
12318
12349
  {
12319
12350
  "path": "src/no-promise-instance-method.ts",
12320
12351
  "kind": "import-statement",
@@ -12882,6 +12913,11 @@
12882
12913
  "kind": "require-resolve",
12883
12914
  "external": true
12884
12915
  },
12916
+ {
12917
+ "path": "node:assert",
12918
+ "kind": "require-call",
12919
+ "external": true
12920
+ },
12885
12921
  {
12886
12922
  "path": "node:assert",
12887
12923
  "kind": "require-call",
@@ -15139,7 +15175,7 @@
15139
15175
  "bytesInOutput": 2215
15140
15176
  },
15141
15177
  "src/index.ts": {
15142
- "bytesInOutput": 2218
15178
+ "bytesInOutput": 2304
15143
15179
  },
15144
15180
  "package.json": {
15145
15181
  "bytesInOutput": 2998
@@ -15150,17 +15186,20 @@
15150
15186
  "src/invalid-json-stringify.ts": {
15151
15187
  "bytesInOutput": 2471
15152
15188
  },
15153
- "src/no-promise-instance-method.ts": {
15154
- "bytesInOutput": 1275
15155
- },
15156
15189
  "src/library/ts-tree.ts": {
15157
15190
  "bytesInOutput": 2070
15158
15191
  },
15192
+ "src/agent/no-full-response.ts": {
15193
+ "bytesInOutput": 2000
15194
+ },
15195
+ "src/no-promise-instance-method.ts": {
15196
+ "bytesInOutput": 1275
15197
+ },
15159
15198
  "src/require-resolve-full-response.ts": {
15160
- "bytesInOutput": 7342
15199
+ "bytesInOutput": 7354
15161
15200
  },
15162
15201
  "src/require-type-out-of-type-only-imports.ts": {
15163
- "bytesInOutput": 1627
15202
+ "bytesInOutput": 1677
15164
15203
  },
15165
15204
  "src/file-path-comment.ts": {
15166
15205
  "bytesInOutput": 1961
@@ -15190,7 +15229,7 @@
15190
15229
  "bytesInOutput": 3362
15191
15230
  }
15192
15231
  },
15193
- "bytes": 4228483
15232
+ "bytes": 4232449
15194
15233
  }
15195
15234
  }
15196
15235
  }
@@ -0,0 +1,67 @@
1
+ // src/agent/no-full-response.ts
2
+ import { ESLintUtils, TSESTree } from "@typescript-eslint/utils";
3
+ import { strict as assert } from "node:assert";
4
+ import getDocumentationUrl from "../get-documentation-url.mjs";
5
+ import { getTypeParentNode } from "../library/ts-tree.mjs";
6
+ var ruleId = "no-full-response";
7
+ var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
8
+ var rule = createRule({
9
+ name: ruleId,
10
+ meta: {
11
+ type: "suggestion",
12
+ docs: {
13
+ description: "Remove the usage of FullResponse type."
14
+ },
15
+ messages: {
16
+ removeFullResponse: "Removing the usage of FullResponse type.",
17
+ unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.'
18
+ },
19
+ fixable: "code",
20
+ schema: []
21
+ },
22
+ defaultOptions: [],
23
+ create(context) {
24
+ const sourceCode = context.sourceCode;
25
+ return {
26
+ 'TSTypeReference[typeName.name="FullResponse"]': (typeReference) => {
27
+ try {
28
+ const typeParentNode = getTypeParentNode(typeReference);
29
+ assert.ok(typeParentNode);
30
+ if (typeParentNode.type === TSESTree.AST_NODE_TYPES.TSAsExpression) {
31
+ context.report({
32
+ messageId: "removeFullResponse",
33
+ node: typeReference,
34
+ fix(fixer) {
35
+ return fixer.replaceText(typeParentNode, sourceCode.getText(typeParentNode.expression));
36
+ }
37
+ });
38
+ } else {
39
+ context.report({
40
+ messageId: "removeFullResponse",
41
+ node: typeReference,
42
+ fix(fixer) {
43
+ return fixer.remove(typeParentNode);
44
+ }
45
+ });
46
+ }
47
+ } catch (error) {
48
+ console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
49
+ context.report({
50
+ node: typeReference,
51
+ messageId: "unknownError",
52
+ data: {
53
+ fileName: context.filename,
54
+ error: error instanceof Error ? error.toString() : JSON.stringify(error)
55
+ }
56
+ });
57
+ }
58
+ }
59
+ };
60
+ }
61
+ });
62
+ var no_full_response_default = rule;
63
+ export {
64
+ no_full_response_default as default,
65
+ ruleId
66
+ };
67
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLWZ1bGwtcmVzcG9uc2UudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBUUEsU0FBUyxhQUFhLGdCQUFnQjtBQUN0QyxTQUFTLFVBQVUsY0FBYztBQUNqQyxPQUFPLHlCQUF5QjtBQUNoQyxTQUFTLHlCQUF5QjtBQUUzQixJQUFNLFNBQVM7QUFFdEIsSUFBTSxhQUFhLFlBQVksWUFBWSxDQUFDLFNBQVMsb0JBQW9CLElBQUksQ0FBQztBQUU5RSxJQUFNLE9BQU8sV0FBVztBQUFBLEVBQ3RCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixvQkFBb0I7QUFBQSxNQUNwQixjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULFFBQVEsQ0FBQztBQUFBLEVBQ1g7QUFBQSxFQUNBLGdCQUFnQixDQUFDO0FBQUEsRUFDakIsT0FBTyxTQUFTO0FBQ2QsVUFBTSxhQUFhLFFBQVE7QUFFM0IsV0FBTztBQUFBLE1BQ0wsaURBQWlELENBQUMsa0JBQTRDO0FBQzVGLFlBQUk7QUFDRixnQkFBTSxpQkFBaUIsa0JBQWtCLGFBQWE7QUFDdEQsaUJBQU8sR0FBRyxjQUFjO0FBQ3hCLGNBQUksZUFBZSxTQUFTLFNBQVMsZUFBZSxnQkFBZ0I7QUFDbEUsb0JBQVEsT0FBTztBQUFBLGNBQ2IsV0FBVztBQUFBLGNBQ1gsTUFBTTtBQUFBLGNBQ04sSUFBSSxPQUFPO0FBQ1QsdUJBQU8sTUFBTSxZQUFZLGdCQUFnQixXQUFXLFFBQVEsZUFBZSxVQUFVLENBQUM7QUFBQSxjQUN4RjtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0gsT0FBTztBQUNMLG9CQUFRLE9BQU87QUFBQSxjQUNiLFdBQVc7QUFBQSxjQUNYLE1BQU07QUFBQSxjQUNOLElBQUksT0FBTztBQUNULHVCQUFPLE1BQU0sT0FBTyxjQUFjO0FBQUEsY0FDcEM7QUFBQSxZQUNGLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRixTQUFTLE9BQU87QUFFZCxrQkFBUSxNQUFNLG1CQUFtQixNQUFNLG1CQUFtQixRQUFRLFFBQVEsTUFBTSxLQUFLO0FBQ3JGLGtCQUFRLE9BQU87QUFBQSxZQUNiLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxZQUNYLE1BQU07QUFBQSxjQUNKLFVBQVUsUUFBUTtBQUFBLGNBQ2xCLE9BQU8saUJBQWlCLFFBQVEsTUFBTSxTQUFTLElBQUksS0FBSyxVQUFVLEtBQUs7QUFBQSxZQUN6RTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDO0FBRUQsSUFBTywyQkFBUTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -1,5 +1,6 @@
1
1
  // src/index.ts
2
2
  import invalidJsonStringify, { ruleId as invalidJsonStringifyRuleId } from "./invalid-json-stringify.mjs";
3
+ import noFullResponse, { ruleId as noFullResponseRuleId } from "./agent/no-full-response.mjs";
3
4
  import noPromiseInstanceMethod, { ruleId as noPromiseInstanceMethodRuleId } from "./no-promise-instance-method.mjs";
4
5
  import requireResolveFullResponse, {
5
6
  ruleId as requireResolveFullResponseRuleId
@@ -29,6 +30,7 @@ var src_default = {
29
30
  "object-literal-response": objectLiteralResponse,
30
31
  [invalidJsonStringifyRuleId]: invalidJsonStringify,
31
32
  [noPromiseInstanceMethodRuleId]: noPromiseInstanceMethod,
33
+ [noFullResponseRuleId]: noFullResponse,
32
34
  [requireResolveFullResponseRuleId]: requireResolveFullResponse,
33
35
  [requireTypeOutOfTypeOnlyImportsRuleId]: requireTypeOutOfTypeOnlyImports
34
36
  },
@@ -46,6 +48,7 @@ var src_default = {
46
48
  "@checkdigit/no-test-import": "error",
47
49
  [`@checkdigit/${invalidJsonStringifyRuleId}`]: "error",
48
50
  [`@checkdigit/${noPromiseInstanceMethodRuleId}`]: "error",
51
+ [`@checkdigit/${noFullResponseRuleId}`]: "error",
49
52
  [`@checkdigit/${requireResolveFullResponseRuleId}`]: "error",
50
53
  [`@checkdigit/${requireTypeOutOfTypeOnlyImportsRuleId}`]: "error"
51
54
  }
@@ -70,4 +73,4 @@ var src_default = {
70
73
  export {
71
74
  src_default as default
72
75
  };
73
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLE9BQU8sd0JBQXdCLFVBQVUsa0NBQWtDO0FBQzNFLE9BQU8sMkJBQTJCLFVBQVUscUNBQXFDO0FBQ2pGLE9BQU87QUFBQSxFQUNMLFVBQVU7QUFBQSxPQUNMO0FBQ1AsT0FBTztBQUFBLEVBQ0wsVUFBVTtBQUFBLE9BQ0w7QUFDUCxPQUFPLHFCQUFxQjtBQUM1QixPQUFPLG1CQUFtQjtBQUMxQixPQUFPLGtCQUFrQjtBQUN6QixPQUFPLFlBQVk7QUFDbkIsT0FBTyxzQkFBc0I7QUFDN0IsT0FBTywyQkFBMkI7QUFDbEMsT0FBTyxrQkFBa0I7QUFDekIsT0FBTyx5Q0FBeUM7QUFDaEQsT0FBTyx5QkFBeUI7QUFFaEMsSUFBTyxjQUFRO0FBQUEsRUFDYixPQUFPO0FBQUEsSUFDTCxxQkFBcUI7QUFBQSxJQUNyQixtQkFBbUI7QUFBQSxJQUNuQixXQUFXO0FBQUEsSUFDWCx5QkFBeUI7QUFBQSxJQUN6QixrQkFBa0I7QUFBQSxJQUNsQixzQkFBc0I7QUFBQSxJQUN0Qiw4QkFBOEI7QUFBQSxJQUM5QiwyQ0FBMkM7QUFBQSxJQUMzQywyQkFBMkI7QUFBQSxJQUMzQixDQUFDLDBCQUEwQixHQUFHO0FBQUEsSUFDOUIsQ0FBQyw2QkFBNkIsR0FBRztBQUFBLElBQ2pDLENBQUMsZ0NBQWdDLEdBQUc7QUFBQSxJQUNwQyxDQUFDLHFDQUFxQyxHQUFHO0FBQUEsRUFDM0M7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLEtBQUs7QUFBQSxNQUNILE9BQU87QUFBQSxRQUNMLCtCQUErQjtBQUFBLFFBQy9CLGlDQUFpQztBQUFBLFFBQ2pDLHVCQUF1QjtBQUFBLFFBQ3ZCLHFDQUFxQztBQUFBLFFBQ3JDLGtDQUFrQztBQUFBLFFBQ2xDLDBDQUEwQztBQUFBLFFBQzFDLHVEQUF1RDtBQUFBLFFBQ3ZELHVDQUF1QztBQUFBLFFBQ3ZDLDhCQUE4QjtBQUFBLFFBQzlCLENBQUMsZUFBZSwwQkFBMEIsRUFBRSxHQUFHO0FBQUEsUUFDL0MsQ0FBQyxlQUFlLDZCQUE2QixFQUFFLEdBQUc7QUFBQSxRQUNsRCxDQUFDLGVBQWUsZ0NBQWdDLEVBQUUsR0FBRztBQUFBLFFBQ3JELENBQUMsZUFBZSxxQ0FBcUMsRUFBRSxHQUFHO0FBQUEsTUFDNUQ7QUFBQSxJQUNGO0FBQUEsSUFDQSxhQUFhO0FBQUEsTUFDWCxPQUFPO0FBQUEsUUFDTCwrQkFBK0I7QUFBQSxRQUMvQixpQ0FBaUM7QUFBQSxRQUNqQyx1QkFBdUI7QUFBQSxRQUN2QixxQ0FBcUM7QUFBQSxRQUNyQyxrQ0FBa0M7QUFBQSxRQUNsQywwQ0FBMEM7QUFBQSxRQUMxQyx1REFBdUQ7QUFBQSxRQUN2RCx1Q0FBdUM7QUFBQSxRQUN2Qyw4QkFBOEI7QUFBQSxRQUM5QixDQUFDLGVBQWUsMEJBQTBCLEVBQUUsR0FBRztBQUFBLFFBQy9DLENBQUMsZUFBZSw2QkFBNkIsRUFBRSxHQUFHO0FBQUEsTUFDcEQ7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
76
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLE9BQU8sd0JBQXdCLFVBQVUsa0NBQWtDO0FBQzNFLE9BQU8sa0JBQWtCLFVBQVUsNEJBQTRCO0FBQy9ELE9BQU8sMkJBQTJCLFVBQVUscUNBQXFDO0FBQ2pGLE9BQU87QUFBQSxFQUNMLFVBQVU7QUFBQSxPQUNMO0FBQ1AsT0FBTztBQUFBLEVBQ0wsVUFBVTtBQUFBLE9BQ0w7QUFDUCxPQUFPLHFCQUFxQjtBQUM1QixPQUFPLG1CQUFtQjtBQUMxQixPQUFPLGtCQUFrQjtBQUN6QixPQUFPLFlBQVk7QUFDbkIsT0FBTyxzQkFBc0I7QUFDN0IsT0FBTywyQkFBMkI7QUFDbEMsT0FBTyxrQkFBa0I7QUFDekIsT0FBTyx5Q0FBeUM7QUFDaEQsT0FBTyx5QkFBeUI7QUFFaEMsSUFBTyxjQUFRO0FBQUEsRUFDYixPQUFPO0FBQUEsSUFDTCxxQkFBcUI7QUFBQSxJQUNyQixtQkFBbUI7QUFBQSxJQUNuQixXQUFXO0FBQUEsSUFDWCx5QkFBeUI7QUFBQSxJQUN6QixrQkFBa0I7QUFBQSxJQUNsQixzQkFBc0I7QUFBQSxJQUN0Qiw4QkFBOEI7QUFBQSxJQUM5QiwyQ0FBMkM7QUFBQSxJQUMzQywyQkFBMkI7QUFBQSxJQUMzQixDQUFDLDBCQUEwQixHQUFHO0FBQUEsSUFDOUIsQ0FBQyw2QkFBNkIsR0FBRztBQUFBLElBQ2pDLENBQUMsb0JBQW9CLEdBQUc7QUFBQSxJQUN4QixDQUFDLGdDQUFnQyxHQUFHO0FBQUEsSUFDcEMsQ0FBQyxxQ0FBcUMsR0FBRztBQUFBLEVBQzNDO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxLQUFLO0FBQUEsTUFDSCxPQUFPO0FBQUEsUUFDTCwrQkFBK0I7QUFBQSxRQUMvQixpQ0FBaUM7QUFBQSxRQUNqQyx1QkFBdUI7QUFBQSxRQUN2QixxQ0FBcUM7QUFBQSxRQUNyQyxrQ0FBa0M7QUFBQSxRQUNsQywwQ0FBMEM7QUFBQSxRQUMxQyx1REFBdUQ7QUFBQSxRQUN2RCx1Q0FBdUM7QUFBQSxRQUN2Qyw4QkFBOEI7QUFBQSxRQUM5QixDQUFDLGVBQWUsMEJBQTBCLEVBQUUsR0FBRztBQUFBLFFBQy9DLENBQUMsZUFBZSw2QkFBNkIsRUFBRSxHQUFHO0FBQUEsUUFDbEQsQ0FBQyxlQUFlLG9CQUFvQixFQUFFLEdBQUc7QUFBQSxRQUN6QyxDQUFDLGVBQWUsZ0NBQWdDLEVBQUUsR0FBRztBQUFBLFFBQ3JELENBQUMsZUFBZSxxQ0FBcUMsRUFBRSxHQUFHO0FBQUEsTUFDNUQ7QUFBQSxJQUNGO0FBQUEsSUFDQSxhQUFhO0FBQUEsTUFDWCxPQUFPO0FBQUEsUUFDTCwrQkFBK0I7QUFBQSxRQUMvQixpQ0FBaUM7QUFBQSxRQUNqQyx1QkFBdUI7QUFBQSxRQUN2QixxQ0FBcUM7QUFBQSxRQUNyQyxrQ0FBa0M7QUFBQSxRQUNsQywwQ0FBMEM7QUFBQSxRQUMxQyx1REFBdUQ7QUFBQSxRQUN2RCx1Q0FBdUM7QUFBQSxRQUN2Qyw4QkFBOEI7QUFBQSxRQUM5QixDQUFDLGVBQWUsMEJBQTBCLEVBQUUsR0FBRztBQUFBLFFBQy9DLENBQUMsZUFBZSw2QkFBNkIsRUFBRSxHQUFHO0FBQUEsTUFDcEQ7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -11,7 +11,7 @@ var rule = createRule({
11
11
  description: 'Require "type" to be out side of type-only imports.'
12
12
  },
13
13
  messages: {
14
- moveTypeOutside: 'Update the type-only imports to use "tpe" outside of the curly braces.'
14
+ moveTypeOutside: 'Update the type-only imports to put "type" specifier outside of the curly braces.'
15
15
  },
16
16
  fixable: "code",
17
17
  schema: []
@@ -21,7 +21,7 @@ var rule = createRule({
21
21
  const sourceCode = context.sourceCode;
22
22
  return {
23
23
  ImportDeclaration(declaration) {
24
- if (declaration.importKind === "type" || !declaration.specifiers.every(
24
+ if (declaration.importKind === "type" || declaration.specifiers.length === 0 || !declaration.specifiers.every(
25
25
  (specifier) => specifier.type === TSESTree.AST_NODE_TYPES.ImportSpecifier && specifier.importKind === "type"
26
26
  )) {
27
27
  return;
@@ -45,4 +45,4 @@ export {
45
45
  require_type_out_of_type_only_imports_default as default,
46
46
  ruleId
47
47
  };
48
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlcXVpcmUtdHlwZS1vdXQtb2YtdHlwZS1vbmx5LWltcG9ydHMudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBUUEsU0FBUyxhQUFhLGdCQUFnQjtBQUN0QyxPQUFPLHlCQUF5QjtBQUV6QixJQUFNLFNBQVM7QUFFdEIsSUFBTSxhQUFhLFlBQVksWUFBWSxDQUFDLFNBQVMsb0JBQW9CLElBQUksQ0FBQztBQUU5RSxJQUFNLE9BQU8sV0FBVztBQUFBLEVBQ3RCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixpQkFBaUI7QUFBQSxJQUNuQjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1QsUUFBUSxDQUFDO0FBQUEsRUFDWDtBQUFBLEVBQ0EsZ0JBQWdCLENBQUM7QUFBQSxFQUNqQixPQUFPLFNBQVM7QUFDZCxVQUFNLGFBQWEsUUFBUTtBQUUzQixXQUFPO0FBQUEsTUFDTCxrQkFBa0IsYUFBYTtBQUM3QixZQUNFLFlBQVksZUFBZSxVQUMzQixDQUFDLFlBQVksV0FBVztBQUFBLFVBQ3RCLENBQUMsY0FDQyxVQUFVLFNBQVMsU0FBUyxlQUFlLG1CQUFtQixVQUFVLGVBQWU7QUFBQSxRQUMzRixHQUNBO0FBQ0E7QUFBQSxRQUNGO0FBRUEsZ0JBQVEsT0FBTztBQUFBLFVBQ2IsV0FBVztBQUFBLFVBQ1gsTUFBTTtBQUFBLFVBQ04sQ0FBQyxJQUFJLE9BQU87QUFDVixrQkFBTSxhQUFhLFlBQVksT0FBTztBQUN0QyxrQkFBTSxtQkFBbUIsWUFBWSxXQUNsQyxPQUFPLENBQUMsY0FBYyxVQUFVLFNBQVMsU0FBUyxlQUFlLHNCQUFzQixFQUN2RixJQUFJLENBQUMsY0FBYyxXQUFXLFFBQVEsU0FBUyxFQUFFLFFBQVEsU0FBUyxFQUFFLENBQUM7QUFDeEUsa0JBQU0sMkJBQTJCLGlCQUFpQixpQkFBaUIsS0FBSyxJQUFJLENBQUMsWUFBWSxVQUFVO0FBRW5HLGtCQUFNLE1BQU0sWUFBWSxhQUFhLHdCQUF3QjtBQUFBLFVBQy9EO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sZ0RBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
48
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlcXVpcmUtdHlwZS1vdXQtb2YtdHlwZS1vbmx5LWltcG9ydHMudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBUUEsU0FBUyxhQUFhLGdCQUFnQjtBQUN0QyxPQUFPLHlCQUF5QjtBQUV6QixJQUFNLFNBQVM7QUFFdEIsSUFBTSxhQUFhLFlBQVksWUFBWSxDQUFDLFNBQVMsb0JBQW9CLElBQUksQ0FBQztBQUU5RSxJQUFNLE9BQU8sV0FBVztBQUFBLEVBQ3RCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixpQkFBaUI7QUFBQSxJQUNuQjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1QsUUFBUSxDQUFDO0FBQUEsRUFDWDtBQUFBLEVBQ0EsZ0JBQWdCLENBQUM7QUFBQSxFQUNqQixPQUFPLFNBQVM7QUFDZCxVQUFNLGFBQWEsUUFBUTtBQUUzQixXQUFPO0FBQUEsTUFDTCxrQkFBa0IsYUFBYTtBQUM3QixZQUNFLFlBQVksZUFBZSxVQUMzQixZQUFZLFdBQVcsV0FBVyxLQUNsQyxDQUFDLFlBQVksV0FBVztBQUFBLFVBQ3RCLENBQUMsY0FDQyxVQUFVLFNBQVMsU0FBUyxlQUFlLG1CQUFtQixVQUFVLGVBQWU7QUFBQSxRQUMzRixHQUNBO0FBQ0E7QUFBQSxRQUNGO0FBRUEsZ0JBQVEsT0FBTztBQUFBLFVBQ2IsV0FBVztBQUFBLFVBQ1gsTUFBTTtBQUFBLFVBQ04sQ0FBQyxJQUFJLE9BQU87QUFDVixrQkFBTSxhQUFhLFlBQVksT0FBTztBQUN0QyxrQkFBTSxtQkFBbUIsWUFBWSxXQUNsQyxPQUFPLENBQUMsY0FBYyxVQUFVLFNBQVMsU0FBUyxlQUFlLHNCQUFzQixFQUN2RixJQUFJLENBQUMsY0FBYyxXQUFXLFFBQVEsU0FBUyxFQUFFLFFBQVEsU0FBUyxFQUFFLENBQUM7QUFDeEUsa0JBQU0sMkJBQTJCLGlCQUFpQixpQkFBaUIsS0FBSyxJQUFJLENBQUMsWUFBWSxVQUFVO0FBRW5HLGtCQUFNLE1BQU0sWUFBWSxhQUFhLHdCQUF3QjtBQUFBLFVBQy9EO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sZ0RBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,4 @@
1
+ import { ESLintUtils } from '@typescript-eslint/utils';
2
+ export declare const ruleId = "no-full-response";
3
+ declare const rule: ESLintUtils.RuleModule<"removeFullResponse" | "unknownError", never[], ESLintUtils.RuleListener>;
4
+ export default rule;
@@ -11,7 +11,8 @@ declare const _default: {
11
11
  'object-literal-response': import("eslint").Rule.RuleModule;
12
12
  "invalid-json-stringify": import("eslint").Rule.RuleModule;
13
13
  "no-promise-instance-method": import("eslint").Rule.RuleModule;
14
- "require-resolve-full-response": import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidOptions" | "unknownError", never[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
14
+ "no-full-response": import("@typescript-eslint/utils/ts-eslint").RuleModule<"removeFullResponse" | "unknownError", never[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
15
+ "require-resolve-full-response": import("@typescript-eslint/utils/ts-eslint").RuleModule<"unknownError" | "invalidOptions", never[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
15
16
  "require-type-out-of-type-only-imports": import("@typescript-eslint/utils/ts-eslint").RuleModule<"moveTypeOutside", never[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
16
17
  };
17
18
  configs: {
@@ -28,6 +29,7 @@ declare const _default: {
28
29
  '@checkdigit/no-test-import': string;
29
30
  "@checkdigit/invalid-json-stringify": string;
30
31
  "@checkdigit/no-promise-instance-method": string;
32
+ "@checkdigit/no-full-response": string;
31
33
  "@checkdigit/require-resolve-full-response": string;
32
34
  "@checkdigit/require-type-out-of-type-only-imports": string;
33
35
  };
@@ -5,4 +5,4 @@ export declare function isBlockStatement(node: Node): boolean;
5
5
  export declare function getEnclosingStatement(node: Node): Node | undefined;
6
6
  export declare function getEnclosingScopeNode(node: Node): Node | undefined;
7
7
  export declare function isUsedInArrayOrAsArgument(node: Node): boolean;
8
- export declare function getEnclosingFunction(node: Node): import("estree").ArrowFunctionExpression | import("estree").FunctionExpression | import("estree").FunctionDeclaration | undefined;
8
+ export declare function getEnclosingFunction(node: Node): import("estree").FunctionDeclaration | import("estree").FunctionExpression | import("estree").ArrowFunctionExpression | undefined;
@@ -2,5 +2,5 @@ import { ESLintUtils } from '@typescript-eslint/utils';
2
2
  export declare const ruleId = "require-resolve-full-response";
3
3
  export declare const PLAIN_URL_REGEXP: RegExp;
4
4
  export declare const TOKENIZED_URL_REGEXP: RegExp;
5
- declare const rule: ESLintUtils.RuleModule<"invalidOptions" | "unknownError", never[], ESLintUtils.RuleListener>;
5
+ declare const rule: ESLintUtils.RuleModule<"unknownError" | "invalidOptions", never[], ESLintUtils.RuleListener>;
6
6
  export default rule;
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@checkdigit/eslint-plugin","version":"6.7.0-PR.80-48a3","description":"Check Digit eslint plugins","keywords":["eslint","eslintplugin"],"homepage":"https://github.com/checkdigit/eslint-plugin#readme","bugs":{"url":"https://github.com/checkdigit/eslint-plugin/issues"},"repository":{"type":"git","url":"https://github.com/checkdigit/eslint-plugin"},"license":"MIT","author":"Check Digit, LLC","sideEffects":false,"type":"module","exports":{".":{"types":"./dist-types/index.d.ts","require":"./dist-cjs/index.cjs","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"files":["src","dist-types","dist-cjs","dist-mjs","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-cjs/**/*.test.cjs","!dist-cjs/**/*.spec.cjs","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"],"scripts":{"build:dist-cjs":"rimraf dist-cjs && npx builder --type=commonjs --sourceMap --entryPoint=index.ts --outDir=dist-cjs --outFile=index.cjs --external=espree && echo \"module.exports = module.exports.default;\" >> dist-cjs/index.cjs && node dist-cjs/index.cjs","build:dist-mjs":"rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs","build:dist-types":"rimraf dist-types && npx builder --type=types --outDir=dist-types","ci:compile":"tsc --noEmit","ci:coverage":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true","ci:lint":"npm run lint","ci:style":"npm run prettier","ci:test":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false","lint":"eslint --max-warnings 0 --ignore-path .gitignore .","lint:fix":"eslint --ignore-path .gitignore . --fix","prepublishOnly":"npm run build:dist-types && npm run build:dist-cjs && npm run build:dist-mjs","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"},"prettier":"@checkdigit/prettier-config","jest":{"preset":"@checkdigit/jest-config"},"dependencies":{"@typescript-eslint/type-utils":"7.18.0","@typescript-eslint/utils":"7.18.0","ts-api-utils":"^1.3.0"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^5.5.0","@checkdigit/typescript-config":"6.0.0","@types/eslint":"8.56.10","@typescript-eslint/eslint-plugin":"7.18.0","@typescript-eslint/parser":"7.18.0","@typescript-eslint/rule-tester":"7.18.0","eslint-config-prettier":"^9.1.0","eslint-plugin-eslint-plugin":"^6.2.0","eslint-plugin-import":"^2.29.1","eslint-plugin-no-only-tests":"^3.1.0","eslint-plugin-no-secrets":"^1.0.2","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"0.24.0","http-status-codes":"^2.3.0"},"peerDependencies":{"eslint":">=8 <9"},"engines":{"node":">=20.14"}}
1
+ {"name":"@checkdigit/eslint-plugin","version":"6.8.0-PR.83-33f3","description":"Check Digit eslint plugins","keywords":["eslint","eslintplugin"],"homepage":"https://github.com/checkdigit/eslint-plugin#readme","bugs":{"url":"https://github.com/checkdigit/eslint-plugin/issues"},"repository":{"type":"git","url":"https://github.com/checkdigit/eslint-plugin"},"license":"MIT","author":"Check Digit, LLC","sideEffects":false,"type":"module","exports":{".":{"types":"./dist-types/index.d.ts","require":"./dist-cjs/index.cjs","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"files":["src","dist-types","dist-cjs","dist-mjs","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-cjs/**/*.test.cjs","!dist-cjs/**/*.spec.cjs","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"],"scripts":{"build:dist-cjs":"rimraf dist-cjs && npx builder --type=commonjs --sourceMap --entryPoint=index.ts --outDir=dist-cjs --outFile=index.cjs --external=espree && echo \"module.exports = module.exports.default;\" >> dist-cjs/index.cjs && node dist-cjs/index.cjs","build:dist-mjs":"rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs","build:dist-types":"rimraf dist-types && npx builder --type=types --outDir=dist-types","ci:compile":"tsc --noEmit","ci:coverage":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true","ci:lint":"npm run lint","ci:style":"npm run prettier","ci:test":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false","lint":"eslint --max-warnings 0 --ignore-path .gitignore .","lint:fix":"eslint --ignore-path .gitignore . --fix","prepublishOnly":"npm run build:dist-types && npm run build:dist-cjs && npm run build:dist-mjs","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"},"prettier":"@checkdigit/prettier-config","jest":{"preset":"@checkdigit/jest-config"},"dependencies":{"@typescript-eslint/type-utils":"7.18.0","@typescript-eslint/utils":"7.18.0","ts-api-utils":"^1.3.0"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^5.5.1","@checkdigit/typescript-config":"6.0.0","@types/eslint":"8.56.10","@typescript-eslint/eslint-plugin":"7.18.0","@typescript-eslint/parser":"7.18.0","@typescript-eslint/rule-tester":"7.18.0","eslint-config-prettier":"^9.1.0","eslint-plugin-eslint-plugin":"^6.2.0","eslint-plugin-import":"^2.31.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-no-secrets":"^1.0.2","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"0.24.0","http-status-codes":"^2.3.0"},"peerDependencies":{"eslint":">=8 <9"},"engines":{"node":">=20.14"}}
@@ -0,0 +1,75 @@
1
+ // agent/no-full-response.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 { ESLintUtils, TSESTree } from '@typescript-eslint/utils';
10
+ import { strict as assert } from 'node:assert';
11
+ import getDocumentationUrl from '../get-documentation-url';
12
+ import { getTypeParentNode } from '../library/ts-tree';
13
+
14
+ export const ruleId = 'no-full-response';
15
+
16
+ const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
17
+
18
+ const rule = createRule({
19
+ name: ruleId,
20
+ meta: {
21
+ type: 'suggestion',
22
+ docs: {
23
+ description: 'Remove the usage of FullResponse type.',
24
+ },
25
+ messages: {
26
+ removeFullResponse: 'Removing the usage of FullResponse type.',
27
+ unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.',
28
+ },
29
+ fixable: 'code',
30
+ schema: [],
31
+ },
32
+ defaultOptions: [],
33
+ create(context) {
34
+ const sourceCode = context.sourceCode;
35
+
36
+ return {
37
+ 'TSTypeReference[typeName.name="FullResponse"]': (typeReference: TSESTree.TSTypeReference) => {
38
+ try {
39
+ const typeParentNode = getTypeParentNode(typeReference);
40
+ assert.ok(typeParentNode);
41
+ if (typeParentNode.type === TSESTree.AST_NODE_TYPES.TSAsExpression) {
42
+ context.report({
43
+ messageId: 'removeFullResponse',
44
+ node: typeReference,
45
+ fix(fixer) {
46
+ return fixer.replaceText(typeParentNode, sourceCode.getText(typeParentNode.expression));
47
+ },
48
+ });
49
+ } else {
50
+ context.report({
51
+ messageId: 'removeFullResponse',
52
+ node: typeReference,
53
+ fix(fixer) {
54
+ return fixer.remove(typeParentNode);
55
+ },
56
+ });
57
+ }
58
+ } catch (error) {
59
+ // eslint-disable-next-line no-console
60
+ console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
61
+ context.report({
62
+ node: typeReference,
63
+ messageId: 'unknownError',
64
+ data: {
65
+ fileName: context.filename,
66
+ error: error instanceof Error ? error.toString() : JSON.stringify(error),
67
+ },
68
+ });
69
+ }
70
+ },
71
+ };
72
+ },
73
+ });
74
+
75
+ export default rule;
package/src/index.ts CHANGED
@@ -7,6 +7,7 @@
7
7
  */
8
8
 
9
9
  import invalidJsonStringify, { ruleId as invalidJsonStringifyRuleId } from './invalid-json-stringify';
10
+ import noFullResponse, { ruleId as noFullResponseRuleId } from './agent/no-full-response';
10
11
  import noPromiseInstanceMethod, { ruleId as noPromiseInstanceMethodRuleId } from './no-promise-instance-method';
11
12
  import requireResolveFullResponse, {
12
13
  ruleId as requireResolveFullResponseRuleId,
@@ -37,6 +38,7 @@ export default {
37
38
  'object-literal-response': objectLiteralResponse,
38
39
  [invalidJsonStringifyRuleId]: invalidJsonStringify,
39
40
  [noPromiseInstanceMethodRuleId]: noPromiseInstanceMethod,
41
+ [noFullResponseRuleId]: noFullResponse,
40
42
  [requireResolveFullResponseRuleId]: requireResolveFullResponse,
41
43
  [requireTypeOutOfTypeOnlyImportsRuleId]: requireTypeOutOfTypeOnlyImports,
42
44
  },
@@ -54,6 +56,7 @@ export default {
54
56
  '@checkdigit/no-test-import': 'error',
55
57
  [`@checkdigit/${invalidJsonStringifyRuleId}`]: 'error',
56
58
  [`@checkdigit/${noPromiseInstanceMethodRuleId}`]: 'error',
59
+ [`@checkdigit/${noFullResponseRuleId}`]: 'error',
57
60
  [`@checkdigit/${requireResolveFullResponseRuleId}`]: 'error',
58
61
  [`@checkdigit/${requireTypeOutOfTypeOnlyImportsRuleId}`]: 'error',
59
62
  },
@@ -21,7 +21,7 @@ const rule = createRule({
21
21
  description: 'Require "type" to be out side of type-only imports.',
22
22
  },
23
23
  messages: {
24
- moveTypeOutside: 'Update the type-only imports to use "tpe" outside of the curly braces.',
24
+ moveTypeOutside: 'Update the type-only imports to put "type" specifier outside of the curly braces.',
25
25
  },
26
26
  fixable: 'code',
27
27
  schema: [],
@@ -34,6 +34,7 @@ const rule = createRule({
34
34
  ImportDeclaration(declaration) {
35
35
  if (
36
36
  declaration.importKind === 'type' ||
37
+ declaration.specifiers.length === 0 ||
37
38
  !declaration.specifiers.every(
38
39
  (specifier) =>
39
40
  specifier.type === TSESTree.AST_NODE_TYPES.ImportSpecifier && specifier.importKind === 'type',