@checkdigit/eslint-plugin 6.6.0-PR.75-c331 → 6.6.0-PR.75-0869
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-cjs/index.cjs +619 -543
- package/dist-cjs/metafile.json +48 -24
- package/dist-mjs/fixture/fetch-response-body-json.mjs +5 -3
- package/dist-mjs/fixture/fetch-response-header-getter-ts.mjs +74 -0
- package/dist-mjs/fixture/no-service-wrapper.mjs +5 -2
- package/dist-mjs/fixture/url.mjs +2 -2
- package/dist-mjs/index.mjs +8 -3
- package/dist-types/fixture/fetch-response-header-getter-ts.d.ts +4 -0
- package/dist-types/index.d.ts +2 -0
- package/package.json +1 -1
- package/src/fixture/fetch-response-body-json.ts +5 -2
- package/src/fixture/fetch-response-header-getter-ts.ts +96 -0
- package/src/fixture/no-service-wrapper.ts +8 -4
- package/src/fixture/url.ts +2 -2
- package/src/index.ts +5 -0
package/dist-cjs/metafile.json
CHANGED
|
@@ -12251,7 +12251,23 @@
|
|
|
12251
12251
|
"format": "cjs"
|
|
12252
12252
|
},
|
|
12253
12253
|
"src/fixture/fetch-response-body-json.ts": {
|
|
12254
|
-
"bytes":
|
|
12254
|
+
"bytes": 2633,
|
|
12255
|
+
"imports": [
|
|
12256
|
+
{
|
|
12257
|
+
"path": "node_modules/@typescript-eslint/utils/dist/index.js",
|
|
12258
|
+
"kind": "import-statement",
|
|
12259
|
+
"original": "@typescript-eslint/utils"
|
|
12260
|
+
},
|
|
12261
|
+
{
|
|
12262
|
+
"path": "src/get-documentation-url.ts",
|
|
12263
|
+
"kind": "import-statement",
|
|
12264
|
+
"original": "../get-documentation-url"
|
|
12265
|
+
}
|
|
12266
|
+
],
|
|
12267
|
+
"format": "esm"
|
|
12268
|
+
},
|
|
12269
|
+
"src/fixture/fetch-response-header-getter-ts.ts": {
|
|
12270
|
+
"bytes": 3985,
|
|
12255
12271
|
"imports": [
|
|
12256
12272
|
{
|
|
12257
12273
|
"path": "node_modules/@typescript-eslint/utils/dist/index.js",
|
|
@@ -12288,7 +12304,7 @@
|
|
|
12288
12304
|
"format": "esm"
|
|
12289
12305
|
},
|
|
12290
12306
|
"src/fixture/url.ts": {
|
|
12291
|
-
"bytes":
|
|
12307
|
+
"bytes": 670,
|
|
12292
12308
|
"imports": [],
|
|
12293
12309
|
"format": "esm"
|
|
12294
12310
|
},
|
|
@@ -12423,7 +12439,7 @@
|
|
|
12423
12439
|
"format": "esm"
|
|
12424
12440
|
},
|
|
12425
12441
|
"src/fixture/no-service-wrapper.ts": {
|
|
12426
|
-
"bytes":
|
|
12442
|
+
"bytes": 9416,
|
|
12427
12443
|
"imports": [
|
|
12428
12444
|
{
|
|
12429
12445
|
"path": "node_modules/@typescript-eslint/utils/dist/index.js",
|
|
@@ -12525,7 +12541,7 @@
|
|
|
12525
12541
|
"format": "esm"
|
|
12526
12542
|
},
|
|
12527
12543
|
"src/index.ts": {
|
|
12528
|
-
"bytes":
|
|
12544
|
+
"bytes": 4205,
|
|
12529
12545
|
"imports": [
|
|
12530
12546
|
{
|
|
12531
12547
|
"path": "src/fixture/fetch-header-getter.ts",
|
|
@@ -12537,6 +12553,11 @@
|
|
|
12537
12553
|
"kind": "import-statement",
|
|
12538
12554
|
"original": "./fixture/fetch-response-body-json"
|
|
12539
12555
|
},
|
|
12556
|
+
{
|
|
12557
|
+
"path": "src/fixture/fetch-response-header-getter-ts.ts",
|
|
12558
|
+
"kind": "import-statement",
|
|
12559
|
+
"original": "./fixture/fetch-response-header-getter-ts"
|
|
12560
|
+
},
|
|
12540
12561
|
{
|
|
12541
12562
|
"path": "src/fixture/fetch-then.ts",
|
|
12542
12563
|
"kind": "import-statement",
|
|
@@ -13355,7 +13376,7 @@
|
|
|
13355
13376
|
"bytesInOutput": 157
|
|
13356
13377
|
},
|
|
13357
13378
|
"node_modules/@eslint/eslintrc/dist/eslintrc.cjs": {
|
|
13358
|
-
"bytesInOutput":
|
|
13379
|
+
"bytesInOutput": 103394
|
|
13359
13380
|
},
|
|
13360
13381
|
"node_modules/is-extglob/index.js": {
|
|
13361
13382
|
"bytesInOutput": 444
|
|
@@ -13412,7 +13433,7 @@
|
|
|
13412
13433
|
"bytesInOutput": 302
|
|
13413
13434
|
},
|
|
13414
13435
|
"node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs": {
|
|
13415
|
-
"bytesInOutput":
|
|
13436
|
+
"bytesInOutput": 28037
|
|
13416
13437
|
},
|
|
13417
13438
|
"node_modules/eslint/lib/shared/traverser.js": {
|
|
13418
13439
|
"bytesInOutput": 4738
|
|
@@ -13529,7 +13550,7 @@
|
|
|
13529
13550
|
"bytesInOutput": 17031
|
|
13530
13551
|
},
|
|
13531
13552
|
"node_modules/eslint/lib/linter/apply-disable-directives.js": {
|
|
13532
|
-
"bytesInOutput":
|
|
13553
|
+
"bytesInOutput": 10137
|
|
13533
13554
|
},
|
|
13534
13555
|
"node_modules/esquery/dist/esquery.min.js": {
|
|
13535
13556
|
"bytesInOutput": 61887
|
|
@@ -13547,7 +13568,7 @@
|
|
|
13547
13568
|
"bytesInOutput": 7449
|
|
13548
13569
|
},
|
|
13549
13570
|
"node_modules/eslint/lib/rules/utils/lazy-loading-rule-map.js": {
|
|
13550
|
-
"bytesInOutput":
|
|
13571
|
+
"bytesInOutput": 2552
|
|
13551
13572
|
},
|
|
13552
13573
|
"node_modules/esutils/lib/ast.js": {
|
|
13553
13574
|
"bytesInOutput": 3324
|
|
@@ -14504,7 +14525,7 @@
|
|
|
14504
14525
|
"bytesInOutput": 17805
|
|
14505
14526
|
},
|
|
14506
14527
|
"node_modules/eslint/lib/linter/rules.js": {
|
|
14507
|
-
"bytesInOutput":
|
|
14528
|
+
"bytesInOutput": 1586
|
|
14508
14529
|
},
|
|
14509
14530
|
"node_modules/eslint/lib/linter/safe-emitter.js": {
|
|
14510
14531
|
"bytesInOutput": 733
|
|
@@ -14519,7 +14540,7 @@
|
|
|
14519
14540
|
"bytesInOutput": 1183
|
|
14520
14541
|
},
|
|
14521
14542
|
"node_modules/eslint/lib/config/flat-config-helpers.js": {
|
|
14522
|
-
"bytesInOutput":
|
|
14543
|
+
"bytesInOutput": 1671
|
|
14523
14544
|
},
|
|
14524
14545
|
"node_modules/@humanwhocodes/config-array/node_modules/brace-expansion/index.js": {
|
|
14525
14546
|
"bytesInOutput": 4605
|
|
@@ -14558,7 +14579,7 @@
|
|
|
14558
14579
|
"bytesInOutput": 928
|
|
14559
14580
|
},
|
|
14560
14581
|
"node_modules/eslint/lib/config/flat-config-schema.js": {
|
|
14561
|
-
"bytesInOutput":
|
|
14582
|
+
"bytesInOutput": 11313
|
|
14562
14583
|
},
|
|
14563
14584
|
"node_modules/ajv/lib/refs/json-schema-draft-04.json": {
|
|
14564
14585
|
"bytesInOutput": 4080
|
|
@@ -14567,7 +14588,7 @@
|
|
|
14567
14588
|
"bytesInOutput": 579
|
|
14568
14589
|
},
|
|
14569
14590
|
"node_modules/eslint/lib/config/rule-validator.js": {
|
|
14570
|
-
"bytesInOutput":
|
|
14591
|
+
"bytesInOutput": 3166
|
|
14571
14592
|
},
|
|
14572
14593
|
"node_modules/eslint/lib/config/default-config.js": {
|
|
14573
14594
|
"bytesInOutput": 1424
|
|
@@ -14576,7 +14597,7 @@
|
|
|
14576
14597
|
"bytesInOutput": 6248
|
|
14577
14598
|
},
|
|
14578
14599
|
"node_modules/eslint/lib/linter/linter.js": {
|
|
14579
|
-
"bytesInOutput":
|
|
14600
|
+
"bytesInOutput": 57039
|
|
14580
14601
|
},
|
|
14581
14602
|
"node_modules/eslint/lib/linter/index.js": {
|
|
14582
14603
|
"bytesInOutput": 372
|
|
@@ -14660,10 +14681,10 @@
|
|
|
14660
14681
|
"bytesInOutput": 5074
|
|
14661
14682
|
},
|
|
14662
14683
|
"node_modules/eslint/lib/cli-engine/cli-engine.js": {
|
|
14663
|
-
"bytesInOutput":
|
|
14684
|
+
"bytesInOutput": 23876
|
|
14664
14685
|
},
|
|
14665
14686
|
"node_modules/eslint/lib/eslint/eslint.js": {
|
|
14666
|
-
"bytesInOutput":
|
|
14687
|
+
"bytesInOutput": 19439
|
|
14667
14688
|
},
|
|
14668
14689
|
"node_modules/yocto-queue/index.js": {
|
|
14669
14690
|
"bytesInOutput": 1290
|
|
@@ -14771,7 +14792,7 @@
|
|
|
14771
14792
|
"bytesInOutput": 19448
|
|
14772
14793
|
},
|
|
14773
14794
|
"node_modules/eslint/lib/eslint/flat-eslint.js": {
|
|
14774
|
-
"bytesInOutput":
|
|
14795
|
+
"bytesInOutput": 25108
|
|
14775
14796
|
},
|
|
14776
14797
|
"node_modules/eslint/lib/eslint/index.js": {
|
|
14777
14798
|
"bytesInOutput": 274
|
|
@@ -14783,7 +14804,7 @@
|
|
|
14783
14804
|
"bytesInOutput": 940
|
|
14784
14805
|
},
|
|
14785
14806
|
"node_modules/eslint/lib/shared/config-validator.js": {
|
|
14786
|
-
"bytesInOutput":
|
|
14807
|
+
"bytesInOutput": 7251
|
|
14787
14808
|
},
|
|
14788
14809
|
"node_modules/eslint/lib/rule-tester/rule-tester.js": {
|
|
14789
14810
|
"bytesInOutput": 33184
|
|
@@ -14879,7 +14900,7 @@
|
|
|
14879
14900
|
"bytesInOutput": 205
|
|
14880
14901
|
},
|
|
14881
14902
|
"node_modules/eslint/lib/rule-tester/flat-rule-tester.js": {
|
|
14882
|
-
"bytesInOutput":
|
|
14903
|
+
"bytesInOutput": 31605
|
|
14883
14904
|
},
|
|
14884
14905
|
"node_modules/eslint/lib/unsupported-api.js": {
|
|
14885
14906
|
"bytesInOutput": 538
|
|
@@ -15401,7 +15422,7 @@
|
|
|
15401
15422
|
"bytesInOutput": 2218
|
|
15402
15423
|
},
|
|
15403
15424
|
"src/index.ts": {
|
|
15404
|
-
"bytesInOutput":
|
|
15425
|
+
"bytesInOutput": 2629
|
|
15405
15426
|
},
|
|
15406
15427
|
"src/ast/tree.ts": {
|
|
15407
15428
|
"bytesInOutput": 1648
|
|
@@ -15413,7 +15434,7 @@
|
|
|
15413
15434
|
"bytesInOutput": 2943
|
|
15414
15435
|
},
|
|
15415
15436
|
"src/get-documentation-url.ts": {
|
|
15416
|
-
"bytesInOutput":
|
|
15437
|
+
"bytesInOutput": 148
|
|
15417
15438
|
},
|
|
15418
15439
|
"src/fixture/fetch.ts": {
|
|
15419
15440
|
"bytesInOutput": 1206
|
|
@@ -15422,7 +15443,10 @@
|
|
|
15422
15443
|
"bytesInOutput": 2805
|
|
15423
15444
|
},
|
|
15424
15445
|
"src/fixture/fetch-response-body-json.ts": {
|
|
15425
|
-
"bytesInOutput":
|
|
15446
|
+
"bytesInOutput": 2305
|
|
15447
|
+
},
|
|
15448
|
+
"src/fixture/fetch-response-header-getter-ts.ts": {
|
|
15449
|
+
"bytesInOutput": 3322
|
|
15426
15450
|
},
|
|
15427
15451
|
"src/ast/format.ts": {
|
|
15428
15452
|
"bytesInOutput": 383
|
|
@@ -15431,7 +15455,7 @@
|
|
|
15431
15455
|
"bytesInOutput": 118
|
|
15432
15456
|
},
|
|
15433
15457
|
"src/fixture/url.ts": {
|
|
15434
|
-
"bytesInOutput":
|
|
15458
|
+
"bytesInOutput": 485
|
|
15435
15459
|
},
|
|
15436
15460
|
"src/fixture/fetch-then.ts": {
|
|
15437
15461
|
"bytesInOutput": 12296
|
|
@@ -15449,7 +15473,7 @@
|
|
|
15449
15473
|
"bytesInOutput": 1849
|
|
15450
15474
|
},
|
|
15451
15475
|
"src/fixture/no-service-wrapper.ts": {
|
|
15452
|
-
"bytesInOutput":
|
|
15476
|
+
"bytesInOutput": 8867
|
|
15453
15477
|
},
|
|
15454
15478
|
"src/fixture/no-status-code.ts": {
|
|
15455
15479
|
"bytesInOutput": 2034
|
|
@@ -15482,7 +15506,7 @@
|
|
|
15482
15506
|
"bytesInOutput": 3362
|
|
15483
15507
|
}
|
|
15484
15508
|
},
|
|
15485
|
-
"bytes":
|
|
15509
|
+
"bytes": 4307214
|
|
15486
15510
|
}
|
|
15487
15511
|
}
|
|
15488
15512
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/fixture/fetch-response-body-json.ts
|
|
2
|
-
import { ESLintUtils } from "@typescript-eslint/utils";
|
|
2
|
+
import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
|
|
3
3
|
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
4
4
|
var ruleId = "fetch-response-body-json";
|
|
5
5
|
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
@@ -30,11 +30,13 @@ var rule = createRule({
|
|
|
30
30
|
const shouldReplace = responseType.getProperties().some((symbol) => symbol.name === "body") && responseType.getProperties().some((symbol) => symbol.name === "json");
|
|
31
31
|
if (shouldReplace) {
|
|
32
32
|
const responseText = sourceCode.getText(responseBody.object);
|
|
33
|
+
const needAwait = responseBody.parent.type !== AST_NODE_TYPES.ReturnStatement;
|
|
34
|
+
const replacementText = needAwait ? `(await ${responseText}.json())` : `${responseText}.json()`;
|
|
33
35
|
context.report({
|
|
34
36
|
messageId: "replaceBodyWithJson",
|
|
35
37
|
node: responseBody,
|
|
36
38
|
fix(fixer) {
|
|
37
|
-
return fixer.replaceText(responseBody,
|
|
39
|
+
return fixer.replaceText(responseBody, replacementText);
|
|
38
40
|
}
|
|
39
41
|
});
|
|
40
42
|
}
|
|
@@ -58,4 +60,4 @@ export {
|
|
|
58
60
|
fetch_response_body_json_default as default,
|
|
59
61
|
ruleId
|
|
60
62
|
};
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2ZpeHR1cmUvZmV0Y2gtcmVzcG9uc2UtYm9keS1qc29uLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLFNBQVMsZ0JBQWdCLG1CQUE2QjtBQUN0RCxPQUFPLHlCQUF5QjtBQUV6QixJQUFNLFNBQVM7QUFFdEIsSUFBTSxhQUFhLFlBQVksWUFBWSxDQUFDLFNBQVMsb0JBQW9CLElBQUksQ0FBQztBQUU5RSxJQUFNLE9BQU8sV0FBVztBQUFBLEVBQ3RCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixxQkFBcUI7QUFBQSxNQUNyQixjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULFFBQVEsQ0FBQztBQUFBLEVBQ1g7QUFBQSxFQUNBLGdCQUFnQixDQUFDO0FBQUEsRUFDakIsT0FBTyxTQUFTO0FBQ2QsVUFBTSxpQkFBaUIsWUFBWSxrQkFBa0IsT0FBTztBQUM1RCxVQUFNLGNBQWMsZUFBZSxRQUFRLGVBQWU7QUFDMUQsVUFBTSxhQUFhLFFBQVE7QUFFM0IsV0FBTztBQUFBLE1BQ0wsMENBQTBDLENBQUMsaUJBQTRDO0FBQ3JGLFlBQUk7QUFDRixnQkFBTSxlQUFlLGVBQWUsc0JBQXNCLElBQUksYUFBYSxNQUFNO0FBQ2pGLGdCQUFNLGVBQWUsWUFBWSxrQkFBa0IsWUFBWTtBQUUvRCxnQkFBTSxnQkFDSixhQUFhLGNBQWMsRUFBRSxLQUFLLENBQUMsV0FBVyxPQUFPLFNBQVMsTUFBTSxLQUNwRSxhQUFhLGNBQWMsRUFBRSxLQUFLLENBQUMsV0FBVyxPQUFPLFNBQVMsTUFBTTtBQUV0RSxjQUFJLGVBQWU7QUFDakIsa0JBQU0sZUFBZSxXQUFXLFFBQVEsYUFBYSxNQUFNO0FBQzNELGtCQUFNLFlBQVksYUFBYSxPQUFPLFNBQVMsZUFBZTtBQUM5RCxrQkFBTSxrQkFBa0IsWUFBWSxVQUFVLFlBQVksYUFBYSxHQUFHLFlBQVk7QUFFdEYsb0JBQVEsT0FBTztBQUFBLGNBQ2IsV0FBVztBQUFBLGNBQ1gsTUFBTTtBQUFBLGNBQ04sSUFBSSxPQUFPO0FBQ1QsdUJBQU8sTUFBTSxZQUFZLGNBQWMsZUFBZTtBQUFBLGNBQ3hEO0FBQUEsWUFDRixDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0YsU0FBUyxPQUFPO0FBRWQsa0JBQVEsTUFBTSxtQkFBbUIsTUFBTSxtQkFBbUIsUUFBUSxRQUFRLE1BQU0sS0FBSztBQUNyRixrQkFBUSxPQUFPO0FBQUEsWUFDYixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsWUFDWCxNQUFNO0FBQUEsY0FDSixVQUFVLFFBQVE7QUFBQSxjQUNsQixPQUFPLGlCQUFpQixRQUFRLE1BQU0sU0FBUyxJQUFJLEtBQUssVUFBVSxLQUFLO0FBQUEsWUFDekU7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sbUNBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// src/fixture/fetch-response-header-getter-ts.ts
|
|
2
|
+
import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
|
|
3
|
+
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
4
|
+
var ruleId = "fetch-response-header-getter-ts";
|
|
5
|
+
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
6
|
+
var rule = createRule({
|
|
7
|
+
name: ruleId,
|
|
8
|
+
meta: {
|
|
9
|
+
type: "suggestion",
|
|
10
|
+
docs: {
|
|
11
|
+
description: 'Use "get()" method to get header value from the headers object of the fetch response.'
|
|
12
|
+
},
|
|
13
|
+
messages: {
|
|
14
|
+
useGetter: 'Use "get()" method to get header value from the headers object of the fetch response.',
|
|
15
|
+
unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.'
|
|
16
|
+
},
|
|
17
|
+
fixable: "code",
|
|
18
|
+
schema: []
|
|
19
|
+
},
|
|
20
|
+
defaultOptions: [],
|
|
21
|
+
create(context) {
|
|
22
|
+
const parserServices = ESLintUtils.getParserServices(context);
|
|
23
|
+
const typeChecker = parserServices.program.getTypeChecker();
|
|
24
|
+
const sourceCode = context.sourceCode;
|
|
25
|
+
return {
|
|
26
|
+
'MemberExpression[object.property.name="headers"]': (responseHeadersAccess) => {
|
|
27
|
+
try {
|
|
28
|
+
if (responseHeadersAccess.property.type === AST_NODE_TYPES.Identifier && responseHeadersAccess.property.name === "get") {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const responseHeadersTsNode = parserServices.esTreeNodeToTSNodeMap.get(responseHeadersAccess.object);
|
|
32
|
+
const responseType = typeChecker.getTypeAtLocation(responseHeadersTsNode);
|
|
33
|
+
const shouldReplace = responseType.getProperties().some((symbol) => symbol.name === "get");
|
|
34
|
+
if (!shouldReplace) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
let replacementText;
|
|
38
|
+
if (responseHeadersAccess.property.type === AST_NODE_TYPES.Identifier) {
|
|
39
|
+
replacementText = `${sourceCode.getText(responseHeadersAccess.object)}.get(${sourceCode.getText(responseHeadersAccess.property)})`;
|
|
40
|
+
} else if (responseHeadersAccess.property.type === AST_NODE_TYPES.TemplateLiteral) {
|
|
41
|
+
replacementText = `${sourceCode.getText(responseHeadersAccess.object)}.get(${sourceCode.getText(responseHeadersAccess.property)})`;
|
|
42
|
+
} else if (responseHeadersAccess.property.type === AST_NODE_TYPES.Literal) {
|
|
43
|
+
replacementText = responseHeadersAccess.computed ? `${sourceCode.getText(responseHeadersAccess.object)}.get(${sourceCode.getText(responseHeadersAccess.property)})` : `${sourceCode.getText(responseHeadersAccess.object)}.get('${sourceCode.getText(responseHeadersAccess.property)}')`;
|
|
44
|
+
} else {
|
|
45
|
+
throw new Error(`Unexpected property type: ${responseHeadersAccess.property.type}`);
|
|
46
|
+
}
|
|
47
|
+
context.report({
|
|
48
|
+
messageId: "useGetter",
|
|
49
|
+
node: responseHeadersAccess.property,
|
|
50
|
+
fix(fixer) {
|
|
51
|
+
return fixer.replaceText(responseHeadersAccess, replacementText);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
} catch (error) {
|
|
55
|
+
console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
|
|
56
|
+
context.report({
|
|
57
|
+
node: responseHeadersAccess,
|
|
58
|
+
messageId: "unknownError",
|
|
59
|
+
data: {
|
|
60
|
+
fileName: context.filename,
|
|
61
|
+
error: error instanceof Error ? error.toString() : JSON.stringify(error)
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
var fetch_response_header_getter_ts_default = rule;
|
|
70
|
+
export {
|
|
71
|
+
fetch_response_header_getter_ts_default as default,
|
|
72
|
+
ruleId
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2ZpeHR1cmUvZmV0Y2gtcmVzcG9uc2UtaGVhZGVyLWdldHRlci10cy50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLGdCQUFnQixtQkFBNkI7QUFDdEQsT0FBTyx5QkFBeUI7QUFFekIsSUFBTSxTQUFTO0FBRXRCLElBQU0sYUFBYSxZQUFZLFlBQVksQ0FBQyxTQUFTLG9CQUFvQixJQUFJLENBQUM7QUFFOUUsSUFBTSxPQUFPLFdBQVc7QUFBQSxFQUN0QixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsV0FBVztBQUFBLE1BQ1gsY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxRQUFRLENBQUM7QUFBQSxFQUNYO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLFVBQU0saUJBQWlCLFlBQVksa0JBQWtCLE9BQU87QUFDNUQsVUFBTSxjQUFjLGVBQWUsUUFBUSxlQUFlO0FBQzFELFVBQU0sYUFBYSxRQUFRO0FBRTNCLFdBQU87QUFBQSxNQUNMLG9EQUFvRCxDQUFDLDBCQUFxRDtBQUN4RyxZQUFJO0FBQ0YsY0FDRSxzQkFBc0IsU0FBUyxTQUFTLGVBQWUsY0FDdkQsc0JBQXNCLFNBQVMsU0FBUyxPQUN4QztBQUVBO0FBQUEsVUFDRjtBQUVBLGdCQUFNLHdCQUF3QixlQUFlLHNCQUFzQixJQUFJLHNCQUFzQixNQUFNO0FBQ25HLGdCQUFNLGVBQWUsWUFBWSxrQkFBa0IscUJBQXFCO0FBRXhFLGdCQUFNLGdCQUFnQixhQUFhLGNBQWMsRUFBRSxLQUFLLENBQUMsV0FBVyxPQUFPLFNBQVMsS0FBSztBQUN6RixjQUFJLENBQUMsZUFBZTtBQUNsQjtBQUFBLFVBQ0Y7QUFNQSxjQUFJO0FBQ0osY0FBSSxzQkFBc0IsU0FBUyxTQUFTLGVBQWUsWUFBWTtBQUNyRSw4QkFBa0IsR0FBRyxXQUFXLFFBQVEsc0JBQXNCLE1BQU0sQ0FBQyxRQUFRLFdBQVcsUUFBUSxzQkFBc0IsUUFBUSxDQUFDO0FBQUEsVUFDakksV0FBVyxzQkFBc0IsU0FBUyxTQUFTLGVBQWUsaUJBQWlCO0FBQ2pGLDhCQUFrQixHQUFHLFdBQVcsUUFBUSxzQkFBc0IsTUFBTSxDQUFDLFFBQVEsV0FBVyxRQUFRLHNCQUFzQixRQUFRLENBQUM7QUFBQSxVQUNqSSxXQUFXLHNCQUFzQixTQUFTLFNBQVMsZUFBZSxTQUFTO0FBQ3pFLDhCQUFrQixzQkFBc0IsV0FDcEMsR0FBRyxXQUFXLFFBQVEsc0JBQXNCLE1BQU0sQ0FBQyxRQUFRLFdBQVcsUUFBUSxzQkFBc0IsUUFBUSxDQUFDLE1BQzdHLEdBQUcsV0FBVyxRQUFRLHNCQUFzQixNQUFNLENBQUMsU0FBUyxXQUFXLFFBQVEsc0JBQXNCLFFBQVEsQ0FBQztBQUFBLFVBQ3BILE9BQU87QUFDTCxrQkFBTSxJQUFJLE1BQU0sNkJBQTZCLHNCQUFzQixTQUFTLElBQUksRUFBRTtBQUFBLFVBQ3BGO0FBRUEsa0JBQVEsT0FBTztBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsTUFBTSxzQkFBc0I7QUFBQSxZQUM1QixJQUFJLE9BQU87QUFDVCxxQkFBTyxNQUFNLFlBQVksdUJBQXVCLGVBQWU7QUFBQSxZQUNqRTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0gsU0FBUyxPQUFPO0FBRWQsa0JBQVEsTUFBTSxtQkFBbUIsTUFBTSxtQkFBbUIsUUFBUSxRQUFRLE1BQU0sS0FBSztBQUNyRixrQkFBUSxPQUFPO0FBQUEsWUFDYixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsWUFDWCxNQUFNO0FBQUEsY0FDSixVQUFVLFFBQVE7QUFBQSxjQUNsQixPQUFPLGlCQUFpQixRQUFRLE1BQU0sU0FBUyxJQUFJLEtBQUssVUFBVSxLQUFLO0FBQUEsWUFDekU7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sMENBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -118,7 +118,10 @@ var rule = createRule({
|
|
|
118
118
|
assert.ok(serviceCall.callee.type === AST_NODE_TYPES.MemberExpression);
|
|
119
119
|
assert.ok(serviceCall.callee.property.type === AST_NODE_TYPES.Identifier);
|
|
120
120
|
const method = serviceCall.callee.property.name;
|
|
121
|
-
|
|
121
|
+
let requestBodyProperty = ["put", "post", "options"].includes(method) ? serviceCall.arguments[1] : void 0;
|
|
122
|
+
if (requestBodyProperty !== void 0 && requestBodyProperty.type === AST_NODE_TYPES.Identifier && requestBodyProperty.name === "undefined") {
|
|
123
|
+
requestBodyProperty = void 0;
|
|
124
|
+
}
|
|
122
125
|
const optionsArgument = ["get", "head", "del"].includes(method) ? serviceCall.arguments[1] : serviceCall.arguments[2];
|
|
123
126
|
if (optionsArgument === void 0 || optionsArgument.type !== AST_NODE_TYPES.ObjectExpression) {
|
|
124
127
|
context.report({
|
|
@@ -178,4 +181,4 @@ export {
|
|
|
178
181
|
no_service_wrapper_default as default,
|
|
179
182
|
ruleId
|
|
180
183
|
};
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2ZpeHR1cmUvbm8tc2VydmljZS13cmFwcGVyLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLFNBQVMsZ0JBQWdCLG1CQUE2QjtBQUN0RCxTQUFTLHNCQUFrQztBQUMzQyxTQUFTLGtCQUFrQixzQkFBc0IsMENBQTBDO0FBQzNGLFNBQVMsVUFBVSxjQUFjO0FBQ2pDLE9BQU8seUJBQXlCO0FBQ2hDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsc0JBQXNCO0FBRXhCLElBQU0sU0FBUztBQUV0QixJQUFNLGFBQWEsWUFBWSxZQUFZLENBQUMsU0FBUyxvQkFBb0IsSUFBSSxDQUFDO0FBRTlFLElBQU0sT0FBTyxXQUFXO0FBQUEsRUFDdEIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLG1CQUFtQjtBQUFBLE1BQ25CLGdCQUNFO0FBQUEsTUFDRixjQUNFO0FBQUEsSUFDSjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1QsUUFBUSxDQUFDO0FBQUEsRUFDWDtBQUFBLEVBQ0EsZ0JBQWdCLENBQUM7QUFBQSxFQUNqQixPQUFPLFNBQVM7QUFDZCxVQUFNLGFBQWEsUUFBUTtBQUMzQixVQUFNLGVBQWUsV0FBVztBQUNoQyxVQUFNLGdCQUFnQixZQUFZLGtCQUFrQixPQUFPO0FBQzNELFVBQU0sY0FBYyxjQUFjLFFBQVEsZUFBZTtBQUV6RCxhQUFTLG1CQUFtQixhQUF3QyxPQUFjO0FBQ2hGLFVBQ0csYUFBYSxTQUFTLGVBQWUsV0FBVyxPQUFPLFlBQVksVUFBVSxZQUM5RSxhQUFhLFNBQVMsZUFBZSxpQkFDckM7QUFDQSxjQUFNLFVBQVUsV0FBVyxRQUFRLFdBQVc7QUFDOUMsZUFBTyxpQkFBaUIsS0FBSyxPQUFPLEtBQUsscUJBQXFCLEtBQUssT0FBTztBQUFBLE1BQzVFO0FBRUEsVUFBSSxhQUFhLFNBQVMs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
|
package/dist-mjs/fixture/url.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/fixture/url.ts
|
|
2
|
-
var PLAIN_URL_REGEXP = /^[`']\/\w+(?<serviceNamePart>-\w+)*\/v\d
|
|
3
|
-
var TOKENIZED_URL_REGEXP = /^`\$\{(?<serviceNamePart>[A-Z]+_)*BASE_PATH\}
|
|
2
|
+
var PLAIN_URL_REGEXP = /^[`']\/\w+(?<serviceNamePart>-\w+)*\/v\d+\/(?<any>.|\r|\n)+[`']$/u;
|
|
3
|
+
var TOKENIZED_URL_REGEXP = /^`\$\{(?<serviceNamePart>[A-Z]+_)*BASE_PATH\}\/(?<any>.|\r|\n)+`$/u;
|
|
4
4
|
function replaceEndpointUrlPrefixWithBasePath(url) {
|
|
5
5
|
return url.replace(/^`\/\w+(?<parts>-\w+)*\/v\d+\//u, "`${BASE_PATH}/");
|
|
6
6
|
}
|
package/dist-mjs/index.mjs
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
import fetchHeaderGetter, { ruleId as fetchHeaderGetterRuleId } from "./fixture/fetch-header-getter.mjs";
|
|
3
3
|
import fetchResponseBodyJson, { ruleId as fetchResponseBodyJsonRuleId } from "./fixture/fetch-response-body-json.mjs";
|
|
4
|
+
import fetchResponseHeaderGetterTs, {
|
|
5
|
+
ruleId as fetchResponseHeaderGetterTsRuleId
|
|
6
|
+
} from "./fixture/fetch-response-header-getter-ts.mjs";
|
|
4
7
|
import fetchThen, { ruleId as fetchThenRuleId } from "./fixture/fetch-then.mjs";
|
|
5
8
|
import invalidJsonStringify, { ruleId as invalidJsonStringifyRuleId } from "./invalid-json-stringify.mjs";
|
|
6
9
|
import noFixture, { ruleId as noFixtureRuleId } from "./fixture/no-fixture.mjs";
|
|
@@ -34,7 +37,8 @@ var src_default = {
|
|
|
34
37
|
[fetchThenRuleId]: fetchThen,
|
|
35
38
|
[noServiceWrapperRuleId]: noServiceWrapper,
|
|
36
39
|
[noStatusCodeRuleId]: noStatusCode,
|
|
37
|
-
[fetchResponseBodyJsonRuleId]: fetchResponseBodyJson
|
|
40
|
+
[fetchResponseBodyJsonRuleId]: fetchResponseBodyJson,
|
|
41
|
+
[fetchResponseHeaderGetterTsRuleId]: fetchResponseHeaderGetterTs
|
|
38
42
|
},
|
|
39
43
|
configs: {
|
|
40
44
|
all: {
|
|
@@ -55,7 +59,8 @@ var src_default = {
|
|
|
55
59
|
[`@checkdigit/${fetchThenRuleId}`]: "error",
|
|
56
60
|
[`@checkdigit/${noServiceWrapperRuleId}`]: "error",
|
|
57
61
|
[`@checkdigit/${noStatusCodeRuleId}`]: "error",
|
|
58
|
-
[`@checkdigit/${fetchResponseBodyJsonRuleId}`]: "error"
|
|
62
|
+
[`@checkdigit/${fetchResponseBodyJsonRuleId}`]: "error",
|
|
63
|
+
[`@checkdigit/${fetchResponseHeaderGetterTsRuleId}`]: "error"
|
|
59
64
|
}
|
|
60
65
|
},
|
|
61
66
|
recommended: {
|
|
@@ -78,4 +83,4 @@ var src_default = {
|
|
|
78
83
|
export {
|
|
79
84
|
src_default as default
|
|
80
85
|
};
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,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
|
package/dist-types/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ declare const _default: {
|
|
|
17
17
|
"no-service-wrapper": import("@typescript-eslint/utils/ts-eslint").RuleModule<"unknownError" | "preferNativeFetch" | "invalidOptions", never[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
18
18
|
"no-status-code": import("@typescript-eslint/utils/ts-eslint").RuleModule<"unknownError" | "replaceStatusCode", never[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
19
19
|
"fetch-response-body-json": import("@typescript-eslint/utils/ts-eslint").RuleModule<"replaceBodyWithJson" | "unknownError", never[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
20
|
+
"fetch-response-header-getter-ts": import("@typescript-eslint/utils/ts-eslint").RuleModule<"unknownError" | "useGetter", never[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
20
21
|
};
|
|
21
22
|
configs: {
|
|
22
23
|
all: {
|
|
@@ -38,6 +39,7 @@ declare const _default: {
|
|
|
38
39
|
"@checkdigit/no-service-wrapper": string;
|
|
39
40
|
"@checkdigit/no-status-code": string;
|
|
40
41
|
"@checkdigit/fetch-response-body-json": string;
|
|
42
|
+
"@checkdigit/fetch-response-header-getter-ts": string;
|
|
41
43
|
};
|
|
42
44
|
};
|
|
43
45
|
recommended: {
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@checkdigit/eslint-plugin","version":"6.6.0-PR.75-
|
|
1
|
+
{"name":"@checkdigit/eslint-plugin","version":"6.6.0-PR.75-0869","description":"Check Digit eslint plugins","keywords":["eslint","eslintplugin"],"homepage":"https://github.com/checkdigit/eslint-plugin#readme","bugs":{"url":"https://github.com/checkdigit/eslint-plugin/issues"},"repository":{"type":"git","url":"https://github.com/checkdigit/eslint-plugin"},"license":"MIT","author":"Check Digit, LLC","sideEffects":false,"type":"module","exports":{".":{"types":"./dist-types/index.d.ts","require":"./dist-cjs/index.cjs","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"files":["src","dist-types","dist-cjs","dist-mjs","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-cjs/**/*.test.cjs","!dist-cjs/**/*.spec.cjs","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"],"scripts":{"build:dist-cjs":"rimraf dist-cjs && npx builder --type=commonjs --sourceMap --entryPoint=index.ts --outDir=dist-cjs --outFile=index.cjs --external=espree && echo \"module.exports = module.exports.default;\" >> dist-cjs/index.cjs","build:dist-mjs":"rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs","build:dist-types":"rimraf dist-types && npx builder --type=types --outDir=dist-types","ci:compile":"tsc --noEmit","ci:coverage":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true","ci:lint":"npm run lint","ci:style":"npm run prettier","ci:test":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false","lint":"eslint --max-warnings 0 --ignore-path .gitignore .","lint:fix":"eslint --ignore-path .gitignore . --fix","prepublishOnly":"npm run build:dist-types && npm run build:dist-cjs && npm run build:dist-mjs","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"},"prettier":"@checkdigit/prettier-config","jest":{"preset":"@checkdigit/jest-config"},"dependencies":{"@typescript-eslint/type-utils":"7.18.0","@typescript-eslint/utils":"7.18.0","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"},"peerDependencies":{"eslint":">=8 <9"},"engines":{"node":">=20.14"}}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* This code is licensed under the MIT license (see LICENSE.txt for details).
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';
|
|
9
|
+
import { AST_NODE_TYPES, ESLintUtils, TSESTree } from '@typescript-eslint/utils';
|
|
10
10
|
import getDocumentationUrl from '../get-documentation-url';
|
|
11
11
|
|
|
12
12
|
export const ruleId = 'fetch-response-body-json';
|
|
@@ -45,11 +45,14 @@ const rule = createRule({
|
|
|
45
45
|
|
|
46
46
|
if (shouldReplace) {
|
|
47
47
|
const responseText = sourceCode.getText(responseBody.object);
|
|
48
|
+
const needAwait = responseBody.parent.type !== AST_NODE_TYPES.ReturnStatement;
|
|
49
|
+
const replacementText = needAwait ? `(await ${responseText}.json())` : `${responseText}.json()`;
|
|
50
|
+
|
|
48
51
|
context.report({
|
|
49
52
|
messageId: 'replaceBodyWithJson',
|
|
50
53
|
node: responseBody,
|
|
51
54
|
fix(fixer) {
|
|
52
|
-
return fixer.replaceText(responseBody,
|
|
55
|
+
return fixer.replaceText(responseBody, replacementText);
|
|
53
56
|
},
|
|
54
57
|
});
|
|
55
58
|
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// fixture/fetch-response-header-getter-ts.ts
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2021-2024 Check Digit, LLC
|
|
5
|
+
*
|
|
6
|
+
* This code is licensed under the MIT license (see LICENSE.txt for details).
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { AST_NODE_TYPES, ESLintUtils, TSESTree } from '@typescript-eslint/utils';
|
|
10
|
+
import getDocumentationUrl from '../get-documentation-url';
|
|
11
|
+
|
|
12
|
+
export const ruleId = 'fetch-response-header-getter-ts';
|
|
13
|
+
|
|
14
|
+
const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
15
|
+
|
|
16
|
+
const rule = createRule({
|
|
17
|
+
name: ruleId,
|
|
18
|
+
meta: {
|
|
19
|
+
type: 'suggestion',
|
|
20
|
+
docs: {
|
|
21
|
+
description: 'Use "get()" method to get header value from the headers object of the fetch response.',
|
|
22
|
+
},
|
|
23
|
+
messages: {
|
|
24
|
+
useGetter: 'Use "get()" method to get header value from the headers object of the fetch response.',
|
|
25
|
+
unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.',
|
|
26
|
+
},
|
|
27
|
+
fixable: 'code',
|
|
28
|
+
schema: [],
|
|
29
|
+
},
|
|
30
|
+
defaultOptions: [],
|
|
31
|
+
create(context) {
|
|
32
|
+
const parserServices = ESLintUtils.getParserServices(context);
|
|
33
|
+
const typeChecker = parserServices.program.getTypeChecker();
|
|
34
|
+
const sourceCode = context.sourceCode;
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
'MemberExpression[object.property.name="headers"]': (responseHeadersAccess: TSESTree.MemberExpression) => {
|
|
38
|
+
try {
|
|
39
|
+
if (
|
|
40
|
+
responseHeadersAccess.property.type === AST_NODE_TYPES.Identifier &&
|
|
41
|
+
responseHeadersAccess.property.name === 'get'
|
|
42
|
+
) {
|
|
43
|
+
// getter is already being used
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const responseHeadersTsNode = parserServices.esTreeNodeToTSNodeMap.get(responseHeadersAccess.object);
|
|
48
|
+
const responseType = typeChecker.getTypeAtLocation(responseHeadersTsNode);
|
|
49
|
+
|
|
50
|
+
const shouldReplace = responseType.getProperties().some((symbol) => symbol.name === 'get');
|
|
51
|
+
if (!shouldReplace) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// let replacementText = 'xxx';
|
|
56
|
+
// if (responseHeadersAccess.property.type === AST_NODE_TYPES.Identifier) {
|
|
57
|
+
// replacementText = `${sourceCode.getText(responseHeadersAccess.object)}.get(${sourceCode.getText(responseHeadersAccess.property)})`;
|
|
58
|
+
// }
|
|
59
|
+
let replacementText: string;
|
|
60
|
+
if (responseHeadersAccess.property.type === AST_NODE_TYPES.Identifier) {
|
|
61
|
+
replacementText = `${sourceCode.getText(responseHeadersAccess.object)}.get(${sourceCode.getText(responseHeadersAccess.property)})`;
|
|
62
|
+
} else if (responseHeadersAccess.property.type === AST_NODE_TYPES.TemplateLiteral) {
|
|
63
|
+
replacementText = `${sourceCode.getText(responseHeadersAccess.object)}.get(${sourceCode.getText(responseHeadersAccess.property)})`;
|
|
64
|
+
} else if (responseHeadersAccess.property.type === AST_NODE_TYPES.Literal) {
|
|
65
|
+
replacementText = responseHeadersAccess.computed
|
|
66
|
+
? `${sourceCode.getText(responseHeadersAccess.object)}.get(${sourceCode.getText(responseHeadersAccess.property)})`
|
|
67
|
+
: `${sourceCode.getText(responseHeadersAccess.object)}.get('${sourceCode.getText(responseHeadersAccess.property)}')`;
|
|
68
|
+
} else {
|
|
69
|
+
throw new Error(`Unexpected property type: ${responseHeadersAccess.property.type}`);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
context.report({
|
|
73
|
+
messageId: 'useGetter',
|
|
74
|
+
node: responseHeadersAccess.property,
|
|
75
|
+
fix(fixer) {
|
|
76
|
+
return fixer.replaceText(responseHeadersAccess, replacementText);
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
} catch (error) {
|
|
80
|
+
// eslint-disable-next-line no-console
|
|
81
|
+
console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
|
|
82
|
+
context.report({
|
|
83
|
+
node: responseHeadersAccess,
|
|
84
|
+
messageId: 'unknownError',
|
|
85
|
+
data: {
|
|
86
|
+
fileName: context.filename,
|
|
87
|
+
error: error instanceof Error ? error.toString() : JSON.stringify(error),
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
export default rule;
|
|
@@ -157,10 +157,14 @@ const rule = createRule({
|
|
|
157
157
|
const method = serviceCall.callee.property.name;
|
|
158
158
|
|
|
159
159
|
// body
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
160
|
+
let requestBodyProperty = ['put', 'post', 'options'].includes(method) ? serviceCall.arguments[1] : undefined;
|
|
161
|
+
if (
|
|
162
|
+
requestBodyProperty !== undefined &&
|
|
163
|
+
requestBodyProperty.type === AST_NODE_TYPES.Identifier &&
|
|
164
|
+
requestBodyProperty.name === 'undefined'
|
|
165
|
+
) {
|
|
166
|
+
requestBodyProperty = undefined;
|
|
167
|
+
}
|
|
164
168
|
// options
|
|
165
169
|
const optionsArgument = ['get', 'head', 'del'].includes(method)
|
|
166
170
|
? serviceCall.arguments[1]
|
package/src/fixture/url.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// fixture/url.ts
|
|
2
2
|
|
|
3
|
-
export const PLAIN_URL_REGEXP = /^[`']\/\w+(?<serviceNamePart>-\w+)*\/v\d
|
|
4
|
-
export const TOKENIZED_URL_REGEXP = /^`\$\{(?<serviceNamePart>[A-Z]+_)*BASE_PATH\}
|
|
3
|
+
export const PLAIN_URL_REGEXP = /^[`']\/\w+(?<serviceNamePart>-\w+)*\/v\d+\/(?<any>.|\r|\n)+[`']$/u;
|
|
4
|
+
export const TOKENIZED_URL_REGEXP = /^`\$\{(?<serviceNamePart>[A-Z]+_)*BASE_PATH\}\/(?<any>.|\r|\n)+`$/u;
|
|
5
5
|
|
|
6
6
|
export function replaceEndpointUrlPrefixWithBasePath(url: string) {
|
|
7
7
|
// eslint-disable-next-line no-template-curly-in-string
|