eslint-plugin-sonarjs 4.0.0 → 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.
Files changed (413) hide show
  1. package/README.md +269 -268
  2. package/cjs/S100/rule.js +7 -5
  3. package/cjs/S101/rule.js +2 -2
  4. package/cjs/S104/rule.js +2 -2
  5. package/cjs/S105/rule.js +2 -2
  6. package/cjs/S1066/rule.js +5 -4
  7. package/cjs/S1067/rule.js +8 -6
  8. package/cjs/S1110/rule.js +7 -5
  9. package/cjs/S1119/rule.js +85 -7
  10. package/cjs/S1121/rule.js +4 -3
  11. package/cjs/S1125/rule.js +9 -8
  12. package/cjs/S1126/rule.js +2 -2
  13. package/cjs/S1128/rule.js +8 -5
  14. package/cjs/S1134/rule.js +2 -2
  15. package/cjs/S1135/rule.js +2 -2
  16. package/cjs/S1154/rule.js +6 -4
  17. package/cjs/S117/rule.js +6 -5
  18. package/cjs/S1172/rule.js +2 -2
  19. package/cjs/S1192/rule.js +5 -4
  20. package/cjs/S1219/rule.js +4 -3
  21. package/cjs/S1226/rule.js +6 -4
  22. package/cjs/S124/rule.js +2 -2
  23. package/cjs/S125/rule.js +9 -7
  24. package/cjs/S126/rule.js +2 -2
  25. package/cjs/S1264/rule.js +2 -2
  26. package/cjs/S128/rule.js +4 -3
  27. package/cjs/S1291/rule.js +2 -2
  28. package/cjs/S1301/rule.js +2 -2
  29. package/cjs/S1313/rule.js +2 -2
  30. package/cjs/S134/rule.js +7 -5
  31. package/cjs/S135/rule.js +5 -4
  32. package/cjs/S138/rule.js +9 -6
  33. package/cjs/S1439/rule.js +2 -2
  34. package/cjs/S1444/rule.js +2 -2
  35. package/cjs/S1451/rule.js +2 -2
  36. package/cjs/S1472/rule.js +2 -2
  37. package/cjs/S1479/rule.js +2 -2
  38. package/cjs/S1481/rule.js +2 -2
  39. package/cjs/S1488/generated-meta.js +1 -1
  40. package/cjs/S1488/rule.js +11 -7
  41. package/cjs/S1515/rule.js +10 -8
  42. package/cjs/{helpers/aws/index.js → S1523/generated-meta.js} +34 -18
  43. package/cjs/S1523/index.js +21 -0
  44. package/cjs/S1523/meta.js +21 -0
  45. package/cjs/S1523/rule.js +143 -0
  46. package/cjs/S1526/rule.js +5 -4
  47. package/cjs/S1527/rule.js +2 -2
  48. package/cjs/S1528/rule.js +2 -2
  49. package/cjs/S1529/generated-meta.js +1 -1
  50. package/cjs/S1529/rule.js +4 -3
  51. package/cjs/S1530/rule.js +5 -3
  52. package/cjs/S1533/rule.js +2 -2
  53. package/cjs/S1535/rule.js +2 -2
  54. package/cjs/S1541/rule.js +10 -7
  55. package/cjs/S1607/rule.js +22 -20
  56. package/cjs/S1764/rule.js +10 -7
  57. package/cjs/S1821/rule.js +2 -2
  58. package/cjs/S1848/rule.js +10 -7
  59. package/cjs/S1854/rule.js +18 -14
  60. package/cjs/S1862/rule.js +10 -8
  61. package/cjs/S1871/rule.js +21 -16
  62. package/cjs/S1874/rule.js +4 -3
  63. package/cjs/S1940/rule.js +2 -2
  64. package/cjs/S1994/rule.js +10 -7
  65. package/cjs/S2004/rule.js +9 -7
  66. package/cjs/S2068/rule.js +75 -12
  67. package/cjs/S2077/generated-meta.js +1 -1
  68. package/cjs/S2077/rule.js +10 -6
  69. package/cjs/S2092/rule.js +2 -2
  70. package/cjs/S2123/rule.js +2 -2
  71. package/cjs/S2137/rule.js +2 -2
  72. package/cjs/S2138/rule.js +4 -3
  73. package/cjs/S2187/rule.js +2 -2
  74. package/cjs/S2201/rule.js +47 -5
  75. package/cjs/S2208/rule.js +2 -2
  76. package/cjs/S2234/rule.js +58 -11
  77. package/cjs/S2245/rule.js +4 -3
  78. package/cjs/S2251/rule.js +5 -4
  79. package/cjs/S2255/rule.js +6 -5
  80. package/cjs/S2259/rule.js +14 -9
  81. package/cjs/S2301/rule.js +14 -9
  82. package/cjs/S2310/rule.js +80 -9
  83. package/cjs/S2392/rule.js +7 -5
  84. package/cjs/S2424/rule.js +2 -2
  85. package/cjs/S2428/rule.js +8 -6
  86. package/cjs/S2486/rule.js +4 -3
  87. package/cjs/S2589/rule.js +12 -10
  88. package/cjs/S2598/rule.js +17 -14
  89. package/cjs/S2612/generated-meta.js +1 -1
  90. package/cjs/S2612/rule.js +8 -6
  91. package/cjs/S2639/rule.js +2 -2
  92. package/cjs/S2681/rule.js +2 -2
  93. package/cjs/S2692/rule.js +6 -4
  94. package/cjs/S2699/generated-meta.js +1 -1
  95. package/cjs/S2699/rule.js +40 -31
  96. package/cjs/S2703/rule.js +2 -2
  97. package/cjs/S2737/rule.js +6 -4
  98. package/cjs/S2755/rule.js +9 -6
  99. package/cjs/S2757/rule.js +2 -2
  100. package/cjs/S2817/rule.js +10 -7
  101. package/cjs/S2819/rule.js +16 -12
  102. package/cjs/S2870/rule.js +8 -5
  103. package/cjs/S2871/rule.js +12 -9
  104. package/cjs/S2970/rule.js +9 -8
  105. package/cjs/S2990/rule.js +2 -2
  106. package/cjs/S2999/rule.js +10 -7
  107. package/cjs/S3001/rule.js +2 -2
  108. package/cjs/S3003/rule.js +10 -7
  109. package/cjs/S3317/rule.js +4 -3
  110. package/cjs/S3330/rule.js +2 -2
  111. package/cjs/S3358/rule.js +2 -2
  112. package/cjs/S3402/rule.js +14 -10
  113. package/cjs/S3403/rule.js +10 -7
  114. package/cjs/S3415/rule.js +16 -13
  115. package/cjs/S3499/rule.js +5 -4
  116. package/cjs/S3500/rule.js +5 -4
  117. package/cjs/S3513/rule.js +5 -4
  118. package/cjs/S3514/rule.js +10 -7
  119. package/cjs/S3516/rule.js +10 -7
  120. package/cjs/S3524/rule.js +2 -2
  121. package/cjs/S3525/rule.js +6 -4
  122. package/cjs/S3531/rule.js +5 -3
  123. package/cjs/S3533/rule.js +8 -7
  124. package/cjs/S3579/rule.js +6 -4
  125. package/cjs/S3616/rule.js +6 -4
  126. package/cjs/S3626/rule.js +4 -3
  127. package/cjs/S3686/rule.js +7 -5
  128. package/cjs/S3699/rule.js +4 -3
  129. package/cjs/S3735/rule.js +8 -5
  130. package/cjs/S3757/rule.js +8 -6
  131. package/cjs/S3758/rule.js +9 -7
  132. package/cjs/S3760/rule.js +24 -21
  133. package/cjs/S3776/rule.js +26 -22
  134. package/cjs/S3782/rule.js +6 -4
  135. package/cjs/S3785/rule.js +9 -6
  136. package/cjs/S3796/rule.js +12 -8
  137. package/cjs/S3798/rule.js +4 -3
  138. package/cjs/S3800/rule.js +22 -11
  139. package/cjs/S3801/generated-meta.js +1 -1
  140. package/cjs/S3801/rule.js +15 -11
  141. package/cjs/S3827/rule.js +9 -6
  142. package/cjs/S3923/rule.js +9 -6
  143. package/cjs/S3972/rule.js +5 -4
  144. package/cjs/S3973/rule.js +7 -5
  145. package/cjs/S3981/rule.js +4 -3
  146. package/cjs/S3984/rule.js +4 -3
  147. package/cjs/S4030/rule.js +10 -7
  148. package/cjs/S4036/rule.js +7 -5
  149. package/cjs/S4043/rule.js +12 -8
  150. package/cjs/S4139/rule.js +7 -5
  151. package/cjs/S4143/rule.js +12 -9
  152. package/cjs/S4144/rule.js +12 -9
  153. package/cjs/S4158/rule.js +11 -8
  154. package/cjs/S4165/rule.js +14 -12
  155. package/cjs/S4322/rule.js +8 -5
  156. package/cjs/S4323/rule.js +4 -3
  157. package/cjs/S4324/rule.js +7 -5
  158. package/cjs/S4328/rule.js +2 -2
  159. package/cjs/S4335/rule.js +6 -4
  160. package/cjs/S4423/rule.js +4 -3
  161. package/cjs/S4423/rule.lib.js +8 -7
  162. package/cjs/S4426/rule.js +11 -10
  163. package/cjs/S4502/rule.js +16 -13
  164. package/cjs/S4507/rule.js +8 -6
  165. package/cjs/S4524/rule.js +2 -2
  166. package/cjs/S4619/rule.js +6 -4
  167. package/cjs/S4621/rule.js +5 -4
  168. package/cjs/S4622/rule.js +5 -3
  169. package/cjs/S4623/rule.js +8 -5
  170. package/cjs/S4624/rule.js +6 -4
  171. package/cjs/S4634/rule.js +4 -3
  172. package/cjs/S4721/rule.js +7 -5
  173. package/cjs/S4782/rule.js +7 -5
  174. package/cjs/S4784/rule.js +5 -4
  175. package/cjs/S4787/rule.js +9 -7
  176. package/cjs/S4790/rule.js +7 -5
  177. package/cjs/S4798/rule.js +2 -2
  178. package/cjs/S4817/rule.js +10 -8
  179. package/cjs/S4818/rule.js +4 -3
  180. package/cjs/S4822/rule.js +13 -9
  181. package/cjs/S4823/rule.js +4 -3
  182. package/cjs/S4829/rule.js +4 -3
  183. package/cjs/S4830/rule.js +11 -8
  184. package/cjs/S5042/rule.js +9 -7
  185. package/cjs/S5122/rule.js +40 -36
  186. package/cjs/S5148/rule.js +9 -8
  187. package/cjs/S5247/rule.js +22 -18
  188. package/cjs/S5256/rule.js +5 -4
  189. package/cjs/S5257/rule.js +4 -3
  190. package/cjs/S5260/rule.js +4 -3
  191. package/cjs/S5264/rule.js +4 -3
  192. package/cjs/S5332/rule.js +4 -3
  193. package/cjs/S5332/rule.lib.js +19 -17
  194. package/cjs/S5443/rule.js +2 -2
  195. package/cjs/S5527/rule.js +18 -14
  196. package/cjs/S5542/rule.js +6 -4
  197. package/cjs/S5547/rule.js +6 -4
  198. package/cjs/S5604/rule.js +15 -14
  199. package/cjs/S5659/rule.js +15 -12
  200. package/cjs/S5689/rule.js +11 -8
  201. package/cjs/S5691/rule.js +7 -5
  202. package/cjs/S5693/rule.js +14 -12
  203. package/cjs/S5725/rule.js +9 -6
  204. package/cjs/S5728/rule.js +7 -4
  205. package/cjs/S5730/rule.js +9 -6
  206. package/cjs/S5732/rule.js +8 -5
  207. package/cjs/S5734/rule.js +7 -4
  208. package/cjs/S5736/rule.js +8 -5
  209. package/cjs/S5739/rule.js +11 -8
  210. package/cjs/S5742/rule.js +7 -4
  211. package/cjs/S5743/rule.js +8 -6
  212. package/cjs/S5757/rule.js +13 -10
  213. package/cjs/S5759/rule.js +10 -7
  214. package/cjs/S5842/rule.js +2 -2
  215. package/cjs/S5843/rule.js +22 -19
  216. package/cjs/S5850/rule.js +4 -3
  217. package/cjs/S5852/rule.js +2 -2
  218. package/cjs/S5856/rule.js +10 -7
  219. package/cjs/S5860/rule.js +30 -26
  220. package/cjs/S5863/rule.js +15 -11
  221. package/cjs/S5867/rule.js +8 -7
  222. package/cjs/S5868/rule.js +7 -5
  223. package/cjs/S5869/rule.js +6 -5
  224. package/cjs/S5876/rule.js +12 -8
  225. package/cjs/S5958/rule.js +12 -9
  226. package/cjs/S5973/rule.js +10 -7
  227. package/cjs/S6019/rule.js +4 -3
  228. package/cjs/S6035/rule.js +2 -2
  229. package/cjs/S6079/rule.js +9 -6
  230. package/cjs/S6080/rule.js +13 -10
  231. package/cjs/S6092/rule.js +9 -7
  232. package/cjs/S6245/rule.js +14 -9
  233. package/cjs/S6249/rule.js +7 -5
  234. package/cjs/S6252/rule.js +12 -8
  235. package/cjs/S6265/rule.js +27 -20
  236. package/cjs/S6268/rule.js +5 -4
  237. package/cjs/S6270/rule.js +12 -9
  238. package/cjs/S6275/rule.js +2 -2
  239. package/cjs/S6281/rule.js +22 -17
  240. package/cjs/S6299/rule.js +2 -2
  241. package/cjs/S6302/rule.js +6 -5
  242. package/cjs/S6303/rule.js +12 -10
  243. package/cjs/S6304/rule.js +6 -5
  244. package/cjs/S6308/rule.js +7 -5
  245. package/cjs/S6317/rule.js +5 -4
  246. package/cjs/S6319/rule.js +2 -2
  247. package/cjs/S6321/rule.js +25 -23
  248. package/cjs/S6323/rule.js +4 -3
  249. package/cjs/S6324/rule.js +2 -2
  250. package/cjs/S6326/rule.js +2 -2
  251. package/cjs/S6327/rule.js +2 -2
  252. package/cjs/S6328/rule.js +4 -3
  253. package/cjs/S6329/rule.js +7 -5
  254. package/cjs/S6330/rule.js +2 -2
  255. package/cjs/S6332/rule.js +2 -2
  256. package/cjs/S6333/rule.js +8 -6
  257. package/cjs/S6351/rule.js +22 -19
  258. package/cjs/S6353/rule.js +2 -2
  259. package/cjs/S6397/rule.js +2 -2
  260. package/cjs/S6418/config.js +1 -1
  261. package/cjs/S6418/rule.js +9 -24
  262. package/cjs/S6426/rule.js +5 -4
  263. package/cjs/S6437/rule.js +10 -7
  264. package/cjs/S6439/rule.js +9 -7
  265. package/cjs/S6442/rule.js +11 -8
  266. package/cjs/S6443/rule.js +9 -7
  267. package/cjs/S6486/rule.js +5 -4
  268. package/cjs/S6564/rule.js +4 -3
  269. package/cjs/S6594/rule.js +12 -8
  270. package/cjs/S6627/rule.js +6 -4
  271. package/cjs/S6759/rule.js +10 -6
  272. package/cjs/S6958/rule.js +2 -2
  273. package/cjs/S6959/rule.js +9 -6
  274. package/cjs/S7059/generated-meta.js +1 -1
  275. package/cjs/S7059/rule.js +8 -5
  276. package/cjs/S7639/generated-meta.js +1 -1
  277. package/cjs/S7639/rule.js +5 -4
  278. package/cjs/S7790/generated-meta.js +1 -1
  279. package/cjs/S7790/rule.js +7 -5
  280. package/cjs/S8441/generated-meta.js +1 -1
  281. package/cjs/S8441/rule.js +13 -9
  282. package/cjs/S881/rule.js +2 -2
  283. package/cjs/S888/rule.js +4 -3
  284. package/cjs/S930/rule.js +14 -12
  285. package/cjs/helpers/ast.js +11 -8
  286. package/cjs/helpers/aws/s3.js +9 -6
  287. package/cjs/helpers/chai.js +41 -43
  288. package/cjs/helpers/configs.js +92 -0
  289. package/cjs/helpers/cookie-flag-check.js +19 -17
  290. package/cjs/helpers/{decorators/index.js → entropy.js} +16 -17
  291. package/cjs/helpers/express.js +127 -128
  292. package/cjs/helpers/find-up/all-in-parent-dirs.js +0 -16
  293. package/cjs/helpers/mocha.js +50 -54
  294. package/cjs/helpers/regex/ast.js +7 -6
  295. package/cjs/helpers/regex/extract.js +11 -11
  296. package/cjs/helpers/regex/group.js +2 -2
  297. package/cjs/helpers/regex/location.js +2 -2
  298. package/cjs/helpers/regex/range.js +5 -4
  299. package/cjs/helpers/regex/rule-template.js +4 -3
  300. package/cjs/helpers/sinon.js +33 -36
  301. package/cjs/helpers/supertest.js +34 -37
  302. package/cjs/helpers/vitest.js +29 -32
  303. package/cjs/plugin-rules.js +452 -450
  304. package/docs/assertions-in-tests.md +2 -0
  305. package/docs/bitwise-operators.md +2 -0
  306. package/docs/code-eval.md +7 -0
  307. package/docs/file-permissions.md +1 -1
  308. package/docs/no-async-constructor.md +2 -0
  309. package/docs/no-inconsistent-returns.md +2 -0
  310. package/docs/prefer-immediate-return.md +2 -0
  311. package/docs/sql-queries.md +2 -0
  312. package/package.json +39 -1
  313. package/types/S1067/rule.d.ts +1 -1
  314. package/types/S1110/rule.d.ts +1 -1
  315. package/types/S1128/rule.d.ts +1 -1
  316. package/types/S1172/rule.d.ts +1 -1
  317. package/types/S1226/rule.d.ts +1 -1
  318. package/types/S134/rule.d.ts +1 -1
  319. package/types/S1472/rule.d.ts +1 -1
  320. package/types/S1481/rule.d.ts +1 -1
  321. package/types/S1488/generated-meta.d.ts +1 -1
  322. package/types/S1515/rule.d.ts +1 -1
  323. package/types/S1523/generated-meta.d.ts +17 -0
  324. package/types/S1523/index.d.ts +1 -0
  325. package/types/S1523/meta.d.ts +2 -0
  326. package/types/S1523/rule.d.ts +2 -0
  327. package/types/S1527/rule.d.ts +1 -1
  328. package/types/S1529/generated-meta.d.ts +1 -1
  329. package/types/S1541/rule.d.ts +1 -1
  330. package/types/S1862/rule.d.ts +1 -1
  331. package/types/S2077/generated-meta.d.ts +1 -1
  332. package/types/S2123/rule.d.ts +1 -1
  333. package/types/S2259/rule.d.ts +1 -1
  334. package/types/S2428/rule.d.ts +1 -1
  335. package/types/S2589/rule.d.ts +1 -1
  336. package/types/S2598/rule.d.ts +1 -1
  337. package/types/S2699/generated-meta.d.ts +1 -1
  338. package/types/S2699/rule.d.ts +1 -1
  339. package/types/S2737/rule.d.ts +1 -1
  340. package/types/S2757/rule.d.ts +1 -1
  341. package/types/S2819/rule.d.ts +1 -1
  342. package/types/S3001/rule.d.ts +1 -1
  343. package/types/S3317/rule.d.ts +1 -1
  344. package/types/S3500/rule.d.ts +1 -1
  345. package/types/S3513/rule.d.ts +1 -1
  346. package/types/S3686/rule.d.ts +1 -1
  347. package/types/S3801/generated-meta.d.ts +1 -1
  348. package/types/S3972/rule.d.ts +1 -1
  349. package/types/S3973/rule.d.ts +1 -1
  350. package/types/S4030/rule.d.ts +1 -1
  351. package/types/S4143/rule.d.ts +1 -1
  352. package/types/S4158/rule.d.ts +1 -1
  353. package/types/S4621/rule.d.ts +1 -1
  354. package/types/S4782/rule.d.ts +1 -1
  355. package/types/S5693/rule.d.ts +1 -1
  356. package/types/S5725/rule.d.ts +1 -1
  357. package/types/S5860/rule.d.ts +1 -1
  358. package/types/S5868/rule.d.ts +1 -1
  359. package/types/S5869/rule.d.ts +1 -1
  360. package/types/S6079/rule.d.ts +1 -1
  361. package/types/S6326/rule.d.ts +1 -1
  362. package/types/S6351/rule.d.ts +1 -1
  363. package/types/S6418/config.d.ts +1 -1
  364. package/types/S6443/rule.d.ts +1 -1
  365. package/types/S7059/generated-meta.d.ts +1 -1
  366. package/types/S7639/generated-meta.d.ts +1 -1
  367. package/types/S7790/generated-meta.d.ts +1 -1
  368. package/types/S8441/generated-meta.d.ts +1 -1
  369. package/types/S930/rule.d.ts +1 -1
  370. package/types/helpers/ancestor.d.ts +3 -3
  371. package/types/helpers/ast.d.ts +1 -1
  372. package/types/helpers/aws/iam.d.ts +2 -2
  373. package/types/helpers/aws/s3.d.ts +1 -1
  374. package/types/helpers/chai.d.ts +3 -5
  375. package/types/helpers/configs.d.ts +39 -1
  376. package/types/helpers/entropy.d.ts +1 -0
  377. package/types/helpers/equivalence.d.ts +1 -1
  378. package/types/helpers/express.d.ts +38 -43
  379. package/types/helpers/find-up/all-in-parent-dirs.d.ts +1 -1
  380. package/types/helpers/find-up/closest.d.ts +1 -1
  381. package/types/helpers/find-up/find-minimatch.d.ts +1 -1
  382. package/types/helpers/generate-meta.d.ts +1 -1
  383. package/types/helpers/mocha.d.ts +19 -21
  384. package/types/helpers/module.d.ts +1 -1
  385. package/types/helpers/package-jsons/all-in-parent-dirs.d.ts +1 -1
  386. package/types/helpers/package-jsons/dependencies.d.ts +1 -1
  387. package/types/helpers/recognizers/CodeRecognizer.d.ts +1 -1
  388. package/types/helpers/recognizers/JavaScriptFootPrint.d.ts +2 -2
  389. package/types/helpers/recognizers/LanguageFootprint.d.ts +1 -1
  390. package/types/helpers/regex/alternation.d.ts +1 -1
  391. package/types/helpers/regex/ast.d.ts +1 -1
  392. package/types/helpers/regex/location.d.ts +2 -2
  393. package/types/helpers/regex/range.d.ts +2 -2
  394. package/types/helpers/regex/rule-template.d.ts +1 -1
  395. package/types/helpers/result.d.ts +1 -1
  396. package/types/helpers/sinon.d.ts +4 -6
  397. package/types/helpers/sonar-runtime.d.ts +1 -1
  398. package/types/helpers/supertest.d.ts +4 -6
  399. package/types/helpers/type.d.ts +1 -1
  400. package/types/helpers/vitest.d.ts +4 -6
  401. package/types/plugin-rules.d.ts +1 -0
  402. package/cjs/helpers/decorators/interceptor.js +0 -88
  403. package/cjs/helpers/index.js +0 -60
  404. package/cjs/helpers/recognizers/index.js +0 -37
  405. package/cjs/helpers/rule-detect-react.js +0 -29
  406. package/cjs/helpers/validate-version.js +0 -94
  407. package/types/helpers/aws/index.d.ts +0 -3
  408. package/types/helpers/decorators/index.d.ts +0 -2
  409. package/types/helpers/decorators/interceptor.d.ts +0 -16
  410. package/types/helpers/index.d.ts +0 -28
  411. package/types/helpers/recognizers/index.d.ts +0 -2
  412. package/types/helpers/rule-detect-react.d.ts +0 -2
  413. package/types/helpers/validate-version.d.ts +0 -13
package/cjs/S1854/rule.js CHANGED
@@ -51,10 +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 index_js_1 = require("../helpers/index.js");
54
+ const lva_js_1 = require("../helpers/lva.js");
55
+ const ancestor_js_1 = require("../helpers/ancestor.js");
56
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
57
+ const ast_js_1 = require("../helpers/ast.js");
58
+ const collection_js_1 = require("../helpers/collection.js");
55
59
  const meta = __importStar(require("./generated-meta.js"));
56
60
  exports.rule = {
57
- meta: (0, index_js_1.generateMeta)(meta, {
61
+ meta: (0, generate_meta_js_1.generateMeta)(meta, {
58
62
  messages: {
59
63
  removeAssignment: 'Remove this useless assignment to variable "{{variable}}".',
60
64
  },
@@ -92,14 +96,14 @@ exports.rule = {
92
96
  destructuringStack.push(new DestructuringContext());
93
97
  },
94
98
  'ObjectPattern > Property > Identifier': (node) => {
95
- const destructuring = (0, index_js_1.last)(destructuringStack);
99
+ const destructuring = (0, collection_js_1.last)(destructuringStack);
96
100
  const { ref } = resolveReference(node);
97
101
  if (ref) {
98
102
  destructuring.references.push(ref);
99
103
  }
100
104
  },
101
105
  'ObjectPattern > :matches(RestElement, ExperimentalRestProperty)': () => {
102
- (0, index_js_1.last)(destructuringStack).hasRest = true;
106
+ (0, collection_js_1.last)(destructuringStack).hasRest = true;
103
107
  },
104
108
  'ObjectPattern:exit': () => {
105
109
  const destructuring = destructuringStack.pop();
@@ -114,7 +118,7 @@ exports.rule = {
114
118
  collectVariablesReadInCatchOrFinally(tryStmt, context);
115
119
  },
116
120
  'Program:exit': () => {
117
- (0, index_js_1.lva)(liveVariablesMap);
121
+ (0, lva_js_1.lva)(liveVariablesMap);
118
122
  for (const lva of liveVariablesMap.values()) {
119
123
  checkSegment(lva);
120
124
  reportNeverReadVariables(lva);
@@ -122,7 +126,7 @@ exports.rule = {
122
126
  },
123
127
  // CodePath events
124
128
  onCodePathSegmentStart: (segment) => {
125
- liveVariablesMap.set(segment.id, new index_js_1.LiveVariables(segment));
129
+ liveVariablesMap.set(segment.id, new lva_js_1.LiveVariables(segment));
126
130
  currentCodePathSegments.push(segment);
127
131
  },
128
132
  onCodePathStart: codePath => {
@@ -139,10 +143,10 @@ exports.rule = {
139
143
  },
140
144
  };
141
145
  function pushAssignmentContext(node) {
142
- (0, index_js_1.last)(codePathStack).assignmentStack.push(new AssignmentContext(node));
146
+ (0, collection_js_1.last)(codePathStack).assignmentStack.push(new AssignmentContext(node));
143
147
  }
144
148
  function popAssignmentContext() {
145
- const assignment = (0, index_js_1.last)(codePathStack).assignmentStack.pop();
149
+ const assignment = (0, collection_js_1.last)(codePathStack).assignmentStack.pop();
146
150
  for (const r of assignment.rhs) {
147
151
  processReference(r);
148
152
  }
@@ -201,7 +205,7 @@ exports.rule = {
201
205
  }
202
206
  function isNullAssignment(ref) {
203
207
  const parent = ref.identifier.parent;
204
- return parent?.type === 'AssignmentExpression' && (0, index_js_1.isNullLiteral)(parent.right);
208
+ return parent?.type === 'AssignmentExpression' && (0, ast_js_1.isNullLiteral)(parent.right);
205
209
  }
206
210
  function isEnumConstant(node) {
207
211
  return context.sourceCode.getAncestors(node).some(n => n.type === 'TSEnumDeclaration');
@@ -254,9 +258,9 @@ exports.rule = {
254
258
  return { ref: jsxReference, variable: jsxReference.resolved };
255
259
  }
256
260
  function processReference(ref) {
257
- const assignmentStack = (0, index_js_1.last)(codePathStack).assignmentStack;
261
+ const assignmentStack = (0, collection_js_1.last)(codePathStack).assignmentStack;
258
262
  if (assignmentStack.length > 0) {
259
- const assignment = (0, index_js_1.last)(assignmentStack);
263
+ const assignment = (0, collection_js_1.last)(assignmentStack);
260
264
  assignment.add(ref);
261
265
  }
262
266
  else {
@@ -271,7 +275,7 @@ exports.rule = {
271
275
  lva = liveVariablesMap.get(segment.id);
272
276
  }
273
277
  else {
274
- lva = new index_js_1.LiveVariables(segment);
278
+ lva = new lva_js_1.LiveVariables(segment);
275
279
  liveVariablesMap.set(segment.id, lva);
276
280
  }
277
281
  return lva;
@@ -283,7 +287,7 @@ exports.rule = {
283
287
  }
284
288
  }
285
289
  function updateVariableUsages(variable) {
286
- const codePathId = (0, index_js_1.last)(codePathStack).codePath.id;
290
+ const codePathId = (0, collection_js_1.last)(codePathStack).codePath.id;
287
291
  if (variableUsages.has(variable)) {
288
292
  variableUsages.get(variable).add(codePathId);
289
293
  }
@@ -352,7 +356,7 @@ exports.rule = {
352
356
  callback(node);
353
357
  return;
354
358
  }
355
- for (const child of (0, index_js_1.childrenOf)(node, context.sourceCode.visitorKeys)) {
359
+ for (const child of (0, ancestor_js_1.childrenOf)(node, context.sourceCode.visitorKeys)) {
356
360
  visitIdentifiers(child, callback, visited);
357
361
  }
358
362
  }
package/cjs/S1862/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 index_js_1 = require("../helpers/index.js");
54
+ const equivalence_js_1 = require("../helpers/equivalence.js");
55
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
56
+ const location_js_1 = require("../helpers/location.js");
55
57
  const meta = __importStar(require("./generated-meta.js"));
56
58
  const duplicatedConditionMessage = 'This condition is covered by the one on line {{line}}';
57
59
  const duplicatedCaseMessage = 'This case duplicates the one on line {{line}}';
58
60
  exports.rule = {
59
- meta: (0, index_js_1.generateMeta)(meta, {
61
+ meta: (0, generate_meta_js_1.generateMeta)(meta, {
60
62
  messages: {
61
63
  duplicatedCondition: duplicatedConditionMessage,
62
64
  duplicatedCase: duplicatedCaseMessage,
@@ -77,12 +79,12 @@ exports.rule = {
77
79
  const currentOrOperands = splitByOr(current.test).map(splitByAnd);
78
80
  operandsToCheck = operandsToCheck.map(orOperands => orOperands.filter(orOperand => !currentOrOperands.some(currentOrOperand => isSubset(currentOrOperand, orOperand, sourceCode))));
79
81
  if (operandsToCheck.some(orOperands => orOperands.length === 0)) {
80
- (0, index_js_1.report)(context, {
82
+ (0, location_js_1.report)(context, {
81
83
  message: duplicatedConditionMessage,
82
84
  messageId: 'duplicatedCondition',
83
85
  data: { line: current.test.loc.start.line },
84
86
  node: test,
85
- }, [(0, index_js_1.toSecondaryLocation)({ loc: current.test.loc }, 'Covering')]);
87
+ }, [(0, location_js_1.toSecondaryLocation)({ loc: current.test.loc }, 'Covering')]);
86
88
  break;
87
89
  }
88
90
  }
@@ -92,16 +94,16 @@ exports.rule = {
92
94
  for (const switchCase of switchStmt.cases) {
93
95
  if (switchCase.test) {
94
96
  const { test } = switchCase;
95
- const duplicateTest = previousTests.find(previousTest => (0, index_js_1.areEquivalent)(test, previousTest, sourceCode));
97
+ const duplicateTest = previousTests.find(previousTest => (0, equivalence_js_1.areEquivalent)(test, previousTest, sourceCode));
96
98
  if (duplicateTest) {
97
- (0, index_js_1.report)(context, {
99
+ (0, location_js_1.report)(context, {
98
100
  messageId: 'duplicatedCase',
99
101
  message: duplicatedCaseMessage,
100
102
  data: {
101
103
  line: duplicateTest.loc.start.line,
102
104
  },
103
105
  node: test,
104
- }, [(0, index_js_1.toSecondaryLocation)({ loc: duplicateTest.loc }, 'Original')]);
106
+ }, [(0, location_js_1.toSecondaryLocation)({ loc: duplicateTest.loc }, 'Original')]);
105
107
  }
106
108
  else {
107
109
  previousTests.push(test);
@@ -139,6 +141,6 @@ function isSubset(first, second, sourceCode) {
139
141
  isSubsetOf(first.right, second1.left, sourceCode)));
140
142
  }
141
143
  }
142
- return (0, index_js_1.areEquivalent)(first, second, sourceCode);
144
+ return (0, equivalence_js_1.areEquivalent)(first, second, sourceCode);
143
145
  }
144
146
  }
package/cjs/S1871/rule.js CHANGED
@@ -51,11 +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 index_js_1 = require("../helpers/index.js");
54
+ const equivalence_js_1 = require("../helpers/equivalence.js");
55
+ const conditions_js_1 = require("../helpers/conditions.js");
56
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
57
+ const ast_js_1 = require("../helpers/ast.js");
58
+ const collection_js_1 = require("../helpers/collection.js");
59
+ const location_js_1 = require("../helpers/location.js");
55
60
  const meta = __importStar(require("./generated-meta.js"));
56
61
  const message = "This {{type}}'s code block is the same as the block for the {{type}} on line {{line}}.";
57
62
  exports.rule = {
58
- meta: (0, index_js_1.generateMeta)(meta, {
63
+ meta: (0, generate_meta_js_1.generateMeta)(meta, {
59
64
  messages: {
60
65
  sameConditionalBlock: message,
61
66
  },
@@ -70,10 +75,10 @@ exports.rule = {
70
75
  },
71
76
  };
72
77
  function visitIfStatement(ifStmt) {
73
- if ((0, index_js_1.isIfStatement)(ifStmt.parent)) {
78
+ if ((0, ast_js_1.isIfStatement)(ifStmt.parent)) {
74
79
  return;
75
80
  }
76
- const { branches, endsWithElse } = (0, index_js_1.collectIfBranches)(ifStmt);
81
+ const { branches, endsWithElse } = (0, conditions_js_1.collectIfBranches)(ifStmt);
77
82
  if (allEquivalentWithoutDefault(branches, endsWithElse)) {
78
83
  for (const [i, branch] of branches.slice(1).entries()) {
79
84
  reportIssue(branch, branches[i], 'branch');
@@ -92,9 +97,9 @@ exports.rule = {
92
97
  }
93
98
  function visitSwitchStatement(switchStmt) {
94
99
  const { cases } = switchStmt;
95
- const { endsWithDefault } = (0, index_js_1.collectSwitchBranches)(switchStmt);
96
- const nonEmptyCases = cases.filter(c => (0, index_js_1.takeWithoutBreak)(expandSingleBlockStatement(c.consequent)).length > 0);
97
- const casesWithoutBreak = nonEmptyCases.map(c => (0, index_js_1.takeWithoutBreak)(expandSingleBlockStatement(c.consequent)));
100
+ const { endsWithDefault } = (0, conditions_js_1.collectSwitchBranches)(switchStmt);
101
+ const nonEmptyCases = cases.filter(c => (0, conditions_js_1.takeWithoutBreak)(expandSingleBlockStatement(c.consequent)).length > 0);
102
+ const casesWithoutBreak = nonEmptyCases.map(c => (0, conditions_js_1.takeWithoutBreak)(expandSingleBlockStatement(c.consequent)));
98
103
  if (allEquivalentWithoutDefault(casesWithoutBreak, endsWithDefault)) {
99
104
  for (const [i, caseStmt] of nonEmptyCases.slice(1).entries()) {
100
105
  reportIssue(caseStmt, nonEmptyCases[i], 'case');
@@ -102,11 +107,11 @@ exports.rule = {
102
107
  return;
103
108
  }
104
109
  for (let i = 1; i < cases.length; i++) {
105
- const firstClauseWithoutBreak = (0, index_js_1.takeWithoutBreak)(expandSingleBlockStatement(cases[i].consequent));
110
+ const firstClauseWithoutBreak = (0, conditions_js_1.takeWithoutBreak)(expandSingleBlockStatement(cases[i].consequent));
106
111
  if (hasRequiredSize(firstClauseWithoutBreak)) {
107
112
  for (let j = 0; j < i; j++) {
108
- const secondClauseWithoutBreak = (0, index_js_1.takeWithoutBreak)(expandSingleBlockStatement(cases[j].consequent));
109
- if ((0, index_js_1.areEquivalent)(firstClauseWithoutBreak, secondClauseWithoutBreak, context.sourceCode)) {
113
+ const secondClauseWithoutBreak = (0, conditions_js_1.takeWithoutBreak)(expandSingleBlockStatement(cases[j].consequent));
114
+ if ((0, equivalence_js_1.areEquivalent)(firstClauseWithoutBreak, secondClauseWithoutBreak, context.sourceCode)) {
110
115
  reportIssue(cases[i], cases[j], 'case');
111
116
  break;
112
117
  }
@@ -118,14 +123,14 @@ exports.rule = {
118
123
  if (nodes.length > 0) {
119
124
  const tokens = [
120
125
  ...context.sourceCode.getTokens(nodes[0]),
121
- ...context.sourceCode.getTokens((0, index_js_1.last)(nodes)),
126
+ ...context.sourceCode.getTokens((0, collection_js_1.last)(nodes)),
122
127
  ].filter(token => token.value !== '{' && token.value !== '}');
123
- return tokens.length > 0 && (0, index_js_1.last)(tokens).loc.end.line > tokens[0].loc.start.line;
128
+ return tokens.length > 0 && (0, collection_js_1.last)(tokens).loc.end.line > tokens[0].loc.start.line;
124
129
  }
125
130
  return false;
126
131
  }
127
132
  function compareIfBranches(a, b) {
128
- const equivalent = (0, index_js_1.areEquivalent)(a, b, context.sourceCode);
133
+ const equivalent = (0, equivalence_js_1.areEquivalent)(a, b, context.sourceCode);
129
134
  if (equivalent && b.loc) {
130
135
  reportIssue(a, b, 'branch');
131
136
  }
@@ -136,16 +141,16 @@ exports.rule = {
136
141
  branches.length > 1 &&
137
142
  branches
138
143
  .slice(1)
139
- .every((branch, index) => (0, index_js_1.areEquivalent)(branch, branches[index], context.sourceCode)));
144
+ .every((branch, index) => (0, equivalence_js_1.areEquivalent)(branch, branches[index], context.sourceCode)));
140
145
  }
141
146
  function reportIssue(node, equivalentNode, type) {
142
147
  const equivalentNodeLoc = equivalentNode.loc;
143
- (0, index_js_1.report)(context, {
148
+ (0, location_js_1.report)(context, {
144
149
  message,
145
150
  messageId: 'sameConditionalBlock',
146
151
  data: { type, line: String(equivalentNodeLoc.start.line) },
147
152
  node,
148
- }, [(0, index_js_1.toSecondaryLocation)(equivalentNode, 'Original')]);
153
+ }, [(0, location_js_1.toSecondaryLocation)(equivalentNode, 'Original')]);
149
154
  }
150
155
  },
151
156
  };
package/cjs/S1874/rule.js CHANGED
@@ -51,17 +51,18 @@ var __importStar = (this && this.__importStar) || (function () {
51
51
  })();
52
52
  Object.defineProperty(exports, "__esModule", { value: true });
53
53
  exports.rule = void 0;
54
- const index_js_1 = require("../helpers/index.js");
54
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
55
+ const parser_services_js_1 = require("../helpers/parser-services.js");
55
56
  const meta = __importStar(require("./generated-meta.js"));
56
57
  exports.rule = {
57
- meta: (0, index_js_1.generateMeta)(meta, {
58
+ meta: (0, generate_meta_js_1.generateMeta)(meta, {
58
59
  messages: {
59
60
  deprecation: '{{deprecation}}',
60
61
  },
61
62
  }),
62
63
  create(context) {
63
64
  const services = context.sourceCode.parserServices;
64
- if (!(0, index_js_1.isRequiredParserServices)(services)) {
65
+ if (!(0, parser_services_js_1.isRequiredParserServices)(services)) {
65
66
  return {};
66
67
  }
67
68
  return {
package/cjs/S1940/rule.js CHANGED
@@ -51,7 +51,7 @@ var __importStar = (this && this.__importStar) || (function () {
51
51
  })();
52
52
  Object.defineProperty(exports, "__esModule", { value: true });
53
53
  exports.rule = void 0;
54
- const index_js_1 = require("../helpers/index.js");
54
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
55
55
  const meta = __importStar(require("./generated-meta.js"));
56
56
  const invertedOperators = {
57
57
  '==': '!=',
@@ -64,7 +64,7 @@ const invertedOperators = {
64
64
  '<=': '>',
65
65
  };
66
66
  exports.rule = {
67
- meta: (0, index_js_1.generateMeta)(meta, {
67
+ meta: (0, generate_meta_js_1.generateMeta)(meta, {
68
68
  messages: {
69
69
  useOppositeOperator: 'Use the opposite operator ({{invertedOperator}}) instead.',
70
70
  suggestOperationInversion: 'Invert inner operation (apply if NaN is not expected)',
package/cjs/S1994/rule.js CHANGED
@@ -51,7 +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 index_js_1 = require("../helpers/index.js");
54
+ const equivalence_js_1 = require("../helpers/equivalence.js");
55
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
56
+ const ancestor_js_1 = require("../helpers/ancestor.js");
57
+ const collection_js_1 = require("../helpers/collection.js");
55
58
  const meta = __importStar(require("./generated-meta.js"));
56
59
  class ForInfo {
57
60
  constructor(forLoop) {
@@ -61,7 +64,7 @@ class ForInfo {
61
64
  }
62
65
  }
63
66
  exports.rule = {
64
- meta: (0, index_js_1.generateMeta)(meta, {
67
+ meta: (0, generate_meta_js_1.generateMeta)(meta, {
65
68
  messages: {
66
69
  misplacedCounter: `This loop's stop condition tests "{{test}}" but the incrementer updates "{{update}}".`,
67
70
  },
@@ -90,7 +93,7 @@ exports.rule = {
90
93
  return false;
91
94
  }
92
95
  function peekFor() {
93
- return (0, index_js_1.last)(forLoopStack);
96
+ return (0, collection_js_1.last)(forLoopStack);
94
97
  }
95
98
  return {
96
99
  ForStatement: (node) => {
@@ -101,7 +104,7 @@ exports.rule = {
101
104
  if (forInfo.updatedExpressions.length === 0 || !forInfo.forLoop.test) {
102
105
  return;
103
106
  }
104
- const hasIntersection = forInfo.testedExpressions.some(testedExpr => forInfo.updatedExpressions.some(updatedExpr => (0, index_js_1.areEquivalent)(updatedExpr, testedExpr, context.sourceCode)));
107
+ const hasIntersection = forInfo.testedExpressions.some(testedExpr => forInfo.updatedExpressions.some(updatedExpr => (0, equivalence_js_1.areEquivalent)(updatedExpr, testedExpr, context.sourceCode)));
105
108
  if (!hasIntersection) {
106
109
  context.report({
107
110
  loc: context.sourceCode.getFirstToken(forInfo.forLoop).loc,
@@ -140,7 +143,7 @@ exports.rule = {
140
143
  },
141
144
  'ForStatement Identifier': (node) => {
142
145
  if (isInsideTest(node)) {
143
- const parent = (0, index_js_1.getParent)(context, node);
146
+ const parent = (0, ancestor_js_1.getParent)(context, node);
144
147
  if (parent.type !== 'MemberExpression' || parent.computed || parent.object === node) {
145
148
  peekFor().testedExpressions.push(node);
146
149
  }
@@ -148,8 +151,8 @@ exports.rule = {
148
151
  },
149
152
  'ForStatement MemberExpression': (node) => {
150
153
  if (isInsideTest(node) &&
151
- (0, index_js_1.getParent)(context, node).type !== 'MemberExpression' &&
152
- (0, index_js_1.getParent)(context, node).type !== 'CallExpression') {
154
+ (0, ancestor_js_1.getParent)(context, node).type !== 'MemberExpression' &&
155
+ (0, ancestor_js_1.getParent)(context, node).type !== 'CallExpression') {
153
156
  peekFor().testedExpressions.push(node);
154
157
  }
155
158
  },
package/cjs/S2004/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 index_js_1 = require("../helpers/index.js");
54
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
55
+ const location_js_1 = require("../helpers/location.js");
56
+ const test_frameworks_js_1 = require("../helpers/test-frameworks.js");
55
57
  const meta = __importStar(require("./generated-meta.js"));
56
58
  const DEFAULT_THRESHOLD = 4;
57
59
  /**
@@ -63,10 +65,10 @@ function isTestFrameworkCallback(node) {
63
65
  if (parent?.type !== 'CallExpression') {
64
66
  return false;
65
67
  }
66
- return (0, index_js_1.isTestFrameworkCall)(parent);
68
+ return (0, test_frameworks_js_1.isTestFrameworkCall)(parent);
67
69
  }
68
70
  exports.rule = {
69
- meta: (0, index_js_1.generateMeta)(meta),
71
+ meta: (0, generate_meta_js_1.generateMeta)(meta),
70
72
  create(context) {
71
73
  const max = context.options[0]?.threshold ?? DEFAULT_THRESHOLD;
72
74
  const nestedStack = [];
@@ -80,11 +82,11 @@ exports.rule = {
80
82
  nestedStack.push(fn);
81
83
  if (nestedStack.length === max + 1) {
82
84
  const secondaries = nestedStack.slice(0, -1);
83
- (0, index_js_1.report)(context, {
84
- loc: (0, index_js_1.getMainFunctionTokenLocation)(fn, fn.parent, context),
85
+ (0, location_js_1.report)(context, {
86
+ loc: (0, location_js_1.getMainFunctionTokenLocation)(fn, fn.parent, context),
85
87
  message: `Refactor this code to not nest functions more than ${max} levels deep.`,
86
- }, secondaries.map(n => (0, index_js_1.toSecondaryLocation)({
87
- loc: (0, index_js_1.getMainFunctionTokenLocation)(n, n.parent, context),
88
+ }, secondaries.map(n => (0, location_js_1.toSecondaryLocation)({
89
+ loc: (0, location_js_1.getMainFunctionTokenLocation)(n, n.parent, context),
88
90
  }, 'Nesting +1')));
89
91
  }
90
92
  },
package/cjs/S2068/rule.js CHANGED
@@ -54,17 +54,27 @@ 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 index_js_1 = require("../helpers/index.js");
57
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
58
+ const ast_js_1 = require("../helpers/ast.js");
59
+ const entropy_js_1 = require("../helpers/entropy.js");
58
60
  const node_path_1 = __importDefault(require("node:path"));
59
61
  const meta = __importStar(require("./generated-meta.js"));
60
62
  const DEFAULT_NAMES = ['password', 'pwd', 'passwd', 'passphrase'];
63
+ const ENTROPY_THRESHOLD = 3;
64
+ const MIN_PASSWORD_LENGTH = 5;
65
+ const NON_CREDENTIAL_CHARS = /[\s/["'\]<>]/;
66
+ const TEST_FILE_PATTERN = /\.(spec|test|mock)\.[jt]sx?$/;
61
67
  const messages = {
62
68
  reviewPassword: 'Review this potentially hard-coded password.',
63
69
  };
64
70
  exports.rule = {
65
- meta: (0, index_js_1.generateMeta)(meta, { messages }),
71
+ meta: (0, generate_meta_js_1.generateMeta)(meta, { messages }),
66
72
  create(context) {
67
- const dir = node_path_1.default.dirname(context.physicalFilename);
73
+ const filename = context.physicalFilename;
74
+ if (TEST_FILE_PATTERN.test(filename)) {
75
+ return {};
76
+ }
77
+ const dir = node_path_1.default.dirname(filename);
68
78
  const parts = dir.split(node_path_1.default.sep).map(part => part.toLowerCase());
69
79
  if (parts.includes('l10n')) {
70
80
  return {};
@@ -98,21 +108,74 @@ exports.rule = {
98
108
  };
99
109
  function checkAssignment(context, patterns, variable, initializer) {
100
110
  if (initializer &&
101
- (0, index_js_1.isStringLiteral)(initializer) &&
102
- initializer.value.length > 0 &&
103
- patterns.some(pattern => context.sourceCode.getText(variable).toLowerCase().includes(pattern))) {
111
+ patterns.some(pattern => context.sourceCode.getText(variable).toLowerCase().includes(pattern)) &&
112
+ findValueSuspect(initializer)) {
104
113
  context.report({
105
114
  messageId: 'reviewPassword',
106
115
  node: initializer,
107
116
  });
108
117
  }
109
118
  }
119
+ function findValueSuspect(node) {
120
+ if (!node) {
121
+ return false;
122
+ }
123
+ if ((0, ast_js_1.isStringLiteral)(node)) {
124
+ const value = node.value;
125
+ return (value.length >= MIN_PASSWORD_LENGTH &&
126
+ !NON_CREDENTIAL_CHARS.test(value) &&
127
+ hasHighEntropy(value));
128
+ }
129
+ if (node.type === 'ConditionalExpression') {
130
+ return findValueSuspect(node.consequent) || findValueSuspect(node.alternate);
131
+ }
132
+ if ((0, ast_js_1.isLogicalExpression)(node) &&
133
+ ['??', '||'].includes(node.operator)) {
134
+ return findValueSuspect(node.right);
135
+ }
136
+ return false;
137
+ }
110
138
  function checkLiteral(context, patterns, literal) {
111
- if ((0, index_js_1.isStringLiteral)(literal) &&
112
- patterns.some(pattern => pattern.test(literal.value.toLowerCase()))) {
113
- context.report({
114
- messageId: 'reviewPassword',
115
- node: literal,
116
- });
139
+ if (!(0, ast_js_1.isStringLiteral)(literal)) {
140
+ return;
117
141
  }
142
+ const value = literal.value;
143
+ const lowerValue = value.toLowerCase();
144
+ for (const pattern of patterns) {
145
+ const match = pattern.exec(lowerValue);
146
+ if (!match) {
147
+ continue;
148
+ }
149
+ const eqIndex = value.indexOf('=', match.index);
150
+ if (eqIndex === -1) {
151
+ continue;
152
+ }
153
+ const passwordValue = extractPasswordValue(value, eqIndex);
154
+ if (passwordValue.length >= MIN_PASSWORD_LENGTH && hasHighEntropy(passwordValue)) {
155
+ context.report({
156
+ messageId: 'reviewPassword',
157
+ node: literal,
158
+ });
159
+ return;
160
+ }
161
+ }
162
+ }
163
+ function extractPasswordValue(value, eqIndex) {
164
+ const passwordPart = value.substring(eqIndex + 1);
165
+ const nextSep = findNextSeparator(passwordPart);
166
+ return nextSep === -1 ? passwordPart : passwordPart.substring(0, nextSep);
167
+ }
168
+ function findNextSeparator(str) {
169
+ const separators = ['&', ' ', ';'];
170
+ let minIndex = -1;
171
+ for (const sep of separators) {
172
+ const idx = str.indexOf(sep);
173
+ if (idx !== -1 && (minIndex === -1 || idx < minIndex)) {
174
+ minIndex = idx;
175
+ }
176
+ }
177
+ return minIndex;
178
+ }
179
+ function hasHighEntropy(value) {
180
+ return (0, entropy_js_1.shannonEntropy)(value) > ENTROPY_THRESHOLD;
118
181
  }
@@ -39,7 +39,7 @@ exports.meta = {
39
39
  description: 'Formatting SQL queries is security-sensitive',
40
40
  recommended: true,
41
41
  url: 'https://sonarsource.github.io/rspec/#/rspec/S2077/javascript',
42
- requiresTypeChecking: false,
42
+ requiresTypeChecking: true,
43
43
  },
44
44
  fixable: undefined,
45
45
  deprecated: false,
package/cjs/S2077/rule.js CHANGED
@@ -51,7 +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 index_js_1 = require("../helpers/index.js");
54
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
55
+ const module_js_1 = require("../helpers/module.js");
56
+ const module_ts_js_1 = require("../helpers/module-ts.js");
57
+ const ast_js_1 = require("../helpers/ast.js");
58
+ const parser_services_js_1 = require("../helpers/parser-services.js");
55
59
  const meta = __importStar(require("./generated-meta.js"));
56
60
  const sqlQuerySignatures = new Set([
57
61
  'pg.Client.query',
@@ -72,23 +76,23 @@ const sqlQuerySignatures = new Set([
72
76
  'better-sqlite3.prepare',
73
77
  ]);
74
78
  exports.rule = {
75
- meta: (0, index_js_1.generateMeta)(meta, {
79
+ meta: (0, generate_meta_js_1.generateMeta)(meta, {
76
80
  messages: {
77
81
  safeQuery: `Make sure that executing SQL queries is safe here.`,
78
82
  },
79
83
  }),
80
84
  create(context) {
81
85
  const services = context.sourceCode.parserServices;
82
- const hasTypeInformation = (0, index_js_1.isRequiredParserServices)(services);
86
+ const hasTypeInformation = (0, parser_services_js_1.isRequiredParserServices)(services);
83
87
  return {
84
88
  CallExpression(node) {
85
89
  let fqn = null;
86
90
  if (hasTypeInformation) {
87
91
  const tsNode = services.esTreeNodeToTSNodeMap.get(node);
88
- fqn = (0, index_js_1.getFullyQualifiedNameTS)(services, tsNode);
92
+ fqn = (0, module_ts_js_1.getFullyQualifiedNameTS)(services, tsNode);
89
93
  }
90
94
  else {
91
- fqn = (0, index_js_1.getFullyQualifiedName)(context, node.callee);
95
+ fqn = (0, module_js_1.getFullyQualifiedName)(context, node.callee);
92
96
  }
93
97
  if (fqn && sqlQuerySignatures.has(fqn) && isQuestionable(node.arguments[0])) {
94
98
  context.report({
@@ -110,7 +114,7 @@ function isQuestionable(sqlQuery) {
110
114
  if (isConcatenation(sqlQuery)) {
111
115
  return isVariableConcat(sqlQuery);
112
116
  }
113
- return (sqlQuery.type === 'CallExpression' && (0, index_js_1.isMemberWithProperty)(sqlQuery.callee, 'concat', 'replace'));
117
+ return (sqlQuery.type === 'CallExpression' && (0, ast_js_1.isMemberWithProperty)(sqlQuery.callee, 'concat', 'replace'));
114
118
  }
115
119
  function isVariableConcat(node) {
116
120
  const { left, right } = node;
package/cjs/S2092/rule.js CHANGED
@@ -52,10 +52,10 @@ var __importStar = (this && this.__importStar) || (function () {
52
52
  Object.defineProperty(exports, "__esModule", { value: true });
53
53
  exports.rule = void 0;
54
54
  const cookie_flag_check_js_1 = require("../helpers/cookie-flag-check.js");
55
- const index_js_1 = require("../helpers/index.js");
55
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
56
56
  const meta = __importStar(require("./generated-meta.js"));
57
57
  exports.rule = {
58
- meta: (0, index_js_1.generateMeta)(meta),
58
+ meta: (0, generate_meta_js_1.generateMeta)(meta),
59
59
  create(context) {
60
60
  return {
61
61
  CallExpression: (node) => new cookie_flag_check_js_1.CookieFlagCheck(context, 'secure').checkCookiesFromCallExpression(node),
package/cjs/S2123/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 index_js_1 = require("../helpers/index.js");
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, index_js_1.generateMeta)(meta, {
57
+ meta: (0, generate_meta_js_1.generateMeta)(meta, {
58
58
  messages: {
59
59
  removeIncrement: 'Remove this {{updateOperator}}rement or correct the code not to waste it.',
60
60
  },
package/cjs/S2137/rule.js CHANGED
@@ -55,7 +55,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
55
55
  Object.defineProperty(exports, "__esModule", { value: true });
56
56
  exports.rule = void 0;
57
57
  const globals_1 = __importDefault(require("globals"));
58
- const index_js_1 = require("../helpers/index.js");
58
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
59
59
  const meta = __importStar(require("./generated-meta.js"));
60
60
  const illegalNames = new Set(['arguments']);
61
61
  const objectPrototypeProperties = new Set([
@@ -77,7 +77,7 @@ const getModificationIssue = (functionName) => ({
77
77
  data: { symbol: functionName },
78
78
  });
79
79
  exports.rule = {
80
- meta: (0, index_js_1.generateMeta)(meta, {
80
+ meta: (0, generate_meta_js_1.generateMeta)(meta, {
81
81
  messages: {
82
82
  removeModification: 'Remove the modification of "{{symbol}}".',
83
83
  forbidDeclaration: 'Do not use "{{symbol}}" to declare a {{type}} - use another name.',
package/cjs/S2138/rule.js CHANGED
@@ -51,17 +51,18 @@ var __importStar = (this && this.__importStar) || (function () {
51
51
  })();
52
52
  Object.defineProperty(exports, "__esModule", { value: true });
53
53
  exports.rule = void 0;
54
- const index_js_1 = require("../helpers/index.js");
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, index_js_1.generateMeta)(meta, {
58
+ meta: (0, generate_meta_js_1.generateMeta)(meta, {
58
59
  messages: {
59
60
  useNull: 'Use null instead.',
60
61
  },
61
62
  }),
62
63
  create(context) {
63
64
  function raiseOnUndefined(node) {
64
- if ((0, index_js_1.isUndefined)(node)) {
65
+ if ((0, ast_js_1.isUndefined)(node)) {
65
66
  context.report({
66
67
  messageId: 'useNull',
67
68
  node,