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.
- package/README.md +52 -56
- package/cjs/S100/generated-meta.js +2 -1
- package/cjs/S101/generated-meta.js +2 -1
- package/cjs/S104/generated-meta.js +2 -1
- package/cjs/S105/generated-meta.js +2 -1
- package/cjs/S1066/generated-meta.js +2 -1
- package/cjs/S1067/generated-meta.js +2 -1
- package/cjs/S1110/generated-meta.js +2 -1
- package/cjs/S1119/generated-meta.js +2 -1
- package/cjs/S1121/generated-meta.js +2 -1
- package/cjs/S1125/generated-meta.js +2 -1
- package/cjs/S1126/generated-meta.js +2 -1
- package/cjs/S1128/generated-meta.js +2 -1
- package/cjs/S1134/generated-meta.js +2 -1
- package/cjs/S1135/generated-meta.js +2 -1
- package/cjs/S1154/generated-meta.js +2 -1
- package/cjs/S1154/rule.js +21 -2
- package/cjs/S117/generated-meta.js +2 -1
- package/cjs/S1172/generated-meta.js +2 -1
- package/cjs/S1192/generated-meta.js +2 -1
- package/cjs/S1219/generated-meta.js +2 -1
- package/cjs/S1226/generated-meta.js +2 -1
- package/cjs/S124/generated-meta.js +2 -1
- package/cjs/{S2255 → S1244}/generated-meta.js +8 -7
- package/cjs/S1244/meta.js +21 -0
- package/cjs/S1244/rule.js +265 -0
- package/cjs/S125/generated-meta.js +3 -2
- package/cjs/S126/generated-meta.js +2 -1
- package/cjs/S1264/generated-meta.js +2 -1
- package/cjs/S128/generated-meta.js +2 -1
- package/cjs/S1291/generated-meta.js +2 -1
- package/cjs/S1301/generated-meta.js +3 -2
- package/cjs/S1313/generated-meta.js +2 -1
- package/cjs/S134/generated-meta.js +2 -1
- package/cjs/S135/generated-meta.js +2 -1
- package/cjs/S138/generated-meta.js +2 -1
- package/cjs/S1439/generated-meta.js +2 -1
- package/cjs/S1444/generated-meta.js +2 -1
- package/cjs/S1451/generated-meta.js +2 -1
- package/cjs/S1472/generated-meta.js +2 -1
- package/cjs/S1479/generated-meta.js +2 -1
- package/cjs/S1481/generated-meta.js +2 -1
- package/cjs/S1488/generated-meta.js +2 -1
- package/cjs/S1515/generated-meta.js +2 -1
- package/cjs/S1523/generated-meta.js +3 -2
- package/cjs/S1526/generated-meta.js +2 -1
- package/cjs/S1527/generated-meta.js +2 -1
- package/cjs/S1528/generated-meta.js +2 -1
- package/cjs/S1529/generated-meta.js +2 -1
- package/cjs/S1530/generated-meta.js +2 -1
- package/cjs/S1533/generated-meta.js +2 -1
- package/cjs/S1535/generated-meta.js +2 -1
- package/cjs/S1541/generated-meta.js +2 -1
- package/cjs/S1607/generated-meta.js +2 -1
- package/cjs/S1607/rule.js +72 -7
- package/cjs/S1764/generated-meta.js +2 -1
- package/cjs/S1821/generated-meta.js +2 -1
- package/cjs/S1848/generated-meta.js +2 -1
- package/cjs/S1854/generated-meta.js +2 -1
- package/cjs/S1862/generated-meta.js +2 -1
- package/cjs/S1871/generated-meta.js +2 -1
- package/cjs/S1874/generated-meta.js +2 -1
- package/cjs/S1940/generated-meta.js +2 -1
- package/cjs/S1994/generated-meta.js +2 -1
- package/cjs/S2004/generated-meta.js +2 -1
- package/cjs/S2068/generated-meta.js +2 -1
- package/cjs/S2068/rule.js +0 -14
- package/cjs/S2077/generated-meta.js +3 -2
- package/cjs/S2092/generated-meta.js +2 -1
- package/cjs/S2123/generated-meta.js +2 -1
- package/cjs/S2137/generated-meta.js +2 -1
- package/cjs/S2138/generated-meta.js +2 -1
- package/cjs/S2187/generated-meta.js +2 -1
- package/cjs/S2187/rule.js +50 -13
- package/cjs/S2201/generated-meta.js +2 -1
- package/cjs/S2208/generated-meta.js +2 -1
- package/cjs/S2234/generated-meta.js +2 -1
- package/cjs/S2245/generated-meta.js +3 -2
- package/cjs/S2251/generated-meta.js +2 -1
- package/cjs/S2259/generated-meta.js +2 -1
- package/cjs/S2301/generated-meta.js +2 -1
- package/cjs/S2310/generated-meta.js +2 -1
- package/cjs/S2392/generated-meta.js +2 -1
- package/cjs/S2424/generated-meta.js +2 -1
- package/cjs/S2428/generated-meta.js +2 -1
- package/cjs/S2486/generated-meta.js +2 -1
- package/cjs/S2589/generated-meta.js +2 -1
- package/cjs/S2598/generated-meta.js +2 -1
- package/cjs/S2612/generated-meta.js +2 -1
- package/cjs/S2639/generated-meta.js +2 -1
- package/cjs/S2681/generated-meta.js +2 -1
- package/cjs/S2692/generated-meta.js +2 -1
- package/cjs/S2699/generated-meta.js +2 -1
- package/cjs/S2699/rule.js +19 -5
- package/cjs/S2703/generated-meta.js +2 -1
- package/cjs/S2737/generated-meta.js +2 -1
- package/cjs/S2755/generated-meta.js +2 -1
- package/cjs/S2757/generated-meta.js +2 -1
- package/cjs/S2817/generated-meta.js +2 -1
- package/cjs/S2819/generated-meta.js +2 -1
- package/cjs/S2870/generated-meta.js +2 -1
- package/cjs/S2871/generated-meta.js +2 -1
- package/cjs/S2871/rule.js +85 -1
- package/cjs/S2970/generated-meta.js +2 -1
- package/cjs/S2990/generated-meta.js +2 -1
- package/cjs/S2999/generated-meta.js +2 -1
- package/cjs/S3001/generated-meta.js +2 -1
- package/cjs/S3003/generated-meta.js +2 -1
- package/cjs/S3317/generated-meta.js +2 -1
- package/cjs/S3330/generated-meta.js +3 -2
- package/cjs/S3358/generated-meta.js +2 -1
- package/cjs/S3402/generated-meta.js +2 -1
- package/cjs/S3403/generated-meta.js +2 -1
- package/cjs/S3403/rule.js +21 -1
- package/cjs/S3415/generated-meta.js +2 -1
- package/cjs/S3499/generated-meta.js +2 -1
- package/cjs/S3500/generated-meta.js +2 -1
- package/cjs/S3513/generated-meta.js +2 -1
- package/cjs/S3514/generated-meta.js +2 -1
- package/cjs/S3516/generated-meta.js +2 -1
- package/cjs/S3524/generated-meta.js +2 -1
- package/cjs/S3525/generated-meta.js +2 -1
- package/cjs/S3531/generated-meta.js +2 -1
- package/cjs/S3533/generated-meta.js +2 -1
- package/cjs/S3579/generated-meta.js +2 -1
- package/cjs/S3616/generated-meta.js +2 -1
- package/cjs/S3626/generated-meta.js +2 -1
- package/cjs/S3626/rule.js +1 -1
- package/cjs/S3686/generated-meta.js +2 -1
- package/cjs/S3699/generated-meta.js +2 -1
- package/cjs/S3735/generated-meta.js +2 -1
- package/cjs/S3757/generated-meta.js +2 -1
- package/cjs/S3757/rule.js +3 -1
- package/cjs/S3758/generated-meta.js +2 -1
- package/cjs/S3760/generated-meta.js +2 -1
- package/cjs/S3776/generated-meta.js +2 -1
- package/cjs/S3782/generated-meta.js +2 -1
- package/cjs/S3785/generated-meta.js +2 -1
- package/cjs/S3796/generated-meta.js +2 -1
- package/cjs/S3798/generated-meta.js +2 -1
- package/cjs/S3798/rule.js +57 -17
- package/cjs/S3800/generated-meta.js +2 -1
- package/cjs/S3801/generated-meta.js +2 -1
- package/cjs/S3827/generated-meta.js +2 -1
- package/cjs/S3923/generated-meta.js +2 -1
- package/cjs/S3972/generated-meta.js +2 -1
- package/cjs/S3973/generated-meta.js +2 -1
- package/cjs/S3981/generated-meta.js +2 -1
- package/cjs/S3984/generated-meta.js +2 -1
- package/cjs/S4030/generated-meta.js +2 -1
- package/cjs/S4036/generated-meta.js +3 -2
- package/cjs/S4043/generated-meta.js +2 -1
- package/cjs/S4139/generated-meta.js +2 -1
- package/cjs/S4143/generated-meta.js +2 -1
- package/cjs/S4144/generated-meta.js +2 -1
- package/cjs/S4158/generated-meta.js +2 -1
- package/cjs/S4165/generated-meta.js +2 -1
- package/cjs/S4322/generated-meta.js +2 -1
- package/cjs/S4323/generated-meta.js +2 -1
- package/cjs/S4324/generated-meta.js +2 -1
- package/cjs/S4328/generated-meta.js +2 -1
- package/cjs/S4328/rule.js +7 -2
- package/cjs/S4335/generated-meta.js +2 -1
- package/cjs/S4423/generated-meta.js +2 -1
- package/cjs/S4426/generated-meta.js +2 -1
- package/cjs/S4502/generated-meta.js +3 -2
- package/cjs/S4507/generated-meta.js +3 -2
- package/cjs/S4524/generated-meta.js +2 -1
- package/cjs/S4619/generated-meta.js +2 -1
- package/cjs/S4621/generated-meta.js +2 -1
- package/cjs/S4622/generated-meta.js +2 -1
- package/cjs/S4623/generated-meta.js +2 -1
- package/cjs/S4624/generated-meta.js +2 -1
- package/cjs/S4624/rule.js +2 -7
- package/cjs/S4634/generated-meta.js +2 -1
- package/cjs/S4721/generated-meta.js +5 -4
- package/cjs/S4782/generated-meta.js +2 -1
- package/cjs/S4782/rule.js +96 -14
- package/cjs/S4790/generated-meta.js +3 -2
- package/cjs/S4790/rule.js +217 -2
- package/cjs/S4798/generated-meta.js +2 -1
- package/cjs/S4822/generated-meta.js +2 -1
- package/cjs/S4830/generated-meta.js +2 -1
- package/cjs/S5042/generated-meta.js +2 -1
- package/cjs/S5122/generated-meta.js +2 -1
- package/cjs/S5148/generated-meta.js +2 -1
- package/cjs/S5247/generated-meta.js +3 -2
- package/cjs/S5256/generated-meta.js +2 -1
- package/cjs/S5257/generated-meta.js +2 -1
- package/cjs/S5260/generated-meta.js +2 -1
- package/cjs/S5264/generated-meta.js +2 -1
- package/cjs/S5332/generated-meta.js +3 -2
- package/cjs/S5332/rule.lib.js +54 -46
- package/cjs/S5443/generated-meta.js +2 -1
- package/cjs/S5527/generated-meta.js +2 -1
- package/cjs/S5542/generated-meta.js +2 -1
- package/cjs/S5547/generated-meta.js +2 -1
- package/cjs/S5604/generated-meta.js +5 -4
- package/cjs/S5659/generated-meta.js +2 -1
- package/cjs/S5689/generated-meta.js +2 -1
- package/cjs/S5691/generated-meta.js +5 -4
- package/cjs/S5693/generated-meta.js +2 -1
- package/cjs/S5693/rule.js +45 -1
- package/cjs/S5725/generated-meta.js +3 -2
- package/cjs/S5725/rule.js +75 -12
- package/cjs/S5728/generated-meta.js +3 -2
- package/cjs/S5730/generated-meta.js +5 -4
- package/cjs/S5732/generated-meta.js +5 -4
- package/cjs/S5734/generated-meta.js +3 -2
- package/cjs/S5736/generated-meta.js +3 -2
- package/cjs/S5739/generated-meta.js +3 -2
- package/cjs/S5757/generated-meta.js +5 -4
- package/cjs/S5759/generated-meta.js +5 -4
- package/cjs/S5842/generated-meta.js +2 -1
- package/cjs/S5843/generated-meta.js +2 -1
- package/cjs/S5845/generated-meta.js +52 -0
- package/cjs/S5845/meta.js +21 -0
- package/cjs/S5845/rule.js +296 -0
- package/cjs/S5850/generated-meta.js +2 -1
- package/cjs/S5852/generated-meta.js +3 -2
- package/cjs/S5852/rule.js +11 -3
- package/cjs/S5856/generated-meta.js +2 -1
- package/cjs/S5860/generated-meta.js +2 -1
- package/cjs/S5863/generated-meta.js +2 -1
- package/cjs/S5867/generated-meta.js +2 -1
- package/cjs/S5868/generated-meta.js +2 -1
- package/cjs/S5868/rule.js +54 -25
- package/cjs/S5869/generated-meta.js +2 -1
- package/cjs/S5876/generated-meta.js +2 -1
- package/cjs/S5906/assertion-suggestions.js +279 -0
- package/cjs/S5906/assertion-utils.js +103 -0
- package/cjs/S5906/cypress-suggestions.js +62 -0
- package/cjs/S5906/expect-chain.js +16 -0
- package/cjs/S5906/generated-meta.js +52 -0
- package/cjs/S5906/meta.js +21 -0
- package/cjs/S5906/playwright-suggestions.js +103 -0
- package/cjs/S5906/rule.js +365 -0
- package/cjs/S5914/generated-meta.js +52 -0
- package/cjs/{S4817 → S5914}/meta.js +1 -1
- package/cjs/S5914/rule.js +213 -0
- package/cjs/S5958/generated-meta.js +2 -1
- package/cjs/S5973/generated-meta.js +2 -1
- package/cjs/S5973/rule.js +1 -1
- package/cjs/S6019/generated-meta.js +2 -1
- package/cjs/S6035/generated-meta.js +2 -1
- package/cjs/S6079/generated-meta.js +2 -1
- package/cjs/S6080/generated-meta.js +2 -1
- package/cjs/S6092/generated-meta.js +2 -1
- package/cjs/S6249/generated-meta.js +3 -2
- package/cjs/S6252/generated-meta.js +3 -2
- package/cjs/S6265/generated-meta.js +2 -1
- package/cjs/S6268/generated-meta.js +3 -2
- package/cjs/S6270/generated-meta.js +2 -1
- package/cjs/S6275/generated-meta.js +2 -1
- package/cjs/S6281/generated-meta.js +3 -2
- package/cjs/S6281/rule.js +7 -20
- package/cjs/S6302/generated-meta.js +2 -1
- package/cjs/S6303/generated-meta.js +2 -1
- package/cjs/S6304/generated-meta.js +3 -2
- package/cjs/S6308/generated-meta.js +2 -1
- package/cjs/S6317/generated-meta.js +2 -1
- package/cjs/S6319/generated-meta.js +3 -2
- package/cjs/S6321/generated-meta.js +2 -1
- package/cjs/S6323/generated-meta.js +2 -1
- package/cjs/S6324/generated-meta.js +2 -1
- package/cjs/S6324/rule.js +5 -5
- package/cjs/S6326/generated-meta.js +2 -1
- package/cjs/S6327/generated-meta.js +3 -2
- package/cjs/S6328/generated-meta.js +2 -1
- package/cjs/S6329/generated-meta.js +3 -2
- package/cjs/S6330/generated-meta.js +2 -1
- package/cjs/S6331/generated-meta.js +2 -1
- package/cjs/S6332/generated-meta.js +3 -2
- package/cjs/S6333/generated-meta.js +3 -2
- package/cjs/S6351/generated-meta.js +2 -1
- package/cjs/S6353/generated-meta.js +2 -1
- package/cjs/S6397/generated-meta.js +2 -1
- package/cjs/S6418/generated-meta.js +2 -1
- package/cjs/S6426/generated-meta.js +2 -1
- package/cjs/S6426/rule.js +6 -1
- package/cjs/S6437/generated-meta.js +2 -1
- package/cjs/S6437/rule.js +4 -2
- package/cjs/S6439/generated-meta.js +2 -1
- package/cjs/S6442/generated-meta.js +2 -1
- package/cjs/S6443/generated-meta.js +2 -1
- package/cjs/S6486/generated-meta.js +2 -1
- package/cjs/S6486/rule.js +4 -4
- package/cjs/S6564/generated-meta.js +2 -1
- package/cjs/S6594/generated-meta.js +2 -1
- package/cjs/S6627/generated-meta.js +2 -1
- package/cjs/S6759/generated-meta.js +2 -1
- package/cjs/S6759/rule.js +31 -1
- package/cjs/S6958/generated-meta.js +2 -1
- package/cjs/S6959/generated-meta.js +2 -1
- package/cjs/S7059/generated-meta.js +2 -1
- package/cjs/S7639/generated-meta.js +2 -1
- package/cjs/S7790/generated-meta.js +2 -1
- package/cjs/S8441/generated-meta.js +2 -1
- package/cjs/S8479/generated-meta.js +3 -2
- package/cjs/{S4817 → S8754}/generated-meta.js +10 -9
- package/cjs/{S5743 → S8754}/meta.js +1 -1
- package/cjs/S8754/rule.js +289 -0
- package/cjs/{S4784 → S8780}/generated-meta.js +9 -8
- package/cjs/{S2255 → S8780}/meta.js +1 -1
- package/cjs/S8780/rule.js +321 -0
- package/cjs/S8781/generated-meta.js +52 -0
- package/cjs/{S4787 → S8781}/meta.js +1 -1
- package/cjs/{S4784 → S8781}/rule.js +38 -46
- package/cjs/S8782/generated-meta.js +52 -0
- package/cjs/{S4784 → S8782}/meta.js +1 -1
- package/cjs/S8782/rule.js +148 -0
- package/cjs/S8783/generated-meta.js +52 -0
- package/cjs/S8783/meta.js +21 -0
- package/cjs/S8783/rule.js +167 -0
- package/cjs/{S4787 → S8786}/generated-meta.js +9 -8
- package/cjs/S8786/meta.js +22 -0
- package/cjs/{S4818 → S8786}/rule.js +24 -20
- package/cjs/S881/generated-meta.js +2 -1
- package/cjs/S888/generated-meta.js +2 -1
- package/cjs/S930/generated-meta.js +2 -1
- package/cjs/helpers/assertions-chai-common.js +29 -0
- package/cjs/helpers/assertions-chai.js +331 -0
- package/cjs/helpers/assertions-cypress.js +95 -0
- package/cjs/helpers/assertions.js +285 -0
- package/cjs/helpers/ast.js +30 -0
- package/cjs/helpers/chai.js +1 -1
- package/cjs/helpers/configs.js +37 -1
- package/cjs/helpers/cypress.js +73 -0
- package/cjs/helpers/dependency-manifests/all-in-parent-dirs.js +92 -0
- package/cjs/helpers/{package-jsons → dependency-manifests}/closest.js +17 -9
- package/cjs/helpers/dependency-manifests/dependencies.js +255 -0
- package/cjs/helpers/dependency-manifests/index.js +78 -0
- package/cjs/helpers/dependency-manifests/parse.js +51 -0
- package/cjs/helpers/dependency-manifests/parsed-dependency-files.js +80 -0
- package/cjs/helpers/dependency-manifests/resolvers/deno.js +79 -0
- package/cjs/helpers/dependency-manifests/resolvers/helpers.js +41 -0
- package/cjs/helpers/dependency-manifests/resolvers/package-json.js +167 -0
- package/cjs/helpers/dependency-manifests/resolvers/types.js +4 -0
- package/cjs/helpers/files.js +29 -0
- package/cjs/helpers/find-up/all-in-parent-dirs.js +1 -0
- package/cjs/helpers/find-up/closest.js +1 -0
- package/cjs/helpers/find-up/find-minimatch.js +2 -2
- package/cjs/helpers/generate-meta.js +1 -1
- package/cjs/helpers/mocha-style-test-frameworks.js +132 -0
- package/cjs/helpers/mocha.js +17 -7
- package/cjs/helpers/module.js +116 -23
- package/cjs/helpers/numbers.js +62 -0
- package/cjs/helpers/playwright.js +13 -0
- package/cjs/helpers/regex/extract.js +21 -9
- package/cjs/helpers/regex/flags.js +12 -5
- package/cjs/helpers/sinon.js +0 -4
- package/cjs/helpers/supertest.js +0 -4
- package/cjs/helpers/test-file-pattern.js +63 -0
- package/cjs/helpers/type-origin.js +82 -0
- package/cjs/helpers/type.js +162 -1
- package/cjs/helpers/vitest.js +0 -4
- package/cjs/plugin-rules.js +296 -298
- package/docs/async-test-assertions.md +7 -0
- package/docs/aws-apigateway-public-api.md +1 -1
- package/docs/aws-ec2-rds-dms-public.md +1 -1
- package/docs/aws-efs-unencrypted.md +1 -1
- package/docs/aws-iam-all-resources-accessible.md +1 -1
- package/docs/aws-s3-bucket-insecure-http.md +1 -1
- package/docs/aws-s3-bucket-public-access.md +1 -1
- package/docs/aws-s3-bucket-versioning.md +1 -1
- package/docs/aws-sagemaker-unencrypted-notebook.md +1 -1
- package/docs/aws-sns-unencrypted-topics.md +1 -1
- package/docs/code-eval.md +1 -1
- package/docs/confidential-information-logging.md +4 -2
- package/docs/content-security-policy.md +1 -1
- package/docs/cookie-no-httponly.md +1 -1
- package/docs/csrf.md +1 -1
- package/docs/disabled-auto-escaping.md +1 -1
- package/docs/disabled-resource-integrity.md +1 -1
- package/docs/dompurify-unsafe-config.md +2 -0
- package/docs/frame-ancestors.md +4 -2
- package/docs/hashing.md +1 -1
- package/docs/hidden-files.md +4 -2
- package/docs/hooks-before-test-cases.md +7 -0
- package/docs/no-angular-bypass-sanitization.md +1 -1
- package/docs/no-clear-text-protocols.md +1 -1
- package/docs/no-commented-code.md +1 -1
- package/docs/no-duplicate-test-title.md +7 -0
- package/docs/no-empty-test-title.md +7 -0
- package/docs/no-floating-point-equality.md +7 -0
- package/docs/no-forced-browser-interaction.md +7 -0
- package/docs/no-incompatible-assertion-types.md +9 -0
- package/docs/no-intrusive-permissions.md +4 -2
- package/docs/no-ip-forward.md +4 -2
- package/docs/no-mime-sniff.md +1 -1
- package/docs/no-mixed-content.md +4 -2
- package/docs/no-os-command-from-path.md +1 -1
- package/docs/no-referrer-policy.md +1 -1
- package/docs/no-small-switch.md +2 -0
- package/docs/no-trivial-assertions.md +7 -0
- package/docs/os-command.md +4 -2
- package/docs/prefer-specific-assertions.md +9 -0
- package/docs/production-debug.md +1 -1
- package/docs/pseudo-random.md +1 -1
- package/docs/slow-regex.md +1 -1
- package/docs/sql-queries.md +1 -1
- package/docs/strict-transport-security.md +1 -1
- package/docs/super-linear-regex.md +7 -0
- package/package.json +5 -4
- package/types/S100/generated-meta.d.ts +1 -0
- package/types/S101/generated-meta.d.ts +1 -0
- package/types/S104/generated-meta.d.ts +1 -0
- package/types/S105/generated-meta.d.ts +1 -0
- package/types/S1066/generated-meta.d.ts +1 -0
- package/types/S1067/generated-meta.d.ts +1 -0
- package/types/S1110/generated-meta.d.ts +1 -0
- package/types/S1119/generated-meta.d.ts +1 -0
- package/types/S1121/generated-meta.d.ts +1 -0
- package/types/S1125/generated-meta.d.ts +1 -0
- package/types/S1126/generated-meta.d.ts +1 -0
- package/types/S1128/generated-meta.d.ts +1 -0
- package/types/S1134/generated-meta.d.ts +1 -0
- package/types/S1135/generated-meta.d.ts +1 -0
- package/types/S1154/generated-meta.d.ts +1 -0
- package/types/S117/generated-meta.d.ts +1 -0
- package/types/S1172/generated-meta.d.ts +1 -0
- package/types/S1192/generated-meta.d.ts +1 -0
- package/types/S1219/generated-meta.d.ts +1 -0
- package/types/S1226/generated-meta.d.ts +1 -0
- package/types/S124/generated-meta.d.ts +1 -0
- package/types/{S2255 → S1244}/generated-meta.d.ts +3 -2
- package/types/S1244/meta.d.ts +2 -0
- package/types/S125/generated-meta.d.ts +1 -0
- package/types/S126/generated-meta.d.ts +1 -0
- package/types/S1264/generated-meta.d.ts +1 -0
- package/types/S128/generated-meta.d.ts +1 -0
- package/types/S1291/generated-meta.d.ts +1 -0
- package/types/S1301/generated-meta.d.ts +2 -1
- package/types/S1313/generated-meta.d.ts +1 -0
- package/types/S134/generated-meta.d.ts +1 -0
- package/types/S135/generated-meta.d.ts +1 -0
- package/types/S138/generated-meta.d.ts +1 -0
- package/types/S1439/generated-meta.d.ts +1 -0
- package/types/S1444/generated-meta.d.ts +1 -0
- package/types/S1451/generated-meta.d.ts +1 -0
- package/types/S1472/generated-meta.d.ts +1 -0
- package/types/S1479/generated-meta.d.ts +1 -0
- package/types/S1481/generated-meta.d.ts +1 -0
- package/types/S1488/generated-meta.d.ts +1 -0
- package/types/S1515/generated-meta.d.ts +1 -0
- package/types/S1523/generated-meta.d.ts +1 -0
- package/types/S1526/generated-meta.d.ts +1 -0
- package/types/S1527/generated-meta.d.ts +1 -0
- package/types/S1528/generated-meta.d.ts +1 -0
- package/types/S1529/generated-meta.d.ts +1 -0
- package/types/S1530/generated-meta.d.ts +1 -0
- package/types/S1533/generated-meta.d.ts +1 -0
- package/types/S1535/generated-meta.d.ts +1 -0
- package/types/S1541/generated-meta.d.ts +1 -0
- package/types/S1607/generated-meta.d.ts +1 -0
- package/types/S1764/generated-meta.d.ts +1 -0
- package/types/S1821/generated-meta.d.ts +1 -0
- package/types/S1848/generated-meta.d.ts +1 -0
- package/types/S1854/generated-meta.d.ts +1 -0
- package/types/S1862/generated-meta.d.ts +1 -0
- package/types/S1871/generated-meta.d.ts +1 -0
- package/types/S1874/generated-meta.d.ts +1 -0
- package/types/S1940/generated-meta.d.ts +1 -0
- package/types/S1994/generated-meta.d.ts +1 -0
- package/types/S2004/generated-meta.d.ts +1 -0
- package/types/S2068/generated-meta.d.ts +1 -0
- package/types/S2077/generated-meta.d.ts +1 -0
- package/types/S2092/generated-meta.d.ts +1 -0
- package/types/S2123/generated-meta.d.ts +1 -0
- package/types/S2137/generated-meta.d.ts +1 -0
- package/types/S2138/generated-meta.d.ts +1 -0
- package/types/S2187/generated-meta.d.ts +1 -0
- package/types/S2201/generated-meta.d.ts +1 -0
- package/types/S2208/generated-meta.d.ts +1 -0
- package/types/S2234/generated-meta.d.ts +1 -0
- package/types/S2245/generated-meta.d.ts +1 -0
- package/types/S2251/generated-meta.d.ts +1 -0
- package/types/S2259/generated-meta.d.ts +1 -0
- package/types/S2301/generated-meta.d.ts +1 -0
- package/types/S2310/generated-meta.d.ts +1 -0
- package/types/S2392/generated-meta.d.ts +1 -0
- package/types/S2424/generated-meta.d.ts +1 -0
- package/types/S2428/generated-meta.d.ts +1 -0
- package/types/S2486/generated-meta.d.ts +1 -0
- package/types/S2589/generated-meta.d.ts +1 -0
- package/types/S2598/generated-meta.d.ts +1 -0
- package/types/S2612/generated-meta.d.ts +1 -0
- package/types/S2639/generated-meta.d.ts +1 -0
- package/types/S2681/generated-meta.d.ts +1 -0
- package/types/S2692/generated-meta.d.ts +1 -0
- package/types/S2699/generated-meta.d.ts +1 -0
- package/types/S2703/generated-meta.d.ts +1 -0
- package/types/S2737/generated-meta.d.ts +1 -0
- package/types/S2755/generated-meta.d.ts +1 -0
- package/types/S2757/generated-meta.d.ts +1 -0
- package/types/S2817/generated-meta.d.ts +1 -0
- package/types/S2819/generated-meta.d.ts +1 -0
- package/types/S2870/generated-meta.d.ts +1 -0
- package/types/S2871/generated-meta.d.ts +1 -0
- package/types/S2970/generated-meta.d.ts +1 -0
- package/types/S2990/generated-meta.d.ts +1 -0
- package/types/S2999/generated-meta.d.ts +1 -0
- package/types/S3001/generated-meta.d.ts +1 -0
- package/types/S3003/generated-meta.d.ts +1 -0
- package/types/S3317/generated-meta.d.ts +1 -0
- package/types/S3330/generated-meta.d.ts +1 -0
- package/types/S3358/generated-meta.d.ts +1 -0
- package/types/S3402/generated-meta.d.ts +1 -0
- package/types/S3403/generated-meta.d.ts +1 -0
- package/types/S3415/generated-meta.d.ts +1 -0
- package/types/S3499/generated-meta.d.ts +1 -0
- package/types/S3500/generated-meta.d.ts +1 -0
- package/types/S3513/generated-meta.d.ts +1 -0
- package/types/S3514/generated-meta.d.ts +1 -0
- package/types/S3516/generated-meta.d.ts +1 -0
- package/types/S3524/generated-meta.d.ts +1 -0
- package/types/S3525/generated-meta.d.ts +1 -0
- package/types/S3531/generated-meta.d.ts +1 -0
- package/types/S3533/generated-meta.d.ts +1 -0
- package/types/S3579/generated-meta.d.ts +1 -0
- package/types/S3616/generated-meta.d.ts +1 -0
- package/types/S3626/generated-meta.d.ts +1 -0
- package/types/S3686/generated-meta.d.ts +1 -0
- package/types/S3699/generated-meta.d.ts +1 -0
- package/types/S3735/generated-meta.d.ts +1 -0
- package/types/S3757/generated-meta.d.ts +1 -0
- package/types/S3758/generated-meta.d.ts +1 -0
- package/types/S3760/generated-meta.d.ts +1 -0
- package/types/S3776/generated-meta.d.ts +1 -0
- package/types/S3782/generated-meta.d.ts +1 -0
- package/types/S3785/generated-meta.d.ts +1 -0
- package/types/S3796/generated-meta.d.ts +1 -0
- package/types/S3798/generated-meta.d.ts +1 -0
- package/types/S3800/generated-meta.d.ts +1 -0
- package/types/S3801/generated-meta.d.ts +1 -0
- package/types/S3827/generated-meta.d.ts +1 -0
- package/types/S3923/generated-meta.d.ts +1 -0
- package/types/S3972/generated-meta.d.ts +1 -0
- package/types/S3973/generated-meta.d.ts +1 -0
- package/types/S3981/generated-meta.d.ts +1 -0
- package/types/S3984/generated-meta.d.ts +1 -0
- package/types/S4030/generated-meta.d.ts +1 -0
- package/types/S4036/generated-meta.d.ts +1 -0
- package/types/S4043/generated-meta.d.ts +1 -0
- package/types/S4139/generated-meta.d.ts +1 -0
- package/types/S4143/generated-meta.d.ts +1 -0
- package/types/S4144/generated-meta.d.ts +1 -0
- package/types/S4158/generated-meta.d.ts +1 -0
- package/types/S4165/generated-meta.d.ts +1 -0
- package/types/S4322/generated-meta.d.ts +1 -0
- package/types/S4323/generated-meta.d.ts +1 -0
- package/types/S4324/generated-meta.d.ts +1 -0
- package/types/S4328/generated-meta.d.ts +1 -0
- package/types/S4335/generated-meta.d.ts +1 -0
- package/types/S4423/generated-meta.d.ts +1 -0
- package/types/S4426/generated-meta.d.ts +1 -0
- package/types/S4502/generated-meta.d.ts +1 -0
- package/types/S4507/generated-meta.d.ts +1 -0
- package/types/S4524/generated-meta.d.ts +1 -0
- package/types/S4619/generated-meta.d.ts +1 -0
- package/types/S4621/generated-meta.d.ts +1 -0
- package/types/S4622/generated-meta.d.ts +1 -0
- package/types/S4623/generated-meta.d.ts +1 -0
- package/types/S4624/generated-meta.d.ts +1 -0
- package/types/S4634/generated-meta.d.ts +1 -0
- package/types/S4721/generated-meta.d.ts +2 -1
- package/types/S4782/generated-meta.d.ts +1 -0
- package/types/S4790/generated-meta.d.ts +1 -0
- package/types/S4798/generated-meta.d.ts +1 -0
- package/types/S4822/generated-meta.d.ts +1 -0
- package/types/S4830/generated-meta.d.ts +1 -0
- package/types/S5042/generated-meta.d.ts +1 -0
- package/types/S5122/generated-meta.d.ts +1 -0
- package/types/S5148/generated-meta.d.ts +1 -0
- package/types/S5247/generated-meta.d.ts +1 -0
- package/types/S5256/generated-meta.d.ts +1 -0
- package/types/S5257/generated-meta.d.ts +1 -0
- package/types/S5260/generated-meta.d.ts +1 -0
- package/types/S5264/generated-meta.d.ts +1 -0
- package/types/S5332/generated-meta.d.ts +1 -0
- package/types/S5443/generated-meta.d.ts +1 -0
- package/types/S5527/generated-meta.d.ts +1 -0
- package/types/S5542/generated-meta.d.ts +1 -0
- package/types/S5547/generated-meta.d.ts +1 -0
- package/types/S5604/generated-meta.d.ts +2 -1
- package/types/S5659/generated-meta.d.ts +1 -0
- package/types/S5689/generated-meta.d.ts +1 -0
- package/types/S5691/generated-meta.d.ts +2 -1
- package/types/S5693/generated-meta.d.ts +1 -0
- package/types/S5725/generated-meta.d.ts +1 -0
- package/types/S5728/generated-meta.d.ts +1 -0
- package/types/S5730/generated-meta.d.ts +2 -1
- package/types/S5732/generated-meta.d.ts +2 -1
- package/types/S5734/generated-meta.d.ts +1 -0
- package/types/S5736/generated-meta.d.ts +1 -0
- package/types/S5739/generated-meta.d.ts +1 -0
- package/types/S5757/generated-meta.d.ts +2 -1
- package/types/S5759/generated-meta.d.ts +2 -1
- package/types/S5842/generated-meta.d.ts +1 -0
- package/types/S5843/generated-meta.d.ts +1 -0
- package/types/S5845/generated-meta.d.ts +18 -0
- package/types/S5845/meta.d.ts +2 -0
- package/types/S5850/generated-meta.d.ts +1 -0
- package/types/S5852/generated-meta.d.ts +1 -0
- package/types/S5856/generated-meta.d.ts +1 -0
- package/types/S5860/generated-meta.d.ts +1 -0
- package/types/S5863/generated-meta.d.ts +1 -0
- package/types/S5867/generated-meta.d.ts +1 -0
- package/types/S5868/generated-meta.d.ts +1 -0
- package/types/S5869/generated-meta.d.ts +1 -0
- package/types/S5876/generated-meta.d.ts +1 -0
- package/types/S5906/assertion-suggestions.d.ts +7 -0
- package/types/S5906/assertion-utils.d.ts +14 -0
- package/types/S5906/cypress-suggestions.d.ts +4 -0
- package/types/S5906/expect-chain.d.ts +5 -0
- package/types/S5906/generated-meta.d.ts +18 -0
- package/types/S5906/meta.d.ts +2 -0
- package/types/S5906/playwright-suggestions.d.ts +4 -0
- package/types/{S4817 → S5914}/generated-meta.d.ts +5 -4
- package/types/S5914/meta.d.ts +2 -0
- package/types/S5958/generated-meta.d.ts +1 -0
- package/types/S5973/generated-meta.d.ts +1 -0
- package/types/S6019/generated-meta.d.ts +1 -0
- package/types/S6035/generated-meta.d.ts +1 -0
- package/types/S6079/generated-meta.d.ts +1 -0
- package/types/S6080/generated-meta.d.ts +1 -0
- package/types/S6092/generated-meta.d.ts +1 -0
- package/types/S6249/generated-meta.d.ts +1 -0
- package/types/S6252/generated-meta.d.ts +1 -0
- package/types/S6265/generated-meta.d.ts +1 -0
- package/types/S6268/generated-meta.d.ts +1 -0
- package/types/S6270/generated-meta.d.ts +1 -0
- package/types/S6275/generated-meta.d.ts +1 -0
- package/types/S6281/generated-meta.d.ts +1 -0
- package/types/S6302/generated-meta.d.ts +1 -0
- package/types/S6303/generated-meta.d.ts +1 -0
- package/types/S6304/generated-meta.d.ts +1 -0
- package/types/S6308/generated-meta.d.ts +1 -0
- package/types/S6317/generated-meta.d.ts +1 -0
- package/types/S6319/generated-meta.d.ts +1 -0
- package/types/S6321/generated-meta.d.ts +1 -0
- package/types/S6323/generated-meta.d.ts +1 -0
- package/types/S6324/generated-meta.d.ts +1 -0
- package/types/S6326/generated-meta.d.ts +1 -0
- package/types/S6327/generated-meta.d.ts +1 -0
- package/types/S6328/generated-meta.d.ts +1 -0
- package/types/S6329/generated-meta.d.ts +1 -0
- package/types/S6330/generated-meta.d.ts +1 -0
- package/types/S6331/generated-meta.d.ts +1 -0
- package/types/S6332/generated-meta.d.ts +1 -0
- package/types/S6333/generated-meta.d.ts +1 -0
- package/types/S6351/generated-meta.d.ts +1 -0
- package/types/S6353/generated-meta.d.ts +1 -0
- package/types/S6397/generated-meta.d.ts +1 -0
- package/types/S6418/generated-meta.d.ts +1 -0
- package/types/S6426/generated-meta.d.ts +1 -0
- package/types/S6437/generated-meta.d.ts +1 -0
- package/types/S6439/generated-meta.d.ts +1 -0
- package/types/S6442/generated-meta.d.ts +1 -0
- package/types/S6443/generated-meta.d.ts +1 -0
- package/types/S6486/generated-meta.d.ts +1 -0
- package/types/S6564/generated-meta.d.ts +1 -0
- package/types/S6594/generated-meta.d.ts +1 -0
- package/types/S6627/generated-meta.d.ts +1 -0
- package/types/S6759/generated-meta.d.ts +1 -0
- package/types/S6958/generated-meta.d.ts +1 -0
- package/types/S6959/generated-meta.d.ts +1 -0
- package/types/S7059/generated-meta.d.ts +1 -0
- package/types/S7639/generated-meta.d.ts +1 -0
- package/types/S7790/generated-meta.d.ts +1 -0
- package/types/S8441/generated-meta.d.ts +1 -0
- package/types/S8479/generated-meta.d.ts +2 -1
- package/types/S8754/generated-meta.d.ts +18 -0
- package/types/{S5743 → S8754}/meta.d.ts +1 -1
- package/types/{S4787 → S8780}/generated-meta.d.ts +4 -3
- package/types/S8780/meta.d.ts +2 -0
- package/types/S8781/generated-meta.d.ts +18 -0
- package/types/S8781/meta.d.ts +2 -0
- package/types/S8782/generated-meta.d.ts +18 -0
- package/types/S8782/meta.d.ts +2 -0
- package/types/S8783/generated-meta.d.ts +18 -0
- package/types/S8783/meta.d.ts +2 -0
- package/types/{S4784 → S8786}/generated-meta.d.ts +4 -3
- package/types/S8786/meta.d.ts +2 -0
- package/types/S881/generated-meta.d.ts +1 -0
- package/types/S888/generated-meta.d.ts +1 -0
- package/types/S930/generated-meta.d.ts +1 -0
- package/types/helpers/assertions-chai-common.d.ts +7 -0
- package/types/helpers/assertions-chai.d.ts +4 -0
- package/types/helpers/assertions-cypress.d.ts +7 -0
- package/types/helpers/assertions.d.ts +39 -0
- package/types/helpers/ast.d.ts +10 -0
- package/types/helpers/configs.d.ts +7 -38
- package/types/helpers/cypress.d.ts +11 -0
- package/types/helpers/dependency-manifests/all-in-parent-dirs.d.ts +18 -0
- package/types/helpers/dependency-manifests/closest.d.ts +5 -0
- package/types/helpers/{package-jsons → dependency-manifests}/dependencies.d.ts +22 -17
- package/types/helpers/dependency-manifests/index.d.ts +22 -0
- package/types/helpers/dependency-manifests/parse.d.ts +12 -0
- package/types/helpers/dependency-manifests/parsed-dependency-files.d.ts +8 -0
- package/types/helpers/dependency-manifests/resolvers/deno.d.ts +12 -0
- package/types/helpers/dependency-manifests/resolvers/helpers.d.ts +12 -0
- package/types/helpers/dependency-manifests/resolvers/package-json.d.ts +2 -0
- package/types/helpers/dependency-manifests/resolvers/types.d.ts +46 -0
- package/types/helpers/files.d.ts +10 -2
- package/types/helpers/generate-meta.d.ts +5 -0
- package/types/helpers/mocha-style-test-frameworks.d.ts +19 -0
- package/types/helpers/mocha.d.ts +7 -0
- package/types/helpers/module.d.ts +14 -8
- package/types/helpers/numbers.d.ts +4 -0
- package/types/helpers/playwright.d.ts +2 -0
- package/types/helpers/regex/extract.d.ts +7 -3
- package/types/helpers/sinon.d.ts +0 -1
- package/types/helpers/supertest.d.ts +0 -1
- package/types/helpers/test-file-pattern.d.ts +17 -0
- package/types/helpers/type-origin.d.ts +31 -0
- package/types/helpers/type.d.ts +92 -1
- package/types/helpers/vitest.d.ts +0 -1
- package/types/plugin-rules.d.ts +10 -11
- package/cjs/S2255/rule.js +0 -111
- package/cjs/S4787/rule.js +0 -124
- package/cjs/S4817/rule.js +0 -103
- package/cjs/S4818/generated-meta.js +0 -51
- package/cjs/S4818/meta.js +0 -21
- package/cjs/S4823/generated-meta.js +0 -51
- package/cjs/S4823/meta.js +0 -21
- package/cjs/S4823/rule.js +0 -75
- package/cjs/S4829/generated-meta.js +0 -51
- package/cjs/S4829/meta.js +0 -21
- package/cjs/S4829/rule.js +0 -75
- package/cjs/S5742/generated-meta.js +0 -51
- package/cjs/S5742/meta.js +0 -22
- package/cjs/S5742/rule.js +0 -75
- package/cjs/S5743/generated-meta.js +0 -51
- package/cjs/S5743/rule.js +0 -78
- package/cjs/S6245/generated-meta.js +0 -51
- package/cjs/S6245/meta.js +0 -22
- package/cjs/S6245/rule.js +0 -87
- package/cjs/S6299/generated-meta.js +0 -51
- package/cjs/S6299/index.js +0 -21
- package/cjs/S6299/meta.js +0 -21
- package/cjs/S6299/rule.js +0 -93
- package/cjs/helpers/package-jsons/all-in-parent-dirs.js +0 -31
- package/cjs/helpers/package-jsons/dependencies.js +0 -221
- package/cjs/helpers/package-jsons/index.js +0 -42
- package/cjs/helpers/package-jsons/parse.js +0 -79
- package/docs/aws-s3-bucket-server-encryption.md +0 -9
- package/docs/certificate-transparency.md +0 -9
- package/docs/cookies.md +0 -9
- package/docs/dns-prefetching.md +0 -9
- package/docs/encryption.md +0 -9
- package/docs/no-vue-bypass-sanitization.md +0 -9
- package/docs/process-argv.md +0 -9
- package/docs/regular-expr.md +0 -9
- package/docs/sockets.md +0 -9
- package/docs/standard-input.md +0 -9
- package/docs/xpath.md +0 -9
- package/types/S2255/meta.d.ts +0 -2
- package/types/S4784/meta.d.ts +0 -2
- package/types/S4787/meta.d.ts +0 -2
- package/types/S4817/meta.d.ts +0 -2
- package/types/S4818/generated-meta.d.ts +0 -17
- package/types/S4818/meta.d.ts +0 -2
- package/types/S4823/generated-meta.d.ts +0 -17
- package/types/S4823/meta.d.ts +0 -2
- package/types/S4829/generated-meta.d.ts +0 -17
- package/types/S4829/meta.d.ts +0 -2
- package/types/S5742/generated-meta.d.ts +0 -17
- package/types/S5742/meta.d.ts +0 -3
- package/types/S5743/generated-meta.d.ts +0 -17
- package/types/S6245/generated-meta.d.ts +0 -17
- package/types/S6245/meta.d.ts +0 -3
- package/types/S6299/generated-meta.d.ts +0 -17
- package/types/S6299/index.d.ts +0 -1
- package/types/S6299/meta.d.ts +0 -2
- package/types/S6299/rule.d.ts +0 -2
- package/types/helpers/package-jsons/all-in-parent-dirs.d.ts +0 -10
- package/types/helpers/package-jsons/closest.d.ts +0 -2
- package/types/helpers/package-jsons/index.d.ts +0 -8
- package/types/helpers/package-jsons/parse.d.ts +0 -13
- /package/cjs/{S2255 → S1244}/index.js +0 -0
- /package/cjs/{S4784 → S5845}/index.js +0 -0
- /package/cjs/{S4787 → S5906}/index.js +0 -0
- /package/cjs/{S4817 → S5914}/index.js +0 -0
- /package/cjs/{S4818 → S8754}/index.js +0 -0
- /package/cjs/{S4823 → S8780}/index.js +0 -0
- /package/cjs/{S4829 → S8781}/index.js +0 -0
- /package/cjs/{S5742 → S8782}/index.js +0 -0
- /package/cjs/{S5743 → S8783}/index.js +0 -0
- /package/cjs/{S6245 → S8786}/index.js +0 -0
- /package/types/{S2255 → S1244}/index.d.ts +0 -0
- /package/types/{S2255 → S1244}/rule.d.ts +0 -0
- /package/types/{S4784 → S5845}/index.d.ts +0 -0
- /package/types/{S4784 → S5845}/rule.d.ts +0 -0
- /package/types/{S4787 → S5906}/index.d.ts +0 -0
- /package/types/{S4787 → S5906}/rule.d.ts +0 -0
- /package/types/{S4817 → S5914}/index.d.ts +0 -0
- /package/types/{S4817 → S5914}/rule.d.ts +0 -0
- /package/types/{S4818 → S8754}/index.d.ts +0 -0
- /package/types/{S4818 → S8754}/rule.d.ts +0 -0
- /package/types/{S4823 → S8780}/index.d.ts +0 -0
- /package/types/{S4823 → S8780}/rule.d.ts +0 -0
- /package/types/{S4829 → S8781}/index.d.ts +0 -0
- /package/types/{S4829 → S8781}/rule.d.ts +0 -0
- /package/types/{S5742 → S8782}/index.d.ts +0 -0
- /package/types/{S5742 → S8782}/rule.d.ts +0 -0
- /package/types/{S5743 → S8783}/index.d.ts +0 -0
- /package/types/{S5743 → S8783}/rule.d.ts +0 -0
- /package/types/{S6245 → S8786}/index.d.ts +0 -0
- /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
|
+
}
|
package/cjs/helpers/files.js
CHANGED
|
@@ -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
|
-
|
|
32
|
-
|
|
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
|
+
}
|
package/cjs/helpers/mocha.js
CHANGED
|
@@ -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
|
|
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,
|
|
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
|
}
|
package/cjs/helpers/module.js
CHANGED
|
@@ -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.
|
|
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
|
-
*
|
|
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
|
-
*
|
|
15
|
-
*
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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
|
+
}
|