eslint-plugin-sonarjs 4.0.3 → 4.1.0

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 (810) hide show
  1. package/README.md +52 -56
  2. package/cjs/S100/generated-meta.js +2 -1
  3. package/cjs/S101/generated-meta.js +2 -1
  4. package/cjs/S104/generated-meta.js +2 -1
  5. package/cjs/S105/generated-meta.js +2 -1
  6. package/cjs/S1066/generated-meta.js +2 -1
  7. package/cjs/S1067/generated-meta.js +2 -1
  8. package/cjs/S1110/generated-meta.js +2 -1
  9. package/cjs/S1119/generated-meta.js +2 -1
  10. package/cjs/S1121/generated-meta.js +2 -1
  11. package/cjs/S1125/generated-meta.js +2 -1
  12. package/cjs/S1126/generated-meta.js +2 -1
  13. package/cjs/S1128/generated-meta.js +2 -1
  14. package/cjs/S1134/generated-meta.js +2 -1
  15. package/cjs/S1135/generated-meta.js +2 -1
  16. package/cjs/S1154/generated-meta.js +2 -1
  17. package/cjs/S1154/rule.js +21 -2
  18. package/cjs/S117/generated-meta.js +2 -1
  19. package/cjs/S1172/generated-meta.js +2 -1
  20. package/cjs/S1192/generated-meta.js +2 -1
  21. package/cjs/S1219/generated-meta.js +2 -1
  22. package/cjs/S1226/generated-meta.js +2 -1
  23. package/cjs/S124/generated-meta.js +2 -1
  24. package/cjs/{S2255 → S1244}/generated-meta.js +8 -7
  25. package/cjs/S1244/meta.js +21 -0
  26. package/cjs/S1244/rule.js +265 -0
  27. package/cjs/S125/generated-meta.js +3 -2
  28. package/cjs/S126/generated-meta.js +2 -1
  29. package/cjs/S1264/generated-meta.js +2 -1
  30. package/cjs/S128/generated-meta.js +2 -1
  31. package/cjs/S1291/generated-meta.js +2 -1
  32. package/cjs/S1301/generated-meta.js +3 -2
  33. package/cjs/S1313/generated-meta.js +2 -1
  34. package/cjs/S134/generated-meta.js +2 -1
  35. package/cjs/S135/generated-meta.js +2 -1
  36. package/cjs/S138/generated-meta.js +2 -1
  37. package/cjs/S1439/generated-meta.js +2 -1
  38. package/cjs/S1444/generated-meta.js +2 -1
  39. package/cjs/S1451/generated-meta.js +2 -1
  40. package/cjs/S1472/generated-meta.js +2 -1
  41. package/cjs/S1479/generated-meta.js +2 -1
  42. package/cjs/S1481/generated-meta.js +2 -1
  43. package/cjs/S1488/generated-meta.js +2 -1
  44. package/cjs/S1515/generated-meta.js +2 -1
  45. package/cjs/S1523/generated-meta.js +3 -2
  46. package/cjs/S1526/generated-meta.js +2 -1
  47. package/cjs/S1527/generated-meta.js +2 -1
  48. package/cjs/S1528/generated-meta.js +2 -1
  49. package/cjs/S1529/generated-meta.js +2 -1
  50. package/cjs/S1530/generated-meta.js +2 -1
  51. package/cjs/S1533/generated-meta.js +2 -1
  52. package/cjs/S1535/generated-meta.js +2 -1
  53. package/cjs/S1541/generated-meta.js +2 -1
  54. package/cjs/S1607/generated-meta.js +2 -1
  55. package/cjs/S1607/rule.js +72 -7
  56. package/cjs/S1764/generated-meta.js +2 -1
  57. package/cjs/S1821/generated-meta.js +2 -1
  58. package/cjs/S1848/generated-meta.js +2 -1
  59. package/cjs/S1854/generated-meta.js +2 -1
  60. package/cjs/S1862/generated-meta.js +2 -1
  61. package/cjs/S1871/generated-meta.js +2 -1
  62. package/cjs/S1874/generated-meta.js +2 -1
  63. package/cjs/S1940/generated-meta.js +2 -1
  64. package/cjs/S1994/generated-meta.js +2 -1
  65. package/cjs/S2004/generated-meta.js +2 -1
  66. package/cjs/S2068/generated-meta.js +2 -1
  67. package/cjs/S2068/rule.js +0 -14
  68. package/cjs/S2077/generated-meta.js +3 -2
  69. package/cjs/S2092/generated-meta.js +2 -1
  70. package/cjs/S2123/generated-meta.js +2 -1
  71. package/cjs/S2137/generated-meta.js +2 -1
  72. package/cjs/S2138/generated-meta.js +2 -1
  73. package/cjs/S2187/generated-meta.js +2 -1
  74. package/cjs/S2187/rule.js +50 -13
  75. package/cjs/S2201/generated-meta.js +2 -1
  76. package/cjs/S2208/generated-meta.js +2 -1
  77. package/cjs/S2234/generated-meta.js +2 -1
  78. package/cjs/S2245/generated-meta.js +3 -2
  79. package/cjs/S2251/generated-meta.js +2 -1
  80. package/cjs/S2259/generated-meta.js +2 -1
  81. package/cjs/S2301/generated-meta.js +2 -1
  82. package/cjs/S2310/generated-meta.js +2 -1
  83. package/cjs/S2392/generated-meta.js +2 -1
  84. package/cjs/S2424/generated-meta.js +2 -1
  85. package/cjs/S2428/generated-meta.js +2 -1
  86. package/cjs/S2486/generated-meta.js +2 -1
  87. package/cjs/S2589/generated-meta.js +2 -1
  88. package/cjs/S2598/generated-meta.js +2 -1
  89. package/cjs/S2612/generated-meta.js +2 -1
  90. package/cjs/S2639/generated-meta.js +2 -1
  91. package/cjs/S2681/generated-meta.js +2 -1
  92. package/cjs/S2692/generated-meta.js +2 -1
  93. package/cjs/S2699/generated-meta.js +2 -1
  94. package/cjs/S2699/rule.js +19 -5
  95. package/cjs/S2703/generated-meta.js +2 -1
  96. package/cjs/S2737/generated-meta.js +2 -1
  97. package/cjs/S2755/generated-meta.js +2 -1
  98. package/cjs/S2757/generated-meta.js +2 -1
  99. package/cjs/S2817/generated-meta.js +2 -1
  100. package/cjs/S2819/generated-meta.js +2 -1
  101. package/cjs/S2870/generated-meta.js +2 -1
  102. package/cjs/S2871/generated-meta.js +2 -1
  103. package/cjs/S2871/rule.js +85 -1
  104. package/cjs/S2970/generated-meta.js +2 -1
  105. package/cjs/S2990/generated-meta.js +2 -1
  106. package/cjs/S2999/generated-meta.js +2 -1
  107. package/cjs/S3001/generated-meta.js +2 -1
  108. package/cjs/S3003/generated-meta.js +2 -1
  109. package/cjs/S3317/generated-meta.js +2 -1
  110. package/cjs/S3330/generated-meta.js +3 -2
  111. package/cjs/S3358/generated-meta.js +2 -1
  112. package/cjs/S3402/generated-meta.js +2 -1
  113. package/cjs/S3403/generated-meta.js +2 -1
  114. package/cjs/S3403/rule.js +21 -1
  115. package/cjs/S3415/generated-meta.js +2 -1
  116. package/cjs/S3499/generated-meta.js +2 -1
  117. package/cjs/S3500/generated-meta.js +2 -1
  118. package/cjs/S3513/generated-meta.js +2 -1
  119. package/cjs/S3514/generated-meta.js +2 -1
  120. package/cjs/S3516/generated-meta.js +2 -1
  121. package/cjs/S3524/generated-meta.js +2 -1
  122. package/cjs/S3525/generated-meta.js +2 -1
  123. package/cjs/S3531/generated-meta.js +2 -1
  124. package/cjs/S3533/generated-meta.js +2 -1
  125. package/cjs/S3579/generated-meta.js +2 -1
  126. package/cjs/S3616/generated-meta.js +2 -1
  127. package/cjs/S3626/generated-meta.js +2 -1
  128. package/cjs/S3626/rule.js +1 -1
  129. package/cjs/S3686/generated-meta.js +2 -1
  130. package/cjs/S3699/generated-meta.js +2 -1
  131. package/cjs/S3735/generated-meta.js +2 -1
  132. package/cjs/S3757/generated-meta.js +2 -1
  133. package/cjs/S3757/rule.js +3 -1
  134. package/cjs/S3758/generated-meta.js +2 -1
  135. package/cjs/S3760/generated-meta.js +2 -1
  136. package/cjs/S3776/generated-meta.js +2 -1
  137. package/cjs/S3782/generated-meta.js +2 -1
  138. package/cjs/S3785/generated-meta.js +2 -1
  139. package/cjs/S3796/generated-meta.js +2 -1
  140. package/cjs/S3798/generated-meta.js +2 -1
  141. package/cjs/S3798/rule.js +57 -17
  142. package/cjs/S3800/generated-meta.js +2 -1
  143. package/cjs/S3801/generated-meta.js +2 -1
  144. package/cjs/S3827/generated-meta.js +2 -1
  145. package/cjs/S3923/generated-meta.js +2 -1
  146. package/cjs/S3972/generated-meta.js +2 -1
  147. package/cjs/S3973/generated-meta.js +2 -1
  148. package/cjs/S3981/generated-meta.js +2 -1
  149. package/cjs/S3984/generated-meta.js +2 -1
  150. package/cjs/S4030/generated-meta.js +2 -1
  151. package/cjs/S4036/generated-meta.js +3 -2
  152. package/cjs/S4043/generated-meta.js +2 -1
  153. package/cjs/S4139/generated-meta.js +2 -1
  154. package/cjs/S4143/generated-meta.js +2 -1
  155. package/cjs/S4144/generated-meta.js +2 -1
  156. package/cjs/S4158/generated-meta.js +2 -1
  157. package/cjs/S4165/generated-meta.js +2 -1
  158. package/cjs/S4322/generated-meta.js +2 -1
  159. package/cjs/S4323/generated-meta.js +2 -1
  160. package/cjs/S4324/generated-meta.js +2 -1
  161. package/cjs/S4328/generated-meta.js +2 -1
  162. package/cjs/S4328/rule.js +7 -2
  163. package/cjs/S4335/generated-meta.js +2 -1
  164. package/cjs/S4423/generated-meta.js +2 -1
  165. package/cjs/S4426/generated-meta.js +2 -1
  166. package/cjs/S4502/generated-meta.js +3 -2
  167. package/cjs/S4507/generated-meta.js +3 -2
  168. package/cjs/S4524/generated-meta.js +2 -1
  169. package/cjs/S4619/generated-meta.js +2 -1
  170. package/cjs/S4621/generated-meta.js +2 -1
  171. package/cjs/S4622/generated-meta.js +2 -1
  172. package/cjs/S4623/generated-meta.js +2 -1
  173. package/cjs/S4624/generated-meta.js +2 -1
  174. package/cjs/S4624/rule.js +2 -7
  175. package/cjs/S4634/generated-meta.js +2 -1
  176. package/cjs/S4721/generated-meta.js +5 -4
  177. package/cjs/S4782/generated-meta.js +2 -1
  178. package/cjs/S4782/rule.js +96 -14
  179. package/cjs/S4790/generated-meta.js +3 -2
  180. package/cjs/S4790/rule.js +217 -2
  181. package/cjs/S4798/generated-meta.js +2 -1
  182. package/cjs/S4822/generated-meta.js +2 -1
  183. package/cjs/S4830/generated-meta.js +2 -1
  184. package/cjs/S5042/generated-meta.js +2 -1
  185. package/cjs/S5122/generated-meta.js +2 -1
  186. package/cjs/S5148/generated-meta.js +2 -1
  187. package/cjs/S5247/generated-meta.js +3 -2
  188. package/cjs/S5256/generated-meta.js +2 -1
  189. package/cjs/S5257/generated-meta.js +2 -1
  190. package/cjs/S5260/generated-meta.js +2 -1
  191. package/cjs/S5264/generated-meta.js +2 -1
  192. package/cjs/S5332/generated-meta.js +3 -2
  193. package/cjs/S5332/rule.lib.js +54 -46
  194. package/cjs/S5443/generated-meta.js +2 -1
  195. package/cjs/S5527/generated-meta.js +2 -1
  196. package/cjs/S5542/generated-meta.js +2 -1
  197. package/cjs/S5547/generated-meta.js +2 -1
  198. package/cjs/S5604/generated-meta.js +5 -4
  199. package/cjs/S5659/generated-meta.js +2 -1
  200. package/cjs/S5689/generated-meta.js +2 -1
  201. package/cjs/S5691/generated-meta.js +5 -4
  202. package/cjs/S5693/generated-meta.js +2 -1
  203. package/cjs/S5693/rule.js +45 -1
  204. package/cjs/S5725/generated-meta.js +3 -2
  205. package/cjs/S5725/rule.js +75 -12
  206. package/cjs/S5728/generated-meta.js +3 -2
  207. package/cjs/S5730/generated-meta.js +5 -4
  208. package/cjs/S5732/generated-meta.js +5 -4
  209. package/cjs/S5734/generated-meta.js +3 -2
  210. package/cjs/S5736/generated-meta.js +3 -2
  211. package/cjs/S5739/generated-meta.js +3 -2
  212. package/cjs/S5757/generated-meta.js +5 -4
  213. package/cjs/S5759/generated-meta.js +5 -4
  214. package/cjs/S5842/generated-meta.js +2 -1
  215. package/cjs/S5843/generated-meta.js +2 -1
  216. package/cjs/S5845/generated-meta.js +52 -0
  217. package/cjs/S5845/meta.js +21 -0
  218. package/cjs/S5845/rule.js +296 -0
  219. package/cjs/S5850/generated-meta.js +2 -1
  220. package/cjs/S5852/generated-meta.js +3 -2
  221. package/cjs/S5852/rule.js +11 -3
  222. package/cjs/S5856/generated-meta.js +2 -1
  223. package/cjs/S5860/generated-meta.js +2 -1
  224. package/cjs/S5863/generated-meta.js +2 -1
  225. package/cjs/S5867/generated-meta.js +2 -1
  226. package/cjs/S5868/generated-meta.js +2 -1
  227. package/cjs/S5868/rule.js +54 -25
  228. package/cjs/S5869/generated-meta.js +2 -1
  229. package/cjs/S5876/generated-meta.js +2 -1
  230. package/cjs/S5906/assertion-suggestions.js +279 -0
  231. package/cjs/S5906/assertion-utils.js +103 -0
  232. package/cjs/S5906/cypress-suggestions.js +62 -0
  233. package/cjs/S5906/expect-chain.js +16 -0
  234. package/cjs/S5906/generated-meta.js +52 -0
  235. package/cjs/S5906/meta.js +21 -0
  236. package/cjs/S5906/playwright-suggestions.js +103 -0
  237. package/cjs/S5906/rule.js +365 -0
  238. package/cjs/S5914/generated-meta.js +52 -0
  239. package/cjs/{S4817 → S5914}/meta.js +1 -1
  240. package/cjs/S5914/rule.js +213 -0
  241. package/cjs/S5958/generated-meta.js +2 -1
  242. package/cjs/S5973/generated-meta.js +2 -1
  243. package/cjs/S5973/rule.js +1 -1
  244. package/cjs/S6019/generated-meta.js +2 -1
  245. package/cjs/S6035/generated-meta.js +2 -1
  246. package/cjs/S6079/generated-meta.js +2 -1
  247. package/cjs/S6080/generated-meta.js +2 -1
  248. package/cjs/S6092/generated-meta.js +2 -1
  249. package/cjs/S6249/generated-meta.js +3 -2
  250. package/cjs/S6252/generated-meta.js +3 -2
  251. package/cjs/S6265/generated-meta.js +2 -1
  252. package/cjs/S6268/generated-meta.js +3 -2
  253. package/cjs/S6270/generated-meta.js +2 -1
  254. package/cjs/S6275/generated-meta.js +2 -1
  255. package/cjs/S6281/generated-meta.js +3 -2
  256. package/cjs/S6281/rule.js +7 -20
  257. package/cjs/S6302/generated-meta.js +2 -1
  258. package/cjs/S6303/generated-meta.js +2 -1
  259. package/cjs/S6304/generated-meta.js +3 -2
  260. package/cjs/S6308/generated-meta.js +2 -1
  261. package/cjs/S6317/generated-meta.js +2 -1
  262. package/cjs/S6319/generated-meta.js +3 -2
  263. package/cjs/S6321/generated-meta.js +2 -1
  264. package/cjs/S6323/generated-meta.js +2 -1
  265. package/cjs/S6324/generated-meta.js +2 -1
  266. package/cjs/S6324/rule.js +5 -5
  267. package/cjs/S6326/generated-meta.js +2 -1
  268. package/cjs/S6327/generated-meta.js +3 -2
  269. package/cjs/S6328/generated-meta.js +2 -1
  270. package/cjs/S6329/generated-meta.js +3 -2
  271. package/cjs/S6330/generated-meta.js +2 -1
  272. package/cjs/S6331/generated-meta.js +2 -1
  273. package/cjs/S6332/generated-meta.js +3 -2
  274. package/cjs/S6333/generated-meta.js +3 -2
  275. package/cjs/S6351/generated-meta.js +2 -1
  276. package/cjs/S6353/generated-meta.js +2 -1
  277. package/cjs/S6397/generated-meta.js +2 -1
  278. package/cjs/S6418/generated-meta.js +2 -1
  279. package/cjs/S6426/generated-meta.js +2 -1
  280. package/cjs/S6426/rule.js +6 -1
  281. package/cjs/S6437/generated-meta.js +2 -1
  282. package/cjs/S6437/rule.js +4 -2
  283. package/cjs/S6439/generated-meta.js +2 -1
  284. package/cjs/S6442/generated-meta.js +2 -1
  285. package/cjs/S6443/generated-meta.js +2 -1
  286. package/cjs/S6486/generated-meta.js +2 -1
  287. package/cjs/S6486/rule.js +4 -4
  288. package/cjs/S6564/generated-meta.js +2 -1
  289. package/cjs/S6594/generated-meta.js +2 -1
  290. package/cjs/S6627/generated-meta.js +2 -1
  291. package/cjs/S6759/generated-meta.js +2 -1
  292. package/cjs/S6759/rule.js +31 -1
  293. package/cjs/S6958/generated-meta.js +2 -1
  294. package/cjs/S6959/generated-meta.js +2 -1
  295. package/cjs/S7059/generated-meta.js +2 -1
  296. package/cjs/S7639/generated-meta.js +2 -1
  297. package/cjs/S7790/generated-meta.js +2 -1
  298. package/cjs/S8441/generated-meta.js +2 -1
  299. package/cjs/S8479/generated-meta.js +3 -2
  300. package/cjs/{S4817 → S8754}/generated-meta.js +10 -9
  301. package/cjs/{S5743 → S8754}/meta.js +1 -1
  302. package/cjs/S8754/rule.js +289 -0
  303. package/cjs/{S4784 → S8780}/generated-meta.js +9 -8
  304. package/cjs/{S2255 → S8780}/meta.js +1 -1
  305. package/cjs/S8780/rule.js +321 -0
  306. package/cjs/S8781/generated-meta.js +52 -0
  307. package/cjs/{S4787 → S8781}/meta.js +1 -1
  308. package/cjs/{S4784 → S8781}/rule.js +38 -46
  309. package/cjs/S8782/generated-meta.js +52 -0
  310. package/cjs/{S4784 → S8782}/meta.js +1 -1
  311. package/cjs/S8782/rule.js +148 -0
  312. package/cjs/S8783/generated-meta.js +52 -0
  313. package/cjs/S8783/meta.js +21 -0
  314. package/cjs/S8783/rule.js +167 -0
  315. package/cjs/{S4787 → S8786}/generated-meta.js +9 -8
  316. package/cjs/S8786/meta.js +22 -0
  317. package/cjs/{S4818 → S8786}/rule.js +24 -20
  318. package/cjs/S881/generated-meta.js +2 -1
  319. package/cjs/S888/generated-meta.js +2 -1
  320. package/cjs/S930/generated-meta.js +2 -1
  321. package/cjs/helpers/assertions-chai-common.js +29 -0
  322. package/cjs/helpers/assertions-chai.js +331 -0
  323. package/cjs/helpers/assertions-cypress.js +95 -0
  324. package/cjs/helpers/assertions.js +285 -0
  325. package/cjs/helpers/ast.js +30 -0
  326. package/cjs/helpers/chai.js +1 -1
  327. package/cjs/helpers/configs.js +37 -1
  328. package/cjs/helpers/cypress.js +73 -0
  329. package/cjs/helpers/dependency-manifests/all-in-parent-dirs.js +92 -0
  330. package/cjs/helpers/{package-jsons → dependency-manifests}/closest.js +17 -9
  331. package/cjs/helpers/dependency-manifests/dependencies.js +255 -0
  332. package/cjs/helpers/dependency-manifests/index.js +78 -0
  333. package/cjs/helpers/dependency-manifests/parse.js +51 -0
  334. package/cjs/helpers/dependency-manifests/parsed-dependency-files.js +80 -0
  335. package/cjs/helpers/dependency-manifests/resolvers/deno.js +79 -0
  336. package/cjs/helpers/dependency-manifests/resolvers/helpers.js +41 -0
  337. package/cjs/helpers/dependency-manifests/resolvers/package-json.js +167 -0
  338. package/cjs/helpers/dependency-manifests/resolvers/types.js +4 -0
  339. package/cjs/helpers/files.js +29 -0
  340. package/cjs/helpers/find-up/all-in-parent-dirs.js +1 -0
  341. package/cjs/helpers/find-up/closest.js +1 -0
  342. package/cjs/helpers/find-up/find-minimatch.js +2 -2
  343. package/cjs/helpers/generate-meta.js +1 -1
  344. package/cjs/helpers/mocha-style-test-frameworks.js +132 -0
  345. package/cjs/helpers/mocha.js +17 -7
  346. package/cjs/helpers/module.js +116 -23
  347. package/cjs/helpers/numbers.js +62 -0
  348. package/cjs/helpers/playwright.js +13 -0
  349. package/cjs/helpers/regex/extract.js +21 -9
  350. package/cjs/helpers/regex/flags.js +12 -5
  351. package/cjs/helpers/sinon.js +0 -4
  352. package/cjs/helpers/supertest.js +0 -4
  353. package/cjs/helpers/test-file-pattern.js +63 -0
  354. package/cjs/helpers/type-origin.js +82 -0
  355. package/cjs/helpers/type.js +162 -1
  356. package/cjs/helpers/vitest.js +0 -4
  357. package/cjs/plugin-rules.js +296 -298
  358. package/docs/async-test-assertions.md +7 -0
  359. package/docs/aws-apigateway-public-api.md +1 -1
  360. package/docs/aws-ec2-rds-dms-public.md +1 -1
  361. package/docs/aws-efs-unencrypted.md +1 -1
  362. package/docs/aws-iam-all-resources-accessible.md +1 -1
  363. package/docs/aws-s3-bucket-insecure-http.md +1 -1
  364. package/docs/aws-s3-bucket-public-access.md +1 -1
  365. package/docs/aws-s3-bucket-versioning.md +1 -1
  366. package/docs/aws-sagemaker-unencrypted-notebook.md +1 -1
  367. package/docs/aws-sns-unencrypted-topics.md +1 -1
  368. package/docs/code-eval.md +1 -1
  369. package/docs/confidential-information-logging.md +4 -2
  370. package/docs/content-security-policy.md +1 -1
  371. package/docs/cookie-no-httponly.md +1 -1
  372. package/docs/csrf.md +1 -1
  373. package/docs/disabled-auto-escaping.md +1 -1
  374. package/docs/disabled-resource-integrity.md +1 -1
  375. package/docs/dompurify-unsafe-config.md +2 -0
  376. package/docs/frame-ancestors.md +4 -2
  377. package/docs/hashing.md +1 -1
  378. package/docs/hidden-files.md +4 -2
  379. package/docs/hooks-before-test-cases.md +7 -0
  380. package/docs/no-angular-bypass-sanitization.md +1 -1
  381. package/docs/no-clear-text-protocols.md +1 -1
  382. package/docs/no-commented-code.md +1 -1
  383. package/docs/no-duplicate-test-title.md +7 -0
  384. package/docs/no-empty-test-title.md +7 -0
  385. package/docs/no-floating-point-equality.md +7 -0
  386. package/docs/no-forced-browser-interaction.md +7 -0
  387. package/docs/no-incompatible-assertion-types.md +9 -0
  388. package/docs/no-intrusive-permissions.md +4 -2
  389. package/docs/no-ip-forward.md +4 -2
  390. package/docs/no-mime-sniff.md +1 -1
  391. package/docs/no-mixed-content.md +4 -2
  392. package/docs/no-os-command-from-path.md +1 -1
  393. package/docs/no-referrer-policy.md +1 -1
  394. package/docs/no-small-switch.md +2 -0
  395. package/docs/no-trivial-assertions.md +7 -0
  396. package/docs/os-command.md +4 -2
  397. package/docs/prefer-specific-assertions.md +9 -0
  398. package/docs/production-debug.md +1 -1
  399. package/docs/pseudo-random.md +1 -1
  400. package/docs/slow-regex.md +1 -1
  401. package/docs/sql-queries.md +1 -1
  402. package/docs/strict-transport-security.md +1 -1
  403. package/docs/super-linear-regex.md +7 -0
  404. package/package.json +5 -4
  405. package/types/S100/generated-meta.d.ts +1 -0
  406. package/types/S101/generated-meta.d.ts +1 -0
  407. package/types/S104/generated-meta.d.ts +1 -0
  408. package/types/S105/generated-meta.d.ts +1 -0
  409. package/types/S1066/generated-meta.d.ts +1 -0
  410. package/types/S1067/generated-meta.d.ts +1 -0
  411. package/types/S1110/generated-meta.d.ts +1 -0
  412. package/types/S1119/generated-meta.d.ts +1 -0
  413. package/types/S1121/generated-meta.d.ts +1 -0
  414. package/types/S1125/generated-meta.d.ts +1 -0
  415. package/types/S1126/generated-meta.d.ts +1 -0
  416. package/types/S1128/generated-meta.d.ts +1 -0
  417. package/types/S1134/generated-meta.d.ts +1 -0
  418. package/types/S1135/generated-meta.d.ts +1 -0
  419. package/types/S1154/generated-meta.d.ts +1 -0
  420. package/types/S117/generated-meta.d.ts +1 -0
  421. package/types/S1172/generated-meta.d.ts +1 -0
  422. package/types/S1192/generated-meta.d.ts +1 -0
  423. package/types/S1219/generated-meta.d.ts +1 -0
  424. package/types/S1226/generated-meta.d.ts +1 -0
  425. package/types/S124/generated-meta.d.ts +1 -0
  426. package/types/{S2255 → S1244}/generated-meta.d.ts +3 -2
  427. package/types/S1244/meta.d.ts +2 -0
  428. package/types/S125/generated-meta.d.ts +1 -0
  429. package/types/S126/generated-meta.d.ts +1 -0
  430. package/types/S1264/generated-meta.d.ts +1 -0
  431. package/types/S128/generated-meta.d.ts +1 -0
  432. package/types/S1291/generated-meta.d.ts +1 -0
  433. package/types/S1301/generated-meta.d.ts +2 -1
  434. package/types/S1313/generated-meta.d.ts +1 -0
  435. package/types/S134/generated-meta.d.ts +1 -0
  436. package/types/S135/generated-meta.d.ts +1 -0
  437. package/types/S138/generated-meta.d.ts +1 -0
  438. package/types/S1439/generated-meta.d.ts +1 -0
  439. package/types/S1444/generated-meta.d.ts +1 -0
  440. package/types/S1451/generated-meta.d.ts +1 -0
  441. package/types/S1472/generated-meta.d.ts +1 -0
  442. package/types/S1479/generated-meta.d.ts +1 -0
  443. package/types/S1481/generated-meta.d.ts +1 -0
  444. package/types/S1488/generated-meta.d.ts +1 -0
  445. package/types/S1515/generated-meta.d.ts +1 -0
  446. package/types/S1523/generated-meta.d.ts +1 -0
  447. package/types/S1526/generated-meta.d.ts +1 -0
  448. package/types/S1527/generated-meta.d.ts +1 -0
  449. package/types/S1528/generated-meta.d.ts +1 -0
  450. package/types/S1529/generated-meta.d.ts +1 -0
  451. package/types/S1530/generated-meta.d.ts +1 -0
  452. package/types/S1533/generated-meta.d.ts +1 -0
  453. package/types/S1535/generated-meta.d.ts +1 -0
  454. package/types/S1541/generated-meta.d.ts +1 -0
  455. package/types/S1607/generated-meta.d.ts +1 -0
  456. package/types/S1764/generated-meta.d.ts +1 -0
  457. package/types/S1821/generated-meta.d.ts +1 -0
  458. package/types/S1848/generated-meta.d.ts +1 -0
  459. package/types/S1854/generated-meta.d.ts +1 -0
  460. package/types/S1862/generated-meta.d.ts +1 -0
  461. package/types/S1871/generated-meta.d.ts +1 -0
  462. package/types/S1874/generated-meta.d.ts +1 -0
  463. package/types/S1940/generated-meta.d.ts +1 -0
  464. package/types/S1994/generated-meta.d.ts +1 -0
  465. package/types/S2004/generated-meta.d.ts +1 -0
  466. package/types/S2068/generated-meta.d.ts +1 -0
  467. package/types/S2077/generated-meta.d.ts +1 -0
  468. package/types/S2092/generated-meta.d.ts +1 -0
  469. package/types/S2123/generated-meta.d.ts +1 -0
  470. package/types/S2137/generated-meta.d.ts +1 -0
  471. package/types/S2138/generated-meta.d.ts +1 -0
  472. package/types/S2187/generated-meta.d.ts +1 -0
  473. package/types/S2201/generated-meta.d.ts +1 -0
  474. package/types/S2208/generated-meta.d.ts +1 -0
  475. package/types/S2234/generated-meta.d.ts +1 -0
  476. package/types/S2245/generated-meta.d.ts +1 -0
  477. package/types/S2251/generated-meta.d.ts +1 -0
  478. package/types/S2259/generated-meta.d.ts +1 -0
  479. package/types/S2301/generated-meta.d.ts +1 -0
  480. package/types/S2310/generated-meta.d.ts +1 -0
  481. package/types/S2392/generated-meta.d.ts +1 -0
  482. package/types/S2424/generated-meta.d.ts +1 -0
  483. package/types/S2428/generated-meta.d.ts +1 -0
  484. package/types/S2486/generated-meta.d.ts +1 -0
  485. package/types/S2589/generated-meta.d.ts +1 -0
  486. package/types/S2598/generated-meta.d.ts +1 -0
  487. package/types/S2612/generated-meta.d.ts +1 -0
  488. package/types/S2639/generated-meta.d.ts +1 -0
  489. package/types/S2681/generated-meta.d.ts +1 -0
  490. package/types/S2692/generated-meta.d.ts +1 -0
  491. package/types/S2699/generated-meta.d.ts +1 -0
  492. package/types/S2703/generated-meta.d.ts +1 -0
  493. package/types/S2737/generated-meta.d.ts +1 -0
  494. package/types/S2755/generated-meta.d.ts +1 -0
  495. package/types/S2757/generated-meta.d.ts +1 -0
  496. package/types/S2817/generated-meta.d.ts +1 -0
  497. package/types/S2819/generated-meta.d.ts +1 -0
  498. package/types/S2870/generated-meta.d.ts +1 -0
  499. package/types/S2871/generated-meta.d.ts +1 -0
  500. package/types/S2970/generated-meta.d.ts +1 -0
  501. package/types/S2990/generated-meta.d.ts +1 -0
  502. package/types/S2999/generated-meta.d.ts +1 -0
  503. package/types/S3001/generated-meta.d.ts +1 -0
  504. package/types/S3003/generated-meta.d.ts +1 -0
  505. package/types/S3317/generated-meta.d.ts +1 -0
  506. package/types/S3330/generated-meta.d.ts +1 -0
  507. package/types/S3358/generated-meta.d.ts +1 -0
  508. package/types/S3402/generated-meta.d.ts +1 -0
  509. package/types/S3403/generated-meta.d.ts +1 -0
  510. package/types/S3415/generated-meta.d.ts +1 -0
  511. package/types/S3499/generated-meta.d.ts +1 -0
  512. package/types/S3500/generated-meta.d.ts +1 -0
  513. package/types/S3513/generated-meta.d.ts +1 -0
  514. package/types/S3514/generated-meta.d.ts +1 -0
  515. package/types/S3516/generated-meta.d.ts +1 -0
  516. package/types/S3524/generated-meta.d.ts +1 -0
  517. package/types/S3525/generated-meta.d.ts +1 -0
  518. package/types/S3531/generated-meta.d.ts +1 -0
  519. package/types/S3533/generated-meta.d.ts +1 -0
  520. package/types/S3579/generated-meta.d.ts +1 -0
  521. package/types/S3616/generated-meta.d.ts +1 -0
  522. package/types/S3626/generated-meta.d.ts +1 -0
  523. package/types/S3686/generated-meta.d.ts +1 -0
  524. package/types/S3699/generated-meta.d.ts +1 -0
  525. package/types/S3735/generated-meta.d.ts +1 -0
  526. package/types/S3757/generated-meta.d.ts +1 -0
  527. package/types/S3758/generated-meta.d.ts +1 -0
  528. package/types/S3760/generated-meta.d.ts +1 -0
  529. package/types/S3776/generated-meta.d.ts +1 -0
  530. package/types/S3782/generated-meta.d.ts +1 -0
  531. package/types/S3785/generated-meta.d.ts +1 -0
  532. package/types/S3796/generated-meta.d.ts +1 -0
  533. package/types/S3798/generated-meta.d.ts +1 -0
  534. package/types/S3800/generated-meta.d.ts +1 -0
  535. package/types/S3801/generated-meta.d.ts +1 -0
  536. package/types/S3827/generated-meta.d.ts +1 -0
  537. package/types/S3923/generated-meta.d.ts +1 -0
  538. package/types/S3972/generated-meta.d.ts +1 -0
  539. package/types/S3973/generated-meta.d.ts +1 -0
  540. package/types/S3981/generated-meta.d.ts +1 -0
  541. package/types/S3984/generated-meta.d.ts +1 -0
  542. package/types/S4030/generated-meta.d.ts +1 -0
  543. package/types/S4036/generated-meta.d.ts +1 -0
  544. package/types/S4043/generated-meta.d.ts +1 -0
  545. package/types/S4139/generated-meta.d.ts +1 -0
  546. package/types/S4143/generated-meta.d.ts +1 -0
  547. package/types/S4144/generated-meta.d.ts +1 -0
  548. package/types/S4158/generated-meta.d.ts +1 -0
  549. package/types/S4165/generated-meta.d.ts +1 -0
  550. package/types/S4322/generated-meta.d.ts +1 -0
  551. package/types/S4323/generated-meta.d.ts +1 -0
  552. package/types/S4324/generated-meta.d.ts +1 -0
  553. package/types/S4328/generated-meta.d.ts +1 -0
  554. package/types/S4335/generated-meta.d.ts +1 -0
  555. package/types/S4423/generated-meta.d.ts +1 -0
  556. package/types/S4426/generated-meta.d.ts +1 -0
  557. package/types/S4502/generated-meta.d.ts +1 -0
  558. package/types/S4507/generated-meta.d.ts +1 -0
  559. package/types/S4524/generated-meta.d.ts +1 -0
  560. package/types/S4619/generated-meta.d.ts +1 -0
  561. package/types/S4621/generated-meta.d.ts +1 -0
  562. package/types/S4622/generated-meta.d.ts +1 -0
  563. package/types/S4623/generated-meta.d.ts +1 -0
  564. package/types/S4624/generated-meta.d.ts +1 -0
  565. package/types/S4634/generated-meta.d.ts +1 -0
  566. package/types/S4721/generated-meta.d.ts +2 -1
  567. package/types/S4782/generated-meta.d.ts +1 -0
  568. package/types/S4790/generated-meta.d.ts +1 -0
  569. package/types/S4798/generated-meta.d.ts +1 -0
  570. package/types/S4822/generated-meta.d.ts +1 -0
  571. package/types/S4830/generated-meta.d.ts +1 -0
  572. package/types/S5042/generated-meta.d.ts +1 -0
  573. package/types/S5122/generated-meta.d.ts +1 -0
  574. package/types/S5148/generated-meta.d.ts +1 -0
  575. package/types/S5247/generated-meta.d.ts +1 -0
  576. package/types/S5256/generated-meta.d.ts +1 -0
  577. package/types/S5257/generated-meta.d.ts +1 -0
  578. package/types/S5260/generated-meta.d.ts +1 -0
  579. package/types/S5264/generated-meta.d.ts +1 -0
  580. package/types/S5332/generated-meta.d.ts +1 -0
  581. package/types/S5443/generated-meta.d.ts +1 -0
  582. package/types/S5527/generated-meta.d.ts +1 -0
  583. package/types/S5542/generated-meta.d.ts +1 -0
  584. package/types/S5547/generated-meta.d.ts +1 -0
  585. package/types/S5604/generated-meta.d.ts +2 -1
  586. package/types/S5659/generated-meta.d.ts +1 -0
  587. package/types/S5689/generated-meta.d.ts +1 -0
  588. package/types/S5691/generated-meta.d.ts +2 -1
  589. package/types/S5693/generated-meta.d.ts +1 -0
  590. package/types/S5725/generated-meta.d.ts +1 -0
  591. package/types/S5728/generated-meta.d.ts +1 -0
  592. package/types/S5730/generated-meta.d.ts +2 -1
  593. package/types/S5732/generated-meta.d.ts +2 -1
  594. package/types/S5734/generated-meta.d.ts +1 -0
  595. package/types/S5736/generated-meta.d.ts +1 -0
  596. package/types/S5739/generated-meta.d.ts +1 -0
  597. package/types/S5757/generated-meta.d.ts +2 -1
  598. package/types/S5759/generated-meta.d.ts +2 -1
  599. package/types/S5842/generated-meta.d.ts +1 -0
  600. package/types/S5843/generated-meta.d.ts +1 -0
  601. package/types/S5845/generated-meta.d.ts +18 -0
  602. package/types/S5845/meta.d.ts +2 -0
  603. package/types/S5850/generated-meta.d.ts +1 -0
  604. package/types/S5852/generated-meta.d.ts +1 -0
  605. package/types/S5856/generated-meta.d.ts +1 -0
  606. package/types/S5860/generated-meta.d.ts +1 -0
  607. package/types/S5863/generated-meta.d.ts +1 -0
  608. package/types/S5867/generated-meta.d.ts +1 -0
  609. package/types/S5868/generated-meta.d.ts +1 -0
  610. package/types/S5869/generated-meta.d.ts +1 -0
  611. package/types/S5876/generated-meta.d.ts +1 -0
  612. package/types/S5906/assertion-suggestions.d.ts +7 -0
  613. package/types/S5906/assertion-utils.d.ts +14 -0
  614. package/types/S5906/cypress-suggestions.d.ts +4 -0
  615. package/types/S5906/expect-chain.d.ts +5 -0
  616. package/types/S5906/generated-meta.d.ts +18 -0
  617. package/types/S5906/meta.d.ts +2 -0
  618. package/types/S5906/playwright-suggestions.d.ts +4 -0
  619. package/types/{S4817 → S5914}/generated-meta.d.ts +5 -4
  620. package/types/S5914/meta.d.ts +2 -0
  621. package/types/S5958/generated-meta.d.ts +1 -0
  622. package/types/S5973/generated-meta.d.ts +1 -0
  623. package/types/S6019/generated-meta.d.ts +1 -0
  624. package/types/S6035/generated-meta.d.ts +1 -0
  625. package/types/S6079/generated-meta.d.ts +1 -0
  626. package/types/S6080/generated-meta.d.ts +1 -0
  627. package/types/S6092/generated-meta.d.ts +1 -0
  628. package/types/S6249/generated-meta.d.ts +1 -0
  629. package/types/S6252/generated-meta.d.ts +1 -0
  630. package/types/S6265/generated-meta.d.ts +1 -0
  631. package/types/S6268/generated-meta.d.ts +1 -0
  632. package/types/S6270/generated-meta.d.ts +1 -0
  633. package/types/S6275/generated-meta.d.ts +1 -0
  634. package/types/S6281/generated-meta.d.ts +1 -0
  635. package/types/S6302/generated-meta.d.ts +1 -0
  636. package/types/S6303/generated-meta.d.ts +1 -0
  637. package/types/S6304/generated-meta.d.ts +1 -0
  638. package/types/S6308/generated-meta.d.ts +1 -0
  639. package/types/S6317/generated-meta.d.ts +1 -0
  640. package/types/S6319/generated-meta.d.ts +1 -0
  641. package/types/S6321/generated-meta.d.ts +1 -0
  642. package/types/S6323/generated-meta.d.ts +1 -0
  643. package/types/S6324/generated-meta.d.ts +1 -0
  644. package/types/S6326/generated-meta.d.ts +1 -0
  645. package/types/S6327/generated-meta.d.ts +1 -0
  646. package/types/S6328/generated-meta.d.ts +1 -0
  647. package/types/S6329/generated-meta.d.ts +1 -0
  648. package/types/S6330/generated-meta.d.ts +1 -0
  649. package/types/S6331/generated-meta.d.ts +1 -0
  650. package/types/S6332/generated-meta.d.ts +1 -0
  651. package/types/S6333/generated-meta.d.ts +1 -0
  652. package/types/S6351/generated-meta.d.ts +1 -0
  653. package/types/S6353/generated-meta.d.ts +1 -0
  654. package/types/S6397/generated-meta.d.ts +1 -0
  655. package/types/S6418/generated-meta.d.ts +1 -0
  656. package/types/S6426/generated-meta.d.ts +1 -0
  657. package/types/S6437/generated-meta.d.ts +1 -0
  658. package/types/S6439/generated-meta.d.ts +1 -0
  659. package/types/S6442/generated-meta.d.ts +1 -0
  660. package/types/S6443/generated-meta.d.ts +1 -0
  661. package/types/S6486/generated-meta.d.ts +1 -0
  662. package/types/S6564/generated-meta.d.ts +1 -0
  663. package/types/S6594/generated-meta.d.ts +1 -0
  664. package/types/S6627/generated-meta.d.ts +1 -0
  665. package/types/S6759/generated-meta.d.ts +1 -0
  666. package/types/S6958/generated-meta.d.ts +1 -0
  667. package/types/S6959/generated-meta.d.ts +1 -0
  668. package/types/S7059/generated-meta.d.ts +1 -0
  669. package/types/S7639/generated-meta.d.ts +1 -0
  670. package/types/S7790/generated-meta.d.ts +1 -0
  671. package/types/S8441/generated-meta.d.ts +1 -0
  672. package/types/S8479/generated-meta.d.ts +2 -1
  673. package/types/S8754/generated-meta.d.ts +18 -0
  674. package/types/{S5743 → S8754}/meta.d.ts +1 -1
  675. package/types/{S4787 → S8780}/generated-meta.d.ts +4 -3
  676. package/types/S8780/meta.d.ts +2 -0
  677. package/types/S8781/generated-meta.d.ts +18 -0
  678. package/types/S8781/meta.d.ts +2 -0
  679. package/types/S8782/generated-meta.d.ts +18 -0
  680. package/types/S8782/meta.d.ts +2 -0
  681. package/types/S8783/generated-meta.d.ts +18 -0
  682. package/types/S8783/meta.d.ts +2 -0
  683. package/types/{S4784 → S8786}/generated-meta.d.ts +4 -3
  684. package/types/S8786/meta.d.ts +2 -0
  685. package/types/S881/generated-meta.d.ts +1 -0
  686. package/types/S888/generated-meta.d.ts +1 -0
  687. package/types/S930/generated-meta.d.ts +1 -0
  688. package/types/helpers/assertions-chai-common.d.ts +7 -0
  689. package/types/helpers/assertions-chai.d.ts +4 -0
  690. package/types/helpers/assertions-cypress.d.ts +7 -0
  691. package/types/helpers/assertions.d.ts +39 -0
  692. package/types/helpers/ast.d.ts +10 -0
  693. package/types/helpers/configs.d.ts +7 -38
  694. package/types/helpers/cypress.d.ts +11 -0
  695. package/types/helpers/dependency-manifests/all-in-parent-dirs.d.ts +18 -0
  696. package/types/helpers/dependency-manifests/closest.d.ts +5 -0
  697. package/types/helpers/{package-jsons → dependency-manifests}/dependencies.d.ts +22 -17
  698. package/types/helpers/dependency-manifests/index.d.ts +22 -0
  699. package/types/helpers/dependency-manifests/parse.d.ts +12 -0
  700. package/types/helpers/dependency-manifests/parsed-dependency-files.d.ts +8 -0
  701. package/types/helpers/dependency-manifests/resolvers/deno.d.ts +12 -0
  702. package/types/helpers/dependency-manifests/resolvers/helpers.d.ts +12 -0
  703. package/types/helpers/dependency-manifests/resolvers/package-json.d.ts +2 -0
  704. package/types/helpers/dependency-manifests/resolvers/types.d.ts +46 -0
  705. package/types/helpers/files.d.ts +10 -2
  706. package/types/helpers/generate-meta.d.ts +5 -0
  707. package/types/helpers/mocha-style-test-frameworks.d.ts +19 -0
  708. package/types/helpers/mocha.d.ts +7 -0
  709. package/types/helpers/module.d.ts +14 -8
  710. package/types/helpers/numbers.d.ts +4 -0
  711. package/types/helpers/playwright.d.ts +2 -0
  712. package/types/helpers/regex/extract.d.ts +7 -3
  713. package/types/helpers/sinon.d.ts +0 -1
  714. package/types/helpers/supertest.d.ts +0 -1
  715. package/types/helpers/test-file-pattern.d.ts +17 -0
  716. package/types/helpers/type-origin.d.ts +31 -0
  717. package/types/helpers/type.d.ts +92 -1
  718. package/types/helpers/vitest.d.ts +0 -1
  719. package/types/plugin-rules.d.ts +10 -11
  720. package/cjs/S2255/rule.js +0 -111
  721. package/cjs/S4787/rule.js +0 -124
  722. package/cjs/S4817/rule.js +0 -103
  723. package/cjs/S4818/generated-meta.js +0 -51
  724. package/cjs/S4818/meta.js +0 -21
  725. package/cjs/S4823/generated-meta.js +0 -51
  726. package/cjs/S4823/meta.js +0 -21
  727. package/cjs/S4823/rule.js +0 -75
  728. package/cjs/S4829/generated-meta.js +0 -51
  729. package/cjs/S4829/meta.js +0 -21
  730. package/cjs/S4829/rule.js +0 -75
  731. package/cjs/S5742/generated-meta.js +0 -51
  732. package/cjs/S5742/meta.js +0 -22
  733. package/cjs/S5742/rule.js +0 -75
  734. package/cjs/S5743/generated-meta.js +0 -51
  735. package/cjs/S5743/rule.js +0 -78
  736. package/cjs/S6245/generated-meta.js +0 -51
  737. package/cjs/S6245/meta.js +0 -22
  738. package/cjs/S6245/rule.js +0 -87
  739. package/cjs/S6299/generated-meta.js +0 -51
  740. package/cjs/S6299/index.js +0 -21
  741. package/cjs/S6299/meta.js +0 -21
  742. package/cjs/S6299/rule.js +0 -93
  743. package/cjs/helpers/package-jsons/all-in-parent-dirs.js +0 -31
  744. package/cjs/helpers/package-jsons/dependencies.js +0 -221
  745. package/cjs/helpers/package-jsons/index.js +0 -42
  746. package/cjs/helpers/package-jsons/parse.js +0 -79
  747. package/docs/aws-s3-bucket-server-encryption.md +0 -9
  748. package/docs/certificate-transparency.md +0 -9
  749. package/docs/cookies.md +0 -9
  750. package/docs/dns-prefetching.md +0 -9
  751. package/docs/encryption.md +0 -9
  752. package/docs/no-vue-bypass-sanitization.md +0 -9
  753. package/docs/process-argv.md +0 -9
  754. package/docs/regular-expr.md +0 -9
  755. package/docs/sockets.md +0 -9
  756. package/docs/standard-input.md +0 -9
  757. package/docs/xpath.md +0 -9
  758. package/types/S2255/meta.d.ts +0 -2
  759. package/types/S4784/meta.d.ts +0 -2
  760. package/types/S4787/meta.d.ts +0 -2
  761. package/types/S4817/meta.d.ts +0 -2
  762. package/types/S4818/generated-meta.d.ts +0 -17
  763. package/types/S4818/meta.d.ts +0 -2
  764. package/types/S4823/generated-meta.d.ts +0 -17
  765. package/types/S4823/meta.d.ts +0 -2
  766. package/types/S4829/generated-meta.d.ts +0 -17
  767. package/types/S4829/meta.d.ts +0 -2
  768. package/types/S5742/generated-meta.d.ts +0 -17
  769. package/types/S5742/meta.d.ts +0 -3
  770. package/types/S5743/generated-meta.d.ts +0 -17
  771. package/types/S6245/generated-meta.d.ts +0 -17
  772. package/types/S6245/meta.d.ts +0 -3
  773. package/types/S6299/generated-meta.d.ts +0 -17
  774. package/types/S6299/index.d.ts +0 -1
  775. package/types/S6299/meta.d.ts +0 -2
  776. package/types/S6299/rule.d.ts +0 -2
  777. package/types/helpers/package-jsons/all-in-parent-dirs.d.ts +0 -10
  778. package/types/helpers/package-jsons/closest.d.ts +0 -2
  779. package/types/helpers/package-jsons/index.d.ts +0 -8
  780. package/types/helpers/package-jsons/parse.d.ts +0 -13
  781. /package/cjs/{S2255 → S1244}/index.js +0 -0
  782. /package/cjs/{S4784 → S5845}/index.js +0 -0
  783. /package/cjs/{S4787 → S5906}/index.js +0 -0
  784. /package/cjs/{S4817 → S5914}/index.js +0 -0
  785. /package/cjs/{S4818 → S8754}/index.js +0 -0
  786. /package/cjs/{S4823 → S8780}/index.js +0 -0
  787. /package/cjs/{S4829 → S8781}/index.js +0 -0
  788. /package/cjs/{S5742 → S8782}/index.js +0 -0
  789. /package/cjs/{S5743 → S8783}/index.js +0 -0
  790. /package/cjs/{S6245 → S8786}/index.js +0 -0
  791. /package/types/{S2255 → S1244}/index.d.ts +0 -0
  792. /package/types/{S2255 → S1244}/rule.d.ts +0 -0
  793. /package/types/{S4784 → S5845}/index.d.ts +0 -0
  794. /package/types/{S4784 → S5845}/rule.d.ts +0 -0
  795. /package/types/{S4787 → S5906}/index.d.ts +0 -0
  796. /package/types/{S4787 → S5906}/rule.d.ts +0 -0
  797. /package/types/{S4817 → S5914}/index.d.ts +0 -0
  798. /package/types/{S4817 → S5914}/rule.d.ts +0 -0
  799. /package/types/{S4818 → S8754}/index.d.ts +0 -0
  800. /package/types/{S4818 → S8754}/rule.d.ts +0 -0
  801. /package/types/{S4823 → S8780}/index.d.ts +0 -0
  802. /package/types/{S4823 → S8780}/rule.d.ts +0 -0
  803. /package/types/{S4829 → S8781}/index.d.ts +0 -0
  804. /package/types/{S4829 → S8781}/rule.d.ts +0 -0
  805. /package/types/{S5742 → S8782}/index.d.ts +0 -0
  806. /package/types/{S5742 → S8782}/rule.d.ts +0 -0
  807. /package/types/{S5743 → S8783}/index.d.ts +0 -0
  808. /package/types/{S5743 → S8783}/rule.d.ts +0 -0
  809. /package/types/{S6245 → S8786}/index.d.ts +0 -0
  810. /package/types/{S6245 → S8786}/rule.d.ts +0 -0
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.packageJsonManifestResolver = void 0;
4
+ const files_js_1 = require("../../files.js");
5
+ const index_js_1 = require("../index.js");
6
+ const closest_js_1 = require("../../find-up/closest.js");
7
+ const helpers_js_1 = require("./helpers.js");
8
+ const parse_js_1 = require("../parse.js");
9
+ const parsed_dependency_files_js_1 = require("../parsed-dependency-files.js");
10
+ exports.packageJsonManifestResolver = {
11
+ resolve(dir, topDir, fileSystem) {
12
+ const packageJson = (0, helpers_js_1.getManifestFileInDir)(index_js_1.PACKAGE_JSON, dir, topDir, fileSystem);
13
+ if (!packageJson) {
14
+ return [];
15
+ }
16
+ let parsedPackageJson = (0, parsed_dependency_files_js_1.parsePackageJson)(packageJson) ?? {};
17
+ let catalogSource = undefined;
18
+ const closestParent = findClosestParentPackageJsonWithCatalogs(dir, topDir, fileSystem);
19
+ if (closestParent) {
20
+ // If the closest parent package.json has catalogs defined, we use it as the catalog source for resolving catalog references.
21
+ const workspaces = Array.isArray(closestParent.workspaces)
22
+ ? undefined
23
+ : closestParent.workspaces;
24
+ catalogSource = {
25
+ catalog: workspaces?.catalog ?? closestParent.catalog,
26
+ catalogs: workspaces?.catalogs ?? closestParent.catalogs,
27
+ };
28
+ }
29
+ else {
30
+ // No parent package.json with catalogs found, we check if there's a pnpm workspace file that we can use as a catalog source.
31
+ const pnpmWorkspaceFile = closest_js_1.closestPatternCache
32
+ .get(index_js_1.PNPM_WORKSPACE_YAML, fileSystem)
33
+ .get(topDir)
34
+ .get(dir);
35
+ const parsedPnpmWorkspace = pnpmWorkspaceFile
36
+ ? (0, parsed_dependency_files_js_1.parsePnpmWorkspace)(pnpmWorkspaceFile)
37
+ : undefined;
38
+ if (parsedPnpmWorkspace) {
39
+ parsedPackageJson = injectWorkspacePackages(parsedPackageJson, parsedPnpmWorkspace);
40
+ catalogSource = parsedPnpmWorkspace;
41
+ }
42
+ }
43
+ parsedPackageJson = resolveCatalogReferences(parsedPackageJson, catalogSource);
44
+ // Match Node's resolution: explicit "module" is ESM, anything else (including
45
+ // missing "type") is CommonJS.
46
+ const moduleType = parsedPackageJson.type === 'module' ? 'module' : 'commonjs';
47
+ return [
48
+ {
49
+ type: 'package-json',
50
+ manifest: parsedPackageJson,
51
+ dependencies: buildDependencies(parsedPackageJson),
52
+ moduleType,
53
+ },
54
+ ];
55
+ },
56
+ };
57
+ function buildDependencies(packageJson) {
58
+ const dependencies = new Map();
59
+ const fieldsToVisit = [
60
+ 'name',
61
+ 'dependencies',
62
+ 'devDependencies',
63
+ 'peerDependencies',
64
+ 'optionalDependencies',
65
+ '_moduleAliases',
66
+ 'workspaces',
67
+ ];
68
+ for (const field of fieldsToVisit) {
69
+ if (!packageJson[field]) {
70
+ continue;
71
+ }
72
+ if (field === 'name') {
73
+ (0, parse_js_1.addDependencies)(dependencies, { [packageJson[field]]: '*' });
74
+ continue;
75
+ }
76
+ if (field === 'workspaces') {
77
+ (0, parse_js_1.addDependenciesArray)(dependencies, Array.isArray(packageJson[field])
78
+ ? packageJson[field]
79
+ : (packageJson[field]?.packages ?? []));
80
+ continue;
81
+ }
82
+ (0, parse_js_1.addDependencies)(dependencies, packageJson[field]);
83
+ }
84
+ return dependencies;
85
+ }
86
+ function resolveCatalogReferences(packageJson, catalogSource) {
87
+ const depFields = [
88
+ 'dependencies',
89
+ 'devDependencies',
90
+ 'peerDependencies',
91
+ 'optionalDependencies',
92
+ ];
93
+ const modifiedPackageJson = { ...packageJson };
94
+ for (const field of depFields) {
95
+ const deps = packageJson[field];
96
+ if (!deps) {
97
+ continue;
98
+ }
99
+ const resolvedDeps = {};
100
+ for (const [depName, depVersion] of Object.entries(deps)) {
101
+ if (typeof depVersion === 'string' && depVersion.startsWith('catalog:')) {
102
+ const catalogName = depVersion.slice('catalog:'.length).trim() || 'default';
103
+ const resolvedDep = catalogName === 'default'
104
+ ? catalogSource?.catalog?.[depName]
105
+ : catalogSource?.catalogs?.[catalogName]?.[depName];
106
+ resolvedDeps[depName] = resolvedDep ?? depVersion;
107
+ !resolvedDep &&
108
+ console.debug(`Dependency "${depName}" could not be resolved for catalog "${catalogName}"`);
109
+ }
110
+ else {
111
+ resolvedDeps[depName] = depVersion ?? '';
112
+ }
113
+ }
114
+ modifiedPackageJson[field] = resolvedDeps;
115
+ }
116
+ return modifiedPackageJson;
117
+ }
118
+ function injectWorkspacePackages(packageJson, pnpmWorkspace) {
119
+ if (!pnpmWorkspace.packages || packageJson.workspaces) {
120
+ return packageJson;
121
+ }
122
+ return {
123
+ ...packageJson,
124
+ workspaces: pnpmWorkspace.packages,
125
+ };
126
+ }
127
+ /**
128
+ * Find the closest parent package.json with catalogs defined.
129
+ * @param dir Directory to start the search from
130
+ * @param topDir Top directory to stop the search at
131
+ * @param fileSystem Filesystem to use for the search
132
+ * @returns The closest parent package.json with catalogs, or undefined if no package.json with catalogs is found
133
+ */
134
+ function findClosestParentPackageJsonWithCatalogs(dir, topDir, fileSystem) {
135
+ if (dir === topDir) {
136
+ // No point in searching for parent package.json if we're already at the top directory.
137
+ return undefined;
138
+ }
139
+ let currentDir = (0, helpers_js_1.getParentDirPath)(dir);
140
+ const cache = closest_js_1.closestPatternCache.get(index_js_1.PACKAGE_JSON, fileSystem).get(topDir);
141
+ while (currentDir !== null) {
142
+ const file = cache.get(currentDir);
143
+ if (!file) {
144
+ return undefined;
145
+ }
146
+ const parsed = (0, parsed_dependency_files_js_1.parsePackageJson)(file);
147
+ if (parsed && hasCatalogs(parsed)) {
148
+ return parsed;
149
+ }
150
+ const fileDir = (0, files_js_1.dirnamePath)(file.filePath);
151
+ if (fileDir === topDir) {
152
+ return undefined;
153
+ }
154
+ currentDir = (0, helpers_js_1.getParentDirPath)(fileDir);
155
+ }
156
+ return undefined;
157
+ }
158
+ function hasCatalogs(packageJson) {
159
+ if (packageJson.catalog || packageJson.catalogs) {
160
+ return true;
161
+ }
162
+ const { workspaces } = packageJson;
163
+ if (workspaces && !Array.isArray(workspaces)) {
164
+ return !!(workspaces.catalog || workspaces.catalogs);
165
+ }
166
+ return false;
167
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFINITELY_TYPED = void 0;
4
+ exports.DEFINITELY_TYPED = '@types/';
@@ -5,8 +5,11 @@ exports.stripBOM = stripBOM;
5
5
  exports.normalizePath = normalizePath;
6
6
  exports.normalizeToAbsolutePath = normalizeToAbsolutePath;
7
7
  exports.isRoot = isRoot;
8
+ exports.assertNestedPath = assertNestedPath;
9
+ exports.getPathRoot = getPathRoot;
8
10
  exports.isAbsolutePath = isAbsolutePath;
9
11
  exports.dirnamePath = dirnamePath;
12
+ exports.relativeToAncestorPath = relativeToAncestorPath;
10
13
  exports.joinPaths = joinPaths;
11
14
  exports.basenamePath = basenamePath;
12
15
  /*
@@ -95,6 +98,25 @@ function isParseResultRoot(result) {
95
98
  function isRoot(file) {
96
99
  return isParseResultRoot((0, win32_1.parse)(file)) || isParseResultRoot((0, posix_1.parse)(file));
97
100
  }
101
+ function assertNestedPath(from, topDir) {
102
+ const fromSanitized = from.endsWith('/') ? from : from + '/';
103
+ const topDirSanitized = topDir.endsWith('/') ? topDir : topDir + '/';
104
+ if (!fromSanitized.startsWith(topDirSanitized)) {
105
+ throw new Error(`"${from}" is not nested under topDir "${topDir}"`);
106
+ }
107
+ }
108
+ /**
109
+ * Returns the filesystem root that contains the given absolute path.
110
+ * Examples: '/a/b' -> '/', 'C:/a/b' -> 'C:/', 'D:/foo' -> 'D:/'.
111
+ * Used as a cross-platform "no upper bound" sentinel for find-up callers.
112
+ */
113
+ function getPathRoot(filePath) {
114
+ const winRoot = (0, win32_1.parse)(filePath).root;
115
+ if (winRoot) {
116
+ return toUnixPath(winRoot);
117
+ }
118
+ return exports.ROOT_PATH;
119
+ }
98
120
  function isAbsolutePath(path) {
99
121
  // Check for Windows drive letter (e.g., 'c:', 'C:', 'D:')
100
122
  // Node's isAbsolute considers 'c:' as relative (drive-relative), but we treat it as absolute
@@ -112,6 +134,13 @@ function isAbsolutePath(path) {
112
134
  function dirnamePath(filePath) {
113
135
  return (0, posix_1.dirname)(filePath);
114
136
  }
137
+ function relativeToAncestorPath(filePath, topDir) {
138
+ const topDirPrefix = topDir.endsWith('/') ? topDir : `${topDir}/`;
139
+ if (filePath === topDir) {
140
+ return '';
141
+ }
142
+ return filePath.startsWith(topDirPrefix) ? filePath.slice(topDirPrefix.length) : undefined;
143
+ }
115
144
  /**
116
145
  * Type-safe path join that preserves the NormalizedAbsolutePath brand.
117
146
  * Joins path segments using posix separators.
@@ -18,6 +18,7 @@ exports.patternInParentsCache = new cache_js_1.ComputedCache((pattern, filesyste
18
18
  // handle path.dirname returning "." in windows
19
19
  return [];
20
20
  }
21
+ (0, files_js_1.assertNestedPath)(from, topDir);
21
22
  if (!(0, files_js_1.isRoot)(from) && from !== topDir) {
22
23
  const parent = (0, files_js_1.dirnamePath)(from);
23
24
  return [...readDir.get(from), ...newCache.get(parent)];
@@ -34,6 +34,7 @@ exports.closestPatternCache = new cache_js_1.ComputedCache((pattern, filesystem
34
34
  // handle path.dirname returning "." in windows
35
35
  return undefined;
36
36
  }
37
+ (0, files_js_1.assertNestedPath)(from, topDir);
37
38
  const matchingFiles = readDir.get(from);
38
39
  if (matchingFiles.length > 0) {
39
40
  return matchingFiles[0];
@@ -28,8 +28,8 @@ exports.MinimatchCache = new cache_js_1.ComputedCache((matcher, filesystem = nod
28
28
  }
29
29
  if (stats.isFile()) {
30
30
  files.push({
31
- path: fullEntryPath,
32
- content: filesystem.readFileSync(fullEntryPath),
31
+ filePath: fullEntryPath,
32
+ fileContent: filesystem.readFileSync(fullEntryPath, 'utf8'),
33
33
  });
34
34
  }
35
35
  }
@@ -20,7 +20,7 @@ function generateMeta(sonarMeta, ruleMeta) {
20
20
  };
21
21
  // If rules contains default options, we will augment them with our defaults.
22
22
  if (ruleMeta?.defaultOptions) {
23
- metadata.defaultOptions = (0, lodash_merge_1.default)(ruleMeta.defaultOptions, sonarMeta.meta.defaultOptions);
23
+ metadata.defaultOptions = (0, lodash_merge_1.default)([], ruleMeta.defaultOptions, sonarMeta.meta.defaultOptions);
24
24
  }
25
25
  // RSPEC metadata can include fixable also for rules with suggestions, because RSPEC doesn't differentiate between fix
26
26
  // and suggestion like ESLint does. That's why we set fixable using ruleMeta
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PLAYWRIGHT_DESCRIBE_FOCUS_MODIFIER = exports.PLAYWRIGHT_DESCRIBE_MODIFIERS = exports.PLAYWRIGHT_TEST_MODIFIERS = exports.SUITE_FUNCTION_NAMES = exports.TEST_FUNCTION_NAMES = exports.SUPPORTED_TEST_FRAMEWORKS = void 0;
4
+ exports.isMochaTestConstruct = isMochaTestConstruct;
5
+ exports.isConcreteMochaTestModifier = isConcreteMochaTestModifier;
6
+ exports.getMochaCalleeParts = getMochaCalleeParts;
7
+ exports.getMochaConstructName = getMochaConstructName;
8
+ exports.hasCallback = hasCallback;
9
+ exports.getStaticTitle = getStaticTitle;
10
+ exports.getPlaywrightTestQualifiers = getPlaywrightTestQualifiers;
11
+ exports.getPlaywrightDescribeQualifiers = getPlaywrightDescribeQualifiers;
12
+ const ast_js_1 = require("./ast.js");
13
+ const module_js_1 = require("./module.js");
14
+ exports.SUPPORTED_TEST_FRAMEWORKS = ['jest', 'mocha', 'vitest', '@playwright/test'];
15
+ const MOCHA_STYLE_TEST_FRAMEWORKS = new Set(['jest', 'mocha', 'vitest']);
16
+ exports.TEST_FUNCTION_NAMES = ['it', 'specify', 'test'];
17
+ exports.SUITE_FUNCTION_NAMES = ['describe', 'context', 'suite'];
18
+ const COMMON_MOCHA_TEST_MODIFIERS = new Set(['only', 'concurrent']);
19
+ const JEST_TEST_MODIFIERS = new Set(['failing']);
20
+ const VITEST_TEST_MODIFIERS = new Set(['sequential']);
21
+ const PLAYWRIGHT_TEST_FQN = '@playwright.test.test';
22
+ exports.PLAYWRIGHT_TEST_MODIFIERS = new Set(['only', 'fail']);
23
+ exports.PLAYWRIGHT_DESCRIBE_MODIFIERS = new Set(['parallel', 'serial']);
24
+ exports.PLAYWRIGHT_DESCRIBE_FOCUS_MODIFIER = 'only';
25
+ function isMochaTestConstruct(context, node, constructs) {
26
+ const calleeParts = getMochaCalleeParts(node.callee);
27
+ if (calleeParts === undefined) {
28
+ return false;
29
+ }
30
+ const constructName = getMochaConstructName(context, calleeParts.base);
31
+ if (constructName === undefined || !constructs.includes(constructName)) {
32
+ return false;
33
+ }
34
+ return calleeParts.modifiers.every(modifier => isConcreteMochaTestModifier(context, modifier));
35
+ }
36
+ function isConcreteMochaTestModifier(context, modifier) {
37
+ return (COMMON_MOCHA_TEST_MODIFIERS.has(modifier) ||
38
+ (JEST_TEST_MODIFIERS.has(modifier) && isTestFrameworkActive(context, 'jest')) ||
39
+ (VITEST_TEST_MODIFIERS.has(modifier) && isTestFrameworkActive(context, 'vitest')));
40
+ }
41
+ function isTestFrameworkActive(context, framework) {
42
+ return (0, module_js_1.importsOrDependsOnModule)(context, [framework], [framework]);
43
+ }
44
+ function getMochaCalleeParts(node) {
45
+ const modifiers = [];
46
+ let current = node;
47
+ while (true) {
48
+ if (current.type === 'CallExpression') {
49
+ current = current.callee;
50
+ }
51
+ else if (isQualifyingMember(current)) {
52
+ modifiers.unshift(current.property.name);
53
+ current = current.object;
54
+ }
55
+ else {
56
+ break;
57
+ }
58
+ }
59
+ return current.type === 'Identifier' ? { base: current, modifiers } : undefined;
60
+ }
61
+ function collectMemberChain(node) {
62
+ const qualifiers = [];
63
+ let current = node;
64
+ while (isQualifyingMember(current)) {
65
+ qualifiers.unshift(current.property.name);
66
+ current = current.object;
67
+ }
68
+ return { base: current, qualifiers };
69
+ }
70
+ function isQualifyingMember(node) {
71
+ return node.type === 'MemberExpression' && !node.computed && (0, ast_js_1.isIdentifier)(node.property);
72
+ }
73
+ function getMochaConstructName(context, identifier) {
74
+ const variable = (0, ast_js_1.getVariableFromScope)(context.sourceCode.getScope(identifier), identifier.name);
75
+ if (variable?.defs.some(def => def.type === 'ImportBinding' || isSupportedRequireBinding(def.node))) {
76
+ return getMochaConstructNameFromFqn((0, module_js_1.getFullyQualifiedName)(context, identifier));
77
+ }
78
+ return variable == null || variable.defs.length === 0 ? identifier.name : undefined;
79
+ }
80
+ function getMochaConstructNameFromFqn(fqn) {
81
+ const parts = fqn?.split('.');
82
+ if (parts?.length !== 2) {
83
+ return undefined;
84
+ }
85
+ const [framework, constructName] = parts;
86
+ return MOCHA_STYLE_TEST_FRAMEWORKS.has(framework) ? constructName : undefined;
87
+ }
88
+ function isSupportedRequireBinding(node) {
89
+ if (node.type !== 'VariableDeclarator' || node.init == null) {
90
+ return false;
91
+ }
92
+ const requireCall = getRequireCall(node.init);
93
+ const moduleName = requireCall?.arguments[0];
94
+ return (moduleName?.type === 'Literal' &&
95
+ typeof moduleName.value === 'string' &&
96
+ exports.SUPPORTED_TEST_FRAMEWORKS.includes(moduleName.value));
97
+ }
98
+ function getRequireCall(node) {
99
+ if (isRequireCall(node)) {
100
+ return node;
101
+ }
102
+ if (node.type === 'MemberExpression') {
103
+ return getRequireCall(node.object);
104
+ }
105
+ return undefined;
106
+ }
107
+ function isRequireCall(node) {
108
+ return (node.type === 'CallExpression' &&
109
+ node.callee.type === 'Identifier' &&
110
+ node.callee.name === 'require');
111
+ }
112
+ function hasCallback(node) {
113
+ return node.arguments.some(argument => ast_js_1.FUNCTION_NODES.includes(argument.type));
114
+ }
115
+ function getStaticTitle(node) {
116
+ if ((0, ast_js_1.isStringLiteral)(node)) {
117
+ return node.value;
118
+ }
119
+ if ((0, ast_js_1.isStaticTemplateLiteral)(node)) {
120
+ const value = node.quasis[0].value;
121
+ return value.cooked ?? value.raw;
122
+ }
123
+ return undefined;
124
+ }
125
+ function getPlaywrightTestQualifiers(context, node) {
126
+ const { base, qualifiers } = collectMemberChain(node);
127
+ return (0, module_js_1.getFullyQualifiedName)(context, base) === PLAYWRIGHT_TEST_FQN ? qualifiers : undefined;
128
+ }
129
+ function getPlaywrightDescribeQualifiers(node) {
130
+ const { base, qualifiers } = collectMemberChain(node);
131
+ return (0, ast_js_1.isIdentifier)(base, 'test') ? qualifiers : undefined;
132
+ }
@@ -4,17 +4,18 @@ exports.isTestConstruct = isTestConstruct;
4
4
  exports.extractTestCase = extractTestCase;
5
5
  exports.isTestCase = isTestCase;
6
6
  exports.isDescribeCase = isDescribeCase;
7
+ exports.isLifecycleHook = isLifecycleHook;
7
8
  const ast_js_1 = require("./ast.js");
8
- const TEST_CONSTRUCTS = [
9
- 'describe',
10
- 'context',
11
- 'it',
12
- 'specify',
9
+ const LIFECYCLE_HOOK_CONSTRUCTS = [
13
10
  'before',
14
11
  'after',
12
+ 'beforeAll',
13
+ 'afterAll',
15
14
  'beforeEach',
16
15
  'afterEach',
17
16
  ];
17
+ const TEST_CONSTRUCTS = ['describe', 'context', 'it', 'specify', ...LIFECYCLE_HOOK_CONSTRUCTS];
18
+ const TEST_CASE_CONSTRUCTS = ['it', 'specify', 'test'];
18
19
  function isTestConstruct(node, constructs = TEST_CONSTRUCTS) {
19
20
  return constructs.some(construct => {
20
21
  return (node.type === 'CallExpression' &&
@@ -41,7 +42,7 @@ function extractTestCase(node) {
41
42
  * @returns
42
43
  */
43
44
  function isTestCase(node) {
44
- return isTestConstruct(node, ['it', 'specify']);
45
+ return isTestConstruct(node, TEST_CASE_CONSTRUCTS);
45
46
  }
46
47
  /**
47
48
  * returns true if the node is a describe block
@@ -50,5 +51,14 @@ function isTestCase(node) {
50
51
  * @returns
51
52
  */
52
53
  function isDescribeCase(node) {
53
- return isTestConstruct(node, ['describe']);
54
+ return isTestConstruct(node, ['describe', 'context']);
55
+ }
56
+ /**
57
+ * returns true if the node is a lifecycle hook
58
+ *
59
+ * @param node
60
+ * @returns
61
+ */
62
+ function isLifecycleHook(node) {
63
+ return isTestConstruct(node, LIFECYCLE_HOOK_CONSTRUCTS);
54
64
  }
@@ -1,46 +1,136 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isESModule = isESModule;
4
3
  exports.getImportDeclarations = getImportDeclarations;
5
- exports.getRequireCalls = getRequireCalls;
4
+ exports.clearFileCaches = clearFileCaches;
5
+ exports.getCurrentFileImports = getCurrentFileImports;
6
+ exports.importsModule = importsModule;
7
+ exports.importsOrDependsOnModule = importsOrDependsOnModule;
6
8
  exports.isRequire = isRequire;
7
9
  exports.getFullyQualifiedName = getFullyQualifiedName;
8
10
  exports.removeNodePrefixIfExists = removeNodePrefixIfExists;
9
11
  exports.reduceToIdentifier = reduceToIdentifier;
10
12
  const ast_js_1 = require("./ast.js");
13
+ const dependencies_js_1 = require("./dependency-manifests/dependencies.js");
14
+ function getImportDeclarations(context) {
15
+ return context.sourceCode.ast.body.filter(node => node.type === 'ImportDeclaration');
16
+ }
11
17
  /**
12
- * Checks if the current file is an ES module based on sourceType.
18
+ * Cache for storing the set of all module names imported or required in the file currently being analyzed.
19
+ * This set is only needed while the current file is being analyzed.
13
20
  *
14
- * The parser sets sourceType based on file extension (.mjs/.cjs),
15
- * package.json "type" field, and ESLint configuration.
21
+ * Keyed by the `sourceCode` object reference rather than a boolean flag so that the cache
22
+ * self-invalidates when ESLint's RuleTester switches between test cases (each case gets a fresh
23
+ * SourceCode instance).
16
24
  */
17
- function isESModule(context) {
18
- return context.sourceCode.ast.sourceType === 'module';
19
- }
20
- function getImportDeclarations(context) {
21
- if (isESModule(context)) {
22
- return context.sourceCode.ast.body.filter(node => node.type === 'ImportDeclaration');
25
+ const CURRENT_FILE_IMPORTS = {
26
+ sourceCode: null,
27
+ imports: new Set(),
28
+ };
29
+ /**
30
+ * Compute the set of all module names imported or required
31
+ * in the file currently being analyzed (via import declarations, require(), or dynamic import()).
32
+ *
33
+ * Supported patterns:
34
+ * import foo from 'lodash';
35
+ * const lodash = require('lodash');
36
+ * const partition = require('lodash').partition;
37
+ * const lodash = import('lodash');
38
+ * const lodash = await import('lodash');
39
+ *
40
+ * Unsupported patterns (not stored in a variable):
41
+ * require('lodash');
42
+ * import('lodash').then(lodash => ...);
43
+ */
44
+ function computeCurrentFileImports(sourceCode) {
45
+ if (CURRENT_FILE_IMPORTS.sourceCode === sourceCode) {
46
+ return;
23
47
  }
24
- return [];
25
- }
26
- function getRequireCalls(context) {
27
- const required = [];
28
- const { scopeManager } = context.sourceCode;
29
- for (const scope of scopeManager.scopes) {
48
+ CURRENT_FILE_IMPORTS.sourceCode = sourceCode;
49
+ CURRENT_FILE_IMPORTS.imports.clear();
50
+ for (const node of sourceCode.ast.body) {
51
+ if (node.type === 'ImportDeclaration' && typeof node.source.value === 'string') {
52
+ CURRENT_FILE_IMPORTS.imports.add(node.source.value);
53
+ }
54
+ }
55
+ for (const scope of sourceCode.scopeManager.scopes) {
30
56
  for (const variable of scope.variables) {
31
57
  for (const def of variable.defs) {
32
58
  if (def.type === 'Variable' && def.node.init) {
33
- if (isRequire(def.node.init)) {
34
- required.push(def.node.init);
35
- }
36
- else if (def.node.init.type === 'MemberExpression' && isRequire(def.node.init.object)) {
37
- required.push(def.node.init.object);
59
+ const name = getRequireModuleName(def.node.init) ?? getDynamicImportModuleName(def.node.init);
60
+ if (name !== undefined) {
61
+ CURRENT_FILE_IMPORTS.imports.add(name);
38
62
  }
39
63
  }
40
64
  }
41
65
  }
42
66
  }
43
- return required;
67
+ }
68
+ /**
69
+ * Clears the caches related to the given source file
70
+ */
71
+ function clearFileCaches() {
72
+ CURRENT_FILE_IMPORTS.sourceCode = null;
73
+ CURRENT_FILE_IMPORTS.imports.clear();
74
+ (0, dependencies_js_1.setCurrentFileInlineDependencies)(null);
75
+ }
76
+ function getCurrentFileImports(sourceCode) {
77
+ computeCurrentFileImports(sourceCode);
78
+ return CURRENT_FILE_IMPORTS.imports;
79
+ }
80
+ function getRequireModuleName(node) {
81
+ const requireCall = getRequireCall(node);
82
+ const moduleName = requireCall?.arguments[0];
83
+ if (moduleName?.type === 'Literal' && typeof moduleName.value === 'string') {
84
+ return moduleName.value;
85
+ }
86
+ return undefined;
87
+ }
88
+ function getRequireCall(node) {
89
+ if (isRequire(node)) {
90
+ return node;
91
+ }
92
+ if (node.type === 'MemberExpression' && isRequire(node.object)) {
93
+ return node.object;
94
+ }
95
+ return undefined;
96
+ }
97
+ function getDynamicImportModuleName(node) {
98
+ const dynamicImportExpression = getDynamicImportExpression(node);
99
+ const moduleName = dynamicImportExpression?.source;
100
+ if (moduleName?.type === 'Literal' && typeof moduleName.value === 'string') {
101
+ return moduleName.value;
102
+ }
103
+ return undefined;
104
+ }
105
+ function getDynamicImportExpression(node) {
106
+ if (node.type === 'ImportExpression') {
107
+ return node;
108
+ }
109
+ if (node.type === 'AwaitExpression' && node.argument.type === 'ImportExpression') {
110
+ return node.argument;
111
+ }
112
+ return undefined;
113
+ }
114
+ /**
115
+ * Checks if the file imports any of the specified modules, either via require() calls or import declarations.
116
+ */
117
+ function importsModule(context, moduleNames) {
118
+ if (moduleNames.length === 0) {
119
+ return false;
120
+ }
121
+ const imports = getCurrentFileImports(context.sourceCode);
122
+ return moduleNames.some(name => imports.has(name));
123
+ }
124
+ /**
125
+ * Checks if at least one of the specified imports is imported (via import or require) in the file
126
+ * or if at least one of the specified dependencies is listed in the corresponding dependency manifest.
127
+ */
128
+ function importsOrDependsOnModule(context, imports, dependencies) {
129
+ if (importsModule(context, imports)) {
130
+ return true;
131
+ }
132
+ const sanitizedDeps = (0, dependencies_js_1.getDependenciesSanitizePaths)(context);
133
+ return dependencies.some(dependency => sanitizedDeps.has(dependency));
44
134
  }
45
135
  function isRequire(node) {
46
136
  return (node.type === 'CallExpression' &&
@@ -257,6 +347,9 @@ function reduceTo(type, node, fqn = []) {
257
347
  else if (nodeToCheck.type === 'CallExpression' && !getModuleNameFromRequire(nodeToCheck)) {
258
348
  nodeToCheck = nodeToCheck.callee;
259
349
  }
350
+ else if (nodeToCheck.type === 'TaggedTemplateExpression') {
351
+ nodeToCheck = nodeToCheck.tag;
352
+ }
260
353
  else if (nodeToCheck.type === 'NewExpression') {
261
354
  nodeToCheck = nodeToCheck.callee;
262
355
  }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /*
3
+ * SonarQube JavaScript Plugin
4
+ * Copyright (C) SonarSource Sàrl
5
+ * mailto:info AT sonarsource DOT com
6
+ *
7
+ * You can redistribute and/or modify this program under the terms of
8
+ * the Sonar Source-Available License Version 1, as published by SonarSource Sàrl.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the Sonar Source-Available License for more details.
14
+ *
15
+ * You should have received a copy of the Sonar Source-Available License
16
+ * along with this program; if not, see https://sonarsource.com/license/ssal/
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.isExactlyRepresentableAsBinaryFraction = isExactlyRepresentableAsBinaryFraction;
20
+ exports.isExactlyRepresentableIntegerDivision = isExactlyRepresentableIntegerDivision;
21
+ exports.greatestCommonDivisor = greatestCommonDivisor;
22
+ exports.isPowerOfTwo = isPowerOfTwo;
23
+ const decimalLiteralPattern = /^(\d*)(?:\.(\d*))?(?:e([+-]?\d+))?$/u;
24
+ function isExactlyRepresentableAsBinaryFraction(raw) {
25
+ const match = decimalLiteralPattern.exec(raw);
26
+ if (!match) {
27
+ return false;
28
+ }
29
+ const [, integerPart, fractionalPart = '', exponentPart] = match;
30
+ const digits = `${integerPart}${fractionalPart}`;
31
+ if (digits === '') {
32
+ return false;
33
+ }
34
+ const exponent = Number(exponentPart ?? 0) - fractionalPart.length;
35
+ const numerator = BigInt(digits);
36
+ if (numerator === 0n || exponent >= 0) {
37
+ return true;
38
+ }
39
+ const denominator = 10n ** BigInt(-exponent);
40
+ const reducedDenominator = denominator / greatestCommonDivisor(numerator, denominator);
41
+ return isPowerOfTwo(reducedDenominator);
42
+ }
43
+ function isExactlyRepresentableIntegerDivision(leftValue, rightValue) {
44
+ if (!Number.isSafeInteger(leftValue) || !Number.isSafeInteger(rightValue) || rightValue === 0) {
45
+ return false;
46
+ }
47
+ const numerator = BigInt(Math.abs(leftValue));
48
+ const denominator = BigInt(Math.abs(rightValue));
49
+ const reducedDenominator = denominator / greatestCommonDivisor(numerator, denominator);
50
+ return isPowerOfTwo(reducedDenominator);
51
+ }
52
+ function greatestCommonDivisor(left, right) {
53
+ let a = left;
54
+ let b = right;
55
+ while (b !== 0n) {
56
+ [a, b] = [b, a % b];
57
+ }
58
+ return a;
59
+ }
60
+ function isPowerOfTwo(value) {
61
+ return value > 0n && (value & (value - 1n)) === 0n;
62
+ }