eslint-plugin-sonarjs 4.0.1 → 4.0.2
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/README.md +1 -1
- package/cjs/S100/rule.js +7 -5
- package/cjs/S101/rule.js +2 -2
- package/cjs/S104/rule.js +2 -2
- package/cjs/S105/rule.js +2 -2
- package/cjs/S1066/rule.js +5 -4
- package/cjs/S1067/rule.js +8 -6
- package/cjs/S1110/rule.js +7 -5
- package/cjs/S1119/rule.js +2 -2
- package/cjs/S1121/rule.js +4 -3
- package/cjs/S1125/rule.js +9 -8
- package/cjs/S1126/rule.js +2 -2
- package/cjs/S1128/rule.js +8 -5
- package/cjs/S1134/rule.js +2 -2
- package/cjs/S1135/rule.js +2 -2
- package/cjs/S1154/rule.js +6 -4
- package/cjs/S117/rule.js +6 -5
- package/cjs/S1172/rule.js +2 -2
- package/cjs/S1192/rule.js +5 -4
- package/cjs/S1219/rule.js +4 -3
- package/cjs/S1226/rule.js +6 -4
- package/cjs/S124/rule.js +2 -2
- package/cjs/S125/rule.js +9 -7
- package/cjs/S126/rule.js +2 -2
- package/cjs/S1264/rule.js +2 -2
- package/cjs/S128/rule.js +4 -3
- package/cjs/S1291/rule.js +2 -2
- package/cjs/S1301/rule.js +2 -2
- package/cjs/S1313/rule.js +2 -2
- package/cjs/S134/rule.js +7 -5
- package/cjs/S135/rule.js +5 -4
- package/cjs/S138/rule.js +9 -6
- package/cjs/S1439/rule.js +2 -2
- package/cjs/S1444/rule.js +2 -2
- package/cjs/S1451/rule.js +2 -2
- package/cjs/S1472/rule.js +2 -2
- package/cjs/S1479/rule.js +2 -2
- package/cjs/S1481/rule.js +2 -2
- package/cjs/S1488/rule.js +11 -7
- package/cjs/S1515/rule.js +10 -8
- package/cjs/S1523/rule.js +5 -5
- package/cjs/S1526/rule.js +5 -4
- package/cjs/S1527/rule.js +2 -2
- package/cjs/S1528/rule.js +2 -2
- package/cjs/S1529/rule.js +4 -3
- package/cjs/S1530/rule.js +5 -3
- package/cjs/S1533/rule.js +2 -2
- package/cjs/S1535/rule.js +2 -2
- package/cjs/S1541/rule.js +10 -7
- package/cjs/S1607/rule.js +22 -20
- package/cjs/S1764/rule.js +10 -7
- package/cjs/S1821/rule.js +2 -2
- package/cjs/S1848/rule.js +10 -7
- package/cjs/S1854/rule.js +18 -14
- package/cjs/S1862/rule.js +10 -8
- package/cjs/S1871/rule.js +21 -16
- package/cjs/S1874/rule.js +4 -3
- package/cjs/S1940/rule.js +2 -2
- package/cjs/S1994/rule.js +10 -7
- package/cjs/S2004/rule.js +9 -7
- package/cjs/S2068/rule.js +75 -12
- package/cjs/S2077/rule.js +10 -6
- package/cjs/S2092/rule.js +2 -2
- package/cjs/S2123/rule.js +2 -2
- package/cjs/S2137/rule.js +2 -2
- package/cjs/S2138/rule.js +4 -3
- package/cjs/S2187/rule.js +2 -2
- package/cjs/S2201/rule.js +8 -5
- package/cjs/S2208/rule.js +2 -2
- package/cjs/S2234/rule.js +15 -11
- package/cjs/S2245/rule.js +4 -3
- package/cjs/S2251/rule.js +5 -4
- package/cjs/S2255/rule.js +6 -5
- package/cjs/S2259/rule.js +14 -9
- package/cjs/S2301/rule.js +14 -9
- package/cjs/S2310/rule.js +14 -11
- package/cjs/S2392/rule.js +7 -5
- package/cjs/S2424/rule.js +2 -2
- package/cjs/S2428/rule.js +8 -6
- package/cjs/S2486/rule.js +4 -3
- package/cjs/S2589/rule.js +12 -10
- package/cjs/S2598/rule.js +17 -14
- package/cjs/S2612/generated-meta.js +1 -1
- package/cjs/S2612/rule.js +8 -6
- package/cjs/S2639/rule.js +2 -2
- package/cjs/S2681/rule.js +2 -2
- package/cjs/S2692/rule.js +6 -4
- package/cjs/S2699/rule.js +40 -31
- package/cjs/S2703/rule.js +2 -2
- package/cjs/S2737/rule.js +6 -4
- package/cjs/S2755/rule.js +9 -6
- package/cjs/S2757/rule.js +2 -2
- package/cjs/S2817/rule.js +10 -7
- package/cjs/S2819/rule.js +16 -12
- package/cjs/S2870/rule.js +8 -5
- package/cjs/S2871/rule.js +12 -9
- package/cjs/S2970/rule.js +9 -8
- package/cjs/S2990/rule.js +2 -2
- package/cjs/S2999/rule.js +10 -7
- package/cjs/S3001/rule.js +2 -2
- package/cjs/S3003/rule.js +10 -7
- package/cjs/S3317/rule.js +4 -3
- package/cjs/S3330/rule.js +2 -2
- package/cjs/S3358/rule.js +2 -2
- package/cjs/S3402/rule.js +14 -10
- package/cjs/S3403/rule.js +10 -7
- package/cjs/S3415/rule.js +16 -13
- package/cjs/S3499/rule.js +5 -4
- package/cjs/S3500/rule.js +5 -4
- package/cjs/S3513/rule.js +5 -4
- package/cjs/S3514/rule.js +10 -7
- package/cjs/S3516/rule.js +10 -7
- package/cjs/S3524/rule.js +2 -2
- package/cjs/S3525/rule.js +6 -4
- package/cjs/S3531/rule.js +5 -3
- package/cjs/S3533/rule.js +8 -7
- package/cjs/S3579/rule.js +6 -4
- package/cjs/S3616/rule.js +6 -4
- package/cjs/S3626/rule.js +4 -3
- package/cjs/S3686/rule.js +7 -5
- package/cjs/S3699/rule.js +4 -3
- package/cjs/S3735/rule.js +8 -5
- package/cjs/S3757/rule.js +8 -6
- package/cjs/S3758/rule.js +9 -7
- package/cjs/S3760/rule.js +24 -21
- package/cjs/S3776/rule.js +26 -22
- package/cjs/S3782/rule.js +6 -4
- package/cjs/S3785/rule.js +9 -6
- package/cjs/S3796/rule.js +12 -8
- package/cjs/S3798/rule.js +4 -3
- package/cjs/S3800/rule.js +16 -11
- package/cjs/S3801/rule.js +15 -11
- package/cjs/S3827/rule.js +9 -6
- package/cjs/S3923/rule.js +9 -6
- package/cjs/S3972/rule.js +5 -4
- package/cjs/S3973/rule.js +7 -5
- package/cjs/S3981/rule.js +4 -3
- package/cjs/S3984/rule.js +4 -3
- package/cjs/S4030/rule.js +10 -7
- package/cjs/S4036/rule.js +7 -5
- package/cjs/S4043/rule.js +12 -8
- package/cjs/S4139/rule.js +7 -5
- package/cjs/S4143/rule.js +12 -9
- package/cjs/S4144/rule.js +12 -9
- package/cjs/S4158/rule.js +11 -8
- package/cjs/S4165/rule.js +14 -12
- package/cjs/S4322/rule.js +8 -5
- package/cjs/S4323/rule.js +4 -3
- package/cjs/S4324/rule.js +7 -5
- package/cjs/S4328/rule.js +2 -2
- package/cjs/S4335/rule.js +6 -4
- package/cjs/S4423/rule.js +4 -3
- package/cjs/S4423/rule.lib.js +8 -7
- package/cjs/S4426/rule.js +11 -10
- package/cjs/S4502/rule.js +16 -13
- package/cjs/S4507/rule.js +8 -6
- package/cjs/S4524/rule.js +2 -2
- package/cjs/S4619/rule.js +6 -4
- package/cjs/S4621/rule.js +5 -4
- package/cjs/S4622/rule.js +5 -3
- package/cjs/S4623/rule.js +8 -5
- package/cjs/S4624/rule.js +6 -4
- package/cjs/S4634/rule.js +4 -3
- package/cjs/S4721/rule.js +7 -5
- package/cjs/S4782/rule.js +7 -5
- package/cjs/S4784/rule.js +5 -4
- package/cjs/S4787/rule.js +9 -7
- package/cjs/S4790/rule.js +7 -5
- package/cjs/S4798/rule.js +2 -2
- package/cjs/S4817/rule.js +10 -8
- package/cjs/S4818/rule.js +4 -3
- package/cjs/S4822/rule.js +13 -9
- package/cjs/S4823/rule.js +4 -3
- package/cjs/S4829/rule.js +4 -3
- package/cjs/S4830/rule.js +11 -8
- package/cjs/S5042/rule.js +9 -7
- package/cjs/S5122/rule.js +40 -36
- package/cjs/S5148/rule.js +9 -8
- package/cjs/S5247/rule.js +22 -18
- package/cjs/S5256/rule.js +5 -4
- package/cjs/S5257/rule.js +4 -3
- package/cjs/S5260/rule.js +4 -3
- package/cjs/S5264/rule.js +4 -3
- package/cjs/S5332/rule.js +4 -3
- package/cjs/S5332/rule.lib.js +19 -17
- package/cjs/S5443/rule.js +2 -2
- package/cjs/S5527/rule.js +18 -14
- package/cjs/S5542/rule.js +6 -4
- package/cjs/S5547/rule.js +6 -4
- package/cjs/S5604/rule.js +15 -14
- package/cjs/S5659/rule.js +15 -12
- package/cjs/S5689/rule.js +11 -8
- package/cjs/S5691/rule.js +7 -5
- package/cjs/S5693/rule.js +14 -12
- package/cjs/S5725/rule.js +9 -6
- package/cjs/S5728/rule.js +7 -4
- package/cjs/S5730/rule.js +9 -6
- package/cjs/S5732/rule.js +8 -5
- package/cjs/S5734/rule.js +7 -4
- package/cjs/S5736/rule.js +8 -5
- package/cjs/S5739/rule.js +11 -8
- package/cjs/S5742/rule.js +7 -4
- package/cjs/S5743/rule.js +8 -6
- package/cjs/S5757/rule.js +13 -10
- package/cjs/S5759/rule.js +10 -7
- package/cjs/S5842/rule.js +2 -2
- package/cjs/S5843/rule.js +22 -19
- package/cjs/S5850/rule.js +4 -3
- package/cjs/S5852/rule.js +2 -2
- package/cjs/S5856/rule.js +10 -7
- package/cjs/S5860/rule.js +30 -26
- package/cjs/S5863/rule.js +15 -11
- package/cjs/S5867/rule.js +8 -7
- package/cjs/S5868/rule.js +7 -5
- package/cjs/S5869/rule.js +6 -5
- package/cjs/S5876/rule.js +12 -8
- package/cjs/S5958/rule.js +12 -9
- package/cjs/S5973/rule.js +10 -7
- package/cjs/S6019/rule.js +4 -3
- package/cjs/S6035/rule.js +2 -2
- package/cjs/S6079/rule.js +9 -6
- package/cjs/S6080/rule.js +13 -10
- package/cjs/S6092/rule.js +9 -7
- package/cjs/S6245/rule.js +14 -9
- package/cjs/S6249/rule.js +7 -5
- package/cjs/S6252/rule.js +12 -8
- package/cjs/S6265/rule.js +27 -20
- package/cjs/S6268/rule.js +5 -4
- package/cjs/S6270/rule.js +12 -9
- package/cjs/S6275/rule.js +2 -2
- package/cjs/S6281/rule.js +22 -17
- package/cjs/S6299/rule.js +2 -2
- package/cjs/S6302/rule.js +6 -5
- package/cjs/S6303/rule.js +12 -10
- package/cjs/S6304/rule.js +6 -5
- package/cjs/S6308/rule.js +7 -5
- package/cjs/S6317/rule.js +5 -4
- package/cjs/S6319/rule.js +2 -2
- package/cjs/S6321/rule.js +25 -23
- package/cjs/S6323/rule.js +4 -3
- package/cjs/S6324/rule.js +2 -2
- package/cjs/S6326/rule.js +2 -2
- package/cjs/S6327/rule.js +2 -2
- package/cjs/S6328/rule.js +4 -3
- package/cjs/S6329/rule.js +7 -5
- package/cjs/S6330/rule.js +2 -2
- package/cjs/S6332/rule.js +2 -2
- package/cjs/S6333/rule.js +8 -6
- package/cjs/S6351/rule.js +22 -19
- package/cjs/S6353/rule.js +2 -2
- package/cjs/S6397/rule.js +2 -2
- package/cjs/S6418/rule.js +9 -24
- package/cjs/S6426/rule.js +5 -4
- package/cjs/S6437/rule.js +10 -7
- package/cjs/S6439/rule.js +9 -7
- package/cjs/S6442/rule.js +11 -8
- package/cjs/S6443/rule.js +9 -7
- package/cjs/S6486/rule.js +5 -4
- package/cjs/S6564/rule.js +4 -3
- package/cjs/S6594/rule.js +12 -8
- package/cjs/S6627/rule.js +6 -4
- package/cjs/S6759/rule.js +10 -6
- package/cjs/S6958/rule.js +2 -2
- package/cjs/S6959/rule.js +9 -6
- package/cjs/S7059/rule.js +8 -5
- package/cjs/S7639/rule.js +5 -4
- package/cjs/S7790/rule.js +7 -5
- package/cjs/S8441/rule.js +13 -9
- package/cjs/S881/rule.js +2 -2
- package/cjs/S888/rule.js +4 -3
- package/cjs/S930/rule.js +14 -12
- package/cjs/helpers/ast.js +11 -8
- package/cjs/helpers/aws/s3.js +9 -6
- package/cjs/helpers/chai.js +41 -43
- package/cjs/helpers/cookie-flag-check.js +19 -17
- package/cjs/helpers/{decorators/index.js → entropy.js} +16 -17
- package/cjs/helpers/express.js +127 -128
- package/cjs/helpers/mocha.js +50 -54
- package/cjs/helpers/regex/ast.js +7 -6
- package/cjs/helpers/regex/extract.js +11 -11
- package/cjs/helpers/regex/group.js +2 -2
- package/cjs/helpers/regex/location.js +2 -2
- package/cjs/helpers/regex/range.js +5 -4
- package/cjs/helpers/regex/rule-template.js +4 -3
- package/cjs/helpers/sinon.js +33 -36
- package/cjs/helpers/supertest.js +34 -37
- package/cjs/helpers/vitest.js +29 -32
- package/docs/file-permissions.md +1 -1
- package/package.json +39 -1
- package/types/helpers/ancestor.d.ts +1 -1
- package/types/helpers/aws/s3.d.ts +1 -1
- package/types/helpers/chai.d.ts +3 -5
- package/types/helpers/entropy.d.ts +1 -0
- package/types/helpers/express.d.ts +38 -43
- package/types/helpers/mocha.d.ts +19 -21
- package/types/helpers/regex/ast.d.ts +1 -1
- package/types/helpers/regex/rule-template.d.ts +1 -1
- package/types/helpers/sinon.d.ts +3 -5
- package/types/helpers/supertest.d.ts +3 -5
- package/types/helpers/type.d.ts +1 -1
- package/types/helpers/vitest.d.ts +3 -5
- package/cjs/helpers/aws/index.js +0 -35
- package/cjs/helpers/decorators/interceptor.js +0 -88
- package/cjs/helpers/index.js +0 -60
- package/cjs/helpers/recognizers/index.js +0 -37
- package/cjs/helpers/rule-detect-react.js +0 -29
- package/cjs/helpers/validate-version.js +0 -94
- package/types/helpers/aws/index.d.ts +0 -3
- package/types/helpers/decorators/index.d.ts +0 -2
- package/types/helpers/decorators/interceptor.d.ts +0 -16
- package/types/helpers/index.d.ts +0 -28
- package/types/helpers/recognizers/index.d.ts +0 -2
- package/types/helpers/rule-detect-react.d.ts +0 -2
- package/types/helpers/validate-version.d.ts +0 -13
package/cjs/S4502/rule.js
CHANGED
|
@@ -51,12 +51,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
56
|
+
const module_js_1 = require("../helpers/module.js");
|
|
57
|
+
const location_js_1 = require("../helpers/location.js");
|
|
55
58
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
59
|
const CSURF_MODULE = 'csurf';
|
|
57
60
|
const SAFE_METHODS = new Set(['GET', 'HEAD', 'OPTIONS']);
|
|
58
61
|
exports.rule = {
|
|
59
|
-
meta: (0,
|
|
62
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta),
|
|
60
63
|
create(context) {
|
|
61
64
|
let globalCsrfProtection = false;
|
|
62
65
|
let importedCsrfMiddleware = false;
|
|
@@ -64,45 +67,45 @@ exports.rule = {
|
|
|
64
67
|
if (node.value.type === 'ArrayExpression') {
|
|
65
68
|
const arrayExpr = node.value;
|
|
66
69
|
const unsafeMethods = arrayExpr.elements
|
|
67
|
-
.filter(
|
|
70
|
+
.filter(ast_js_1.isLiteral)
|
|
68
71
|
.filter(e => typeof e.value === 'string' && !SAFE_METHODS.has(e.value));
|
|
69
72
|
if (unsafeMethods.length > 0) {
|
|
70
73
|
const [first, ...rest] = unsafeMethods;
|
|
71
|
-
(0,
|
|
74
|
+
(0, location_js_1.report)(context, {
|
|
72
75
|
message: 'Make sure disabling CSRF protection is safe here.',
|
|
73
76
|
node: first,
|
|
74
|
-
}, rest.map(node => (0,
|
|
77
|
+
}, rest.map(node => (0, location_js_1.toSecondaryLocation)(node)));
|
|
75
78
|
}
|
|
76
79
|
}
|
|
77
80
|
}
|
|
78
81
|
function isCsurfMiddleware(node) {
|
|
79
|
-
return node && (0,
|
|
82
|
+
return node && (0, module_js_1.getFullyQualifiedName)(context, node) === CSURF_MODULE;
|
|
80
83
|
}
|
|
81
84
|
function checkCallExpression(callExpression) {
|
|
82
85
|
const { callee } = callExpression;
|
|
83
86
|
// require('csurf')
|
|
84
|
-
if ((0,
|
|
87
|
+
if ((0, ast_js_1.isRequireModule)(callExpression, CSURF_MODULE)) {
|
|
85
88
|
importedCsrfMiddleware = true;
|
|
86
89
|
}
|
|
87
90
|
// csurf(...)
|
|
88
|
-
if ((0,
|
|
91
|
+
if ((0, module_js_1.getFullyQualifiedName)(context, callee) === CSURF_MODULE) {
|
|
89
92
|
const [args] = callExpression.arguments;
|
|
90
|
-
const ignoredMethods = (0,
|
|
93
|
+
const ignoredMethods = (0, ast_js_1.getProperty)(args, 'ignoreMethods', context);
|
|
91
94
|
if (ignoredMethods) {
|
|
92
95
|
checkIgnoredMethods(ignoredMethods);
|
|
93
96
|
}
|
|
94
97
|
}
|
|
95
98
|
// app.use(csurf(...))
|
|
96
99
|
if (callee.type === 'MemberExpression') {
|
|
97
|
-
if ((0,
|
|
98
|
-
(0,
|
|
100
|
+
if ((0, ast_js_1.isIdentifier)(callee.property, 'use') &&
|
|
101
|
+
(0, ast_js_1.flattenArgs)(context, callExpression.arguments).some(isCsurfMiddleware)) {
|
|
99
102
|
globalCsrfProtection = true;
|
|
100
103
|
}
|
|
101
|
-
if ((0,
|
|
104
|
+
if ((0, ast_js_1.isIdentifier)(callee.property, 'post', 'put', 'delete', 'patch') &&
|
|
102
105
|
!globalCsrfProtection &&
|
|
103
106
|
importedCsrfMiddleware &&
|
|
104
107
|
!callExpression.arguments.some(arg => isCsurfMiddleware(arg))) {
|
|
105
|
-
(0,
|
|
108
|
+
(0, location_js_1.report)(context, {
|
|
106
109
|
message: 'Make sure not using CSRF protection is safe here.',
|
|
107
110
|
node: callee,
|
|
108
111
|
});
|
package/cjs/S4507/rule.js
CHANGED
|
@@ -51,11 +51,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
56
|
+
const module_js_1 = require("../helpers/module.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
const ERRORHANDLER_MODULE = 'errorhandler';
|
|
57
59
|
exports.rule = {
|
|
58
|
-
meta: (0,
|
|
60
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
59
61
|
messages: {
|
|
60
62
|
deactivateDebug: 'Make sure this debug feature is deactivated before delivering the code in production.',
|
|
61
63
|
},
|
|
@@ -72,13 +74,13 @@ exports.rule = {
|
|
|
72
74
|
};
|
|
73
75
|
function checkErrorHandlerMiddleware(context, callExpression) {
|
|
74
76
|
const { callee, arguments: args } = callExpression;
|
|
75
|
-
if ((0,
|
|
77
|
+
if ((0, ast_js_1.isMemberWithProperty)(callee, 'use') &&
|
|
76
78
|
args.length > 0 &&
|
|
77
79
|
!isInsideConditional(context, callExpression)) {
|
|
78
|
-
for (const m of (0,
|
|
79
|
-
const middleware = (0,
|
|
80
|
+
for (const m of (0, ast_js_1.flattenArgs)(context, args)) {
|
|
81
|
+
const middleware = (0, ast_js_1.getUniqueWriteUsageOrNode)(context, m);
|
|
80
82
|
if (middleware.type === 'CallExpression' &&
|
|
81
|
-
(0,
|
|
83
|
+
(0, module_js_1.getFullyQualifiedName)(context, middleware) === ERRORHANDLER_MODULE) {
|
|
82
84
|
context.report({
|
|
83
85
|
node: middleware,
|
|
84
86
|
messageId: 'deactivateDebug',
|
package/cjs/S4524/rule.js
CHANGED
|
@@ -51,10 +51,10 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
55
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
56
|
exports.rule = {
|
|
57
|
-
meta: (0,
|
|
57
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
58
58
|
messages: {
|
|
59
59
|
defaultLast: 'Move this "default" clause to the end of this "switch" statement.',
|
|
60
60
|
},
|
package/cjs/S4619/rule.js
CHANGED
|
@@ -51,10 +51,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const type_js_1 = require("../helpers/type.js");
|
|
56
|
+
const parser_services_js_1 = require("../helpers/parser-services.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
exports.rule = {
|
|
57
|
-
meta: (0,
|
|
59
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
58
60
|
hasSuggestions: true,
|
|
59
61
|
messages: {
|
|
60
62
|
inMisuse: 'Use "indexOf" or "includes" (available from ES2016) instead.',
|
|
@@ -64,13 +66,13 @@ exports.rule = {
|
|
|
64
66
|
}),
|
|
65
67
|
create(context) {
|
|
66
68
|
const services = context.sourceCode.parserServices;
|
|
67
|
-
if (!(0,
|
|
69
|
+
if (!(0, parser_services_js_1.isRequiredParserServices)(services)) {
|
|
68
70
|
return {};
|
|
69
71
|
}
|
|
70
72
|
return {
|
|
71
73
|
"BinaryExpression[operator='in']": (node) => {
|
|
72
74
|
const { left, right } = node;
|
|
73
|
-
if ((0,
|
|
75
|
+
if ((0, type_js_1.isArray)(right, services) && !prototypeProperty(left) && !(0, type_js_1.isNumber)(left, services)) {
|
|
74
76
|
const leftText = context.sourceCode.getText(left);
|
|
75
77
|
const rightText = context.sourceCode.getText(right);
|
|
76
78
|
context.report({
|
package/cjs/S4621/rule.js
CHANGED
|
@@ -51,10 +51,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const location_js_1 = require("../helpers/location.js");
|
|
55
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
56
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
57
|
exports.rule = {
|
|
57
|
-
meta: (0,
|
|
58
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, { hasSuggestions: true }),
|
|
58
59
|
create(context) {
|
|
59
60
|
return {
|
|
60
61
|
'TSUnionType, TSIntersectionType'(node) {
|
|
@@ -76,8 +77,8 @@ exports.rule = {
|
|
|
76
77
|
if (duplicates.length > 1) {
|
|
77
78
|
const suggest = getSuggestions(compositeType, duplicates, context);
|
|
78
79
|
const primaryNode = duplicates.splice(1, 1)[0];
|
|
79
|
-
const secondaryLocations = duplicates.map((node, index) => (0,
|
|
80
|
-
(0,
|
|
80
|
+
const secondaryLocations = duplicates.map((node, index) => (0, location_js_1.toSecondaryLocation)(node, index ? 'Another duplicate' : 'Original'));
|
|
81
|
+
(0, location_js_1.report)(context, {
|
|
81
82
|
message: `Remove this duplicated type or replace with another one.`,
|
|
82
83
|
loc: primaryNode.loc,
|
|
83
84
|
suggest,
|
package/cjs/S4622/rule.js
CHANGED
|
@@ -51,14 +51,16 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
56
|
+
const type_js_1 = require("../helpers/type.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
const DEFAULT_THRESHOLD = 3;
|
|
57
59
|
const messages = {
|
|
58
60
|
refactorUnion: 'Refactor this union type to have less than {{threshold}} elements.',
|
|
59
61
|
};
|
|
60
62
|
exports.rule = {
|
|
61
|
-
meta: (0,
|
|
63
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, { messages }),
|
|
62
64
|
create(context) {
|
|
63
65
|
return {
|
|
64
66
|
TSUnionType: (node) => {
|
|
@@ -86,5 +88,5 @@ function isFromTypeStatement(node) {
|
|
|
86
88
|
function isUsedWithUtilityType(node) {
|
|
87
89
|
return (node.parent.type === 'TSTypeParameterInstantiation' &&
|
|
88
90
|
node.parent.parent.type === 'TSTypeReference' &&
|
|
89
|
-
(0,
|
|
91
|
+
(0, ast_js_1.isIdentifier)(node.parent.parent.typeName, ...type_js_1.UTILITY_TYPES));
|
|
90
92
|
}
|
package/cjs/S4623/rule.js
CHANGED
|
@@ -54,11 +54,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
54
54
|
};
|
|
55
55
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
56
56
|
exports.rule = void 0;
|
|
57
|
-
const
|
|
57
|
+
const parser_services_js_1 = require("../helpers/parser-services.js");
|
|
58
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
59
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
60
|
+
const collection_js_1 = require("../helpers/collection.js");
|
|
58
61
|
const typescript_1 = __importDefault(require("typescript"));
|
|
59
62
|
const meta = __importStar(require("./generated-meta.js"));
|
|
60
63
|
exports.rule = {
|
|
61
|
-
meta: (0,
|
|
64
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
62
65
|
hasSuggestions: true,
|
|
63
66
|
messages: {
|
|
64
67
|
removeUndefined: 'Remove this redundant "undefined".',
|
|
@@ -67,7 +70,7 @@ exports.rule = {
|
|
|
67
70
|
}),
|
|
68
71
|
create(context) {
|
|
69
72
|
const services = context.sourceCode.parserServices;
|
|
70
|
-
if ((0,
|
|
73
|
+
if ((0, parser_services_js_1.isRequiredParserServices)(services)) {
|
|
71
74
|
return {
|
|
72
75
|
CallExpression: (node) => {
|
|
73
76
|
const call = node;
|
|
@@ -75,8 +78,8 @@ exports.rule = {
|
|
|
75
78
|
if (args.length === 0) {
|
|
76
79
|
return;
|
|
77
80
|
}
|
|
78
|
-
const lastArgument = (0,
|
|
79
|
-
if ((0,
|
|
81
|
+
const lastArgument = (0, collection_js_1.last)(args);
|
|
82
|
+
if ((0, ast_js_1.isUndefined)(lastArgument) && isOptionalParameter(args.length - 1, call, services)) {
|
|
80
83
|
context.report({
|
|
81
84
|
messageId: 'removeUndefined',
|
|
82
85
|
node: lastArgument,
|
package/cjs/S4624/rule.js
CHANGED
|
@@ -51,10 +51,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const ancestor_js_1 = require("../helpers/ancestor.js");
|
|
55
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
56
|
+
const collection_js_1 = require("../helpers/collection.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
exports.rule = {
|
|
57
|
-
meta: (0,
|
|
59
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
58
60
|
messages: {
|
|
59
61
|
nestedTemplateLiterals: 'Refactor this code to not use nested template literals.',
|
|
60
62
|
},
|
|
@@ -62,8 +64,8 @@ exports.rule = {
|
|
|
62
64
|
create(context) {
|
|
63
65
|
return {
|
|
64
66
|
'TemplateLiteral TemplateLiteral': (node) => {
|
|
65
|
-
const ancestors = (0,
|
|
66
|
-
const nestingTemplate = (0,
|
|
67
|
+
const ancestors = (0, ancestor_js_1.ancestorsChain)(node, new Set(['TemplateLiteral']));
|
|
68
|
+
const nestingTemplate = (0, collection_js_1.last)(ancestors);
|
|
67
69
|
const { start: nestingStart, end: nestingEnd } = nestingTemplate.loc;
|
|
68
70
|
const { start: nestedStart, end: nestedEnd } = node.loc;
|
|
69
71
|
if (nestedStart.line === nestingStart.line || nestedEnd.line === nestingEnd.line) {
|
package/cjs/S4634/rule.js
CHANGED
|
@@ -51,10 +51,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
56
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
57
|
exports.rule = {
|
|
57
|
-
meta: (0,
|
|
58
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
58
59
|
hasSuggestions: true,
|
|
59
60
|
messages: {
|
|
60
61
|
promiseAction: 'Replace this trivial promise with "Promise.{{action}}".',
|
|
@@ -82,7 +83,7 @@ function getPromiseExecutor(node, context) {
|
|
|
82
83
|
return undefined;
|
|
83
84
|
}
|
|
84
85
|
function checkExecutor(newExpr, executor, context) {
|
|
85
|
-
if (!(0,
|
|
86
|
+
if (!(0, ast_js_1.isFunctionNode)(executor)) {
|
|
86
87
|
return;
|
|
87
88
|
}
|
|
88
89
|
const { params, body } = executor;
|
package/cjs/S4721/rule.js
CHANGED
|
@@ -51,13 +51,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const module_js_1 = require("../helpers/module.js");
|
|
56
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
const EXEC_FUNCTIONS = new Set(['exec', 'execSync']);
|
|
57
59
|
const SPAWN_EXEC_FILE_FUNCTIONS = new Set(['spawn', 'spawnSync', 'execFile', 'execFileSync']);
|
|
58
60
|
const CHILD_PROCESS_MODULE = 'child_process';
|
|
59
61
|
exports.rule = {
|
|
60
|
-
meta: (0,
|
|
62
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
61
63
|
messages: {
|
|
62
64
|
safeOSCommand: 'Make sure that executing this OS command is safe here.',
|
|
63
65
|
},
|
|
@@ -70,7 +72,7 @@ exports.rule = {
|
|
|
70
72
|
};
|
|
71
73
|
function checkOSCommand(context, call) {
|
|
72
74
|
const { callee, arguments: args } = call;
|
|
73
|
-
const fqn = (0,
|
|
75
|
+
const fqn = (0, module_js_1.getFullyQualifiedName)(context, call);
|
|
74
76
|
if (!fqn) {
|
|
75
77
|
return;
|
|
76
78
|
}
|
|
@@ -87,7 +89,7 @@ function checkOSCommand(context, call) {
|
|
|
87
89
|
}
|
|
88
90
|
function isQuestionable(method, [command, ...otherArguments]) {
|
|
89
91
|
// if command is hardcoded => no issue
|
|
90
|
-
if (!command || (0,
|
|
92
|
+
if (!command || (0, ast_js_1.isLiteral)(command) || (0, ast_js_1.isStaticTemplateLiteral)(command)) {
|
|
91
93
|
return false;
|
|
92
94
|
}
|
|
93
95
|
// for `spawn` and `execFile`, `shell` option must be set to `true`
|
|
@@ -100,5 +102,5 @@ function containsShellOption(otherArguments) {
|
|
|
100
102
|
return otherArguments.some(arg => arg.type === 'ObjectExpression' &&
|
|
101
103
|
arg.properties
|
|
102
104
|
.filter(v => v.type === 'Property')
|
|
103
|
-
.some(({ key, value }) => (0,
|
|
105
|
+
.some(({ key, value }) => (0, ast_js_1.isIdentifier)(key, 'shell') && value.type === 'Literal' && value.value === true));
|
|
104
106
|
}
|
package/cjs/S4782/rule.js
CHANGED
|
@@ -51,12 +51,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const parser_services_js_1 = require("../helpers/parser-services.js");
|
|
56
|
+
const location_js_1 = require("../helpers/location.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
exports.rule = {
|
|
57
|
-
meta: (0,
|
|
59
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, { hasSuggestions: true }),
|
|
58
60
|
create(context) {
|
|
59
|
-
if (!(0,
|
|
61
|
+
if (!(0, parser_services_js_1.isRequiredParserServices)(context.sourceCode.parserServices)) {
|
|
60
62
|
return {};
|
|
61
63
|
}
|
|
62
64
|
const compilerOptions = context.sourceCode.parserServices.program.getCompilerOptions();
|
|
@@ -72,11 +74,11 @@ exports.rule = {
|
|
|
72
74
|
const typeNode = getUndefinedTypeAnnotation(tsNode.typeAnnotation);
|
|
73
75
|
if (typeNode) {
|
|
74
76
|
const suggest = getQuickFixSuggestions(context, optionalToken, typeNode);
|
|
75
|
-
(0,
|
|
77
|
+
(0, location_js_1.report)(context, {
|
|
76
78
|
message: "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
|
|
77
79
|
loc: optionalToken.loc,
|
|
78
80
|
suggest,
|
|
79
|
-
}, [(0,
|
|
81
|
+
}, [(0, location_js_1.toSecondaryLocation)(typeNode)]);
|
|
80
82
|
}
|
|
81
83
|
}
|
|
82
84
|
return {
|
package/cjs/S4784/rule.js
CHANGED
|
@@ -51,13 +51,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
56
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
57
|
const stringMethods = ['match', 'search', 'split'];
|
|
57
58
|
const minPatternLength = 3;
|
|
58
59
|
const specialChars = new Set(['+', '*', '{']);
|
|
59
60
|
exports.rule = {
|
|
60
|
-
meta: (0,
|
|
61
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
61
62
|
messages: {
|
|
62
63
|
safeRegex: 'Make sure that using a regular expression is safe here.',
|
|
63
64
|
},
|
|
@@ -78,13 +79,13 @@ exports.rule = {
|
|
|
78
79
|
},
|
|
79
80
|
CallExpression(node) {
|
|
80
81
|
const { callee, arguments: args } = node;
|
|
81
|
-
if ((0,
|
|
82
|
+
if ((0, ast_js_1.isMemberWithProperty)(callee, ...stringMethods)) {
|
|
82
83
|
checkFirstArgument(args, context);
|
|
83
84
|
}
|
|
84
85
|
},
|
|
85
86
|
NewExpression(node) {
|
|
86
87
|
const { callee, arguments: args } = node;
|
|
87
|
-
if ((0,
|
|
88
|
+
if ((0, ast_js_1.isIdentifier)(callee, 'RegExp')) {
|
|
88
89
|
checkFirstArgument(args, context);
|
|
89
90
|
}
|
|
90
91
|
},
|
package/cjs/S4787/rule.js
CHANGED
|
@@ -51,10 +51,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const module_js_1 = require("../helpers/module.js");
|
|
56
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
const getEncryptionRuleModule = (clientSideMethods, serverSideMethods) => ({
|
|
57
|
-
meta: (0,
|
|
59
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
58
60
|
messages: {
|
|
59
61
|
safeEncryption: 'Make sure that encrypting data is safe here.',
|
|
60
62
|
},
|
|
@@ -71,8 +73,8 @@ const getEncryptionRuleModule = (clientSideMethods, serverSideMethods) => ({
|
|
|
71
73
|
// detect 'SubtleCrypto' object
|
|
72
74
|
// which can be retrieved by 'crypto.subtle' or 'window.crypto.subtle'
|
|
73
75
|
const { object, property } = node;
|
|
74
|
-
if ((0,
|
|
75
|
-
((0,
|
|
76
|
+
if ((0, ast_js_1.isIdentifier)(property, 'subtle') &&
|
|
77
|
+
((0, ast_js_1.isIdentifier)(object, 'crypto') || (0, ast_js_1.isMemberWithProperty)(object, 'crypto'))) {
|
|
76
78
|
usingCryptoInFile = true;
|
|
77
79
|
}
|
|
78
80
|
},
|
|
@@ -91,7 +93,7 @@ const getEncryptionRuleModule = (clientSideMethods, serverSideMethods) => ({
|
|
|
91
93
|
},
|
|
92
94
|
});
|
|
93
95
|
function checkForServerSide(callee, context, serverSideMethods) {
|
|
94
|
-
const fqn = (0,
|
|
96
|
+
const fqn = (0, module_js_1.getFullyQualifiedName)(context, callee);
|
|
95
97
|
if (serverSideMethods.some(method => fqn === `crypto.${method}`)) {
|
|
96
98
|
context.report({
|
|
97
99
|
messageId: 'safeEncryption',
|
|
@@ -100,8 +102,8 @@ function checkForServerSide(callee, context, serverSideMethods) {
|
|
|
100
102
|
}
|
|
101
103
|
}
|
|
102
104
|
function checkForClientSide(callee, context, clientSideMethods) {
|
|
103
|
-
if ((0,
|
|
104
|
-
(0,
|
|
105
|
+
if ((0, ast_js_1.isIdentifier)(callee, ...clientSideMethods) ||
|
|
106
|
+
(0, ast_js_1.isMemberWithProperty)(callee, ...clientSideMethods)) {
|
|
105
107
|
context.report({
|
|
106
108
|
messageId: 'safeEncryption',
|
|
107
109
|
node: callee,
|
package/cjs/S4790/rule.js
CHANGED
|
@@ -51,7 +51,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const module_js_1 = require("../helpers/module.js");
|
|
56
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
const message = 'Make sure this weak hash algorithm is not used in a sensitive context here.';
|
|
57
59
|
const CRYPTO_UNSECURE_HASH_ALGORITHMS = new Set([
|
|
@@ -70,7 +72,7 @@ const CRYPTO_UNSECURE_HASH_ALGORITHMS = new Set([
|
|
|
70
72
|
]);
|
|
71
73
|
const SUBTLE_UNSECURE_HASH_ALGORITHMS = new Set(['sha-1']);
|
|
72
74
|
exports.rule = {
|
|
73
|
-
meta: (0,
|
|
75
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta),
|
|
74
76
|
create(context) {
|
|
75
77
|
function checkNodejsCrypto(fqn, node) {
|
|
76
78
|
// crypto#createHash
|
|
@@ -87,8 +89,8 @@ exports.rule = {
|
|
|
87
89
|
}
|
|
88
90
|
}
|
|
89
91
|
function checkUnsecureAlgorithm(method, hash, unsecureAlgorithms) {
|
|
90
|
-
const hashAlgorithm = (0,
|
|
91
|
-
if ((0,
|
|
92
|
+
const hashAlgorithm = (0, ast_js_1.getUniqueWriteUsageOrNode)(context, hash);
|
|
93
|
+
if ((0, ast_js_1.isStringLiteral)(hashAlgorithm) &&
|
|
92
94
|
unsecureAlgorithms.has(hashAlgorithm.value.toLocaleLowerCase())) {
|
|
93
95
|
context.report({
|
|
94
96
|
message,
|
|
@@ -99,7 +101,7 @@ exports.rule = {
|
|
|
99
101
|
return {
|
|
100
102
|
'CallExpression[arguments.length > 0]': (node) => {
|
|
101
103
|
const callExpr = node;
|
|
102
|
-
const fqn = (0,
|
|
104
|
+
const fqn = (0, module_js_1.getFullyQualifiedName)(context, callExpr);
|
|
103
105
|
checkNodejsCrypto(fqn, callExpr);
|
|
104
106
|
checkSubtleCrypto(fqn, callExpr);
|
|
105
107
|
},
|
package/cjs/S4798/rule.js
CHANGED
|
@@ -51,10 +51,10 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
55
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
56
|
exports.rule = {
|
|
57
|
-
meta: (0,
|
|
57
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
58
58
|
messages: {
|
|
59
59
|
provideDefault: "Provide a default value for '{{parameter}}' so that " +
|
|
60
60
|
'the logic of the function is more evident when this parameter is missing. ' +
|
package/cjs/S4817/rule.js
CHANGED
|
@@ -51,13 +51,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const module_js_1 = require("../helpers/module.js");
|
|
56
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
const xpathModule = 'xpath';
|
|
57
59
|
const xpathEvalMethods = ['select', 'select1', 'evaluate'];
|
|
58
60
|
const ieEvalMethods = ['selectNodes', 'SelectSingleNode'];
|
|
59
61
|
exports.rule = {
|
|
60
|
-
meta: (0,
|
|
62
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
61
63
|
messages: {
|
|
62
64
|
checkXPath: 'Make sure that executing this XPATH expression is safe.',
|
|
63
65
|
},
|
|
@@ -65,7 +67,7 @@ exports.rule = {
|
|
|
65
67
|
create(context) {
|
|
66
68
|
return {
|
|
67
69
|
MemberExpression: (node) => {
|
|
68
|
-
if ((0,
|
|
70
|
+
if ((0, ast_js_1.isMemberExpression)(node, 'document', 'evaluate')) {
|
|
69
71
|
context.report({ messageId: 'checkXPath', node });
|
|
70
72
|
}
|
|
71
73
|
},
|
|
@@ -74,17 +76,17 @@ exports.rule = {
|
|
|
74
76
|
},
|
|
75
77
|
};
|
|
76
78
|
function checkCallExpression({ callee, arguments: args }, context) {
|
|
77
|
-
if (args.length > 0 && (0,
|
|
79
|
+
if (args.length > 0 && (0, ast_js_1.isLiteral)(args[0])) {
|
|
78
80
|
return;
|
|
79
81
|
}
|
|
80
82
|
// IE
|
|
81
|
-
if ((0,
|
|
83
|
+
if ((0, ast_js_1.isMemberWithProperty)(callee, ...ieEvalMethods) && args.length === 1) {
|
|
82
84
|
context.report({ messageId: 'checkXPath', node: callee });
|
|
83
85
|
return;
|
|
84
86
|
}
|
|
85
87
|
// Document.evaluate
|
|
86
|
-
if ((0,
|
|
87
|
-
!(0,
|
|
88
|
+
if ((0, ast_js_1.isMemberWithProperty)(callee, 'evaluate') &&
|
|
89
|
+
!(0, ast_js_1.isMemberExpression)(callee, 'document', 'evaluate') &&
|
|
88
90
|
args.length >= 4) {
|
|
89
91
|
const resultTypeArgument = args[3];
|
|
90
92
|
const argumentAsText = context.sourceCode.getText(resultTypeArgument);
|
|
@@ -94,7 +96,7 @@ function checkCallExpression({ callee, arguments: args }, context) {
|
|
|
94
96
|
}
|
|
95
97
|
}
|
|
96
98
|
// "xpath" module
|
|
97
|
-
const fqn = (0,
|
|
99
|
+
const fqn = (0, module_js_1.getFullyQualifiedName)(context, callee);
|
|
98
100
|
if (xpathEvalMethods.some(method => fqn === `${xpathModule}.${method}`)) {
|
|
99
101
|
context.report({ messageId: 'checkXPath', node: callee });
|
|
100
102
|
}
|
package/cjs/S4818/rule.js
CHANGED
|
@@ -51,10 +51,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const module_js_1 = require("../helpers/module.js");
|
|
55
56
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
57
|
exports.rule = {
|
|
57
|
-
meta: (0,
|
|
58
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
58
59
|
messages: {
|
|
59
60
|
safeSocket: 'Make sure that sockets are used safely here.',
|
|
60
61
|
},
|
|
@@ -67,7 +68,7 @@ exports.rule = {
|
|
|
67
68
|
},
|
|
68
69
|
};
|
|
69
70
|
function checkCallExpression(callExpr, context, ...sensitiveFqns) {
|
|
70
|
-
const callFqn = (0,
|
|
71
|
+
const callFqn = (0, module_js_1.getFullyQualifiedName)(context, callExpr);
|
|
71
72
|
if (callFqn !== null && sensitiveFqns.includes(callFqn)) {
|
|
72
73
|
context.report({ messageId: 'safeSocket', node: callExpr.callee });
|
|
73
74
|
}
|