From 567461c64258d8b5b9bbaf3f8727a273fe07df73 Mon Sep 17 00:00:00 2001 From: Victor Diez Date: Fri, 20 Dec 2024 15:17:00 +0100 Subject: [PATCH 1/8] JS-490 Fix Rule tests --- packages/jsts/src/rules/S100/unit.test.ts | 187 +-- packages/jsts/src/rules/S101/unit.test.ts | 103 +- packages/jsts/src/rules/S104/unit.test.ts | 53 +- packages/jsts/src/rules/S105/unit.test.ts | 83 +- packages/jsts/src/rules/S1066/unit.test.ts | 120 +- packages/jsts/src/rules/S1067/unit.test.ts | 305 ++--- packages/jsts/src/rules/S1068/unit.test.ts | 127 +- packages/jsts/src/rules/S107/unit.test.ts | 209 ++-- packages/jsts/src/rules/S1077/cb.fixture.tsx | 2 +- packages/jsts/src/rules/S1077/cb.test.ts | 7 +- packages/jsts/src/rules/S1082/cb.test.ts | 7 +- .../src/rules/S1082/clickevents.fixture.jsx | 2 +- .../src/rules/S1082/mouseevents.fixture.jsx | 8 +- packages/jsts/src/rules/S109/cb.test.ts | 7 +- packages/jsts/src/rules/S109/jsx.fixture.jsx | 2 +- packages/jsts/src/rules/S1105/cb.fixture.js | 4 +- packages/jsts/src/rules/S1105/cb.test.ts | 7 +- packages/jsts/src/rules/S1110/unit.test.ts | 285 +++-- packages/jsts/src/rules/S1116/unit.test.ts | 89 +- packages/jsts/src/rules/S1119/unit.test.ts | 45 +- packages/jsts/src/rules/S1121/unit.test.ts | 450 ++++---- packages/jsts/src/rules/S1125/unit.test.ts | 135 +-- packages/jsts/src/rules/S1126/unit.test.ts | 551 ++++++--- packages/jsts/src/rules/S1128/cb.fixture.vue | 10 +- packages/jsts/src/rules/S1128/cb.test.ts | 7 +- packages/jsts/src/rules/S1128/unit.test.ts | 591 +++++----- packages/jsts/src/rules/S1134/unit.test.ts | 111 +- packages/jsts/src/rules/S1135/unit.test.ts | 121 +- packages/jsts/src/rules/S1154/unit.test.ts | 130 +-- packages/jsts/src/rules/S117/unit.test.ts | 273 ++--- packages/jsts/src/rules/S1172/unit.test.ts | 607 ++++++---- packages/jsts/src/rules/S1186/unit.test.ts | 203 ++-- packages/jsts/src/rules/S1192/unit.test.ts | 267 +++-- packages/jsts/src/rules/S1219/unit.test.ts | 89 +- packages/jsts/src/rules/S1226/unit.test.ts | 147 +-- packages/jsts/src/rules/S124/unit.test.ts | 179 +-- packages/jsts/src/rules/S125/unit.test.ts | 325 +++--- packages/jsts/src/rules/S126/unit.test.ts | 93 +- packages/jsts/src/rules/S1264/unit.test.ts | 69 +- packages/jsts/src/rules/S128/rule.ts | 7 +- packages/jsts/src/rules/S128/unit.test.ts | 159 +-- packages/jsts/src/rules/S1291/unit.test.ts | 109 +- packages/jsts/src/rules/S1301/unit.test.ts | 71 +- packages/jsts/src/rules/S131/rule.ts | 2 +- packages/jsts/src/rules/S131/unit.test.ts | 178 ++- packages/jsts/src/rules/S1313/unit.test.ts | 83 +- packages/jsts/src/rules/S134/unit.test.ts | 175 +-- packages/jsts/src/rules/S135/unit.test.ts | 33 +- packages/jsts/src/rules/S138/unit.test.ts | 167 ++- packages/jsts/src/rules/S1438/cb.fixture.js | 8 +- packages/jsts/src/rules/S1438/cb.test.ts | 7 +- packages/jsts/src/rules/S1439/unit.test.ts | 83 +- packages/jsts/src/rules/S1444/cb.fixture.ts | 2 +- packages/jsts/src/rules/S1444/cb.test.ts | 7 +- packages/jsts/src/rules/S1451/unit.test.ts | 129 ++- packages/jsts/src/rules/S1472/unit.test.ts | 225 ++-- packages/jsts/src/rules/S1479/unit.test.ts | 83 +- packages/jsts/src/rules/S1481/unit.test.ts | 218 ++-- packages/jsts/src/rules/S1488/unit.test.ts | 589 +++++----- packages/jsts/src/rules/S1515/unit.test.ts | 294 ++--- packages/jsts/src/rules/S1523/unit.test.ts | 175 +-- packages/jsts/src/rules/S1526/unit.test.ts | 141 +-- packages/jsts/src/rules/S1527/unit.test.ts | 93 +- packages/jsts/src/rules/S1528/unit.test.ts | 139 ++- packages/jsts/src/rules/S1529/unit.test.ts | 245 ++-- packages/jsts/src/rules/S1530/unit.test.ts | 85 +- packages/jsts/src/rules/S1533/unit.test.ts | 306 +++-- packages/jsts/src/rules/S1534/cb.fixture.js | 6 +- packages/jsts/src/rules/S1534/cb.test.ts | 7 +- packages/jsts/src/rules/S1534/rule.ts | 2 +- packages/jsts/src/rules/S1534/unit.test.ts | 104 +- packages/jsts/src/rules/S1535/unit.test.ts | 89 +- packages/jsts/src/rules/S1541/unit.test.ts | 351 +++--- .../jsts/src/rules/S1607/jasmine/cb.test.ts | 6 +- .../S1607/jasmine/fixtures/cb.fixture.js | 8 +- packages/jsts/src/rules/S1607/jest/cb.test.ts | 6 +- .../rules/S1607/jest/fixtures/cb.fixture.js | 12 +- .../jsts/src/rules/S1607/mocha/cb.test.ts | 6 +- .../rules/S1607/mocha/fixtures/cb.fixture.js | 6 +- .../jsts/src/rules/S1607/nodejs/cb.test.ts | 6 +- .../rules/S1607/nodejs/fixtures/cb.fixture.js | 8 +- packages/jsts/src/rules/S1607/unit.test.ts | 25 +- packages/jsts/src/rules/S1751/unit.test.ts | 119 +- packages/jsts/src/rules/S1763/unit.test.ts | 61 +- packages/jsts/src/rules/S1764/unit.test.ts | 414 ++++--- packages/jsts/src/rules/S1788/cb.fixture.js | 6 +- packages/jsts/src/rules/S1788/cb.test.ts | 7 +- packages/jsts/src/rules/S1788/decorator.ts | 2 +- packages/jsts/src/rules/S1821/unit.test.ts | 159 +-- packages/jsts/src/rules/S1848/unit.test.ts | 165 +-- packages/jsts/src/rules/S1854/unit.test.ts | 306 +++-- packages/jsts/src/rules/S1862/unit.test.ts | 509 +++++---- packages/jsts/src/rules/S1871/unit.test.ts | 525 ++++----- packages/jsts/src/rules/S1874/cb.fixture.ts | 68 +- packages/jsts/src/rules/S1874/cb.test.ts | 7 +- packages/jsts/src/rules/S1940/unit.test.ts | 204 ++-- packages/jsts/src/rules/S1994/unit.test.ts | 141 +-- packages/jsts/src/rules/S2004/cb.test.ts | 5 +- packages/jsts/src/rules/S2004/unit.test.ts | 35 +- packages/jsts/src/rules/S2068/unit.test.ts | 135 +-- packages/jsts/src/rules/S2077/unit.test.ts | 229 ++-- packages/jsts/src/rules/S2092/unit.test.ts | 444 +++---- packages/jsts/src/rules/S2123/unit.test.ts | 99 +- packages/jsts/src/rules/S2137/unit.test.ts | 300 +++-- packages/jsts/src/rules/S2138/unit.test.ts | 16 +- packages/jsts/src/rules/S2187/unit.test.ts | 103 +- packages/jsts/src/rules/S2189/unit.test.ts | 209 ++-- packages/jsts/src/rules/S2201/unit.test.ts | 275 ++--- packages/jsts/src/rules/S2208/unit.test.ts | 87 +- packages/jsts/src/rules/S2234/unit.test.ts | 221 ++-- packages/jsts/src/rules/S2245/unit.test.ts | 77 +- packages/jsts/src/rules/S2251/unit.test.ts | 352 +++--- packages/jsts/src/rules/S2255/unit.test.ts | 125 +- packages/jsts/src/rules/S2259/unit.test.ts | 367 +++--- packages/jsts/src/rules/S2301/unit.test.ts | 204 ++-- packages/jsts/src/rules/S2310/unit.test.ts | 188 +-- packages/jsts/src/rules/S2376/unit.test.ts | 73 +- packages/jsts/src/rules/S2392/unit.test.ts | 121 +- packages/jsts/src/rules/S2424/unit.test.ts | 113 +- packages/jsts/src/rules/S2428/unit.test.ts | 249 ++-- packages/jsts/src/rules/S2430/unit.test.ts | 51 +- packages/jsts/src/rules/S2486/cb.test.ts | 7 +- packages/jsts/src/rules/S2589/unit.test.ts | 561 ++++----- packages/jsts/src/rules/S2598/unit.test.ts | 281 ++--- packages/jsts/src/rules/S2612/unit.test.ts | 190 +-- packages/jsts/src/rules/S2639/cb.fixture.js | 20 +- packages/jsts/src/rules/S2639/cb.test.ts | 7 +- packages/jsts/src/rules/S2681/unit.test.ts | 208 ++-- packages/jsts/src/rules/S2688/cb.fixture.js | 14 +- packages/jsts/src/rules/S2688/cb.test.ts | 7 +- packages/jsts/src/rules/S2692/unit.test.ts | 87 +- .../jsts/src/rules/S2699/assertion.fixture.js | 2 +- packages/jsts/src/rules/S2699/cb.test.ts | 7 +- packages/jsts/src/rules/S2699/chai.fixture.js | 6 +- packages/jsts/src/rules/S2699/loop.fixture.ts | 2 +- .../jsts/src/rules/S2699/supertest.fixture.js | 2 +- packages/jsts/src/rules/S2703/unit.test.ts | 141 +-- packages/jsts/src/rules/S2737/unit.test.ts | 113 +- packages/jsts/src/rules/S2755/unit.test.ts | 124 +- packages/jsts/src/rules/S2757/unit.test.ts | 176 +-- packages/jsts/src/rules/S2814/unit.test.ts | 47 +- packages/jsts/src/rules/S2817/unit.test.ts | 112 +- packages/jsts/src/rules/S2819/unit.test.ts | 206 ++-- packages/jsts/src/rules/S2870/cb.fixture.js | 8 +- packages/jsts/src/rules/S2870/cb.test.ts | 7 +- packages/jsts/src/rules/S2871/unit.test.ts | 809 +++++++------ packages/jsts/src/rules/S2970/cb.test.ts | 7 +- packages/jsts/src/rules/S2990/unit.test.ts | 181 +-- packages/jsts/src/rules/S2999/unit.test.ts | 224 ++-- packages/jsts/src/rules/S3001/unit.test.ts | 124 +- packages/jsts/src/rules/S3003/unit.test.ts | 140 +-- packages/jsts/src/rules/S3317/unit.test.ts | 251 ++-- packages/jsts/src/rules/S3330/unit.test.ts | 444 +++---- packages/jsts/src/rules/S3358/unit.test.ts | 123 +- packages/jsts/src/rules/S3402/unit.test.ts | 207 ++-- packages/jsts/src/rules/S3403/unit.test.ts | 288 ++--- packages/jsts/src/rules/S3415/cb.fixture.js | 82 +- packages/jsts/src/rules/S3415/cb.test.ts | 7 +- packages/jsts/src/rules/S3498/unit.test.ts | 64 +- packages/jsts/src/rules/S3499/unit.test.ts | 101 +- packages/jsts/src/rules/S3500/unit.test.ts | 51 +- packages/jsts/src/rules/S3504/cb.fixture.js | 4 +- packages/jsts/src/rules/S3504/cb.test.ts | 7 +- packages/jsts/src/rules/S3512/unit.test.ts | 87 +- packages/jsts/src/rules/S3513/unit.test.ts | 95 +- packages/jsts/src/rules/S3514/unit.test.ts | 139 +-- packages/jsts/src/rules/S3516/unit.test.ts | 380 +++--- packages/jsts/src/rules/S3524/unit.test.ts | 229 ++-- packages/jsts/src/rules/S3525/unit.test.ts | 132 +-- packages/jsts/src/rules/S3531/unit.test.ts | 142 +-- packages/jsts/src/rules/S3533/unit.test.ts | 194 ++-- packages/jsts/src/rules/S3579/unit.test.ts | 110 +- packages/jsts/src/rules/S3616/unit.test.ts | 153 +-- packages/jsts/src/rules/S3626/unit.test.ts | 236 +++- packages/jsts/src/rules/S3686/unit.test.ts | 99 +- packages/jsts/src/rules/S3696/unit.test.ts | 94 +- packages/jsts/src/rules/S3699/unit.test.ts | 171 +-- packages/jsts/src/rules/S3723/unit.test.ts | 35 +- packages/jsts/src/rules/S3735/unit.test.ts | 122 +- packages/jsts/src/rules/S3757/unit.test.ts | 142 +-- packages/jsts/src/rules/S3758/unit.test.ts | 210 ++-- packages/jsts/src/rules/S3760/unit.test.ts | 302 ++--- packages/jsts/src/rules/S3776/unit.test.ts | 565 +++++---- packages/jsts/src/rules/S3782/unit.test.ts | 194 ++-- packages/jsts/src/rules/S3785/unit.test.ts | 110 +- packages/jsts/src/rules/S3796/unit.test.ts | 536 +++++---- packages/jsts/src/rules/S3798/unit.test.ts | 322 +++--- packages/jsts/src/rules/S3800/cb.fixture.js | 2 +- packages/jsts/src/rules/S3800/cb.test.ts | 7 +- packages/jsts/src/rules/S3800/unit.test.ts | 643 ++++++----- packages/jsts/src/rules/S3801/unit.test.ts | 196 ++-- packages/jsts/src/rules/S3827/cb.fixture.vue | 8 +- packages/jsts/src/rules/S3827/cb.test.ts | 7 +- packages/jsts/src/rules/S3827/unit.test.ts | 173 +-- packages/jsts/src/rules/S3854/unit.test.ts | 43 +- packages/jsts/src/rules/S3923/unit.test.ts | 266 ++--- packages/jsts/src/rules/S3972/unit.test.ts | 488 +++++--- packages/jsts/src/rules/S3973/unit.test.ts | 185 +-- packages/jsts/src/rules/S3981/unit.test.ts | 436 ++++--- packages/jsts/src/rules/S3984/unit.test.ts | 114 +- packages/jsts/src/rules/S4023/unit.test.ts | 59 +- packages/jsts/src/rules/S4030/unit.test.ts | 137 +-- packages/jsts/src/rules/S4036/cb.fixture.js | 26 +- packages/jsts/src/rules/S4036/cb.test.ts | 7 +- packages/jsts/src/rules/S4043/unit.test.ts | 350 +++--- packages/jsts/src/rules/S4084/cb.fixture.jsx | 2 +- packages/jsts/src/rules/S4084/cb.test.ts | 7 +- packages/jsts/src/rules/S4123/unit.test.ts | 238 ++-- packages/jsts/src/rules/S4138/unit.test.ts | 208 ++-- packages/jsts/src/rules/S4139/unit.test.ts | 154 +-- packages/jsts/src/rules/S4143/unit.test.ts | 329 +++--- packages/jsts/src/rules/S4144/unit.test.ts | 289 ++--- packages/jsts/src/rules/S4156/cb.fixture.ts | 2 +- packages/jsts/src/rules/S4156/cb.test.ts | 7 +- packages/jsts/src/rules/S4158/unit.test.ts | 439 +++---- packages/jsts/src/rules/S4165/unit.test.ts | 218 ++-- packages/jsts/src/rules/S4275/unit.test.ts | 1017 +++++++++-------- packages/jsts/src/rules/S4322/unit.test.ts | 386 +++++-- packages/jsts/src/rules/S4323/unit.test.ts | 169 +-- packages/jsts/src/rules/S4324/unit.test.ts | 184 ++- packages/jsts/src/rules/S4327/cb.fixture.js | 6 +- packages/jsts/src/rules/S4327/cb.test.ts | 7 +- packages/jsts/src/rules/S4328/unit.test.ts | 477 ++++---- packages/jsts/src/rules/S4335/unit.test.ts | 145 +-- packages/jsts/src/rules/S4423/cb.fixture.js | 40 +- packages/jsts/src/rules/S4423/cb.test.ts | 7 +- packages/jsts/src/rules/S4423/unit.test.ts | 237 ++-- packages/jsts/src/rules/S4426/unit.test.ts | 181 +-- packages/jsts/src/rules/S4502/unit.test.ts | 166 +-- packages/jsts/src/rules/S4507/unit.test.ts | 107 +- packages/jsts/src/rules/S4524/unit.test.ts | 69 +- packages/jsts/src/rules/S4619/unit.test.ts | 128 ++- packages/jsts/src/rules/S4621/unit.test.ts | 286 +++-- packages/jsts/src/rules/S4622/unit.test.ts | 221 ++-- packages/jsts/src/rules/S4623/unit.test.ts | 174 +-- packages/jsts/src/rules/S4624/unit.test.ts | 224 ++-- packages/jsts/src/rules/S4634/unit.test.ts | 143 ++- packages/jsts/src/rules/S4721/unit.test.ts | 145 +-- packages/jsts/src/rules/S4782/unit.test.ts | 379 +++--- packages/jsts/src/rules/S4784/unit.test.ts | 163 +-- packages/jsts/src/rules/S4787/unit.test.ts | 189 +-- packages/jsts/src/rules/S4790/cb.fixture.js | 32 +- packages/jsts/src/rules/S4790/cb.test.ts | 7 +- packages/jsts/src/rules/S4798/unit.test.ts | 127 +- packages/jsts/src/rules/S4817/unit.test.ts | 189 +-- packages/jsts/src/rules/S4818/unit.test.ts | 71 +- packages/jsts/src/rules/S4822/unit.test.ts | 151 +-- packages/jsts/src/rules/S4823/unit.test.ts | 69 +- packages/jsts/src/rules/S4829/unit.test.ts | 69 +- packages/jsts/src/rules/S4830/unit.test.ts | 207 ++-- packages/jsts/src/rules/S5042/unit.test.ts | 269 ++--- .../jsts/src/rules/S5122/cb.cors.fixture.js | 8 +- .../jsts/src/rules/S5122/cb.http.fixture.js | 6 +- .../src/rules/S5122/cb.reproducer.fixture.js | 2 +- .../src/rules/S5122/cb.tainted.fixture.js | 8 +- packages/jsts/src/rules/S5122/cb.test.ts | 7 +- packages/jsts/src/rules/S5148/cb.fixture.ts | 10 +- packages/jsts/src/rules/S5148/cb.test.ts | 7 +- packages/jsts/src/rules/S5247/cb.fixture.js | 8 +- packages/jsts/src/rules/S5247/cb.test.ts | 7 +- packages/jsts/src/rules/S5254/cb.test.ts | 7 +- packages/jsts/src/rules/S5256/cb.fixture.jsx | 20 +- packages/jsts/src/rules/S5256/cb.test.ts | 7 +- packages/jsts/src/rules/S5257/cb.fixture.tsx | 8 +- packages/jsts/src/rules/S5257/cb.test.ts | 7 +- packages/jsts/src/rules/S5260/cb.test.ts | 7 +- packages/jsts/src/rules/S5264/cb.fixture.tsx | 14 +- packages/jsts/src/rules/S5264/cb.test.ts | 7 +- packages/jsts/src/rules/S5332/cb.fixture.js | 50 +- packages/jsts/src/rules/S5332/cb.test.ts | 7 +- packages/jsts/src/rules/S5332/unit.test.ts | 205 ++-- packages/jsts/src/rules/S5443/unit.test.ts | 67 +- packages/jsts/src/rules/S5527/unit.test.ts | 387 +++---- packages/jsts/src/rules/S5542/unit.test.ts | 360 +++--- packages/jsts/src/rules/S5547/unit.test.ts | 87 +- packages/jsts/src/rules/S5604/unit.test.ts | 294 ++--- packages/jsts/src/rules/S5659/unit.test.ts | 528 ++++----- packages/jsts/src/rules/S5689/unit.test.ts | 266 ++--- packages/jsts/src/rules/S5691/unit.test.ts | 71 +- packages/jsts/src/rules/S5693/unit.test.ts | 218 ++-- packages/jsts/src/rules/S5725/unit.test.ts | 122 +- packages/jsts/src/rules/S5728/unit.test.ts | 193 ++-- packages/jsts/src/rules/S5730/unit.test.ts | 137 +-- packages/jsts/src/rules/S5732/unit.test.ts | 193 ++-- packages/jsts/src/rules/S5734/unit.test.ts | 261 ++--- packages/jsts/src/rules/S5736/unit.test.ts | 147 +-- packages/jsts/src/rules/S5739/unit.test.ts | 215 ++-- packages/jsts/src/rules/S5742/unit.test.ts | 249 ++-- packages/jsts/src/rules/S5743/unit.test.ts | 139 +-- packages/jsts/src/rules/S5757/unit.test.ts | 191 ++-- packages/jsts/src/rules/S5759/unit.test.ts | 108 +- packages/jsts/src/rules/S5842/unit.test.ts | 301 ++--- packages/jsts/src/rules/S5843/unit.test.ts | 970 ++++++++-------- packages/jsts/src/rules/S5850/cb.fixture.js | 8 +- packages/jsts/src/rules/S5850/cb.test.ts | 7 +- packages/jsts/src/rules/S5850/unit.test.ts | 165 +-- packages/jsts/src/rules/S5852/unit.test.ts | 154 +-- packages/jsts/src/rules/S5856/unit.test.ts | 119 +- packages/jsts/src/rules/S5860/unit.test.ts | 604 +++++----- packages/jsts/src/rules/S5863/cb.fixture.js | 38 +- packages/jsts/src/rules/S5863/cb.test.ts | 7 +- packages/jsts/src/rules/S5863/unit.test.ts | 39 +- packages/jsts/src/rules/S5867/unit.test.ts | 201 ++-- packages/jsts/src/rules/S5868/unit.test.ts | 775 ++++++------- packages/jsts/src/rules/S5869/unit.test.ts | 437 +++---- packages/jsts/src/rules/S5876/unit.test.ts | 89 +- packages/jsts/src/rules/S5958/cb.test.ts | 7 +- .../jsts/src/rules/S5973/with-jest/cb.test.ts | 7 +- .../S5973/with-jest/fixtures/cb.fixture.ts | 2 +- .../src/rules/S5973/without-jest/cb.test.ts | 7 +- .../fixtures/jest-import.fixture.ts | 2 +- .../without-jest/fixtures/mocha.fixture.ts | 6 +- packages/jsts/src/rules/S6019/unit.test.ts | 121 +- packages/jsts/src/rules/S6035/unit.test.ts | 173 +-- packages/jsts/src/rules/S6079/cb.fixture.js | 8 +- packages/jsts/src/rules/S6079/cb.test.ts | 7 +- packages/jsts/src/rules/S6080/cb.fixture.js | 2 +- packages/jsts/src/rules/S6080/cb.test.ts | 7 +- packages/jsts/src/rules/S6092/cb.fixture.js | 28 +- packages/jsts/src/rules/S6092/cb.test.ts | 7 +- packages/jsts/src/rules/S6092/unit.test.ts | 40 +- packages/jsts/src/rules/S6245/cb.test.ts | 7 +- packages/jsts/src/rules/S6249/cb.fixture.js | 2 +- packages/jsts/src/rules/S6249/cb.test.ts | 7 +- packages/jsts/src/rules/S6252/cb.fixture.js | 4 +- packages/jsts/src/rules/S6252/cb.test.ts | 7 +- packages/jsts/src/rules/S6265/cb.fixture.js | 6 +- packages/jsts/src/rules/S6265/cb.test.ts | 7 +- packages/jsts/src/rules/S6268/unit.test.ts | 67 +- packages/jsts/src/rules/S6270/cb.test.ts | 7 +- packages/jsts/src/rules/S6275/cb.fixture.js | 2 +- packages/jsts/src/rules/S6275/cb.test.ts | 7 +- packages/jsts/src/rules/S6281/cb.test.ts | 7 +- packages/jsts/src/rules/S6299/unit.test.ts | 171 ++- packages/jsts/src/rules/S6302/cb.test.ts | 7 +- packages/jsts/src/rules/S6303/cb.test.ts | 7 +- packages/jsts/src/rules/S6304/cb.test.ts | 7 +- packages/jsts/src/rules/S6308/cb.test.ts | 7 +- packages/jsts/src/rules/S6317/cb.fixture.js | 4 +- packages/jsts/src/rules/S6317/cb.test.ts | 7 +- packages/jsts/src/rules/S6319/cb.fixture.js | 4 +- packages/jsts/src/rules/S6319/cb.test.ts | 7 +- packages/jsts/src/rules/S6321/cb.fixture.js | 38 +- packages/jsts/src/rules/S6321/cb.test.ts | 7 +- packages/jsts/src/rules/S6323/unit.test.ts | 251 ++-- packages/jsts/src/rules/S6324/unit.test.ts | 189 +-- packages/jsts/src/rules/S6326/unit.test.ts | 111 +- packages/jsts/src/rules/S6327/cb.fixture.js | 34 +- packages/jsts/src/rules/S6327/cb.fixture.ts | 112 -- packages/jsts/src/rules/S6327/cb.test.ts | 7 +- packages/jsts/src/rules/S6328/unit.test.ts | 302 ++--- packages/jsts/src/rules/S6329/cb.test.ts | 7 +- packages/jsts/src/rules/S6330/cb.fixture.js | 2 +- packages/jsts/src/rules/S6330/cb.test.ts | 7 +- packages/jsts/src/rules/S6330/rule.ts | 2 +- packages/jsts/src/rules/S6331/unit.test.ts | 173 +-- packages/jsts/src/rules/S6332/cb.fixture.js | 4 +- packages/jsts/src/rules/S6332/cb.test.ts | 7 +- packages/jsts/src/rules/S6333/cb.test.ts | 7 +- packages/jsts/src/rules/S6351/unit.test.ts | 347 +++--- packages/jsts/src/rules/S6353/unit.test.ts | 437 +++---- packages/jsts/src/rules/S6397/cb.fixture.ts | 8 +- packages/jsts/src/rules/S6397/cb.test.ts | 7 +- packages/jsts/src/rules/S6418/cb.fixture.ts | 22 +- packages/jsts/src/rules/S6418/cb.test.ts | 7 +- packages/jsts/src/rules/S6418/rule.ts | 23 +- packages/jsts/src/rules/S6418/unit.test.ts | 35 +- packages/jsts/src/rules/S6426/cb.fixture.js | 18 +- packages/jsts/src/rules/S6426/cb.test.ts | 7 +- packages/jsts/src/rules/S6439/cb.fixture.tsx | 21 +- packages/jsts/src/rules/S6439/cb.test.ts | 7 +- packages/jsts/src/rules/S6439/unit.test.ts | 198 ++-- packages/jsts/src/rules/S6440/cb.test.ts | 7 +- packages/jsts/src/rules/S6441/cb.test.ts | 7 +- packages/jsts/src/rules/S6442/cb.fixture.js | 12 +- packages/jsts/src/rules/S6442/cb.test.ts | 7 +- packages/jsts/src/rules/S6443/cb.test.ts | 7 +- .../S6477/non-react-project/unit.test.ts | 29 +- .../src/rules/S6477/react-project/cb.test.ts | 7 +- .../react-project/fixtures/cb.fixture.tsx | 2 +- packages/jsts/src/rules/S6478/cb.fixture.jsx | 2 +- packages/jsts/src/rules/S6478/cb.test.ts | 7 +- packages/jsts/src/rules/S6479/unit.test.ts | 65 +- packages/jsts/src/rules/S6481/cb.test.ts | 7 +- packages/jsts/src/rules/S6486/cb.fixture.tsx | 10 +- packages/jsts/src/rules/S6486/cb.test.ts | 7 +- packages/jsts/src/rules/S6535/cb.test.ts | 7 +- packages/jsts/src/rules/S6544/cb.test.ts | 14 +- .../checksVoidReturn/true/cb.fixture.ts | 4 +- packages/jsts/src/rules/S6551/cb.fixture.ts | 2 +- packages/jsts/src/rules/S6551/cb.test.ts | 7 +- packages/jsts/src/rules/S6557/unit.test.ts | 59 +- packages/jsts/src/rules/S6564/cb.test.ts | 7 +- packages/jsts/src/rules/S6571/cb.fixture.ts | 26 +- packages/jsts/src/rules/S6571/cb.test.ts | 7 +- packages/jsts/src/rules/S6572/cb.fixture.ts | 24 +- packages/jsts/src/rules/S6572/cb.test.ts | 7 +- packages/jsts/src/rules/S6572/rule.ts | 13 +- packages/jsts/src/rules/S6582/cb.test.ts | 7 +- packages/jsts/src/rules/S6582/unit.test.ts | 23 +- packages/jsts/src/rules/S6594/cb.fixture.js | 4 +- packages/jsts/src/rules/S6594/cb.test.ts | 7 +- packages/jsts/src/rules/S6598/unit.test.ts | 38 +- packages/jsts/src/rules/S6606/unit.test.ts | 106 +- packages/jsts/src/rules/S6627/cb.fixture.ts | 4 +- packages/jsts/src/rules/S6627/cb.test.ts | 7 +- packages/jsts/src/rules/S6643/cb.fixture.js | 4 +- packages/jsts/src/rules/S6643/cb.test.ts | 7 +- packages/jsts/src/rules/S6647/cb.fixture.js | 8 +- packages/jsts/src/rules/S6647/cb.fixture.ts | 7 +- packages/jsts/src/rules/S6647/cb.test.ts | 7 +- .../rules/S6647/problemCode.js} | 19 +- packages/jsts/src/rules/S6647/unit.test.ts | 102 +- packages/jsts/src/rules/S6660/unit.test.ts | 71 +- packages/jsts/src/rules/S6661/unit.test.ts | 114 +- packages/jsts/src/rules/S6666/unit.test.ts | 59 +- packages/jsts/src/rules/S6676/unit.test.ts | 161 +-- packages/jsts/src/rules/S6679/unit.test.ts | 83 +- .../S6747/non-react-project/unit.test.ts | 29 +- .../src/rules/S6747/react-project/cb.test.ts | 7 +- packages/jsts/src/rules/S6749/unit.test.ts | 39 +- packages/jsts/src/rules/S6754/unit.test.ts | 41 +- packages/jsts/src/rules/S6759/cb.fixture.tsx | 5 +- packages/jsts/src/rules/S6759/cb.test.ts | 7 +- packages/jsts/src/rules/S6788/unit.test.ts | 39 +- packages/jsts/src/rules/S6791/unit.test.ts | 49 +- packages/jsts/src/rules/S6827/cb.fixture.jsx | 2 +- packages/jsts/src/rules/S6827/cb.test.ts | 7 +- packages/jsts/src/rules/S6844/cb.fixture.tsx | 4 +- packages/jsts/src/rules/S6844/cb.test.ts | 7 +- packages/jsts/src/rules/S6853/cb.fixture.tsx | 4 +- packages/jsts/src/rules/S6853/cb.test.ts | 7 +- packages/jsts/src/rules/S6957/cb.fixture.tsx | 28 +- packages/jsts/src/rules/S6957/cb.test.ts | 7 +- packages/jsts/src/rules/S6957/unit.test.ts | 121 +- packages/jsts/src/rules/S6958/unit.test.ts | 395 +++---- packages/jsts/src/rules/S6959/cb.test.ts | 7 +- packages/jsts/src/rules/S6959/unit.test.ts | 53 +- packages/jsts/src/rules/S7059/cb.fixture.ts | 2 +- packages/jsts/src/rules/S7059/cb.test.ts | 7 +- packages/jsts/src/rules/S7060/cb.fixture.js | 8 +- packages/jsts/src/rules/S7060/cb.test.ts | 7 +- packages/jsts/src/rules/S881/unit.test.ts | 235 ++-- packages/jsts/src/rules/S888/cb.fixture.js | 22 +- packages/jsts/src/rules/S888/cb.test.ts | 7 +- packages/jsts/src/rules/S905/unit.test.ts | 149 +-- packages/jsts/src/rules/S930/unit.test.ts | 257 ++--- packages/jsts/tests/tools/helpers/index.ts | 18 - .../jsts/tests/tools/testers/babel/index.ts | 17 - .../jsts/tests/tools/testers/babel/tester.ts | 39 - .../tools/testers/comment-based/checker.ts | 14 +- .../testers/comment-based/fixtures/count.js | 1 - .../testers/comment-based/fixtures/mix.js | 1 - .../testers/comment-based/framework.test.ts | 12 - .../tools/testers/comment-based/framework.ts | 12 +- .../testers/comment-based/helpers/issues.ts | 25 +- .../tools/testers/comment-based/parser.ts | 2 + .../{typescript => }/fixtures/placeholder.tsx | 0 .../{javascript => }/fixtures/tsconfig.json | 2 +- .../javascript/fixtures/placeholder.js | 0 .../tests/tools/testers/javascript/index.ts | 17 - .../tests/tools/testers/javascript/tester.ts | 69 -- .../jsts/tests/tools/testers/rule-tester.ts | 89 +- .../testers/typescript/fixtures/tsconfig.json | 6 - .../tests/tools/testers/typescript/index.ts | 17 - .../tests/tools/testers/typescript/tester.ts | 72 -- 466 files changed, 27872 insertions(+), 25970 deletions(-) delete mode 100644 packages/jsts/src/rules/S6327/cb.fixture.ts rename packages/jsts/{tests/tools/testers/index.ts => src/rules/S6647/problemCode.js} (69%) delete mode 100644 packages/jsts/tests/tools/helpers/index.ts delete mode 100644 packages/jsts/tests/tools/testers/babel/index.ts delete mode 100644 packages/jsts/tests/tools/testers/babel/tester.ts delete mode 100644 packages/jsts/tests/tools/testers/comment-based/fixtures/count.js delete mode 100644 packages/jsts/tests/tools/testers/comment-based/fixtures/mix.js rename packages/jsts/tests/tools/testers/{typescript => }/fixtures/placeholder.tsx (100%) rename packages/jsts/tests/tools/testers/{javascript => }/fixtures/tsconfig.json (72%) delete mode 100644 packages/jsts/tests/tools/testers/javascript/fixtures/placeholder.js delete mode 100644 packages/jsts/tests/tools/testers/javascript/index.ts delete mode 100644 packages/jsts/tests/tools/testers/javascript/tester.ts delete mode 100644 packages/jsts/tests/tools/testers/typescript/fixtures/tsconfig.json delete mode 100644 packages/jsts/tests/tools/testers/typescript/index.ts delete mode 100644 packages/jsts/tests/tools/testers/typescript/tester.ts diff --git a/packages/jsts/src/rules/S100/unit.test.ts b/packages/jsts/src/rules/S100/unit.test.ts index 88d2d7fa018..e56bc065eaa 100644 --- a/packages/jsts/src/rules/S100/unit.test.ts +++ b/packages/jsts/src/rules/S100/unit.test.ts @@ -14,65 +14,64 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; -import { fileURLToPath } from 'node:url'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parser: fileURLToPath(import.meta.resolve('@typescript-eslint/parser')), - parserOptions: { ecmaVersion: 2018, ecmaFeatures: { jsx: true } }, -}); +const ruleTester = new RuleTester(); const DEFAULT_FORMAT = '^[_a-z][a-zA-Z0-9]*$'; const ALLOW_UPPERCASE = '^[A-Z][a-zA-Z0-9]*$'; -ruleTester.run('Function names should comply with a naming convention', rule, { - valid: [ - { - code: ` +describe('S100', () => { + it('S100', () => { + ruleTester.run('Function names should comply with a naming convention', rule, { + valid: [ + { + code: ` function doSomething(){} function _doSomething(){} function* doSomething(){} let doSomething = function Object () {} `, - options: [{ format: DEFAULT_FORMAT }], - }, - { - code: ` + options: [{ format: DEFAULT_FORMAT }], + }, + { + code: ` class C { doSomething(){ } * doSomething (){} } `, - options: [{ format: DEFAULT_FORMAT }], - }, - { - code: ` + options: [{ format: DEFAULT_FORMAT }], + }, + { + code: ` function DoSomething() {} `, - options: [{ format: ALLOW_UPPERCASE }], - }, - { - code: ` + options: [{ format: ALLOW_UPPERCASE }], + }, + { + code: ` function Welcome() { const greeting = 'Hello, world!'; return

{greeting}

}`, - options: [{ format: DEFAULT_FORMAT }], - }, - { - code: ` + options: [{ format: DEFAULT_FORMAT }], + }, + { + code: ` const Welcome = () => { const greeting = 'Hello, world!'; return

{greeting}

}`, - options: [{ format: DEFAULT_FORMAT }], - }, - { - code: ` + options: [{ format: DEFAULT_FORMAT }], + }, + { + code: ` const Welcome = function() { const greeting = 'Hello, world!'; @@ -82,78 +81,91 @@ ruleTester.run('Function names should comply with a naming convention', rule, { ) }`, - options: [{ format: DEFAULT_FORMAT }], - }, - ], - invalid: [ - { - code: ` + options: [{ format: DEFAULT_FORMAT }], + }, + ], + invalid: [ + { + code: ` function DoSomething(){} `, - options: [{ format: DEFAULT_FORMAT }], - errors: [ - { - message: `Rename this 'DoSomething' function to match the regular expression '${DEFAULT_FORMAT}'.`, - line: 2, - endLine: 2, - column: 18, - endColumn: 29, + options: [{ format: DEFAULT_FORMAT }], + errors: [ + { + message: `Rename this 'DoSomething' function to match the regular expression '${DEFAULT_FORMAT}'.`, + line: 2, + endLine: 2, + column: 18, + endColumn: 29, + }, + ], }, - ], - }, - { - code: ` + { + code: ` function do_something(){} function* DoSomething(){} `, - options: [{ format: DEFAULT_FORMAT }], - errors: [ - { - line: 2, + options: [{ format: DEFAULT_FORMAT }], + errors: [ + { + messageId: `renameFunction`, + line: 2, + }, + { + messageId: `renameFunction`, + line: 3, + }, + ], }, { - line: 3, - }, - ], - }, - { - code: ` + code: ` class C { DoSomething(){} * DoSomething (){} } `, - options: [{ format: DEFAULT_FORMAT }], - errors: [{ line: 3 }, { line: 4 }], - }, - { - code: ` + options: [{ format: DEFAULT_FORMAT }], + errors: [ + { + messageId: `renameFunction`, + line: 3, + }, + { + messageId: `renameFunction`, + line: 4, + }, + ], + }, + { + code: ` var MyObj1 = function Object () { this.a = 1; }; `, - options: [{ format: DEFAULT_FORMAT }], - errors: [ - { - line: 2, + options: [{ format: DEFAULT_FORMAT }], + errors: [ + { + messageId: `renameFunction`, + line: 2, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var MyObj1 = () => { this.a = 1; }; `, - options: [{ format: DEFAULT_FORMAT }], - errors: [ - { - line: 2, + options: [{ format: DEFAULT_FORMAT }], + errors: [ + { + messageId: `renameFunction`, + line: 2, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myObj = { Method1() {}, Method2: function() {}, @@ -169,10 +181,15 @@ ruleTester.run('Function names should comply with a naming convention', rule, { } }; `, - options: [{ format: DEFAULT_FORMAT }], - errors: [3, 4, 5, 6, 9, 12].map(line => { - return { line }; - }), - }, - ], + options: [{ format: DEFAULT_FORMAT }], + errors: [3, 4, 5, 6, 9, 12].map(line => { + return { + messageId: `renameFunction`, + line, + }; + }), + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S101/unit.test.ts b/packages/jsts/src/rules/S101/unit.test.ts index 9ab5b31cec2..142234ef05d 100644 --- a/packages/jsts/src/rules/S101/unit.test.ts +++ b/packages/jsts/src/rules/S101/unit.test.ts @@ -14,75 +14,78 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; -import { fileURLToPath } from 'node:url'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parser: fileURLToPath(import.meta.resolve('@typescript-eslint/parser')), - parserOptions: { ecmaVersion: 2018, ecmaFeatures: { jsx: true } }, -}); +const ruleTester = new RuleTester(); const DEFAULT_FORMAT = '^[A-Z][a-zA-Z0-9]*$'; const CUSTOM_FORMAT = '^[_A-Z][a-zA-Z0-9]*$'; -ruleTester.run('Class and interface names should comply with a naming convention', rule, { - valid: [ - { - code: ` +describe('S101', () => { + it('S101', () => { + ruleTester.run('Class and interface names should comply with a naming convention', rule, { + valid: [ + { + code: ` class MyClass {} var x = class y {} // Compliant, rule doesn't check class expressions interface MyInterface {} `, - options: [{ format: DEFAULT_FORMAT }], - }, - { - code: ` + options: [{ format: DEFAULT_FORMAT }], + }, + { + code: ` class MyClass {} class _MyClass {} interface _MyInterface {} `, - options: [{ format: CUSTOM_FORMAT }], - }, - ], - invalid: [ - { - code: `class my_class {}`, - options: [{ format: DEFAULT_FORMAT }], - errors: [ - { - message: `Rename class "my_class" to match the regular expression ${DEFAULT_FORMAT}.`, - line: 1, - endLine: 1, - column: 7, - endColumn: 15, + options: [{ format: CUSTOM_FORMAT }], }, ], - }, - { - code: `interface my_interface {}`, - options: [{ format: DEFAULT_FORMAT }], - errors: [ + invalid: [ { - message: `Rename interface "my_interface" to match the regular expression ${DEFAULT_FORMAT}.`, + code: `class my_class {}`, + options: [{ format: DEFAULT_FORMAT }], + errors: [ + { + message: `Rename class "my_class" to match the regular expression ${DEFAULT_FORMAT}.`, + line: 1, + endLine: 1, + column: 7, + endColumn: 15, + }, + ], + }, + { + code: `interface my_interface {}`, + options: [{ format: DEFAULT_FORMAT }], + errors: [ + { + message: `Rename interface "my_interface" to match the regular expression ${DEFAULT_FORMAT}.`, + }, + ], + }, + { + code: `class __MyClass {}`, + options: [{ format: CUSTOM_FORMAT }], + errors: [ + { + message: `Rename class "__MyClass" to match the regular expression ${CUSTOM_FORMAT}.`, + }, + ], }, - ], - }, - { - code: `class __MyClass {}`, - options: [{ format: CUSTOM_FORMAT }], - errors: [ - { message: `Rename class "__MyClass" to match the regular expression ${CUSTOM_FORMAT}.` }, - ], - }, - { - code: `interface __MyInterface {}`, - options: [{ format: CUSTOM_FORMAT }], - errors: [ { - message: `Rename interface "__MyInterface" to match the regular expression ${CUSTOM_FORMAT}.`, + code: `interface __MyInterface {}`, + options: [{ format: CUSTOM_FORMAT }], + errors: [ + { + message: `Rename interface "__MyInterface" to match the regular expression ${CUSTOM_FORMAT}.`, + }, + ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S104/unit.test.ts b/packages/jsts/src/rules/S104/unit.test.ts index 3bde82b8918..ca61b39767a 100644 --- a/packages/jsts/src/rules/S104/unit.test.ts +++ b/packages/jsts/src/rules/S104/unit.test.ts @@ -14,43 +14,48 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ parserOptions: { ecmaVersion: 2018 } }); -ruleTester.run('Too many lines in file', rule, { - valid: [ - { - code: `a; +describe('S104', () => { + it('S104', () => { + const ruleTester = new RuleTester(); + ruleTester.run('Too many lines in file', rule, { + valid: [ + { + code: `a; b; c;`, - options: [{ maximum: 3 }], - }, - { - code: `a; + options: [{ maximum: 3 }], + }, + { + code: `a; b; // comment c;`, - options: [{ maximum: 3 }], - }, - ], - invalid: [ - { - code: `a; + options: [{ maximum: 3 }], + }, + ], + invalid: [ + { + code: `a; b; c; // comment d;`, - options: [{ maximum: 3 }], - errors: [ - { - message: `This file has 4 lines, which is greater than 3 authorized. Split it into smaller files.`, - line: 0, - column: 1, + options: [{ maximum: 3 }], + errors: [ + { + message: `This file has 4 lines, which is greater than 3 authorized. Split it into smaller files.`, + line: 0, + column: 1, + }, + ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S105/unit.test.ts b/packages/jsts/src/rules/S105/unit.test.ts index 7f64f80f4d2..7a07eeae2de 100644 --- a/packages/jsts/src/rules/S105/unit.test.ts +++ b/packages/jsts/src/rules/S105/unit.test.ts @@ -14,54 +14,59 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ parserOptions: { ecmaVersion: 2018 } }); +const ruleTester = new RuleTester(); -ruleTester.run('Tabulation characters should not be used', rule, { - valid: [ - { - code: ` foo`, - }, - { - code: ` foo`, - }, - ], - invalid: [ - { - code: `\t`, - errors: [ +describe('S105', () => { + it('S105', () => { + ruleTester.run('Tabulation characters should not be used', rule, { + valid: [ { - message: 'Replace all tab characters in this file by sequences of white-spaces.', - line: 1, - column: 1, + code: ` foo`, }, - ], - }, - { - code: `foo(\tx);\n\t`, - errors: [ { - message: 'Replace all tab characters in this file by sequences of white-spaces.', - line: 1, - column: 1, + code: ` foo`, }, ], - }, - { - code: `foo(x)\n\t`, - errors: [ + invalid: [ + { + code: `\t`, + errors: [ + { + message: 'Replace all tab characters in this file by sequences of white-spaces.', + line: 1, + column: 1, + }, + ], + }, + { + code: `foo(\tx);\n\t`, + errors: [ + { + message: 'Replace all tab characters in this file by sequences of white-spaces.', + line: 1, + column: 1, + }, + ], + }, + { + code: `foo(x)\n\t`, + errors: [ + { + message: 'Replace all tab characters in this file by sequences of white-spaces.', + line: 2, + column: 1, + }, + ], + }, { - message: 'Replace all tab characters in this file by sequences of white-spaces.', - line: 2, - column: 1, + code: `foo(\tx);`, + errors: 1, }, ], - }, - { - code: `foo(\tx);`, - errors: 1, - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S1066/unit.test.ts b/packages/jsts/src/rules/S1066/unit.test.ts index a53e10ef92c..e85bcb80324 100644 --- a/packages/jsts/src/rules/S1066/unit.test.ts +++ b/packages/jsts/src/rules/S1066/unit.test.ts @@ -15,94 +15,102 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './rule.js'; -import { JavaScriptRuleTester } from '../../../tests/tools/index.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTester = new JavaScriptRuleTester(); +const ruleTester = new RuleTester(); -ruleTester.run('no-collapsible-if', rule, { - valid: [ - { - code: ` +describe('S1066', () => { + it('S1066', () => { + ruleTester.run('no-collapsible-if', rule, { + valid: [ + { + code: ` if (x) { console.log(x); }`, - }, - { - code: ` + }, + { + code: ` if (x) { if (y) {} console.log(x); }`, - }, - { - code: ` + }, + { + code: ` if (x) { console.log(x); if (y) {} }`, - }, - { - code: ` + }, + { + code: ` if (x) { if (y) {} } else {}`, - }, - { - code: ` + }, + { + code: ` if (x) { if (y) {} else {} }`, - }, - ], + }, + ], - invalid: [ - { - code: ` + invalid: [ + { + code: ` if (x) { //^^ > {{Merge this if statement with the nested one.}} if (y) {} //^^ {{Nested "if" statement.}} }`, - options: ['sonar-runtime'], - errors: [ - { - messageId: 'sonarRuntime', - data: { - sonarRuntimeData: JSON.stringify({ - message: 'Merge this if statement with the nested one.', - secondaryLocations: [ - { - message: 'Nested "if" statement.', - column: 8, - line: 4, - endColumn: 10, - endLine: 4, - }, - ], - }), - }, - line: 2, - column: 7, - endLine: 2, - endColumn: 9, + options: ['sonar-runtime'], + errors: [ + { + messageId: 'sonarRuntime', + data: { + sonarRuntimeData: JSON.stringify({ + message: 'Merge this if statement with the nested one.', + secondaryLocations: [ + { + message: 'Nested "if" statement.', + column: 8, + line: 4, + endColumn: 10, + endLine: 4, + }, + ], + }), + }, + line: 2, + column: 7, + endLine: 2, + endColumn: 9, + }, + ], }, - ], - }, - { - code: ` + { + code: ` if (x) if(y) {}`, - errors: [{ messageId: 'mergeNestedIfStatement' }], - }, - { - code: ` + errors: [{ messageId: 'mergeNestedIfStatement' }], + }, + { + code: ` if (x) { if(y) { if(z) { } } }`, - errors: [{ messageId: 'mergeNestedIfStatement' }, { messageId: 'mergeNestedIfStatement' }], - }, - ], + errors: [ + { messageId: 'mergeNestedIfStatement' }, + { messageId: 'mergeNestedIfStatement' }, + ], + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S1067/unit.test.ts b/packages/jsts/src/rules/S1067/unit.test.ts index 5f5693be97b..9ac2287d1b8 100644 --- a/packages/jsts/src/rules/S1067/unit.test.ts +++ b/packages/jsts/src/rules/S1067/unit.test.ts @@ -14,13 +14,12 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; import { EncodedMessage, IssueLocation } from '../helpers/index.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { jsx: true } }, -}); +const ruleTester = new RuleTester(); const options = [ { @@ -28,85 +27,87 @@ const options = [ }, ]; -ruleTester.run('Expressions should not be too complex', rule, { - valid: [ - { - code: `let b = 1 || 2 || 3 || 4`, - options, - }, - { - code: `let b = 1 && 2 && 4 && 4`, - options, - }, - { - code: `let b = 1 ? ( 2 ? ( 3 ? true : false ) : false ) : false;`, - options, - }, - { - code: `let b = foo(1 || 2 || 3, 1 || 2 || 3);`, - options, - }, - { - code: `let b = 1 || 2 || 3 || foo(1 || 2);`, - options, - }, - { - code: `let b = {x: 1 || 2 || 3, y: 1 || 2 || 3};`, - options, - }, - { - code: `let b = 1 || 2 || 3 || {x: 1 || 2};`, - options, - }, - { - code: `let b = function () {1 || 2 || 3 || 4};`, - options, - }, - { - code: `let b = 1 || 2 || 3 || function () {1 || 2};`, - options, - }, - { - code: `let b = 1 || 2 || 3 || function () {1 || 2 || function () {1 || 2}};`, - options, - }, - { - code: `let b = 1 || 2 || 3 || function f() {1 || 2 || function g() {1 || 2}};`, - options, - }, - { - code: `let b =
{1 || 2 || 3 || 4}
;`, - options, - }, - { - code: `let b = 1 || 2 || 3 ||
{1 || 2}
;`, - options, - }, - { - code: `let b = 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10;`, - options: [ +describe('S1067', () => { + it('S1067', () => { + ruleTester.run('Expressions should not be too complex', rule, { + valid: [ + { + code: `let b = 1 || 2 || 3 || 4`, + options, + }, + { + code: `let b = 1 && 2 && 4 && 4`, + options, + }, + { + code: `let b = 1 ? ( 2 ? ( 3 ? true : false ) : false ) : false;`, + options, + }, { - max: 10, + code: `let b = foo(1 || 2 || 3, 1 || 2 || 3);`, + options, + }, + { + code: `let b = 1 || 2 || 3 || foo(1 || 2);`, + options, + }, + { + code: `let b = {x: 1 || 2 || 3, y: 1 || 2 || 3};`, + options, + }, + { + code: `let b = 1 || 2 || 3 || {x: 1 || 2};`, + options, + }, + { + code: `let b = function () {1 || 2 || 3 || 4};`, + options, + }, + { + code: `let b = 1 || 2 || 3 || function () {1 || 2};`, + options, + }, + { + code: `let b = 1 || 2 || 3 || function () {1 || 2 || function () {1 || 2}};`, + options, + }, + { + code: `let b = 1 || 2 || 3 || function f() {1 || 2 || function g() {1 || 2}};`, + options, + }, + { + code: `let b =
{1 || 2 || 3 || 4}
;`, + options, + }, + { + code: `let b = 1 || 2 || 3 ||
{1 || 2}
;`, + options, + }, + { + code: `let b = 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10;`, + options: [ + { + max: 10, + }, + ], }, ], - }, - ], - invalid: [ - invalid(` + invalid: [ + invalid(` let b = 1 || 2 || 3 || 4 || 5; //--^^---^^---^^---^^-- `), - invalid(` + invalid(` let b = 1 && 2 && 3 && 4 && 5; //--^^---^^---^^---^^-- `), - invalid(` + invalid(` function f() { let b = 1 || 2 || 3 || 4 || 5; //--^^---^^---^^---^^-- } `), - invalid(` + invalid(` function f() { let b = 1 || 2 || 3 || function g() { @@ -115,7 +116,7 @@ ruleTester.run('Expressions should not be too complex', rule, { } } `), - invalid(` + invalid(` function f() { let b = 1 || 2 || 3 || function g() { @@ -127,98 +128,100 @@ ruleTester.run('Expressions should not be too complex', rule, { } } `), - invalid( - ` + invalid( + ` let b = 1 ? true : false; //--^------------- `, - 0, - ), - ], -}); + 0, + ), + ], + }); + }); -function invalid(code: string, max = 3) { - const issue = { - complexity: 0, - primaryLocation: {} as IssueLocation, - secondaryLocations: [] as IssueLocation[], - }; - const lines = code.split('\n'); - for (const [index, line] of lines.entries()) { - let found: RegExpMatchArray | null; + function invalid(code: string, max = 3) { + const issue = { + complexity: 0, + primaryLocation: {} as IssueLocation, + secondaryLocations: [] as IssueLocation[], + }; + const lines = code.split('\n'); + for (const [index, line] of lines.entries()) { + let found: RegExpMatchArray | null; - const regex = /\/\/\s*([-\^]+)/; - found = line.match(regex); - if (found) { - let marker = found[1]; - const column = line.indexOf(marker); - issue.primaryLocation = location(index, column, index, column + marker.length); + const regex = /\/\/\s*([-\^]+)/; + found = line.match(regex); + if (found) { + let marker = found[1]; + const column = line.indexOf(marker); + issue.primaryLocation = location(index, column, index, column + marker.length); - marker += ' '; - let secondaryStart = -1; - for (let i = 0; i < marker.length; ++i) { - if (marker[i] === '^') { - if (secondaryStart === -1) { - secondaryStart = i; - } - } else { - if (secondaryStart !== -1) { - issue.complexity += 1; - issue.secondaryLocations.push( - location(index, column + secondaryStart, index, column + i, '+1'), - ); - secondaryStart = -1; + marker += ' '; + let secondaryStart = -1; + for (let i = 0; i < marker.length; ++i) { + if (marker[i] === '^') { + if (secondaryStart === -1) { + secondaryStart = i; + } + } else { + if (secondaryStart !== -1) { + issue.complexity += 1; + issue.secondaryLocations.push( + location(index, column + secondaryStart, index, column + i, '+1'), + ); + secondaryStart = -1; + } } } } } + issue.secondaryLocations.sort((a, b) => b.column - a.column); + return { + code, + errors: [error(issue, max)], + options: [ + { + max, + }, + 'sonar-runtime', + ], + }; } - issue.secondaryLocations.sort((a, b) => b.column - a.column); - return { - code, - errors: [error(issue, max)], - options: [ - { - max, - }, - 'sonar-runtime', - ], - }; -} -function error( - issue: { - complexity: number; - primaryLocation: IssueLocation; - secondaryLocations: IssueLocation[]; - }, - max: number, -) { - const { line, column, endColumn, endLine } = issue.primaryLocation; - return { - message: encode(issue.complexity, max, issue.secondaryLocations), - line, - column: column + 1, - endColumn: endColumn + 1, - endLine, - }; -} + function error( + issue: { + complexity: number; + primaryLocation: IssueLocation; + secondaryLocations: IssueLocation[]; + }, + max: number, + ) { + const { line, column, endColumn, endLine } = issue.primaryLocation; + return { + message: encode(issue.complexity, max, issue.secondaryLocations), + line, + column: column + 1, + endColumn: endColumn + 1, + endLine, + }; + } -function encode(complexity: number, max: number, secondaryLocations: IssueLocation[]): string { - const encodedMessage: EncodedMessage = { - message: `Reduce the number of conditional operators (${complexity}) used in the expression (maximum allowed ${max}).`, - secondaryLocations, - cost: complexity - max, - }; - return JSON.stringify(encodedMessage); -} + function encode(complexity: number, max: number, secondaryLocations: IssueLocation[]): string { + const encodedMessage: EncodedMessage = { + message: `Reduce the number of conditional operators (${complexity}) used in the expression (maximum allowed ${max}).`, + secondaryLocations, + cost: complexity - max, + }; + return JSON.stringify(encodedMessage); + } -function location( - line: number, - column: number, - endLine: number, - endColumn: number, - message?: string, -): IssueLocation { - return { message, column, line, endColumn, endLine }; -} + function location( + line: number, + column: number, + endLine: number, + endColumn: number, + message?: string, + ): IssueLocation { + return { message, column, line, endColumn, endLine }; + } +}); diff --git a/packages/jsts/src/rules/S1068/unit.test.ts b/packages/jsts/src/rules/S1068/unit.test.ts index d6f4cf4d357..c579a3a2243 100644 --- a/packages/jsts/src/rules/S1068/unit.test.ts +++ b/packages/jsts/src/rules/S1068/unit.test.ts @@ -14,101 +14,110 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2022 }, -}); +const ruleTester = new RuleTester(); -ruleTester.run(`Unused private class members should be removed`, rule, { - valid: [ - { - code: ` +describe('S1068', () => { + it('S1068', () => { + ruleTester.run(`Unused private class members should be removed`, rule, { + valid: [ + { + code: ` class MyClass{ #foo = 123; bar(){return this.#foo;} }`, - }, - ], - invalid: [ - { - code: `class MyClass{ #foo = 123; }`, - errors: [ + }, + ], + invalid: [ { - suggestions: [ + code: `class MyClass{ #foo = 123; }`, + errors: [ { - desc: 'Remove unused private class member', - output: `class MyClass{ }`, + messageId: 'unusedPrivateClassMember', + suggestions: [ + { + desc: 'Remove unused private class member', + output: `class MyClass{ }`, + }, + ], }, ], }, - ], - }, - { - code: `class MyClass{ #foo(){} }`, - errors: [ { - suggestions: [ + code: `class MyClass{ #foo(){} }`, + errors: [ { - desc: 'Remove unused private class member', - output: `class MyClass{ }`, + messageId: 'unusedPrivateClassMember', + suggestions: [ + { + desc: 'Remove unused private class member', + output: `class MyClass{ }`, + }, + ], }, ], }, - ], - }, - { - code: `class MyClass{ get #foo(){} }`, - errors: [ { - suggestions: [ + code: `class MyClass{ get #foo(){} }`, + errors: [ { - desc: 'Remove unused private class member', - output: `class MyClass{ }`, + messageId: 'unusedPrivateClassMember', + suggestions: [ + { + desc: 'Remove unused private class member', + output: `class MyClass{ }`, + }, + ], }, ], }, - ], - }, - { - code: `class MyClass{ set #foo(v){} }`, - errors: [ { - suggestions: [ + code: `class MyClass{ set #foo(v){} }`, + errors: [ { - desc: 'Remove unused private class member', - output: `class MyClass{ }`, + messageId: 'unusedPrivateClassMember', + suggestions: [ + { + desc: 'Remove unused private class member', + output: `class MyClass{ }`, + }, + ], }, ], }, - ], - }, - { - code: `class MyClass{ static #foo = 123; }`, - errors: [ { - suggestions: [ + code: `class MyClass{ static #foo = 123; }`, + errors: [ { - desc: 'Remove unused private class member', - output: `class MyClass{ }`, + messageId: 'unusedPrivateClassMember', + suggestions: [ + { + desc: 'Remove unused private class member', + output: `class MyClass{ }`, + }, + ], }, ], }, - ], - }, - { - code: `class MyClass{ static #foo(){} }`, - errors: [ { - suggestions: [ + code: `class MyClass{ static #foo(){} }`, + errors: [ { - desc: 'Remove unused private class member', - output: `class MyClass{ }`, + messageId: 'unusedPrivateClassMember', + suggestions: [ + { + desc: 'Remove unused private class member', + output: `class MyClass{ }`, + }, + ], }, ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S107/unit.test.ts b/packages/jsts/src/rules/S107/unit.test.ts index 7e136972d71..f5c477e8a4d 100644 --- a/packages/jsts/src/rules/S107/unit.test.ts +++ b/packages/jsts/src/rules/S107/unit.test.ts @@ -15,7 +15,8 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import { TypeScriptRuleTester } from '../../../tests/tools/index.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; const MAX_PARAMS_3 = 3; const MAX_PARAMS_5 = 5; @@ -24,117 +25,120 @@ const createOptions = (max: number) => { return [{ max }]; }; -const ruleTester = new TypeScriptRuleTester(); -ruleTester.run(``, rule, { - valid: [ - { - code: `function f(a, b) {}`, - options: createOptions(MAX_PARAMS_5), - }, - { - code: `function f(a, b, c, d, e) {}`, - options: createOptions(MAX_PARAMS_5), - }, - { - code: `function f(a: any, b: any): any;`, - options: createOptions(MAX_PARAMS_5), - }, - { - code: `function f(a: any, b: any, c: any, d: any, e: any): any;`, - options: createOptions(MAX_PARAMS_5), - }, - { - code: `class C { m(a: any, b: any): any; }`, - options: createOptions(MAX_PARAMS_5), - }, - { - code: `class C { constructor(private a: any, public b: any) {} }`, - options: createOptions(MAX_PARAMS_5), - }, - { - code: ` +describe('S107', () => { + it('S107', () => { + const ruleTester = new RuleTester(); + ruleTester.run(``, rule, { + valid: [ + { + code: `function f(a, b) {}`, + options: createOptions(MAX_PARAMS_5), + }, + { + code: `function f(a, b, c, d, e) {}`, + options: createOptions(MAX_PARAMS_5), + }, + { + code: `function f(a: any, b: any): any;`, + options: createOptions(MAX_PARAMS_5), + }, + { + code: `function f(a: any, b: any, c: any, d: any, e: any): any;`, + options: createOptions(MAX_PARAMS_5), + }, + { + code: `class C { m(a: any, b: any): any; }`, + options: createOptions(MAX_PARAMS_5), + }, + { + code: `class C { constructor(private a: any, public b: any) {} }`, + options: createOptions(MAX_PARAMS_5), + }, + { + code: ` import { Component } from '@angular/core'; @Component({/* ... */}) class AppComponent { constructor(a, b, c, d, e, f) {} } `, - options: createOptions(MAX_PARAMS_3), - }, - { - code: `class C { constructor(private a: any, b: any, c: any, d: any) {} }`, - options: createOptions(MAX_PARAMS_3), - }, - ], - invalid: [ - { - code: `function f(a, b, c, d, e) {}`, - options: createOptions(MAX_PARAMS_3), - errors: [ + options: createOptions(MAX_PARAMS_3), + }, { - message: "Function 'f' has too many parameters (5). Maximum allowed is 3.", - line: 1, - column: 1, - endLine: 1, - endColumn: 11, + code: `class C { constructor(private a: any, b: any, c: any, d: any) {} }`, + options: createOptions(MAX_PARAMS_3), }, ], - }, - { - code: `function f(a: any, b: any, c: any, d: any, e: any): any;`, - options: createOptions(MAX_PARAMS_3), - errors: [ + invalid: [ { - message: "Function declaration 'f' has too many parameters (5). Maximum allowed is 3.", - line: 1, - column: 1, - endLine: 1, - endColumn: 11, + code: `function f(a, b, c, d, e) {}`, + options: createOptions(MAX_PARAMS_3), + errors: [ + { + message: "Function 'f' has too many parameters (5). Maximum allowed is 3.", + line: 1, + column: 1, + endLine: 1, + endColumn: 11, + }, + ], }, - ], - }, - { - code: `class C { m(a: any, b: any, c: any, d: any, e: any): any; }`, - options: createOptions(MAX_PARAMS_3), - errors: [ { - message: "Empty function 'm' has too many parameters (5). Maximum allowed is 3.", - line: 1, - column: 11, - endLine: 1, - endColumn: 12, + code: `function f(a: any, b: any, c: any, d: any, e: any): any;`, + options: createOptions(MAX_PARAMS_3), + errors: [ + { + message: + "Function declaration 'f' has too many parameters (5). Maximum allowed is 3.", + line: 1, + column: 1, + endLine: 1, + endColumn: 11, + }, + ], }, - ], - }, - { - code: `class C { constructor(a: any, b: any, c: any, d: any, e: any); }`, - options: createOptions(MAX_PARAMS_3), - errors: [ { - message: - "Empty function 'constructor' has too many parameters (5). Maximum allowed is 3.", - line: 1, - column: 11, - endLine: 1, - endColumn: 22, + code: `class C { m(a: any, b: any, c: any, d: any, e: any): any; }`, + options: createOptions(MAX_PARAMS_3), + errors: [ + { + message: "Empty function 'm' has too many parameters (5). Maximum allowed is 3.", + line: 1, + column: 11, + endLine: 1, + endColumn: 12, + }, + ], }, - ], - }, - { - code: `class C { constructor(private a: any, b: any, c: any, d: any, e: any) {} }`, - options: createOptions(MAX_PARAMS_3), - errors: [ { - message: 'Constructor has too many parameters (5). Maximum allowed is 3.', - line: 1, - column: 11, - endLine: 1, - endColumn: 22, + code: `class C { constructor(a: any, b: any, c: any, d: any, e: any); }`, + options: createOptions(MAX_PARAMS_3), + errors: [ + { + message: + "Empty function 'constructor' has too many parameters (5). Maximum allowed is 3.", + line: 1, + column: 11, + endLine: 1, + endColumn: 22, + }, + ], }, - ], - }, - { - code: ` + { + code: `class C { constructor(private a: any, b: any, c: any, d: any, e: any) {} }`, + options: createOptions(MAX_PARAMS_3), + errors: [ + { + message: 'Constructor has too many parameters (5). Maximum allowed is 3.', + line: 1, + column: 11, + endLine: 1, + endColumn: 22, + }, + ], + }, + { + code: ` import { NotComponent } from '@angular/core'; import { Component } from 'not-angular-core'; @@ -157,13 +161,10 @@ ruleTester.run(``, rule, { constructor(a, b, c, d, e, f) {} } `, - options: createOptions(MAX_PARAMS_3), - errors: 4, - }, - { - code: `class C { constructor(private a: any, b: any, c: any, d: any, e: any) {} }`, - options: createOptions(MAX_PARAMS_3), - errors: 1, - }, - ], + options: createOptions(MAX_PARAMS_3), + errors: 4, + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S1077/cb.fixture.tsx b/packages/jsts/src/rules/S1077/cb.fixture.tsx index 2045c78fa54..45b01f11301 100644 --- a/packages/jsts/src/rules/S1077/cb.fixture.tsx +++ b/packages/jsts/src/rules/S1077/cb.fixture.tsx @@ -1,2 +1,2 @@ - ; // Noncompliant + ; // Noncompliant {{img elements must have an alt prop, either with meaningful text, or an empty string for decorative images.}} // ^^^ diff --git a/packages/jsts/src/rules/S1077/cb.test.ts b/packages/jsts/src/rules/S1077/cb.test.ts index 4b81349f5d1..1a7e6353e95 100644 --- a/packages/jsts/src/rules/S1077/cb.test.ts +++ b/packages/jsts/src/rules/S1077/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S1077', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S1082/cb.test.ts b/packages/jsts/src/rules/S1082/cb.test.ts index 552bcb01873..59ee538585a 100644 --- a/packages/jsts/src/rules/S1082/cb.test.ts +++ b/packages/jsts/src/rules/S1082/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S1082', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S1082/clickevents.fixture.jsx b/packages/jsts/src/rules/S1082/clickevents.fixture.jsx index 0fd14d99d4a..18b3d9380af 100644 --- a/packages/jsts/src/rules/S1082/clickevents.fixture.jsx +++ b/packages/jsts/src/rules/S1082/clickevents.fixture.jsx @@ -4,5 +4,5 @@ ); }`, - parserOptions: { ecmaFeatures: { jsx: true } }, - options: [0], - }, - { - code: ` + options: [0], + }, + { + code: ` function f(a, b, c) { const x = a || []; const y = b || {}; const z = c ?? ''; }`, - options: [0], - }, - { - code: ` + options: [0], + }, + { + code: ` function f(a, b, c) { a = a || []; b = b || {}; c = c ?? ''; }`, - options: [0], - }, - ], - invalid: [ - testCaseWithSonarRuntime( - ` + options: [0], + }, + ], + invalid: [ + testCaseWithSonarRuntime( + ` function check_secondaries() { if (condition) { // +1 "if" if (condition) {} else {} // +2 "if", +1 "else" @@ -134,47 +127,47 @@ ruleTester.run('cognitive-complexity', rule, { return foo(a && b) && c; // +1 "&&", +1 "&&" }`, - [ - { message: '+1', column: 8, line: 3, endColumn: 10, endLine: 3 }, // if - { message: '+1', column: 10, line: 7, endColumn: 14, endLine: 7 }, // else - { - message: '+2 (incl. 1 for nesting)', - column: 10, - line: 4, - endColumn: 12, - endLine: 4, - }, // if - { message: '+1', column: 28, line: 4, endColumn: 32, endLine: 4 }, // else - { - message: '+2 (incl. 1 for nesting)', - column: 10, - line: 6, - endColumn: 15, - endLine: 6, - }, // catch - { message: '+1', column: 8, line: 11, endColumn: 13, endLine: 11 }, // while - { message: '+1', column: 10, line: 12, endColumn: 15, endLine: 12 }, // break - { message: '+1', column: 10, line: 15, endColumn: 11, endLine: 15 }, // ? - { message: '+1', column: 8, line: 17, endColumn: 14, endLine: 17 }, // switch - { message: '+1', column: 27, line: 19, endColumn: 29, endLine: 19 }, // && - { message: '+1', column: 21, line: 19, endColumn: 23, endLine: 19 }, // && - ], - 13, - ), + [ + { message: '+1', column: 8, line: 3, endColumn: 10, endLine: 3 }, // if + { message: '+1', column: 10, line: 7, endColumn: 14, endLine: 7 }, // else + { + message: '+2 (incl. 1 for nesting)', + column: 10, + line: 4, + endColumn: 12, + endLine: 4, + }, // if + { message: '+1', column: 28, line: 4, endColumn: 32, endLine: 4 }, // else + { + message: '+2 (incl. 1 for nesting)', + column: 10, + line: 6, + endColumn: 15, + endLine: 6, + }, // catch + { message: '+1', column: 8, line: 11, endColumn: 13, endLine: 11 }, // while + { message: '+1', column: 10, line: 12, endColumn: 15, endLine: 12 }, // break + { message: '+1', column: 10, line: 15, endColumn: 11, endLine: 15 }, // ? + { message: '+1', column: 8, line: 17, endColumn: 14, endLine: 17 }, // switch + { message: '+1', column: 27, line: 19, endColumn: 29, endLine: 19 }, // && + { message: '+1', column: 21, line: 19, endColumn: 23, endLine: 19 }, // && + ], + 13, + ), - // expressions - testCaseWithSonarRuntime( - ` + // expressions + testCaseWithSonarRuntime( + ` function and_or_locations() { foo(1 && 2 || 3 && 4); }`, - [ - { message: '+1', column: 14, line: 3, endColumn: 16, endLine: 3 }, // && - { message: '+1', column: 24, line: 3, endColumn: 26, endLine: 3 }, // && - ], - ), - { - code: ` + [ + { message: '+1', column: 14, line: 3, endColumn: 16, endLine: 3 }, // && + { message: '+1', column: 24, line: 3, endColumn: 26, endLine: 3 }, // && + ], + ), + { + code: ` function and_or() { foo(1 && 2 && 3 && 4); // +1 foo((1 && 2) && (3 && 4)); // +1 @@ -185,29 +178,29 @@ ruleTester.run('cognitive-complexity', rule, { foo(1 && 2 || 3 && 4); // +2 foo(1 && 2 && !(3 && 4)); // +2 }`, - options: [0], - errors: [message(9)], - }, - { - code: ` + options: [0], + errors: [message(9)], + }, + { + code: ` function conditional_expression() { return condition ? trueValue : falseValue; }`, - options: [0], - errors: [message(1)], - }, - { - code: ` + options: [0], + errors: [message(1)], + }, + { + code: ` function nested_conditional_expression() { x = condition1 ? (condition2 ? trueValue2 : falseValue2) : falseValue1 ; // +3 x = condition1 ? trueValue1 : (condition2 ? trueValue2 : falseValue2) ; // +3 x = condition1 ? (condition2 ? trueValue2 : falseValue2) : (condition3 ? trueValue3 : falseValue3); // +5 }`, - options: [0], - errors: [message(11)], - }, - { - code: ` + options: [0], + errors: [message(11)], + }, + { + code: ` function complexity_in_conditions(a, b) { if (a && b) { // +1(if) +1(&&) a && b; // +1 (no nesting) @@ -216,23 +209,23 @@ ruleTester.run('cognitive-complexity', rule, { do {} while (a && b) // +1(do) +1(&&) for (var i = a && b; a && b; a && b) {} // +1(for) +1(&&) +1(&&) +1(&&) }`, - options: [0], - errors: [message(11)], - }, + options: [0], + errors: [message(11)], + }, - // different function types - { - code: 'var arrowFunction = (a, b) => a && b;', - options: [0], - errors: [message(1, { line: 1, endLine: 1, column: 28, endColumn: 30 })], - }, - { - code: 'var functionExpression = function(a, b) { return a && b; }', - options: [0], - errors: [message(1, { line: 1, endLine: 1, column: 26, endColumn: 34 })], - }, - { - code: ` + // different function types + { + code: 'var arrowFunction = (a, b) => a && b;', + options: [0], + errors: [message(1, { line: 1, endLine: 1, column: 28, endColumn: 30 })], + }, + { + code: 'var functionExpression = function(a, b) { return a && b; }', + options: [0], + errors: [message(1, { line: 1, endLine: 1, column: 26, endColumn: 34 })], + }, + { + code: ` class A { method() { if (condition) { // +1 @@ -240,21 +233,21 @@ ruleTester.run('cognitive-complexity', rule, { } } }`, - options: [0], - errors: [message(1, { line: 3, endLine: 3, column: 9, endColumn: 15 })], - }, - { - code: ` + options: [0], + errors: [message(1, { line: 3, endLine: 3, column: 9, endColumn: 15 })], + }, + { + code: ` class A { constructor() { if (condition) {} // +1 } }`, - options: [0], - errors: [message(1, { line: 3, endLine: 3, column: 9, endColumn: 20 })], - }, - { - code: ` + options: [0], + errors: [message(1, { line: 3, endLine: 3, column: 9, endColumn: 20 })], + }, + { + code: ` class A { set foo(x) { if (condition) {} // +1 @@ -263,67 +256,67 @@ ruleTester.run('cognitive-complexity', rule, { if (condition) {} // +1 } }`, - options: [0], - errors: [ - message(1, { line: 3, endLine: 3, column: 13, endColumn: 16 }), - message(1, { line: 6, endLine: 6, column: 13, endColumn: 16 }), - ], - }, - { - code: ` + options: [0], + errors: [ + message(1, { line: 3, endLine: 3, column: 13, endColumn: 16 }), + message(1, { line: 6, endLine: 6, column: 13, endColumn: 16 }), + ], + }, + { + code: ` class A { ['foo']() { if (condition) {} // +1 } }`, - options: [0], - errors: [message(1, { line: 3, endLine: 3, column: 10, endColumn: 15 })], - }, - { - // here function is a function declaration, but it has no name (despite of the @types/estree definition) - code: ` + options: [0], + errors: [message(1, { line: 3, endLine: 3, column: 10, endColumn: 15 })], + }, + { + // here function is a function declaration, but it has no name (despite of the @types/estree definition) + code: ` export default function() { if (options) {} }`, - options: [0], - errors: [message(1, { line: 2, endLine: 2, column: 22, endColumn: 30 })], - }, + options: [0], + errors: [message(1, { line: 2, endLine: 2, column: 22, endColumn: 30 })], + }, - // nested functions - { - code: ` + // nested functions + { + code: ` function nesting_func_no_complexity() { function nested_func() { // Noncompliant if (condition) {} // +1 } }`, - options: [0], - errors: [message(1, { line: 3 })], - }, - { - code: ` + options: [0], + errors: [message(1, { line: 3 })], + }, + { + code: ` function nesting_func_with_complexity() { // Noncompliant if (condition) {} // +1 function nested_func() { // Noncompliant if (condition) {} // +1 } }`, - options: [0], - errors: [message(1, { line: 2 }), message(1, { line: 4 })], - }, - { - code: ` + options: [0], + errors: [message(1, { line: 2 }), message(1, { line: 4 })], + }, + { + code: ` function nesting_func_with_not_structural_complexity() { // Noncompliant return a && b; // +1 function nested_func() { // Noncompliant if (condition) {} // +1 } }`, - options: [0], - errors: [message(1, { line: 2 }), message(1, { line: 4 })], - }, - { - code: ` + options: [0], + errors: [message(1, { line: 2 }), message(1, { line: 4 })], + }, + { + code: ` function two_level_function_nesting() { function nested1() { function nested2() { // Noncompliant @@ -331,11 +324,11 @@ ruleTester.run('cognitive-complexity', rule, { } } }`, - options: [0], - errors: [message(1, { line: 4 })], - }, - { - code: ` + options: [0], + errors: [message(1, { line: 4 })], + }, + { + code: ` function two_level_function_nesting_2() { function nested1() { // Noncompliant if (condition) {} // +1 @@ -344,22 +337,22 @@ ruleTester.run('cognitive-complexity', rule, { } } }`, - options: [0], - errors: [message(1, { line: 3 }), message(1, { line: 5 })], - }, - { - code: ` + options: [0], + errors: [message(1, { line: 3 }), message(1, { line: 5 })], + }, + { + code: ` function with_complexity_after_nested_function() { // Noncompliant function nested_func() { // Noncompliant if (condition) {} // +1 } if (condition) {} // +1 }`, - options: [0], - errors: [message(1, { line: 2 }), message(1, { line: 3 })], - }, - { - code: ` + options: [0], + errors: [message(1, { line: 2 }), message(1, { line: 3 })], + }, + { + code: ` function nested_async_method() { class X { async method() { @@ -367,24 +360,24 @@ ruleTester.run('cognitive-complexity', rule, { } } }`, - options: [0], - errors: [message(1, { line: 4, column: 17, endColumn: 23 })], - }, + options: [0], + errors: [message(1, { line: 4, column: 17, endColumn: 23 })], + }, - // spaghetti - { - code: ` + // spaghetti + { + code: ` (function(a) { // Noncompliant if (cond) {} return a; })(function(b) {return b + 1})(0);`, - options: [0], - errors: [message(1)], - }, + options: [0], + errors: [message(1)], + }, - // ignore React functional components - { - code: ` + // ignore React functional components + { + code: ` function Welcome() { const handleSomething = () => { if (x) {} // +1 @@ -392,12 +385,11 @@ ruleTester.run('cognitive-complexity', rule, { if (x) {} // +1 return

Hello, world

; }`, - parserOptions: { ecmaFeatures: { jsx: true } }, - options: [0], - errors: [message(1, { line: 2 }), message(1, { line: 3 })], - }, - { - code: ` + options: [0], + errors: [message(1, { line: 2 }), message(1, { line: 3 })], + }, + { + code: ` const Welcome = () => { const handleSomething = () => { if (x) {} // +1 @@ -405,12 +397,11 @@ ruleTester.run('cognitive-complexity', rule, { if (x) {} // +1 return

Hello, world

; }`, - parserOptions: { ecmaFeatures: { jsx: true } }, - options: [0], - errors: [message(1, { line: 2 }), message(1, { line: 3 })], - }, - { - code: ` + options: [0], + errors: [message(1, { line: 2 }), message(1, { line: 3 })], + }, + { + code: ` const Welcome = () => { const handleSomething = () => { if (x) {} // +1 @@ -423,12 +414,11 @@ ruleTester.run('cognitive-complexity', rule, { ); }`, - parserOptions: { ecmaFeatures: { jsx: true } }, - options: [0], - errors: [message(1, { line: 2 }), message(1, { line: 3 })], - }, - testCaseWithSonarRuntime( - ` + options: [0], + errors: [message(1, { line: 2 }), message(1, { line: 3 })], + }, + testCaseWithSonarRuntime( + ` function Component(obj) { return ( <> @@ -436,12 +426,12 @@ ruleTester.run('cognitive-complexity', rule, { ); }`, - [ - { message: '+1', column: 56, line: 5, endColumn: 57, endLine: 5 }, // ?: - ], - ), - testCaseWithSonarRuntime( - ` + [ + { message: '+1', column: 56, line: 5, endColumn: 57, endLine: 5 }, // ?: + ], + ), + testCaseWithSonarRuntime( + ` function Component(obj) { return ( <> @@ -449,12 +439,12 @@ ruleTester.run('cognitive-complexity', rule, { ); }`, - [ - { message: '+1', column: 25, line: 5, endColumn: 27, endLine: 5 }, // && - ], - ), - testCaseWithSonarRuntime( - ` + [ + { message: '+1', column: 25, line: 5, endColumn: 27, endLine: 5 }, // && + ], + ), + testCaseWithSonarRuntime( + ` function Component(obj) { return ( <> @@ -462,18 +452,18 @@ ruleTester.run('cognitive-complexity', rule, { ); }`, - [ - { message: '+1', column: 25, line: 5, endColumn: 27, endLine: 5 }, // && - { message: '+1', column: 40, line: 5, endColumn: 41, endLine: 5 }, // || + [ + { message: '+1', column: 25, line: 5, endColumn: 27, endLine: 5 }, // && + { message: '+1', column: 40, line: 5, endColumn: 41, endLine: 5 }, // || + ], + ), ], - ), - ], -}); + }); -ruleTester.run('cognitive-complexity 15', rule, { - valid: [ - { - code: ` + ruleTester.run('cognitive-complexity 15', rule, { + valid: [ + { + code: ` function foo() { if (a) { // +1 (nesting level +1) if (b) { // +2 (nesting level +1) @@ -485,11 +475,11 @@ ruleTester.run('cognitive-complexity 15', rule, { } } }`, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` function foo() { if (a) { // +1 (nesting level +1) if (b) { // +2 (nesting level +1) @@ -503,24 +493,24 @@ ruleTester.run('cognitive-complexity 15', rule, { } } }`, - errors: [ - { - messageId: 'refactorFunction', - data: { - complexityAmount: 21, - threshold: 15, - }, + errors: [ + { + messageId: 'refactorFunction', + data: { + complexityAmount: 21, + threshold: 15, + }, + }, + ], }, ], - }, - ], -}); + }); -ruleTester.run('file-cognitive-complexity', rule, { - valid: [], - invalid: [ - { - code: ` + ruleTester.run('file-cognitive-complexity', rule, { + valid: [], + invalid: [ + { + code: ` a; // Noncompliant [[id=1]] {{25}} function foo() { x && y; @@ -600,40 +590,41 @@ class TopLevel { } } `, - options: [0, 'metric'], - errors: [{ messageId: 'fileComplexity', data: { complexityAmount: 25 } }], - }, - ], -}); + options: [0, 'metric'], + errors: [{ messageId: 'fileComplexity', data: { complexityAmount: 25 } }], + }, + ], + }); -function testCaseWithSonarRuntime( - code: string, - secondaryLocations: IssueLocation[], - complexity?: number, -): NodeRuleTester.InvalidTestCase { - const cost = complexity ?? secondaryLocations.length; - const message = `Refactor this function to reduce its Cognitive Complexity from ${cost} to the 0 allowed.`; - const sonarRuntimeData = JSON.stringify({ message, secondaryLocations, cost }); - return { - code, - parserOptions: { ecmaFeatures: { jsx: true } }, - options: [0, 'sonar-runtime'], - errors: [ - { - messageId: 'sonarRuntime', - data: { - threshold: 0, - sonarRuntimeData, - }, - }, - ], - }; -} + function testCaseWithSonarRuntime( + code: string, + secondaryLocations: IssueLocation[], + complexity?: number, + ) { + const cost = complexity ?? secondaryLocations.length; + const message = `Refactor this function to reduce its Cognitive Complexity from ${cost} to the 0 allowed.`; + const sonarRuntimeData = JSON.stringify({ message, secondaryLocations, cost }); + return { + code, + options: [0, 'sonar-runtime'], + errors: [ + { + messageId: 'sonarRuntime', + data: { + threshold: 0, + sonarRuntimeData, + }, + }, + ], + }; + } -function message(complexityAmount: number, other: NodeRuleTester.TestCaseError = {}) { - return { - messageId: 'refactorFunction', - data: { complexityAmount, threshold: 0 }, - ...other, - }; -} + function message(complexityAmount: number, other = {}) { + return { + messageId: 'refactorFunction', + data: { complexityAmount, threshold: 0 }, + ...other, + }; + } + }); +}); diff --git a/packages/jsts/src/rules/S3782/unit.test.ts b/packages/jsts/src/rules/S3782/unit.test.ts index 1c2b8c0563d..194dc847af4 100644 --- a/packages/jsts/src/rules/S3782/unit.test.ts +++ b/packages/jsts/src/rules/S3782/unit.test.ts @@ -15,148 +15,150 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; -import { TypeScriptRuleTester } from '../../../tests/tools/index.js'; +import { DefaultParserRuleTester, RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const eslintRuleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); -eslintRuleTester.run('Correct types should be used [js]', rule, { - valid: [ - { - code: `Math.abs("42"); // not reported without type information`, - }, - ], - invalid: [], -}); +describe('S3782', () => { + it('S3782', () => { + const eslintRuleTester = new DefaultParserRuleTester(); + eslintRuleTester.run('Correct types should be used [js]', rule, { + valid: [ + { + code: `Math.abs("42"); // not reported without type information`, + }, + ], + invalid: [], + }); -const typeScriptRuleTester = new TypeScriptRuleTester(); -typeScriptRuleTester.run('Correct types should be used', rule, { - valid: [ - { - code: ` + const typeScriptRuleTester = new RuleTester(); + typeScriptRuleTester.run('Correct types should be used', rule, { + valid: [ + { + code: ` var arr = []; arr.indexOf('x') === 7; `, - }, - { - code: ` + }, + { + code: ` var str = "str"; str.charAt(5); `, - }, - { - code: ` + }, + { + code: ` var str = "str"; str.charAt(unknown); `, - }, - { - code: ` + }, + { + code: ` var slice = [].slice; slice.call(arguments, 1); `, - }, - { - code: `Math.max(1, 2)`, - }, - { - code: ` + }, + { + code: `Math.max(1, 2)`, + }, + { + code: ` function upperToHyphenLower(match, offset, string) { return (offset > 0 ? '-' : '') + match.toLowerCase(); } "foo".replace('dog', upperToHyphenLower); `, - }, - { - code: ` + }, + { + code: ` var arr = [1, 2, 3]; var i = 0; arr.forEach(function (a) { i += 1; }); `, - }, - { - code: ` + }, + { + code: ` const regex = RegExp('foo*'); regex.test(false); `, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` var str = "str"; str.charAt("5"); `, - errors: [ - { - message: `Verify that argument is of correct type: expected 'number' instead of 'string'.`, - line: 3, - column: 18, - endLine: 3, - endColumn: 21, + errors: [ + { + message: `Verify that argument is of correct type: expected 'number' instead of 'string'.`, + line: 3, + column: 18, + endLine: 3, + endColumn: 21, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var str = "str"; str.charAt({x: "5"}); `, - errors: [ - { - message: `Verify that argument is of correct type: expected 'number' instead of '{ x: string; }'.`, - line: 3, - column: 18, - endLine: 3, - endColumn: 26, + errors: [ + { + message: `Verify that argument is of correct type: expected 'number' instead of '{ x: string; }'.`, + line: 3, + column: 18, + endLine: 3, + endColumn: 26, + }, + ], }, - ], - }, - { - code: ` + { + code: ` Math.abs("42") `, - errors: [ - { - message: `Verify that argument is of correct type: expected 'number' instead of 'string'.`, - line: 2, - column: 16, - endLine: 2, - endColumn: 20, + errors: [ + { + message: `Verify that argument is of correct type: expected 'number' instead of 'string'.`, + line: 2, + column: 16, + endLine: 2, + endColumn: 20, + }, + ], }, - ], - }, - { - code: ` var x = []; + { + code: ` var x = []; x.slice(false); `, - errors: [ - { - message: - "Verify that argument is of correct type: expected 'number' instead of 'boolean'.", - line: 2, - column: 17, - endLine: 2, - endColumn: 22, + errors: [ + { + message: + "Verify that argument is of correct type: expected 'number' instead of 'boolean'.", + line: 2, + column: 17, + endLine: 2, + endColumn: 22, + }, + ], }, - ], - }, - { - code: ` + { + code: ` (5).toString("hex"); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` new Date().setTime("a"); `, - errors: 1, - }, - ], + errors: 1, + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S3785/unit.test.ts b/packages/jsts/src/rules/S3785/unit.test.ts index ed0a8e5264c..daf92b1d7bd 100644 --- a/packages/jsts/src/rules/S3785/unit.test.ts +++ b/packages/jsts/src/rules/S3785/unit.test.ts @@ -15,63 +15,65 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; -import { TypeScriptRuleTester } from '../../../tests/tools/index.js'; +import { DefaultParserRuleTester, RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTesterJs = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); -ruleTesterJs.run('"in" should not be used with primitive types [js]', rule, { - valid: [ - { - code: `unknown in 1; // not reported without type information`, - }, - ], - invalid: [], -}); +describe('S3785', () => { + it('S3785', () => { + const ruleTesterJs = new DefaultParserRuleTester(); + ruleTesterJs.run('"in" should not be used with primitive types [js]', rule, { + valid: [ + { + code: `unknown in 1; // not reported without type information`, + }, + ], + invalid: [], + }); -const ruleTesterTs = new TypeScriptRuleTester(); -ruleTesterTs.run(`"in" should not be used with primitive types [ts]`, rule, { - valid: [ - { - code: `1 in [1, 2, 3];`, - }, - { - code: `1 in new Number(1);`, - }, - { - code: `'prop' in { 'prop': 1 };`, - }, - ], - invalid: [ - { - code: `unknown in 1;`, - errors: [ + const ruleTesterTs = new RuleTester(); + ruleTesterTs.run(`"in" should not be used with primitive types [ts]`, rule, { + valid: [ + { + code: `1 in [1, 2, 3];`, + }, + { + code: `1 in new Number(1);`, + }, + { + code: `'prop' in { 'prop': 1 };`, + }, + ], + invalid: [ + { + code: `unknown in 1;`, + errors: [ + { + message: `{\"message\":\"TypeError can be thrown as this operand might have primitive type.\",\"secondaryLocations\":[{\"column\":8,\"line\":1,\"endColumn\":10,\"endLine\":1}]}`, + line: 1, + column: 12, + endLine: 1, + endColumn: 13, + }, + ], + options: ['sonar-runtime'], + }, + { + code: `unknown in 'str';`, + errors: 1, + }, + { + code: `unknown in true;`, + errors: 1, + }, + { + code: `unknown in null;`, + errors: 1, + }, { - message: `{\"message\":\"TypeError can be thrown as this operand might have primitive type.\",\"secondaryLocations\":[{\"column\":8,\"line\":1,\"endColumn\":10,\"endLine\":1}]}`, - line: 1, - column: 12, - endLine: 1, - endColumn: 13, + code: `unknown in undefined;`, + errors: 1, }, ], - options: ['sonar-runtime'], - }, - { - code: `unknown in 'str';`, - errors: 1, - }, - { - code: `unknown in true;`, - errors: 1, - }, - { - code: `unknown in null;`, - errors: 1, - }, - { - code: `unknown in undefined;`, - errors: 1, - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S3796/unit.test.ts b/packages/jsts/src/rules/S3796/unit.test.ts index f139765f4c5..1188b4cb6bf 100644 --- a/packages/jsts/src/rules/S3796/unit.test.ts +++ b/packages/jsts/src/rules/S3796/unit.test.ts @@ -14,40 +14,42 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; -import { TypeScriptRuleTester } from '../../../tests/tools/index.js'; +import { DefaultParserRuleTester, RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const typeScriptRuleTester = new TypeScriptRuleTester(); -typeScriptRuleTester.run( - 'Callbacks of array methods should have return statements [w types]', - rule, - { - valid: [ +describe('S3796', () => { + it('S3796', () => { + const typeScriptRuleTester = new RuleTester(); + typeScriptRuleTester.run( + 'Callbacks of array methods should have return statements [w types]', + rule, { - code: ` + valid: [ + { + code: ` const arr = []; arr.map(x => x*2)`, - }, - { - code: ` + }, + { + code: ` const obj = {}; obj.map(function () {})`, - }, - { - code: ` + }, + { + code: ` const arr = []; arr.forEach(function () {}); `, - }, - { - code: ` + }, + { + code: ` const arr = []; const mapper = someVar ? function () {} : function (x) {return x + 1}; arr.map(mapper)`, - }, - { - code: ` + }, + { + code: ` var myArray = [1, 2]; var result = myArray.map(async (element) => { await doSomething(element); }); @@ -58,48 +60,48 @@ typeScriptRuleTester.run( var result = myArray.map(asyncFunc); var result = myArray.map(anotherAsyncFunc);`, - }, - { - code: ` + }, + { + code: ` Array.from(a); Array.from(a, b); Array.from(a, function(){return 42;}); Array.isArray(function(){}); Array.isArray(a, function(){});`, - }, - { - code: ` + }, + { + code: ` const arr = [] arr["foo"](function() {})`, - }, - { - code: ` + }, + { + code: ` function someFunc(callback) { callback(); } const arr = [someFunc]; const some = 0; arr[some](function() {console.log("hello there!")});`, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` const arr = []; arr.map(function(x) { x*2 })`, - errors: [ - { - message: `Add a "return" statement to this callback.`, - line: 3, - endLine: 3, - column: 15, - endColumn: 23, + errors: [ + { + message: `Add a "return" statement to this callback.`, + line: 3, + endLine: 3, + column: 15, + endColumn: 23, + }, + ], }, - ], - }, - { - code: ` + { + code: ` const myArray = []; myArray.every(function(){}); // Noncompliant myArray.filter(function(){}); // Noncompliant @@ -111,24 +113,25 @@ typeScriptRuleTester.run( myArray.some(function(){}); // Noncompliant myArray.sort(function(){}); // Noncompliant `, - errors: 9, - }, - { - code: ` + errors: 9, + }, + { + code: ` const arr = []; const mapper = function () {}; arr.map(mapper)`, - errors: [ - { - line: 4, - endLine: 4, - column: 15, - endColumn: 21, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 4, + endLine: 4, + column: 15, + endColumn: 21, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = [1, 2]; var obj = { @@ -138,14 +141,15 @@ typeScriptRuleTester.run( myArray.map(obj.goodCallback); myArray.map(obj.badCallback);`, - errors: [ - { - line: 10, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 10, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = [1, 2]; var callbackProvider = function() { @@ -155,247 +159,273 @@ typeScriptRuleTester.run( myArray.map(callbackProvider); // OK myArray.map(callbackProvider());`, - errors: [{ line: 10 }], - }, - { - code: ` - Array.from(a, () => {}); // Noncompliant`, - errors: [ + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 10, + }, + ], + }, { - line: 2, - endLine: 2, - column: 24, - endColumn: 26, + code: ` + Array.from(a, () => {}); // Noncompliant`, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 2, + endLine: 2, + column: 24, + endColumn: 26, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = [1, 2]; myArray.findLast(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 26, - endColumn: 28, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 26, + endColumn: 28, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = [1, 2]; myArray.findLastIndex(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 31, - endColumn: 33, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 31, + endColumn: 33, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = [1, 2]; myArray.toSorted(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 26, - endColumn: 28, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 26, + endColumn: 28, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = [1, 2]; myArray.flatMap(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 25, - endColumn: 27, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 25, + endColumn: 27, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = new Int8Array([1, 2]); myArray.every(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 23, - endColumn: 25, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 23, + endColumn: 25, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = new Uint8Array([1, 2]); myArray.every(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 23, - endColumn: 25, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 23, + endColumn: 25, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = new Uint8ClampedArray([1, 2]); myArray.every(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 23, - endColumn: 25, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 23, + endColumn: 25, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = new Int16Array([1, 2]); myArray.every(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 23, - endColumn: 25, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 23, + endColumn: 25, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = new Uint16Array([1, 2]); myArray.every(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 23, - endColumn: 25, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 23, + endColumn: 25, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = new Int32Array([1, 2]); myArray.every(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 23, - endColumn: 25, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 23, + endColumn: 25, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = new Uint32Array([1, 2]); myArray.every(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 23, - endColumn: 25, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 23, + endColumn: 25, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = new Float32Array([1, 2]); myArray.every(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 23, - endColumn: 25, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 23, + endColumn: 25, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = new Float64Array([1, 2]); myArray.every(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 23, - endColumn: 25, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 23, + endColumn: 25, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = new BigInt64Array([1n, 2n]); myArray.every(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 23, - endColumn: 25, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 23, + endColumn: 25, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = new BigUint64Array([1n, 2n]); myArray.every(x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 23, - endColumn: 25, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 23, + endColumn: 25, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var myArray = [1, 2]; myArray["every"](x => {}); // Noncompliant`, - errors: [ - { - line: 3, - endLine: 3, - column: 26, - endColumn: 28, + errors: [ + { + message: 'Add a "return" statement to this callback.', + line: 3, + endLine: 3, + column: 26, + endColumn: 28, + }, + ], }, ], }, - ], - }, -); + ); -const eslintRuleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); -eslintRuleTester.run('Callbacks of array methods should have return statements [w/o types]', rule, { - valid: [ - { - code: ` + const eslintRuleTester = new DefaultParserRuleTester(); + eslintRuleTester.run( + 'Callbacks of array methods should have return statements [w/o types]', + rule, + { + valid: [ + { + code: ` let arr = []; arr.map(x => x + 1);`, - }, - { - code: ` + }, + { + code: ` let arr = []; arr.map(x => { x + 1;})`, // issue not raised because no types are available - }, - ], - invalid: [], + }, + ], + invalid: [], + }, + ); + }); }); diff --git a/packages/jsts/src/rules/S3798/unit.test.ts b/packages/jsts/src/rules/S3798/unit.test.ts index 0eebbc082da..6c00a56689e 100644 --- a/packages/jsts/src/rules/S3798/unit.test.ts +++ b/packages/jsts/src/rules/S3798/unit.test.ts @@ -14,77 +14,81 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; -import { BabelRuleTester } from '../../../tests/tools/index.js'; import { rule } from './index.js'; -import { fileURLToPath } from 'node:url'; +import { + DefaultParserRuleTester, + NoTypeCheckingRuleTester, +} from '../../../tests/tools/testers/rule-tester.js'; +import globals from 'globals'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parser: fileURLToPath(import.meta.resolve('@typescript-eslint/parser')), - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); -const ruleTesterwithBrowser = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, - env: { es6: true, browser: true }, -}); -const ruleTesterCustomGlobals = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, - globals: { angular: true, other: true }, -}); -const ruleTesterScript = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'script' }, -}); +describe('S3798', () => { + it('S3798', () => { + const ruleTester = new NoTypeCheckingRuleTester(); + const ruleTesterwithBrowser = new DefaultParserRuleTester({ + globals: { + ...globals.browser, + }, + }); + const ruleTesterCustomGlobals = new DefaultParserRuleTester({ + globals: { + angular: true, + other: true, + }, + }); + const ruleTesterScript = new DefaultParserRuleTester({ + sourceType: 'script', + }); -const babelRuleTester = BabelRuleTester(); -ruleTester.run('Variables and functions should not be declared in the global scope', rule, { - valid: [ - { - code: ` + ruleTester.run('Variables and functions should not be declared in the global scope', rule, { + valid: [ + { + code: ` x1 = 1; const x3 = 1; let x4 = 1; `, - }, - { - code: ` + }, + { + code: ` obj.func3('f3', function() { obj.func4(func10()); // OK }); `, - }, - { - code: ` + }, + { + code: ` window.func20 = function(days = 1) {}; // OK `, - }, - { - code: ` + }, + { + code: ` (function baz(arg) {})(1); // OK `, - }, - { - code: ` + }, + { + code: ` [a1, a2] = [1, 2]; // FN [b1, b2, ...rest] = [1, 2, 3, 4]; // FN ({c1, c2} = {c1:1, c2:2}); // FN `, - }, - { - code: ` + }, + { + code: ` window.bar2 = function() {}; // OK this.bar3 = function() {}; // OK self.bar4 = function() {}; // OK `, - }, - { - code: ` + }, + { + code: ` function isNaN() {}; // OK (isNaN is a builtin) window.isNaN = function() {}; // OK isNaN = function() {}; `, - }, - { - code: ` + }, + { + code: ` class MyClass { // OK constructor(x) { // OK this.x = x @@ -92,71 +96,71 @@ ruleTester.run('Variables and functions should not be declared in the global sco meth() {} // OK } `, - }, - { - code: ` + }, + { + code: ` if (x) { function func10() {} // FN } `, - }, - { - code: ` + }, + { + code: ` type A = number; class A {} let a : { (x: T): number; } `, - }, - { - code: ` + }, + { + code: ` var _ = require('lodash'); `, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` var x2 = 1; `, - errors: [ - { - message: - 'Define this declaration in a local scope or bind explicitly the property to the global object.', - line: 2, - endLine: 2, - column: 11, - endColumn: 17, + errors: [ + { + message: + 'Define this declaration in a local scope or bind explicitly the property to the global object.', + line: 2, + endLine: 2, + column: 11, + endColumn: 17, + }, + ], }, - ], - }, - { - code: ` + { + code: ` var x5; x5 = 1; `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` var y1, y2, y3; `, - errors: 3, - }, - { - code: ` + errors: 3, + }, + { + code: ` var z1, z2 = 1; `, - errors: 2, - }, - { - code: ` + errors: 2, + }, + { + code: ` if (!X1) var X1 = {}; `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` var {d1, d2} = Ember; // Noncompliant x2 const {e1, e2} = Ember; // OK @@ -164,16 +168,16 @@ ruleTester.run('Variables and functions should not be declared in the global sco var foo2 = function fooo() {}; // Noncompliant var foo3 = (x => Math.sin(x)); // Noncompliant `, - errors: 5, - }, - { - code: ` + errors: 5, + }, + { + code: ` function bar1() {}; `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` variableThenFunction = 1; // FN function variableThenFunction(){}; // Noncompliant @@ -181,35 +185,35 @@ ruleTester.run('Variables and functions should not be declared in the global sco functionThenVariable = 1; // FN `, - errors: 2, - }, - { - code: ` + errors: 2, + }, + { + code: ` if (x) { var func10 = 14; // Noncompliant } else { var func10 = function() {} // OK (1 issue per name) } `, - errors: [ - { - message: - 'Define this declaration in a local scope or bind explicitly the property to the global object.', - line: 3, - endLine: 3, - column: 13, - endColumn: 24, + errors: [ + { + message: + 'Define this declaration in a local scope or bind explicitly the property to the global object.', + line: 3, + endLine: 3, + column: 13, + endColumn: 24, + }, + ], }, - ], - }, - { - code: ` + { + code: ` export function exportedFunction(){}; // Noncompliant, this rule should not be used with ES2015 modules `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` function bat1() { // Noncompliant var x; // OK [a, b] = [1, 2]; // OK @@ -219,62 +223,62 @@ ruleTester.run('Variables and functions should not be declared in the global sco function bat2() {}; // OK } `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` var HTMLElement; // FP (no globals configuration: see issue-2358) `, - errors: 1, - }, - ], -}); + errors: 1, + }, + ], + }); -ruleTesterwithBrowser.run('No issue for variables in globals configuration', rule, { - valid: [ - { - code: ` + ruleTesterwithBrowser.run('No issue for variables in globals configuration', rule, { + valid: [ + { + code: ` var HTMLElement; `, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` var exports; // commonjs global (not in configuration) `, - errors: 1, - }, - ], -}); + errors: 1, + }, + ], + }); -ruleTesterScript.run('FNs with script source type', rule, { - valid: [ - { - code: ` + ruleTesterScript.run('FNs with script source type', rule, { + valid: [ + { + code: ` var x = 1; // FN `, - }, - ], - invalid: [], -}); + }, + ], + invalid: [], + }); -ruleTesterCustomGlobals.run('No issue for custom globals', rule, { - valid: [ - { - code: ` + ruleTesterCustomGlobals.run('No issue for custom globals', rule, { + valid: [ + { + code: ` var angular = 1; var other = 2; `, - }, - ], - invalid: [], -}); + }, + ], + invalid: [], + }); -babelRuleTester.run('Should not fail with Babel parser', rule, { - valid: [ - { - code: ` + ruleTester.run('Should not fail with Babel parser', rule, { + valid: [ + { + code: ` /* @flow */ export interface SimpleSet { has(key: string | number): boolean; @@ -282,7 +286,9 @@ babelRuleTester.run('Should not fail with Babel parser', rule, { clear(): void; } `, - }, - ], - invalid: [], + }, + ], + invalid: [], + }); + }); }); diff --git a/packages/jsts/src/rules/S3800/cb.fixture.js b/packages/jsts/src/rules/S3800/cb.fixture.js index 6285e59d930..aa2e8f19937 100644 --- a/packages/jsts/src/rules/S3800/cb.fixture.js +++ b/packages/jsts/src/rules/S3800/cb.fixture.js @@ -5,7 +5,7 @@ String.prototype.foo = function() { } // necessary example to have at least 1 noncompliant case -function foo() { // Noncompliant +function foo() { // Noncompliant {{Refactor this function to always return the same type.}} if (condition) { return 42; } diff --git a/packages/jsts/src/rules/S3800/cb.test.ts b/packages/jsts/src/rules/S3800/cb.test.ts index 07b1901047a..a88bad374aa 100644 --- a/packages/jsts/src/rules/S3800/cb.test.ts +++ b/packages/jsts/src/rules/S3800/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe(`Rule`, () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S3800/unit.test.ts b/packages/jsts/src/rules/S3800/unit.test.ts index c52b2b47860..d7d7c4f2db3 100644 --- a/packages/jsts/src/rules/S3800/unit.test.ts +++ b/packages/jsts/src/rules/S3800/unit.test.ts @@ -15,40 +15,40 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; -import { JavaScriptRuleTester, TypeScriptRuleTester } from '../../../tests/tools/index.js'; +import { DefaultParserRuleTester, RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTesterJs = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); -ruleTesterJs.run('Functions should always return the same type [js]', rule, { - valid: [ - { - code: ` +describe('S3800', () => { + it('S3800', () => { + const ruleTesterJs = new DefaultParserRuleTester(); + ruleTesterJs.run('Functions should always return the same type [js]', rule, { + valid: [ + { + code: ` function foo() { if (condition) { return 42; } return 'str'; // not raised without type information }`, - }, - ], - invalid: [], -}); + }, + ], + invalid: [], + }); -const ruleTesterTs = new TypeScriptRuleTester(); -ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { - valid: [ - { - code: `return;`, - }, - { - code: ` + const ruleTesterTs = new RuleTester(); + ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { + valid: [ + { + code: `return;`, + }, + { + code: ` function foo() { }`, - }, - { - code: ` + }, + { + code: ` function foo() { if (condition) { return 42; @@ -56,17 +56,17 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return; } }`, - }, - { - code: ` + }, + { + code: ` function foo() { if (condition) { return 42; } }`, - }, - { - code: ` + }, + { + code: ` function foo() { if (condition) { return 42; @@ -74,9 +74,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return 24; } }`, - }, - { - code: ` + }, + { + code: ` function foo() { if (condition) { return 'hello'; @@ -84,9 +84,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return 'world'; } }`, - }, - { - code: ` + }, + { + code: ` function foo() { if (condition) { return true; @@ -94,9 +94,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return false; } }`, - }, - { - code: ` + }, + { + code: ` function foo() { if (condition) { return { num: 42 }; @@ -104,9 +104,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return { str: 'hello' }; } }`, - }, - { - code: ` + }, + { + code: ` function foo() { if (condition) { return [1, 2, 3]; @@ -114,9 +114,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return [4, 5, 6]; } }`, - }, - { - code: ` + }, + { + code: ` function foo() { if (condition) { return function (){}; @@ -124,9 +124,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return function (){}; } }`, - }, - { - code: ` + }, + { + code: ` function foo() { if (condition) { return new Date(); @@ -134,9 +134,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return new Date(); } }`, - }, - { - code: ` + }, + { + code: ` function foo() { if (condition1) { return 42; @@ -146,9 +146,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return undefined; } }`, - }, - { - code: ` + }, + { + code: ` function foo() { if (condition) { return 42; @@ -156,21 +156,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return any(); } }`, - }, - { - code: ` - function foo() { - let ret; - if (condition) { - ret = 42; - } else { - ret = 'str'; - } - return ret // FN - does not infer ret to number | string; - }`, - }, - { - code: ` + }, + { + code: ` class A {} class B extends A {} function Factory() { @@ -180,9 +168,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return new B(); } }`, - }, - { - code: ` + }, + { + code: ` class A {} class B {} function Factory() { @@ -192,9 +180,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return new B(); } }`, - }, - { - code: ` + }, + { + code: ` /** @returns {(number|string)} - a union of number and string */ function foo() { if (condition) { @@ -202,9 +190,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { } return 'str'; }`, - }, - { - code: ` + }, + { + code: ` function bar() {} function foo() { if (condition) { @@ -214,16 +202,16 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { } } `, - }, - { - code: ` + }, + { + code: ` function foo(value: any): Object | Array { return value; } `, - }, - { - code: ` + }, + { + code: ` function createTypedArrayFactory(type, len) { if (type === 'float32') { return new Float32Array(len); @@ -237,9 +225,9 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return Array.from(Array(len)); } `, - }, - { - code: ` + }, + { + code: ` function foo() { if (condition) { return [1, 2, 3]; @@ -247,22 +235,22 @@ ruleTesterTs.run(`Functions should always return the same type [ts]`, rule, { return ['foo', 'bar', 'baz']; } }`, - }, - { - code: ` + }, + { + code: ` function foo() { return condition ? 'str' : true; }`, - }, - { - code: ` + }, + { + code: ` const sanitize = () => { return condition ? true : 'Value should be a string'; }; `, - }, - { - code: ` + }, + { + code: ` const sanitize = () => { if (condition) { return true; @@ -270,85 +258,106 @@ const sanitize = () => { return 'Value should be a string'; }`, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` + function foo() { + let ret; + if (condition) { + ret = 42; + } else { + ret = 'str'; + } + return ret // FN - does not infer ret to number | string; + }`, + errors: [ + { + message: 'Refactor this function to always return the same type.', + line: 2, + column: 18, + endLine: 2, + endColumn: 21, + }, + ], + }, + { + code: ` function foo() { if (condition) { return 42; } return 'str'; }`, - errors: [ - { - message: JSON.stringify({ - message: `Refactor this function to always return the same type.`, - secondaryLocations: [ - { - message: `Returns number`, - column: 12, - line: 4, - endColumn: 22, - endLine: 4, - }, - { - message: `Returns string`, - column: 10, - line: 6, - endColumn: 23, - endLine: 6, - }, - ], - }), - line: 2, - column: 18, - endLine: 2, - endColumn: 21, + errors: [ + { + message: JSON.stringify({ + message: `Refactor this function to always return the same type.`, + secondaryLocations: [ + { + message: `Returns number`, + column: 12, + line: 4, + endColumn: 22, + endLine: 4, + }, + { + message: `Returns string`, + column: 10, + line: 6, + endColumn: 23, + endLine: 6, + }, + ], + }), + line: 2, + column: 18, + endLine: 2, + endColumn: 21, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: ` + { + code: ` function foo() { if (condition) { return 42; } return { foo: 'bar' }; }`, - errors: [ - { - message: JSON.stringify({ - message: `Refactor this function to always return the same type.`, - secondaryLocations: [ - { - message: `Returns number`, - column: 12, - line: 4, - endColumn: 22, - endLine: 4, - }, - { - message: `Returns object`, - column: 10, - line: 6, - endColumn: 32, - endLine: 6, - }, - ], - }), - line: 2, - column: 18, - endLine: 2, - endColumn: 21, + errors: [ + { + message: JSON.stringify({ + message: `Refactor this function to always return the same type.`, + secondaryLocations: [ + { + message: `Returns number`, + column: 12, + line: 4, + endColumn: 22, + endLine: 4, + }, + { + message: `Returns object`, + column: 10, + line: 6, + endColumn: 32, + endLine: 6, + }, + ], + }), + line: 2, + column: 18, + endLine: 2, + endColumn: 21, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: ` + { + code: ` function foo() { if (condition1) { return; @@ -362,37 +371,37 @@ const sanitize = () => { return 'str'; } }`, - errors: [ - { - message: JSON.stringify({ - message: `Refactor this function to always return the same type.`, - secondaryLocations: [ - { - message: `Returns number`, - column: 12, - line: 10, - endColumn: 22, - endLine: 10, - }, - { - message: `Returns string`, - column: 12, - line: 12, - endColumn: 25, - endLine: 12, - }, - ], - }), - line: 2, - column: 18, - endLine: 2, - endColumn: 21, + errors: [ + { + message: JSON.stringify({ + message: `Refactor this function to always return the same type.`, + secondaryLocations: [ + { + message: `Returns number`, + column: 12, + line: 10, + endColumn: 22, + endLine: 10, + }, + { + message: `Returns string`, + column: 12, + line: 12, + endColumn: 25, + endLine: 12, + }, + ], + }), + line: 2, + column: 18, + endLine: 2, + endColumn: 21, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: ` + { + code: ` function fn() { return 'str'; } function foo() { if (condition) { @@ -401,37 +410,37 @@ const sanitize = () => { return fn; } }`, - errors: [ - { - message: JSON.stringify({ - message: `Refactor this function to always return the same type.`, - secondaryLocations: [ - { - message: `Returns number`, - column: 12, - line: 5, - endColumn: 22, - endLine: 5, - }, - { - message: `Returns function`, - column: 12, - line: 7, - endColumn: 22, - endLine: 7, - }, - ], - }), - line: 3, - column: 18, - endLine: 3, - endColumn: 21, + errors: [ + { + message: JSON.stringify({ + message: `Refactor this function to always return the same type.`, + secondaryLocations: [ + { + message: `Returns number`, + column: 12, + line: 5, + endColumn: 22, + endLine: 5, + }, + { + message: `Returns function`, + column: 12, + line: 7, + endColumn: 22, + endLine: 7, + }, + ], + }), + line: 3, + column: 18, + endLine: 3, + endColumn: 21, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: ` + { + code: ` function foo() { if (condition1) { return 42; @@ -445,58 +454,58 @@ const sanitize = () => { return [ { foo: 'bar' } ]; } }`, - errors: [ - { - message: JSON.stringify({ - message: `Refactor this function to always return the same type.`, - secondaryLocations: [ - { - message: `Returns number`, - column: 12, - line: 4, - endColumn: 22, - endLine: 4, - }, - { - message: `Returns array`, - column: 12, - line: 6, - endColumn: 26, - endLine: 6, - }, - { - message: `Returns array`, - column: 12, - line: 8, - endColumn: 29, - endLine: 8, - }, - { - message: `Returns array`, - column: 12, - line: 10, - endColumn: 28, - endLine: 10, - }, - { - message: `Returns array`, - column: 12, - line: 12, - endColumn: 38, - endLine: 12, - }, - ], - }), - line: 2, - column: 18, - endLine: 2, - endColumn: 21, + errors: [ + { + message: JSON.stringify({ + message: `Refactor this function to always return the same type.`, + secondaryLocations: [ + { + message: `Returns number`, + column: 12, + line: 4, + endColumn: 22, + endLine: 4, + }, + { + message: `Returns array`, + column: 12, + line: 6, + endColumn: 26, + endLine: 6, + }, + { + message: `Returns array`, + column: 12, + line: 8, + endColumn: 29, + endLine: 8, + }, + { + message: `Returns array`, + column: 12, + line: 10, + endColumn: 28, + endLine: 10, + }, + { + message: `Returns array`, + column: 12, + line: 12, + endColumn: 38, + endLine: 12, + }, + ], + }), + line: 2, + column: 18, + endLine: 2, + endColumn: 21, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: ` + { + code: ` class C { m() { if (condition) { @@ -506,10 +515,10 @@ const sanitize = () => { } } }`, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` /** @param {(number|string)} - a union of number and string */ function foo() { if (condition) { @@ -517,61 +526,63 @@ const sanitize = () => { } return 'str'; }`, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` (function () { if (condition) { return 42; } return 'str'; })`, - errors: [ - { - line: 2, - column: 10, - endLine: 2, - endColumn: 18, + errors: [ + { + message: 'Refactor this function to always return the same type.', + line: 2, + column: 10, + endLine: 2, + endColumn: 18, + }, + ], }, - ], - }, - { - code: ` + { + code: ` () => { if (condition) { return 42; } return 'str'; }`, - errors: [ - { - line: 2, - column: 12, - endLine: 2, - endColumn: 14, + errors: [ + { + message: 'Refactor this function to always return the same type.', + line: 2, + column: 12, + endLine: 2, + endColumn: 14, + }, + ], }, - ], - }, - { - code: ` + { + code: ` const sanitize = () => { return condition ? true : 42; }; `, - errors: 1, - }, - ], -}); + errors: 1, + }, + ], + }); -const ruleTestJSWithTypes = new JavaScriptRuleTester(); -ruleTestJSWithTypes.run( - `'Functions should always return the same type [js with type inference]'`, - rule, - { - valid: [ + const ruleTestJSWithTypes = new RuleTester(); + ruleTestJSWithTypes.run( + `'Functions should always return the same type [js with type inference]'`, + rule, { - code: ` + valid: [ + { + code: ` /** * @param {Function|Object} supplier The object or function supplying the properties to be mixed. */ @@ -582,8 +593,10 @@ ruleTestJSWithTypes.run( }, }); `, + }, + ], + invalid: [], }, - ], - invalid: [], - }, -); + ); + }); +}); diff --git a/packages/jsts/src/rules/S3801/unit.test.ts b/packages/jsts/src/rules/S3801/unit.test.ts index eed4064fcbb..e1d9db24dfa 100644 --- a/packages/jsts/src/rules/S3801/unit.test.ts +++ b/packages/jsts/src/rules/S3801/unit.test.ts @@ -14,20 +14,18 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; -import { fileURLToPath } from 'node:url'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const tsParserPath = fileURLToPath(import.meta.resolve('@typescript-eslint/parser')); -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018 }, - parser: tsParserPath, -}); +describe('S3801', () => { + it('S3801', () => { + const ruleTester = new RuleTester(); -ruleTester.run(`Functions should use "return" consistently`, rule, { - valid: [ - { - code: ` + ruleTester.run(`Functions should use "return" consistently`, rule, { + valid: [ + { + code: ` function empty() { } @@ -139,18 +137,18 @@ ruleTester.run(`Functions should use "return" consistently`, rule, { var simple_arrow_function = (a) => 42; var arrowWithExpressionBody = (p) => p ? true : false;`, - }, - { - code: ` + }, + { + code: ` function withNeverType(a) { if (a === 1) { return true; } throw new Error('False') }`, - }, - { - code: ` + }, + { + code: ` function throwError(message: string): never { throw new Error(message); } @@ -161,63 +159,63 @@ ruleTester.run(`Functions should use "return" consistently`, rule, { throwError('False') } `, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` export function inconsistent(p: boolean) { if (p) { return true; } }`, - errors: [ - { - message: - '{"message":"Refactor this function to use \\"return\\" consistently.","secondaryLocations":[{"message":"Return with value","column":12,"line":4,"endColumn":24,"endLine":4},{"message":"Implicit return without value","column":8,"line":6,"endColumn":9,"endLine":6}]}', - line: 2, - endLine: 2, - column: 25, - endColumn: 37, + errors: [ + { + message: + '{"message":"Refactor this function to use \\"return\\" consistently.","secondaryLocations":[{"message":"Return with value","column":12,"line":4,"endColumn":24,"endLine":4},{"message":"Implicit return without value","column":8,"line":6,"endColumn":9,"endLine":6}]}', + line: 2, + endLine: 2, + column: 25, + endColumn: 37, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: ` + { + code: ` var function_expression = function () { if (condition) { return 42; } }`, - errors: [ - { - message: - '{"message":"Refactor this function to use \\"return\\" consistently.","secondaryLocations":[{"message":"Return with value","column":12,"line":4,"endColumn":22,"endLine":4},{"message":"Implicit return without value","column":8,"line":6,"endColumn":9,"endLine":6}]}', - line: 2, - endLine: 2, - column: 35, - endColumn: 43, + errors: [ + { + message: + '{"message":"Refactor this function to use \\"return\\" consistently.","secondaryLocations":[{"message":"Return with value","column":12,"line":4,"endColumn":22,"endLine":4},{"message":"Implicit return without value","column":8,"line":6,"endColumn":9,"endLine":6}]}', + line: 2, + endLine: 2, + column: 35, + endColumn: 43, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: `var inconsistentArrow = (p) => {if (p) { return true; } return; };`, - errors: [ { - message: - '{"message":"Refactor this function to use \\"return\\" consistently.","secondaryLocations":[{"message":"Return with value","column":41,"line":1,"endColumn":53,"endLine":1},{"message":"Return without value","column":56,"line":1,"endColumn":63,"endLine":1}]}', - line: 1, - endLine: 1, - column: 29, - endColumn: 31, + code: `var inconsistentArrow = (p) => {if (p) { return true; } return; };`, + errors: [ + { + message: + '{"message":"Refactor this function to use \\"return\\" consistently.","secondaryLocations":[{"message":"Return with value","column":41,"line":1,"endColumn":53,"endLine":1},{"message":"Return without value","column":56,"line":1,"endColumn":63,"endLine":1}]}', + line: 1, + endLine: 1, + column: 29, + endColumn: 31, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: ` + { + code: ` function* inconsistentGenerator(p) { let i = 0 while(i < 10) { @@ -227,20 +225,20 @@ ruleTester.run(`Functions should use "return" consistently`, rule, { return true; } }`, - errors: [ - { - message: - '{"message":"Refactor this function to use \\"return\\" consistently.","secondaryLocations":[{"message":"Return with value","column":12,"line":8,"endColumn":24,"endLine":8},{"message":"Implicit return without value","column":8,"line":10,"endColumn":9,"endLine":10}]}', - line: 2, - endLine: 2, - column: 19, - endColumn: 40, + errors: [ + { + message: + '{"message":"Refactor this function to use \\"return\\" consistently.","secondaryLocations":[{"message":"Return with value","column":12,"line":8,"endColumn":24,"endLine":8},{"message":"Implicit return without value","column":8,"line":10,"endColumn":9,"endLine":10}]}', + line: 2, + endLine: 2, + column: 19, + endColumn: 40, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: ` + { + code: ` function inconsistentNestedFunctions() { return true; @@ -250,20 +248,20 @@ ruleTester.run(`Functions should use "return" consistently`, rule, { } } }`, - errors: [ - { - message: - '{"message":"Refactor this function to use \\"return\\" consistently.","secondaryLocations":[{"message":"Return with value","column":14,"line":7,"endColumn":26,"endLine":7},{"message":"Implicit return without value","column":10,"line":9,"endColumn":11,"endLine":9}]}', - line: 5, - endLine: 5, - column: 20, - endColumn: 23, + errors: [ + { + message: + '{"message":"Refactor this function to use \\"return\\" consistently.","secondaryLocations":[{"message":"Return with value","column":14,"line":7,"endColumn":26,"endLine":7},{"message":"Implicit return without value","column":10,"line":9,"endColumn":11,"endLine":9}]}', + line: 5, + endLine: 5, + column: 20, + endColumn: 23, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: ` + { + code: ` class A { inconsistentMethod(p) { if (p) { @@ -288,10 +286,10 @@ ruleTester.run(`Functions should use "return" consistently`, rule, { } } }`, - errors: 3, - }, - { - code: ` + errors: 3, + }, + { + code: ` const myObj = { propertyAsFunction() { if (this._value) { @@ -299,11 +297,11 @@ ruleTester.run(`Functions should use "return" consistently`, rule, { } } }`, - errors: 1, - }, - // possible FP, see https://github.com/SonarSource/SonarJS/issues/2579 - { - code: ` + errors: 1, + }, + // possible FP, see https://github.com/SonarSource/SonarJS/issues/2579 + { + code: ` function throwError(message: string): never { throw new Error(message); } @@ -314,7 +312,9 @@ ruleTester.run(`Functions should use "return" consistently`, rule, { throwError('False') } `, - errors: 1, - }, - ], + errors: 1, + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S3827/cb.fixture.vue b/packages/jsts/src/rules/S3827/cb.fixture.vue index b0256689adb..9cec6c097cf 100644 --- a/packages/jsts/src/rules/S3827/cb.fixture.vue +++ b/packages/jsts/src/rules/S3827/cb.fixture.vue @@ -35,14 +35,14 @@ `, - }, - { - code: ` + }, + { + code: ` `, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` @@ -65,18 +62,18 @@ ruleTesterForVue.run(testName, rule, { `, - errors: [ - { - message, - line: 3, - column: 12, - endLine: 3, - endColumn: 30, + errors: [ + { + message, + line: 3, + column: 12, + endLine: 3, + endColumn: 30, + }, + ], }, - ], - }, - { - code: ` + { + code: ` `, - errors: [ - { message, line: 4, column: 12, endLine: 4, endColumn: 27 }, - { message, line: 6, column: 12, endLine: 6, endColumn: 33 }, + errors: [ + { message, line: 4, column: 12, endLine: 4, endColumn: 27 }, + { message, line: 6, column: 12, endLine: 6, endColumn: 33 }, + ], + }, ], - }, - ], -}); + }); -ruleTester.run(`${testName} JSX`, rule, { - valid: [{ code: `let x =
foo
` }], - invalid: [ - { - code: ` + ruleTester.run(`${testName} JSX`, rule, { + valid: [{ code: `let x =
foo
` }], + invalid: [ + { + code: ` let x =
`, - errors: [{ message, line: 2, column: 20, endLine: 2, endColumn: 52 }], - }, - ], -}); + errors: [{ message, line: 2, column: 20, endLine: 2, endColumn: 52 }], + }, + ], + }); -ruleTester.run(`${testName} JS`, rule, { - valid: [ - { - code: `let x = { domProps: { }} `, - }, - { code: `let x = { domProps: { prop: 'foo' } } ` }, - { - code: ` + ruleTester.run(`${testName} JS`, rule, { + valid: [ + { + code: `let x = { domProps: { }} `, + }, + { code: `let x = { domProps: { prop: 'foo' } } ` }, + { + code: ` createElement({ attrs: { href: tainted @@ -120,9 +117,9 @@ ruleTester.run(`${testName} JS`, rule, { }, "click here2") `, - }, - { - code: ` + }, + { + code: ` createElement('foo', { attrs: { bar: 'x' @@ -130,9 +127,9 @@ ruleTester.run(`${testName} JS`, rule, { }, "click here2") `, - }, - { - code: ` + }, + { + code: ` foo('foo', { attrs: { bar: 'x' @@ -140,11 +137,11 @@ ruleTester.run(`${testName} JS`, rule, { }, "click here2") `, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` function f (createElement) { return createElement( 'div', @@ -157,11 +154,11 @@ ruleTester.run(`${testName} JS`, rule, { ); } `, - errors: [{ message, line: 7, column: 17, endLine: 7, endColumn: 36 }], - }, + errors: [{ message, line: 7, column: 17, endLine: 7, endColumn: 36 }], + }, - { - code: ` + { + code: ` Vue.component('custom-element2', { render: function (createElement) { return createElement('a', { @@ -171,11 +168,11 @@ ruleTester.run(`${testName} JS`, rule, { }, "click here2")}}) `, - errors: [{ message, line: 6, column: 21, endLine: 6, endColumn: 34 }], - }, + errors: [{ message, line: 6, column: 21, endLine: 6, endColumn: 34 }], + }, - { - code: ` + { + code: ` Vue.component('custom-element2', { render: function (h) { return h('a', { @@ -185,11 +182,11 @@ ruleTester.run(`${testName} JS`, rule, { }, "click here2")}}) `, - errors: [{ message, line: 6, column: 21, endLine: 6, endColumn: 34 }], - }, + errors: [{ message, line: 6, column: 21, endLine: 6, endColumn: 34 }], + }, - { - code: ` + { + code: ` createElement('foo',{ attrs: { href: tainted @@ -197,7 +194,9 @@ ruleTester.run(`${testName} JS`, rule, { }, "click here2") `, - errors: 1, - }, - ], + errors: 1, + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6302/cb.test.ts b/packages/jsts/src/rules/S6302/cb.test.ts index a3e01d3ef16..af8b1cf9b36 100644 --- a/packages/jsts/src/rules/S6302/cb.test.ts +++ b/packages/jsts/src/rules/S6302/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6302', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6303/cb.test.ts b/packages/jsts/src/rules/S6303/cb.test.ts index b4c04050961..31566ba6394 100644 --- a/packages/jsts/src/rules/S6303/cb.test.ts +++ b/packages/jsts/src/rules/S6303/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6303', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6304/cb.test.ts b/packages/jsts/src/rules/S6304/cb.test.ts index b70540ff040..fb4270ca4a6 100644 --- a/packages/jsts/src/rules/S6304/cb.test.ts +++ b/packages/jsts/src/rules/S6304/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6304', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6308/cb.test.ts b/packages/jsts/src/rules/S6308/cb.test.ts index b2f98942fe1..936867413b3 100644 --- a/packages/jsts/src/rules/S6308/cb.test.ts +++ b/packages/jsts/src/rules/S6308/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6308', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6317/cb.fixture.js b/packages/jsts/src/rules/S6317/cb.fixture.js index 031f540cd67..1096fe88928 100644 --- a/packages/jsts/src/rules/S6317/cb.fixture.js +++ b/packages/jsts/src/rules/S6317/cb.fixture.js @@ -43,7 +43,7 @@ export class LoginStack extends cdk.Stack { role.addToPolicy(iam.PolicyStatement.fromJson({ 'Action': 'iam:UpdateLoginProfile', 'Effect': 'Allow', - 'Resource': '*' // Noncompliant + 'Resource': '*' // Noncompliant {{This policy is vulnerable to the "iam:UpdateLoginProfile" privilege escalation vector. Remove permissions or restrict the set of resources they apply to.}} })); const user = new iam.User(this, "MyUser"); @@ -117,7 +117,7 @@ export class LambdaStack extends cdk.Stack { { 'Action': 'lambda:UpdateFunctionCode', 'Effect': 'Allow', - 'Resource': '*' //Noncompliant + 'Resource': '*' //Noncompliant {{This policy is vulnerable to the "lambda:UpdateFunctionCode" privilege escalation vector. Remove permissions or restrict the set of resources they apply to.}} } ], 'Version': '2012-10-17' diff --git a/packages/jsts/src/rules/S6317/cb.test.ts b/packages/jsts/src/rules/S6317/cb.test.ts index 14af8eca173..62a8cca5564 100644 --- a/packages/jsts/src/rules/S6317/cb.test.ts +++ b/packages/jsts/src/rules/S6317/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6317', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6319/cb.fixture.js b/packages/jsts/src/rules/S6319/cb.fixture.js index 0f6a96bb0b7..d2db1182a53 100644 --- a/packages/jsts/src/rules/S6319/cb.fixture.js +++ b/packages/jsts/src/rules/S6319/cb.fixture.js @@ -14,8 +14,8 @@ new CfnNotebookInstance(this, "CfnNotebookInstance", {}); // Noncompliant {{Omit new CfnNotebookInstance(this, "CfnNotebookInstance", unknownValue); // Compliant new CfnNotebookInstance(this, "CfnNotebookInstance", { ...unknownValue }); // Compliant -new CfnNotebookInstance(this, "CfnNotebookInstance", { ...unknownValue, kmsKeyId: undefined }); // Noncompliant -new CfnNotebookInstance(this, "CfnNotebookInstance", { kmsKeyId: undefined , ...unknownValue }); // Noncompliant +new CfnNotebookInstance(this, "CfnNotebookInstance", { ...unknownValue, kmsKeyId: undefined }); // Noncompliant {{Omitting "kmsKeyId" disables encryption of SageMaker notebook instances. Make sure it is safe here.}} +new CfnNotebookInstance(this, "CfnNotebookInstance", { kmsKeyId: undefined , ...unknownValue }); // Noncompliant {{Omitting "kmsKeyId" disables encryption of SageMaker notebook instances. Make sure it is safe here.}} new CfnNotebookInstance(this, "CfnNotebookInstance", { kmsKeyId: unknownValue }); // Compliant const value1 = false; diff --git a/packages/jsts/src/rules/S6319/cb.test.ts b/packages/jsts/src/rules/S6319/cb.test.ts index 9c51c79f5ed..7e431624a73 100644 --- a/packages/jsts/src/rules/S6319/cb.test.ts +++ b/packages/jsts/src/rules/S6319/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6319', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6321/cb.fixture.js b/packages/jsts/src/rules/S6321/cb.fixture.js index 6416ef61924..758d89c55be 100644 --- a/packages/jsts/src/rules/S6321/cb.fixture.js +++ b/packages/jsts/src/rules/S6321/cb.fixture.js @@ -15,14 +15,14 @@ const instance = new ec2.Instance(this, 'default-own-security-group',{ instance.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY); instance.connections.allowFrom( - ec2.Peer.anyIpv4(), // Noncompliant + ec2.Peer.anyIpv4(), // Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} ec2.Port.tcp(22), 'description' ); const badIpV4 = '0.0.0.0/0'; instance.connections.allowFrom( - ec2.Peer.ipv4(badIpV4),// Noncompliant + ec2.Peer.ipv4(badIpV4),// Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} ec2.Port.tcpRange(/* startPort */ 1, /*endPort*/ 1024), 'description' ); @@ -39,7 +39,7 @@ instance.connections.allowFrom( ); instance.connections.allowFrom( - ec2.Peer.ipv6('::/0'),// Noncompliant + ec2.Peer.ipv6('::/0'),// Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} ec2.Port.tcpRange(/* startPort */ 1, /*endPort*/ 1024), 'description' ); @@ -55,7 +55,7 @@ instance.connections.allowFrom( ec2.Port.tcpRange(/* startPort */ 1, /*endPort*/ 1024), 'description' ); -instance.connections.allowFromAnyIpv4( // Noncompliant +instance.connections.allowFromAnyIpv4( // Noncompliant {{Change this method for "allowFrom" and set "other" to a subset of trusted IP addresses.}} ec2.Port.tcp(3389), 'description' ); @@ -67,11 +67,11 @@ instance.connections.allowFromAnyIpv4( ec2.Port.tcp(undefined), 'description' ); -instance.connections.allowFromAnyIpv4( // Noncompliant +instance.connections.allowFromAnyIpv4( // Noncompliant {{Change this method for "allowFrom" and set "other" to a subset of trusted IP addresses.}} ec2.Port.allTcp(), 'description' ); -instance.connections.allowFromAnyIpv4( // Noncompliant +instance.connections.allowFromAnyIpv4( // Noncompliant {{Change this method for "allowFrom" and set "other" to a subset of trusted IP addresses.}} ec2.Port.allTraffic(), 'description' ); @@ -100,7 +100,7 @@ instance.connections.allowFrom( ); instance.connections.allowFrom( - ec2.Peer.ipv4(badIpV4), // Noncompliant + ec2.Peer.ipv4(badIpV4), // Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} new ec2.Port({protocol: ec2.Protocol.TCP, fromPort: 22, toPort: 22}), 'description' ); @@ -125,7 +125,7 @@ instance.connections.allowFrom( ); instance.connections.allowFrom( - ec2.Peer.ipv4(badIpV4), // Noncompliant + ec2.Peer.ipv4(badIpV4), // Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} ec2.Port({protocol: ec2.Protocol.ALL, fromPort: 20, toPort: 25}), 'description' ); @@ -147,8 +147,8 @@ const connection = new ec2.Connections({ securityGroups: [securityGroup] }); -connection.allowDefaultPortFromAnyIpv4('Allows SSH from all IPv4'); // Noncompliant -connection.allowDefaultPortFrom(ec2.Peer.anyIpv4(), 'Allows SSH from all IPv4'); // Noncompliant +connection.allowDefaultPortFromAnyIpv4('Allows SSH from all IPv4'); // Noncompliant {{Change this method for "allowFrom" and set "other" to a subset of trusted IP addresses.}} +connection.allowDefaultPortFrom(ec2.Peer.anyIpv4(), 'Allows SSH from all IPv4'); // Noncompliant {{Change this method for "allowFrom" and set "other" to a subset of trusted IP addresses.}} const connection2 = new ec2.Connections({ defaultPort:ec2.Port.tcp(1234), @@ -164,7 +164,7 @@ const securityGroup3 = new ec2.SecurityGroup(this, 'custom-security-group', { }); securityGroup3.addIngressRule( - ec2.Peer.anyIpv4(), // Noncompliant + ec2.Peer.anyIpv4(), // Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} ec2.Port.tcpRange(1, 1024) ); @@ -173,7 +173,7 @@ securityGroup3.addIngressRule( ec2.Port.tcpRange(1024, 1048) ); -const badIpV4_2 = '0.0.0.0/0';// Noncompliant +const badIpV4_2 = '0.0.0.0/0';// Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} const nonCompliantIngress = { ipProtocol: '6', cidrIp: badIpV4_2, @@ -218,13 +218,13 @@ new ec2.CfnSecurityGroup( securityGroupIngress: [ { ipProtocol: '6', - cidrIp: '0.0.0.0/0', // Noncompliant + cidrIp: '0.0.0.0/0', // Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} fromPort: 22, toPort: 22 }, { ipProtocol: 'tcp', - cidrIp: '0.0.0.0/0', // Noncompliant + cidrIp: '0.0.0.0/0', // Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} fromPort: 3389, toPort: 3389 }, @@ -238,7 +238,7 @@ new ec2.CfnSecurityGroup( }, { ipProtocol: '-1', - cidrIpv6: '::/0' // Noncompliant + cidrIpv6: '::/0' // Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} }, { ipProtocol: 'tcp', @@ -248,7 +248,7 @@ new ec2.CfnSecurityGroup( ipProtocol: 'tcp', fromPort: 3380, toPort: 3390, - cidrIpv6: '::/0' // Noncompliant + cidrIpv6: '::/0' // Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} }, { ipProtocol: '-1', @@ -288,13 +288,13 @@ new ec2.CfnSecurityGroupIngress( this, 'ingress-all-ip-tcp-ssh', { ipProtocol: 'tcp', - cidrIp: '0.0.0.0/0', // Noncompliant + cidrIp: '0.0.0.0/0', // Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} fromPort: 22, toPort: 22, groupId: securityGroup.attrGroupId }); -const badIpV6 = '::/0';// Noncompliant +const badIpV6 = '::/0';// Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} new ec2.CfnSecurityGroupIngress( this, @@ -328,7 +328,7 @@ new ec2.CfnSecurityGroupIngress( const nonCompliantIngress2 = { ipProtocol: '-1', - cidrIpv6: '::/0' // Noncompliant + cidrIpv6: '::/0' // Noncompliant {{Change this IP range to a subset of trusted IP addresses.}} }; new ec2.CfnSecurityGroupIngress( this, diff --git a/packages/jsts/src/rules/S6321/cb.test.ts b/packages/jsts/src/rules/S6321/cb.test.ts index d409754054c..ec445fdce8f 100644 --- a/packages/jsts/src/rules/S6321/cb.test.ts +++ b/packages/jsts/src/rules/S6321/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6321', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6323/unit.test.ts b/packages/jsts/src/rules/S6323/unit.test.ts index 021c76428d8..6fbd63747d4 100644 --- a/packages/jsts/src/rules/S6323/unit.test.ts +++ b/packages/jsts/src/rules/S6323/unit.test.ts @@ -14,140 +14,143 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); -ruleTester.run('Alternation with empty alternatives', rule, { - valid: [ - { - code: `/a/`, - }, - { - code: `/()/`, - }, - { - code: `/(?:)/`, - }, - { - code: `/a|b/`, - }, - { - code: `/a|b|c/`, - }, - { - // exception when used to make group optional - code: `/(a|)/,/(?:a|)/`, - }, - ], - invalid: [ - { - code: `/|/`, - errors: [ - { - message: 'Remove this empty alternative.', - line: 1, - endLine: 1, - column: 2, - endColumn: 3, - }, - { - message: 'Remove this empty alternative.', - line: 1, - endLine: 1, - column: 2, - endColumn: 3, +describe('S6323', () => { + it('S6323', () => { + const ruleTester = new RuleTester(); + ruleTester.run('Alternation with empty alternatives', rule, { + valid: [ + { + code: `/a/`, }, - ], - }, - { - code: `/a|/`, - errors: [ { - message: 'Remove this empty alternative.', - line: 1, - endLine: 1, - column: 3, - endColumn: 4, + code: `/()/`, }, - ], - }, - { - code: `/|a/`, - errors: [ { - message: 'Remove this empty alternative.', - line: 1, - endLine: 1, - column: 2, - endColumn: 3, + code: `/(?:)/`, }, - ], - }, - { - code: `/a|b|/`, - errors: 1, - }, - { - code: `/a||b/`, - errors: 1, - }, - { - code: `/||/`, - errors: 3, - }, - { - code: `/(|)/`, - errors: 1, - }, - { - code: `/(?:|)/;`, - errors: 1, - }, - { - code: `/(a|)?/`, - errors: 1, - }, - { - code: `/(a|)*/`, - errors: 1, - }, - { - code: `/(a|){1,3}/`, - errors: 1, - }, - { - code: `new RegExp('|')`, - errors: [ - { - message: 'Remove this empty alternative.', - line: 1, - endLine: 1, - column: 13, - endColumn: 14, - }, - { - message: 'Remove this empty alternative.', - line: 1, - endLine: 1, - column: 13, - endColumn: 14, + { + code: `/a|b/`, + }, + { + code: `/a|b|c/`, + }, + { + // exception when used to make group optional + code: `/(a|)/,/(?:a|)/`, }, ], - }, - { - code: `new RegExp('a\\n(|)')`, - errors: [ + invalid: [ + { + code: `/|/`, + errors: [ + { + message: 'Remove this empty alternative.', + line: 1, + endLine: 1, + column: 2, + endColumn: 3, + }, + { + message: 'Remove this empty alternative.', + line: 1, + endLine: 1, + column: 2, + endColumn: 3, + }, + ], + }, + { + code: `/a|/`, + errors: [ + { + message: 'Remove this empty alternative.', + line: 1, + endLine: 1, + column: 3, + endColumn: 4, + }, + ], + }, + { + code: `/|a/`, + errors: [ + { + message: 'Remove this empty alternative.', + line: 1, + endLine: 1, + column: 2, + endColumn: 3, + }, + ], + }, + { + code: `/a|b|/`, + errors: 1, + }, + { + code: `/a||b/`, + errors: 1, + }, + { + code: `/||/`, + errors: 3, + }, + { + code: `/(|)/`, + errors: 1, + }, + { + code: `/(?:|)/;`, + errors: 1, + }, + { + code: `/(a|)?/`, + errors: 1, + }, + { + code: `/(a|)*/`, + errors: 1, + }, + { + code: `/(a|){1,3}/`, + errors: 1, + }, + { + code: `new RegExp('|')`, + errors: [ + { + message: 'Remove this empty alternative.', + line: 1, + endLine: 1, + column: 13, + endColumn: 14, + }, + { + message: 'Remove this empty alternative.', + line: 1, + endLine: 1, + column: 13, + endColumn: 14, + }, + ], + }, { - message: 'Remove this empty alternative.', - line: 1, - endLine: 1, - column: 18, - endColumn: 19, + code: `new RegExp('a\\n(|)')`, + errors: [ + { + message: 'Remove this empty alternative.', + line: 1, + endLine: 1, + column: 18, + endColumn: 19, + }, + ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6324/unit.test.ts b/packages/jsts/src/rules/S6324/unit.test.ts index 4a5e1fc77e0..57b792b00b0 100644 --- a/packages/jsts/src/rules/S6324/unit.test.ts +++ b/packages/jsts/src/rules/S6324/unit.test.ts @@ -14,110 +14,113 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); -ruleTester.run('No control characters in regular expressions', rule, { - valid: [ - { - code: `/0/`, - }, - { - code: `/\\0/`, - }, - { - code: `/\\x20/`, - }, - { - code: `/\\u0020/`, - }, - { - code: `/\\u{001F}/`, - }, - { - code: `/\\cA/`, - }, - { - code: String.raw`new RegExp('\t')`, - }, - { - code: String.raw`new RegExp('\n')`, - }, - ], - invalid: [ - { - code: `/\\x00/`, - errors: [ - { - message: 'Remove this control character.', - line: 1, - endLine: 1, - column: 2, - endColumn: 6, +describe('S6324', () => { + it('S6324', () => { + const ruleTester = new RuleTester(); + ruleTester.run('No control characters in regular expressions', rule, { + valid: [ + { + code: `/0/`, }, - ], - }, - { - code: `/\\u001F/`, - errors: [ { - message: 'Remove this control character.', - line: 1, - endLine: 1, - column: 2, - endColumn: 8, + code: `/\\0/`, + }, + { + code: `/\\x20/`, + }, + { + code: `/\\u0020/`, + }, + { + code: `/\\u{001F}/`, + }, + { + code: `/\\cA/`, + }, + { + code: String.raw`new RegExp('\t')`, }, - ], - }, - { - code: `/\\u{001F}/u`, - errors: [ { - message: 'Remove this control character.', - line: 1, - endLine: 1, - column: 2, - endColumn: 10, + code: String.raw`new RegExp('\n')`, }, ], - }, - { - code: "var regex = new RegExp('\\x1f\\x1e')", - errors: [ + invalid: [ + { + code: `/\\x00/`, + errors: [ + { + message: 'Remove this control character.', + line: 1, + endLine: 1, + column: 2, + endColumn: 6, + }, + ], + }, + { + code: `/\\u001F/`, + errors: [ + { + message: 'Remove this control character.', + line: 1, + endLine: 1, + column: 2, + endColumn: 8, + }, + ], + }, + { + code: `/\\u{001F}/u`, + errors: [ + { + message: 'Remove this control character.', + line: 1, + endLine: 1, + column: 2, + endColumn: 10, + }, + ], + }, + { + code: "var regex = new RegExp('\\x1f\\x1e')", + errors: [ + { + message: String.raw`Remove this control character.`, + line: 1, + endLine: 1, + column: 25, + endColumn: 29, + }, + { + message: String.raw`Remove this control character.`, + line: 1, + endLine: 1, + column: 29, + endColumn: 33, + }, + ], + }, + { + code: "var regex = new RegExp('\\x1fFOO\\x00')", + errors: 2, + }, + { + code: "var regex = new RegExp('FOO\\x1fFOO\\x1f')", + errors: 2, + }, { - message: String.raw`Remove this control character.`, - line: 1, - endLine: 1, - column: 25, - endColumn: 29, + code: "var regex = RegExp('\\x1f')", + errors: 1, }, { - message: String.raw`Remove this control character.`, - line: 1, - endLine: 1, - column: 29, - endColumn: 33, + code: String.raw`const flags = ''; new RegExp("\\u001F", flags)`, + errors: 1, }, ], - }, - { - code: "var regex = new RegExp('\\x1fFOO\\x00')", - errors: 2, - }, - { - code: "var regex = new RegExp('FOO\\x1fFOO\\x1f')", - errors: 2, - }, - { - code: "var regex = RegExp('\\x1f')", - errors: 1, - }, - { - code: String.raw`const flags = ''; new RegExp("\\u001F", flags)`, - errors: 1, - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6326/unit.test.ts b/packages/jsts/src/rules/S6326/unit.test.ts index 8208b99bf2d..a38d187fa49 100644 --- a/packages/jsts/src/rules/S6326/unit.test.ts +++ b/packages/jsts/src/rules/S6326/unit.test.ts @@ -14,77 +14,80 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); -ruleTester.run('Regex with multiple spaces', rule, { - valid: [ - { - code: `/ /`, - }, - { - code: `/ {2}/`, - }, - { - code: `/ a /`, - }, - { - // will be reported by S5869 - code: `/[ ]/`, - }, - { - code: ` +describe('S6326', () => { + it('S6326', () => { + const ruleTester = new RuleTester(); + ruleTester.run('Regex with multiple spaces', rule, { + valid: [ + { + code: `/ /`, + }, + { + code: `/ {2}/`, + }, + { + code: `/ a /`, + }, + { + // will be reported by S5869 + code: `/[ ]/`, + }, + { + code: ` / ( )/; /a | b/; / .* /; / \\w /; / . /; / \\b /;`, - }, - ], - invalid: [ - { - code: `/a b /`, - errors: [ + }, + ], + invalid: [ { - message: 'If multiple spaces are required here, use number quantifier ({3}).', - line: 1, - endLine: 1, - column: 3, - endColumn: 6, - suggestions: [ + code: `/a b /`, + errors: [ { - desc: 'Use quantifier {3}', - output: `/a {3}b /`, + message: 'If multiple spaces are required here, use number quantifier ({3}).', + line: 1, + endLine: 1, + column: 3, + endColumn: 6, + suggestions: [ + { + desc: 'Use quantifier {3}', + output: `/a {3}b /`, + }, + ], }, ], }, - ], - }, - { - code: `/ a /`, - errors: 2, - }, - { - code: `/ */; / +/; / {2}/; / ?/ `, - errors: 4, - }, - { - code: `/(a b)/ `, - errors: 1, - }, - { - code: ` + { + code: `/ a /`, + errors: 2, + }, + { + code: `/ */; / +/; / {2}/; / ?/ `, + errors: 4, + }, + { + code: `/(a b)/ `, + errors: 1, + }, + { + code: ` / ( )/; /a | b/; / .* /; / \\w /; / . /; / \\b /;`, - errors: 6, - }, - ], + errors: 6, + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6327/cb.fixture.js b/packages/jsts/src/rules/S6327/cb.fixture.js index 1f5c6da107d..a2f7b8c84e0 100644 --- a/packages/jsts/src/rules/S6327/cb.fixture.js +++ b/packages/jsts/src/rules/S6327/cb.fixture.js @@ -1,5 +1,5 @@ -const { Topic, CfnTopic } = require('aws-cdk-lib/aws-sns'); -const { Key } = require('aws-cdk-lib/aws-kms'); +import { CfnTopic, Topic } from 'aws-cdk-lib/aws-sns'; +import { Key } from 'aws-cdk-lib/aws-kms'; function compliant() { @@ -60,28 +60,28 @@ function non_compliant() { new Topic(this, 'UnencryptedTopic'); // Noncompliant {{Omitting "masterKey" disables SNS topics encryption. Make sure it is safe here.}} // ^^^^^ - new Topic(this, 'UnencryptedTopic', undefined); // Noncompliant + new Topic(this, 'UnencryptedTopic', undefined); // Noncompliant {{Omitting "masterKey" disables SNS topics encryption. Make sure it is safe here.}} // ^^^^^ - new Topic(this, 'UnencryptedTopic', {}); // Noncompliant + new Topic(this, 'UnencryptedTopic', {}); // Noncompliant {{Omitting "masterKey" disables SNS topics encryption. Make sure it is safe here.}} // ^^ new Topic(this, 'UnencryptedTopic', { - masterKey: undefined // Noncompliant + masterKey: undefined // Noncompliant {{Omitting "masterKey" disables SNS topics encryption. Make sure it is safe here.}} // ^^^^^^^^^ }); new Topic(this, 'UnencryptedTopic', { - 'masterKey': undefined // Noncompliant + 'masterKey': undefined // Noncompliant {{Omitting "masterKey" disables SNS topics encryption. Make sure it is safe here.}} }); new Topic(this, 'UnencryptedTopic', { - masterKey: undefinedKey // Noncompliant + masterKey: undefinedKey // Noncompliant {{Omitting "masterKey" disables SNS topics encryption. Make sure it is safe here.}} }); const masterKey = undefined; new Topic(this, 'UnencryptedTopic', { - masterKey // Noncompliant + masterKey // Noncompliant {{Omitting "masterKey" disables SNS topics encryption. Make sure it is safe here.}} }); const topicProps = { masterKey: undefinedKey }; - new Topic(this, 'UnencryptedTopic', { // Noncompliant + new Topic(this, 'UnencryptedTopic', { // Noncompliant {{Omitting "masterKey" disables SNS topics encryption. Make sure it is safe here.}} ...topicProps }); @@ -89,32 +89,32 @@ function non_compliant() { new CfnTopic(this, 'UnencryptedCfnTopic'); // Noncompliant {{Omitting "kmsMasterKeyId" disables SNS topics encryption. Make sure it is safe here.}} // ^^^^^^^^ - new CfnTopic(this, 'UnencryptedCfnTopic', undefined); // Noncompliant + new CfnTopic(this, 'UnencryptedCfnTopic', undefined); // Noncompliant {{Omitting "kmsMasterKeyId" disables SNS topics encryption. Make sure it is safe here.}} // ^^^^^^^^ - new CfnTopic(this, 'UnencryptedCfnTopic', {}); // Noncompliant + new CfnTopic(this, 'UnencryptedCfnTopic', {}); // Noncompliant {{Omitting "kmsMasterKeyId" disables SNS topics encryption. Make sure it is safe here.}} // ^^ new CfnTopic(this, 'UnencryptedCfnTopic', { - kmsMasterKeyId: undefined // Noncompliant + kmsMasterKeyId: undefined // Noncompliant {{Omitting "kmsMasterKeyId" disables SNS topics encryption. Make sure it is safe here.}} // ^^^^^^^^^ }); new CfnTopic(this, 'UnencryptedCfnTopic', { - 'kmsMasterKeyId': undefined // Noncompliant + 'kmsMasterKeyId': undefined // Noncompliant {{Omitting "kmsMasterKeyId" disables SNS topics encryption. Make sure it is safe here.}} }); new CfnTopic(this, 'UnencryptedCfnTopic', { - kmsMasterKeyId: undefinedKeyId // Noncompliant + kmsMasterKeyId: undefinedKeyId // Noncompliant {{Omitting "kmsMasterKeyId" disables SNS topics encryption. Make sure it is safe here.}} }); new CfnTopic(this, 'UnencryptedCfnTopic', { - kmsMasterKeyId: undefinedKeyId // Noncompliant + kmsMasterKeyId: undefinedKeyId // Noncompliant {{Omitting "kmsMasterKeyId" disables SNS topics encryption. Make sure it is safe here.}} }); const kmsMasterKeyId = undefined; new CfnTopic(this, 'UnencryptedCfnTopic', { - kmsMasterKeyId // Noncompliant + kmsMasterKeyId // Noncompliant {{Omitting "kmsMasterKeyId" disables SNS topics encryption. Make sure it is safe here.}} }); const cfnTopicProps = { kmsMasterKeyId: undefinedKeyId }; - new CfnTopic(this, 'UnencryptedCfnTopic', { // Noncompliant + new CfnTopic(this, 'UnencryptedCfnTopic', { // Noncompliant {{Omitting "kmsMasterKeyId" disables SNS topics encryption. Make sure it is safe here.}} ...cfnTopicProps }); } diff --git a/packages/jsts/src/rules/S6327/cb.fixture.ts b/packages/jsts/src/rules/S6327/cb.fixture.ts deleted file mode 100644 index 1406bc470ed..00000000000 --- a/packages/jsts/src/rules/S6327/cb.fixture.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { CfnTopic, Topic } from 'aws-cdk-lib/aws-sns'; -import { Key } from 'aws-cdk-lib/aws-kms'; - -function compliant() { - - new Topic(this, 'EncryptedTopic', { - masterKey: unknownKey - }); - - const encryptionKey = new Key(this, 'Key', { enableKeyRotation: true }); - - new Topic(this, 'EncryptedTopic', { - masterKey: encryptionKey - }); - - new Topic(this, 'EncryptedTopic', { - 'masterKey': encryptionKey - }); - - const topicProps = { masterKey: encryptionKey }; - - new Topic(this, 'EncryptedTopic', { - ...topicProps - }); - - const topicArgs = [this, 'EncryptedTopic', { masterKey: undefined} ]; - new Topic(...topicArgs); // FN - not supporting arguments spread - - new CfnTopic(this, 'EncryptedCfnTopic', { - kmsMasterKeyId: unknownKeyId - }); - - new CfnTopic(this, 'EncryptedCfnTopic', { - ...unknownOptions - }); - - new CfnTopic(this, 'EncryptedCfnTopic', unknownOptionsnb); - - new CfnTopic(this, 'EncryptedCfnTopic', { - kmsMasterKeyId: encryptionKey.keyId - }); - - new CfnTopic(this, 'EncryptedCfnTopic', { - 'kmsMasterKeyId': encryptionKey.keyId - }); - - const cfnTopicProps = { kmsMasterKeyId: encryptionKey.keyId }; - - new CfnTopic(this, 'EncryptedCfnTopic', { - ...cfnTopicProps - }); - - const cfnTopicArgs = [this, 'EncryptedCfnTopic', { kmsMasterKeyId: undefined} ]; - new CfnTopic(...cfnTopicArgs); // FN - not supporting arguments spread -} - -function non_compliant() { - - const undefinedKey = undefined; - - new Topic(this, 'UnencryptedTopic'); // Noncompliant {{Omitting "masterKey" disables SNS topics encryption. Make sure it is safe here.}} - new Topic(this, 'UnencryptedTopic', undefined); // Noncompliant - new Topic(this, 'UnencryptedTopic', {}); // Noncompliant - new Topic(this, 'UnencryptedTopic', { - masterKey: undefined // Noncompliant - }); - new Topic(this, 'UnencryptedTopic', { - 'masterKey': undefined // Noncompliant - }); - new Topic(this, 'UnencryptedTopic', { - masterKey: undefinedKey // Noncompliant - }); - - const masterKey = undefined; - new Topic(this, 'UnencryptedTopic', { - masterKey // Noncompliant - }); - - const topicProps = { masterKey: undefinedKey }; - new Topic(this, 'UnencryptedTopic', { // Noncompliant - ...topicProps - }); - - const undefinedKeyId = undefined; - - new CfnTopic(this, 'UnencryptedCfnTopic'); // Noncompliant {{Omitting "kmsMasterKeyId" disables SNS topics encryption. Make sure it is safe here.}} - new CfnTopic(this, 'UnencryptedCfnTopic', undefined); // Noncompliant - new CfnTopic(this, 'UnencryptedCfnTopic', {}); // Noncompliant - new CfnTopic(this, 'UnencryptedCfnTopic', { - kmsMasterKeyId: undefined // Noncompliant - }); - new CfnTopic(this, 'UnencryptedCfnTopic', { - 'kmsMasterKeyId': undefined // Noncompliant - }); - new CfnTopic(this, 'UnencryptedCfnTopic', { - kmsMasterKeyId: undefinedKeyId // Noncompliant - }); - - new CfnTopic(this, 'UnencryptedCfnTopic', { - kmsMasterKeyId: undefinedKeyId // Noncompliant - }); - - const kmsMasterKeyId = undefined; - new CfnTopic(this, 'UnencryptedCfnTopic', { - kmsMasterKeyId // Noncompliant - }); - - const cfnTopicProps = { kmsMasterKeyId: undefinedKeyId }; - new CfnTopic(this, 'UnencryptedCfnTopic', { // Noncompliant - ...cfnTopicProps - }); -} diff --git a/packages/jsts/src/rules/S6327/cb.test.ts b/packages/jsts/src/rules/S6327/cb.test.ts index 0115bc86ea4..65020757ec8 100644 --- a/packages/jsts/src/rules/S6327/cb.test.ts +++ b/packages/jsts/src/rules/S6327/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6327', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6328/unit.test.ts b/packages/jsts/src/rules/S6328/unit.test.ts index f99db51629d..9fa1963f516 100644 --- a/packages/jsts/src/rules/S6328/unit.test.ts +++ b/packages/jsts/src/rules/S6328/unit.test.ts @@ -15,177 +15,179 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; -import { TypeScriptRuleTester } from '../../../tests/tools/index.js'; +import { DefaultParserRuleTester, RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const typeAwareRuleTester = new TypeScriptRuleTester(); -typeAwareRuleTester.run('Existing regular expression groups', rule, { - valid: [ - { - code: `replace()`, - }, - { - code: `'str'.replace()`, - }, - { - code: `'str'[replace]()`, - }, - { - code: `'str'.search()`, - }, - { - code: `[].replace()`, - }, - { - code: `'str'.replaceAll(/(\d+)/, '$1')`, - }, - { - code: `'str'.replace(/(\d+)/, '$1')`, - }, - { - code: `'str'.replace(/(\d+)\s(\d+)/, '$1, $2, $1')`, - }, - { - code: `'str'.replace(/(?\w+)/, '$')`, - }, - { - code: `'str'.replace(/(?\w+)\s(?\w+)/, '$, $, $')`, - }, - { - code: `'str'.replace(/(\d+)\s(?\w+)/, '$1, $')`, - }, - { - code: `'str'.replace(/(?\w+)/, '$')`, - }, - { - code: `'str'.replace(/str/, 'abc')`, - }, - { - code: `'str'.replace(/str/, substr)`, - }, - { - code: `'str'.replace(pattern, 'abc')`, - }, - { - code: `'str'.replace(new RegExp('(\d+)'), '$1')`, - }, - { - code: `'str'.replace(new RegExp('(\d'), '$1')`, - }, - ], - invalid: [ - { - code: `'str'.replaceAll(/(\d+)/, '$0')`, - errors: [ - { - message: 'Referencing non-existing group: $0.', - line: 1, - column: 26, +describe('S6328', () => { + it('S6328', () => { + const typeAwareRuleTester = new RuleTester(); + typeAwareRuleTester.run('Existing regular expression groups', rule, { + valid: [ + { + code: `replace()`, }, - ], - }, - { - code: `'str'.replace(/(\d+)/, '$0')`, - errors: [ { - message: 'Referencing non-existing group: $0.', - line: 1, - column: 23, + code: `'str'.replace()`, }, - ], - }, - { - code: `'str'.replace(/(\d+)/, '$2')`, - errors: [ { - message: 'Referencing non-existing group: $2.', - line: 1, - column: 23, + code: `'str'[replace]()`, }, - ], - }, - { - code: `'str'.replace(/(\d+)\s(\d+)/, '$0 $1 $2 $3')`, - errors: [ { - message: 'Referencing non-existing groups: $0, $3.', - line: 1, - column: 28, + code: `'str'.search()`, }, - ], - }, - { - code: `'str'.replace(/(?\w+)/, '$')`, - errors: [ { - message: 'Referencing non-existing group: $.', - line: 1, - column: 31, + code: `[].replace()`, }, - ], - }, - { - code: `'str'.replace(/(?\w+)\s(?\w+)/, '$ $ $ $')`, - errors: [ { - message: 'Referencing non-existing groups: $, $.', - line: 1, - column: 45, + code: `'str'.replaceAll(/(\d+)/, '$1')`, }, - ], - }, - { - code: `'str'.replace(/(?\w+)/, '$0 $ $')`, - errors: [ { - message: 'Referencing non-existing groups: $0, $.', - line: 1, - column: 31, + code: `'str'.replace(/(\d+)/, '$1')`, + }, + { + code: `'str'.replace(/(\d+)\s(\d+)/, '$1, $2, $1')`, + }, + { + code: `'str'.replace(/(?\w+)/, '$')`, + }, + { + code: `'str'.replace(/(?\w+)\s(?\w+)/, '$, $, $')`, }, - ], - }, - { - code: `'str'.replaceAll(new RegExp('(\d+)'), '$0')`, - errors: [ { - message: 'Referencing non-existing group: $0.', - line: 1, - column: 38, + code: `'str'.replace(/(\d+)\s(?\w+)/, '$1, $')`, + }, + { + code: `'str'.replace(/(?\w+)/, '$')`, + }, + { + code: `'str'.replace(/str/, 'abc')`, + }, + { + code: `'str'.replace(/str/, substr)`, + }, + { + code: `'str'.replace(pattern, 'abc')`, + }, + { + code: `'str'.replace(new RegExp('(\d+)'), '$1')`, + }, + { + code: `'str'.replace(new RegExp('(\d'), '$1')`, }, ], - }, - { - code: ` + invalid: [ + { + code: `'str'.replaceAll(/(\d+)/, '$0')`, + errors: [ + { + message: 'Referencing non-existing group: $0.', + line: 1, + column: 26, + }, + ], + }, + { + code: `'str'.replace(/(\d+)/, '$0')`, + errors: [ + { + message: 'Referencing non-existing group: $0.', + line: 1, + column: 23, + }, + ], + }, + { + code: `'str'.replace(/(\d+)/, '$2')`, + errors: [ + { + message: 'Referencing non-existing group: $2.', + line: 1, + column: 23, + }, + ], + }, + { + code: `'str'.replace(/(\d+)\s(\d+)/, '$0 $1 $2 $3')`, + errors: [ + { + message: 'Referencing non-existing groups: $0, $3.', + line: 1, + column: 28, + }, + ], + }, + { + code: `'str'.replace(/(?\w+)/, '$')`, + errors: [ + { + message: 'Referencing non-existing group: $.', + line: 1, + column: 31, + }, + ], + }, + { + code: `'str'.replace(/(?\w+)\s(?\w+)/, '$ $ $ $')`, + errors: [ + { + message: 'Referencing non-existing groups: $, $.', + line: 1, + column: 45, + }, + ], + }, + { + code: `'str'.replace(/(?\w+)/, '$0 $ $')`, + errors: [ + { + message: 'Referencing non-existing groups: $0, $.', + line: 1, + column: 31, + }, + ], + }, + { + code: `'str'.replaceAll(new RegExp('(\d+)'), '$0')`, + errors: [ + { + message: 'Referencing non-existing group: $0.', + line: 1, + column: 38, + }, + ], + }, + { + code: ` const pattern = '(\d+)'; 'str'.replaceAll(new RegExp(pattern), '$0')`, - errors: [ - { - message: 'Referencing non-existing group: $0.', - line: 3, - column: 47, + errors: [ + { + message: 'Referencing non-existing group: $0.', + line: 3, + column: 47, + }, + ], }, - ], - }, - { - code: ` + { + code: ` const pattern = /(\d+)/; 'str'.replaceAll(pattern, '$0')`, - errors: [{ message: 'Referencing non-existing group: $0.' }], - }, - ], -}); + errors: [{ message: 'Referencing non-existing group: $0.' }], + }, + ], + }); -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); -ruleTester.run('Existing regular expression groups reports nothing without types', rule, { - valid: [ - { - code: `'str'.replace(/(\d+)/, '$1')`, - }, - { - code: `'str'.replace(/(\d+)/, '$0')`, - }, - ], - invalid: [], + const ruleTester = new DefaultParserRuleTester(); + ruleTester.run('Existing regular expression groups reports nothing without types', rule, { + valid: [ + { + code: `'str'.replace(/(\d+)/, '$1')`, + }, + { + code: `'str'.replace(/(\d+)/, '$0')`, + }, + ], + invalid: [], + }); + }); }); diff --git a/packages/jsts/src/rules/S6329/cb.test.ts b/packages/jsts/src/rules/S6329/cb.test.ts index 9da3853797b..29bf99257d9 100644 --- a/packages/jsts/src/rules/S6329/cb.test.ts +++ b/packages/jsts/src/rules/S6329/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6329', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6330/cb.fixture.js b/packages/jsts/src/rules/S6330/cb.fixture.js index f09094d92e8..424f37a2294 100644 --- a/packages/jsts/src/rules/S6330/cb.fixture.js +++ b/packages/jsts/src/rules/S6330/cb.fixture.js @@ -19,7 +19,7 @@ class S6330NonCompliantStack extends Stack { // ^^^^^^^^^ }); const queue5 = new Queue(this, 'UnencryptedQueue4', { - encryption: QueueEncryption.UNENCRYPTED // Noncompliant {{Setting "encryption" to QueueEncryption.UNENCRYPTED disables SQS queues encryption. Make sure it is safe here.}) + encryption: QueueEncryption.UNENCRYPTED // Noncompliant {{Setting "encryption" to "QueueEncryption.UNENCRYPTED" disables SQS queues encryption. Make sure it is safe here.}} // ^^^^^^^^^^^^^^^^^^^^^^^^^^^ }); diff --git a/packages/jsts/src/rules/S6330/cb.test.ts b/packages/jsts/src/rules/S6330/cb.test.ts index 3726c0c5983..50685a8ffce 100644 --- a/packages/jsts/src/rules/S6330/cb.test.ts +++ b/packages/jsts/src/rules/S6330/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6330', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6330/rule.ts b/packages/jsts/src/rules/S6330/rule.ts index 2c8475e535e..089533b4c50 100644 --- a/packages/jsts/src/rules/S6330/rule.ts +++ b/packages/jsts/src/rules/S6330/rule.ts @@ -39,7 +39,7 @@ export const rule: Rule.RuleModule = AwsCdkTemplate( 'Omitting "encryption" disables SQS queues encryption. Make sure it is safe here.', DisabledQueue: 'Setting "encryption" to "QueueEncryption.UNENCRYPTED" disables SQS queues encryption.' + - 'Make sure it is safe here.', + ' Make sure it is safe here.', }, }), ); diff --git a/packages/jsts/src/rules/S6331/unit.test.ts b/packages/jsts/src/rules/S6331/unit.test.ts index cc46372c11c..355c1b09a96 100644 --- a/packages/jsts/src/rules/S6331/unit.test.ts +++ b/packages/jsts/src/rules/S6331/unit.test.ts @@ -14,103 +14,106 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); -ruleTester.run('Empty groups', rule, { - valid: [ - { - code: `/\\(\\)/`, - }, - { - code: `/(a)/`, - }, - { - code: `/(a|)/`, - }, - { - code: `/(a|b)/`, - }, - { - code: `/(\d+)/`, - }, - ], - invalid: [ - { - code: `/()/`, - errors: [ +describe('S6331', () => { + it('S6331', () => { + const ruleTester = new RuleTester(); + ruleTester.run('Empty groups', rule, { + valid: [ { - message: 'Remove this empty group.', - line: 1, - endLine: 1, - column: 2, - endColumn: 4, + code: `/\\(\\)/`, }, - ], - }, - { - code: `new RegExp("\\u{000000000061}()")`, - errors: [ { - message: 'Remove this empty group.', - line: 1, - endLine: 1, - column: 29, - endColumn: 31, + code: `/(a)/`, }, - ], - }, - { - code: `/(|)/`, - errors: 1, - }, - { - code: `/(?:)/`, - errors: 1, - }, - { - code: `new RegExp('')`, // parsed as /(?:)/ - errors: 1, - }, - { - // \u0009 is unicode escape for TAB - code: `new RegExp('\\u0009(|)')`, - errors: [ { - message: 'Remove this empty group.', - line: 1, - endLine: 1, - column: 19, - endColumn: 22, + code: `/(a|)/`, + }, + { + code: `/(a|b)/`, }, - ], - }, - { - code: `new RegExp('\\t(|)')`, - errors: [ { - message: 'Remove this empty group.', - line: 1, - endLine: 1, - column: 15, - endColumn: 18, + code: `/(\d+)/`, }, ], - }, - { - code: `new RegExp('\\n(|)')`, - errors: [ + invalid: [ + { + code: `/()/`, + errors: [ + { + message: 'Remove this empty group.', + line: 1, + endLine: 1, + column: 2, + endColumn: 4, + }, + ], + }, + { + code: `new RegExp("\\u{000000000061}()")`, + errors: [ + { + message: 'Remove this empty group.', + line: 1, + endLine: 1, + column: 29, + endColumn: 31, + }, + ], + }, + { + code: `/(|)/`, + errors: 1, + }, + { + code: `/(?:)/`, + errors: 1, + }, + { + code: `new RegExp('')`, // parsed as /(?:)/ + errors: 1, + }, + { + // \u0009 is unicode escape for TAB + code: `new RegExp('\\u0009(|)')`, + errors: [ + { + message: 'Remove this empty group.', + line: 1, + endLine: 1, + column: 19, + endColumn: 22, + }, + ], + }, + { + code: `new RegExp('\\t(|)')`, + errors: [ + { + message: 'Remove this empty group.', + line: 1, + endLine: 1, + column: 15, + endColumn: 18, + }, + ], + }, { - message: 'Remove this empty group.', - line: 1, - endLine: 1, - column: 16, - endColumn: 18, + code: `new RegExp('\\n(|)')`, + errors: [ + { + message: 'Remove this empty group.', + line: 1, + endLine: 1, + column: 16, + endColumn: 18, + }, + ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6332/cb.fixture.js b/packages/jsts/src/rules/S6332/cb.fixture.js index 7808a5d7d19..39afa67db4d 100644 --- a/packages/jsts/src/rules/S6332/cb.fixture.js +++ b/packages/jsts/src/rules/S6332/cb.fixture.js @@ -33,10 +33,10 @@ new CfnFileSystem(this, 'unencrypted-explicit-cfn', unknownValue); //Compliant new CfnFileSystem(this, 'unencrypted-explicit-cfn', {...unknownValue}); //Compliant new CfnFileSystem(this, 'unencrypted-explicit-cfn', {'encrypted': unknownValue}); //Compliant -new CfnFileSystem(this, 'unencrypted-explicit-cfn', {encrypted: false, ...unknownValue}); //NonCompliant +new CfnFileSystem(this, 'unencrypted-explicit-cfn', {encrypted: false, ...unknownValue}); //NonCompliant {{Make sure that using unencrypted file systems is safe here.}} // ^^^^^ -new CfnFileSystem(this, 'unencrypted-explicit-cfn', {...unknownValue, encrypted: false}); //NonCompliant +new CfnFileSystem(this, 'unencrypted-explicit-cfn', {...unknownValue, encrypted: false}); //NonCompliant {{Make sure that using unencrypted file systems is safe here.}} // ^^^^^ new CfnFileSystem(this, 'unencrypted-explicit-cfn', {'encrypted': undefined}); //Noncompliant {{Omitting "encrypted" disables EFS encryption. Make sure it is safe here.}} diff --git a/packages/jsts/src/rules/S6332/cb.test.ts b/packages/jsts/src/rules/S6332/cb.test.ts index 41487c00182..46642f8058f 100644 --- a/packages/jsts/src/rules/S6332/cb.test.ts +++ b/packages/jsts/src/rules/S6332/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6332', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6333/cb.test.ts b/packages/jsts/src/rules/S6333/cb.test.ts index 31698626200..f95aa81076d 100644 --- a/packages/jsts/src/rules/S6333/cb.test.ts +++ b/packages/jsts/src/rules/S6333/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6333', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6351/unit.test.ts b/packages/jsts/src/rules/S6351/unit.test.ts index a80452f0285..91b87f8705e 100644 --- a/packages/jsts/src/rules/S6351/unit.test.ts +++ b/packages/jsts/src/rules/S6351/unit.test.ts @@ -15,114 +15,117 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ parserOptions: { ecmaVersion: 2018 } }); -ruleTester.run('Regular expressions with the global flag should be used with caution', rule, { - valid: [ - { - code: `/none/;`, - }, - { - code: `/unicode/u;`, - }, - { - code: `/global/g;`, - }, - { - code: `RegExp('none');`, - }, - { - code: `RegExp('global', 'g');`, - }, - { - code: `new RegExp('global', 'g');`, - }, - { - code: `/sticky/y; `, - }, - { - code: `RegExp('sticky', 'y');`, - }, - { - code: `new RegExp('sticky', 'y');`, - }, - { - code: `while (condition) {/foo/g.exec(input);}`, - }, - { - code: `while (() => /foo/g.exec(input)) {}`, - }, - { - code: `const re = /foo/g; while (re.exec(input)) {}`, - }, - { - code: `while (exec(input)) {}`, - }, - { - code: `while (/foo/g.execute(input)) {}`, - }, - { - code: `while (/foo/u.exec(input)) {}`, - }, - { - code: `while (RegExp('foo').exec(input)) {}`, - }, - { - code: ` +describe('S6351', () => { + it('S6351', () => { + const ruleTester = new RuleTester(); + ruleTester.run('Regular expressions with the global flag should be used with caution', rule, { + valid: [ + { + code: `/none/;`, + }, + { + code: `/unicode/u;`, + }, + { + code: `/global/g;`, + }, + { + code: `RegExp('none');`, + }, + { + code: `RegExp('global', 'g');`, + }, + { + code: `new RegExp('global', 'g');`, + }, + { + code: `/sticky/y; `, + }, + { + code: `RegExp('sticky', 'y');`, + }, + { + code: `new RegExp('sticky', 'y');`, + }, + { + code: `while (condition) {/foo/g.exec(input);}`, + }, + { + code: `while (() => /foo/g.exec(input)) {}`, + }, + { + code: `const re = /foo/g; while (re.exec(input)) {}`, + }, + { + code: `while (exec(input)) {}`, + }, + { + code: `while (/foo/g.execute(input)) {}`, + }, + { + code: `while (/foo/u.exec(input)) {}`, + }, + { + code: `while (RegExp('foo').exec(input)) {}`, + }, + { + code: ` const re = /foo/; re.test('foo'); re.test('bar'); `, - }, - { - code: ` + }, + { + code: ` const re = /foo/; re.exec('foo'); re.exec('bar'); `, - }, - { - code: ` + }, + { + code: ` const re = /foo/g; re.test('foo'); `, - }, - { - code: ` + }, + { + code: ` const re = /foo/g; re.exec('foo'); `, - }, - { - code: ` + }, + { + code: ` const re = /foo/g; re.test(input); re.test(input); `, - }, - { - code: `re.test(input);`, - }, - { - code: ` + }, + { + code: `re.test(input);`, + }, + { + code: ` const re = /foo/g; re.test(input1); re.lastIndex = 0; re.test(input2); `, - }, - { - code: `let re; re.lastIndex = 0;`, - }, - { - code: `re.lastIndex = 0;`, - }, - { - code: `foo = re.lastIndex;`, - }, - { - code: ` + }, + { + code: `let re; re.lastIndex = 0;`, + }, + { + code: `re.lastIndex = 0;`, + }, + { + code: `foo = re.lastIndex;`, + }, + { + code: ` const re = /foo/g; re.test('foo'); re.test(''); // ok, empty string is used to reset the pattern @@ -133,111 +136,113 @@ ruleTester.run('Regular expressions with the global flag should be used with cau re2.test(""); // ok, empty string is used to reset the pattern re2.test('bar'); `, - }, - ], - invalid: [ - { - code: `/globalsticky/gy;`, - errors: [ - { - message: JSON.stringify({ - message: `Remove the 'g' flag from this regex as it is shadowed by the 'y' flag.`, - secondaryLocations: [], - }), - line: 1, - endLine: 1, - column: 1, - endColumn: 17, }, ], - options: ['sonar-runtime'], - }, - { - code: `RegExp('globalsticky', 'gy');`, - errors: 1, - }, - { - code: `new RegExp('globalsticky', 'gy');`, - errors: 1, - }, - { - code: `while (/foo/g.exec(input)) {}`, - errors: [ - { - message: JSON.stringify({ - message: `Extract this regular expression to avoid infinite loop.`, - secondaryLocations: [], - }), - line: 1, - endLine: 1, - column: 8, - endColumn: 14, + invalid: [ + { + code: `/globalsticky/gy;`, + errors: [ + { + message: JSON.stringify({ + message: `Remove the 'g' flag from this regex as it is shadowed by the 'y' flag.`, + secondaryLocations: [], + }), + line: 1, + endLine: 1, + column: 1, + endColumn: 17, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: `do {} while (/foo/g.exec(input));`, - errors: 1, - }, - { - code: `while ((/foo/g.exec(input)) !== null) {}`, - errors: 1, - }, - { - code: `while (RegExp('foo', 'g').exec(input)) {}`, - errors: 1, - }, - { - code: `while (new RegExp('foo', 'g').exec(input)) {}`, - errors: 1, - }, - { - code: ` + { + code: `RegExp('globalsticky', 'gy');`, + errors: 1, + }, + { + code: `new RegExp('globalsticky', 'gy');`, + errors: 1, + }, + { + code: `while (/foo/g.exec(input)) {}`, + errors: [ + { + message: JSON.stringify({ + message: `Extract this regular expression to avoid infinite loop.`, + secondaryLocations: [], + }), + line: 1, + endLine: 1, + column: 8, + endColumn: 14, + }, + ], + options: ['sonar-runtime'], + }, + { + code: `do {} while (/foo/g.exec(input));`, + errors: 1, + }, + { + code: `while ((/foo/g.exec(input)) !== null) {}`, + errors: 1, + }, + { + code: `while (RegExp('foo', 'g').exec(input)) {}`, + errors: 1, + }, + { + code: `while (new RegExp('foo', 'g').exec(input)) {}`, + errors: 1, + }, + { + code: ` const re = /foo/g; re.test('foo'); re.test('bar'); `, - errors: [ - { - message: JSON.stringify({ - message: `Remove the 'g' flag from this regex as it is used on different inputs.`, - secondaryLocations: [ - { message: 'Usage 1', column: 8, line: 3, endColumn: 22, endLine: 3 }, - { message: 'Usage 2', column: 8, line: 4, endColumn: 22, endLine: 4 }, - ], - }), - line: 2, - endLine: 2, - column: 20, - endColumn: 26, + errors: [ + { + message: JSON.stringify({ + message: `Remove the 'g' flag from this regex as it is used on different inputs.`, + secondaryLocations: [ + { message: 'Usage 1', column: 8, line: 3, endColumn: 22, endLine: 3 }, + { message: 'Usage 2', column: 8, line: 4, endColumn: 22, endLine: 4 }, + ], + }), + line: 2, + endLine: 2, + column: 20, + endColumn: 26, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: ` + { + code: ` const re = RegExp('foo', 'g'); re.test('foo'); re.test('bar'); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const re = new RegExp('foo', 'g'); re.test('foo'); re.test('bar'); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const re = /foo/g; re.exec('foo'); re.exec('bar'); `, - errors: 1, - }, - ], + errors: 1, + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6353/unit.test.ts b/packages/jsts/src/rules/S6353/unit.test.ts index ccf59e7dbc4..689203dee8a 100644 --- a/packages/jsts/src/rules/S6353/unit.test.ts +++ b/packages/jsts/src/rules/S6353/unit.test.ts @@ -14,257 +14,260 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); +describe('S6353', () => { + it('S6353', () => { + const ruleTester = new RuleTester(); -ruleTester.run( - `Regular expression quantifiers and character classes should be used concisely`, - rule, - { - valid: [ - { - code: `/[x]/`, - }, - { - code: `/[12]/`, - }, - { - code: `/[1234]/`, - }, - { - code: `/[1-9abc]/`, - }, - { - code: `/[1-9a-bAB]/`, - }, - { - code: `/[1-9a-bA-Z!]/`, - }, - { - code: `/x?/`, - }, - { - code: `/x*/`, - }, - { - code: `/x+/`, - }, - { - code: `/x{2}/`, - }, + ruleTester.run( + `Regular expression quantifiers and character classes should be used concisely`, + rule, { - code: `/[\\s\\S]/`, - }, - ], - invalid: [ - { - code: `/[\\s\\S]/s`, - errors: [ + valid: [ { - message: `Use concise character class syntax '.' instead of '[\\s\\S]'.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 8, + code: `/[x]/`, }, - ], - }, - { - code: `/[\\d\\D]/`, - errors: [ { - message: `Use concise character class syntax '.' instead of '[\\d\\D]'.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 8, + code: `/[12]/`, }, - ], - }, - { - code: `/[\\w\\W]/`, - errors: [ { - message: `Use concise character class syntax '.' instead of '[\\w\\W]'.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 8, + code: `/[1234]/`, }, - ], - }, - { - code: `/[0-9]/`, - errors: [ { - message: `Use concise character class syntax '\\d' instead of '[0-9]'.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 7, + code: `/[1-9abc]/`, }, - ], - }, - { - code: `/[^0-9]/`, - errors: [ { - message: `Use concise character class syntax '\\D' instead of '[^0-9]'.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 8, + code: `/[1-9a-bAB]/`, }, - ], - }, - { - code: `/[A-Za-z0-9_]/`, - errors: [ { - message: `Use concise character class syntax '\\w' instead of '[A-Za-z0-9_]'.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 14, + code: `/[1-9a-bA-Z!]/`, }, - ], - }, - { - code: `/[0-9_A-Za-z]/`, - errors: 1, - }, - { - code: `/[^A-Za-z0-9_]/`, - errors: [ { - message: `Use concise character class syntax '\\W' instead of '[^A-Za-z0-9_]'.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 15, + code: `/x?/`, }, - ], - }, - { - code: `/[^0-9_A-Za-z]/`, - errors: 1, - }, - { - code: `/x{0,1}/`, - errors: [ { - message: `Use concise quantifier syntax '?' instead of '{0,1}'.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 8, + code: `/x*/`, }, - ], - }, - { - code: `/x{0,1}?/`, - errors: 1, - }, - { - code: `/x{0,}/`, - errors: [ { - message: `Use concise quantifier syntax '*' instead of '{0,}'.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 7, + code: `/x+/`, }, - ], - }, - { - code: `/(x\\w+){0}/`, - errors: [ { - message: `Remove redundant (x\\w+){0}.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 11, + code: `/x{2}/`, }, - ], - }, - { - code: `/x{0,0}/`, - errors: [ { - message: `Remove redundant x{0,0}.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 8, + code: `/[\\s\\S]/`, }, ], - }, - { - code: `/(x\\w+){1}/`, - errors: [ + invalid: [ { - message: `Remove redundant quantifier {1}.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 11, + code: `/[\\s\\S]/s`, + errors: [ + { + message: `Use concise character class syntax '.' instead of '[\\s\\S]'.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 8, + }, + ], }, - ], - }, - { - code: `/x{1,1}/`, - errors: [ { - message: `Remove redundant quantifier {1,1}.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 8, + code: `/[\\d\\D]/`, + errors: [ + { + message: `Use concise character class syntax '.' instead of '[\\d\\D]'.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 8, + }, + ], }, - ], - }, - { - code: `/x{0,}?/`, - errors: 1, - }, - { - code: `/x{1,}/`, - errors: [ { - message: `Use concise quantifier syntax '+' instead of '{1,}'.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 7, + code: `/[\\w\\W]/`, + errors: [ + { + message: `Use concise character class syntax '.' instead of '[\\w\\W]'.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 8, + }, + ], + }, + { + code: `/[0-9]/`, + errors: [ + { + message: `Use concise character class syntax '\\d' instead of '[0-9]'.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 7, + }, + ], + }, + { + code: `/[^0-9]/`, + errors: [ + { + message: `Use concise character class syntax '\\D' instead of '[^0-9]'.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 8, + }, + ], + }, + { + code: `/[A-Za-z0-9_]/`, + errors: [ + { + message: `Use concise character class syntax '\\w' instead of '[A-Za-z0-9_]'.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 14, + }, + ], + }, + { + code: `/[0-9_A-Za-z]/`, + errors: 1, + }, + { + code: `/[^A-Za-z0-9_]/`, + errors: [ + { + message: `Use concise character class syntax '\\W' instead of '[^A-Za-z0-9_]'.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 15, + }, + ], }, - ], - }, - { - code: `/x{1,}?/`, - errors: 1, - }, - { - code: `/x{2,2}/`, - errors: [ { - message: `Use concise quantifier syntax '{2}' instead of '{2,2}'.`, - line: 1, - column: 2, - endLine: 1, - endColumn: 8, + code: `/[^0-9_A-Za-z]/`, + errors: 1, + }, + { + code: `/x{0,1}/`, + errors: [ + { + message: `Use concise quantifier syntax '?' instead of '{0,1}'.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 8, + }, + ], + }, + { + code: `/x{0,1}?/`, + errors: 1, + }, + { + code: `/x{0,}/`, + errors: [ + { + message: `Use concise quantifier syntax '*' instead of '{0,}'.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 7, + }, + ], + }, + { + code: `/(x\\w+){0}/`, + errors: [ + { + message: `Remove redundant (x\\w+){0}.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 11, + }, + ], + }, + { + code: `/x{0,0}/`, + errors: [ + { + message: `Remove redundant x{0,0}.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 8, + }, + ], + }, + { + code: `/(x\\w+){1}/`, + errors: [ + { + message: `Remove redundant quantifier {1}.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 11, + }, + ], + }, + { + code: `/x{1,1}/`, + errors: [ + { + message: `Remove redundant quantifier {1,1}.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 8, + }, + ], + }, + { + code: `/x{0,}?/`, + errors: 1, + }, + { + code: `/x{1,}/`, + errors: [ + { + message: `Use concise quantifier syntax '+' instead of '{1,}'.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 7, + }, + ], + }, + { + code: `/x{1,}?/`, + errors: 1, + }, + { + code: `/x{2,2}/`, + errors: [ + { + message: `Use concise quantifier syntax '{2}' instead of '{2,2}'.`, + line: 1, + column: 2, + endLine: 1, + endColumn: 8, + }, + ], + }, + { + code: `/x{2,2}?/`, + errors: 1, }, ], }, - { - code: `/x{2,2}?/`, - errors: 1, - }, - ], - }, -); + ); + }); +}); diff --git a/packages/jsts/src/rules/S6397/cb.fixture.ts b/packages/jsts/src/rules/S6397/cb.fixture.ts index a27b0526be5..a8efd5f350b 100644 --- a/packages/jsts/src/rules/S6397/cb.fixture.ts +++ b/packages/jsts/src/rules/S6397/cb.fixture.ts @@ -55,19 +55,19 @@ let invalid = [ // ^^^ }, { - regex: /[0]/, // Noncompliant + regex: /[0]/, // Noncompliant {{Replace this character class by the character itself.}} // ^^^ }, { - regex: /[\w]/, // Noncompliant + regex: /[\w]/, // Noncompliant {{Replace this character class by the character itself.}} // ^^^^ }, { - regex: /[\u2028]/, // Noncompliant + regex: /[\u2028]/, // Noncompliant {{Replace this character class by the character itself.}} // ^^^^^^^^ }, { - regex: /[\^]/, // Noncompliant + regex: /[\^]/, // Noncompliant {{Replace this character class by the character itself.}} // ^^^^ }, ]; diff --git a/packages/jsts/src/rules/S6397/cb.test.ts b/packages/jsts/src/rules/S6397/cb.test.ts index 91c7de6d392..51b812f77ad 100644 --- a/packages/jsts/src/rules/S6397/cb.test.ts +++ b/packages/jsts/src/rules/S6397/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6397', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6418/cb.fixture.ts b/packages/jsts/src/rules/S6418/cb.fixture.ts index 229e4a9453a..e98633e096f 100644 --- a/packages/jsts/src/rules/S6418/cb.fixture.ts +++ b/packages/jsts/src/rules/S6418/cb.fixture.ts @@ -1,22 +1,22 @@ function func() { - const token = 'rf6acB24J//1FZLRrKpjmBUYSnUX5CHlt/iD5vVVcgVuAIOB6hzcWjDnv16V6hDLevW0Qs4hKPbP1M4YfuDI16sZna1/VGRLkAbTk6xMPs4epH6A3ZqSyyI-H92y' // Noncompliant + const token = 'rf6acB24J//1FZLRrKpjmBUYSnUX5CHlt/iD5vVVcgVuAIOB6hzcWjDnv16V6hDLevW0Qs4hKPbP1M4YfuDI16sZna1/VGRLkAbTk6xMPs4epH6A3ZqSyyI-H92y' // Noncompliant {{"token" detected here, make sure this is not a hard-coded secret.}} // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ let api_key = 'not enough entropy' - api_key = 'rf6acB24J//1FZLRrKpjmBUYSnUX5CHlt/iD5vVVcgVuAIOB6hzcWjDnv16V6hDLevW0Qs4hKPbP1M4YfuDI16sZna1/VGRLkAbTk6xMPs4epH6A3ZqSyyI-H92y' // Noncompliant + api_key = 'rf6acB24J//1FZLRrKpjmBUYSnUX5CHlt/iD5vVVcgVuAIOB6hzcWjDnv16V6hDLevW0Qs4hKPbP1M4YfuDI16sZna1/VGRLkAbTk6xMPs4epH6A3ZqSyyI-H92y' // Noncompliant {{"api_key" detected here, make sure this is not a hard-coded secret.}} } function entropyTooLow() { const token = 'rf6acB24J//1FZLRrKpjmBUYSnUX5CHlt/iD5vVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' } class MyClass { - secret = '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.=' // Noncompliant + secret = '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.=' // Noncompliant {{"secret" detected here, make sure this is not a hard-coded secret.}} } function inFunctionCall() { - callWithSecret({ secret: '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.=' }) // Noncompliant + callWithSecret({ secret: '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.=' }) // Noncompliant {{"secret" detected here, make sure this is not a hard-coded secret.}} function callWithSecret({}) {} } -function functionWithSecret({ secret = '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.=' }) { // Noncompliant +function functionWithSecret({ secret = '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.=' }) { // Noncompliant {{"secret" detected here, make sure this is not a hard-coded secret.}} // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ } function cleanFunction(someArg, parameter='a string', anotherParameter: 42, ...args) { @@ -26,28 +26,28 @@ function cleanFunction(someArg, parameter='a string', anotherParameter: 42, ...a } const someObject = { - secret: '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.=', // Noncompliant + secret: '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.=', // Noncompliant {{"secret" detected here, make sure this is not a hard-coded secret.}} // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not_a_problem: 'not_a_secret', 42: 'forty-two' } function multipleAssignment() { - let nothing = 1, secret = '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v.~=', nothing_else = 2; // Noncompliant + let nothing = 1, secret = '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v.~=', nothing_else = 2; // Noncompliant {{"secret" detected here, make sure this is not a hard-coded secret.}} // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ } function assignmentWithType() { - const secret: string = '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.=' // Noncompliant + const secret: string = '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.=' // Noncompliant {{"secret" detected here, make sure this is not a hard-coded secret.}} let someVar: string; const anotherVar: number = 42 } function defaultValues(foo) { let secret; - secret = foo || '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.='; // Noncompliant - secret = foo ?? '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.='; // Noncompliant + secret = foo || '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.='; // Noncompliant {{"secret" detected here, make sure this is not a hard-coded secret.}} + secret = foo ?? '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.='; // Noncompliant {{"secret" detected here, make sure this is not a hard-coded secret.}} } function customSecretWord() { - const yolo = '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.='; // Noncompliant + const yolo = '1IfHMPanImzX8ZxC-Ud6+YhXiLwlXq$f_-3v~.='; // Noncompliant {{"yolo" detected here, make sure this is not a hard-coded secret.}} } diff --git a/packages/jsts/src/rules/S6418/cb.test.ts b/packages/jsts/src/rules/S6418/cb.test.ts index 5d963d44d3f..7b1782e73b8 100644 --- a/packages/jsts/src/rules/S6418/cb.test.ts +++ b/packages/jsts/src/rules/S6418/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6418', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6418/rule.ts b/packages/jsts/src/rules/S6418/rule.ts index 1fee234a459..2313e736ccf 100644 --- a/packages/jsts/src/rules/S6418/rule.ts +++ b/packages/jsts/src/rules/S6418/rule.ts @@ -23,8 +23,7 @@ import { isLogicalExpression, isStringLiteral, } from '../helpers/index.js'; -import { meta } from './meta.js'; -import { JSONSchema4 } from '@typescript-eslint/utils/json-schema'; +import { meta, schema } from './meta.js'; import { FromSchema } from 'json-schema-to-ts'; import estree from 'estree'; import { TSESTree } from '@typescript-eslint/utils'; @@ -41,26 +40,6 @@ function message(name: string): string { let randomnessSensibility: number; let secretWordRegexps: RegExp[]; -const schema = { - type: 'array', - minItems: 0, - maxItems: 1, - items: [ - { - type: 'object', - properties: { - secretWords: { - type: 'string', - }, - randomnessSensibility: { - type: 'number', - }, - }, - additionalProperties: false, - }, - ], -} as const satisfies JSONSchema4; - export const rule: Rule.RuleModule = { meta: generateMeta( meta as Rule.RuleMetaData, diff --git a/packages/jsts/src/rules/S6418/unit.test.ts b/packages/jsts/src/rules/S6418/unit.test.ts index 55f4eccd90c..a0bc2e9ef15 100644 --- a/packages/jsts/src/rules/S6418/unit.test.ts +++ b/packages/jsts/src/rules/S6418/unit.test.ts @@ -14,26 +14,31 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { JavaScriptRuleTester } from '../../../tests/tools/index.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './rule.js'; +import { describe, it } from 'node:test'; -const ruleTester = new JavaScriptRuleTester(); +describe('S6418', () => { + it('S6418', () => { + const ruleTester = new RuleTester(); -ruleTester.run('Rule S6418 - no-hardcoded-secrets', rule, { - valid: [], - invalid: [ - // we're verifying that given a broken RegExp, the rule still works. - { - code: ` + ruleTester.run('Rule S6418 - no-hardcoded-secrets', rule, { + valid: [], + invalid: [ + // we're verifying that given a broken RegExp, the rule still works. + { + code: ` secret = '9ah9w8dha9w8hd98h'; `, - options: [ - { - secretWords: 'sel/\\', - randomnessSensibility: 0.5, + options: [ + { + secretWords: 'sel/\\', + randomnessSensibility: 0.5, + }, + ], + errors: 1, }, ], - errors: 1, - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6426/cb.fixture.js b/packages/jsts/src/rules/S6426/cb.fixture.js index a5af0a226e2..c668a5275ca 100644 --- a/packages/jsts/src/rules/S6426/cb.fixture.js +++ b/packages/jsts/src/rules/S6426/cb.fixture.js @@ -4,20 +4,26 @@ describe.only("only on root describe"); // Noncompliant [[qf1]] {{Remove ".only( // edit@qf1 {{describe("only on root describe");}} describe("no exclusive tests", function() { - describe.only("a describe with a .only()", function () { // Noncompliant + describe.only("a describe with a .only()", function () { // Noncompliant [[qf2]] {{Remove ".only()" from your test case.}} // ^^^^ +// fix@qf2 {{Remove ."only()".}} +// edit@qf2 {{ describe("a describe with a .only()", function ()}} }); - it.only("is an 'it' statement using .only()", function () { // Noncompliant + it.only("is an 'it' statement using .only()", function () { // Noncompliant [[qf3]] {{Remove ".only()" from your test case.}} // ^^^^ +// fix@qf3 {{Remove ."only()".}} +// edit@qf3 {{ it("is an 'it' statement using .only()", function ()}} }); - test.only("is a 'test' statement using .only()", function () { // Noncompliant + test.only("is a 'test' statement using .only()", function () { // Noncompliant [[qf4]] {{Remove ".only()" from your test case.}} // ^^^^ +// fix@qf4 {{Remove ."only()".}} +// edit@qf4 {{ test("is a 'test' statement using .only()", function ()}} }); it// skipping a line here - .only("should be flagged with a comment slipped in the middle."); // Noncompliant [[qf2]] {{Remove ".only()" from your test case.}} + .only("should be flagged with a comment slipped in the middle."); // Noncompliant [[qf5]] {{Remove ".only()" from your test case.}} // ^^^^ -// fix@qf2 {{Remove ."only()".}} -// edit@qf2 [[sc=4;ec=9]] {{}} +// fix@qf5 {{Remove ."only()".}} +// edit@qf5 [[sc=4;ec=9]] {{}} it("works fine"); diff --git a/packages/jsts/src/rules/S6426/cb.test.ts b/packages/jsts/src/rules/S6426/cb.test.ts index 28172891d42..026130bda89 100644 --- a/packages/jsts/src/rules/S6426/cb.test.ts +++ b/packages/jsts/src/rules/S6426/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6426', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6439/cb.fixture.tsx b/packages/jsts/src/rules/S6439/cb.fixture.tsx index c2681c2920d..84925c66580 100644 --- a/packages/jsts/src/rules/S6439/cb.fixture.tsx +++ b/packages/jsts/src/rules/S6439/cb.fixture.tsx @@ -32,8 +32,10 @@ function non_compliant() { const Component1 = (count: number, collection) => { return (
- {count && } {/* Noncompliant {{Convert the conditional to a boolean to avoid leaked value}} */} + {count && } {/* Noncompliant [[qf3]] {{Convert the conditional to a boolean to avoid leaked value}} */} {/* ^^^^^ */} + {/* fix@qf3 {{Convert the conditional to a boolean}} */} + {/* edit@qf3 [[sc=9;ec=14]] {{!!(count)}} */}
) } @@ -42,7 +44,9 @@ function non_compliant() { const count = 0; return (
- {count && } {/* Noncompliant */} + {count && } {/* Noncompliant [[qf5]] {{Convert the conditional to a boolean to avoid leaked value}} */} + {/* fix@qf5 {{Convert the conditional to a boolean}} */} + {/* edit@qf5 [[sc=9;ec=14]] {{!!(count)}} */}
) } @@ -50,7 +54,9 @@ function non_compliant() { const Component3 = (collection: Array) => { return (
- {collection.length && } {/* Noncompliant */} + {collection.length && } {/* Noncompliant [[qf7]] {{Convert the conditional to a boolean to avoid leaked value}} */} + {/* fix@qf7 {{Convert the conditional to a boolean}} */} + {/* edit@qf7 [[sc=9;ec=26]] {{!!(collection.length)}} */}
) } @@ -58,16 +64,21 @@ function non_compliant() { const Component4 = (test: number, count: number, collection) => { return (
- {(test || (count)) && } {/* Noncompliant 2 */} + {(test || (count)) && } {/* Noncompliant [[qf9,qf10]] {{Convert the conditional to a boolean to avoid leaked value}} {{Convert the conditional to a boolean to avoid leaked value}} */} + {/* fix@qf9 {{Convert the conditional to a boolean}} */} + {/* edit@qf9 [[sc=10;ec=14]] {{!!(test)}} */} + {/* fix@qf10 {{Convert the conditional to a boolean}} */} + {/* edit@qf10 {{ {(test || !!(count)) && }}} */}
) } const Component5 = (test: number, count: number, collection) => { return (
- {(test || (count)) && } {/* Noncompliant 2 [[qf1,qf2]]*/} + {(test || (count)) && } {/* Noncompliant [[qf1,qf2]] {{Convert the conditional to a boolean to avoid leaked value}} {{Convert the conditional to a boolean to avoid leaked value}}*/} {/* fix@qf1 {{Convert the conditional to a boolean}} */} {/* edit@qf1 [[sc=10;ec=14]] {{!!(test)}} */} + {/* fix@qf2 {{Convert the conditional to a boolean}} */} {/* edit@qf2 {{ {(test || !!(count)) && }}} */}
) diff --git a/packages/jsts/src/rules/S6439/cb.test.ts b/packages/jsts/src/rules/S6439/cb.test.ts index 86d58864798..0ed8c504178 100644 --- a/packages/jsts/src/rules/S6439/cb.test.ts +++ b/packages/jsts/src/rules/S6439/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6439', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6439/unit.test.ts b/packages/jsts/src/rules/S6439/unit.test.ts index 6ce911fc5ae..56a7d8c0c9e 100644 --- a/packages/jsts/src/rules/S6439/unit.test.ts +++ b/packages/jsts/src/rules/S6439/unit.test.ts @@ -14,19 +14,16 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; -import { TypeScriptRuleTester } from '../../../tests/tools/index.js'; +import { DefaultParserRuleTester, RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTesterTs = new TypeScriptRuleTester(); -const ruleTesterJs = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { jsx: true } }, -}); - -ruleTesterTs.run('', rule, { - valid: [ - { - code: ` +describe('S6439', () => { + it('S6439', () => { + new RuleTester().run('', rule, { + valid: [ + { + code: ` const Component = (count, collection) => { count = 1; return ( @@ -36,9 +33,9 @@ ruleTesterTs.run('', rule, { ) } `, - }, - { - code: ` + }, + { + code: ` const Component = (count: boolean, collection) => { return (
@@ -47,9 +44,9 @@ ruleTesterTs.run('', rule, { ) } `, - }, - { - code: ` + }, + { + code: ` const Component = (collection) => { let test = ''; return ( @@ -59,11 +56,11 @@ ruleTesterTs.run('', rule, { ) } `, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` const Component = (count: number, collection) => { return (
@@ -72,16 +69,17 @@ ruleTesterTs.run('', rule, { ) } `, - errors: [ - { - message: 'Convert the conditional to a boolean to avoid leaked value', - line: 5, - column: 16, - endLine: 5, - endColumn: 21, - suggestions: [ + errors: [ { - output: ` + message: 'Convert the conditional to a boolean to avoid leaked value', + line: 5, + column: 16, + endLine: 5, + endColumn: 21, + suggestions: [ + { + desc: 'Convert the conditional to a boolean', + output: ` const Component = (count: number, collection) => { return (
@@ -90,13 +88,13 @@ ruleTesterTs.run('', rule, { ) } `, + }, + ], }, ], }, - ], - }, - { - code: ` + { + code: ` const Component = (collection) => { const count = 0; return ( @@ -106,15 +104,17 @@ ruleTesterTs.run('', rule, { ) } `, - errors: [ - { - line: 6, - column: 16, - endLine: 6, - endColumn: 21, - suggestions: [ + errors: [ { - output: ` + message: 'Convert the conditional to a boolean to avoid leaked value', + line: 6, + column: 16, + endLine: 6, + endColumn: 21, + suggestions: [ + { + desc: 'Convert the conditional to a boolean', + output: ` const Component = (collection) => { const count = 0; return ( @@ -124,13 +124,13 @@ ruleTesterTs.run('', rule, { ) } `, + }, + ], }, ], }, - ], - }, - { - code: ` + { + code: ` const Component = (collection: Array) => { return (
@@ -139,15 +139,17 @@ ruleTesterTs.run('', rule, { ) } `, - errors: [ - { - line: 5, - column: 16, - endLine: 5, - endColumn: 33, - suggestions: [ + errors: [ { - output: ` + message: 'Convert the conditional to a boolean to avoid leaked value', + line: 5, + column: 16, + endLine: 5, + endColumn: 33, + suggestions: [ + { + desc: 'Convert the conditional to a boolean', + output: ` const Component = (collection: Array) => { return (
@@ -156,13 +158,13 @@ ruleTesterTs.run('', rule, { ) } `, + }, + ], }, ], }, - ], - }, - { - code: ` + { + code: ` const Component = (test: number, count: number, collection) => { return (
@@ -171,15 +173,17 @@ ruleTesterTs.run('', rule, { ) } `, - errors: [ - { - line: 5, - column: 17, - endLine: 5, - endColumn: 21, - suggestions: [ + errors: [ { - output: ` + message: 'Convert the conditional to a boolean to avoid leaked value', + line: 5, + column: 17, + endLine: 5, + endColumn: 21, + suggestions: [ + { + desc: 'Convert the conditional to a boolean', + output: ` const Component = (test: number, count: number, collection) => { return (
@@ -188,17 +192,19 @@ ruleTesterTs.run('', rule, { ) } `, + }, + ], }, - ], - }, - { - line: 5, - column: 26, - endLine: 5, - endColumn: 31, - suggestions: [ { - output: ` + message: 'Convert the conditional to a boolean to avoid leaked value', + line: 5, + column: 26, + endLine: 5, + endColumn: 31, + suggestions: [ + { + desc: 'Convert the conditional to a boolean', + output: ` const Component = (test: number, count: number, collection) => { return (
@@ -207,13 +213,13 @@ ruleTesterTs.run('', rule, { ) } `, + }, + ], }, ], }, - ], - }, - { - code: ` + { + code: ` import react from 'react-native'; const Component = (collection) => { let test = ''; @@ -224,10 +230,10 @@ ruleTesterTs.run('', rule, { ) } `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const react = require('react-native'); const Component = (collection) => { let test = ''; @@ -238,15 +244,15 @@ ruleTesterTs.run('', rule, { ) } `, - errors: 1, - }, - ], -}); + errors: 1, + }, + ], + }); -ruleTesterJs.run('', rule, { - valid: [ - { - code: ` + new DefaultParserRuleTester().run('', rule, { + valid: [ + { + code: ` const Component = (collection) => { const count = 0; return ( @@ -256,7 +262,9 @@ ruleTesterJs.run('', rule, { ) } `, - }, - ], - invalid: [], + }, + ], + invalid: [], + }); + }); }); diff --git a/packages/jsts/src/rules/S6440/cb.test.ts b/packages/jsts/src/rules/S6440/cb.test.ts index 49cfa3b8571..e86ff73d878 100644 --- a/packages/jsts/src/rules/S6440/cb.test.ts +++ b/packages/jsts/src/rules/S6440/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6440', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6441/cb.test.ts b/packages/jsts/src/rules/S6441/cb.test.ts index 4f1bf9de21f..8ceb52ac183 100644 --- a/packages/jsts/src/rules/S6441/cb.test.ts +++ b/packages/jsts/src/rules/S6441/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6441', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6442/cb.fixture.js b/packages/jsts/src/rules/S6442/cb.fixture.js index 88e8769cf6b..f08e44be8fd 100644 --- a/packages/jsts/src/rules/S6442/cb.fixture.js +++ b/packages/jsts/src/rules/S6442/cb.fixture.js @@ -26,7 +26,7 @@ function ShowLanguageInvalid() { function ShowLanguagePrefixedInvalid() { const [language, setLanguage] = React.useState(navigator.language); - setLanguage(navigator.language); // Noncompliant + setLanguage(navigator.language); // Noncompliant {{Remove this state setter call, perhaps move it to an event handler or JSX attribute}} // ^^^^^^^^^^^ return ( @@ -42,7 +42,7 @@ function ShowLanguagePrefixedInvalid() { const ShowLanguageInvalidArrow = () => { const [language, setLanguage] = useState("fr-FR"); - setLanguage(navigator.language); // Noncompliant + setLanguage(navigator.language); // Noncompliant {{Remove this state setter call, perhaps move it to an event handler or JSX attribute}} //^^^^^^^^^^^ return ( @@ -58,7 +58,7 @@ const ShowLanguageInvalidArrow = () => { const ShowLanguageInvalidExpression = function() { const [language, setLanguage] = useState("fr-FR"); - setLanguage(navigator.language); // Noncompliant + setLanguage(navigator.language); // Noncompliant {{Remove this state setter call, perhaps move it to an event handler or JSX attribute}} //^^^^^^^^^^^ return ( @@ -74,7 +74,7 @@ const ShowLanguageInvalidExpression = function() { exports.MemberInvalid = () => { const [language, setLanguage] = useState("fr-FR"); - setLanguage(navigator.language); // Noncompliant + setLanguage(navigator.language); // Noncompliant {{Remove this state setter call, perhaps move it to an event handler or JSX attribute}} // ^^^^^^^^^^^ return ( @@ -95,9 +95,9 @@ function MultipleHookInvalid() { MultipleHookInvalid.c = c; } - setA("A"); // Noncompliant + setA("A"); // Noncompliant {{Remove this state setter call, perhaps move it to an event handler or JSX attribute}} //^^^^ - setB("B"); // Noncompliant + setB("B"); // Noncompliant {{Remove this state setter call, perhaps move it to an event handler or JSX attribute}} //^^^^ setC("C"); diff --git a/packages/jsts/src/rules/S6442/cb.test.ts b/packages/jsts/src/rules/S6442/cb.test.ts index c5c7d0c6efe..d4c56084262 100644 --- a/packages/jsts/src/rules/S6442/cb.test.ts +++ b/packages/jsts/src/rules/S6442/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6442', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6443/cb.test.ts b/packages/jsts/src/rules/S6443/cb.test.ts index 5f58a789db7..22ef4755233 100644 --- a/packages/jsts/src/rules/S6443/cb.test.ts +++ b/packages/jsts/src/rules/S6443/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6443', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6477/non-react-project/unit.test.ts b/packages/jsts/src/rules/S6477/non-react-project/unit.test.ts index fef98c6d261..16a188c623f 100644 --- a/packages/jsts/src/rules/S6477/non-react-project/unit.test.ts +++ b/packages/jsts/src/rules/S6477/non-react-project/unit.test.ts @@ -14,20 +14,20 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../../tests/tools/testers/rule-tester.js'; import { rule } from '../index.js'; import { join } from 'path'; +import { NoTypeCheckingRuleTester } from '../../../../tests/tools/testers/rule-tester.js'; +import { describe } from 'node:test'; -const dirname = join(import.meta.dirname, 'fixtures'); -process.chdir(dirname); // change current working dir to avoid the package.json lookup to up in the tree +describe('S6477', () => { + const dirname = join(import.meta.dirname, 'fixtures'); + process.chdir(dirname); // change current working dir to avoid the package.json lookup to up in the tree -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { jsx: true } }, -}); -ruleTester.run('S6477 turns into a noop on non-React projects', rule, { - valid: [ - { - code: ` + const ruleTester = new NoTypeCheckingRuleTester(); + ruleTester.run('S6477 turns into a noop on non-React projects', rule, { + valid: [ + { + code: ` function Blog(props) { return (
    @@ -40,8 +40,9 @@ ruleTester.run('S6477 turns into a noop on non-React projects', rule, { ); } `, - filename: join(dirname, 'file.jsx'), - }, - ], - invalid: [], + filename: join(dirname, 'file.jsx'), + }, + ], + invalid: [], + }); }); diff --git a/packages/jsts/src/rules/S6477/react-project/cb.test.ts b/packages/jsts/src/rules/S6477/react-project/cb.test.ts index c096b2a1f6a..acde245c0fe 100644 --- a/packages/jsts/src/rules/S6477/react-project/cb.test.ts +++ b/packages/jsts/src/rules/S6477/react-project/cb.test.ts @@ -14,14 +14,11 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../../tests/tools/index.js'; +import { check } from '../../../../tests/tools/testers/comment-based/index.js'; import { rule } from '../index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6477', () => { process.chdir(import.meta.dirname); // change current working dir to avoid the package.json lookup to up in the tree - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6477/react-project/fixtures/cb.fixture.tsx b/packages/jsts/src/rules/S6477/react-project/fixtures/cb.fixture.tsx index 76961817719..bc1f4d9a744 100644 --- a/packages/jsts/src/rules/S6477/react-project/fixtures/cb.fixture.tsx +++ b/packages/jsts/src/rules/S6477/react-project/fixtures/cb.fixture.tsx @@ -5,7 +5,7 @@ class App extends React.Component { [ , , // spread operator are an exception - , // Noncompliant + , // Noncompliant {{Missing "key" prop for element in array}} ]; } } diff --git a/packages/jsts/src/rules/S6478/cb.fixture.jsx b/packages/jsts/src/rules/S6478/cb.fixture.jsx index 3c8a1c10efe..4ab9a562e8c 100644 --- a/packages/jsts/src/rules/S6478/cb.fixture.jsx +++ b/packages/jsts/src/rules/S6478/cb.fixture.jsx @@ -11,7 +11,7 @@ function Component1() { } function Component2() { - class NestedComponent2 extends React.Component { // Noncompliant + class NestedComponent2 extends React.Component { // Noncompliant {{Move this component definition out of the parent component and pass data as props.}} // ^^^^^^^^^^^^^^^^ render() { return
    ; diff --git a/packages/jsts/src/rules/S6478/cb.test.ts b/packages/jsts/src/rules/S6478/cb.test.ts index 923edafe26f..d3695ba629f 100644 --- a/packages/jsts/src/rules/S6478/cb.test.ts +++ b/packages/jsts/src/rules/S6478/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6478', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6479/unit.test.ts b/packages/jsts/src/rules/S6479/unit.test.ts index 20058429a0d..486acc5d4db 100644 --- a/packages/jsts/src/rules/S6479/unit.test.ts +++ b/packages/jsts/src/rules/S6479/unit.test.ts @@ -14,33 +14,36 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { JavaScriptRuleTester } from '../../../tests/tools/index.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './rule.js'; +import { describe, it } from 'node:test'; -const ruleTester = new JavaScriptRuleTester(); +describe('S6479', () => { + it('S6479', () => { + const ruleTester = new RuleTester(); -ruleTester.run('Rule S6479 - no-array-index-key', rule, { - valid: [ - { - code: ` + ruleTester.run('Rule S6479 - no-array-index-key', rule, { + valid: [ + { + code: ` export const MyComponent = ({items}) => { return <>{items.map((item, index) => { return
    ; })}; } `, - }, - { - code: ` + }, + { + code: ` export const MyComponent = ({items}) => { return <>{items.map((item, index) => { return
    ; })}; } `, - }, - { - code: ` + }, + { + code: ` export const MyComponent = ({items}) => { const renderItems = () => { let i = 0; @@ -53,9 +56,9 @@ export const MyComponent = ({items}) => { return <>{renderItems()}; } `, - }, - { - code: ` + }, + { + code: ` export const MyComponent = ({items}) => { const computeKey = (item, index) => { return item.id + '' + index; @@ -66,9 +69,9 @@ export const MyComponent = ({items}) => { })}; } `, - }, - { - code: ` + }, + { + code: ` export const MyComponent = ({items}) => { const computeKey = (index) => { return index; @@ -79,28 +82,30 @@ export const MyComponent = ({items}) => { })}; } // this test should trigger the rule but it seems ESLint is missing it `, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` export const MyComponent = ({items}) => { return <>{items.map((item, index) => { return
    {item.id}
    ; })}; } `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` export const MyComponent = ({items}) => { return <>{items.map((item, index) => { return
    {item.id}
    ; })}; } `, - errors: 1, - }, - ], + errors: 1, + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6481/cb.test.ts b/packages/jsts/src/rules/S6481/cb.test.ts index b7ee13e0197..219f2479621 100644 --- a/packages/jsts/src/rules/S6481/cb.test.ts +++ b/packages/jsts/src/rules/S6481/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6481', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6486/cb.fixture.tsx b/packages/jsts/src/rules/S6486/cb.fixture.tsx index b01250addec..e6c657e5898 100644 --- a/packages/jsts/src/rules/S6486/cb.fixture.tsx +++ b/packages/jsts/src/rules/S6486/cb.fixture.tsx @@ -5,11 +5,11 @@ class App extends React.Component { [ , , // Noncompliant {{Do not use generated values for keys of React list components.}} - , // Noncompliant - , // Noncompliant - , // Noncompliant - , // Noncompliant - , // Noncompliant + , // Noncompliant {{Do not use generated values for keys of React list components.}} + , // Noncompliant {{Do not use generated values for keys of React list components.}} + , // Noncompliant {{Do not use generated values for keys of React list components.}} + , // Noncompliant {{Do not use generated values for keys of React list components.}} + , // Noncompliant {{Do not use generated values for keys of React list components.}} ]; } } diff --git a/packages/jsts/src/rules/S6486/cb.test.ts b/packages/jsts/src/rules/S6486/cb.test.ts index 32aefb89898..0510d0e3719 100644 --- a/packages/jsts/src/rules/S6486/cb.test.ts +++ b/packages/jsts/src/rules/S6486/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6486', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6535/cb.test.ts b/packages/jsts/src/rules/S6535/cb.test.ts index 4f528f111d3..1a1abeb2efe 100644 --- a/packages/jsts/src/rules/S6535/cb.test.ts +++ b/packages/jsts/src/rules/S6535/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6535', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6544/cb.test.ts b/packages/jsts/src/rules/S6544/cb.test.ts index a29b8904ee4..26e0fadbb6d 100644 --- a/packages/jsts/src/rules/S6544/cb.test.ts +++ b/packages/jsts/src/rules/S6544/cb.test.ts @@ -14,18 +14,12 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; - -const sonarId = path.basename(import.meta.dirname); +import path from 'path'; describe('Rule S6544', () => { - check(sonarId, rule, path.join(import.meta.dirname, 'fixtures', 'checksVoidReturn', 'true')); - check( - sonarId, - rule, - path.join(import.meta.dirname, 'fixtures', 'checksVoidReturn', 'arguments', 'false'), - ); + check(rule, path.join(import.meta.dirname, 'fixtures', 'checksVoidReturn', 'true')); + check(rule, path.join(import.meta.dirname, 'fixtures', 'checksVoidReturn', 'arguments', 'false')); }); diff --git a/packages/jsts/src/rules/S6544/fixtures/checksVoidReturn/true/cb.fixture.ts b/packages/jsts/src/rules/S6544/fixtures/checksVoidReturn/true/cb.fixture.ts index e9df87ff59b..6eadc864a46 100644 --- a/packages/jsts/src/rules/S6544/fixtures/checksVoidReturn/true/cb.fixture.ts +++ b/packages/jsts/src/rules/S6544/fixtures/checksVoidReturn/true/cb.fixture.ts @@ -1,4 +1,4 @@ -[1, 2].forEach(async num => { // Noncompliant +[1, 2].forEach(async num => { // Noncompliant {{Promise returned in function argument where a void return was expected.}} await Promise.resolve(num); }); @@ -22,6 +22,6 @@ if (Promise.resolve(42)) { // Noncompliant {{Expected non-Promise value in a boo import { EventEmitter } from 'events'; const eventEmitter = new EventEmitter(); -eventEmitter.on('some-event', async () => { // Noncompliant +eventEmitter.on('some-event', async () => { // Noncompliant {{Promise returned in function argument where a void return was expected.}} await Promise.resolve(); }); diff --git a/packages/jsts/src/rules/S6551/cb.fixture.ts b/packages/jsts/src/rules/S6551/cb.fixture.ts index ed3adb1415b..24d7076f74d 100644 --- a/packages/jsts/src/rules/S6551/cb.fixture.ts +++ b/packages/jsts/src/rules/S6551/cb.fixture.ts @@ -10,5 +10,5 @@ function toStrings(array: T[]): string[] { function maybeString() { let foo: string | {}; - foo.toString() // Noncompliant + foo.toString() // Noncompliant {{'foo' may use Object's default stringification format ('[object Object]') when stringified.}} } diff --git a/packages/jsts/src/rules/S6551/cb.test.ts b/packages/jsts/src/rules/S6551/cb.test.ts index 22c2afd73f3..ef4f2797c92 100644 --- a/packages/jsts/src/rules/S6551/cb.test.ts +++ b/packages/jsts/src/rules/S6551/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6551', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6557/unit.test.ts b/packages/jsts/src/rules/S6557/unit.test.ts index ff71d9cd184..8b3ad1ce2a6 100644 --- a/packages/jsts/src/rules/S6557/unit.test.ts +++ b/packages/jsts/src/rules/S6557/unit.test.ts @@ -15,44 +15,49 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import { JavaScriptRuleTester } from '../../../tests/tools/index.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTester = new JavaScriptRuleTester(); +describe('S6557', () => { + it('S6557', () => { + const ruleTester = new RuleTester(); -ruleTester.run(`Decorated rule should provide suggestion with proper message`, rule, { - valid: [ - { - code: `'abc'.starsWith('a');`, - }, - ], - invalid: [ - { - code: `'abc'[0] === 'a';`, - errors: [ + ruleTester.run(`Decorated rule should provide suggestion with proper message`, rule, { + valid: [ { - messageId: 'preferStartsWith', - suggestions: [ + code: `'abc'.starsWith('a');`, + }, + ], + invalid: [ + { + code: `'abc'[0] === 'a';`, + errors: [ { - desc: "Use 'String#startsWith' method instead.", - output: `'abc'.startsWith('a');`, + messageId: 'preferStartsWith', + suggestions: [ + { + desc: "Use 'String#startsWith' method instead.", + output: `'abc'.startsWith('a');`, + }, + ], }, ], }, - ], - }, - { - code: `'abc'['abc'.length - 1] === 'c';`, - errors: [ { - messageId: 'preferEndsWith', - suggestions: [ + code: `'abc'['abc'.length - 1] === 'c';`, + errors: [ { - desc: "Use the 'String#endsWith' method instead.", - output: `'abc'.endsWith('c');`, + messageId: 'preferEndsWith', + suggestions: [ + { + desc: "Use the 'String#endsWith' method instead.", + output: `'abc'.endsWith('c');`, + }, + ], }, ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6564/cb.test.ts b/packages/jsts/src/rules/S6564/cb.test.ts index 6e838c422c6..8124c6fcca7 100644 --- a/packages/jsts/src/rules/S6564/cb.test.ts +++ b/packages/jsts/src/rules/S6564/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6564', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6571/cb.fixture.ts b/packages/jsts/src/rules/S6571/cb.fixture.ts index 2b1ba486ad5..ad9348a1990 100644 --- a/packages/jsts/src/rules/S6571/cb.fixture.ts +++ b/packages/jsts/src/rules/S6571/cb.fixture.ts @@ -1,30 +1,30 @@ const torrent: string | any = client.get(infoHash); // Noncompliant {{'any' overrides all other types in this union type.}} // ^^^ -function foo(arg: string | SomeUnknownType) { // Compliant +function foo(arg: string | SomeUnknownType) { // Noncompliant {{'SomeUnknownType' is an 'error' type that acts as 'any' and overrides all other types in this union type.}} } -function bar(arg: number & SomeUnknownType) { // Compliant +function bar(arg: number & SomeUnknownType) { // Noncompliant {{'SomeUnknownType' is an 'error' type that acts as 'any' and overrides all other types in this intersection type.}} } type FALSE = false; type ZERO = 0; type A = number; -type B = A | any; // Noncompliant -type C = number | never; // Noncompliant +type B = A | any; // Noncompliant {{'any' overrides all other types in this union type.}} +type C = number | never; // Noncompliant {{'never' is overridden by other types in this union type.}} // ^^^^^ -type D = false & boolean; // Noncompliant -type E = FALSE & boolean; // Noncompliant -type F = number & any; // Noncompliant -type G = number & never; // Noncompliant -type H = 0 & number; // Noncompliant -type I = ZERO & number; // Noncompliant -type J = '' & string; // Noncompliant -type K = 0n & bigint; // Noncompliant +type D = false & boolean; // Noncompliant {{boolean is overridden by the false in this intersection type.}} +type E = FALSE & boolean; // Noncompliant {{boolean is overridden by the false in this intersection type.}} +type F = number & any; // Noncompliant {{'any' overrides all other types in this intersection type.}} +type G = number & never; // Noncompliant {{'never' overrides all other types in this intersection type.}} +type H = 0 & number; // Noncompliant {{number is overridden by the 0 in this intersection type.}} +type I = ZERO & number; // Noncompliant {{number is overridden by the 0 in this intersection type.}} +type J = '' & string; // Noncompliant {{string is overridden by the "" in this intersection type.}} +type K = 0n & bigint; // Noncompliant {{bigint is overridden by the 0n in this intersection type.}} -const x: unknown | string = '42'; // Noncompliant +const x: unknown | string = '42'; // Noncompliant {{'unknown' overrides all other types in this union type.}} type hidden = unknown; const y: hidden | string = '42'; // Compliant - FP diff --git a/packages/jsts/src/rules/S6571/cb.test.ts b/packages/jsts/src/rules/S6571/cb.test.ts index e40d71cb42a..ac3706d5aaa 100644 --- a/packages/jsts/src/rules/S6571/cb.test.ts +++ b/packages/jsts/src/rules/S6571/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6571', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6572/cb.fixture.ts b/packages/jsts/src/rules/S6572/cb.fixture.ts index 90febb95689..fc5704dcc0b 100644 --- a/packages/jsts/src/rules/S6572/cb.fixture.ts +++ b/packages/jsts/src/rules/S6572/cb.fixture.ts @@ -4,8 +4,14 @@ enum Direction { } enum Color { - Red, // Noncompliant {{The value of the member 'Red' should be explicitly defined.}} + Red, // Noncompliant [[qf1,qf2=0,qf3=0]] {{The value of the member 'Red' should be explicitly defined.}} // ^^^ + // fix@qf1 {{Can be fixed to Red = 0}} + // edit@qf1 {{ Red = 0,}} + // fix@qf2 {{Can be fixed to Red = 1}} + // edit@qf2 {{ Red = 1,}} + // fix@qf3 {{Can be fixed to Red = 'Red'}} + // edit@qf3 {{ Red = 'Red',}} Green = 0b000000001111111100000000, Blue = 0b000000000000000011111111 } @@ -17,7 +23,19 @@ enum Truthiness { enum Key { Up = 1, - Down, // Noncompliant - Left, // Noncompliant + Down, // Noncompliant [[qf4,qf5=0,qf6=0]] {{The value of the member 'Down' should be explicitly defined.}} + // fix@qf4 {{Can be fixed to Down = 1}} + // edit@qf4 {{ Down = 1,}} + // fix@qf5 {{Can be fixed to Down = 2}} + // edit@qf5 {{ Down = 2,}} + // fix@qf6 {{Can be fixed to Down = 'Down'}} + // edit@qf6 {{ Down = 'Down',}} + Left, // Noncompliant [[qf7,qf8=0,qf9=0]] {{The value of the member 'Left' should be explicitly defined.}} + // fix@qf7 {{Can be fixed to Left = 2}} + // edit@qf7 {{ Left = 2,}} + // fix@qf8 {{Can be fixed to Left = 3}} + // edit@qf8 {{ Left = 3,}} + // fix@qf9 {{Can be fixed to Left = 'Left'}} + // edit@qf9 {{ Left = 'Left',}} Right = 42 } diff --git a/packages/jsts/src/rules/S6572/cb.test.ts b/packages/jsts/src/rules/S6572/cb.test.ts index ca08755f5f8..89996b04e92 100644 --- a/packages/jsts/src/rules/S6572/cb.test.ts +++ b/packages/jsts/src/rules/S6572/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6572', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6572/rule.ts b/packages/jsts/src/rules/S6572/rule.ts index d810a47aa12..ddc2c3e0da9 100644 --- a/packages/jsts/src/rules/S6572/rule.ts +++ b/packages/jsts/src/rules/S6572/rule.ts @@ -50,20 +50,15 @@ export const rule: Rule.RuleModule = { }, }; -function isEnumWithBody( - enumDecl: TSESTree.TSEnumDeclaration, -): enumDecl is TSESTree.TSEnumDeclaration & { body: { members: TSESTree.TSEnumMember[] } } { - return (enumDecl as any).body; -} - function anyInitialized(enumDecl: TSESTree.TSEnumDeclaration) { - const members = isEnumWithBody(enumDecl) ? enumDecl.body.members : enumDecl.members; + const members = enumDecl.members ?? enumDecl.body.members; return members.some(m => m.initializer !== undefined); } function numericalOrder(enumDecl: TSESTree.TSEnumDeclaration) { - const firstMember = enumDecl.members[0]; - const membersRest = enumDecl.members.slice(1); + const members = enumDecl.members ?? enumDecl.body.members; + const firstMember = members[0]; + const membersRest = members.slice(1); return ( firstMember.initializer?.type === 'Literal' && isNumberLiteral(firstMember.initializer as estree.Node) && diff --git a/packages/jsts/src/rules/S6582/cb.test.ts b/packages/jsts/src/rules/S6582/cb.test.ts index e9c7ebb782a..7fd870f4900 100644 --- a/packages/jsts/src/rules/S6582/cb.test.ts +++ b/packages/jsts/src/rules/S6582/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6582', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6582/unit.test.ts b/packages/jsts/src/rules/S6582/unit.test.ts index 4dabeaef49b..6af8106e012 100644 --- a/packages/jsts/src/rules/S6582/unit.test.ts +++ b/packages/jsts/src/rules/S6582/unit.test.ts @@ -14,15 +14,20 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { DefaultParserRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ parserOptions: { ecmaVersion: 2018 } }); -ruleTester.run('Sanitized prefer-optional-chain should not raise a runtime error', rule, { - valid: [ - { - code: `foo && foo.a;`, - }, - ], - invalid: [], +describe('S6582', () => { + it('S6582', () => { + const ruleTester = new DefaultParserRuleTester(); + ruleTester.run('Sanitized prefer-optional-chain should not raise a runtime error', rule, { + valid: [ + { + code: `foo && foo.a;`, + }, + ], + invalid: [], + }); + }); }); diff --git a/packages/jsts/src/rules/S6594/cb.fixture.js b/packages/jsts/src/rules/S6594/cb.fixture.js index e2e749fe271..9ba70e09338 100644 --- a/packages/jsts/src/rules/S6594/cb.fixture.js +++ b/packages/jsts/src/rules/S6594/cb.fixture.js @@ -1,4 +1,6 @@ -'foo'.match(42); // Noncompliant {{Use the "RegExp.exec()" method instead.}} +'foo'.match(42); // Noncompliant [[qf2]] {{Use the "RegExp.exec()" method instead.}} +// fix@qf2 {{Replace with "RegExp.exec()"}} +// edit@qf2 {{RegExp(42).exec('foo');}} 'foo'.match(/bar/g); foo.match(/foo/); diff --git a/packages/jsts/src/rules/S6594/cb.test.ts b/packages/jsts/src/rules/S6594/cb.test.ts index c7642ea47b9..ae776c3ba71 100644 --- a/packages/jsts/src/rules/S6594/cb.test.ts +++ b/packages/jsts/src/rules/S6594/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6594', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6598/unit.test.ts b/packages/jsts/src/rules/S6598/unit.test.ts index 8b9c4809b2c..1a933e725fb 100644 --- a/packages/jsts/src/rules/S6598/unit.test.ts +++ b/packages/jsts/src/rules/S6598/unit.test.ts @@ -15,25 +15,31 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import { TypeScriptRuleTester } from '../../../tests/tools/index.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTester = new TypeScriptRuleTester(); +describe('S6598', () => { + it('S6598', () => { + const ruleTester = new RuleTester(); -ruleTester.run(`Decorated rule should reword the issue message`, rule, { - valid: [ - { - code: `type Foo = () => number;`, - }, - ], - invalid: [ - { - code: `interface Foo { (): number; }`, - errors: [ + ruleTester.run(`Decorated rule should reword the issue message`, rule, { + valid: [ { - message: 'Interface has only a call signature, you should use a function type instead.', + code: `type Foo = () => number;`, }, ], - output: 'type Foo = () => number;', - }, - ], + invalid: [ + { + code: `interface Foo { (): number; }`, + errors: [ + { + message: + 'Interface has only a call signature, you should use a function type instead.', + }, + ], + output: 'type Foo = () => number;', + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6606/unit.test.ts b/packages/jsts/src/rules/S6606/unit.test.ts index 9309f3c89cd..c6018ea9675 100644 --- a/packages/jsts/src/rules/S6606/unit.test.ts +++ b/packages/jsts/src/rules/S6606/unit.test.ts @@ -15,90 +15,94 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './rule.js'; -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; + import path from 'path'; -import { fileURLToPath } from 'node:url'; +import parser from '@typescript-eslint/parser'; -const ruleTester = new NodeRuleTester({ - parser: fileURLToPath(import.meta.resolve('@typescript-eslint/parser')), - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - project: `./tsconfig.json`, - tsconfigRootDir: path.join(import.meta.dirname, 'fixtures'), - }, -}); +describe('S6606', () => { + it('S6606', () => { + const ruleTester = new RuleTester({ + parser, + parserOptions: { + project: `./tsconfig.json`, + tsconfigRootDir: path.join(import.meta.dirname, 'fixtures'), + }, + }); -ruleTester.run('S6606', rule, { - valid: [ - { - code: ` + ruleTester.run('S6606', rule, { + valid: [ + { + code: ` function foo(value: string) { return value || 'default'; } `, - filename: path.join(import.meta.dirname, 'fixtures/index.ts'), - }, - { - code: ` + filename: path.join(import.meta.dirname, 'fixtures/index.ts'), + }, + { + code: ` function foo(value: string | number) { return value || 'default'; } `, - filename: path.join(import.meta.dirname, 'fixtures/index.ts'), - }, - { - code: ` + filename: path.join(import.meta.dirname, 'fixtures/index.ts'), + }, + { + code: ` function foo(value: boolean | null) { return value || 'default'; } `, - filename: path.join(import.meta.dirname, 'fixtures/index.ts'), - }, - { - code: ` + filename: path.join(import.meta.dirname, 'fixtures/index.ts'), + }, + { + code: ` function foo(value: { baz: number } | null) { return value || 'default'; } `, - filename: path.join(import.meta.dirname, 'fixtures/index.ts'), - }, - { - code: ` + filename: path.join(import.meta.dirname, 'fixtures/index.ts'), + }, + { + code: ` function foo(value: Date | null) { return value || 'default'; } `, - filename: path.join(import.meta.dirname, 'fixtures/index.ts'), - }, - ], - invalid: [ - { - code: ` + filename: path.join(import.meta.dirname, 'fixtures/index.ts'), + }, + ], + invalid: [ + { + code: ` function foo(value: string | null) { return value || 'default'; } `, - filename: path.join(import.meta.dirname, 'fixtures/index.ts'), - errors: 1, - }, - { - code: ` + filename: path.join(import.meta.dirname, 'fixtures/index.ts'), + errors: 1, + }, + { + code: ` function foo(value: number | null) { return value || 'default'; } `, - filename: path.join(import.meta.dirname, 'fixtures/index.ts'), - errors: 1, - }, - { - code: ` + filename: path.join(import.meta.dirname, 'fixtures/index.ts'), + errors: 1, + }, + { + code: ` function foo(value: bigint | null) { return value || 'default'; } `, - filename: path.join(import.meta.dirname, 'fixtures/index.ts'), - errors: 1, - }, - ], + filename: path.join(import.meta.dirname, 'fixtures/index.ts'), + errors: 1, + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6627/cb.fixture.ts b/packages/jsts/src/rules/S6627/cb.fixture.ts index ef93f69cf8c..5f1b0b8ce73 100644 --- a/packages/jsts/src/rules/S6627/cb.fixture.ts +++ b/packages/jsts/src/rules/S6627/cb.fixture.ts @@ -3,7 +3,7 @@ import foo from 'bar'; import foo from '../node_modules/bar'; // Noncompliant {{Do not use internal APIs of your dependencies}} //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -import { foo } from '../node_modules/bar'; // Noncompliant +import { foo } from '../node_modules/bar'; // Noncompliant {{Do not use internal APIs of your dependencies}} - require('../node_modules/bar'); // Noncompliant + require('../node_modules/bar'); // Noncompliant {{Do not use internal APIs of your dependencies}} //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/packages/jsts/src/rules/S6627/cb.test.ts b/packages/jsts/src/rules/S6627/cb.test.ts index c2c0023a420..f9770cba35e 100644 --- a/packages/jsts/src/rules/S6627/cb.test.ts +++ b/packages/jsts/src/rules/S6627/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6627', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6643/cb.fixture.js b/packages/jsts/src/rules/S6643/cb.fixture.js index f9ec268c603..a50ed108c35 100644 --- a/packages/jsts/src/rules/S6643/cb.fixture.js +++ b/packages/jsts/src/rules/S6643/cb.fixture.js @@ -1,9 +1,9 @@ function assign() { - Object.prototype.p = 0; // Noncompliant + Object.prototype.p = 0; // Noncompliant {{Object prototype is read only, properties should not be added.}} // ^^^^^^^^^^^^^^^^^^ } function call() { - Object.defineProperty(Array.prototype, 'p', {value: 0}); // Noncompliant + Object.defineProperty(Array.prototype, 'p', {value: 0}); // Noncompliant {{Array prototype is read only, properties should not be added.}} // ^^^^^^^^^^^^^^^ } diff --git a/packages/jsts/src/rules/S6643/cb.test.ts b/packages/jsts/src/rules/S6643/cb.test.ts index bfd30e601f1..a712fce9a55 100644 --- a/packages/jsts/src/rules/S6643/cb.test.ts +++ b/packages/jsts/src/rules/S6643/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6643', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6647/cb.fixture.js b/packages/jsts/src/rules/S6647/cb.fixture.js index 4a6b8ace6af..6e2e3a81c5d 100644 --- a/packages/jsts/src/rules/S6647/cb.fixture.js +++ b/packages/jsts/src/rules/S6647/cb.fixture.js @@ -7,10 +7,16 @@ class Foo { class Invalid1 { constructor(){} // Noncompliant [[qf]] {{Useless constructor.}} } +// fix@qf {{Remove constructor}} // edit@qf [[sc=2;ec=17]] {{}} class Invalid2 extends Bar { - constructor(){ // Noncompliant +// Noncompliant@+5 [[qf1]] {{Useless constructor.}} +// fix@qf1 {{Remove constructor}} +// edit@qf1 [[sc=2;ec=17]] {{}} +// del@qf1@+1 +// del@qf1@+1 + constructor(){ super(); } } diff --git a/packages/jsts/src/rules/S6647/cb.fixture.ts b/packages/jsts/src/rules/S6647/cb.fixture.ts index aa1808697a4..40efbba2514 100644 --- a/packages/jsts/src/rules/S6647/cb.fixture.ts +++ b/packages/jsts/src/rules/S6647/cb.fixture.ts @@ -7,8 +7,13 @@ class Foo { } class Bar { - constructor() { // Noncompliant +// Noncompliant@+1 [[qf2]] {{Useless constructor.}} + constructor() { } + +// fix@qf2 {{Remove constructor}} +// del@qf2+1 +// edit@qf2 [[sc=2;ec=18]] {{}} } class SuperClass { diff --git a/packages/jsts/src/rules/S6647/cb.test.ts b/packages/jsts/src/rules/S6647/cb.test.ts index 3ff0dcf907d..e20799e620f 100644 --- a/packages/jsts/src/rules/S6647/cb.test.ts +++ b/packages/jsts/src/rules/S6647/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6647', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/tests/tools/testers/index.ts b/packages/jsts/src/rules/S6647/problemCode.js similarity index 69% rename from packages/jsts/tests/tools/testers/index.ts rename to packages/jsts/src/rules/S6647/problemCode.js index 951916d82e2..cc8e16dbdd4 100644 --- a/packages/jsts/tests/tools/testers/index.ts +++ b/packages/jsts/src/rules/S6647/problemCode.js @@ -14,7 +14,18 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -export * from './babel/index.js'; -export * from './comment-based/index.js'; -export * from './javascript/index.js'; -export * from './typescript/index.js'; +class FakeWebChannel extends EventTarget { + /** + * @param {!WebChannel.MessageData} messageData + * @override + */ + constructor(messageData) { + super(); + + /** @private {?boolean} */ + this.open_ = null; + + /** @private @const {!Array} */ + this.messages_ = []; + } +} diff --git a/packages/jsts/src/rules/S6647/unit.test.ts b/packages/jsts/src/rules/S6647/unit.test.ts index 69eaf7889c9..f56d051443a 100644 --- a/packages/jsts/src/rules/S6647/unit.test.ts +++ b/packages/jsts/src/rules/S6647/unit.test.ts @@ -15,48 +15,68 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import { BabelRuleTester } from '../../../tests/tools/index.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; +import { rules } from '../external/typescript-eslint/index.js'; +import parser from '@babel/eslint-parser'; +import { decorate } from './decorator.js'; +import { Linter } from 'eslint'; +import { dirname, join } from 'path'; +import { fileURLToPath } from 'node:url'; +import { readFile } from 'node:fs/promises'; +import { basename } from 'node:path'; +import { expect } from 'expect'; -const babelRuleTester = BabelRuleTester(); - -babelRuleTester.run(`Unnecessary constructors should be removed (babel)`, rule, { - valid: [ - { - code: `class Foo {}`, - }, - { - // This test case is coming from closure library https://github.com/google/closure-library/blob/7818ff7dc0b53555a7fb3c3427e6761e88bde3a2/closure/goog/labs/net/webchannel/testing/fakewebchannel.js - code: ` -class FakeWebChannel extends EventTarget { - - /** - * @param {!WebChannel.MessageData} messageData - * @override - */ - constructor(messageData) { - super(); +const ruleTester = new RuleTester({ + parser, + parserOptions: { + requireConfigFile: false, + }, +}); - /** @private {?boolean} */ - this.open_ = null; +// This test case is coming from closure library https://github.com/google/closure-library/blob/7818ff7dc0b53555a7fb3c3427e6761e88bde3a2/closure/goog/labs/net/webchannel/testing/fakewebchannel.js +const problemCode = ``; - /** @private @const {!Array} */ - this.messages_ = []; - } - -} - `, - }, - ], - invalid: [ - { - code: ` - class Invalid2 extends Bar { - constructor(){ // Noncompliant - super(); - } - } - `, - errors: 1, - }, - ], +describe('S6647', () => { + it('S6647', () => { + ruleTester.run(`Unnecessary constructors should be removed`, rule, { + valid: [ + { + code: problemCode, + }, + ], + invalid: [], + }); + }); + it('should crash with decorated rule', async () => { + // When this test fails to pass, we can remove our implementation and go back to decorated + // 'no-useless-constructor' from 'typescript-eslint' + // https://github.com/SonarSource/SonarJS/pull/4473 + const problemFile = join(dirname(fileURLToPath(import.meta.url)), 'problemCode.js'); + const linter = new Linter(); + let failed = false; + try { + linter.verify( + await readFile(problemFile, 'utf8'), + { + languageOptions: { + parser, + parserOptions: { + requireConfigFile: false, + }, + }, + files: [`**/${basename(problemFile)}`], + plugins: { + sonarjs: { rules: { S6647: decorate(rules['no-useless-constructor']) } }, + }, + rules: { [`sonarjs/S6647`]: 'error' }, + }, + { filename: problemFile, allowInlineConfig: false }, + ); + } catch (e) { + expect(e.message).toContain("Cannot read properties of undefined (reading 'length')"); + failed = true; + } + expect(failed).toBeTruthy(); + }); }); diff --git a/packages/jsts/src/rules/S6660/unit.test.ts b/packages/jsts/src/rules/S6660/unit.test.ts index 6a27a35de7f..97befb0efe9 100644 --- a/packages/jsts/src/rules/S6660/unit.test.ts +++ b/packages/jsts/src/rules/S6660/unit.test.ts @@ -14,24 +14,27 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester(); +describe('S6660', () => { + it('S6660', () => { + const ruleTester = new RuleTester(); -ruleTester.run("'If' statement should not be the only statement in 'else' block", rule, { - valid: [ - { - code: ` + ruleTester.run("'If' statement should not be the only statement in 'else' block", rule, { + valid: [ + { + code: ` if (condition) { doSomething(); } `, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` if (condition1) { // ... } else { @@ -40,25 +43,25 @@ ruleTester.run("'If' statement should not be the only statement in 'else' block" } } `, - output: ` + output: ` if (condition1) { // ... } else if (condition2) { // ... } `, - errors: [ - { - message: "'If' statement should not be the only statement in 'else' block", - line: 5, - endLine: 5, - column: 11, - endColumn: 13, + errors: [ + { + message: "'If' statement should not be the only statement in 'else' block", + line: 5, + endLine: 5, + column: 11, + endColumn: 13, + }, + ], }, - ], - }, - { - code: ` + { + code: ` if (condition3) { // ... } else { @@ -69,7 +72,7 @@ ruleTester.run("'If' statement should not be the only statement in 'else' block" } } `, - output: ` + output: ` if (condition3) { // ... } else if (condition4) { @@ -78,15 +81,17 @@ ruleTester.run("'If' statement should not be the only statement in 'else' block" // ... } `, - errors: [ - { - message: "'If' statement should not be the only statement in 'else' block", - line: 5, - endLine: 5, - column: 11, - endColumn: 13, + errors: [ + { + message: "'If' statement should not be the only statement in 'else' block", + line: 5, + endLine: 5, + column: 11, + endColumn: 13, + }, + ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6661/unit.test.ts b/packages/jsts/src/rules/S6661/unit.test.ts index c0c9946ea40..469166ba6a5 100644 --- a/packages/jsts/src/rules/S6661/unit.test.ts +++ b/packages/jsts/src/rules/S6661/unit.test.ts @@ -14,75 +14,83 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { NoTypeCheckingRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; import path from 'path'; +import { describe, it } from 'node:test'; -process.chdir(import.meta.dirname); // change current working dir to avoid the package.json lookup to up in the tree -const ruleTester = new NodeRuleTester({ parserOptions: { ecmaVersion: 2018 } }); +describe('S6661', () => { + it('S6661', () => { + process.chdir(import.meta.dirname); // change current working dir to avoid the package.json lookup to up in the tree + const ruleTester = new NoTypeCheckingRuleTester(); -ruleTester.run('Object spread syntax should be used instead of "Object.assign"', rule, { - valid: [ - { - code: `Object.assign(foo, bar);`, - }, - ], - invalid: [ - { - code: `const a = Object.assign({}, foo);`, - output: `const a = { ...foo};`, - errors: [ + ruleTester.run('Object spread syntax should be used instead of "Object.assign"', rule, { + valid: [ { - line: 1, - endLine: 1, - column: 11, - endColumn: 24, + code: `Object.assign(foo, bar);`, }, ], - }, - { - code: `const b = Object.assign({}, foo, bar);`, - output: `const b = { ...foo, ...bar};`, - errors: [ + invalid: [ { - line: 1, - endLine: 1, - column: 11, - endColumn: 24, + code: `const a = Object.assign({}, foo);`, + output: `const a = { ...foo};`, + errors: [ + { + messageId: 'useSpreadMessage', + line: 1, + endLine: 1, + column: 11, + endColumn: 24, + }, + ], }, - ], - }, - { - code: ` + { + code: `const b = Object.assign({}, foo, bar);`, + output: `const b = { ...foo, ...bar};`, + errors: [ + { + messageId: 'useSpreadMessage', + line: 1, + endLine: 1, + column: 11, + endColumn: 24, + }, + ], + }, + { + code: ` var assign = Object.assign; const b = assign({}, foo, bar);`, - output: ` + output: ` var assign = Object.assign; const b = { ...foo, ...bar};`, - errors: [ - { - line: 3, - endLine: 3, - column: 11, - endColumn: 17, + errors: [ + { + messageId: 'useSpreadMessage', + line: 3, + endLine: 3, + column: 11, + endColumn: 17, + }, + ], }, ], - }, - ], -}); + }); -const filename = path.join(import.meta.dirname, 'fixtures', 'unsupported-node', 'file.js'); + const filename = path.join(import.meta.dirname, 'fixtures', 'unsupported-node', 'file.js'); -ruleTester.run( - 'When the project does not support the object spread syntax, the rule should be ignored', - rule, - { - valid: [ + ruleTester.run( + 'When the project does not support the object spread syntax, the rule should be ignored', + rule, { - code: `Object.assign({}, bar);`, - filename, + valid: [ + { + code: `Object.assign({}, bar);`, + filename, + }, + ], + invalid: [], }, - ], - invalid: [], - }, -); + ); + }); +}); diff --git a/packages/jsts/src/rules/S6666/unit.test.ts b/packages/jsts/src/rules/S6666/unit.test.ts index d78a965fafb..41f9aa2fe2e 100644 --- a/packages/jsts/src/rules/S6666/unit.test.ts +++ b/packages/jsts/src/rules/S6666/unit.test.ts @@ -14,45 +14,50 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2015 }, -}); +describe('S6666', () => { + it('S6666', () => { + const ruleTester = new RuleTester(); -ruleTester.run(`Spread syntax should be used instead of apply()`, rule, { - valid: [ - { - code: `foo.apply(obj, args);`, - }, - ], - invalid: [ - { - code: `foo.apply(null, args);`, - errors: [ + ruleTester.run(`Spread syntax should be used instead of apply()`, rule, { + valid: [ { - suggestions: [ + code: `foo.apply(obj, args);`, + }, + ], + invalid: [ + { + code: `foo.apply(null, args);`, + errors: [ { - desc: 'Replace apply() with spread syntax', - output: `foo(...args);`, + messageId: 'preferSpread', + suggestions: [ + { + desc: 'Replace apply() with spread syntax', + output: `foo(...args);`, + }, + ], }, ], }, - ], - }, - { - code: `obj.foo.apply(obj, args);`, - errors: [ { - suggestions: [ + code: `obj.foo.apply(obj, args);`, + errors: [ { - desc: 'Replace apply() with spread syntax', - output: `obj.foo(...args);`, + messageId: 'preferSpread', + suggestions: [ + { + desc: 'Replace apply() with spread syntax', + output: `obj.foo(...args);`, + }, + ], }, ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6676/unit.test.ts b/packages/jsts/src/rules/S6676/unit.test.ts index e2ab29b47a1..8eeb253988a 100644 --- a/packages/jsts/src/rules/S6676/unit.test.ts +++ b/packages/jsts/src/rules/S6676/unit.test.ts @@ -14,123 +14,134 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2015 }, -}); +describe('S6676', () => { + it('S6676', () => { + const ruleTester = new RuleTester(); -ruleTester.run(`Calls to .call() and .apply() methods should not be redundant`, rule, { - valid: [ - { - code: `foo.apply(obj, args);`, - }, - ], - invalid: [ - { - code: `foo.call(null);`, - errors: [ + ruleTester.run(`Calls to .call() and .apply() methods should not be redundant`, rule, { + valid: [ + { + code: `foo.apply(obj, args);`, + }, + ], + invalid: [ { - suggestions: [ + code: `foo.call(null);`, + errors: [ { - desc: 'Remove redundant call()', - output: `foo();`, + messageId: 'unnecessaryCall', + suggestions: [ + { + desc: 'Remove redundant call()', + output: `foo();`, + }, + ], }, ], }, - ], - }, - { - code: `foo.call(null, a, b, c);`, - errors: [ { - suggestions: [ + code: `foo.call(null, a, b, c);`, + errors: [ { - desc: 'Remove redundant call()', - output: `foo(a, b, c);`, + messageId: 'unnecessaryCall', + suggestions: [ + { + desc: 'Remove redundant call()', + output: `foo(a, b, c);`, + }, + ], }, ], }, - ], - }, - { - code: `obj.foo.call(obj);`, - errors: [ { - suggestions: [ + code: `obj.foo.call(obj);`, + errors: [ { - desc: 'Remove redundant call()', - output: `obj.foo();`, + messageId: 'unnecessaryCall', + suggestions: [ + { + desc: 'Remove redundant call()', + output: `obj.foo();`, + }, + ], }, ], }, - ], - }, - { - code: `obj.foo.call(obj, x, y, z);`, - errors: [ { - suggestions: [ + code: `obj.foo.call(obj, x, y, z);`, + errors: [ { - desc: 'Remove redundant call()', - output: `obj.foo(x, y, z);`, + messageId: 'unnecessaryCall', + suggestions: [ + { + desc: 'Remove redundant call()', + output: `obj.foo(x, y, z);`, + }, + ], }, ], }, - ], - }, - { - code: `foo.apply(null, []);`, - errors: [ { - suggestions: [ + code: `foo.apply(null, []);`, + errors: [ { - desc: 'Remove redundant apply()', - output: `foo();`, + messageId: 'unnecessaryCall', + suggestions: [ + { + desc: 'Remove redundant apply()', + output: `foo();`, + }, + ], }, ], }, - ], - }, - { - code: `foo.apply(null, [1, 2, 3]);`, - errors: [ { - suggestions: [ + code: `foo.apply(null, [1, 2, 3]);`, + errors: [ { - desc: 'Remove redundant apply()', - output: `foo(1, 2, 3);`, + messageId: 'unnecessaryCall', + suggestions: [ + { + desc: 'Remove redundant apply()', + output: `foo(1, 2, 3);`, + }, + ], }, ], }, - ], - }, - { - code: `obj.foo.apply(obj, []);`, - errors: [ { - suggestions: [ + code: `obj.foo.apply(obj, []);`, + errors: [ { - desc: 'Remove redundant apply()', - output: `obj.foo();`, + messageId: 'unnecessaryCall', + suggestions: [ + { + desc: 'Remove redundant apply()', + output: `obj.foo();`, + }, + ], }, ], }, - ], - }, - { - code: `obj.foo.apply(obj, [1, 2, 3]);`, - errors: [ { - suggestions: [ + code: `obj.foo.apply(obj, [1, 2, 3]);`, + errors: [ { - desc: 'Remove redundant apply()', - output: `obj.foo(1, 2, 3);`, + messageId: 'unnecessaryCall', + suggestions: [ + { + desc: 'Remove redundant apply()', + output: `obj.foo(1, 2, 3);`, + }, + ], }, ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6679/unit.test.ts b/packages/jsts/src/rules/S6679/unit.test.ts index b3718be140e..b0b9cf91ebf 100644 --- a/packages/jsts/src/rules/S6679/unit.test.ts +++ b/packages/jsts/src/rules/S6679/unit.test.ts @@ -14,65 +14,74 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester(); +describe('S6679', () => { + it('S6679', () => { + const ruleTester = new RuleTester(); -ruleTester.run('Number.isNaN() should be used to check for NaN value', rule, { - valid: [`x > x`, `x < x`, `x >= x`, `x <= x`], - invalid: [ - { - code: `x === x`, - errors: [ + ruleTester.run('Number.isNaN() should be used to check for NaN value', rule, { + valid: [{ code: `x > x` }, { code: `x < x` }, { code: `x >= x` }, { code: `x <= x` }], + invalid: [ { - suggestions: [ + code: `x === x`, + errors: [ { - desc: `Replace self-compare with Number.isNaN()`, - output: `!Number.isNaN(x)`, + message: "Use 'Number.isNaN()' to check for 'NaN' value", + suggestions: [ + { + desc: `Replace self-compare with Number.isNaN()`, + output: `!Number.isNaN(x)`, + }, + ], }, ], }, - ], - }, - { - code: `x == x`, - errors: [ { - suggestions: [ + code: `x == x`, + errors: [ { - desc: `Replace self-compare with Number.isNaN()`, - output: `!Number.isNaN(x)`, + message: "Use 'Number.isNaN()' to check for 'NaN' value", + suggestions: [ + { + desc: `Replace self-compare with Number.isNaN()`, + output: `!Number.isNaN(x)`, + }, + ], }, ], }, - ], - }, - { - code: `x !== x`, - errors: [ { - suggestions: [ + code: `x !== x`, + errors: [ { - desc: `Replace self-compare with Number.isNaN()`, - output: `Number.isNaN(x)`, + message: "Use 'Number.isNaN()' to check for 'NaN' value", + suggestions: [ + { + desc: `Replace self-compare with Number.isNaN()`, + output: `Number.isNaN(x)`, + }, + ], }, ], }, - ], - }, - { - code: `x != x`, - errors: [ { - suggestions: [ + code: `x != x`, + errors: [ { - desc: `Replace self-compare with Number.isNaN()`, - output: `Number.isNaN(x)`, + message: "Use 'Number.isNaN()' to check for 'NaN' value", + suggestions: [ + { + desc: `Replace self-compare with Number.isNaN()`, + output: `Number.isNaN(x)`, + }, + ], }, ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6747/non-react-project/unit.test.ts b/packages/jsts/src/rules/S6747/non-react-project/unit.test.ts index 03415d358eb..045cded126f 100644 --- a/packages/jsts/src/rules/S6747/non-react-project/unit.test.ts +++ b/packages/jsts/src/rules/S6747/non-react-project/unit.test.ts @@ -14,21 +14,22 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../../tests/tools/testers/rule-tester.js'; import { rule } from '../rule.js'; import { join } from 'node:path'; +import { NoTypeCheckingRuleTester } from '../../../../tests/tools/testers/rule-tester.js'; +import { describe } from 'node:test'; -const dirname = join(import.meta.dirname, 'fixtures'); -process.chdir(dirname); // change current working dir to avoid the package.json lookup to up in the tree -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { jsx: true } }, -}); -ruleTester.run('S6747 turns into a noop on non-React projects', rule, { - valid: [ - { - code: '
    ;', - filename: join(dirname, 'filename.jsx'), - }, - ], - invalid: [], +describe('S6947', () => { + const dirname = join(import.meta.dirname, 'fixtures'); + process.chdir(dirname); // change current working dir to avoid the package.json lookup to up in the tree + const ruleTester = new NoTypeCheckingRuleTester(); + ruleTester.run('S6747 turns into a noop on non-React projects', rule, { + valid: [ + { + code: '
    ;', + filename: join(dirname, 'filename.jsx'), + }, + ], + invalid: [], + }); }); diff --git a/packages/jsts/src/rules/S6747/react-project/cb.test.ts b/packages/jsts/src/rules/S6747/react-project/cb.test.ts index 9f85ad477a0..6ce9f41dc2c 100644 --- a/packages/jsts/src/rules/S6747/react-project/cb.test.ts +++ b/packages/jsts/src/rules/S6747/react-project/cb.test.ts @@ -14,14 +14,11 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../../tests/tools/index.js'; +import { check } from '../../../../tests/tools/testers/comment-based/index.js'; import { rule } from '../index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6747', () => { process.chdir(import.meta.dirname); // change current working dir to avoid the package.json lookup to up in the tree - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6749/unit.test.ts b/packages/jsts/src/rules/S6749/unit.test.ts index 27feb435b11..9d5edfb4e4b 100644 --- a/packages/jsts/src/rules/S6749/unit.test.ts +++ b/packages/jsts/src/rules/S6749/unit.test.ts @@ -14,27 +14,30 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, ecmaFeatures: { jsx: true } }, -}); -ruleTester.run('Redundant React fragments should be removed', rule, { - valid: [ - { - code: `function Empty() { return <>; }`, - }, - ], - invalid: [ - { - code: `function Child() { return <>; }`, - output: `function Child() { return ; }`, - errors: [ +describe('S6749', () => { + it('S6749', () => { + const ruleTester = new RuleTester(); + ruleTester.run('Redundant React fragments should be removed', rule, { + valid: [ + { + code: `function Empty() { return <>; }`, + }, + ], + invalid: [ { - message: 'A fragment with only one child is redundant.', + code: `function Child() { return <>; }`, + output: `function Child() { return ; }`, + errors: [ + { + message: 'A fragment with only one child is redundant.', + }, + ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6754/unit.test.ts b/packages/jsts/src/rules/S6754/unit.test.ts index aa99d4eff9b..317fcaf3561 100644 --- a/packages/jsts/src/rules/S6754/unit.test.ts +++ b/packages/jsts/src/rules/S6754/unit.test.ts @@ -14,36 +14,39 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); -ruleTester.run( - 'The return value of "useState" should be destructured and named symmetrically', - rule, - { - valid: [ +describe('S6754', () => { + it('S6754', () => { + const ruleTester = new RuleTester(); + ruleTester.run( + 'The return value of "useState" should be destructured and named symmetrically', + rule, { - code: ` + valid: [ + { + code: ` import { useState } from 'react'; function useFoo() { const [foo] = useState(); return [foo]; }`, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` import { useState } from 'react'; function useFoo() { const [foo, bar] = useState(); return [foo, bar]; }`, - errors: 1, + errors: 1, + }, + ], }, - ], - }, -); + ); + }); +}); diff --git a/packages/jsts/src/rules/S6759/cb.fixture.tsx b/packages/jsts/src/rules/S6759/cb.fixture.tsx index a966593cd0b..c80c3c15ea8 100644 --- a/packages/jsts/src/rules/S6759/cb.fixture.tsx +++ b/packages/jsts/src/rules/S6759/cb.fixture.tsx @@ -17,7 +17,10 @@ type BarProps = { y: string; } -function Bar(props: BarProps) { // Noncompliant +function Bar(props: BarProps) { // Noncompliant [[qf2]] {{Mark the props of the component as read-only.}} +// ^^^^^^^^^^^^^^^ +// fix@qf2 {{Mark the props as read-only}} +// edit@qf2 [[sc=20;ec=28]] {{Readonly}} return (
    {props.x}
    ); diff --git a/packages/jsts/src/rules/S6759/cb.test.ts b/packages/jsts/src/rules/S6759/cb.test.ts index 07b1901047a..a88bad374aa 100644 --- a/packages/jsts/src/rules/S6759/cb.test.ts +++ b/packages/jsts/src/rules/S6759/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe(`Rule`, () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6788/unit.test.ts b/packages/jsts/src/rules/S6788/unit.test.ts index fc5080267c4..9a53ccfc50b 100644 --- a/packages/jsts/src/rules/S6788/unit.test.ts +++ b/packages/jsts/src/rules/S6788/unit.test.ts @@ -15,19 +15,22 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import { TypeScriptRuleTester } from '../../../tests/tools/index.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTester = new TypeScriptRuleTester(); +describe('S6788', () => { + it('S6788', () => { + const ruleTester = new RuleTester(); -ruleTester.run(`Decorated rule should reword the issue message`, rule, { - valid: [ - { - code: `type Foo = () => number;`, - }, - ], - invalid: [ - { - code: ` + ruleTester.run(`Decorated rule should reword the issue message`, rule, { + valid: [ + { + code: `type Foo = () => number;`, + }, + ], + invalid: [ + { + code: ` class MyComponent extends Component { componentDidMount() { findDOMNode(this).scrollIntoView(); @@ -37,12 +40,14 @@ class MyComponent extends Component { } } `, - errors: [ - { - message: - "Do not use findDOMNode. It doesn't work with function components and is deprecated in StrictMode.", + errors: [ + { + message: + "Do not use findDOMNode. It doesn't work with function components and is deprecated in StrictMode.", + }, + ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6791/unit.test.ts b/packages/jsts/src/rules/S6791/unit.test.ts index b42466ff3d2..dcd0a86860b 100644 --- a/packages/jsts/src/rules/S6791/unit.test.ts +++ b/packages/jsts/src/rules/S6791/unit.test.ts @@ -15,39 +15,44 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import { TypeScriptRuleTester } from '../../../tests/tools/index.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTester = new TypeScriptRuleTester(); +describe('S6791', () => { + it('S6791', () => { + const ruleTester = new RuleTester(); -ruleTester.run( - 'The decorator should refine both message and location, and provide a quickfix', - rule, - { - valid: [ + ruleTester.run( + 'The decorator should refine both message and location, and provide a quickfix', + rule, { - code: ` + valid: [ + { + code: ` import React from 'react'; class Component extends React.Component { componentWillMount() {} }`, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` import React from 'react'; class Component extends React.Component { UNSAFE_componentWillMount() {} }`, - errors: [ - { - message: 'UNSAFE_componentWillMount is unsafe for use in async rendering.', - line: 4, - column: 5, - endColumn: 30, + errors: [ + { + message: 'UNSAFE_componentWillMount is unsafe for use in async rendering.', + line: 4, + column: 5, + endColumn: 30, + }, + ], }, ], }, - ], - }, -); + ); + }); +}); diff --git a/packages/jsts/src/rules/S6827/cb.fixture.jsx b/packages/jsts/src/rules/S6827/cb.fixture.jsx index a0112300199..d7184912fd0 100644 --- a/packages/jsts/src/rules/S6827/cb.fixture.jsx +++ b/packages/jsts/src/rules/S6827/cb.fixture.jsx @@ -1,3 +1,3 @@ ; -; // Noncompliant +; // Noncompliant {{Anchors must have content and the content must be accessible by a screen reader.}} diff --git a/packages/jsts/src/rules/S6827/cb.test.ts b/packages/jsts/src/rules/S6827/cb.test.ts index 6e72a9ca450..070be0174d8 100644 --- a/packages/jsts/src/rules/S6827/cb.test.ts +++ b/packages/jsts/src/rules/S6827/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6827', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6844/cb.fixture.tsx b/packages/jsts/src/rules/S6844/cb.fixture.tsx index 4c3c1fc8466..2e3e1e2e43e 100644 --- a/packages/jsts/src/rules/S6844/cb.fixture.tsx +++ b/packages/jsts/src/rules/S6844/cb.fixture.tsx @@ -1,7 +1,7 @@ Perform action; // Noncompliant {{Anchor used as a button. Anchors are primarily expected to navigate. Use the button element instead.}} -Perform action; // Noncompliant +Perform action; // Noncompliant {{Anchor used as a button. Anchors are primarily expected to navigate. Use the button element instead.}} -Perform action; // Noncompliant +Perform action; // Noncompliant {{Anchor used as a button. Anchors are primarily expected to navigate. Use the button element instead.}} diff --git a/packages/jsts/src/rules/S6844/cb.test.ts b/packages/jsts/src/rules/S6844/cb.test.ts index f83d1777076..cebf48df725 100644 --- a/packages/jsts/src/rules/S6844/cb.test.ts +++ b/packages/jsts/src/rules/S6844/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6844', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6853/cb.fixture.tsx b/packages/jsts/src/rules/S6853/cb.fixture.tsx index 8648ca912db..55f310bdc22 100644 --- a/packages/jsts/src/rules/S6853/cb.fixture.tsx +++ b/packages/jsts/src/rules/S6853/cb.fixture.tsx @@ -15,14 +15,14 @@ function invalid() { return ( <> - {/* Noncompliant */} + {/* Noncompliant {{A form label must be associated with a control.}} */} {/* ^^^^^*/} ); } function invalidEmptyLabel() { - return ; // Noncompliant + return ; // Noncompliant {{A form label must have accessible text.}} // ^^^^^ } diff --git a/packages/jsts/src/rules/S6853/cb.test.ts b/packages/jsts/src/rules/S6853/cb.test.ts index 3a1d4ac4231..93dafebeb3d 100644 --- a/packages/jsts/src/rules/S6853/cb.test.ts +++ b/packages/jsts/src/rules/S6853/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6853', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6957/cb.fixture.tsx b/packages/jsts/src/rules/S6957/cb.fixture.tsx index bc368fcc1fb..1a18db6741c 100644 --- a/packages/jsts/src/rules/S6957/cb.fixture.tsx +++ b/packages/jsts/src/rules/S6957/cb.fixture.tsx @@ -1,38 +1,38 @@ -import React, { PropTypes, Component } from 'react'; // Noncompliant +import React, { PropTypes, Component } from 'react'; // Noncompliant {{React.PropTypes is deprecated since React 15.5.0, use the npm module prop-types instead}} // ^^^^^^^^^ import ReactDOM from 'react-dom'; React.render(, root); // Noncompliant {{React.render is deprecated since React 0.14.0, use ReactDOM.render instead}} -React.unmountComponentAtNode(root); // Noncompliant +React.unmountComponentAtNode(root); // Noncompliant {{React.unmountComponentAtNode is deprecated since React 0.14.0, use ReactDOM.unmountComponentAtNode instead}} -React.findDOMNode(this.refs.foo); // Noncompliant +React.findDOMNode(this.refs.foo); // Noncompliant {{React.findDOMNode is deprecated since React 0.14.0, use ReactDOM.findDOMNode instead}} -React.renderToString(); // Noncompliant +React.renderToString(); // Noncompliant {{React.renderToString is deprecated since React 0.14.0, use ReactDOMServer.renderToString instead}} -React.renderToStaticMarkup(); // Noncompliant +React.renderToStaticMarkup(); // Noncompliant {{React.renderToStaticMarkup is deprecated since React 0.14.0, use ReactDOMServer.renderToStaticMarkup instead}} -React.createClass({ /* Class object */ }); // Noncompliant +React.createClass({ /* Class object */ }); // Noncompliant {{React.createClass is deprecated since React 15.5.0, use the npm module create-react-class instead}} const propTypes = { foo: PropTypes.bar, }; //Any factories under React.DOM -React.DOM.div(); // Noncompliant +React.DOM.div(); // Noncompliant {{React.DOM is deprecated since React 15.6.0, use the npm module react-dom-factories instead}} class ApiCall extends Component { // old lifecycles (since React 16.9) - componentWillMount() {} // Noncompliant - componentWillReceiveProps() {} // Noncompliant - componentWillUpdate() {} // Noncompliant + componentWillMount() {} // Noncompliant {{componentWillMount is deprecated since React 16.9.0, use UNSAFE_componentWillMount instead}} + componentWillReceiveProps() {} // Noncompliant {{componentWillReceiveProps is deprecated since React 16.9.0, use UNSAFE_componentWillReceiveProps instead}} + componentWillUpdate() {} // Noncompliant {{componentWillUpdate is deprecated since React 16.9.0, use UNSAFE_componentWillUpdate instead}} } // React 18 deprecations -ReactDOM.render(
    , container); // Noncompliant +ReactDOM.render(
    , container); // Noncompliant {{ReactDOM.render is deprecated since React 18.0.0, use createRoot instead}} -ReactDOM.hydrate(
    , container); // Noncompliant +ReactDOM.hydrate(
    , container); // Noncompliant {{ReactDOM.hydrate is deprecated since React 18.0.0, use hydrateRoot instead}} -ReactDOM.unmountComponentAtNode(container); // Noncompliant +ReactDOM.unmountComponentAtNode(container); // Noncompliant {{ReactDOM.unmountComponentAtNode is deprecated since React 18.0.0, use root.unmount instead}} -ReactDOMServer.renderToNodeStream(element); // Noncompliant +ReactDOMServer.renderToNodeStream(element); // Noncompliant {{ReactDOMServer.renderToNodeStream is deprecated since React 18.0.0, use renderToPipeableStream instead}} diff --git a/packages/jsts/src/rules/S6957/cb.test.ts b/packages/jsts/src/rules/S6957/cb.test.ts index d37503c6832..6e37ff31adb 100644 --- a/packages/jsts/src/rules/S6957/cb.test.ts +++ b/packages/jsts/src/rules/S6957/cb.test.ts @@ -14,14 +14,11 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6957', () => { process.chdir(import.meta.dirname); // change current working dir to avoid the package.json lookup to up in the tree - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6957/unit.test.ts b/packages/jsts/src/rules/S6957/unit.test.ts index f12013cb879..65d99057ec3 100644 --- a/packages/jsts/src/rules/S6957/unit.test.ts +++ b/packages/jsts/src/rules/S6957/unit.test.ts @@ -14,29 +14,26 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; import path from 'path/posix'; import { toUnixPath } from '../helpers/index.js'; -import { fileURLToPath } from 'node:url'; +import { NoTypeCheckingRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; const dirname = import.meta.dirname; const fixtures = path.join(toUnixPath(dirname), 'fixtures'); const filenameReact15 = path.join(fixtures, 'react15/file.js'); -const tsParserPath = fileURLToPath(import.meta.resolve('@typescript-eslint/parser')); - process.chdir(import.meta.dirname); // change current working dir to avoid the package.json lookup to up in the tree -const ruleTester = new NodeRuleTester({ - parser: tsParserPath, - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); +describe('S6957', () => { + it('S6957', () => { + const ruleTester = new NoTypeCheckingRuleTester(); -ruleTester.run('React15', rule, { - valid: [ - { - code: ` + ruleTester.run('React15', rule, { + valid: [ + { + code: ` import React from 'react'; import ReactDOM from 'react-dom'; @@ -65,12 +62,12 @@ ReactDOM.unmountComponentAtNode(container); ReactDOMServer.renderToNodeStream(element); `, - filename: filenameReact15, - }, - ], - invalid: [ - { - code: ` + filename: filenameReact15, + }, + ], + invalid: [ + { + code: ` import React from 'react'; import ReactDOM from 'react-dom'; @@ -84,27 +81,27 @@ React.renderToString(); React.renderToStaticMarkup(); `, - filename: filenameReact15, - errors: 5, - }, - ], -}); - -const filenameReact19 = path.join(fixtures, 'react19/file.js'); - -ruleTester.run('React19', rule, { - valid: [ - { - code: ` + filename: filenameReact15, + errors: 5, + }, + ], + }); + + const filenameReact19 = path.join(fixtures, 'react19/file.js'); + + ruleTester.run('React19', rule, { + valid: [ + { + code: ` import React from 'react'; import ReactDOM from 'react-dom'; `, - filename: filenameReact19, - }, - ], - invalid: [ - { - code: ` + filename: filenameReact19, + }, + ], + invalid: [ + { + code: ` import React from 'react'; import ReactDOM from 'react-dom'; @@ -143,29 +140,29 @@ ReactDOM.unmountComponentAtNode(container); ReactDOMServer.renderToNodeStream(element); `, - filename: filenameReact19, - errors: 15, - }, - ], -}); - -shouldRaiseAllIssues(path.join(fixtures, 'noreact1/file.js')); -shouldRaiseAllIssues(path.join(fixtures, 'noreact2/file.js')); - -function shouldRaiseAllIssues(filename) { - ruleTester.run(`No React ${filename}`, rule, { - valid: [ - { - code: ` + filename: filenameReact19, + errors: 15, + }, + ], + }); + + shouldRaiseAllIssues(path.join(fixtures, 'noreact1/file.js')); + shouldRaiseAllIssues(path.join(fixtures, 'noreact2/file.js')); + + function shouldRaiseAllIssues(filename) { + ruleTester.run(`No React ${filename}`, rule, { + valid: [ + { + code: ` import React from 'react'; import ReactDOM from 'react-dom'; `, - filename, - }, - ], - invalid: [ - { - code: ` + filename, + }, + ], + invalid: [ + { + code: ` import React from 'react'; import ReactDOM from 'react-dom'; @@ -204,9 +201,11 @@ ReactDOM.unmountComponentAtNode(container); ReactDOMServer.renderToNodeStream(element); `, - filename, - errors: 15, - }, - ], + filename, + errors: 15, + }, + ], + }); + } }); -} +}); diff --git a/packages/jsts/src/rules/S6958/unit.test.ts b/packages/jsts/src/rules/S6958/unit.test.ts index d67c033718a..3ef5063c952 100644 --- a/packages/jsts/src/rules/S6958/unit.test.ts +++ b/packages/jsts/src/rules/S6958/unit.test.ts @@ -15,241 +15,246 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import { JavaScriptRuleTester } from '../../../tests/tools/index.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTester = new JavaScriptRuleTester(); +const ruleTester = new RuleTester(); -ruleTester.run('no-literal-call', rule, { - valid: [ - { code: 'foo();' }, - { code: 'obj.foo();' }, - { code: '(function() {})();' }, - { code: '(() => 0)();' }, - { code: 'foo``;' }, - { code: 'obj.foo``;' }, - { code: '(function() {})``;' }, - { code: '(() => 0)``;' }, - ], - invalid: [ - { - code: 'true();', - errors: [ - { - messageId: 'asFunction', - line: 1, - column: 1, - endColumn: 5, - }, +describe('S6958', () => { + it('S6958', () => { + ruleTester.run('no-literal-call', rule, { + valid: [ + { code: 'foo();' }, + { code: 'obj.foo();' }, + { code: '(function() {})();' }, + { code: '(() => 0)();' }, + { code: 'foo``;' }, + { code: 'obj.foo``;' }, + { code: '(function() {})``;' }, + { code: '(() => 0)``;' }, ], - }, - { - code: 'true``;', - errors: [ + invalid: [ { - messageId: 'asTagFunction', - line: 1, - column: 1, - endColumn: 5, + code: 'true();', + errors: [ + { + messageId: 'asFunction', + line: 1, + column: 1, + endColumn: 5, + }, + ], }, - ], - }, - { - code: 'false();', - errors: [ { - messageId: 'asFunction', - line: 1, - column: 1, - endColumn: 6, + code: 'true``;', + errors: [ + { + messageId: 'asTagFunction', + line: 1, + column: 1, + endColumn: 5, + }, + ], }, - ], - }, - { - code: 'false``;', - errors: [ { - messageId: 'asTagFunction', - line: 1, - column: 1, - endColumn: 6, + code: 'false();', + errors: [ + { + messageId: 'asFunction', + line: 1, + column: 1, + endColumn: 6, + }, + ], }, - ], - }, - { - code: 'null();', - errors: [ { - messageId: 'asFunction', - line: 1, - column: 1, - endColumn: 5, + code: 'false``;', + errors: [ + { + messageId: 'asTagFunction', + line: 1, + column: 1, + endColumn: 6, + }, + ], }, - ], - }, - { - code: 'null``;', - errors: [ { - messageId: 'asTagFunction', - line: 1, - column: 1, - endColumn: 5, + code: 'null();', + errors: [ + { + messageId: 'asFunction', + line: 1, + column: 1, + endColumn: 5, + }, + ], }, - ], - }, - { - code: '100();', - errors: [ { - messageId: 'asFunction', - line: 1, - column: 1, - endColumn: 4, + code: 'null``;', + errors: [ + { + messageId: 'asTagFunction', + line: 1, + column: 1, + endColumn: 5, + }, + ], }, - ], - }, - { - code: '100``;', - errors: [ { - messageId: 'asTagFunction', - line: 1, - column: 1, - endColumn: 4, + code: '100();', + errors: [ + { + messageId: 'asFunction', + line: 1, + column: 1, + endColumn: 4, + }, + ], }, - ], - }, - { - code: '"hello"();', - errors: [ { - messageId: 'asFunction', - line: 1, - column: 1, - endColumn: 8, + code: '100``;', + errors: [ + { + messageId: 'asTagFunction', + line: 1, + column: 1, + endColumn: 4, + }, + ], }, - ], - }, - { - code: '`hello```;', - errors: [ { - messageId: 'asTagFunction', - line: 1, - column: 1, - endColumn: 8, + code: '"hello"();', + errors: [ + { + messageId: 'asFunction', + line: 1, + column: 1, + endColumn: 8, + }, + ], }, - ], - }, - { - code: '/abc/();', - errors: [ { - messageId: 'asFunction', - line: 1, - column: 1, - endColumn: 6, + code: '`hello```;', + errors: [ + { + messageId: 'asTagFunction', + line: 1, + column: 1, + endColumn: 8, + }, + ], }, - ], - }, - { - code: '/abc/``;', - errors: [ { - messageId: 'asTagFunction', - line: 1, - column: 1, - endColumn: 6, + code: '/abc/();', + errors: [ + { + messageId: 'asFunction', + line: 1, + column: 1, + endColumn: 6, + }, + ], }, - ], - }, - { - code: '[1,2,3]();', - errors: [ { - messageId: 'asFunction', - line: 1, - column: 1, - endColumn: 8, + code: '/abc/``;', + errors: [ + { + messageId: 'asTagFunction', + line: 1, + column: 1, + endColumn: 6, + }, + ], }, - ], - }, - { - code: '[1,2,3]``;', - errors: [ { - messageId: 'asTagFunction', - line: 1, - column: 1, - endColumn: 8, + code: '[1,2,3]();', + errors: [ + { + messageId: 'asFunction', + line: 1, + column: 1, + endColumn: 8, + }, + ], }, - ], - }, - { - code: '({foo: 0})();', - errors: [ { - messageId: 'asFunction', - line: 1, - column: 2, - endColumn: 10, + code: '[1,2,3]``;', + errors: [ + { + messageId: 'asTagFunction', + line: 1, + column: 1, + endColumn: 8, + }, + ], }, - ], - }, - { - code: '({foo: 0})``;', - errors: [ { - messageId: 'asTagFunction', - line: 1, - column: 2, - endColumn: 10, + code: '({foo: 0})();', + errors: [ + { + messageId: 'asFunction', + line: 1, + column: 2, + endColumn: 10, + }, + ], }, - ], - }, - { - code: '`hello`();', - errors: [ { - messageId: 'asFunction', - line: 1, - column: 1, - endColumn: 8, + code: '({foo: 0})``;', + errors: [ + { + messageId: 'asTagFunction', + line: 1, + column: 2, + endColumn: 10, + }, + ], }, - ], - }, - { - code: '"hello"``;', - errors: [ { - messageId: 'asTagFunction', - line: 1, - column: 1, - endColumn: 8, + code: '`hello`();', + errors: [ + { + messageId: 'asFunction', + line: 1, + column: 1, + endColumn: 8, + }, + ], }, - ], - }, - { - code: '(class A {})();', - errors: [ { - messageId: 'asFunction', - line: 1, - column: 2, - endColumn: 12, + code: '"hello"``;', + errors: [ + { + messageId: 'asTagFunction', + line: 1, + column: 1, + endColumn: 8, + }, + ], + }, + { + code: '(class A {})();', + errors: [ + { + messageId: 'asFunction', + line: 1, + column: 2, + endColumn: 12, + }, + ], }, - ], - }, - { - code: '(class A {})``;', - errors: [ { - messageId: 'asTagFunction', - line: 1, - column: 2, - endColumn: 12, + code: '(class A {})``;', + errors: [ + { + messageId: 'asTagFunction', + line: 1, + column: 2, + endColumn: 12, + }, + ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S6959/cb.test.ts b/packages/jsts/src/rules/S6959/cb.test.ts index c8b5291e0fe..79c4089988a 100644 --- a/packages/jsts/src/rules/S6959/cb.test.ts +++ b/packages/jsts/src/rules/S6959/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S6959', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S6959/unit.test.ts b/packages/jsts/src/rules/S6959/unit.test.ts index 0c191fd0fd9..eb98cb5d298 100644 --- a/packages/jsts/src/rules/S6959/unit.test.ts +++ b/packages/jsts/src/rules/S6959/unit.test.ts @@ -14,30 +14,35 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ parserOptions: { ecmaVersion: 2018 } }); -ruleTester.run('"Array.reduce()" calls should include an initial value', rule, { - valid: [ - { - code: 'xs.reduce((acc, x) => acc + x);', - }, - { - code: '[1,2,3].reduce((acc, x) => acc + x, 0);', - }, - { - code: 'const xs = [1,2,3]; xs.reduce((acc, x) => acc + x, 0);', - }, - ], - invalid: [ - { - code: '[1,2,3].reduce((acc, x) => acc + x);', - errors: 1, - }, - { - code: 'const xs = [1,2,3]; xs.reduce((acc, x) => acc + x);', - errors: 1, - }, - ], +describe('S6959', () => { + it('S6959', () => { + const ruleTester = new RuleTester(); + ruleTester.run('"Array.reduce()" calls should include an initial value', rule, { + valid: [ + { + code: 'xs.reduce((acc, x) => acc + x);', + }, + { + code: '[1,2,3].reduce((acc, x) => acc + x, 0);', + }, + { + code: 'const xs = [1,2,3]; xs.reduce((acc, x) => acc + x, 0);', + }, + ], + invalid: [ + { + code: '[1,2,3].reduce((acc, x) => acc + x);', + errors: 1, + }, + { + code: 'const xs = [1,2,3]; xs.reduce((acc, x) => acc + x);', + errors: 1, + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S7059/cb.fixture.ts b/packages/jsts/src/rules/S7059/cb.fixture.ts index e5c952c610e..95a4b221ff8 100644 --- a/packages/jsts/src/rules/S7059/cb.fixture.ts +++ b/packages/jsts/src/rules/S7059/cb.fixture.ts @@ -22,6 +22,6 @@ class MyClass { class MyClass { constructor() { console.log('correct'); - Promise.resolve().then(() => this.data = fetchData()); //Noncompliant + Promise.resolve().then(() => this.data = fetchData()); //Noncompliant {{Refactor this asynchronous operation outside of the constructor.}} } } diff --git a/packages/jsts/src/rules/S7059/cb.test.ts b/packages/jsts/src/rules/S7059/cb.test.ts index 5c7e36c91e1..946dbf9e8c6 100644 --- a/packages/jsts/src/rules/S7059/cb.test.ts +++ b/packages/jsts/src/rules/S7059/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S7059', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S7060/cb.fixture.js b/packages/jsts/src/rules/S7060/cb.fixture.js index 40c27ee173a..1ce9f5a5225 100644 --- a/packages/jsts/src/rules/S7060/cb.fixture.js +++ b/packages/jsts/src/rules/S7060/cb.fixture.js @@ -1,11 +1,13 @@ -import f from './cb.fixture.js'; // Noncompliant [[qf1]] +import f from './cb.fixture.js'; // Noncompliant [[qf1]] {{Module imports itself.}} // fix@qf1 {{Remove this import}} // edit@qf1 [[sc=0;ec=32]] {{}} -import f from './cb.fixture'; // Noncompliant +import f from './cb.fixture'; // Noncompliant [[qf3]] {{Module imports itself.}} +// fix@qf3 {{Remove this import}} +// edit@qf3 [[sc=0;ec=29]] {{}} -const f = require('./cb.fixture.js'); // Noncompliant [[qf2]] +const f = require('./cb.fixture.js'); // Noncompliant [[qf2]] {{Module imports itself.}} // fix@qf2 {{Remove this require}} // edit@qf2 [[sc=0;ec=37]] {{}} diff --git a/packages/jsts/src/rules/S7060/cb.test.ts b/packages/jsts/src/rules/S7060/cb.test.ts index 1aeb8055708..5ecfe638ade 100644 --- a/packages/jsts/src/rules/S7060/cb.test.ts +++ b/packages/jsts/src/rules/S7060/cb.test.ts @@ -14,13 +14,10 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; -import path from 'path'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S7060', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S881/unit.test.ts b/packages/jsts/src/rules/S881/unit.test.ts index 38d82b768b2..e388695abad 100644 --- a/packages/jsts/src/rules/S881/unit.test.ts +++ b/packages/jsts/src/rules/S881/unit.test.ts @@ -14,128 +14,133 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { DefaultParserRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ parserOptions: { ecmaVersion: 2018 } }); -ruleTester.run('Nested increment (++) and decrement (--) operators should not be used', rule, { - valid: [ - { - code: `i++;`, - }, - { - code: `++i;`, - }, - { - code: `i--;`, - }, - { - code: `--i;`, - }, - { - code: `foo[i]++;`, - }, - { - code: `foo[-i] = 0;`, - }, - { - code: `for (i = 0; i < 10; i++, j++, k++) {}`, - }, - ], - invalid: [ - { - code: `for (i++, j-- ; i < 10; i++) {}`, - errors: [ - { - message: 'Extract this increment operation into a dedicated statement.', - line: 1, - column: 6, - endLine: 1, - endColumn: 9, - }, - { - message: 'Extract this decrement operation into a dedicated statement.', - line: 1, - column: 11, - endLine: 1, - endColumn: 14, +const ruleTester = new DefaultParserRuleTester(); +describe('S881', () => { + it('S881', () => { + ruleTester.run('Nested increment (++) and decrement (--) operators should not be used', rule, { + valid: [ + { + code: `i++;`, + }, + { + code: `++i;`, + }, + { + code: `i--;`, + }, + { + code: `--i;`, + }, + { + code: `foo[i]++;`, + }, + { + code: `foo[-i] = 0;`, }, - ], - }, - { - code: `foo[i--]++;`, - errors: [ { - message: 'Extract this decrement operation into a dedicated statement.', - line: 1, - column: 5, - endLine: 1, - endColumn: 8, + code: `for (i = 0; i < 10; i++, j++, k++) {}`, }, ], - }, - { - code: `foo[++i] = 0;`, - errors: 1, - }, - { - code: `if (i++) {}`, - errors: 1, - }, - { - code: `console.log(i++);`, - errors: 1, - }, - { - code: `i = 5 * --i;`, - errors: 1, - }, - { - code: `i = i++ - 1;`, - errors: 1, - }, - { - code: `i = (j++, k++);`, - errors: 2, - }, - { - code: `for (i++, j++ ; i < 10; i++) {}`, - errors: 2, - }, - { - code: `for (var i = 0; i++ < 10; i++) {}`, - errors: 1, - }, - { - code: `for (let el of [foo[i++]]) {}`, - errors: 1, - }, - { - code: `for (var i = 0; i < 10; i = j++ - 2, i++) {}`, - errors: 1, - }, - { - code: `while (i++) {}`, - errors: 1, - }, - { - code: `do {} while (i++);`, - errors: 1, - }, - { - code: `() => { return i++; }`, - errors: 1, - }, - { - code: `() => { throw i++; }`, - errors: 1, - }, - { - code: `switch (i++) { + invalid: [ + { + code: `for (i++, j-- ; i < 10; i++) {}`, + errors: [ + { + message: 'Extract this increment operation into a dedicated statement.', + line: 1, + column: 6, + endLine: 1, + endColumn: 9, + }, + { + message: 'Extract this decrement operation into a dedicated statement.', + line: 1, + column: 11, + endLine: 1, + endColumn: 14, + }, + ], + }, + { + code: `foo[i--]++;`, + errors: [ + { + message: 'Extract this decrement operation into a dedicated statement.', + line: 1, + column: 5, + endLine: 1, + endColumn: 8, + }, + ], + }, + { + code: `foo[++i] = 0;`, + errors: 1, + }, + { + code: `if (i++) {}`, + errors: 1, + }, + { + code: `console.log(i++);`, + errors: 1, + }, + { + code: `i = 5 * --i;`, + errors: 1, + }, + { + code: `i = i++ - 1;`, + errors: 1, + }, + { + code: `i = (j++, k++);`, + errors: 2, + }, + { + code: `for (i++, j++ ; i < 10; i++) {}`, + errors: 2, + }, + { + code: `for (var i = 0; i++ < 10; i++) {}`, + errors: 1, + }, + { + code: `for (let el of [foo[i++]]) {}`, + errors: 1, + }, + { + code: `for (var i = 0; i < 10; i = j++ - 2, i++) {}`, + errors: 1, + }, + { + code: `while (i++) {}`, + errors: 1, + }, + { + code: `do {} while (i++);`, + errors: 1, + }, + { + code: `() => { return i++; }`, + errors: 1, + }, + { + code: `() => { throw i++; }`, + errors: 1, + }, + { + code: `switch (i++) { case j--: break; default: break; }`, - errors: 2, - }, - ], + errors: 2, + }, + ], + }); + }); }); diff --git a/packages/jsts/src/rules/S888/cb.fixture.js b/packages/jsts/src/rules/S888/cb.fixture.js index d2486bc3da7..be9a429afbf 100644 --- a/packages/jsts/src/rules/S888/cb.fixture.js +++ b/packages/jsts/src/rules/S888/cb.fixture.js @@ -30,40 +30,40 @@ function non_compliant() { // ^^^^ for (i=0; i==2; i+=2){ } // Noncompliant {{Replace '==' operator with one of '<=', '>=', '<', or '>' comparison operators.}} // ^^^^ - for (i=10; i==0; i--){ } // Noncompliant - for (var i=0; i===10; i++){ } // Noncompliant + for (i=10; i==0; i--){ } // Noncompliant {{Replace '==' operator with one of '<=', '>=', '<', or '>' comparison operators.}} + for (var i=0; i===10; i++){ } // Noncompliant {{Replace '===' operator with one of '<=', '>=', '<', or '>' comparison operators.}} // ^^^^^^ - for(i=from, j=0; i!=to; i+=dir, j++){} // Noncompliant + for(i=from, j=0; i!=to; i+=dir, j++){} // Noncompliant {{Replace '!=' operator with one of '<=', '>=', '<', or '>' comparison operators.}} //even if trivial update operation, we have equality in condition //not a trivial update - for (var i=0; i!==2; i+=2){ } // Noncompliant + for (var i=0; i!==2; i+=2){ } // Noncompliant {{Replace '!==' operator with one of '<=', '>=', '<', or '>' comparison operators.}} // ^^^^^ //trivial update, but init is higher than stop and update is increasing - for (var i=10; i!=0; i++){ } // Noncompliant + for (var i=10; i!=0; i++){ } // Noncompliant {{Replace '!=' operator with one of '<=', '>=', '<', or '>' comparison operators.}} //trivial update, but init is lower than stop and update is decreasing - for (var i=0; i!=10; i-=1){ } // Noncompliant + for (var i=0; i!=10; i-=1){ } // Noncompliant {{Replace '!=' operator with one of '<=', '>=', '<', or '>' comparison operators.}} //trivial update operation with wrong init - for (var i="a"; i!=0; i-=1){ } // Noncompliant + for (var i="a"; i!=0; i-=1){ } // Noncompliant {{Replace '!=' operator with one of '<=', '>=', '<', or '>' comparison operators.}} //trivial update, but init is lower than stop var j = 20; - for (j=0; j!=10; j--){ } // Noncompliant + for (j=0; j!=10; j--){ } // Noncompliant {{Replace '!=' operator with one of '<=', '>=', '<', or '>' comparison operators.}} //not a non-trivial condition exception, updated counter is not in the condition - for (i = 0, k = 0; k != null; i++, k--){ } // Noncompliant + for (i = 0, k = 0; k != null; i++, k--){ } // Noncompliant {{Replace '!=' operator with one of '<=', '>=', '<', or '>' comparison operators.}} - for (var i=0; i!=10; i+=1){ // Noncompliant + for (var i=0; i!=10; i+=1){ // Noncompliant {{Replace '!=' operator with one of '<=', '>=', '<', or '>' comparison operators.}} i++ // changes to counter -> no exception } var iii = 0; - for (var i=0; iii!=10; iii+=1){ // Noncompliant + for (var i=0; iii!=10; iii+=1){ // Noncompliant {{Replace '!=' operator with one of '<=', '>=', '<', or '>' comparison operators.}} iii++ // changes to counter -> no exception } } diff --git a/packages/jsts/src/rules/S888/cb.test.ts b/packages/jsts/src/rules/S888/cb.test.ts index 73350efb2af..0ed3e0dd26c 100644 --- a/packages/jsts/src/rules/S888/cb.test.ts +++ b/packages/jsts/src/rules/S888/cb.test.ts @@ -15,12 +15,9 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './index.js'; -import path from 'path'; -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { describe } from 'node:test'; -const sonarId = path.basename(import.meta.dirname); - describe('Rule S888', () => { - check(sonarId, rule, import.meta.dirname); + check(rule, import.meta.dirname); }); diff --git a/packages/jsts/src/rules/S905/unit.test.ts b/packages/jsts/src/rules/S905/unit.test.ts index f8591460f19..b605b12be4d 100644 --- a/packages/jsts/src/rules/S905/unit.test.ts +++ b/packages/jsts/src/rules/S905/unit.test.ts @@ -14,28 +14,27 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { rule } from './index.js'; -import { fileURLToPath } from 'node:url'; +import { RuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { describe, it } from 'node:test'; -const ruleTester = new NodeRuleTester({ - parser: fileURLToPath(import.meta.resolve('@typescript-eslint/parser')), - parserOptions: { ecmaVersion: 2018 }, -}); +const ruleTester = new RuleTester(); -ruleTester.run('Disallow unused expressions', rule, { - valid: [ - { - code: ` +describe('S905', () => { + it('S905', () => { + ruleTester.run('Disallow unused expressions', rule, { + valid: [ + { + code: ` // valid assignments a = 0; x.y = 0; x[y] = 0; x.y += 0; `, - }, - { - code: ` + }, + { + code: ` // valid function / method / constructor calls (presumably with side effects) doSomething(); doSomething(usingArgs); @@ -43,25 +42,25 @@ ruleTester.run('Disallow unused expressions', rule, { obj.doSth(args); new A(); `, - }, - { - code: ` + }, + { + code: ` // valid method calls with null-coalescing operator obj?.doSth(); obj?.x?.y?.doSth(); f?.(arg1, arg2); f.g?.h?.(); `, - }, - { - code: ` + }, + { + code: ` // valid delete / void delete x['k']; void ok; `, - }, - { - code: ` + }, + { + code: ` // valid chai code using 'should'-syntax t.should.be.ok; t.should.exist; @@ -69,9 +68,9 @@ ruleTester.run('Disallow unused expressions', rule, { [0].should.not.be.empty; foo.should.have.property("bar").with.empty; `, - }, - { - code: ` + }, + { + code: ` // valid chai code using 'expect'-syntax expect(t).to.be.true; expect(u).to.be.undefined; @@ -80,78 +79,80 @@ ruleTester.run('Disallow unused expressions', rule, { expect(NaN).to.not.be.finite; expect(foo).to.have.property('bar').with.empty; `, - }, - { - code: ` + }, + { + code: ` ({ onClick: function(){/* ... */} }); `, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` // invalid isolated literals (surrounded by chai-tests) thisLine.should.be.ignored; 42; expect(42).to.be.atLeast(40); `, - errors: [ - { - message: `Expected an assignment or function call and instead saw an expression.`, - line: 4, - endLine: 4, - column: 9, - endColumn: 12, + errors: [ + { + message: `Expected an assignment or function call and instead saw an expression.`, + line: 4, + endLine: 4, + column: 9, + endColumn: 12, + }, + ], }, - ], - }, - { - code: ` + { + code: ` // forgotten method calls (surrounded by chai-tests) thisLine.should.be.ignored(1234); someone.forgot().to[0].callAMethod; expect([]).to.be.empty; `, - errors: [ - { - message: `Expected an assignment or function call and instead saw an expression.`, - line: 4, - endLine: 4, - column: 9, - endColumn: 44, + errors: [ + { + message: `Expected an assignment or function call and instead saw an expression.`, + line: 4, + endLine: 4, + column: 9, + endColumn: 44, + }, + ], }, - ], - }, - { - code: `({})`, - errors: [ { - message: `Expected an assignment or function call and instead saw an expression.`, - line: 1, - endLine: 1, - column: 1, - endColumn: 5, + code: `({})`, + errors: [ + { + message: `Expected an assignment or function call and instead saw an expression.`, + line: 1, + endLine: 1, + column: 1, + endColumn: 5, + }, + ], }, - ], - }, - { - code: ` + { + code: ` while (true) { ({ onClick: function(){/* ... */} }); }`, - errors: [ - { - message: `Expected an assignment or function call and instead saw an expression.`, - line: 3, - endLine: 5, - column: 11, - endColumn: 14, + errors: [ + { + message: `Expected an assignment or function call and instead saw an expression.`, + line: 3, + endLine: 5, + column: 11, + endColumn: 14, + }, + ], }, ], - }, - ], + }); + }); }); diff --git a/packages/jsts/src/rules/S930/unit.test.ts b/packages/jsts/src/rules/S930/unit.test.ts index 76d79aa4115..df4c6156d96 100644 --- a/packages/jsts/src/rules/S930/unit.test.ts +++ b/packages/jsts/src/rules/S930/unit.test.ts @@ -15,110 +15,106 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './rule.js'; -import { JavaScriptRuleTester } from '../../../tests/tools/index.js'; -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { DefaultParserRuleTester } from '../../../tests/tools/testers/rule-tester.js'; import { IssueLocation } from '../helpers/index.js'; +import { describe, it } from 'node:test'; -const ruleTester = new JavaScriptRuleTester(); +const ruleTester = new DefaultParserRuleTester({ sourceType: 'script' }); -ruleTester.run('no-extra-arguments', rule, { - valid: [ - { - code: ` +describe('S930', () => { + it('S930', () => { + ruleTester.run('no-extra-arguments', rule, { + valid: [ + { + code: ` function foo(p1, p2) {} foo(1, 2); foo(1); `, - }, - { - code: ` + }, + { + code: ` function foo() { console.log(arguments); } foo(1, 2); `, - }, - { - code: ` + }, + { + code: ` function foo(p1, ...p2) {} foo(1, 2, 3, 4); `, - }, - { - code: ` - let foo = function(...p1) {} - foo(1, 2, 3, 4); - `, - }, - { - code: ` + }, + { + code: ` let foo = function(...p1) {} foo(1, 2, 3, 4); `, - }, - { - code: ` + }, + { + code: ` let noop = () => {}; function foo(callback = noop) { callback(42); } `, - }, - { - code: ` + }, + { + code: ` let x = () => {}; if (cond) { x = (p1, p2) => 1; } x(1, 2); `, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` function foo(p1, p2) {} foo(1, 2, 3); foo(1, 2, 3, 4); `, - errors: [ - message(2, 3, { line: 3, column: 9, endColumn: 12 }), - message(2, 4, { line: 4, column: 9, endColumn: 12 }), - ], - }, - { - code: ` + errors: [ + message(2, 3, { line: 3, column: 9, endColumn: 12 }), + message(2, 4, { line: 4, column: 9, endColumn: 12 }), + ], + }, + { + code: ` function foo(p1, p2) {} // ^^^^^^> foo(1, 2, 3); //^^^ <^ `, - errors: [ - { - messageId: 'sonarRuntime', - data: { - expectedArguments: '2 arguments', - providedArguments: '3 were', - sonarRuntimeData: encodedMessage(2, 3, [ - { message: 'Formal parameters', column: 21, line: 2, endColumn: 27, endLine: 2 }, - { message: 'Extra argument', column: 18, line: 4, endColumn: 19, endLine: 4 }, - ]), - }, + errors: [ + { + messageId: 'sonarRuntime', + data: { + expectedArguments: '2 arguments', + providedArguments: '3 were', + sonarRuntimeData: encodedMessage(2, 3, [ + { message: 'Formal parameters', column: 21, line: 2, endColumn: 27, endLine: 2 }, + { message: 'Extra argument', column: 18, line: 4, endColumn: 19, endLine: 4 }, + ]), + }, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: ` + { + code: ` var foo = function() { console.log('hello'); } foo(1); `, - errors: [message(0, 1, { line: 5, column: 9, endColumn: 12 })], - }, - { - code: ` + errors: [message(0, 1, { line: 5, column: 9, endColumn: 12 })], + }, + { + code: ` foo(1); // ^ var foo = function() { @@ -126,120 +122,105 @@ ruleTester.run('no-extra-arguments', rule, { console.log('hello'); } `, - errors: [ - { - messageId: 'sonarRuntime', - data: { - expectedArguments: 'no arguments', - providedArguments: '1 was', - sonarRuntimeData: encodedMessage(0, 1, [ - { message: 'Formal parameters', column: 18, line: 4, endColumn: 26, endLine: 4 }, - { message: 'Extra argument', column: 12, line: 2, endColumn: 13, endLine: 2 }, - ]), - }, + errors: [ + { + messageId: 'sonarRuntime', + data: { + expectedArguments: 'no arguments', + providedArguments: '1 was', + sonarRuntimeData: encodedMessage(0, 1, [ + { message: 'Formal parameters', column: 18, line: 4, endColumn: 26, endLine: 4 }, + { message: 'Extra argument', column: 12, line: 2, endColumn: 13, endLine: 2 }, + ]), + }, + }, + ], + options: ['sonar-runtime'], }, - ], - options: ['sonar-runtime'], - }, - { - code: ` + { + code: ` (function(p1, p2){ doSomething1; doSomething2; })(1, 2, 3); `, - errors: [message(2, 3, { line: 2, column: 10, endLine: 5, endColumn: 10 })], - }, - { - code: ` + errors: [message(2, 3, { line: 2, column: 10, endLine: 5, endColumn: 10 })], + }, + { + code: ` let x = function(a, b) { return a + b; }(1, 2, 3); `, - errors: [message(2, 3, { line: 2, column: 17, endLine: 4, endColumn: 10 })], - }, - { - code: ` + errors: [message(2, 3, { line: 2, column: 17, endLine: 4, endColumn: 10 })], + }, + { + code: ` ((a, b) => { return a + b; })(1, 2, 3); `, - errors: [message(2, 3, { line: 2, column: 10, endLine: 4, endColumn: 10 })], - }, - { - code: ` + errors: [message(2, 3, { line: 2, column: 10, endLine: 4, endColumn: 10 })], + }, + { + code: ` let arrow_function = (a, b) => {}; arrow_function(1, 2, 3); `, - errors: [message(2, 3, { line: 3, column: 9, endColumn: 23 })], - }, - ], -}); - -const ruleTesterScript = new NodeRuleTester({ - parserOptions: { - ecmaVersion: 2018, - sourceType: 'script', - }, -}); - -ruleTesterScript.run('no-extra-arguments script', rule, { - valid: [], - invalid: [ - { - code: ` + errors: [message(2, 3, { line: 3, column: 9, endColumn: 23 })], + }, + { + code: ` function foo(arguments) { console.log(arguments); } foo(1, 2); `, - errors: [message(1, 2, { line: 5, column: 9, endColumn: 12 })], - }, - { - code: ` + errors: [message(1, 2, { line: 5, column: 9, endColumn: 12 })], + }, + { + code: ` function foo() { let arguments = [3, 4]; console.log(arguments); } foo(1, 2); `, - errors: [message(0, 2, { line: 6, column: 9, endColumn: 12 })], - }, - ], -}); + errors: [message(0, 2, { line: 6, column: 9, endColumn: 12 })], + }, + ], + }); + }); -function message( - expected: number, - provided: number, - extra: Partial = {}, -): NodeRuleTester.TestCaseError { - // prettier-ignore - const expectedArguments = + function message(expected: number, provided: number, extra = {}) { + // prettier-ignore + const expectedArguments = expected === 0 ? "no arguments" : expected === 1 ? "1 argument" : `${expected} arguments`; - // prettier-ignore - const providedArguments = + // prettier-ignore + const providedArguments = provided === 0 ? "none was" : provided === 1 ? "1 was" : `${provided} were`; - return { - messageId: 'tooManyArguments', - data: { - expectedArguments, - providedArguments, - }, - ...extra, - }; -} + return { + messageId: 'tooManyArguments', + data: { + expectedArguments, + providedArguments, + }, + ...extra, + }; + } -function encodedMessage(expected: number, provided: number, secondaryLocations: IssueLocation[]) { - const testCaseError = message(expected, provided); + function encodedMessage(expected: number, provided: number, secondaryLocations: IssueLocation[]) { + const testCaseError = message(expected, provided); - return JSON.stringify({ - message: `This function expects ${testCaseError.data?.expectedArguments}, but ${testCaseError.data?.providedArguments} provided.`, - secondaryLocations, - }); -} + return JSON.stringify({ + message: `This function expects ${testCaseError.data?.expectedArguments}, but ${testCaseError.data?.providedArguments} provided.`, + secondaryLocations, + }); + } +}); diff --git a/packages/jsts/tests/tools/helpers/index.ts b/packages/jsts/tests/tools/helpers/index.ts deleted file mode 100644 index 34a9f73f86e..00000000000 --- a/packages/jsts/tests/tools/helpers/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SonarQube JavaScript Plugin - * Copyright (C) 2011-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Sonar Source-Available License for more details. - * - * You should have received a copy of the Sonar Source-Available License - * along with this program; if not, see https://sonarsource.com/license/ssal/ - */ -export * from './parsing.js'; -export * from './input.js'; diff --git a/packages/jsts/tests/tools/testers/babel/index.ts b/packages/jsts/tests/tools/testers/babel/index.ts deleted file mode 100644 index 8d9e055ed72..00000000000 --- a/packages/jsts/tests/tools/testers/babel/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SonarQube JavaScript Plugin - * Copyright (C) 2011-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Sonar Source-Available License for more details. - * - * You should have received a copy of the Sonar Source-Available License - * along with this program; if not, see https://sonarsource.com/license/ssal/ - */ -export * from './tester.js'; diff --git a/packages/jsts/tests/tools/testers/babel/tester.ts b/packages/jsts/tests/tools/testers/babel/tester.ts deleted file mode 100644 index b27304dae68..00000000000 --- a/packages/jsts/tests/tools/testers/babel/tester.ts +++ /dev/null @@ -1,39 +0,0 @@ -/* - * SonarQube JavaScript Plugin - * Copyright (C) 2011-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Sonar Source-Available License for more details. - * - * You should have received a copy of the Sonar Source-Available License - * along with this program; if not, see https://sonarsource.com/license/ssal/ - */ -import { NodeRuleTester } from '../rule-tester.js'; -import { fileURLToPath } from 'node:url'; - -export function BabelRuleTester() { - return new NodeRuleTester({ - // we use babel to parse JSX syntax - parser: fileURLToPath(import.meta.resolve('@babel/eslint-parser')), - parserOptions: { - ecmaVersion: 2015, - requireConfigFile: false, - babelOptions: { - targets: 'defaults', - presets: ['@babel/preset-react', '@babel/preset-flow', '@babel/preset-env'], - plugins: [['@babel/plugin-proposal-decorators', { version: '2022-03' }]], - babelrc: false, - configFile: false, - parserOpts: { - allowReturnOutsideFunction: true, - }, - }, - }, - }); -} diff --git a/packages/jsts/tests/tools/testers/comment-based/checker.ts b/packages/jsts/tests/tools/testers/comment-based/checker.ts index efcd14d1d51..e3b1a00130a 100644 --- a/packages/jsts/tests/tools/testers/comment-based/checker.ts +++ b/packages/jsts/tests/tools/testers/comment-based/checker.ts @@ -16,23 +16,22 @@ */ import fs from 'fs'; import path from 'path'; -import { Rule } from 'eslint'; -import { NodeRuleTester } from '../rule-tester.js'; +import { Rule, RuleTester } from 'eslint'; import { hasSonarRuntimeOption } from '../../../../src/linter/parameters/sonar-runtime.js'; import { extractExpectations } from './framework.js'; -import { join, dirname } from 'node:path'; +import parser from './parser.js'; /** * Checks that a rule raises the issues declared as comment-based expectations on fixture files. * These fixtures are to be found in the rule directory and should be named as `*.fixture.`. * The directory can include options (`cb.options.json`) to configure the rule behaviour. */ -export function check(ruleId: string, ruleModule: Rule.RuleModule, ruleDir: string) { +export function check(ruleModule: Rule.RuleModule, ruleDir: string) { /** * Loading this file's `parseForESLint()` function into ESLint's rule tester. */ - const ruleTester = new NodeRuleTester({ - parser: join(dirname(import.meta.filename), 'parser.ts'), + const ruleTester = new RuleTester({ + languageOptions: { parser }, }); const fixtures = []; @@ -49,7 +48,8 @@ export function check(ruleId: string, ruleModule: Rule.RuleModule, ruleDir: stri const { errors, output } = extractExpectations( code, fixture, - hasSonarRuntimeOption(ruleModule, ruleId) && options.includes('sonar-runtime'), + hasSonarRuntimeOption(ruleModule.meta?.schema || undefined) && + options.includes('sonar-runtime'), ); const tests = { diff --git a/packages/jsts/tests/tools/testers/comment-based/fixtures/count.js b/packages/jsts/tests/tools/testers/comment-based/fixtures/count.js deleted file mode 100644 index 8ff3622be50..00000000000 --- a/packages/jsts/tests/tools/testers/comment-based/fixtures/count.js +++ /dev/null @@ -1 +0,0 @@ -alert(msg); // Noncompliant 2 diff --git a/packages/jsts/tests/tools/testers/comment-based/fixtures/mix.js b/packages/jsts/tests/tools/testers/comment-based/fixtures/mix.js deleted file mode 100644 index b317df9a937..00000000000 --- a/packages/jsts/tests/tools/testers/comment-based/fixtures/mix.js +++ /dev/null @@ -1 +0,0 @@ -alert(msg); // Noncompliant 2 {{Expected error message}} diff --git a/packages/jsts/tests/tools/testers/comment-based/framework.test.ts b/packages/jsts/tests/tools/testers/comment-based/framework.test.ts index 22e946ff837..0ac10dc444f 100644 --- a/packages/jsts/tests/tools/testers/comment-based/framework.test.ts +++ b/packages/jsts/tests/tools/testers/comment-based/framework.test.ts @@ -48,18 +48,6 @@ describe('Comment-based Testing Framework', () => { }); }); - it('issue count', async () => { - expect(await assertions('count.js')).toMatchObject({ errors: [{ line: 1 }, { line: 1 }] }); - }); - - it('mixing message and count', async () => { - const error = await assertions('mix.js').catch(err => err); - expect(error.message).toEqual( - 'Error, you can not specify issue count and messages at line 1, you have to choose either:' + - '\n Noncompliant 2\nor\n Noncompliant {{Expected error message}}\n', - ); - }); - it('primary', async () => { expect(await assertions('primary.js')).toMatchObject({ errors: [ diff --git a/packages/jsts/tests/tools/testers/comment-based/framework.ts b/packages/jsts/tests/tools/testers/comment-based/framework.ts index 01106122bde..7da1eb5e7d2 100644 --- a/packages/jsts/tests/tools/testers/comment-based/framework.ts +++ b/packages/jsts/tests/tools/testers/comment-based/framework.ts @@ -30,14 +30,14 @@ * @see https://github.com/SonarSource/sonar-analyzer-commons/tree/master/test-commons#noncompliant-format */ -import { NodeRuleTester } from '../rule-tester.js'; +import { RuleTester } from 'eslint'; import { encodeContents } from '../../../../src/rules/helpers/location.js'; import { FileIssues } from './helpers/file.js'; import { LineIssues } from './helpers/issues.js'; import { Change, QuickFix } from './helpers/quickfixes.js'; interface ExpectationsResult { - errors: NodeRuleTester.TestCaseError[]; + errors: RuleTester.TestCaseError[]; output: string | null; } /** @@ -67,7 +67,7 @@ export function extractExpectations( result, expectedIssues, ); - const error: NodeRuleTester.TestCaseError = { + const error: RuleTester.TestCaseError = { ...suggestions, ...(primary?.range || { line }), }; @@ -100,7 +100,7 @@ export function extractExpectations( } interface Suggestions { - suggestions?: NodeRuleTester.SuggestionOutput[]; + suggestions?: RuleTester.SuggestionOutput[]; } /** @@ -117,7 +117,7 @@ function applyQuickFixes( result: ExpectationsResult, issues: LineIssues[], ): Suggestions { - const suggestions: NodeRuleTester.SuggestionOutput[] = []; + const suggestions: RuleTester.SuggestionOutput[] = []; for (const quickfix of quickfixes) { const lines = (quickfix.mandatory ? result.output : fileContent).split(/\n/); const { description: desc, changes } = quickfix; @@ -146,7 +146,7 @@ function applyQuickFixes( if (quickfix.mandatory) { result.output = output; } else { - const suggestion: NodeRuleTester.SuggestionOutput = { output }; + const suggestion: RuleTester.SuggestionOutput = { output }; if (desc) { suggestion.desc = desc; } diff --git a/packages/jsts/tests/tools/testers/comment-based/helpers/issues.ts b/packages/jsts/tests/tools/testers/comment-based/helpers/issues.ts index 61688bcb820..b645db950cd 100644 --- a/packages/jsts/tests/tools/testers/comment-based/helpers/issues.ts +++ b/packages/jsts/tests/tools/testers/comment-based/helpers/issues.ts @@ -23,8 +23,6 @@ const START_WITH_NON_COMPLIANT = /^ *Noncompliant/i; const NON_COMPLIANT_PATTERN = RegExp( ' *Noncompliant' + LINE_ADJUSTMENT + - // issue count, ex: 2 - '(?: +(?\\d+))?' + // quickfixes, ex: [[qf1,qf2]] ' *(?:' + QUICKFIX_ID + @@ -86,11 +84,7 @@ export function extractLineIssues(file: FileIssues, comment: Comment) { throw new Error(`Invalid comment format at line ${comment.line}: ${comment.value}`); } const effectiveLine = extractEffectiveLine(comment.line, matcher); - const messages = extractIssueCountOrMessages( - comment.line, - matcher.groups?.issueCount, - matcher.groups?.messages, - ); + const messages = extractMessages(matcher.groups?.messages); const lineIssues = new LineIssues( effectiveLine, messages, @@ -105,23 +99,12 @@ export function extractLineIssues(file: FileIssues, comment: Comment) { } } -function extractIssueCountOrMessages( - line: number, - issueCountGroup: string | undefined, - messageGroup: string | undefined, -) { - if (messageGroup) { - if (issueCountGroup) { - throw new Error( - `Error, you can not specify issue count and messages at line ${line}, you have to choose either:` + - `\n Noncompliant ${issueCountGroup}\nor\n Noncompliant ${messageGroup}\n`, - ); - } +function extractMessages(messageGroup: string | undefined) { + if (typeof messageGroup !== 'undefined') { const messageContent = messageGroup.trim(); return messageContent .substring('{{'.length, messageContent.length - '}}'.length) .split(/\}\} *\{\{/); } - const issueCount = issueCountGroup ? parseInt(issueCountGroup) : 1; - return new Array(issueCount); + return ['']; } diff --git a/packages/jsts/tests/tools/testers/comment-based/parser.ts b/packages/jsts/tests/tools/testers/comment-based/parser.ts index 461228bffc9..da8246b959e 100644 --- a/packages/jsts/tests/tools/testers/comment-based/parser.ts +++ b/packages/jsts/tests/tools/testers/comment-based/parser.ts @@ -65,3 +65,5 @@ function languageFromFile(fileContent: string, filePath: string): JsTsLanguage { return 'js'; } } + +export default { parseForESLint }; diff --git a/packages/jsts/tests/tools/testers/typescript/fixtures/placeholder.tsx b/packages/jsts/tests/tools/testers/fixtures/placeholder.tsx similarity index 100% rename from packages/jsts/tests/tools/testers/typescript/fixtures/placeholder.tsx rename to packages/jsts/tests/tools/testers/fixtures/placeholder.tsx diff --git a/packages/jsts/tests/tools/testers/javascript/fixtures/tsconfig.json b/packages/jsts/tests/tools/testers/fixtures/tsconfig.json similarity index 72% rename from packages/jsts/tests/tools/testers/javascript/fixtures/tsconfig.json rename to packages/jsts/tests/tools/testers/fixtures/tsconfig.json index 623cf52a39b..96301556862 100644 --- a/packages/jsts/tests/tools/testers/javascript/fixtures/tsconfig.json +++ b/packages/jsts/tests/tools/testers/fixtures/tsconfig.json @@ -3,5 +3,5 @@ "allowJs": true, "noImplicitAny": true, }, - "files": ["placeholder.js"] + "files": ["placeholder.tsx"] } diff --git a/packages/jsts/tests/tools/testers/javascript/fixtures/placeholder.js b/packages/jsts/tests/tools/testers/javascript/fixtures/placeholder.js deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/jsts/tests/tools/testers/javascript/index.ts b/packages/jsts/tests/tools/testers/javascript/index.ts deleted file mode 100644 index 8d9e055ed72..00000000000 --- a/packages/jsts/tests/tools/testers/javascript/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SonarQube JavaScript Plugin - * Copyright (C) 2011-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Sonar Source-Available License for more details. - * - * You should have received a copy of the Sonar Source-Available License - * along with this program; if not, see https://sonarsource.com/license/ssal/ - */ -export * from './tester.js'; diff --git a/packages/jsts/tests/tools/testers/javascript/tester.ts b/packages/jsts/tests/tools/testers/javascript/tester.ts deleted file mode 100644 index 9a503e3e50e..00000000000 --- a/packages/jsts/tests/tools/testers/javascript/tester.ts +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SonarQube JavaScript Plugin - * Copyright (C) 2011-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Sonar Source-Available License for more details. - * - * You should have received a copy of the Sonar Source-Available License - * along with this program; if not, see https://sonarsource.com/license/ssal/ - */ -import { Rule } from 'eslint'; -import { NodeRuleTester } from '../rule-tester.js'; -import path from 'path'; -import { fileURLToPath } from 'node:url'; - -const parser = fileURLToPath(import.meta.resolve('@typescript-eslint/parser')); - -const parserOptions = { - ecmaVersion: 2018, - sourceType: 'module', - project: path.resolve(`${import.meta.dirname}/fixtures/tsconfig.json`), -}; - -const env = { - es6: true, -}; - -const placeHolderFilePath = path.resolve(`${import.meta.dirname}/fixtures/placeholder.js`); - -/** - * Rule tester for JavaScript, using @typescript-eslint parser. - */ -class JavaScriptRuleTester extends NodeRuleTester { - constructor() { - super({ - env, - parser, - parserOptions, - }); - } - - run( - name: string, - rule: Rule.RuleModule, - tests: { - valid?: NodeRuleTester.ValidTestCase[]; - invalid?: NodeRuleTester.InvalidTestCase[]; - }, - ): void { - const setFilename = test => { - if (!test.filename) { - test.filename = placeHolderFilePath; - } - }; - - tests.valid.forEach(setFilename); - tests.invalid.forEach(setFilename); - - super.run(name, rule, tests); - } -} - -export { JavaScriptRuleTester }; diff --git a/packages/jsts/tests/tools/testers/rule-tester.ts b/packages/jsts/tests/tools/testers/rule-tester.ts index 5902399ac7f..5b246887b01 100644 --- a/packages/jsts/tests/tools/testers/rule-tester.ts +++ b/packages/jsts/tests/tools/testers/rule-tester.ts @@ -14,10 +14,89 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { RuleTester } from 'eslint'; -import { describe, it } from 'node:test'; +import { RuleTester as ESLintRuleTester } from 'eslint'; +import type { Linter, Rule } from 'eslint'; +import path from 'path'; +import parser from '@typescript-eslint/parser'; +import globals from 'globals'; +import merge from 'lodash.merge'; -(RuleTester as any).describe = describe; -(RuleTester as any).it = it; +type Tests = { + valid: (string | ESLintRuleTester.ValidTestCase)[]; + invalid: ESLintRuleTester.InvalidTestCase[]; +}; -export { RuleTester as NodeRuleTester }; +const baseLanguageOptions: Linter.LanguageOptions = { + ecmaVersion: 2018, + sourceType: 'module', + globals: { + ...globals.es2025, + }, + parserOptions: { + // The single run makes that typescript-eslint uses normal programs instead of use watch programs + // We need watch programs for replace contents of the placeholder file in the program + // https://github.com/typescript-eslint/typescript-eslint/blob/d24a82854d06089cbd2a8801f2982fd4781f3701/packages/typescript-estree/src/parseSettings/inferSingleRun.ts#L44 + disallowAutomaticSingleRunInference: true, + ecmaFeatures: { + jsx: true, + }, + }, +} as const; + +const tsParserLanguageOptions: Linter.LanguageOptions = { + parser, +}; + +const typeCheckingLanguageOptions: Linter.LanguageOptions = { + parserOptions: { + project: path.resolve(`${import.meta.dirname}/fixtures/tsconfig.json`), + }, +} as const; + +const placeHolderFilePath = path.resolve(`${import.meta.dirname}/fixtures/placeholder.tsx`); + +/** + * Rule tester for JavaScript, using ESLint default parser (espree). + */ +class DefaultParserRuleTester extends ESLintRuleTester { + constructor(options?: Linter.LanguageOptions) { + super({ + files: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'], + languageOptions: merge({}, baseLanguageOptions, options), + }); + } + + run(name: string, rule: Rule.RuleModule, tests: Tests): void { + const setFilename = test => { + if (!test.filename) { + test.filename = placeHolderFilePath; + } + }; + + tests.valid.forEach(setFilename); + tests.invalid.forEach(setFilename); + + super.run(name, rule, tests); + } +} + +/** + * Rule tester for JS/TS, using @typescript-eslint parser. + */ +class NoTypeCheckingRuleTester extends DefaultParserRuleTester { + constructor(options?: Linter.LanguageOptions) { + super(merge({}, tsParserLanguageOptions, options)); + } +} + +/** + * Rule tester for JS/TS, using @typescript-eslint parser with type-checking. + */ +class RuleTester extends NoTypeCheckingRuleTester { + constructor(options?: Linter.LanguageOptions) { + super(merge({}, typeCheckingLanguageOptions, options)); + } +} + +export { RuleTester, DefaultParserRuleTester, NoTypeCheckingRuleTester }; +export type { Tests }; diff --git a/packages/jsts/tests/tools/testers/typescript/fixtures/tsconfig.json b/packages/jsts/tests/tools/testers/typescript/fixtures/tsconfig.json deleted file mode 100644 index 17e602e5f01..00000000000 --- a/packages/jsts/tests/tools/testers/typescript/fixtures/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "compilerOptions": { - "target": "es2018", - }, - "files": ["placeholder.tsx"] -} diff --git a/packages/jsts/tests/tools/testers/typescript/index.ts b/packages/jsts/tests/tools/testers/typescript/index.ts deleted file mode 100644 index 8d9e055ed72..00000000000 --- a/packages/jsts/tests/tools/testers/typescript/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SonarQube JavaScript Plugin - * Copyright (C) 2011-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Sonar Source-Available License for more details. - * - * You should have received a copy of the Sonar Source-Available License - * along with this program; if not, see https://sonarsource.com/license/ssal/ - */ -export * from './tester.js'; diff --git a/packages/jsts/tests/tools/testers/typescript/tester.ts b/packages/jsts/tests/tools/testers/typescript/tester.ts deleted file mode 100644 index 90383d640f6..00000000000 --- a/packages/jsts/tests/tools/testers/typescript/tester.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SonarQube JavaScript Plugin - * Copyright (C) 2011-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Sonar Source-Available License for more details. - * - * You should have received a copy of the Sonar Source-Available License - * along with this program; if not, see https://sonarsource.com/license/ssal/ - */ -import { Rule } from 'eslint'; -import { NodeRuleTester } from '../rule-tester.js'; -import path from 'path'; -import { fileURLToPath } from 'node:url'; - -const dirname = path.dirname(fileURLToPath(import.meta.url)); - -const parser = fileURLToPath(import.meta.resolve('@typescript-eslint/parser')); - -const parserOptions = { - ecmaVersion: 2018, - sourceType: 'module', - project: path.resolve(`${dirname}/fixtures/tsconfig.json`), -}; - -const env = { - es6: true, -}; - -const placeHolderFilePath = path.resolve(`${dirname}/fixtures/placeholder.tsx`); - -/** - * Rule tester for Typescript, using @typescript-eslint parser, making sure that type information is present. - * It will also assert that no issues is raised when there are no type information. - */ -class TypeScriptRuleTester extends NodeRuleTester { - constructor() { - super({ - env, - parser, - parserOptions, - }); - } - - run( - name: string, - rule: Rule.RuleModule, - tests: { - valid?: NodeRuleTester.ValidTestCase[]; - invalid?: NodeRuleTester.InvalidTestCase[]; - }, - ): void { - const setFilename = test => { - if (!test.filename) { - test.filename = placeHolderFilePath; - } - }; - - tests.valid.forEach(setFilename); - tests.invalid.forEach(setFilename); - - super.run(name, rule, tests); - } -} - -export { TypeScriptRuleTester }; From 4ebe8faa1ae84cd9a049c76d1add457ea7d8c6bf Mon Sep 17 00:00:00 2001 From: Victor Diez Date: Fri, 20 Dec 2024 15:22:47 +0100 Subject: [PATCH 2/8] JS-491 Upgrade to ESLint 9 API --- esbuild.mjs | 2 +- .../it/plugin/HtmlAnalysisTest.java | 7 +- .../it/plugin/SonarJsIntegrationTest.java | 12 +- package-lock.json | 2645 ++++++----------- package.json | 19 +- packages/html/tests/analysis/analyzer.test.ts | 2 +- packages/html/tests/builder/build.test.ts | 6 +- .../jsts/src/embedded/analysis/analyzer.ts | 6 +- packages/jsts/src/embedded/builder/build.ts | 14 +- packages/jsts/src/linter/bundle-loader.ts | 77 - .../jsts/src/linter/config/linter-config.ts | 50 +- .../jsts/src/linter/config/rule-config.ts | 15 +- packages/jsts/src/linter/issues/decode.ts | 2 +- packages/jsts/src/linter/issues/extract.ts | 2 +- packages/jsts/src/linter/issues/message.ts | 2 +- packages/jsts/src/linter/issues/transform.ts | 6 +- .../src/linter/parameters/helpers/index.ts | 17 - .../src/linter/parameters/sonar-context.ts | 14 +- .../src/linter/parameters/sonar-runtime.ts | 19 +- .../jsts/src/linter/quickfixes/messages.ts | 2 +- .../jsts/src/linter/quickfixes/transform.ts | 6 +- .../linter/visitors/symbol-highlighting.ts | 2 +- packages/jsts/src/linter/wrapper.ts | 98 +- packages/jsts/src/parsers/options.ts | 5 + packages/jsts/src/rules/S3776/rule.ts | 3 +- packages/jsts/src/rules/S3801/rule.ts | 27 +- .../rules/helpers/decorators/interceptor.ts | 5 - packages/jsts/tests/analysis/analyzer.test.ts | 72 +- packages/jsts/tests/builders/build.test.ts | 2 +- .../jsts/tests/linter/bundle-loader.test.ts | 79 - .../tests/linter/config/linter-config.test.ts | 38 +- .../tests/linter/config/rule-config.test.ts | 16 +- .../linter/fixtures/wrapper/custom-rule.js | 32 - packages/jsts/tests/linter/index.test.ts | 4 +- .../jsts/tests/linter/issues/message.test.ts | 12 +- .../tests/linter/issues/transform.test.ts | 73 +- .../linter/parameters/helpers/schema.test.ts | 47 - .../linter/parameters/sonar-context.test.ts | 10 +- .../linter/parameters/sonar-runtime.test.ts | 10 +- .../tests/linter/quickfixes/transform.test.ts | 60 +- .../jsts/tests/linter/visitors/cpd.test.ts | 2 +- .../linter/visitors/metrics/classes.test.ts | 2 +- .../linter/visitors/metrics/comments.test.ts | 2 +- .../linter/visitors/metrics/compute.test.ts | 2 +- .../metrics/cyclomatic-complexity.test.ts | 2 +- .../visitors/metrics/executable-lines.test.ts | 2 +- .../linter/visitors/metrics/functions.test.ts | 2 +- .../visitors/metrics/helpers/counter.test.ts | 2 +- .../visitors/metrics/helpers/tokens.test.ts | 2 +- .../linter/visitors/metrics/ncloc.test.ts | 2 +- .../linter/visitors/metrics/nosonar.test.ts | 2 +- .../visitors/metrics/statements.test.ts | 2 +- .../visitors/symbol-highlighting.test.ts | 11 +- .../visitors/syntax-highlighting.test.ts | 2 +- .../tests/linter/visitors/visitor.test.ts | 2 +- packages/jsts/tests/linter/wrapper.test.ts | 46 +- packages/jsts/tests/parsers/options.test.ts | 1 + packages/jsts/tests/rules/helpers/ast.test.ts | 32 +- .../jsts/tests/rules/helpers/aws/cdk.test.ts | 247 +- .../jsts/tests/rules/helpers/aws/s3.test.ts | 4 +- .../helpers/decorators/interceptor.test.ts | 13 +- .../jsts/tests/rules/helpers/express.test.ts | 6 +- .../rules/helpers/regex/rule-template.test.ts | 296 +- packages/jsts/tests/rules/index.test.ts | 20 +- .../rules/typescript-eslint/sanitize.test.ts | 20 +- packages/jsts/tests/tools/index.ts | 18 - .../rule/no-missing-sonar-runtime.test.ts | 7 +- .../tools/sonar-runtime/sonar-runtime.test.ts | 8 +- packages/ruling/tests/tools/testProject.ts | 25 +- packages/yaml/tests/analysis/analyzer.test.ts | 7 +- packages/yaml/tests/builder/build.test.ts | 24 +- packages/yaml/tests/builder/patch.test.ts | 6 +- .../org/sonar/javascript/checks/S4275.java | 29 +- .../org/sonar/javascript/checks/S6418.java | 4 +- .../javascript/schemas/S3776-schema.json | 3 +- .../javascript/schemas/S6418-schema.json | 19 + .../javascript/checks/CheckListTest.java | 2 +- .../sonar/javascript/checks/S4275Test.java | 33 +- .../sonar/javascript/checks/S6418Test.java | 2 +- .../analysis/TsConfigProviderTest.java | 5 +- tools/templates/ts/rule.cbtest.template | 2 +- .../@stylistic__eslint-plugin-ts/index.d.ts | 5 + 82 files changed, 1735 insertions(+), 2708 deletions(-) delete mode 100755 packages/jsts/src/linter/bundle-loader.ts delete mode 100644 packages/jsts/src/linter/parameters/helpers/index.ts delete mode 100755 packages/jsts/tests/linter/bundle-loader.test.ts delete mode 100644 packages/jsts/tests/linter/fixtures/wrapper/custom-rule.js delete mode 100644 packages/jsts/tests/linter/parameters/helpers/schema.test.ts delete mode 100644 packages/jsts/tests/tools/index.ts create mode 100644 sonar-plugin/javascript-checks/src/main/resources/org/sonar/l10n/javascript/rules/javascript/schemas/S6418-schema.json rename packages/jsts/src/linter/parameters/helpers/schema.ts => sonar-plugin/javascript-checks/src/test/java/org/sonar/javascript/checks/S4275Test.java (53%) create mode 100644 typings/@stylistic__eslint-plugin-ts/index.d.ts diff --git a/esbuild.mjs b/esbuild.mjs index fd8a49363f7..af68cdb1e8a 100644 --- a/esbuild.mjs +++ b/esbuild.mjs @@ -26,7 +26,7 @@ await esbuild.build({ // we mark this file as external because it does not exist on EsLint any more and in any case // the code never reaches this dynamic require as this is a fallback if 'eslint/use-at-your-own-risk' // does not exist. we need to keep an eye on this in the future. - external: ['eslint/lib/util/glob-util'], + external: ['eslint/lib/util/glob-util', 'jiti'], platform: 'node', minify: true, plugins: [ diff --git a/its/plugin/tests/src/test/java/com/sonar/javascript/it/plugin/HtmlAnalysisTest.java b/its/plugin/tests/src/test/java/com/sonar/javascript/it/plugin/HtmlAnalysisTest.java index ecaf1e79ed5..ca54618f8c2 100644 --- a/its/plugin/tests/src/test/java/com/sonar/javascript/it/plugin/HtmlAnalysisTest.java +++ b/its/plugin/tests/src/test/java/com/sonar/javascript/it/plugin/HtmlAnalysisTest.java @@ -22,9 +22,6 @@ import static org.assertj.core.api.Assertions.tuple; import com.sonar.orchestrator.Orchestrator; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.Map; import java.util.UUID; import org.junit.jupiter.api.Test; @@ -33,12 +30,12 @@ import org.sonarqube.ws.Issues.Issue; @ExtendWith(OrchestratorStarter.class) -public class HtmlAnalysisTest { +class HtmlAnalysisTest { private static final Orchestrator orchestrator = OrchestratorStarter.ORCHESTRATOR; @Test - void should_raise_issues_in_html_files() throws IOException { + void should_raise_issues_in_html_files() { var projectKey = "html-project"; var uniqueProjectKey = projectKey + UUID.randomUUID(); var build = getSonarScanner() diff --git a/its/plugin/tests/src/test/java/com/sonar/javascript/it/plugin/SonarJsIntegrationTest.java b/its/plugin/tests/src/test/java/com/sonar/javascript/it/plugin/SonarJsIntegrationTest.java index 1d0d054abc5..9b85098abaf 100644 --- a/its/plugin/tests/src/test/java/com/sonar/javascript/it/plugin/SonarJsIntegrationTest.java +++ b/its/plugin/tests/src/test/java/com/sonar/javascript/it/plugin/SonarJsIntegrationTest.java @@ -82,7 +82,10 @@ void test() throws Exception { extractArchive(fileToExtract, temp); bridge.start(temp); assertStatus(bridge); - bridge.request(gson.toJson(InitLinter.build("S1481")), "init-linter"); + bridge.request( + gson.toJson(InitLinter.build("S1481", temp.toAbsolutePath().toString())), + "init-linter" + ); assertAnalyzeJs(bridge); } finally { bridge.stop(); @@ -91,8 +94,7 @@ void test() throws Exception { private void assertAnalyzeJs(Bridge bridge) throws IOException, InterruptedException { AnalysisRequest r = new AnalysisRequest(); - r.fileContent = - "function foo() { \n" + " var a; \n" + " var c; // NOSONAR\n" + " var b = 42; \n" + "} \n"; + r.fileContent = "function foo() { \n var a; \n var c; // NOSONAR\n var b = 42; \n} \n"; r.filePath = temp.resolve("file.js").toAbsolutePath().toString(); String response = bridge.request(gson.toJson(r), "analyze-js"); JsonObject jsonObject = gson.fromJson(response, JsonObject.class); @@ -231,12 +233,14 @@ static class InitLinter { List rules = new ArrayList<>(); List environments = new ArrayList<>(); List globals = new ArrayList<>(); + String baseDir; - static InitLinter build(String rule) { + static InitLinter build(String rule, String baseDir) { InitLinter initLinter = new InitLinter(); Rule rule1 = new Rule(); rule1.key = rule; initLinter.rules.add(rule1); + initLinter.baseDir = baseDir; return initLinter; } } diff --git a/package-lock.json b/package-lock.json index edc9f0006af..71c0d06e681 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,23 +16,26 @@ "@babel/preset-flow": "7.25.9", "@babel/preset-react": "7.26.3", "@eslint-community/regexpp": "4.12.1", - "@typescript-eslint/eslint-plugin": "7.18.0", - "@typescript-eslint/parser": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@stylistic/eslint-plugin-ts": "2.12.0", + "@types/lodash.merge": "^4.6.9", + "@typescript-eslint/eslint-plugin": "8.18.0", + "@typescript-eslint/parser": "8.18.0", + "@typescript-eslint/utils": "8.18.0", "builtin-modules": "3.3.0", "bytes": "3.1.2", - "eslint": "8.57.1", + "eslint": "9.17.0", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-react": "7.37.2", - "eslint-plugin-react-hooks": "4.6.2", + "eslint-plugin-react-hooks": "5.1.0", "eslint-scope": "8.2.0", "express": "4.21.2", "form-data": "4.0.1", "functional-red-black-tree": "1.0.1", + "globals": "15.13.0", "htmlparser2": "9.1.0", "jsx-ast-utils": "3.3.5", - "lodash.clone": "4.5.0", + "lodash.merge": "^4.6.2", "minimatch": "9.0.5", "module-alias": "2.2.3", "postcss": "8.4.49", @@ -57,12 +60,10 @@ "@inquirer/prompts": "^7.1.0", "@types/babel__preset-env": "7.9.7", "@types/bytes": "3.1.5", - "@types/eslint": "8.56.12", "@types/eslint-scope": "3.7.7", "@types/estree": "1.0.6", "@types/express": "4.17.21", "@types/functional-red-black-tree": "1.0.6", - "@types/lodash.clone": "4.5.9", "@types/node": "22.10.2", "@types/semver": "7.5.8", "@types/tmp": "0.2.6", @@ -81,7 +82,7 @@ "memfs": "4.15.0", "mkdirp": "3.0.1", "node-fetch": "3.3.2", - "one-double-zero": "^1.0.0-beta.10", + "one-double-zero": "^1.0.0", "prettier": "3.4.2", "prettier-plugin-java": "2.6.5", "pretty-quick": "4.0.0", @@ -98,7 +99,6 @@ "version": "2.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -111,7 +111,6 @@ "version": "7.26.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/code-frame/-/code-frame-7.26.2.tgz", "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", @@ -122,10 +121,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", - "license": "MIT", + "version": "7.26.3", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/compat-data/-/compat-data-7.26.3.tgz", + "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", "engines": { "node": ">=6.9.0" } @@ -134,7 +132,6 @@ "version": "7.26.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/core/-/core-7.26.0.tgz", "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.0", @@ -164,7 +161,6 @@ "version": "6.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -173,7 +169,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/eslint-parser/-/eslint-parser-7.25.9.tgz", "integrity": "sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==", - "license": "MIT", "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", @@ -191,19 +186,17 @@ "version": "6.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", - "license": "MIT", + "version": "7.26.3", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -216,21 +209,7 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" }, "engines": { @@ -241,7 +220,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.25.9", "@babel/helper-validator-option": "^7.25.9", @@ -257,7 +235,6 @@ "version": "6.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -266,7 +243,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-member-expression-to-functions": "^7.25.9", @@ -287,19 +263,17 @@ "version": "6.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.9", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", - "license": "MIT", + "version": "7.26.3", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.1.1", + "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "engines": { @@ -313,7 +287,6 @@ "version": "6.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -322,7 +295,6 @@ "version": "0.6.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", - "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -338,7 +310,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", - "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" @@ -351,7 +322,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" @@ -364,7 +334,6 @@ "version": "7.26.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", @@ -381,7 +350,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", - "license": "MIT", "dependencies": { "@babel/types": "^7.25.9" }, @@ -393,7 +361,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -402,7 +369,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-wrap-function": "^7.25.9", @@ -419,7 +385,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", - "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.25.9", "@babel/helper-optimise-call-expression": "^7.25.9", @@ -432,24 +397,10 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", - "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" @@ -462,7 +413,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -471,7 +421,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -480,7 +429,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -489,7 +437,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", - "license": "MIT", "dependencies": { "@babel/template": "^7.25.9", "@babel/traverse": "^7.25.9", @@ -503,7 +450,6 @@ "version": "7.26.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/helpers/-/helpers-7.26.0.tgz", "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "license": "MIT", "dependencies": { "@babel/template": "^7.25.9", "@babel/types": "^7.26.0" @@ -513,12 +459,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", - "license": "MIT", + "version": "7.26.3", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "dependencies": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -531,7 +476,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/traverse": "^7.25.9" @@ -547,7 +491,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -562,7 +505,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -577,7 +519,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", @@ -594,7 +535,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/traverse": "^7.25.9" @@ -610,7 +550,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", - "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", @@ -627,7 +566,6 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -639,7 +577,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -654,7 +591,6 @@ "version": "7.26.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -669,7 +605,6 @@ "version": "7.26.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -684,7 +619,6 @@ "version": "7.26.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -699,7 +633,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -715,7 +648,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -730,7 +662,6 @@ "version": "7.18.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -746,7 +677,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -761,7 +691,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-remap-async-to-generator": "^7.25.9", @@ -778,7 +707,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", @@ -795,7 +723,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -810,7 +737,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -825,7 +751,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", - "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -841,7 +766,6 @@ "version": "7.26.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", - "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -857,7 +781,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-compilation-targets": "^7.25.9", @@ -873,11 +796,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/template": "^7.25.9" @@ -893,7 +823,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -908,7 +837,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -924,7 +852,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -939,7 +866,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -955,7 +881,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -967,12 +892,10 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", - "license": "MIT", + "version": "7.26.3", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -986,7 +909,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1001,7 +923,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz", "integrity": "sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/plugin-syntax-flow": "^7.25.9" @@ -1017,7 +938,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" @@ -1033,7 +953,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", - "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", @@ -1050,7 +969,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1065,7 +983,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1080,7 +997,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1095,7 +1011,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1110,7 +1025,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", - "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -1123,14 +1037,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", - "license": "MIT", + "version": "7.26.3", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1143,7 +1055,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", - "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", @@ -1161,7 +1072,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", - "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -1177,7 +1087,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -1193,7 +1102,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1208,7 +1116,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1223,7 +1130,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1238,7 +1144,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", - "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", @@ -1255,7 +1160,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-replace-supers": "^7.25.9" @@ -1271,7 +1175,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1286,7 +1189,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" @@ -1302,7 +1204,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1317,7 +1218,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", - "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -1333,7 +1233,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-create-class-features-plugin": "^7.25.9", @@ -1350,7 +1249,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1365,7 +1263,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1380,7 +1277,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-module-imports": "^7.25.9", @@ -1399,7 +1295,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", - "license": "MIT", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.25.9" }, @@ -1414,7 +1309,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -1430,7 +1324,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "regenerator-transform": "^0.15.2" @@ -1446,7 +1339,6 @@ "version": "7.26.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -1462,7 +1354,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1477,7 +1368,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1492,7 +1382,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" @@ -1508,7 +1397,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1523,7 +1411,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1538,7 +1425,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1550,11 +1436,10 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.9", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", - "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", + "version": "7.26.3", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz", + "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-create-class-features-plugin": "^7.25.9", @@ -1573,7 +1458,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -1588,7 +1472,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -1604,7 +1487,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -1620,7 +1502,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" @@ -1636,7 +1517,6 @@ "version": "7.26.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/preset-env/-/preset-env-7.26.0.tgz", "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.26.0", "@babel/helper-compilation-targets": "^7.25.9", @@ -1719,7 +1599,6 @@ "version": "6.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -1728,7 +1607,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/preset-flow/-/preset-flow-7.25.9.tgz", "integrity": "sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-validator-option": "^7.25.9", @@ -1745,7 +1623,6 @@ "version": "0.1.6-no-external-plugins", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -1757,9 +1634,8 @@ }, "node_modules/@babel/preset-react": { "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/preset-react/-/preset-react-7.26.3.tgz", "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-validator-option": "^7.25.9", @@ -1780,7 +1656,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-validator-option": "^7.25.9", @@ -1799,7 +1674,6 @@ "version": "7.26.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/runtime/-/runtime-7.26.0.tgz", "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1811,7 +1685,6 @@ "version": "7.25.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/template/-/template-7.25.9.tgz", "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.25.9", "@babel/parser": "^7.25.9", @@ -1822,16 +1695,15 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", - "license": "MIT", + "version": "7.26.4", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/types": "^7.26.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1839,11 +1711,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", - "license": "MIT", + "version": "7.26.3", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" @@ -1856,15 +1735,13 @@ "version": "0.2.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@chevrotain/cst-dts-gen": { "version": "11.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz", "integrity": "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@chevrotain/gast": "11.0.3", "@chevrotain/types": "11.0.3", @@ -1876,7 +1753,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@chevrotain/gast/-/gast-11.0.3.tgz", "integrity": "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@chevrotain/types": "11.0.3", "lodash-es": "4.17.21" @@ -1886,22 +1762,19 @@ "version": "11.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz", "integrity": "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==", - "dev": true, - "license": "Apache-2.0" + "dev": true }, "node_modules/@chevrotain/types": { "version": "11.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@chevrotain/types/-/types-11.0.3.tgz", "integrity": "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==", - "dev": true, - "license": "Apache-2.0" + "dev": true }, "node_modules/@chevrotain/utils": { "version": "11.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@chevrotain/utils/-/utils-11.0.3.tgz", "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==", - "dev": true, - "license": "Apache-2.0" + "dev": true }, "node_modules/@csstools/css-parser-algorithms": { "version": "2.7.1", @@ -1917,7 +1790,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "engines": { "node": "^14 || ^16 || >=18" }, @@ -1939,7 +1811,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "engines": { "node": "^14 || ^16 || >=18" } @@ -1958,7 +1829,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT", "engines": { "node": "^14 || ^16 || >=18" }, @@ -1981,7 +1851,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "engines": { "node": "^14 || ^16 || >=18" }, @@ -1997,7 +1866,6 @@ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "aix" @@ -2014,7 +1882,6 @@ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -2031,7 +1898,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -2048,7 +1914,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -2065,7 +1930,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -2082,7 +1946,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -2099,7 +1962,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -2116,7 +1978,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -2133,7 +1994,6 @@ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2150,7 +2010,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2167,7 +2026,6 @@ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2184,7 +2042,6 @@ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2201,7 +2058,6 @@ "mips64el" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2218,7 +2074,6 @@ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2235,7 +2090,6 @@ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2252,7 +2106,6 @@ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2269,7 +2122,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2286,7 +2138,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "netbsd" @@ -2303,7 +2154,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" @@ -2320,7 +2170,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" @@ -2337,7 +2186,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "sunos" @@ -2354,7 +2202,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -2371,7 +2218,6 @@ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -2388,7 +2234,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -2401,7 +2246,6 @@ "version": "4.4.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" }, @@ -2419,7 +2263,6 @@ "version": "3.4.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -2431,21 +2274,63 @@ "version": "4.12.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.9.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@eslint/core/-/core-0.9.1.tgz", + "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "license": "MIT", + "version": "3.2.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -2453,7 +2338,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -2463,22 +2348,17 @@ "version": "1.1.11", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, + "version": "14.0.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2488,7 +2368,6 @@ "version": "3.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2496,31 +2375,37 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", + "node_modules/@eslint/js": { + "version": "9.17.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@eslint/js/-/js-9.17.0.tgz", + "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "license": "MIT", + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.4", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz", + "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@gerrit0/mini-shiki": { - "version": "1.24.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@gerrit0/mini-shiki/-/mini-shiki-1.24.0.tgz", - "integrity": "sha512-eopM3SyeUZQZSBu1VCV8/d1LtJXDd0aMpLjyWpGkjD6ux3sNwoLNeuEb5xmiWVfQvFeMUXa1WTjh06lqm3KETA==", + "version": "1.24.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@gerrit0/mini-shiki/-/mini-shiki-1.24.1.tgz", + "integrity": "sha512-PNP/Gjv3VqU7z7DjRgO3F9Ok5frTKqtpV+LJW1RzMcr2zpRk0ulhEWnbcNGXzPC7BZyWMIHrkfQX2GZRfxrn6Q==", "dev": true, "dependencies": { "@shikijs/engine-oniguruma": "^1.24.0", @@ -2528,48 +2413,42 @@ "@shikijs/vscode-textmate": "^9.3.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "engines": { - "node": "*" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -2578,19 +2457,23 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "license": "BSD-3-Clause" + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@inquirer/checkbox": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.0.3.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@inquirer/checkbox/-/checkbox-4.0.3.tgz", "integrity": "sha512-CEt9B4e8zFOGtc/LYeQx5m8nfqQeG/4oNNv0PUvXGG0mys+wR/WbJ3B4KfSQ4Fcr3AQfpiuFOi3fVvmPfvNbxw==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.1", "@inquirer/figures": "^1.0.8", @@ -2607,10 +2490,9 @@ }, "node_modules/@inquirer/confirm": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.0.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@inquirer/confirm/-/confirm-5.1.0.tgz", "integrity": "sha512-osaBbIMEqVFjTX5exoqPXs6PilWQdjaLhGtMDXMXg/yxkHXNq43GlxGyTA35lK2HpzUgDN+Cjh/2AmqCN0QJpw==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.1", "@inquirer/type": "^3.0.1" @@ -2624,10 +2506,9 @@ }, "node_modules/@inquirer/core": { "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.1.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@inquirer/core/-/core-10.1.1.tgz", "integrity": "sha512-rmZVXy9iZvO3ZStEe/ayuuwIJ23LSF13aPMlLMTQARX6lGUBDHGV8UB5i9MRrfy0+mZwt5/9bdy8llszSD3NQA==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/figures": "^1.0.8", "@inquirer/type": "^3.0.1", @@ -2643,49 +2524,11 @@ "node": ">=18" } }, - "node_modules/@inquirer/core/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@inquirer/core/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/core/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@inquirer/editor": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.0.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@inquirer/editor/-/editor-4.2.0.tgz", "integrity": "sha512-Z3LeGsD3WlItDqLxTPciZDbGtm0wrz7iJGS/uUxSiQxef33ZrBq7LhsXg30P7xrWz1kZX4iGzxxj5SKZmJ8W+w==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.1", "@inquirer/type": "^3.0.1", @@ -2700,10 +2543,9 @@ }, "node_modules/@inquirer/expand": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.3.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@inquirer/expand/-/expand-4.0.3.tgz", "integrity": "sha512-MDszqW4HYBpVMmAoy/FA9laLrgo899UAga0itEjsYrBthKieDZNc0e16gdn7N3cQ0DSf/6zsTBZMuDYDQU4ktg==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.1", "@inquirer/type": "^3.0.1", @@ -2727,10 +2569,9 @@ }, "node_modules/@inquirer/input": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.0.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@inquirer/input/-/input-4.1.0.tgz", "integrity": "sha512-16B8A9hY741yGXzd8UJ9R8su/fuuyO2e+idd7oVLYjP23wKJ6ILRIIHcnXe8/6AoYgwRS2zp4PNsW/u/iZ24yg==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.1", "@inquirer/type": "^3.0.1" @@ -2744,10 +2585,9 @@ }, "node_modules/@inquirer/number": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.3.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@inquirer/number/-/number-3.0.3.tgz", "integrity": "sha512-HA/W4YV+5deKCehIutfGBzNxWH1nhvUC67O4fC9ufSijn72yrYnRmzvC61dwFvlXIG1fQaYWi+cqNE9PaB9n6Q==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.1", "@inquirer/type": "^3.0.1" @@ -2761,10 +2601,9 @@ }, "node_modules/@inquirer/password": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.3.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@inquirer/password/-/password-4.0.3.tgz", "integrity": "sha512-3qWjk6hS0iabG9xx0U1plwQLDBc/HA/hWzLFFatADpR6XfE62LqPr9GpFXBkLU0KQUaIXZ996bNG+2yUvocH8w==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.1", "@inquirer/type": "^3.0.1", @@ -2779,10 +2618,9 @@ }, "node_modules/@inquirer/prompts": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.2.0.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@inquirer/prompts/-/prompts-7.2.0.tgz", "integrity": "sha512-ZXYZ5oGVrb+hCzcglPeVerJ5SFwennmDOPfXq1WyeZIrPGySLbl4W6GaSsBFvu3WII36AOK5yB8RMIEEkBjf8w==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/checkbox": "^4.0.3", "@inquirer/confirm": "^5.1.0", @@ -2804,10 +2642,9 @@ }, "node_modules/@inquirer/rawlist": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.3.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@inquirer/rawlist/-/rawlist-4.0.3.tgz", "integrity": "sha512-5MhinSzfmOiZlRoPezfbJdfVCZikZs38ja3IOoWe7H1dxL0l3Z2jAUgbBldeyhhOkELdGvPlBfQaNbeLslib1w==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.1", "@inquirer/type": "^3.0.1", @@ -2822,10 +2659,9 @@ }, "node_modules/@inquirer/search": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.3.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@inquirer/search/-/search-3.0.3.tgz", "integrity": "sha512-mQTCbdNolTGvGGVCJSI6afDwiSGTV+fMLPEIMDJgIV6L/s3+RYRpxt6t0DYnqMQmemnZ/Zq0vTIRwoHT1RgcTg==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.1", "@inquirer/figures": "^1.0.8", @@ -2841,10 +2677,9 @@ }, "node_modules/@inquirer/select": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.3.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@inquirer/select/-/select-4.0.3.tgz", "integrity": "sha512-OZfKDtDE8+J54JYAFTUGZwvKNfC7W/gFCjDkcsO7HnTH/wljsZo9y/FJquOxMy++DY0+9l9o/MOZ8s5s1j5wmw==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.1", "@inquirer/figures": "^1.0.8", @@ -2875,7 +2710,6 @@ "version": "8.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -2892,7 +2726,6 @@ "version": "6.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -2900,11 +2733,21 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -2915,11 +2758,26 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "license": "ISC", "dependencies": { "minipass": "^7.0.4" }, @@ -2932,7 +2790,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, - "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -2945,7 +2802,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, - "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -2958,7 +2814,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -2975,7 +2830,6 @@ "version": "0.3.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2989,7 +2843,6 @@ "version": "3.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -2998,7 +2851,6 @@ "version": "1.2.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -3006,14 +2858,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "license": "MIT" + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3024,7 +2874,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@jsonjoy.com/base64/-/base64-1.1.2.tgz", "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.0" }, @@ -3037,11 +2886,10 @@ } }, "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", - "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "version": "1.1.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@jsonjoy.com/json-pack/-/json-pack-1.1.1.tgz", + "integrity": "sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/base64": "^1.1.1", "@jsonjoy.com/util": "^1.1.2", @@ -3064,7 +2912,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@jsonjoy.com/util/-/util-1.5.0.tgz", "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.0" }, @@ -3080,7 +2927,6 @@ "version": "5.1.1-v1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "license": "MIT", "dependencies": { "eslint-scope": "5.1.1" } @@ -3089,7 +2935,6 @@ "version": "5.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -3102,7 +2947,6 @@ "version": "4.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -3111,7 +2955,6 @@ "version": "2.1.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3124,7 +2967,6 @@ "version": "2.0.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", "engines": { "node": ">= 8" } @@ -3133,7 +2975,6 @@ "version": "1.2.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3146,7 +2987,6 @@ "version": "0.11.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -3155,32 +2995,27 @@ "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause" + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -3189,53 +3024,47 @@ "node_modules/@protobufjs/float": { "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause" + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" }, "node_modules/@protobufjs/path": { "version": "1.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "license": "BSD-3-Clause" + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "license": "MIT" + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==" }, "node_modules/@shikijs/engine-oniguruma": { - "version": "1.24.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@shikijs/engine-oniguruma/-/engine-oniguruma-1.24.0.tgz", - "integrity": "sha512-Eua0qNOL73Y82lGA4GF5P+G2+VXX9XnuUxkiUuwcxQPH4wom+tE39kZpBFXfUuwNYxHSkrSxpB1p4kyRW0moSg==", + "version": "1.24.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@shikijs/engine-oniguruma/-/engine-oniguruma-1.24.1.tgz", + "integrity": "sha512-KdrTIBIONWd+Xs61eh8HdIpfigtrseat9dpARvaOe2x0g/FNTbwbkGr3y92VSOVD1XotzEskh3v/nCzyWjkf7g==", "dev": true, "dependencies": { - "@shikijs/types": "1.24.0", + "@shikijs/types": "1.24.1", "@shikijs/vscode-textmate": "^9.3.0" } }, "node_modules/@shikijs/types": { - "version": "1.24.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@shikijs/types/-/types-1.24.0.tgz", - "integrity": "sha512-aptbEuq1Pk88DMlCe+FzXNnBZ17LCiLIGWAeCWhoFDzia5Q5Krx3DgnULLiouSdd6+LUM39XwXGppqYE0Ghtug==", + "version": "1.24.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@shikijs/types/-/types-1.24.1.tgz", + "integrity": "sha512-ZwZFbShFY/APfKNt3s9Gv8rhTm29GodSKsOW66X6N+HGsZuaHalE1VUEX4fv93UXHTZTLjb3uxn63F96RhGfXw==", "dev": true, "dependencies": { "@shikijs/vscode-textmate": "^9.3.0", @@ -3252,22 +3081,46 @@ "version": "0.27.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" + "dev": true + }, + "node_modules/@stylistic/eslint-plugin-ts": { + "version": "2.12.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.12.0.tgz", + "integrity": "sha512-JqoHGQCeW0dC3LN/7+ZRwTOCs3kBum2b4k7ovx+0RXeaDIINs5F+/Mp/NvTCPqDzUlBkd1HOaviKyaEWpKA7Yw==", + "dependencies": { + "@typescript-eslint/utils": "^8.13.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-ts/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, "node_modules/@types/babel__preset-env": { "version": "7.9.7", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/babel__preset-env/-/babel__preset-env-7.9.7.tgz", "integrity": "sha512-m63P4DQR9d0/g8GwRsmyizGqfCGWI6LVnuNg4OV8YhNM+VMBAepJ4394Z/rJA0pBYV+AXgFfHP4RiIlk9mYVVQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, - "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -3275,27 +3128,24 @@ }, "node_modules/@types/bytes": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@types/bytes/-/bytes-3.1.5.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/bytes/-/bytes-3.1.5.tgz", "integrity": "sha512-VgZkrJckypj85YxEsEavcMmmSOIzkUHqWmM4CCyia5dc54YwsXzJ5uT4fYxBQNEXx+oF1krlhgCbvfubXqZYsQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/eslint": { - "version": "8.56.12", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/eslint/-/eslint-8.56.12.tgz", - "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", + "version": "9.6.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -3306,7 +3156,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, - "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -3315,16 +3164,13 @@ "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true, - "license": "MIT" + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "node_modules/@types/express": { "version": "4.17.21", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -3337,7 +3183,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -3349,8 +3194,7 @@ "version": "1.0.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/functional-red-black-tree/-/functional-red-black-tree-1.0.6.tgz", "integrity": "sha512-h7W9Mjozzx+HA9L7CSKAm3dSCa9vBea2U5kWfDuXedAjOb/Sy7VXWL4qUi7H03IJvwHEJ/vf2P2agw9XNTWZxg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/hast": { "version": "3.0.4", @@ -3365,22 +3209,19 @@ "version": "2.0.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/http-errors/-/http-errors-2.0.4.tgz", "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, - "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -3390,7 +3231,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } @@ -3398,29 +3238,22 @@ "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "license": "MIT" + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, "node_modules/@types/lodash": { "version": "4.17.13", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/lodash/-/lodash-4.17.13.tgz", - "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", - "dev": true, - "license": "MIT" + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==" }, - "node_modules/@types/lodash.clone": { - "version": "4.5.9", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/lodash.clone/-/lodash.clone-4.5.9.tgz", - "integrity": "sha512-euFSUq+8csIliszqTBSMh7eU41/by1JPQhTNa2gq3dncxC2Z6s87bbzVB9UUBdYDbV+FV5whFDGxz6hOKTY/EQ==", - "dev": true, - "license": "MIT", + "node_modules/@types/lodash.merge": { + "version": "4.6.9", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/lodash.merge/-/lodash.merge-4.6.9.tgz", + "integrity": "sha512-23sHDPmzd59kUgWyKGiOMO2Qb9YtqRO/x4IhkgNUiPQ1+5MUVqi6bCZeq9nBJ17msjIMbEIO5u+XW4Kz6aGUhQ==", "dependencies": { "@types/lodash": "*" } @@ -3429,20 +3262,17 @@ "version": "1.3.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "license": "MIT" + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==" }, "node_modules/@types/node": { "version": "22.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/node/-/node-22.10.2.tgz", "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", - "license": "MIT", "dependencies": { "undici-types": "~6.20.0" } @@ -3450,36 +3280,31 @@ "node_modules/@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "license": "MIT" + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" }, "node_modules/@types/qs": { "version": "6.9.17", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/qs/-/qs-6.9.17.tgz", "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/semver": { "version": "7.5.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/semver/-/semver-7.5.8.tgz", "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, - "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -3490,7 +3315,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -3501,15 +3325,13 @@ "version": "2.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/tmp": { "version": "0.2.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/tmp/-/tmp-0.2.6.tgz", "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/unist": { "version": "3.0.3", @@ -3522,7 +3344,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/yargs/-/yargs-17.0.33.tgz", "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, - "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -3531,92 +3352,79 @@ "version": "21.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/yauzl": { "version": "2.10.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@types/yauzl/-/yauzl-2.10.3.tgz", "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "license": "MIT", + "version": "8.18.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz", + "integrity": "sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/type-utils": "8.18.0", + "@typescript-eslint/utils": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "version": "8.18.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/parser/-/parser-8.18.0.tgz", + "integrity": "sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==", + "dependencies": { + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/typescript-estree": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "license": "MIT", + "version": "8.18.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz", + "integrity": "sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3624,39 +3432,33 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "license": "MIT", + "version": "8.18.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz", + "integrity": "sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==", "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/typescript-estree": "8.18.0", + "@typescript-eslint/utils": "8.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", + "version": "8.18.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/types/-/types-8.18.0.tgz", + "integrity": "sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3664,66 +3466,62 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "license": "BSD-2-Clause", + "version": "8.18.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz", + "integrity": "sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "license": "MIT", + "version": "8.18.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/utils/-/utils-8.18.0.tgz", + "integrity": "sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/typescript-estree": "8.18.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "license": "MIT", + "version": "8.18.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz", + "integrity": "sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.18.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3731,28 +3529,20 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "license": "Apache-2.0", + "version": "4.2.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "license": "ISC" - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -3765,7 +3555,6 @@ "version": "8.14.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3777,7 +3566,6 @@ "version": "5.3.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -3787,7 +3575,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/aggregate-error/-/aggregate-error-4.0.1.tgz", "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, - "license": "MIT", "dependencies": { "clean-stack": "^4.0.0", "indent-string": "^5.0.0" @@ -3803,7 +3590,6 @@ "version": "6.12.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3846,7 +3632,6 @@ "version": "5.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", "engines": { "node": ">=8" } @@ -3855,7 +3640,6 @@ "version": "4.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3871,7 +3655,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3883,14 +3666,12 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/aria-query": { "version": "5.3.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/aria-query/-/aria-query-5.3.2.tgz", "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "license": "Apache-2.0", "engines": { "node": ">= 0.4" } @@ -3899,7 +3680,6 @@ "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -3914,14 +3694,12 @@ "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { "version": "3.1.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3941,7 +3719,6 @@ "version": "2.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", "engines": { "node": ">=8" } @@ -3950,7 +3727,6 @@ "version": "1.2.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3970,7 +3746,6 @@ "version": "1.2.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3990,7 +3765,6 @@ "version": "1.3.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -4008,7 +3782,6 @@ "version": "1.3.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -4026,7 +3799,6 @@ "version": "1.1.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4042,7 +3814,6 @@ "version": "1.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -4065,7 +3836,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/arrify/-/arrify-3.0.0.tgz", "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -4076,14 +3846,12 @@ "node_modules/ast-types-flow": { "version": "0.0.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "license": "MIT" + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "license": "MIT", "engines": { "node": ">=8" } @@ -4091,14 +3859,12 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -4113,7 +3879,6 @@ "version": "4.10.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/axe-core/-/axe-core-4.10.2.tgz", "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", - "license": "MPL-2.0", "engines": { "node": ">=4" } @@ -4122,7 +3887,6 @@ "version": "4.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/axobject-query/-/axobject-query-4.1.0.tgz", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "license": "Apache-2.0", "engines": { "node": ">= 0.4" } @@ -4131,7 +3895,6 @@ "version": "0.4.12", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.6.3", @@ -4145,7 +3908,6 @@ "version": "6.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -4154,7 +3916,6 @@ "version": "0.10.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.2", "core-js-compat": "^3.38.0" @@ -4167,7 +3928,6 @@ "version": "0.6.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", - "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.3" }, @@ -4178,15 +3938,13 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -4198,7 +3956,6 @@ "version": "1.20.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -4222,7 +3979,6 @@ "version": "2.6.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -4230,22 +3986,19 @@ "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/boolean": { "version": "3.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/boolean/-/boolean-3.2.0.tgz", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -4254,7 +4007,6 @@ "version": "3.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -4280,7 +4032,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001669", "electron-to-chromium": "^1.5.41", @@ -4299,7 +4050,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -4308,7 +4058,6 @@ "version": "3.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/builtin-modules/-/builtin-modules-3.3.0.tgz", "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "license": "MIT", "engines": { "node": ">=6" }, @@ -4320,22 +4069,19 @@ "version": "3.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "license": "MIT", + "version": "1.0.8", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -4344,11 +4090,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", "engines": { "node": ">=6" } @@ -4357,7 +4114,6 @@ "version": "6.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -4369,7 +4125,6 @@ "version": "7.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/camelcase-keys/-/camelcase-keys-7.0.2.tgz", "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "license": "MIT", "dependencies": { "camelcase": "^6.3.0", "map-obj": "^4.1.0", @@ -4387,7 +4142,6 @@ "version": "1.4.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4396,9 +4150,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001683", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/caniuse-lite/-/caniuse-lite-1.0.30001683.tgz", - "integrity": "sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==", + "version": "1.0.30001687", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz", + "integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==", "funding": [ { "type": "opencollective", @@ -4412,14 +4166,12 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4442,7 +4194,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/chevrotain/-/chevrotain-11.0.3.tgz", "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@chevrotain/cst-dts-gen": "11.0.3", "@chevrotain/gast": "11.0.3", @@ -4457,7 +4208,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz", "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==", "dev": true, - "license": "MIT", "dependencies": { "lodash-es": "^4.17.21" }, @@ -4470,7 +4220,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -4494,7 +4243,6 @@ "version": "3.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", "engines": { "node": ">=18" } @@ -4510,7 +4258,6 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], - "license": "MIT", "engines": { "node": ">=8" } @@ -4520,7 +4267,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/clean-stack/-/clean-stack-4.2.0.tgz", "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "5.0.0" }, @@ -4536,7 +4282,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -4546,10 +4291,9 @@ }, "node_modules/cli-width": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, - "license": "ISC", "engines": { "node": ">= 12" } @@ -4558,7 +4302,6 @@ "version": "2.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -4569,20 +4312,17 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "license": "MIT" + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -4595,7 +4335,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" } @@ -4603,14 +4342,12 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -4622,7 +4359,6 @@ "version": "1.0.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4630,14 +4366,12 @@ "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { "version": "0.7.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/cookie/-/cookie-0.7.1.tgz", "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4645,8 +4379,7 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/core-js": { "version": "3.39.0", @@ -4654,7 +4387,6 @@ "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", "dev": true, "hasInstallScript": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -4664,7 +4396,6 @@ "version": "3.39.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/core-js-compat/-/core-js-compat-3.39.0.tgz", "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", - "license": "MIT", "dependencies": { "browserslist": "^4.24.2" }, @@ -4677,7 +4408,6 @@ "version": "8.3.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/cosmiconfig/-/cosmiconfig-8.3.6.tgz", "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "license": "MIT", "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", @@ -4704,7 +4434,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/cp-file/-/cp-file-10.0.0.tgz", "integrity": "sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.10", "nested-error-stacks": "^2.1.1", @@ -4722,7 +4451,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/cpy/-/cpy-10.1.0.tgz", "integrity": "sha512-VC2Gs20JcTyeQob6UViBLnyP0bYHkBh6EiKzot9vi2DmeGlFT9Wd7VG3NBrkNx/jYvFBeyDOMMHdHQhbtKLgHQ==", "dev": true, - "license": "MIT", "dependencies": { "arrify": "^3.0.0", "cp-file": "^10.0.0", @@ -4745,7 +4473,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/cpy-cli/-/cpy-cli-5.0.0.tgz", "integrity": "sha512-fb+DZYbL9KHc0BC4NYqGRrDIJZPXUmjjtqdw4XRRg8iV8dIfghUX/WiL+q4/B/KFTy3sK6jsbUhBaz0/Hxg7IQ==", "dev": true, - "license": "MIT", "dependencies": { "cpy": "^10.1.0", "meow": "^12.0.1" @@ -4760,44 +4487,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cpy/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4811,7 +4504,6 @@ "version": "3.2.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/css-functions-list/-/css-functions-list-3.2.3.tgz", "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", - "license": "MIT", "engines": { "node": ">=12 || >=16" } @@ -4820,7 +4512,6 @@ "version": "2.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/css-tree/-/css-tree-2.3.1.tgz", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "license": "MIT", "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -4833,7 +4524,6 @@ "version": "3.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -4844,15 +4534,13 @@ "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "license": "BSD-2-Clause" + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12" } @@ -4861,7 +4549,6 @@ "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/data-view-buffer/-/data-view-buffer-1.0.1.tgz", "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -4878,7 +4565,6 @@ "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -4895,7 +4581,6 @@ "version": "1.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -4909,10 +4594,9 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", + "version": "4.4.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dependencies": { "ms": "^2.1.3" }, @@ -4929,7 +4613,6 @@ "version": "5.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/decamelize/-/decamelize-5.0.1.tgz", "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -4941,7 +4624,6 @@ "version": "1.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/decamelize-keys/-/decamelize-keys-1.1.1.tgz", "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "license": "MIT", "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -4957,7 +4639,6 @@ "version": "1.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4966,7 +4647,6 @@ "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4974,15 +4654,13 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "license": "MIT" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4991,7 +4669,6 @@ "version": "1.1.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -5008,7 +4685,6 @@ "version": "1.2.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -5025,7 +4701,6 @@ "version": "1.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -5034,7 +4709,6 @@ "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5043,7 +4717,6 @@ "version": "1.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -5054,7 +4727,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -5064,7 +4736,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/dir-compare/-/dir-compare-5.0.0.tgz", "integrity": "sha512-/GCjdixGQyJ9sj/HiMTYaNGztXqHnj0kWuKDfrGU6fCvZzQBihMBQLToG/dwg5cSs7lm5707iwbKOdsJh5VV4g==", "dev": true, - "license": "MIT", "dependencies": { "minimatch": "^3.0.5", "p-limit": "^3.1.0 " @@ -5075,7 +4746,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5086,7 +4756,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5098,7 +4767,6 @@ "version": "3.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -5107,22 +4775,20 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "license": "Apache-2.0", + "version": "2.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -5141,14 +4807,12 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ], - "license": "BSD-2-Clause" + ] }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -5163,7 +4827,6 @@ "version": "3.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/domutils/-/domutils-3.1.0.tgz", "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -5178,7 +4841,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/dot-prop/-/dot-prop-7.2.0.tgz", "integrity": "sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^2.11.2" }, @@ -5194,7 +4856,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, @@ -5202,35 +4863,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/dunder-proto": { + "version": "1.0.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.64", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/electron-to-chromium/-/electron-to-chromium-1.5.64.tgz", - "integrity": "sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==", - "license": "ISC" + "version": "1.5.71", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/electron-to-chromium/-/electron-to-chromium-1.5.71.tgz", + "integrity": "sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==" }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5240,7 +4909,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -5249,7 +4917,6 @@ "version": "4.5.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -5261,7 +4928,6 @@ "version": "1.3.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -5270,7 +4936,6 @@ "version": "1.23.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/es-abstract/-/es-abstract-1.23.5.tgz", "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -5327,13 +4992,9 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "engines": { "node": ">= 0.4" } @@ -5342,7 +5003,6 @@ "version": "1.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5351,7 +5011,6 @@ "version": "1.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -5377,7 +5036,6 @@ "version": "1.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -5389,7 +5047,6 @@ "version": "2.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -5403,20 +5060,18 @@ "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "license": "MIT", "dependencies": { "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "license": "MIT", + "version": "1.3.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -5431,7 +5086,6 @@ "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -5470,7 +5124,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/esbuild-plugin-copy/-/esbuild-plugin-copy-2.1.1.tgz", "integrity": "sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.2", "chokidar": "^3.5.3", @@ -5486,7 +5139,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -5496,12 +5148,40 @@ "node": ">=12" } }, + "node_modules/esbuild-plugin-copy/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/esbuild-plugin-text-replace": { "version": "1.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/esbuild-plugin-text-replace/-/esbuild-plugin-text-replace-1.3.0.tgz", "integrity": "sha512-RWB/bbdP0xDHBOtA0st4CAE6UZtky76aCB7Shw5r350JY403lfvrj2UMkInUB346tMtFWXKWXNf4gqNM+WbXag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "ts-replace-all": "^1.0.0" }, @@ -5513,7 +5193,6 @@ "version": "3.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", "engines": { "node": ">=6" } @@ -5521,14 +5200,12 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -5537,59 +5214,61 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "license": "MIT", + "version": "9.17.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint/-/eslint-9.17.0.tgz", + "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.17.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-doc-generator": { @@ -5597,7 +5276,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-doc-generator/-/eslint-doc-generator-1.7.1.tgz", "integrity": "sha512-i1Zjl+Xcy712SZhbceCeMVaIdhbFqY27i8d7f9gyb9P/6AQNnPA0VCWynAFVGYa0hpeR5kwUI09+GBELgC2nnA==", "dev": true, - "license": "ISC", "dependencies": { "@typescript-eslint/utils": "^5.38.1", "ajv": "^8.11.2", @@ -5627,7 +5305,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0" @@ -5645,7 +5322,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/types/-/types-5.62.0.tgz", "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -5659,7 +5335,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0", @@ -5687,7 +5362,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/utils/-/utils-5.62.0.tgz", "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", @@ -5714,7 +5388,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" @@ -5732,7 +5405,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -5749,7 +5421,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -5763,7 +5434,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -5776,24 +5446,50 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, + "node_modules/eslint-doc-generator/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-doc-generator/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/eslint-doc-generator/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=8" + } }, "node_modules/eslint-doc-generator/node_modules/type-fest": { "version": "3.13.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/type-fest/-/type-fest-3.13.1.tgz", "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=14.16" }, @@ -5805,7 +5501,6 @@ "version": "0.3.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -5816,7 +5511,6 @@ "version": "3.2.7", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -5825,7 +5519,6 @@ "version": "2.12.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -5842,7 +5535,6 @@ "version": "3.2.7", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -5851,7 +5543,6 @@ "version": "2.31.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", - "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", @@ -5884,7 +5575,6 @@ "version": "1.1.11", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5894,28 +5584,14 @@ "version": "3.2.7", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-import/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5927,7 +5603,6 @@ "version": "6.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -5936,7 +5611,6 @@ "version": "6.10.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", - "license": "MIT", "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", @@ -5965,7 +5639,6 @@ "version": "1.1.11", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5975,7 +5648,6 @@ "version": "3.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5987,7 +5659,6 @@ "version": "7.37.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", - "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -6016,44 +5687,29 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "license": "MIT", + "version": "5.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-react/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6065,7 +5721,6 @@ "version": "2.0.0-next.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -6082,7 +5737,6 @@ "version": "6.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -6091,7 +5745,6 @@ "version": "8.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-scope/-/eslint-scope-8.2.0.tgz", "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -6107,7 +5760,6 @@ "version": "2.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "license": "Apache-2.0", "engines": { "node": ">=10" } @@ -6116,35 +5768,17 @@ "version": "1.1.11", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "license": "Apache-2.0", + "version": "4.2.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6154,7 +5788,6 @@ "version": "6.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -6162,26 +5795,10 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6189,42 +5806,28 @@ "node": "*" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "license": "BSD-2-Clause", + "version": "10.3.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "license": "Apache-2.0", + "version": "4.2.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6235,7 +5838,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -6248,7 +5850,6 @@ "version": "1.6.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -6260,7 +5861,6 @@ "version": "4.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -6272,7 +5872,6 @@ "version": "5.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -6281,7 +5880,6 @@ "version": "2.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -6290,7 +5888,6 @@ "version": "1.8.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6300,7 +5897,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -6324,7 +5920,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -6336,15 +5931,13 @@ "version": "3.0.7", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/expect": { "version": "29.7.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -6358,9 +5951,8 @@ }, "node_modules/express": { "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/express/-/express-4.21.2.tgz", "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -6404,18 +5996,16 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/external-editor": { "version": "3.1.0", @@ -6448,7 +6038,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -6467,14 +6056,12 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -6489,26 +6076,22 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "license": "MIT" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fast-uri": { "version": "3.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", - "license": "BSD-3-Clause" + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -6517,7 +6100,6 @@ "version": "1.17.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -6527,7 +6109,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, - "license": "MIT", "dependencies": { "pend": "~1.2.0" } @@ -6547,7 +6128,6 @@ "url": "https://paypal.me/jimmywarting" } ], - "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -6557,22 +6137,20 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "license": "MIT", + "version": "8.0.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6584,7 +6162,6 @@ "version": "1.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/finalhandler/-/finalhandler-1.3.1.tgz", "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", @@ -6602,7 +6179,6 @@ "version": "2.6.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -6610,14 +6186,12 @@ "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -6630,89 +6204,26 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "license": "MIT", + "version": "4.0.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flat-cache/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { "version": "3.3.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "license": "ISC" + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==" }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } @@ -6721,7 +6232,6 @@ "version": "3.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -6737,7 +6247,6 @@ "version": "4.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/form-data/-/form-data-4.0.1.tgz", "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -6752,7 +6261,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, - "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" }, @@ -6764,7 +6272,6 @@ "version": "0.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6773,7 +6280,6 @@ "version": "0.5.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6783,7 +6289,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -6796,8 +6301,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", @@ -6805,7 +6309,6 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -6818,7 +6321,6 @@ "version": "1.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6827,7 +6329,6 @@ "version": "1.1.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6844,14 +6345,12 @@ "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "license": "MIT" + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6860,22 +6359,23 @@ "version": "1.0.0-beta.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "license": "MIT", + "version": "1.2.5", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/get-intrinsic/-/get-intrinsic-1.2.5.tgz", + "integrity": "sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -6889,7 +6389,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -6904,7 +6403,6 @@ "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/get-symbol-description/-/get-symbol-description-1.0.2.tgz", "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -6922,7 +6420,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/get-tsconfig/-/get-tsconfig-4.8.1.tgz", "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "dev": true, - "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -6934,7 +6431,6 @@ "version": "10.4.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -6954,7 +6450,6 @@ "version": "5.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -6966,7 +6461,6 @@ "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "license": "MIT", "dependencies": { "global-prefix": "^3.0.0" }, @@ -6978,7 +6472,6 @@ "version": "3.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "license": "MIT", "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -6992,7 +6485,6 @@ "version": "1.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -7001,19 +6493,20 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "license": "MIT", + "version": "15.13.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globals/-/globals-15.13.0.tgz", + "integrity": "sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -7026,20 +6519,19 @@ } }, "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "license": "MIT", + "version": "13.2.2", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, "dependencies": { - "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", "merge2": "^1.4.1", - "slash": "^3.0.0" + "slash": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7048,14 +6540,12 @@ "node_modules/globjoin": { "version": "0.1.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "license": "MIT" + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==" }, "node_modules/gonzales-pe": { "version": "4.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/gonzales-pe/-/gonzales-pe-4.3.0.tgz", "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", - "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, @@ -7067,12 +6557,11 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "version": "1.2.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7082,20 +6571,17 @@ "version": "4.2.11", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "license": "MIT" + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "license": "MIT", "engines": { "node": ">=6" } @@ -7104,7 +6590,6 @@ "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7113,7 +6598,6 @@ "version": "4.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", "engines": { "node": ">=8" } @@ -7122,7 +6606,6 @@ "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -7131,10 +6614,12 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", + "version": "1.2.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -7143,10 +6628,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "license": "MIT", + "version": "1.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { "node": ">= 0.4" }, @@ -7158,7 +6642,6 @@ "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -7173,7 +6656,6 @@ "version": "2.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -7185,7 +6667,6 @@ "version": "4.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -7197,7 +6678,6 @@ "version": "6.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -7208,21 +6688,18 @@ "node_modules/hosted-git-info/node_modules/yallist": { "version": "4.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/html-tags": { "version": "3.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/html-tags/-/html-tags-3.3.1.tgz", "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "license": "MIT", "engines": { "node": ">=8" }, @@ -7241,7 +6718,6 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -7253,7 +6729,6 @@ "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -7270,7 +6745,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -7280,7 +6754,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/husky/-/husky-9.1.7.tgz", "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, - "license": "MIT", "bin": { "husky": "bin.js" }, @@ -7296,7 +6769,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/hyperdyperid/-/hyperdyperid-1.2.0.tgz", "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.18" } @@ -7305,7 +6777,6 @@ "version": "0.4.24", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -7317,7 +6788,6 @@ "version": "5.3.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", "engines": { "node": ">= 4" } @@ -7326,7 +6796,6 @@ "version": "3.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7342,7 +6811,6 @@ "version": "4.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/import-lazy/-/import-lazy-4.0.0.tgz", "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "license": "MIT", "engines": { "node": ">=8" } @@ -7351,7 +6819,6 @@ "version": "0.1.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -7360,7 +6827,6 @@ "version": "5.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/indent-string/-/indent-string-5.0.0.tgz", "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -7373,7 +6839,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7382,20 +6847,17 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -7409,7 +6871,6 @@ "version": "1.9.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", "engines": { "node": ">= 0.10" } @@ -7418,7 +6879,6 @@ "version": "3.0.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -7433,14 +6893,12 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7452,12 +6910,14 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "license": "MIT", + "version": "1.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7468,7 +6928,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7477,13 +6936,12 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "license": "MIT", + "version": "1.2.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-boolean-object/-/is-boolean-object-1.2.0.tgz", + "integrity": "sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.7", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7496,7 +6954,6 @@ "version": "1.2.7", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7508,7 +6965,6 @@ "version": "2.15.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-core-module/-/is-core-module-2.15.1.tgz", "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -7523,7 +6979,6 @@ "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-data-view/-/is-data-view-1.0.1.tgz", "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" }, @@ -7538,7 +6993,6 @@ "version": "1.0.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7553,18 +7007,19 @@ "version": "2.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "license": "MIT", + "version": "1.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7574,7 +7029,6 @@ "version": "3.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", "engines": { "node": ">=8" } @@ -7583,7 +7037,6 @@ "version": "1.0.10", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7598,7 +7051,6 @@ "version": "4.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -7610,7 +7062,6 @@ "version": "2.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7622,7 +7073,6 @@ "version": "2.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7634,18 +7084,17 @@ "version": "7.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "license": "MIT", + "version": "1.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-number-object/-/is-number-object-1.1.0.tgz", + "integrity": "sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.7", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7654,20 +7103,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7676,19 +7115,19 @@ "version": "5.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "license": "MIT", + "version": "1.2.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-regex/-/is-regex-1.2.0.tgz", + "integrity": "sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.7", + "gopd": "^1.1.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -7701,7 +7140,6 @@ "version": "2.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7713,7 +7151,6 @@ "version": "1.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -7729,7 +7166,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -7738,12 +7174,12 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "license": "MIT", + "version": "1.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-string/-/is-string-1.1.0.tgz", + "integrity": "sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.7", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7753,12 +7189,13 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "license": "MIT", + "version": "1.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-symbol/-/is-symbol-1.1.0.tgz", + "integrity": "sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==", "dependencies": { - "has-symbols": "^1.0.2" + "call-bind": "^1.0.7", + "has-symbols": "^1.0.3", + "safe-regex-test": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -7771,7 +7208,6 @@ "version": "1.1.13", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -7786,7 +7222,6 @@ "version": "2.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7798,7 +7233,6 @@ "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -7810,7 +7244,6 @@ "version": "2.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/is-weakset/-/is-weakset-2.0.3.tgz", "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" @@ -7825,21 +7258,18 @@ "node_modules/isarray": { "version": "2.0.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -7849,7 +7279,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -7864,7 +7293,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/istanbul-reports/-/istanbul-reports-3.1.7.tgz", "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -7877,7 +7305,6 @@ "version": "1.1.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/iterator.prototype/-/iterator.prototype-1.1.3.tgz", "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", - "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", @@ -7893,7 +7320,6 @@ "version": "3.4.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -7909,7 +7335,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/java-parser/-/java-parser-2.3.2.tgz", "integrity": "sha512-/O42UbEHy3VVJw8W0ruHkQjW75oWvQx4QisoUDRIGir6q3/IZ4JslDMPMYEqp7LU56PYJkH5uXdQiBaCXt/Opw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "chevrotain": "11.0.3", "chevrotain-allstar": "0.3.1", @@ -7921,7 +7346,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -7937,7 +7361,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -7947,7 +7370,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -7963,7 +7385,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -7979,12 +7400,20 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, - "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -8000,14 +7429,12 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -8019,7 +7446,6 @@ "version": "3.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/jsesc/-/jsesc-3.0.2.tgz", "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -8030,21 +7456,18 @@ "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-to-ts": { "version": "3.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", "ts-algebra": "^2.0.0" @@ -8056,20 +7479,17 @@ "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "license": "MIT" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -8082,7 +7502,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -8094,7 +7513,6 @@ "version": "3.3.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -8110,7 +7528,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/junk/-/junk-4.0.1.tgz", "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.20" }, @@ -8122,7 +7539,6 @@ "version": "4.5.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -8131,7 +7547,6 @@ "version": "6.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8139,20 +7554,17 @@ "node_modules/known-css-properties": { "version": "0.29.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "license": "MIT" + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==" }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "license": "CC0-1.0" + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==" }, "node_modules/language-tags": { "version": "1.0.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/language-tags/-/language-tags-1.0.9.tgz", "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "license": "MIT", "dependencies": { "language-subtag-registry": "^0.3.20" }, @@ -8164,7 +7576,6 @@ "version": "0.4.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -8176,15 +7587,13 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/linkify-it": { "version": "5.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/linkify-it/-/linkify-it-5.0.0.tgz", "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, - "license": "MIT", "dependencies": { "uc.micro": "^2.0.0" } @@ -8193,7 +7602,6 @@ "version": "6.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -8207,51 +7615,38 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.clone": { - "version": "4.5.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==", - "license": "MIT" + "dev": true }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "license": "MIT" + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" }, "node_modules/long": { "version": "5.2.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", - "license": "Apache-2.0" + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -8264,7 +7659,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -8273,7 +7667,6 @@ "version": "5.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -8282,15 +7675,13 @@ "version": "2.3.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lunr/-/lunr-2.3.9.tgz", "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -8305,7 +7696,6 @@ "version": "4.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "license": "MIT", "engines": { "node": ">=8" }, @@ -8318,7 +7708,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/markdown-it/-/markdown-it-14.1.0.tgz", "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", @@ -8336,7 +7725,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/markdown-table/-/markdown-table-3.0.4.tgz", "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8346,7 +7734,6 @@ "version": "2.1.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8355,31 +7742,27 @@ "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "license": "CC0-1.0" + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" }, "node_modules/mdurl": { "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/memfs": { "version": "4.15.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.15.0.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/memfs/-/memfs-4.15.0.tgz", "integrity": "sha512-q9MmZXd2rRWHS6GU3WEm3HyiXZyyoA1DqdOhEq0lxPBmKb5S7IAOwX0RgUCwJfqjelDCySa5h8ujOy24LqsWcw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/json-pack": "^1.0.3", "@jsonjoy.com/util": "^1.3.0", @@ -8399,7 +7782,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/meow/-/meow-12.1.1.tgz", "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, - "license": "MIT", "engines": { "node": ">=16.10" }, @@ -8411,7 +7793,6 @@ "version": "1.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -8420,14 +7801,12 @@ "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", "engines": { "node": ">= 8" } @@ -8436,7 +7815,6 @@ "version": "1.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -8445,7 +7823,6 @@ "version": "4.0.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -8458,7 +7835,6 @@ "version": "1.6.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -8470,7 +7846,6 @@ "version": "1.52.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -8479,7 +7854,6 @@ "version": "2.1.35", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -8492,7 +7866,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -8501,7 +7874,6 @@ "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "license": "MIT", "engines": { "node": ">=4" } @@ -8524,7 +7896,6 @@ "version": "1.2.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8533,7 +7904,6 @@ "version": "4.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -8547,7 +7917,6 @@ "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8556,7 +7925,6 @@ "version": "7.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -8565,7 +7933,6 @@ "version": "3.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minizlib/-/minizlib-3.0.1.tgz", "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", - "license": "MIT", "dependencies": { "minipass": "^7.0.4", "rimraf": "^5.0.5" @@ -8578,7 +7945,6 @@ "version": "5.0.10", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/rimraf/-/rimraf-5.0.10.tgz", "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "license": "ISC", "dependencies": { "glob": "^10.3.7" }, @@ -8593,7 +7959,6 @@ "version": "3.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -8607,15 +7972,13 @@ "node_modules/module-alias": { "version": "2.2.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/module-alias/-/module-alias-2.2.3.tgz", - "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", - "license": "MIT" + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==" }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -8623,15 +7986,13 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/mute-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/mute-stream/-/mute-stream-2.0.0.tgz", "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "dev": true, - "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -8646,7 +8007,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -8657,14 +8017,12 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "license": "MIT" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -8673,15 +8031,13 @@ "version": "2.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, - "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -8702,7 +8058,6 @@ "url": "https://paypal.me/jimmywarting" } ], - "license": "MIT", "engines": { "node": ">=10.5.0" } @@ -8712,7 +8067,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dev": true, - "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -8729,14 +8083,12 @@ "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "license": "MIT" + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" }, "node_modules/normalize-package-data": { "version": "3.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -8751,7 +8103,6 @@ "version": "3.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8761,7 +8112,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -8773,7 +8123,6 @@ "version": "4.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8782,7 +8131,6 @@ "version": "1.13.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/object-inspect/-/object-inspect-1.13.3.tgz", "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8794,7 +8142,6 @@ "version": "1.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -8803,7 +8150,6 @@ "version": "4.1.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -8821,7 +8167,6 @@ "version": "1.1.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/object.entries/-/object.entries-1.1.8.tgz", "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8835,7 +8180,6 @@ "version": "2.0.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8853,7 +8197,6 @@ "version": "1.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/object.groupby/-/object.groupby-1.0.3.tgz", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8867,7 +8210,6 @@ "version": "1.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/object.values/-/object.values-1.2.0.tgz", "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8884,7 +8226,6 @@ "version": "2.4.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -8896,17 +8237,15 @@ "version": "1.4.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/one-double-zero": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-double-zero/-/one-double-zero-1.0.0.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/one-double-zero/-/one-double-zero-1.0.0.tgz", "integrity": "sha512-fPVcDEw2RfDX0cd+Qvg/6GRpP+9uXDXNw9/O18UY//KYu2uqAojCCCUR2uMiHDR5+u4rPyd4ClSVZ3iMbKT/Vg==", "dev": true, - "license": "ISC", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jridgewell/trace-mapping": "^0.3.25", @@ -8925,10 +8264,9 @@ }, "node_modules/one-double-zero/node_modules/commander": { "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" } @@ -8938,7 +8276,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -8953,7 +8290,6 @@ "version": "0.9.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -8980,7 +8316,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/p-event/-/p-event-5.0.1.tgz", "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", "dev": true, - "license": "MIT", "dependencies": { "p-timeout": "^5.0.2" }, @@ -8996,7 +8331,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/p-filter/-/p-filter-3.0.0.tgz", "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", "dev": true, - "license": "MIT", "dependencies": { "p-map": "^5.1.0" }, @@ -9012,7 +8346,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/p-map/-/p-map-5.5.0.tgz", "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", "dev": true, - "license": "MIT", "dependencies": { "aggregate-error": "^4.0.0" }, @@ -9027,7 +8360,6 @@ "version": "3.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9042,7 +8374,6 @@ "version": "5.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -9058,7 +8389,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/p-map/-/p-map-6.0.0.tgz", "integrity": "sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==", "dev": true, - "license": "MIT", "engines": { "node": ">=16" }, @@ -9071,7 +8401,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/p-timeout/-/p-timeout-5.1.0.tgz", "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -9082,14 +8411,12 @@ "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -9101,7 +8428,6 @@ "version": "5.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -9119,7 +8445,6 @@ "version": "1.3.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -9128,7 +8453,6 @@ "version": "4.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", "engines": { "node": ">=8" } @@ -9137,7 +8461,6 @@ "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9146,7 +8469,6 @@ "version": "3.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", "engines": { "node": ">=8" } @@ -9154,14 +8476,12 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -9176,20 +8496,17 @@ "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/path-to-regexp": { "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", "engines": { "node": ">=8" } @@ -9198,20 +8515,17 @@ "version": "1.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -9223,7 +8537,6 @@ "version": "1.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -9246,7 +8559,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", @@ -9260,7 +8572,6 @@ "version": "0.36.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/postcss-html/-/postcss-html-0.36.0.tgz", "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", - "license": "MIT", "dependencies": { "htmlparser2": "^3.10.0" }, @@ -9273,7 +8584,6 @@ "version": "0.2.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/dom-serializer/-/dom-serializer-0.2.2.tgz", "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "entities": "^2.0.0" @@ -9288,14 +8598,12 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ], - "license": "BSD-2-Clause" + ] }, "node_modules/postcss-html/node_modules/dom-serializer/node_modules/entities": { "version": "2.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -9303,14 +8611,12 @@ "node_modules/postcss-html/node_modules/domelementtype": { "version": "1.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "license": "BSD-2-Clause" + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" }, "node_modules/postcss-html/node_modules/domhandler": { "version": "2.4.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/domhandler/-/domhandler-2.4.2.tgz", "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "1" } @@ -9319,7 +8625,6 @@ "version": "1.7.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/domutils/-/domutils-1.7.0.tgz", "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "0", "domelementtype": "1" @@ -9328,14 +8633,12 @@ "node_modules/postcss-html/node_modules/entities": { "version": "1.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "license": "BSD-2-Clause" + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, "node_modules/postcss-html/node_modules/htmlparser2": { "version": "3.10.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/htmlparser2/-/htmlparser2-3.10.1.tgz", "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "license": "MIT", "dependencies": { "domelementtype": "^1.3.1", "domhandler": "^2.3.0", @@ -9349,7 +8652,6 @@ "version": "6.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/postcss-less/-/postcss-less-6.0.0.tgz", "integrity": "sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -9360,14 +8662,12 @@ "node_modules/postcss-resolve-nested-selector": { "version": "0.1.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", - "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", - "license": "MIT" + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==" }, "node_modules/postcss-safe-parser": { "version": "6.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "license": "MIT", "engines": { "node": ">=12.0" }, @@ -9383,7 +8683,6 @@ "version": "0.5.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/postcss-sass/-/postcss-sass-0.5.0.tgz", "integrity": "sha512-qtu8awh1NMF3o9j/x9j3EZnd+BlF66X6NZYl12BdKoG2Z4hmydOt/dZj2Nq+g0kfk2pQy3jeYFBmvG9DBwynGQ==", - "license": "MIT", "dependencies": { "gonzales-pe": "^4.3.0", "postcss": "^8.2.14" @@ -9410,7 +8709,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "engines": { "node": ">=12.0" }, @@ -9422,7 +8720,6 @@ "version": "6.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -9435,7 +8732,6 @@ "version": "0.36.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/postcss-syntax/-/postcss-syntax-0.36.2.tgz", "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", - "license": "MIT", "peerDependencies": { "postcss": ">=5.0.0" } @@ -9443,24 +8739,21 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { "version": "3.4.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/prettier/-/prettier-3.4.2.tgz", "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -9476,7 +8769,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/prettier-plugin-java/-/prettier-plugin-java-2.6.5.tgz", "integrity": "sha512-2RkPNXyYpP5dRhr04pz45n+e5LXwYWTh1JXrztiCkZTGGokIGYrfwUuGa8csnDoGbP6CDPgVm8zZSIm/9I0SRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "java-parser": "2.3.2", "lodash": "4.17.21", @@ -9488,7 +8780,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/prettier/-/prettier-3.2.5.tgz", "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -9504,7 +8795,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -9519,7 +8809,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -9532,7 +8821,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/pretty-quick/-/pretty-quick-4.0.0.tgz", "integrity": "sha512-M+2MmeufXb/M7Xw3Afh1gxcYpj+sK0AxEfnfF958ktFeAyi5MsKY5brymVURQLgPLV1QaF5P4pb2oFJ54H3yzQ==", "dev": true, - "license": "MIT", "dependencies": { "execa": "^5.1.1", "find-up": "^5.0.0", @@ -9557,7 +8845,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/picomatch/-/picomatch-3.0.1.tgz", "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -9569,7 +8856,6 @@ "version": "15.8.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -9579,15 +8865,13 @@ "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/protobufjs": { "version": "7.4.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/protobufjs/-/protobufjs-7.4.0.tgz", "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", "hasInstallScript": true, - "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -9610,7 +8894,6 @@ "version": "2.0.7", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -9624,7 +8907,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -9634,7 +8916,6 @@ "version": "2.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", "engines": { "node": ">=6" } @@ -9644,7 +8925,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/punycode.js/-/punycode.js-2.3.1.tgz", "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -9653,7 +8933,6 @@ "version": "6.13.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -9681,14 +8960,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -9700,7 +8977,6 @@ "version": "1.2.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9709,7 +8985,6 @@ "version": "2.5.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -9724,14 +8999,12 @@ "version": "18.3.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/read-pkg": { "version": "6.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/read-pkg/-/read-pkg-6.0.0.tgz", "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^3.0.2", @@ -9749,7 +9022,6 @@ "version": "8.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/read-pkg-up/-/read-pkg-up-8.0.0.tgz", "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "license": "MIT", "dependencies": { "find-up": "^5.0.0", "read-pkg": "^6.0.0", @@ -9766,7 +9038,6 @@ "version": "1.4.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -9778,7 +9049,6 @@ "version": "1.4.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -9790,7 +9060,6 @@ "version": "3.6.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -9805,7 +9074,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -9817,7 +9085,6 @@ "version": "4.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/redent/-/redent-4.0.0.tgz", "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "license": "MIT", "dependencies": { "indent-string": "^5.0.0", "strip-indent": "^4.0.0" @@ -9833,7 +9100,6 @@ "version": "0.12.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/refa/-/refa-0.12.1.tgz", "integrity": "sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==", - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.8.0" }, @@ -9842,18 +9108,18 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "license": "MIT", + "version": "1.0.8", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz", + "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", + "dunder-proto": "^1.0.0", + "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.0" }, "engines": { "node": ">= 0.4" @@ -9865,14 +9131,12 @@ "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "license": "MIT" + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -9883,14 +9147,12 @@ "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } @@ -9899,7 +9161,6 @@ "version": "0.7.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz", "integrity": "sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==", - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.8.0", "refa": "^0.12.1" @@ -9912,7 +9173,6 @@ "version": "1.5.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9930,7 +9190,6 @@ "version": "6.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/regexpu-core/-/regexpu-core-6.2.0.tgz", "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "license": "MIT", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.0", @@ -9946,14 +9205,12 @@ "node_modules/regjsgen": { "version": "0.8.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "license": "MIT" + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" }, "node_modules/regjsparser": { "version": "0.12.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/regjsparser/-/regjsparser-0.12.0.tgz", "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.0.2" }, @@ -9965,7 +9222,6 @@ "version": "2.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9974,7 +9230,6 @@ "version": "1.22.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -9991,7 +9246,6 @@ "version": "4.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", "engines": { "node": ">=4" } @@ -10001,7 +9255,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } @@ -10010,7 +9263,6 @@ "version": "1.0.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -10021,7 +9273,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/rimraf/-/rimraf-6.0.1.tgz", "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^11.0.0", "package-json-from-dist": "^1.0.0" @@ -10041,7 +9292,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/glob/-/glob-11.0.0.tgz", "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", "dev": true, - "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^4.0.1", @@ -10065,7 +9315,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/jackspeak/-/jackspeak-4.0.2.tgz", "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -10081,7 +9330,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/lru-cache/-/lru-cache-11.0.2.tgz", "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", "dev": true, - "license": "ISC", "engines": { "node": "20 || >=22" } @@ -10106,7 +9354,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/path-scurry/-/path-scurry-2.0.0.tgz", "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" @@ -10136,7 +9383,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -10145,7 +9391,6 @@ "version": "1.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/safe-array-concat/-/safe-array-concat-1.1.2.tgz", "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -10176,14 +9421,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safe-regex-test": { "version": "1.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -10199,14 +9442,12 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/scslre": { "version": "0.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/scslre/-/scslre-0.3.0.tgz", "integrity": "sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==", - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.8.0", "refa": "^0.12.0", @@ -10220,7 +9461,6 @@ "version": "7.6.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -10232,7 +9472,6 @@ "version": "0.19.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/send/-/send-0.19.0.tgz", "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -10256,7 +9495,6 @@ "version": "2.6.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -10264,14 +9502,12 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -10280,7 +9516,6 @@ "version": "1.16.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/serve-static/-/serve-static-1.16.2.tgz", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", @@ -10295,7 +9530,6 @@ "version": "1.2.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -10312,7 +9546,6 @@ "version": "2.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -10326,14 +9559,12 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -10345,7 +9576,6 @@ "version": "3.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", "engines": { "node": ">=8" } @@ -10354,7 +9584,6 @@ "version": "1.0.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -10372,7 +9601,6 @@ "version": "4.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", "engines": { "node": ">=14" }, @@ -10381,19 +9609,21 @@ } }, "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", + "version": "4.0.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -10410,7 +9640,6 @@ "version": "1.2.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -10419,7 +9648,6 @@ "version": "3.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -10428,14 +9656,12 @@ "node_modules/spdx-exceptions": { "version": "2.5.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "license": "CC-BY-3.0" + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -10444,15 +9670,13 @@ "node_modules/spdx-license-ids": { "version": "3.0.20", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", - "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", - "license": "CC0-1.0" + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -10465,7 +9689,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -10474,7 +9697,6 @@ "version": "2.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -10483,7 +9705,6 @@ "version": "1.3.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -10492,7 +9713,6 @@ "version": "5.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -10510,7 +9730,6 @@ "version": "4.2.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10523,14 +9742,12 @@ "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -10542,7 +9759,6 @@ "version": "7.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -10557,7 +9773,6 @@ "version": "2.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10571,7 +9786,6 @@ "version": "4.0.11", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10597,7 +9811,6 @@ "version": "1.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "license": "MIT", "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" @@ -10607,7 +9820,6 @@ "version": "1.2.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10625,7 +9837,6 @@ "version": "1.0.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10639,7 +9850,6 @@ "version": "1.0.8", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10656,7 +9866,6 @@ "version": "6.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10669,7 +9878,6 @@ "version": "6.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10681,7 +9889,6 @@ "version": "3.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "license": "MIT", "engines": { "node": ">=4" } @@ -10691,7 +9898,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -10700,7 +9906,6 @@ "version": "4.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/strip-indent/-/strip-indent-4.0.0.tgz", "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "license": "MIT", "dependencies": { "min-indent": "^1.0.1" }, @@ -10715,7 +9920,6 @@ "version": "3.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", "engines": { "node": ">=8" }, @@ -10726,14 +9930,12 @@ "node_modules/style-search": { "version": "0.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", - "license": "ISC" + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==" }, "node_modules/stylelint": { "version": "15.11.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/stylelint/-/stylelint-15.11.0.tgz", "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", - "license": "MIT", "dependencies": { "@csstools/css-parser-algorithms": "^2.3.1", "@csstools/css-tokenizer": "^2.2.0", @@ -10790,20 +9992,31 @@ "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "license": "MIT" + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==" + }, + "node_modules/stylelint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/stylelint/node_modules/brace-expansion/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/stylelint/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/stylelint/node_modules/file-entry-cache": { "version": "7.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/file-entry-cache/-/file-entry-cache-7.0.2.tgz", "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", - "license": "MIT", "dependencies": { "flat-cache": "^3.2.0" }, @@ -10811,11 +10024,62 @@ "node": ">=12.0.0" } }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/stylelint/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/stylelint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/stylelint/node_modules/meow": { "version": "10.1.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/meow/-/meow-10.1.5.tgz", "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "license": "MIT", "dependencies": { "@types/minimist": "^1.2.2", "camelcase-keys": "^7.0.0", @@ -10837,11 +10101,44 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stylelint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/stylelint/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "engines": { "node": ">=8" } @@ -10850,7 +10147,6 @@ "version": "4.2.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10864,7 +10160,6 @@ "version": "1.4.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -10876,7 +10171,6 @@ "version": "7.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10888,7 +10182,6 @@ "version": "3.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", - "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -10904,7 +10197,6 @@ "version": "1.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10918,10 +10210,9 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==" }, "node_modules/table": { - "version": "6.8.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", - "license": "BSD-3-Clause", + "version": "6.9.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -10937,7 +10228,6 @@ "version": "8.17.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -10952,20 +10242,17 @@ "node_modules/table/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/table/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/table/node_modules/string-width": { "version": "4.2.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10979,7 +10266,6 @@ "version": "7.4.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/tar/-/tar-7.4.3.tgz", "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "license": "ISC", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", @@ -10996,23 +10282,15 @@ "version": "5.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", "engines": { "node": ">=18" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" - }, "node_modules/thingies": { "version": "1.21.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/thingies/-/thingies-1.21.0.tgz", "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", "dev": true, - "license": "Unlicense", "engines": { "node": ">=10.18" }, @@ -11024,7 +10302,6 @@ "version": "0.2.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/tmp/-/tmp-0.2.3.tgz", "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "license": "MIT", "engines": { "node": ">=14.14" } @@ -11033,7 +10310,6 @@ "version": "5.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -11045,7 +10321,6 @@ "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", "engines": { "node": ">=0.6" } @@ -11054,15 +10329,13 @@ "version": "3.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/toml/-/toml-3.0.0.tgz", "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/tree-dump": { "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/tree-dump/-/tree-dump-1.0.2.tgz", "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.0" }, @@ -11078,7 +10351,6 @@ "version": "4.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/trim-newlines/-/trim-newlines-4.1.1.tgz", "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -11090,14 +10362,12 @@ "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ts-algebra/-/ts-algebra-2.0.0.tgz", "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/ts-api-utils": { - "version": "1.4.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ts-api-utils/-/ts-api-utils-1.4.0.tgz", - "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", - "license": "MIT", + "version": "1.4.3", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "engines": { "node": ">=16" }, @@ -11110,7 +10380,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ts-replace-all/-/ts-replace-all-1.0.0.tgz", "integrity": "sha512-6uBtdkw3jHXkPtx/e9xB/5vcngMm17CyJYsS2YZeQ+9FdRnt6Ev5g931Sg2p+dxbtMGoCm13m3ax/obicTZIkQ==", "dev": true, - "license": "MIT", "dependencies": { "core-js": "^3.4.1" } @@ -11119,7 +10388,6 @@ "version": "3.15.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -11131,7 +10399,6 @@ "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -11143,15 +10410,13 @@ "version": "2.8.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" + "dev": true }, "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -11166,15 +10431,13 @@ "version": "1.14.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" + "dev": true }, "node_modules/tsx": { "version": "4.19.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/tsx/-/tsx-4.19.2.tgz", "integrity": "sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==", "dev": true, - "license": "MIT", "dependencies": { "esbuild": "~0.23.0", "get-tsconfig": "^4.7.5" @@ -11197,7 +10460,6 @@ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "aix" @@ -11214,7 +10476,6 @@ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -11231,7 +10492,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -11248,7 +10508,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -11265,7 +10524,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -11282,7 +10540,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -11299,7 +10556,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -11316,7 +10572,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -11333,7 +10588,6 @@ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -11350,7 +10604,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -11367,7 +10620,6 @@ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -11384,7 +10636,6 @@ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -11401,7 +10652,6 @@ "mips64el" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -11418,7 +10668,6 @@ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -11435,7 +10684,6 @@ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -11452,7 +10700,6 @@ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -11469,7 +10716,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -11486,7 +10732,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "netbsd" @@ -11503,7 +10748,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" @@ -11520,7 +10764,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" @@ -11537,7 +10780,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "sunos" @@ -11554,7 +10796,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -11571,7 +10812,6 @@ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -11588,7 +10828,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -11603,7 +10842,6 @@ "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -11641,7 +10879,6 @@ "version": "0.4.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -11651,10 +10888,9 @@ }, "node_modules/type-fest": { "version": "4.30.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.2.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/type-fest/-/type-fest-4.30.2.tgz", "integrity": "sha512-UJShLPYi1aWqCdq9HycOL/gwsuqda1OISdBO3t8RlXQC4QvtuIz4b5FCfe2dQIWEpmlRExKmcTBfP1r9bhY7ig==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -11666,7 +10902,6 @@ "version": "1.6.18", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -11679,7 +10914,6 @@ "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -11693,7 +10927,6 @@ "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -11712,7 +10945,6 @@ "version": "1.0.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -11730,17 +10962,16 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "license": "MIT", + "version": "1.0.7", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -11751,10 +10982,9 @@ }, "node_modules/typedoc": { "version": "0.27.5", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.5.tgz", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/typedoc/-/typedoc-0.27.5.tgz", "integrity": "sha512-x+fhKJtTg4ozXwKayh/ek4wxZQI/+2hmZUdO2i2NGDBRUflDble70z+ewHod3d4gRpXSO6fnlnjbDTnJk7HlkQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@gerrit0/mini-shiki": "^1.24.0", "lunr": "^2.3.9", @@ -11788,14 +11018,12 @@ "version": "2.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/uc.micro/-/uc.micro-2.1.0.tgz", "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -11808,15 +11036,13 @@ }, "node_modules/undici-types": { "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "license": "MIT" + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "license": "MIT", "engines": { "node": ">=4" } @@ -11825,7 +11051,6 @@ "version": "2.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -11838,7 +11063,6 @@ "version": "2.2.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "license": "MIT", "engines": { "node": ">=4" } @@ -11847,7 +11071,6 @@ "version": "2.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "license": "MIT", "engines": { "node": ">=4" } @@ -11857,7 +11080,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -11866,7 +11088,6 @@ "version": "1.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -11889,7 +11110,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.0" @@ -11905,7 +11125,6 @@ "version": "4.4.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -11913,14 +11132,12 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -11929,7 +11146,6 @@ "version": "3.0.4", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -11939,7 +11155,6 @@ "version": "1.1.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -11948,7 +11163,6 @@ "version": "9.4.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", - "license": "MIT", "dependencies": { "debug": "^4.3.4", "eslint-scope": "^7.1.1", @@ -11972,7 +11186,6 @@ "version": "7.2.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -11988,7 +11201,22 @@ "version": "3.4.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -12001,7 +11229,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -12010,7 +11237,6 @@ "version": "2.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -12022,32 +11248,34 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "license": "MIT", + "version": "1.1.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz", + "integrity": "sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.0", + "is-number-object": "^1.1.0", + "is-string": "^1.1.0", + "is-symbol": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", - "license": "MIT", + "version": "1.2.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/which-builtin-type/-/which-builtin-type-1.2.0.tgz", + "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", "dependencies": { + "call-bind": "^1.0.7", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.1.4", "is-weakref": "^1.0.2", @@ -12067,7 +11295,6 @@ "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -12082,10 +11309,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "license": "MIT", + "version": "1.1.16", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -12104,26 +11330,22 @@ "version": "1.2.5", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", + "version": "6.2.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/wrap-ansi-cjs": { @@ -12131,7 +11353,6 @@ "version": "7.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -12147,14 +11368,12 @@ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12164,56 +11383,35 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/write-file-atomic/-/write-file-atomic-5.0.1.tgz", "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" @@ -12225,14 +11423,12 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { "version": "2.6.1", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/yaml/-/yaml-2.6.1.tgz", "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", - "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -12244,7 +11440,6 @@ "version": "20.2.9", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", "engines": { "node": ">=10" } @@ -12254,7 +11449,6 @@ "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -12264,7 +11458,6 @@ "version": "0.1.0", "resolved": "https://repox.jfrog.io/artifactory/api/npm/npm/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 687ba41a317..2568fa6f913 100644 --- a/package.json +++ b/package.json @@ -64,12 +64,10 @@ "@inquirer/prompts": "^7.1.0", "@types/babel__preset-env": "7.9.7", "@types/bytes": "3.1.5", - "@types/eslint": "8.56.12", "@types/eslint-scope": "3.7.7", "@types/estree": "1.0.6", "@types/express": "4.17.21", "@types/functional-red-black-tree": "1.0.6", - "@types/lodash.clone": "4.5.9", "@types/node": "22.10.2", "@types/semver": "7.5.8", "@types/tmp": "0.2.6", @@ -88,7 +86,7 @@ "memfs": "4.15.0", "mkdirp": "3.0.1", "node-fetch": "3.3.2", - "one-double-zero": "^1.0.0-beta.10", + "one-double-zero": "^1.0.0", "prettier": "3.4.2", "prettier-plugin-java": "2.6.5", "pretty-quick": "4.0.0", @@ -105,23 +103,26 @@ "@babel/preset-flow": "7.25.9", "@babel/preset-react": "7.26.3", "@eslint-community/regexpp": "4.12.1", - "@typescript-eslint/eslint-plugin": "7.18.0", - "@typescript-eslint/parser": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@stylistic/eslint-plugin-ts": "2.12.0", + "@types/lodash.merge": "^4.6.9", + "@typescript-eslint/eslint-plugin": "8.18.0", + "@typescript-eslint/parser": "8.18.0", + "@typescript-eslint/utils": "8.18.0", "builtin-modules": "3.3.0", "bytes": "3.1.2", - "eslint": "8.57.1", + "eslint": "9.17.0", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-react": "7.37.2", - "eslint-plugin-react-hooks": "4.6.2", + "eslint-plugin-react-hooks": "5.1.0", "eslint-scope": "8.2.0", "express": "4.21.2", "form-data": "4.0.1", "functional-red-black-tree": "1.0.1", + "globals": "15.13.0", "htmlparser2": "9.1.0", "jsx-ast-utils": "3.3.5", - "lodash.clone": "4.5.0", + "lodash.merge": "^4.6.2", "minimatch": "9.0.5", "module-alias": "2.2.3", "postcss": "8.4.49", diff --git a/packages/html/tests/analysis/analyzer.test.ts b/packages/html/tests/analysis/analyzer.test.ts index 39f21a7308a..9cf30bc2d80 100644 --- a/packages/html/tests/analysis/analyzer.test.ts +++ b/packages/html/tests/analysis/analyzer.test.ts @@ -15,7 +15,7 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { join } from 'path'; -import { embeddedInput } from '../../../jsts/tests/tools/index.js'; +import { embeddedInput } from '../../../jsts/tests/tools/helpers/input.js'; import { describe, before, it } from 'node:test'; import { expect } from 'expect'; import { setContext } from '../../../shared/src/helpers/context.js'; diff --git a/packages/html/tests/builder/build.test.ts b/packages/html/tests/builder/build.test.ts index 2839d76096c..6ba33c32191 100644 --- a/packages/html/tests/builder/build.test.ts +++ b/packages/html/tests/builder/build.test.ts @@ -15,7 +15,7 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { join } from 'path'; -import { embeddedInput } from '../../../jsts/tests/tools/index.js'; +import { embeddedInput } from '../../../jsts/tests/tools/helpers/input.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; import { parseHTML } from '../../src/parser/parse.js'; @@ -27,7 +27,7 @@ describe('buildSourceCodes()', () => { const filePath = join(fixturesPath, 'multiple.html'); const sourceCodes = buildSourceCodes(await embeddedInput({ filePath }), parseHTML); expect(sourceCodes).toHaveLength(2); - expect(sourceCodes[0].ast.loc.start).toEqual({ line: 4, column: 8 }); - expect(sourceCodes[1].ast.loc.start).toEqual({ line: 8, column: 8 }); + expect(sourceCodes[0].sourceCode.ast.loc.start).toEqual({ line: 4, column: 8 }); + expect(sourceCodes[1].sourceCode.ast.loc.start).toEqual({ line: 8, column: 8 }); }); }); diff --git a/packages/jsts/src/embedded/analysis/analyzer.ts b/packages/jsts/src/embedded/analysis/analyzer.ts index 1be63a3779b..ca307babffb 100644 --- a/packages/jsts/src/embedded/analysis/analyzer.ts +++ b/packages/jsts/src/embedded/analysis/analyzer.ts @@ -69,7 +69,7 @@ function analyzeFile(linter: LinterWrapper, extendedSourceCodes: ExtendedSourceC for (const extendedSourceCode of extendedSourceCodes) { const { issues, ucfgPaths, ncloc: singleNcLoc } = analyzeSnippet(linter, extendedSourceCode); ncloc = ncloc.concat(singleNcLoc); - const filteredIssues = removeNonJsIssues(extendedSourceCode, issues); + const filteredIssues = removeNonJsIssues(extendedSourceCode.sourceCode, issues); aggregatedIssues.push(...filteredIssues); aggregatedUcfgPaths.push(...ucfgPaths); } @@ -81,11 +81,11 @@ function analyzeFile(linter: LinterWrapper, extendedSourceCodes: ExtendedSourceC function analyzeSnippet(linter: LinterWrapper, extendedSourceCode: ExtendedSourceCode) { const { issues, ucfgPaths } = linter.lint( - extendedSourceCode, + extendedSourceCode.sourceCode, extendedSourceCode.syntheticFilePath, 'MAIN', ); - const ncloc = findNcloc(extendedSourceCode); + const ncloc = findNcloc(extendedSourceCode.sourceCode); return { issues, ucfgPaths, ncloc }; } diff --git a/packages/jsts/src/embedded/builder/build.ts b/packages/jsts/src/embedded/builder/build.ts index c60993ddcd7..cbe318a9d06 100644 --- a/packages/jsts/src/embedded/builder/build.ts +++ b/packages/jsts/src/embedded/builder/build.ts @@ -16,14 +16,16 @@ */ import { SourceCode } from 'eslint'; import { patchParsingError, patchSourceCode } from './patch.js'; -import clone from 'lodash.clone'; import path from 'path'; import { EmbeddedJS } from '../analysis/embedded-js.js'; import { EmbeddedAnalysisInput } from '../analysis/analysis.js'; import { JsTsAnalysisInput } from '../../analysis/analysis.js'; import { buildSourceCode } from '../../builders/build.js'; -export type ExtendedSourceCode = SourceCode & { syntheticFilePath: string }; +export type ExtendedSourceCode = { + sourceCode: SourceCode; + syntheticFilePath: string; +}; export type LanguageParser = (text: string) => EmbeddedJS[]; /** @@ -60,12 +62,10 @@ export function buildSourceCodes( fileType: 'MAIN', } as JsTsAnalysisInput; try { - const sourceCode = buildSourceCode(jsTsAnalysisInput, 'js'); - const patchedSourceCode: SourceCode = patchSourceCode(sourceCode, embeddedJS); - // We use lodash.clone here to remove the effects of Object.preventExtensions() - const extendedSourceCode: ExtendedSourceCode = Object.assign(clone(patchedSourceCode), { + const extendedSourceCode = { + sourceCode: patchSourceCode(buildSourceCode(jsTsAnalysisInput, 'js'), embeddedJS), syntheticFilePath, - }); + }; extendedSourceCodes.push(extendedSourceCode); } catch (error) { throw patchParsingError(error, embeddedJS); diff --git a/packages/jsts/src/linter/bundle-loader.ts b/packages/jsts/src/linter/bundle-loader.ts deleted file mode 100755 index 5f7a0fc6d15..00000000000 --- a/packages/jsts/src/linter/bundle-loader.ts +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SonarQube JavaScript Plugin - * Copyright (C) 2011-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Sonar Source-Available License for more details. - * - * You should have received a copy of the Sonar Source-Available License - * along with this program; if not, see https://sonarsource.com/license/ssal/ - */ -import { Linter, Rule } from 'eslint'; -import { rules as internalRules } from '../rules/index.js'; -import { customRules as internalCustomRules } from './custom-rules/rules.js'; -import { debug } from '../../../shared/src/helpers/logging.js'; -import { getContext } from '../../../shared/src/helpers/context.js'; -import type { CustomRule } from './custom-rules/custom-rule.js'; - -export function loadCustomRules(linter: Linter, rules: CustomRule[] = []) { - for (const rule of rules) { - linter.defineRule(rule.ruleId, rule.ruleModule); - } -} - -export async function loadBundles(linter: Linter, rulesBundles: (keyof typeof loaders)[]) { - for (const bundleId of rulesBundles) { - await loaders[bundleId](linter); - } -} - -/** - * Loaders for each of the predefined rules bundles. Each bundle comes with a - * different data structure (array/record/object). - */ -const loaders: { [key: string]: Function } = { - /** - * Loads internal rules - * - * Adds the rules from SonarJS plugin, i.e. rules in path - * /src/rules - */ - internalRules(linter: Linter) { - linter.defineRules(internalRules as unknown as { [name: string]: Rule.RuleModule }); - }, - /** - * Loads global context rules - * - * Context bundles define a set of external custom rules (like the taint analysis rule) - * including rule keys and rule definitions that cannot be provided to the linter - * wrapper using the same feeding channel as rules from the active quality profile. - */ - async contextRules(linter: Linter) { - const { bundles } = getContext(); - const customRules: CustomRule[] = []; - for (const ruleBundle of bundles) { - const bundle = await import(new URL(ruleBundle).toString()); - customRules.push(...bundle.rules); - const ruleIds = bundle.rules.map((r: CustomRule) => r.ruleId); - debug(`Loaded rules ${ruleIds} from ${ruleBundle}`); - } - loadCustomRules(linter, customRules); - }, - /** - * Loads internal custom rules - * - * These are rules used internally by SonarQube to have the symbol highlighting and - * the cognitive complexity metrics. - */ - internalCustomRules(linter: Linter) { - loadCustomRules(linter, internalCustomRules); - }, -}; diff --git a/packages/jsts/src/linter/config/linter-config.ts b/packages/jsts/src/linter/config/linter-config.ts index 822d5e07e88..a723e8d1f90 100644 --- a/packages/jsts/src/linter/config/linter-config.ts +++ b/packages/jsts/src/linter/config/linter-config.ts @@ -18,6 +18,7 @@ import { Linter, Rule } from 'eslint'; import { getContext } from '../../../../shared/src/helpers/context.js'; import { customRules as internalCustomRules } from '../custom-rules/rules.js'; import { extendRuleConfig, RuleConfig } from './rule-config.js'; +import globals from 'globals'; /** * Creates an ESLint linting configuration @@ -31,29 +32,32 @@ import { extendRuleConfig, RuleConfig } from './rule-config.js'; * execution environments defined through the analyzer's properties. * * @param inputRules the rules from the active quality profile - * @param linterRules the wrapper's rule database + * @param allRules all RuleModules that have been loaded * @param environments the JavaScript execution environments * @param globs the global variables * @returns the created ESLint linting configuration */ export function createLinterConfig( inputRules: RuleConfig[], - linterRules: Map, + allRules: Record, environments: string[] = [], globs: string[] = [], ) { - const env = createEnv(environments); - const globals = createGlobals(globs); - const parserOptions = { sourceType: 'module', ecmaVersion: 2018 } as Linter.ParserOptions; const config: Linter.Config = { - env, - globals, - parserOptions, + languageOptions: { + globals: { + ...createGlobals(globs), + ...createEnv(environments), + }, + }, + plugins: { + sonarjs: { rules: allRules }, + }, rules: {}, /* using "max" version to prevent `eslint-plugin-react` from printing a warning */ settings: { react: { version: '999.999.999' } }, }; - enableRules(config, inputRules, linterRules); + enableRules(config, inputRules, allRules); enableInternalCustomRules(config); return config; } @@ -64,11 +68,13 @@ export function createLinterConfig( * @returns a configuration of JavaScript execution environments */ function createEnv(environments: string[]) { - const env: { [name: string]: boolean } = { es6: true }; - for (const key of environments) { - env[key] = true; - } - return env; + return environments.reduce( + (globalsAcc, env) => ({ + ...globalsAcc, + ...globals[env as keyof typeof globals], + }), + {}, + ); } /** @@ -97,16 +103,19 @@ function createGlobals(globs: string[]) { * * @param config the configuration to augment with rule enabling * @param inputRules the input rules to enable - * @param linterRules the linter rules available + * @param allRules all RuleModules that have been loaded */ function enableRules( config: Linter.Config, inputRules: RuleConfig[], - linterRules: Map, + allRules: Record, ) { for (const inputRule of inputRules) { - const ruleModule = linterRules.get(inputRule.key); - config.rules![inputRule.key] = ['error', ...extendRuleConfig(ruleModule, inputRule)]; + const ruleModule = allRules[inputRule.key]; + config.rules![`sonarjs/${inputRule.key}`] = [ + 'error', + ...extendRuleConfig(ruleModule.meta?.schema || undefined, inputRule), + ]; } } @@ -124,7 +133,10 @@ function enableRules( function enableInternalCustomRules(config: Linter.Config) { if (!getContext().sonarlint) { for (const internalCustomRule of internalCustomRules) { - config.rules![internalCustomRule.ruleId] = ['error', ...internalCustomRule.ruleConfig]; + config.rules![`sonarjs/${internalCustomRule.ruleId}`] = [ + 'error', + ...internalCustomRule.ruleConfig, + ]; } } } diff --git a/packages/jsts/src/linter/config/rule-config.ts b/packages/jsts/src/linter/config/rule-config.ts index 3dfc3b67961..13c2586dfc8 100644 --- a/packages/jsts/src/linter/config/rule-config.ts +++ b/packages/jsts/src/linter/config/rule-config.ts @@ -14,12 +14,12 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import type { Rule } from 'eslint'; import { hasSonarRuntimeOption, SONAR_RUNTIME } from '../parameters/sonar-runtime.js'; import { hasSonarContextOption } from '../parameters/sonar-context.js'; import { FileType } from '../../../../shared/src/helpers/files.js'; import { JsTsLanguage } from '../../../../shared/src/helpers/language.js'; import { getContext } from '../../../../shared/src/helpers/context.js'; +import type { JSONSchema4 } from 'json-schema'; /** * An input rule configuration for linting @@ -32,7 +32,7 @@ import { getContext } from '../../../../shared/src/helpers/context.js'; * and define what type(s) of file it should apply to during linting. * * An ESLint rule configuration can theoretically be a plain JavaScript object or a string. However, given the - * nature of SonarQube' rule properties, it is currently used in the form of a string. + * nature of SonarQube's rule properties, it is currently used in the form of a string. */ export interface RuleConfig { key: string; @@ -50,16 +50,19 @@ export interface RuleConfig { * * _A rule extension only applies to rules whose implementation is available._ * - * @param ruleModule the rule definition + * @param schema the rule schema * @param inputRule the rule configuration * @returns the extended rule configuration */ -export function extendRuleConfig(ruleModule: Rule.RuleModule | undefined, inputRule: RuleConfig) { +export function extendRuleConfig( + schema: JSONSchema4 | JSONSchema4[] | undefined, + inputRule: RuleConfig, +) { const options = [...inputRule.configurations]; - if (hasSonarRuntimeOption(ruleModule, inputRule.key)) { + if (hasSonarRuntimeOption(schema)) { options.push(SONAR_RUNTIME); } - if (hasSonarContextOption(ruleModule, inputRule.key)) { + if (hasSonarContextOption(schema)) { options.push(getContext()); } return options; diff --git a/packages/jsts/src/linter/issues/decode.ts b/packages/jsts/src/linter/issues/decode.ts index 1ddea69083f..acbf53aff10 100644 --- a/packages/jsts/src/linter/issues/decode.ts +++ b/packages/jsts/src/linter/issues/decode.ts @@ -35,7 +35,7 @@ import { type EncodedMessage } from '../../rules/helpers/index.js'; * @returns the decoded issue (or the original one) */ export function decodeSonarRuntime(ruleModule: Rule.RuleModule | undefined, issue: Issue): Issue { - if (hasSonarRuntimeOption(ruleModule, issue.ruleId)) { + if (hasSonarRuntimeOption(ruleModule?.meta?.schema || undefined)) { try { const encodedMessage: EncodedMessage = JSON.parse(issue.message); return { ...issue, ...encodedMessage }; diff --git a/packages/jsts/src/linter/issues/extract.ts b/packages/jsts/src/linter/issues/extract.ts index d875d33104d..1f2217a14a5 100644 --- a/packages/jsts/src/linter/issues/extract.ts +++ b/packages/jsts/src/linter/issues/extract.ts @@ -61,7 +61,7 @@ export function extractCognitiveComplexity(issues: Issue[]) { /** * Finds the first issue matching a rule id * - * The functions removes the issue from the list if it exists. + * The function removes the issue from the list if it exists. * * @param issues the issues to process * @param ruleId the rule id that is looked for diff --git a/packages/jsts/src/linter/issues/message.ts b/packages/jsts/src/linter/issues/message.ts index f056f3aa150..ec60e9272a8 100644 --- a/packages/jsts/src/linter/issues/message.ts +++ b/packages/jsts/src/linter/issues/message.ts @@ -42,7 +42,7 @@ export function convertMessage(source: SourceCode, message: Linter.LintMessage): return null; } return { - ruleId: message.ruleId, + ruleId: message.ruleId.slice(8), // remove "sonarjs/" prefix line: message.line, column: message.column, endLine: message.endLine, diff --git a/packages/jsts/src/linter/issues/transform.ts b/packages/jsts/src/linter/issues/transform.ts index 6006387398f..f1da35205c7 100644 --- a/packages/jsts/src/linter/issues/transform.ts +++ b/packages/jsts/src/linter/issues/transform.ts @@ -67,18 +67,18 @@ export type LintingResult = { */ export function transformMessages( messages: Linter.LintMessage[], - ctx: { sourceCode: SourceCode; rules: Map }, + ctx: { sourceCode: SourceCode; rules: Record }, ): LintingResult { const issues: Issue[] = []; const ucfgPaths: string[] = []; for (const message of messages) { - if (message.ruleId === 'ucfg') { + if (message.ruleId === 'sonarjs/ucfg') { ucfgPaths.push(message.message); } else { let issue = convertMessage(ctx.sourceCode, message); if (issue !== null) { - issue = normalizeLocation(decodeSonarRuntime(ctx.rules.get(issue.ruleId), issue)); + issue = normalizeLocation(decodeSonarRuntime(ctx.rules[issue.ruleId], issue)); issues.push(issue); } } diff --git a/packages/jsts/src/linter/parameters/helpers/index.ts b/packages/jsts/src/linter/parameters/helpers/index.ts deleted file mode 100644 index 6463ae21c5f..00000000000 --- a/packages/jsts/src/linter/parameters/helpers/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SonarQube JavaScript Plugin - * Copyright (C) 2011-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Sonar Source-Available License for more details. - * - * You should have received a copy of the Sonar Source-Available License - * along with this program; if not, see https://sonarsource.com/license/ssal/ - */ -export * from './schema.js'; diff --git a/packages/jsts/src/linter/parameters/sonar-context.ts b/packages/jsts/src/linter/parameters/sonar-context.ts index b814fb0258b..d88ee317eaa 100644 --- a/packages/jsts/src/linter/parameters/sonar-context.ts +++ b/packages/jsts/src/linter/parameters/sonar-context.ts @@ -14,9 +14,7 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import type { Rule } from 'eslint'; -import { getRuleSchema } from './helpers/schema.js'; - +import type { JSONSchema4 } from 'json-schema'; /** * An internal rule parameter for context-passing support * @@ -43,16 +41,10 @@ export const SONAR_CONTEXT = 'sonar-context'; /** * Checks if the rule schema sets the `sonar-context` internal parameter - * @param ruleModule the rule definition - * @param ruleId the ESLint rule key + * @param schema the rule schema * @returns true if the rule definition includes the parameter */ -export function hasSonarContextOption( - ruleModule: Rule.RuleModule | undefined, - ruleId: string, -): boolean { - const schema = getRuleSchema(ruleModule, ruleId); - +export function hasSonarContextOption(schema: JSONSchema4 | JSONSchema4[] | undefined): boolean { if (Array.isArray(schema)) { return schema.some(option => option.title === SONAR_CONTEXT); } diff --git a/packages/jsts/src/linter/parameters/sonar-runtime.ts b/packages/jsts/src/linter/parameters/sonar-runtime.ts index 654542b4aa5..b1d704c39ea 100644 --- a/packages/jsts/src/linter/parameters/sonar-runtime.ts +++ b/packages/jsts/src/linter/parameters/sonar-runtime.ts @@ -14,8 +14,7 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import type { Rule } from 'eslint'; -import { getRuleSchema } from './helpers/index.js'; +import type { JSONSchema4 } from 'json-schema'; /** * An internal rule parameter for secondary location support @@ -49,23 +48,15 @@ export const SONAR_RUNTIME = 'sonar-runtime'; /** * Checks if the rule schema sets the `sonar-runtime` internal parameter - * @param ruleModule the rule definition - * @param ruleId the ESLint rule key + * @param schema the rule schema * @returns true if the rule definition includes the parameter */ -export function hasSonarRuntimeOption( - ruleModule: Rule.RuleModule | undefined, - ruleId: string, -): boolean { - const schema = getRuleSchema(ruleModule, ruleId); - +export function hasSonarRuntimeOption(schema: JSONSchema4 | JSONSchema4[] | undefined): boolean { if (Array.isArray(schema)) { - return schema.some(option => !!option.enum && option.enum.includes(SONAR_RUNTIME)); + return schema.some(option => option.enum?.includes(SONAR_RUNTIME)); } if (schema?.type === 'array' && Array.isArray(schema.items)) { - return schema.items.some( - option => option.type === 'string' && option.enum?.includes(SONAR_RUNTIME), - ); + return schema.items.some(option => option.enum?.includes(SONAR_RUNTIME)); } return false; } diff --git a/packages/jsts/src/linter/quickfixes/messages.ts b/packages/jsts/src/linter/quickfixes/messages.ts index 21fe0c89c45..00702866d1e 100644 --- a/packages/jsts/src/linter/quickfixes/messages.ts +++ b/packages/jsts/src/linter/quickfixes/messages.ts @@ -70,7 +70,7 @@ const quickFixMessages = new Map([ export function getQuickFixMessage(ruleKey: string): string { const message = quickFixMessages.get(ruleKey); if (!message) { - if (ruleKey === 'no-duplicates' || ruleKey === 'S3863') { + if (ruleKey === 'S3863') { // TODO workaround for eslint-plugin-import/no-duplicates, rule doesn't provide message for fix return 'Remove this duplicate import'; } diff --git a/packages/jsts/src/linter/quickfixes/transform.ts b/packages/jsts/src/linter/quickfixes/transform.ts index cb9eeedfde0..8cf0151365b 100644 --- a/packages/jsts/src/linter/quickfixes/transform.ts +++ b/packages/jsts/src/linter/quickfixes/transform.ts @@ -32,7 +32,7 @@ export function transformFixes(source: SourceCode, messages: Linter.LintMessage) const quickFixes: QuickFix[] = []; if (messages.fix) { quickFixes.push({ - message: getQuickFixMessage(messages.ruleId!), + message: getQuickFixMessage(messages.ruleId!.slice(8) /* remove "sonarjs/" prefix*/), edits: [fixToEdit(source, messages.fix)], }); } @@ -61,7 +61,9 @@ function hasQuickFix(message: Linter.LintMessage): boolean { if (!message.fix && (!message.suggestions || message.suggestions.length === 0)) { return false; } - return !!message.ruleId && quickFixRules.has(message.ruleId); + return ( + !!message.ruleId && quickFixRules.has(message.ruleId.slice(8) /* remove "sonarjs/" prefix*/) + ); } /** diff --git a/packages/jsts/src/linter/visitors/symbol-highlighting.ts b/packages/jsts/src/linter/visitors/symbol-highlighting.ts index 123964e2689..e5ff0b465b8 100644 --- a/packages/jsts/src/linter/visitors/symbol-highlighting.ts +++ b/packages/jsts/src/linter/visitors/symbol-highlighting.ts @@ -74,7 +74,7 @@ export const rule: Rule.RuleModule = { variables = new Set(); }, '*': (node: estree.Node) => { - context.getDeclaredVariables(node).forEach(v => variables.add(v)); + context.sourceCode.getDeclaredVariables(node).forEach(v => variables.add(v)); }, 'Program:exit': (node: estree.Node) => { const result: SymbolHighlight[] = []; diff --git a/packages/jsts/src/linter/wrapper.ts b/packages/jsts/src/linter/wrapper.ts index 4de36af3e91..4634dd8fc3f 100644 --- a/packages/jsts/src/linter/wrapper.ts +++ b/packages/jsts/src/linter/wrapper.ts @@ -14,8 +14,7 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { Linter, SourceCode } from 'eslint'; -import { loadBundles, loadCustomRules } from './bundle-loader.js'; +import { Linter, Rule, SourceCode } from 'eslint'; import { RuleConfig } from './config/rule-config.js'; import { CustomRule } from './custom-rules/custom-rule.js'; import { JsTsLanguage } from '../../../shared/src/helpers/language.js'; @@ -23,42 +22,57 @@ import { debug } from '../../../shared/src/helpers/logging.js'; import { FileType } from '../../../shared/src/helpers/files.js'; import { LintingResult, transformMessages } from './issues/transform.js'; import { createLinterConfig } from './config/linter-config.js'; +import { customRules as internalCustomRules } from './custom-rules/rules.js'; +import { getContext } from '../../../shared/src/helpers/context.js'; +import { rules as internalRules, toUnixPath } from '../rules/index.js'; +import path from 'path'; /** * Wrapper's constructor initializer. All the parameters are optional, - * having the option to create a Linter without any additional rules - * loaded, aside of the preexisting ESLint core rules. + * having the option to create a Linter without any rules enabled * - * @param inputRules the quality profile rules, enabled rules + * @param inputRules the enabled rules * @param environments the JavaScript environments * @param globals the global variables - * @param ruleBundles the bundles of rules to load in the linter - * @param customRules array of rules to load in the linter */ -export interface WrapperOptions { +interface WrapperOptions { inputRules?: RuleConfig[]; environments?: string[]; globals?: string[]; - ruleBundles?: string[]; - customRules?: CustomRule[]; workingDirectory?: string; } -/** - * When a linter is created, by default all these bundles of rules will - * be loaded into the linter internal rules map. This behaviour can be - * adjusted by passing which bundles, if any, should be loaded instead. - * The order of this array is important here. Rules from a previous bundle - * will be overridden by the implementation of the same rule key in a - * subsequent bundle. - */ -const defaultRuleBundles = ['internalRules', 'contextRules', 'internalCustomRules']; - interface LinterConfigurationKey { language: JsTsLanguage; fileType: FileType; } +/** + * We create the ESLint plugin with all rules available. + * + * First: the internal rules, i.e. rules in the packages/jsts/src/rules folder + */ +export const rules: Record = { + ...internalRules, +}; +/** + * Second: Load internal custom rules + * + * These are rules used internally by SonarQube to have the symbol highlighting and + * the cognitive complexity metrics. + */ +internalCustomRules.forEach((rule: CustomRule) => { + rules[rule.ruleId] = rule.ruleModule; +}); + +async function loadRulesFromBundle(ruleBundle: string) { + const { rules: bundleRules } = await import(new URL(ruleBundle).toString()); + bundleRules.forEach((rule: CustomRule) => { + rules[rule.ruleId] = rule.ruleModule; + debug(`Loaded rule ${rule.ruleId} from ${ruleBundle}`); + }); +} + /** * A wrapper of ESLint linter * @@ -101,15 +115,12 @@ export class LinterWrapper { * Constructs an ESLint linter wrapper * * Constructing a linter wrapper consists in building the rule database - * the internal ESLint linter shall consider during linting. Furthermore, - * it creates a linting configuration that configures which rules should - * be used on linting based on the active quality profile and file type. + * the internal ESLint linter shall consider during linting. * - * The order of defining rules is important here because internal rules - * and external ones might share the same name by accident, which would - * unexpectedly overwrite the behaviour of the internal one in favor of - * the external one. This is why some internal rules are named with the - * prefix `sonar-`, e.g., `sonar-no-fallthrough`. + * The working directory of the ESLint Linter needs to be configured to a path + * that contains all files that will be analyzed, as the linter.verify process + * will ignore any file external to that path: + * https://github.com/eslint/rewrite/blob/0e09a420009796ceb4157ebe0dcee1348fdc4b75/packages/config-array/src/config-array.js#L865 * * @param options the wrapper's options */ @@ -120,8 +131,15 @@ export class LinterWrapper { } async init() { - await loadBundles(this.linter, this.options.ruleBundles ?? defaultRuleBundles); - loadCustomRules(this.linter, this.options.customRules); + /** + * Context bundles define a set of external custom rules (like the taint analysis rule) + * including rule keys and rule definitions that cannot be provided to the linter + * wrapper using the same feeding channel as rules from the active quality profile. + */ + const { bundles } = getContext(); + for (const ruleBundle of bundles) { + await loadRulesFromBundle(ruleBundle); + } this.config = this.createConfig(); } @@ -148,18 +166,17 @@ export class LinterWrapper { let linterConfig = this.getConfig(key); if (!linterConfig) { // we create default linter config with internal rules only which provide metrics, tokens, etc... - linterConfig = createLinterConfig( - [], - this.linter.getRules(), - this.options.environments, - this.options.globals, - ); + linterConfig = createLinterConfig([], rules, this.options.environments, this.options.globals); this.config.set(key, linterConfig); } - const config = { ...linterConfig, settings: { ...linterConfig.settings, fileType } }; + const config = { + ...linterConfig, + files: [`**/${path.posix.basename(toUnixPath(filePath))}`], + settings: { ...linterConfig.settings, fileType }, + }; const options = { filename: filePath, allowInlineConfig: false }; const messages = this.linter.verify(sourceCode, config, options); - return transformMessages(messages, { sourceCode, rules: this.linter.getRules() }); + return transformMessages(messages, { sourceCode, rules }); } /** @@ -190,11 +207,10 @@ export class LinterWrapper { ); }); const configByKey: Map = new Map(); - const linterRules = this.linter.getRules(); - rulesByKey.forEach((rules, key) => { + rulesByKey.forEach((ruleConfigs, key) => { configByKey.set( key, - createLinterConfig(rules, linterRules, this.options.environments, this.options.globals), + createLinterConfig(ruleConfigs, rules, this.options.environments, this.options.globals), ); }); return configByKey; diff --git a/packages/jsts/src/parsers/options.ts b/packages/jsts/src/parsers/options.ts index d787d486a1d..6d7032b3516 100644 --- a/packages/jsts/src/parsers/options.ts +++ b/packages/jsts/src/parsers/options.ts @@ -41,6 +41,11 @@ export function buildParserOptions(initialOptions: Linter.ParserOptions, usingBa range: true, ecmaVersion: 2018, sourceType: 'module', + // The single run makes that typescript-eslint uses normal programs instead of use watch programs + // In CI this automatic detection sets singleRun to true + // https://github.com/typescript-eslint/typescript-eslint/blob/d24a82854d06089cbd2a8801f2982fd4781f3701/packages/typescript-estree/src/parseSettings/inferSingleRun.ts#L44 + // We need watch programs for replace contents of the files (for example in Vue files) + disallowAutomaticSingleRunInference: true, codeFrame: false, ecmaFeatures: { jsx: true, diff --git a/packages/jsts/src/rules/S3776/rule.ts b/packages/jsts/src/rules/S3776/rule.ts index a79d1b6a567..c2933eb4dfd 100644 --- a/packages/jsts/src/rules/S3776/rule.ts +++ b/packages/jsts/src/rules/S3776/rule.ts @@ -64,7 +64,8 @@ export const rule: Rule.RuleModule = { ), create(context) { /** Complexity threshold */ - const threshold = (context.options as FromSchema)[0] ?? DEFAULT_THRESHOLD; + const thresholdOption = (context.options as FromSchema)[0]; + const threshold = typeof thresholdOption === 'number' ? thresholdOption : DEFAULT_THRESHOLD; /** Indicator if the file complexity should be reported */ const isFileComplexity = context.options.includes('metric'); diff --git a/packages/jsts/src/rules/S3801/rule.ts b/packages/jsts/src/rules/S3801/rule.ts index d31e072c312..28619f91550 100644 --- a/packages/jsts/src/rules/S3801/rule.ts +++ b/packages/jsts/src/rules/S3801/rule.ts @@ -55,6 +55,12 @@ export const rule: Rule.RuleModule = { functionContextStack[functionContextStack.length - 1], ); + // tracks the segments we've traversed in the current code path + let currentSegments: Set; + + // tracks all current segments for all open paths + const allCurrentSegments: Set[] = []; + function checkFunctionLikeDeclaration( node: FunctionLikeDeclaration, functionContext?: FunctionContext, @@ -91,7 +97,7 @@ export const rule: Rule.RuleModule = { // As this method is called at the exit point of a function definition, the current // segments are the ones leading to the exit point at the end of the function. If they // are reachable, it means there is an implicit return. - functionContext.containsImplicitReturn = functionContext.codePath.currentSegments.some( + functionContext.containsImplicitReturn = Array.from(currentSegments).some( segment => segment.reachable, ); } @@ -127,9 +133,28 @@ export const rule: Rule.RuleModule = { containsImplicitReturn: false, returnStatements: [], }); + allCurrentSegments.push(currentSegments); + currentSegments = new Set(); }, onCodePathEnd() { functionContextStack.pop(); + currentSegments = allCurrentSegments.pop()!; + }, + + onCodePathSegmentStart(segment) { + currentSegments.add(segment); + }, + + onCodePathSegmentEnd(segment) { + currentSegments.delete(segment); + }, + + onUnreachableCodePathSegmentStart(segment: Rule.CodePathSegment) { + currentSegments.add(segment); + }, + + onUnreachableCodePathSegmentEnd(segment: Rule.CodePathSegment) { + currentSegments.delete(segment); }, ReturnStatement(node: estree.Node) { diff --git a/packages/jsts/src/rules/helpers/decorators/interceptor.ts b/packages/jsts/src/rules/helpers/decorators/interceptor.ts index 7bb697274ed..e88dc7ecbde 100644 --- a/packages/jsts/src/rules/helpers/decorators/interceptor.ts +++ b/packages/jsts/src/rules/helpers/decorators/interceptor.ts @@ -55,7 +55,6 @@ export function interceptReport( settings: originalContext.settings, parserPath: originalContext.parserPath, parserOptions: originalContext.parserOptions, - parserServices: originalContext.sourceCode.parserServices, sourceCode: originalContext.sourceCode, cwd: originalContext.cwd, filename: originalContext.filename, @@ -82,10 +81,6 @@ export function interceptReport( return originalContext.filename; }, - getScope() { - return originalContext.getScope(); - }, - getSourceCode() { return originalContext.sourceCode; }, diff --git a/packages/jsts/tests/analysis/analyzer.test.ts b/packages/jsts/tests/analysis/analyzer.test.ts index cf5311c9c5f..d909906c649 100644 --- a/packages/jsts/tests/analysis/analyzer.test.ts +++ b/packages/jsts/tests/analysis/analyzer.test.ts @@ -15,8 +15,7 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import path from 'path/posix'; -import { jsTsInput, parseJavaScriptSourceFile } from '../tools/index.js'; -import { Linter, Rule } from 'eslint'; +import { Linter } from 'eslint'; import { describe, beforeEach, it } from 'node:test'; import { expect } from 'expect'; import { getDependencies, getManifests, toUnixPath } from '../../src/rules/helpers/index.js'; @@ -28,6 +27,8 @@ import { initializeLinter } from '../../src/linter/linters.js'; import { JsTsAnalysisOutput } from '../../src/analysis/analysis.js'; import { createAndSaveProgram } from '../../src/program/program.js'; import { deserializeProtobuf } from '../../src/parsers/ast.js'; +import { jsTsInput } from '../tools/helpers/input.js'; +import { parseJavaScriptSourceFile } from '../tools/helpers/parsing.js'; const currentPath = toUnixPath(import.meta.dirname); @@ -242,9 +243,9 @@ describe('analyzeJSTS', () => { it('should analyze file contents', async () => { const rules = [{ key: 'S3512', configurations: [], fileTypeTarget: ['MAIN'] }] as RuleConfig[]; - await await initializeLinter(rules); + await initializeLinter(rules); - const filePath = '/tmp/dir'; + const filePath = path.join(currentPath, 'fixtures', 'foo.js'); const fileContent = `'foo' + bar + 'baz'`; const language = 'js'; @@ -857,44 +858,51 @@ describe('analyzeJSTS', () => { const baseDir = path.join(currentPath, 'fixtures', 'package-json'); const linter = new Linter(); - linter.defineRule('custom-rule-file', { - create(context) { - return { - CallExpression(node) { - const packageJsons = getManifests( - path.posix.dirname(toUnixPath(context.filename)), - baseDir, - ); - expect(packageJsons).toBeDefined(); - expect(packageJsons[0].name).toEqual('test-module'); - context.report({ - node: node.callee, - message: 'call', - }); + const linterConfig: Linter.Config = { + plugins: { + sonarjs: { + rules: { + 'custom-rule-file': { + create(context) { + return { + CallExpression(node) { + const packageJsons = getManifests( + path.posix.dirname(toUnixPath(context.filename)), + baseDir, + ); + expect(packageJsons).toBeDefined(); + expect(packageJsons[0].name).toEqual('test-module'); + context.report({ + node: node.callee, + message: 'call', + }); + }, + }; + }, + }, }, - }; + }, }, - } as Rule.RuleModule); - + rules: { 'sonarjs/custom-rule-file': 'error' }, + files: ['**/*.vue', '**/*.js'], + }; const filePath = path.join(baseDir, 'custom.js'); const sourceCode = await parseJavaScriptSourceFile(filePath); - const issues = linter.verify( - sourceCode, - { rules: { 'custom-rule-file': 'error' } }, - { filename: filePath, allowInlineConfig: false }, - ); + const issues = linter.verify(sourceCode, linterConfig, { + filename: filePath, + allowInlineConfig: false, + }); expect(issues).toHaveLength(1); expect(issues[0].message).toEqual('call'); const vueFilePath = path.join(baseDir, 'code.vue'); const vueSourceCode = await parseJavaScriptSourceFile(vueFilePath); - const vueIssues = linter.verify( - vueSourceCode, - { rules: { 'custom-rule-file': 'error' } }, - { filename: vueFilePath, allowInlineConfig: false }, - ); + const vueIssues = linter.verify(vueSourceCode, linterConfig, { + filename: vueFilePath, + allowInlineConfig: false, + }); expect(vueIssues).toHaveLength(1); expect(vueIssues[0].message).toEqual('call'); }); @@ -945,7 +953,6 @@ describe('analyzeJSTS', () => { it('should return the AST along with the issues', async () => { const rules = [{ key: 'S4524', configurations: [], fileTypeTarget: ['MAIN'] }] as RuleConfig[]; await initializeLinter(rules); - await initializeLinter([], [], [], 'empty'); const filePath = path.join(currentPath, 'fixtures', 'code.js'); const language = 'js'; @@ -960,7 +967,6 @@ describe('analyzeJSTS', () => { it('should not return the AST if the skipAst flag is set', async () => { const rules = [{ key: 'S4524', configurations: [], fileTypeTarget: ['MAIN'] }] as RuleConfig[]; await initializeLinter(rules); - await initializeLinter([], [], [], 'empty'); const filePath = path.join(currentPath, 'fixtures', 'code.js'); const language = 'js'; diff --git a/packages/jsts/tests/builders/build.test.ts b/packages/jsts/tests/builders/build.test.ts index 1b381bb3e04..5eec673ae86 100644 --- a/packages/jsts/tests/builders/build.test.ts +++ b/packages/jsts/tests/builders/build.test.ts @@ -16,7 +16,7 @@ */ import path from 'path'; import { AST } from 'vue-eslint-parser'; -import { jsTsInput } from '../tools/index.js'; +import { jsTsInput } from '../tools/helpers/input.js'; import { describe, it, beforeEach, mock, Mock } from 'node:test'; import { expect } from 'expect'; import { setContext } from '../../../shared/src/helpers/context.js'; diff --git a/packages/jsts/tests/linter/bundle-loader.test.ts b/packages/jsts/tests/linter/bundle-loader.test.ts deleted file mode 100755 index d6bfc8b6392..00000000000 --- a/packages/jsts/tests/linter/bundle-loader.test.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SonarQube JavaScript Plugin - * Copyright (C) 2011-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Sonar Source-Available License for more details. - * - * You should have received a copy of the Sonar Source-Available License - * along with this program; if not, see https://sonarsource.com/license/ssal/ - */ -import { Linter } from 'eslint'; -import { loadBundles, loadCustomRules } from '../../src/linter/bundle-loader.js'; -import { describe, it } from 'node:test'; -import { expect } from 'expect'; -import path from 'node:path/posix'; -import { pathToFileURL } from 'node:url'; -import { setContext } from '../../../shared/src/helpers/context.js'; -import { CustomRule } from '../../src/linter/custom-rules/custom-rule.js'; - -describe('BundleLoader', () => { - it('should only load rules when requested', async () => { - const bundlePath = path.join( - import.meta.dirname, - 'fixtures', - 'index', - 'custom-rule-bundle', - 'rules.js', - ); - setContext({ - workDir: '/tmp/dir', - shouldUseTypeScriptParserForJS: false, - sonarlint: false, - bundles: [pathToFileURL(bundlePath).href], - }); - - const linter = new Linter(); - - const customRuleId = 'custom-rule-file'; - // @ts-ignore - const ruleModule = await import('./fixtures/wrapper/custom-rule.js'); - const customRules: CustomRule[] = [ - { - ruleId: customRuleId, - ruleConfig: [], - ruleModule: ruleModule.rule, - }, - ]; - - expect(linter.getRules().get('max-params')).toBeDefined(); - expect(linter.getRules().get('S6328')).toBeUndefined(); - expect(linter.getRules().get('custom-rule-file')).toBeUndefined(); - expect(linter.getRules().get('custom-rule')).toBeUndefined(); - expect(linter.getRules().get('internal-cognitive-complexity')).toBeUndefined(); - - await loadBundles(linter, ['internalRules']); - expect(linter.getRules().get('S6328')).toBeDefined(); - expect(linter.getRules().get('custom-rule-file')).toBeUndefined(); - expect(linter.getRules().get('custom-rule')).toBeUndefined(); - expect(linter.getRules().get('internal-cognitive-complexity')).toBeUndefined(); - - loadCustomRules(linter, customRules); - expect(linter.getRules().get('custom-rule-file')).toBeDefined(); - expect(linter.getRules().get('custom-rule')).toBeUndefined(); - expect(linter.getRules().get('internal-cognitive-complexity')).toBeUndefined(); - - await loadBundles(linter, ['contextRules']); - expect(linter.getRules().get('custom-rule')).toBeDefined(); - expect(linter.getRules().get('internal-cognitive-complexity')).toBeUndefined(); - - await loadBundles(linter, ['internalCustomRules']); - expect(linter.getRules().get('internal-cognitive-complexity')).toBeDefined(); - }); -}); diff --git a/packages/jsts/tests/linter/config/linter-config.test.ts b/packages/jsts/tests/linter/config/linter-config.test.ts index a10d15fcedc..e7498b9b0bc 100644 --- a/packages/jsts/tests/linter/config/linter-config.test.ts +++ b/packages/jsts/tests/linter/config/linter-config.test.ts @@ -32,44 +32,36 @@ describe('createLinterConfig', () => { }); it('should enable environments', () => { - const { env } = createLinterConfig([], new Map(), ['node', 'jquery']); - expect(env).toEqual( - expect.objectContaining({ - node: true, - jquery: true, - }), - ); + const { globals } = createLinterConfig([], {}, ['node', 'jquery']).languageOptions; + expect(globals).toHaveProperty('__dirname'); + expect(globals).toHaveProperty('$'); }); it('should enable globals', () => { - const { globals } = createLinterConfig([], new Map(), [], ['_', '$']); - expect(globals).toEqual( - expect.objectContaining({ - _: true, - $: true, - }), - ); + const { globals } = createLinterConfig([], {}, [], ['_', '$']).languageOptions; + expect(globals).toHaveProperty('_'); + expect(globals).toHaveProperty('$'); }); it('should enable rules', () => { const inputRules: RuleConfig[] = [{ key: 'foo', configurations: [], fileTypeTarget: ['MAIN'] }]; - const linterRules = new Map([ - ['foo', { module: 42 } as unknown as Rule.RuleModule], - ['bar', { module: 24 } as unknown as Rule.RuleModule], - ]); + const linterRules = { + foo: { module: 42 } as unknown as Rule.RuleModule, + bar: { module: 24 } as unknown as Rule.RuleModule, + }; const { rules } = createLinterConfig(inputRules, linterRules); expect(rules).toEqual( expect.objectContaining({ - foo: ['error'], + 'sonarjs/foo': ['error'], }), ); }); it('should enable internal custom rules by default', () => { - const { rules } = createLinterConfig([], new Map()); + const { rules } = createLinterConfig([], {}); expect(rules).toEqual({ - 'internal-cognitive-complexity': ['error', 'metric'], - 'internal-symbol-highlighting': ['error'], + 'sonarjs/internal-cognitive-complexity': ['error', 'metric'], + 'sonarjs/internal-symbol-highlighting': ['error'], }); }); @@ -80,7 +72,7 @@ describe('createLinterConfig', () => { sonarlint: true, bundles: [], }); - const { rules } = createLinterConfig([], new Map()); + const { rules } = createLinterConfig([], {}); expect(rules).toEqual({}); }); }); diff --git a/packages/jsts/tests/linter/config/rule-config.test.ts b/packages/jsts/tests/linter/config/rule-config.test.ts index 945dd9e930e..fb85a51e450 100644 --- a/packages/jsts/tests/linter/config/rule-config.test.ts +++ b/packages/jsts/tests/linter/config/rule-config.test.ts @@ -14,7 +14,6 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import type { Rule } from 'eslint'; import { describe, it } from 'node:test'; import { expect } from 'expect'; import { SONAR_RUNTIME } from '../../../src/rules/index.js'; @@ -24,16 +23,13 @@ import { SONAR_CONTEXT } from '../../../src/linter/parameters/sonar-context.js'; describe('extendRuleConfig', () => { it('should include `sonar-runtime`', () => { - const ruleModule = { - meta: { schema: [{ enum: SONAR_RUNTIME }] }, - } as unknown as Rule.RuleModule; const inputRule: RuleConfig = { key: 'some-rule', configurations: [42], fileTypeTarget: ['MAIN'], }; - const config = extendRuleConfig(ruleModule, inputRule); + const config = extendRuleConfig([{ enum: SONAR_RUNTIME }], inputRule); expect(config).toEqual([42, SONAR_RUNTIME]); }); @@ -46,16 +42,13 @@ describe('extendRuleConfig', () => { }; setContext(ctx); - const ruleModule = { - meta: { schema: [{ title: SONAR_CONTEXT }] }, - } as unknown as Rule.RuleModule; const inputRule: RuleConfig = { key: 'some-rule', configurations: [42], fileTypeTarget: ['MAIN'], }; - const config = extendRuleConfig(ruleModule, inputRule); + const config = extendRuleConfig([{ title: SONAR_CONTEXT }], inputRule); expect(config).toEqual([42, ctx]); }); @@ -68,16 +61,13 @@ describe('extendRuleConfig', () => { }; setContext(ctx); - const ruleModule = { - meta: { schema: [{ enum: SONAR_RUNTIME, title: SONAR_CONTEXT }] }, - } as unknown as Rule.RuleModule; const inputRule: RuleConfig = { key: 'some-rule', configurations: [42], fileTypeTarget: ['MAIN'], }; - const config = extendRuleConfig(ruleModule, inputRule); + const config = extendRuleConfig([{ enum: SONAR_RUNTIME, title: SONAR_CONTEXT }], inputRule); expect(config).toEqual([42, SONAR_RUNTIME, ctx]); }); }); diff --git a/packages/jsts/tests/linter/fixtures/wrapper/custom-rule.js b/packages/jsts/tests/linter/fixtures/wrapper/custom-rule.js deleted file mode 100644 index e09298fe117..00000000000 --- a/packages/jsts/tests/linter/fixtures/wrapper/custom-rule.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * A rule definition used for testing purpose as a custom rule, - * which highlights the injection of the global context - */ -const rule = { - meta: { - schema: [ - { - title: 'sonar-context', - type: 'object', - properties: { - workDir: { - type: 'string', - }, - }, - }, - ], - }, - create(context) { - const [{ workDir }] = context.options - return { - Literal: node => { - context.report({ - node, - message: `Visited '${node.value}' literal from a custom rule with injected contextual workDir '${workDir}'.` - }); - } - }; - }, -}; - -export { rule }; diff --git a/packages/jsts/tests/linter/index.test.ts b/packages/jsts/tests/linter/index.test.ts index 71cd0dc1de6..c1279148435 100644 --- a/packages/jsts/tests/linter/index.test.ts +++ b/packages/jsts/tests/linter/index.test.ts @@ -15,7 +15,7 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import path from 'path'; -import { parseJavaScriptSourceFile } from '../tools/index.js'; +import { parseJavaScriptSourceFile } from '../tools/helpers/parsing.js'; import { describe, it, mock, Mock } from 'node:test'; import { expect } from 'expect'; import { pathToFileURL } from 'node:url'; @@ -83,7 +83,7 @@ describe('initializeLinter', () => { const logs = (console.log as Mock).mock.calls.map( call => call.arguments[0], ); - expect(logs).toContain(`DEBUG Loaded rules custom-rule from ${bundlePath}`); + expect(logs).toContain(`DEBUG Loaded rule custom-rule from ${bundlePath}`); expect(logs).toContain('DEBUG Initializing linter "default" with custom-rule'); const filePath = path.join(import.meta.dirname, 'fixtures', 'index', 'custom.js'); diff --git a/packages/jsts/tests/linter/issues/message.test.ts b/packages/jsts/tests/linter/issues/message.test.ts index 674290be7cb..d29060229a7 100644 --- a/packages/jsts/tests/linter/issues/message.test.ts +++ b/packages/jsts/tests/linter/issues/message.test.ts @@ -17,7 +17,7 @@ import { Linter, SourceCode } from 'eslint'; import { convertMessage } from '../../../src/linter/issues/message.js'; import path from 'path'; -import { parseJavaScriptSourceFile } from '../../tools/index.js'; +import { parseJavaScriptSourceFile } from '../../tools/helpers/parsing.js'; import { rule as S1116 } from '../../../src/rules/S1116/index.js'; import { describe, it, Mock, mock } from 'node:test'; import { expect } from 'expect'; @@ -28,11 +28,13 @@ describe('convertMessage', () => { const sourceCode = await parseJavaScriptSourceFile(filePath); const ruleId = 'S1116'; - const config = { rules: { [ruleId]: 'error' } } as Linter.Config; - const linter = new Linter(); - linter.defineRule(ruleId, S1116); - const [message] = linter.verify(sourceCode, config); + const [message] = linter.verify(sourceCode, { + plugins: { + sonarjs: { rules: { [ruleId]: S1116 } }, + }, + rules: { [`sonarjs/${ruleId}`]: 'error' }, + }); expect(convertMessage(sourceCode, message)).toEqual({ ruleId, diff --git a/packages/jsts/tests/linter/issues/transform.test.ts b/packages/jsts/tests/linter/issues/transform.test.ts index cb00e21dc6a..7b9e8eed44a 100644 --- a/packages/jsts/tests/linter/issues/transform.test.ts +++ b/packages/jsts/tests/linter/issues/transform.test.ts @@ -16,25 +16,35 @@ */ import { Linter } from 'eslint'; import path from 'path'; -import { parseJavaScriptSourceFile, parseTypeScriptSourceFile } from '../../tools/index.js'; +import { + parseJavaScriptSourceFile, + parseTypeScriptSourceFile, +} from '../../tools/helpers/parsing.js'; import { transformMessages } from '../../../src/linter/issues/transform.js'; import { rules } from '../../../src/rules/index.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; +import { dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; describe('transformMessages', () => { it('should transform ESLint messages', async () => { - const filePath = path.join(import.meta.dirname, 'fixtures', 'message.js'); + const filePath = path.join(dirname(fileURLToPath(import.meta.url)), 'fixtures', 'message.js'); const sourceCode = await parseJavaScriptSourceFile(filePath); const ruleId = 'S3504'; - const config = { rules: { [ruleId]: 'error' } } as any; - const linter = new Linter(); - linter.defineRule(ruleId, rules[ruleId]); - const messages = linter.verify(sourceCode, config); + const messages = linter.verify(sourceCode, { + plugins: { + sonarjs: { rules }, + }, + rules: { [`sonarjs/${ruleId}`]: 'error' }, + }); - const [issue] = transformMessages(messages, { sourceCode, rules: linter.getRules() }).issues; + const [issue] = transformMessages(messages, { + sourceCode, + rules: { [ruleId]: rules[ruleId] }, + }).issues; expect(issue).toEqual( expect.objectContaining({ ruleId, @@ -52,14 +62,18 @@ describe('transformMessages', () => { const sourceCode = await parseJavaScriptSourceFile(filePath); const ruleId = 'S1172'; - const config = { rules: { [ruleId]: 'error' } } as any; - const linter = new Linter(); - linter.defineRule(ruleId, rules[ruleId]); - - const messages = linter.verify(sourceCode, config); + const messages = linter.verify(sourceCode, { + plugins: { + sonarjs: { rules }, + }, + rules: { [`sonarjs/${ruleId}`]: 'error' }, + }); - const [issue] = transformMessages(messages, { sourceCode, rules: linter.getRules() }).issues; + const [issue] = transformMessages(messages, { + sourceCode, + rules: { [ruleId]: rules[ruleId] }, + }).issues; expect(issue).toEqual( expect.objectContaining({ ruleId, @@ -76,13 +90,18 @@ describe('transformMessages', () => { const sourceCode = await parseJavaScriptSourceFile(filePath); const ruleId = 'S1116'; - const config = { rules: { [ruleId]: 'error' } } as any; - const linter = new Linter(); - linter.defineRule(ruleId, rules[ruleId]); - const messages = linter.verify(sourceCode, config); + const messages = linter.verify(sourceCode, { + plugins: { + sonarjs: { rules }, + }, + rules: { [`sonarjs/${ruleId}`]: 'error' }, + }); - const [issue] = transformMessages(messages, { sourceCode, rules: linter.getRules() }).issues; + const [issue] = transformMessages(messages, { + sourceCode, + rules: { [ruleId]: rules[ruleId] }, + }).issues; expect(issue).toEqual( expect.objectContaining({ quickFixes: [ @@ -111,16 +130,17 @@ describe('transformMessages', () => { const sourceCode = await parseTypeScriptSourceFile(filePath, tsConfigs); const ruleId = 'S4621'; - const config = { rules: { [ruleId]: ['error', 'sonar-runtime'] } } as any; - const linter = new Linter(); - linter.defineRule(ruleId, rules[ruleId]); - - const messages = linter.verify(sourceCode, config); + const messages = linter.verify(sourceCode, { + plugins: { + sonarjs: { rules }, + }, + rules: { [`sonarjs/${ruleId}`]: ['error', 'sonar-runtime'] }, + }); const [{ secondaryLocations }] = transformMessages(messages, { sourceCode, - rules: linter.getRules(), + rules: { [ruleId]: rules[ruleId] }, }).issues; expect(secondaryLocations).toEqual([ { @@ -138,17 +158,16 @@ describe('transformMessages', () => { const tsConfigs = []; const sourceCode = await parseTypeScriptSourceFile(filePath, tsConfigs); - const linter = new Linter(); const messages = [ { - ruleId: 'ucfg', + ruleId: 'sonarjs/ucfg', message: path.join(import.meta.dirname, 'fixtures', 'secondary.ts'), } as Linter.LintMessage, ]; const { issues, ucfgPaths } = transformMessages(messages as Linter.LintMessage[], { sourceCode, - rules: linter.getRules(), + rules: {}, }); expect(ucfgPaths.length).toEqual(1); expect(issues.length).toEqual(0); diff --git a/packages/jsts/tests/linter/parameters/helpers/schema.test.ts b/packages/jsts/tests/linter/parameters/helpers/schema.test.ts deleted file mode 100644 index 9c1fb6029aa..00000000000 --- a/packages/jsts/tests/linter/parameters/helpers/schema.test.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - * SonarQube JavaScript Plugin - * Copyright (C) 2011-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Sonar Source-Available License for more details. - * - * You should have received a copy of the Sonar Source-Available License - * along with this program; if not, see https://sonarsource.com/license/ssal/ - */ -import type { Rule } from 'eslint'; -import { getRuleSchema } from '../../../../src/linter/parameters/helpers/index.js'; -import { describe, it, mock, Mock } from 'node:test'; -import { expect } from 'expect'; - -describe('getRuleSchema', () => { - it('should return the schema', () => { - expect( - getRuleSchema({ meta: { schema: [42] } } as unknown as Rule.RuleModule, 'schema'), - ).toEqual([42]); - }); - - it('should return undefined on an undefined rule', () => { - console.log = mock.fn(); - expect(getRuleSchema(undefined, 'undefined-rule')).toBeUndefined(); - const logs = (console.log as Mock).mock.calls.map( - call => call.arguments[0], - ); - expect(logs).toContain(`DEBUG ruleModule not found for rule undefined-rule`); - }); - - it('should return undefined on a meta-less rule', () => { - expect(getRuleSchema({ meta: undefined } as Rule.RuleModule, 'meta-less')).toBeUndefined(); - }); - - it('should return undefined on a schema-less rule', () => { - expect( - getRuleSchema({ meta: { schema: undefined } } as Rule.RuleModule, 'schema-less'), - ).toBeUndefined(); - }); -}); diff --git a/packages/jsts/tests/linter/parameters/sonar-context.test.ts b/packages/jsts/tests/linter/parameters/sonar-context.test.ts index f91b28504f1..7cd233bc152 100644 --- a/packages/jsts/tests/linter/parameters/sonar-context.test.ts +++ b/packages/jsts/tests/linter/parameters/sonar-context.test.ts @@ -23,18 +23,14 @@ import { expect } from 'expect'; describe('hasSonarContextOption', () => { it('should return true for a rule that has `sonar-context` option', () => { - expect( - hasSonarContextOption({ meta: { schema: [{ title: SONAR_CONTEXT }] } } as any, 'fake'), - ).toEqual(true); + expect(hasSonarContextOption([{ title: SONAR_CONTEXT }])).toEqual(true); }); it('should return false for a rule that has not `sonar-context` option', () => { - expect(hasSonarContextOption({ meta: { schema: [{ title: 42 }] } } as any, 'fake')).toEqual( - false, - ); + expect(hasSonarContextOption([{ title: 42 }])).toEqual(false); }); it('should return false for a rule without any schema', () => { - expect(hasSonarContextOption({ meta: {} } as any, 'fake')).toEqual(false); + expect(hasSonarContextOption({})).toEqual(false); }); }); diff --git a/packages/jsts/tests/linter/parameters/sonar-runtime.test.ts b/packages/jsts/tests/linter/parameters/sonar-runtime.test.ts index b8bc8b6aa0a..9787187180b 100644 --- a/packages/jsts/tests/linter/parameters/sonar-runtime.test.ts +++ b/packages/jsts/tests/linter/parameters/sonar-runtime.test.ts @@ -21,18 +21,14 @@ import { SONAR_RUNTIME } from '../../../src/rules/index.js'; describe('hasSonarRuntimeOption', () => { it('should return true for a rule that has `sonar-runtime` option', () => { - expect( - hasSonarRuntimeOption({ meta: { schema: [{ enum: [SONAR_RUNTIME] }] } } as any, 'fake'), - ).toEqual(true); + expect(hasSonarRuntimeOption([{ enum: [SONAR_RUNTIME] }])).toEqual(true); }); it('should return false for a rule that has not `sonar-runtime` option', () => { - expect(hasSonarRuntimeOption({ meta: { schema: [{ enum: [42] }] } } as any, 'fake')).toEqual( - false, - ); + expect(hasSonarRuntimeOption([{ enum: [42] }])).toEqual(false); }); it('should return false for a rule without any schema', () => { - expect(hasSonarRuntimeOption({ meta: {} } as any, 'fake')).toEqual(false); + expect(hasSonarRuntimeOption({})).toEqual(false); }); }); diff --git a/packages/jsts/tests/linter/quickfixes/transform.test.ts b/packages/jsts/tests/linter/quickfixes/transform.test.ts index ae134d0c728..aa4c29ecf1b 100644 --- a/packages/jsts/tests/linter/quickfixes/transform.test.ts +++ b/packages/jsts/tests/linter/quickfixes/transform.test.ts @@ -16,9 +16,8 @@ */ import { Linter } from 'eslint'; import path from 'path'; -import { rule as noExclusiveTests } from '../../../src/rules/S6426/index.js'; import { transformFixes } from '../../../src/linter/quickfixes/transform.js'; -import { parseJavaScriptSourceFile } from '../../tools/helpers/index.js'; +import { parseJavaScriptSourceFile } from '../../tools/helpers/parsing.js'; import { rules as allRules } from '../../../src/rules/index.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; @@ -29,12 +28,15 @@ describe('transformFixes', () => { const sourceCode = await parseJavaScriptSourceFile(filePath); const ruleId = 'S1116'; - const rules = { [ruleId]: 'error' } as any; const linter = new Linter(); - linter.defineRule(ruleId, allRules[ruleId]); - const [message] = linter.verify(sourceCode, { rules }); - expect(message).toEqual(expect.objectContaining({ ruleId })); + const [message] = linter.verify(sourceCode, { + plugins: { + sonarjs: { rules: { [ruleId]: allRules[ruleId] } }, + }, + rules: { [`sonarjs/${ruleId}`]: 'error' }, + }); + expect(message).toEqual(expect.objectContaining({ ruleId: `sonarjs/${ruleId}` })); const quickFixes = transformFixes(sourceCode, message); expect(quickFixes).toEqual([ @@ -55,14 +57,15 @@ describe('transformFixes', () => { const sourceCode = await parseJavaScriptSourceFile(filePath); const ruleId = 'S6426'; - const rules = { [ruleId]: 'error' } as any; const linter = new Linter(); - linter.defineRule(ruleId, allRules[ruleId]); - linter.defineRule(ruleId, noExclusiveTests); - - const [message] = linter.verify(sourceCode, { rules }); - expect(message).toEqual(expect.objectContaining({ ruleId })); + const [message] = linter.verify(sourceCode, { + plugins: { + sonarjs: { rules: { [ruleId]: allRules[ruleId] } }, + }, + rules: { [`sonarjs/${ruleId}`]: 'error' }, + }); + expect(message).toEqual(expect.objectContaining({ ruleId: `sonarjs/${ruleId}` })); const quickFixes = transformFixes(sourceCode, message); expect(quickFixes).toEqual([ @@ -83,13 +86,15 @@ describe('transformFixes', () => { const sourceCode = await parseJavaScriptSourceFile(filePath); const ruleId = 'S1186'; - const rules = { [ruleId]: 'error' } as any; const linter = new Linter(); - linter.defineRule(ruleId, allRules[ruleId]); - - const [message] = linter.verify(sourceCode, { rules }); - expect(message).toEqual(expect.objectContaining({ ruleId })); + const [message] = linter.verify(sourceCode, { + plugins: { + sonarjs: { rules: { [ruleId]: allRules[ruleId] } }, + }, + rules: { [`sonarjs/${ruleId}`]: 'error' }, + }); + expect(message).toEqual(expect.objectContaining({ ruleId: `sonarjs/${ruleId}` })); const quickFixes = transformFixes(sourceCode, message); expect(quickFixes).toEqual([ @@ -110,11 +115,15 @@ describe('transformFixes', () => { const sourceCode = await parseJavaScriptSourceFile(filePath); const ruleId = 'S1440'; - const rules = { [ruleId]: 'error' } as any; const linter = new Linter(); - linter.defineRule(ruleId, allRules[ruleId]); - const [message] = linter.verify(sourceCode, { rules }); + const [message] = linter.verify(sourceCode, { + plugins: { + sonarjs: { rules: { [ruleId]: allRules[ruleId] } }, + }, + rules: { [`sonarjs/${ruleId}`]: 'error' }, + }); + expect(message).toEqual(expect.objectContaining({ ruleId: `sonarjs/${ruleId}` })); expect(message.fix).toBeDefined(); const quickFixes = transformFixes(sourceCode, message); @@ -126,12 +135,15 @@ describe('transformFixes', () => { const sourceCode = await parseJavaScriptSourceFile(filePath); const ruleId = 'S1119'; - const rules = { [ruleId]: 'error' } as any; const linter = new Linter(); - linter.defineRule(ruleId, allRules[ruleId]); - - const [message] = linter.verify(sourceCode, { rules }); + const [message] = linter.verify(sourceCode, { + plugins: { + sonarjs: { rules: { [ruleId]: allRules[ruleId] } }, + }, + rules: { [`sonarjs/${ruleId}`]: 'error' }, + }); + expect(message).toEqual(expect.objectContaining({ ruleId: `sonarjs/${ruleId}` })); expect(message.fix).toBeUndefined(); const quickFixes = transformFixes(sourceCode, message); diff --git a/packages/jsts/tests/linter/visitors/cpd.test.ts b/packages/jsts/tests/linter/visitors/cpd.test.ts index 1a50de7c687..e0843d35ec3 100644 --- a/packages/jsts/tests/linter/visitors/cpd.test.ts +++ b/packages/jsts/tests/linter/visitors/cpd.test.ts @@ -16,7 +16,7 @@ */ import { CpdToken, getCpdTokens } from '../../../src/linter/visitors/cpd.js'; import path from 'path'; -import { parseJavaScriptSourceFile } from '../../tools/helpers/index.js'; +import { parseJavaScriptSourceFile } from '../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/visitors/metrics/classes.test.ts b/packages/jsts/tests/linter/visitors/metrics/classes.test.ts index a13d7811c47..580d3b7d732 100644 --- a/packages/jsts/tests/linter/visitors/metrics/classes.test.ts +++ b/packages/jsts/tests/linter/visitors/metrics/classes.test.ts @@ -16,7 +16,7 @@ */ import { countClasses } from '../../../../src/linter/visitors/metrics/classes.js'; import path from 'path'; -import { parseJavaScriptSourceFile } from '../../../tools/index.js'; +import { parseJavaScriptSourceFile } from '../../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/visitors/metrics/comments.test.ts b/packages/jsts/tests/linter/visitors/metrics/comments.test.ts index b923e89d7ae..2e23f1c68e8 100644 --- a/packages/jsts/tests/linter/visitors/metrics/comments.test.ts +++ b/packages/jsts/tests/linter/visitors/metrics/comments.test.ts @@ -16,7 +16,7 @@ */ import { findCommentLines } from '../../../../src/linter/visitors/metrics/comments.js'; import path from 'path'; -import { parseJavaScriptSourceFile } from '../../../tools/helpers/index.js'; +import { parseJavaScriptSourceFile } from '../../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/visitors/metrics/compute.test.ts b/packages/jsts/tests/linter/visitors/metrics/compute.test.ts index 39c2705412c..cc1803e5cc3 100644 --- a/packages/jsts/tests/linter/visitors/metrics/compute.test.ts +++ b/packages/jsts/tests/linter/visitors/metrics/compute.test.ts @@ -16,7 +16,7 @@ */ import path from 'path'; import { computeMetrics } from '../../../../src/linter/visitors/metrics/index.js'; -import { parseJavaScriptSourceFile } from '../../../tools/index.js'; +import { parseJavaScriptSourceFile } from '../../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/visitors/metrics/cyclomatic-complexity.test.ts b/packages/jsts/tests/linter/visitors/metrics/cyclomatic-complexity.test.ts index f6a637ca2e4..f442788fb46 100644 --- a/packages/jsts/tests/linter/visitors/metrics/cyclomatic-complexity.test.ts +++ b/packages/jsts/tests/linter/visitors/metrics/cyclomatic-complexity.test.ts @@ -16,7 +16,7 @@ */ import { computeCyclomaticComplexity } from '../../../../src/linter/visitors/metrics/cyclomatic-complexity.js'; import path from 'path'; -import { parseJavaScriptSourceFile } from '../../../tools/index.js'; +import { parseJavaScriptSourceFile } from '../../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/visitors/metrics/executable-lines.test.ts b/packages/jsts/tests/linter/visitors/metrics/executable-lines.test.ts index e1fbdd1ba1e..8120eba7ad9 100644 --- a/packages/jsts/tests/linter/visitors/metrics/executable-lines.test.ts +++ b/packages/jsts/tests/linter/visitors/metrics/executable-lines.test.ts @@ -16,7 +16,7 @@ */ import { findExecutableLines } from '../../../../src/linter/visitors/metrics/executable-lines.js'; import path from 'path'; -import { parseTypeScriptSourceFile } from '../../../tools/index.js'; +import { parseTypeScriptSourceFile } from '../../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/visitors/metrics/functions.test.ts b/packages/jsts/tests/linter/visitors/metrics/functions.test.ts index b763e1f8860..43ca399161c 100644 --- a/packages/jsts/tests/linter/visitors/metrics/functions.test.ts +++ b/packages/jsts/tests/linter/visitors/metrics/functions.test.ts @@ -16,7 +16,7 @@ */ import { countFunctions } from '../../../../src/linter/visitors/metrics/functions.js'; import path from 'path'; -import { parseJavaScriptSourceFile } from '../../../tools/index.js'; +import { parseJavaScriptSourceFile } from '../../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/visitors/metrics/helpers/counter.test.ts b/packages/jsts/tests/linter/visitors/metrics/helpers/counter.test.ts index 0c711e2506e..4933764ce1e 100644 --- a/packages/jsts/tests/linter/visitors/metrics/helpers/counter.test.ts +++ b/packages/jsts/tests/linter/visitors/metrics/helpers/counter.test.ts @@ -16,7 +16,7 @@ */ import { visitAndCountIf } from '../../../../../src/linter/visitors/metrics/helpers/index.js'; import path from 'path'; -import { parseJavaScriptSourceFile } from '../../../../tools/index.js'; +import { parseJavaScriptSourceFile } from '../../../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/visitors/metrics/helpers/tokens.test.ts b/packages/jsts/tests/linter/visitors/metrics/helpers/tokens.test.ts index 92c8369853b..dcb7e7c565e 100644 --- a/packages/jsts/tests/linter/visitors/metrics/helpers/tokens.test.ts +++ b/packages/jsts/tests/linter/visitors/metrics/helpers/tokens.test.ts @@ -17,7 +17,7 @@ import { extractTokensAndComments } from '../../../../../src/linter/visitors/metrics/helpers/index.js'; import { AST } from 'vue-eslint-parser'; import path from 'path'; -import { parseJavaScriptSourceFile } from '../../../../tools/index.js'; +import { parseJavaScriptSourceFile } from '../../../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/visitors/metrics/ncloc.test.ts b/packages/jsts/tests/linter/visitors/metrics/ncloc.test.ts index 05379403fe1..73537d07373 100644 --- a/packages/jsts/tests/linter/visitors/metrics/ncloc.test.ts +++ b/packages/jsts/tests/linter/visitors/metrics/ncloc.test.ts @@ -16,7 +16,7 @@ */ import { findNcloc } from '../../../../src/linter/visitors/metrics/ncloc.js'; import path from 'path'; -import { parseJavaScriptSourceFile } from '../../../tools/index.js'; +import { parseJavaScriptSourceFile } from '../../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/visitors/metrics/nosonar.test.ts b/packages/jsts/tests/linter/visitors/metrics/nosonar.test.ts index f5346ef9501..cdfb6a92a85 100644 --- a/packages/jsts/tests/linter/visitors/metrics/nosonar.test.ts +++ b/packages/jsts/tests/linter/visitors/metrics/nosonar.test.ts @@ -15,7 +15,7 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import path from 'path'; -import { parseJavaScriptSourceFile } from '../../../tools/index.js'; +import { parseJavaScriptSourceFile } from '../../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; import { findNoSonarLines } from '../../../../src/linter/visitors/metrics/index.js'; diff --git a/packages/jsts/tests/linter/visitors/metrics/statements.test.ts b/packages/jsts/tests/linter/visitors/metrics/statements.test.ts index fd247d2d52a..028c8e34634 100644 --- a/packages/jsts/tests/linter/visitors/metrics/statements.test.ts +++ b/packages/jsts/tests/linter/visitors/metrics/statements.test.ts @@ -16,7 +16,7 @@ */ import { countStatements } from '../../../../src/linter/visitors/metrics/statements.js'; import path from 'path'; -import { parseJavaScriptSourceFile } from '../../../tools/index.js'; +import { parseJavaScriptSourceFile } from '../../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/visitors/symbol-highlighting.test.ts b/packages/jsts/tests/linter/visitors/symbol-highlighting.test.ts index 746f841a2bf..a7242a79a0b 100644 --- a/packages/jsts/tests/linter/visitors/symbol-highlighting.test.ts +++ b/packages/jsts/tests/linter/visitors/symbol-highlighting.test.ts @@ -17,7 +17,7 @@ import { Linter } from 'eslint'; import { Location } from '../../../src/linter/visitors/metrics/helpers/index.js'; import path from 'path'; -import { parseTypeScriptSourceFile } from '../../tools/index.js'; +import { parseTypeScriptSourceFile } from '../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; import { SymbolHighlight, rule } from '../../../src/linter/visitors/symbol-highlighting.js'; @@ -96,12 +96,15 @@ async function highlighting(fixture: string): Promise { const sourceCode = await parseTypeScriptSourceFile(filePath, []); const ruleId = 'symbol-highlighting'; - const rules = { [ruleId]: 'error' } as any; const linter = new Linter(); - linter.defineRule(ruleId, rule); - const [message] = linter.verify(sourceCode, { rules }); + const [message] = linter.verify(sourceCode, { + plugins: { + sonarjs: { rules: { [ruleId]: rule } }, + }, + rules: { [`sonarjs/${ruleId}`]: 'error' }, + }); return JSON.parse(message.message) as SymbolHighlight[]; } diff --git a/packages/jsts/tests/linter/visitors/syntax-highlighting.test.ts b/packages/jsts/tests/linter/visitors/syntax-highlighting.test.ts index 07c7ad233ab..6bf4dd6a1f5 100644 --- a/packages/jsts/tests/linter/visitors/syntax-highlighting.test.ts +++ b/packages/jsts/tests/linter/visitors/syntax-highlighting.test.ts @@ -20,7 +20,7 @@ import { TextType, } from '../../../src/linter/visitors/syntax-highlighting.js'; import path from 'path'; -import { parseTypeScriptSourceFile } from '../../tools/helpers/index.js'; +import { parseTypeScriptSourceFile } from '../../tools/helpers/parsing.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/visitors/visitor.test.ts b/packages/jsts/tests/linter/visitors/visitor.test.ts index e75a2361a3a..86ff93120dd 100644 --- a/packages/jsts/tests/linter/visitors/visitor.test.ts +++ b/packages/jsts/tests/linter/visitors/visitor.test.ts @@ -16,7 +16,7 @@ */ import { visit } from '../../../src/linter/visitors/visitor.js'; import path from 'path'; -import { parseTypeScriptSourceFile } from '../../tools/helpers/index.js'; +import { parseTypeScriptSourceFile } from '../../tools/helpers/parsing.js'; import { childrenOf } from '../../../src/rules/index.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; diff --git a/packages/jsts/tests/linter/wrapper.test.ts b/packages/jsts/tests/linter/wrapper.test.ts index 494a89ff21a..32e23d9e60f 100644 --- a/packages/jsts/tests/linter/wrapper.test.ts +++ b/packages/jsts/tests/linter/wrapper.test.ts @@ -16,13 +16,12 @@ */ import fs from 'fs'; import path from 'path'; -import { parseJavaScriptSourceFile, parseTypeScriptSourceFile } from '../tools/index.js'; +import { parseJavaScriptSourceFile, parseTypeScriptSourceFile } from '../tools/helpers/parsing.js'; import { describe, before, it } from 'node:test'; import { expect } from 'expect'; import { setContext } from '../../../shared/src/helpers/context.js'; import { LinterWrapper } from '../../src/linter/wrapper.js'; import { RuleConfig } from '../../src/linter/config/rule-config.js'; -import { CustomRule } from '../../src/linter/custom-rules/custom-rule.js'; import { JsTsLanguage } from '../../../shared/src/helpers/language.js'; import { quickFixRules } from '../../src/linter/quickfixes/rules.js'; @@ -75,41 +74,6 @@ describe('LinterWrapper', () => { ]); }); - it('should report issues from custom rules', async () => { - const filePath = path.join(import.meta.dirname, 'fixtures', 'wrapper', 'custom-rule.js'); - const sourceCode = await parseJavaScriptSourceFile(filePath); - - const customRuleId = 'custom-rule'; - const ruleModule = await import('./fixtures/wrapper/custom-rule.js'); - const customRules: CustomRule[] = [ - { - ruleId: customRuleId, - ruleConfig: [], - ruleModule: ruleModule.rule, - }, - ]; - - const rules = [ - { key: customRuleId, configurations: [], fileTypeTarget: ['MAIN'] }, - ] as RuleConfig[]; - - const linter = new LinterWrapper({ inputRules: rules, customRules }); - await linter.init(); - - const { - issues: [issue], - } = linter.lint(sourceCode, filePath, 'MAIN'); - - expect(issue).toEqual( - expect.objectContaining({ - ruleId: customRuleId, - message: - `Visited 'sonar-context' literal from a custom rule ` + - `with injected contextual workDir '/tmp/workdir'.`, - }), - ); - }); - it('should report issues based on the file type', async () => { const filePath = path.join(import.meta.dirname, 'fixtures', 'wrapper', 'file-type.js'); const sourceCode = await parseJavaScriptSourceFile(filePath); @@ -214,7 +178,7 @@ describe('LinterWrapper', () => { expect(issues).toHaveLength(0); }); - it('should not report on globals provided by environnments configuration', async () => { + it('should not report on globals provided by environments configuration', async () => { const filePath = path.join(import.meta.dirname, 'fixtures', 'wrapper', 'env.js'); const fileType = 'MAIN'; const language: JsTsLanguage = 'js'; @@ -230,7 +194,7 @@ describe('LinterWrapper', () => { await linter.init(); const { issues } = linter.lint(sourceCode, filePath); const config = linter.getConfig({ language, fileType }); - expect(config.env['browser']).toEqual(true); + expect(config.languageOptions.globals).toHaveProperty('alert'); expect(issues).toHaveLength(0); }); @@ -250,7 +214,9 @@ describe('LinterWrapper', () => { await linter.init(); const { issues } = linter.lint(sourceCode, filePath); - expect(linter.getConfig({ language, fileType }).globals['angular']).toEqual(true); + expect(linter.getConfig({ language, fileType }).languageOptions.globals['angular']).toEqual( + true, + ); expect(issues).toHaveLength(0); }); diff --git a/packages/jsts/tests/parsers/options.test.ts b/packages/jsts/tests/parsers/options.test.ts index 69f7264647e..4232b761c4d 100644 --- a/packages/jsts/tests/parsers/options.test.ts +++ b/packages/jsts/tests/parsers/options.test.ts @@ -28,6 +28,7 @@ describe('buildParserOptions', () => { expect(buildParserOptions({ filePath, parser }, usingBabel)).toEqual({ tokens: true, comment: true, + disallowAutomaticSingleRunInference: true, loc: true, range: true, ecmaVersion: 2018, diff --git a/packages/jsts/tests/rules/helpers/ast.test.ts b/packages/jsts/tests/rules/helpers/ast.test.ts index ea1bcc8c972..e470c27657b 100644 --- a/packages/jsts/tests/rules/helpers/ast.test.ts +++ b/packages/jsts/tests/rules/helpers/ast.test.ts @@ -19,9 +19,9 @@ import path from 'path'; import { Linter, Rule } from 'eslint'; import { getProperty } from '../../../src/rules/index.js'; -import { parseJavaScriptSourceFile } from '../../tools/index.js'; import { describe, test } from 'node:test'; import { expect } from 'expect'; +import { parseJavaScriptSourceFile } from '../../tools/helpers/parsing.js'; describe('getProperty', () => { ( @@ -56,23 +56,31 @@ describe('getProperty', () => { const baseDir = path.join(import.meta.dirname, 'fixtures'); const linter = new Linter(); - linter.defineRule('custom-rule-file', { - create(context: Rule.RuleContext) { - return { - 'ExpressionStatement ObjectExpression': node => { - const property = getProperty(node, key, context); - verifier(property); - }, - }; - }, - } as Rule.RuleModule); const filePath = path.join(baseDir, fixtureFile); const sourceCode = await parseJavaScriptSourceFile(filePath); linter.verify( sourceCode, - { rules: { 'custom-rule-file': 'error' } }, + { + plugins: { + sonarjs: { + rules: { + 'custom-rule-file': { + create(context: Rule.RuleContext) { + return { + 'ExpressionStatement ObjectExpression': node => { + const property = getProperty(node, key, context); + verifier(property); + }, + }; + }, + } as Rule.RuleModule, + }, + }, + }, + rules: { 'sonarjs/custom-rule-file': 'error' }, + }, { filename: filePath, allowInlineConfig: false }, ); }); diff --git a/packages/jsts/tests/rules/helpers/aws/cdk.test.ts b/packages/jsts/tests/rules/helpers/aws/cdk.test.ts index bfee20145ea..c5ef157c4ff 100644 --- a/packages/jsts/tests/rules/helpers/aws/cdk.test.ts +++ b/packages/jsts/tests/rules/helpers/aws/cdk.test.ts @@ -15,218 +15,213 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { AwsCdkTemplate } from '../../../../src/rules/index.js'; -import { TypeScriptRuleTester } from '../../../tools/index.js'; +import { RuleTester } from '../../../tools/testers/rule-tester.js'; +import { describe } from 'node:test'; const rule = AwsCdkTemplate({ 'aws-cdk-lib.aws_module.Class': (node, context) => { context.report({ node, message: 'Found it!' }); }, }); - -const ruleTester = new TypeScriptRuleTester(); -ruleTester.run('AWS CDK Rule Template', rule, { - valid: [ - { - code: `new Class()`, - }, - { - code: `new cdk.Class()`, - }, - { - code: `new cdk.aws_module.Class()`, - }, - { - code: ` +describe('aws test', () => { + const ruleTester = new RuleTester(); + ruleTester.run('AWS CDK Rule Template', rule, { + valid: [ + { + code: `new Class()`, + }, + { + code: `new cdk.Class()`, + }, + { + code: `new cdk.aws_module.Class()`, + }, + { + code: ` const { Class } = require('aws-cdk-lib/aws-module'); function b() { const Class = {}; new Class(); }`, - }, - { - code: ` + }, + { + code: ` import { Class } from 'aws-cdk-lib/aws-module'; function b() { const Class = {}; new Class(); }`, - }, - { - code: ` + }, + { + code: ` import { default as cdk } from 'aws-cdk-lib'; new cdk.aws_module.Class(...args); `, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` const { Class } = require('aws-cdk-lib/aws-module'); new Class(); `, - errors: [ - { - message: 'Found it!', - line: 3, - }, - ], - }, - { - code: ` + errors: [ + { + message: 'Found it!', + line: 3, + }, + ], + }, + { + code: ` const { Class: foo } = require('aws-cdk-lib/aws-module'); new foo(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const { Class: foo } = require('aws-cdk-lib/aws-module'); const bar = foo; new bar(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const { Class } = require('aws-cdk-lib').aws_module; new Class(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const foo = require('aws-cdk-lib').aws_module?.Class; new foo(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const foo = require('aws-cdk-lib').aws_module!.Class; new foo(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const foo = require('aws-cdk-lib').aws_module.Class; new foo(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const foo = require('aws-cdk-lib')['aws_module']['Class']; new foo(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const { Class: foo } = require('aws-cdk-lib').aws_module; new foo(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const { aws_module: cdk } = require('aws-cdk-lib'); new cdk.Class(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const { aws_module: cdk } = require('aws-cdk-lib'); const foo = cdk?.Class; new foo(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const { aws_module } = require('aws-cdk-lib'); new aws_module.Class(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` const cdk = require('aws-cdk-lib'); new cdk.aws_module.Class(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` import { Class } from 'aws-cdk-lib/aws-module'; new Class(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` import { Class as foo } from 'aws-cdk-lib/aws-module'; new foo(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` import { aws_module } from 'aws-cdk-lib'; new aws_module.Class(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` import { aws_module as foo } from 'aws-cdk-lib'; new foo.Class(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` import cdk from 'aws-cdk-lib'; new cdk.aws_module.Class(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` import cdk from 'aws-cdk-lib'; new cdk.aws_module!.Class(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` import cdk = require('aws-cdk-lib'); new cdk.aws_module.Class(); `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` import cdk = require('aws-cdk-lib'); import module = cdk.aws_module; new module.Class(); `, - errors: 1, - }, - { - code: ` -import cdk from 'aws-cdk-lib'; -new cdk.aws_module.Class(); - `, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` import { default as cdk } from 'aws-cdk-lib'; new cdk.aws_module.Class(); `, - errors: 1, - }, - ], + errors: 1, + }, + ], + }); }); diff --git a/packages/jsts/tests/rules/helpers/aws/s3.test.ts b/packages/jsts/tests/rules/helpers/aws/s3.test.ts index 3e70d62c681..8b15f11741c 100644 --- a/packages/jsts/tests/rules/helpers/aws/s3.test.ts +++ b/packages/jsts/tests/rules/helpers/aws/s3.test.ts @@ -14,7 +14,7 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { NodeRuleTester } from '../../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from '../../../tools/testers/rule-tester.js'; import { S3BucketTemplate } from '../../../../src/rules/index.js'; const rule = S3BucketTemplate((node, context) => { @@ -26,7 +26,7 @@ const rule = S3BucketTemplate((node, context) => { } }); -const ruleTester = new NodeRuleTester({ parserOptions: { ecmaVersion: 2018 } }); +const ruleTester = new RuleTester(); ruleTester.run('S3 Bucket Template', rule, { valid: [ { diff --git a/packages/jsts/tests/rules/helpers/decorators/interceptor.test.ts b/packages/jsts/tests/rules/helpers/decorators/interceptor.test.ts index aa7d25403c2..fde226d3865 100644 --- a/packages/jsts/tests/rules/helpers/decorators/interceptor.test.ts +++ b/packages/jsts/tests/rules/helpers/decorators/interceptor.test.ts @@ -15,7 +15,7 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { Rule } from 'eslint'; -import { NodeRuleTester } from '../../../../tests/tools/testers/rule-tester.js'; +import { NoTypeCheckingRuleTester, Tests } from '../../../tools/testers/rule-tester.js'; import { interceptReport } from '../../../../src/rules/index.js'; // Covers `getDeclaredVariables`, `getScope`, `getSourceCode`. import { rule as noParameterReassignment } from '../../../../src/rules/S1226/index.js'; @@ -23,7 +23,6 @@ import { rule as noParameterReassignment } from '../../../../src/rules/S1226/ind import { rule as noImplicitDependencies } from '../../../../src/rules/S4328/index.js'; import path from 'path'; import { describe } from 'node:test'; -import { fileURLToPath } from 'node:url'; describe('interceptReport', () => { assertThatInterceptReportDecoratorForwardsCalls( @@ -49,15 +48,9 @@ describe('interceptReport', () => { function assertThatInterceptReportDecoratorForwardsCalls( name: string, rule: Rule.RuleModule, - tests: { - valid?: NodeRuleTester.ValidTestCase[]; - invalid?: NodeRuleTester.InvalidTestCase[]; - }, + tests: Tests, ) { - const ruleTester = new NodeRuleTester({ - parser: fileURLToPath(import.meta.resolve('@typescript-eslint/parser')), - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, - }); + const ruleTester = new NoTypeCheckingRuleTester(); ruleTester.run(name + ' (without decorator)', rule, tests); ruleTester.run( diff --git a/packages/jsts/tests/rules/helpers/express.test.ts b/packages/jsts/tests/rules/helpers/express.test.ts index c8d6a8b69e0..038ac9ca94a 100644 --- a/packages/jsts/tests/rules/helpers/express.test.ts +++ b/packages/jsts/tests/rules/helpers/express.test.ts @@ -15,7 +15,7 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { Rule } from 'eslint'; -import { NodeRuleTester } from '../../../tests/tools/testers/rule-tester.js'; +import { RuleTester } from 'eslint'; import estree from 'estree'; import { Express, getProperty } from '../../../src/rules/index.js'; @@ -39,8 +39,8 @@ const rule = Express.SensitiveMiddlewarePropertyRule( `Make sure sensitive property is safe here.`, ); -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, +const ruleTester = new RuleTester({ + languageOptions: { ecmaVersion: 2018, sourceType: 'module' }, }); ruleTester.run( 'Express.js rule template for middlewares configured with sensitive settings', diff --git a/packages/jsts/tests/rules/helpers/regex/rule-template.test.ts b/packages/jsts/tests/rules/helpers/regex/rule-template.test.ts index 9aa602b9fe6..bb4e7e04c45 100644 --- a/packages/jsts/tests/rules/helpers/regex/rule-template.test.ts +++ b/packages/jsts/tests/rules/helpers/regex/rule-template.test.ts @@ -16,8 +16,9 @@ */ import type { Rule } from 'eslint'; import { AST } from '@eslint-community/regexpp'; -import { JavaScriptRuleTester } from '../../../tools/index.js'; import { createRegExpRule } from '../../../../src/rules/helpers/regex/rule-template.js'; +import { RuleTester } from '../../../tools/testers/rule-tester.js'; +import { describe } from 'node:test'; const rule: Rule.RuleModule = createRegExpRule(context => { return { @@ -33,160 +34,163 @@ const rule: Rule.RuleModule = createRegExpRule(context => { }; }); -const ruleTester = new JavaScriptRuleTester(); -ruleTester.run('Template for regular expressions rules', rule, { - valid: [ - { - code: `const str = 'abc123';`, - }, - { - code: `const re = RegExpression();`, - }, - { - code: `const re = RegExp();`, - }, - { - code: `const re = new RegExp();`, - }, - { - code: `const re = new RegExp(pattern);`, - }, - { - code: `const re = new RegExp(pattern, flags);`, - }, - { - code: `const re = /z/;`, - }, - { - code: `const re = new RegExp('z');`, - }, - { - code: `const re = new RegExp(42);`, - }, - { - code: `const re = new RegExp('[malformed');`, - }, - { - code: ` +describe('Rule template test', () => { + const ruleTester = new RuleTester(); + ruleTester.run('Template for regular expressions rules', rule, { + valid: [ + { + code: `const str = 'abc123';`, + }, + { + code: `const re = RegExpression();`, + }, + { + code: `const re = RegExp();`, + }, + { + code: `const re = new RegExp();`, + }, + { + code: `const re = new RegExp(pattern);`, + }, + { + code: `const re = new RegExp(pattern, flags);`, + }, + { + code: `const re = /z/;`, + }, + { + code: `const re = new RegExp('z');`, + }, + { + code: `const re = new RegExp(42);`, + }, + { + code: `const re = new RegExp('[malformed');`, + }, + { + code: ` let pattern = 'a'; pattern = 'b'; const re = new RegExp(pattern); `, - }, - { - code: `const re = RegExp(\`a \${pattern}\`);`, - }, - { - // FN - code: ` + }, + { + code: `const re = RegExp(\`a \${pattern}\`);`, + }, + { + // FN + code: ` const pattern = 'a'; const re = RegExp(\`b \${pattern}\`);`, - }, - { - code: `const re = RegExp('42' - '24');`, - }, - { - // should work for 'recursive' reassignments - code: ` + }, + { + code: `const re = RegExp('42' - '24');`, + }, + { + // should work for 'recursive' reassignments + code: ` let regex; if (isString(regex)) { regex = new RegExp('^' + regex + '$'); }`, - }, - ], - invalid: [ - { - code: ` + }, + ], + invalid: [ + { + code: ` const re = /a/u; // ^ `, - errors: [ - { - message: `Found character 'a'.`, - line: 2, - column: 21, - endLine: 2, - endColumn: 22, - }, - ], - }, - { - code: `const re = RegExp('ab');`, - errors: [ - { - message: `Found character 'a'.`, - line: 1, - column: 20, - endLine: 1, - endColumn: 21, - }, - ], - }, - { - code: `const re = new RegExp('a');`, - errors: [ - { - message: `Found character 'a'.`, - line: 1, - column: 24, - endLine: 1, - endColumn: 25, - }, - ], - }, - { - code: `const re = new RegExp('\u0061', 'u');`, - errors: 1, - }, - { - code: `const re = RegExp(\`a\`);`, - errors: 1, - }, - { - code: ` + errors: [ + { + message: `Found character 'a'.`, + line: 2, + column: 21, + endLine: 2, + endColumn: 22, + }, + ], + }, + { + code: `const re = RegExp('ab');`, + errors: [ + { + message: `Found character 'a'.`, + line: 1, + column: 20, + endLine: 1, + endColumn: 21, + }, + ], + }, + { + code: `const re = new RegExp('a');`, + errors: [ + { + message: `Found character 'a'.`, + line: 1, + column: 24, + endLine: 1, + endColumn: 25, + }, + ], + }, + { + code: `const re = new RegExp('\u0061', 'u');`, + errors: 1, + }, + { + code: `const re = RegExp(\`a\`);`, + errors: 1, + }, + { + code: ` const pattern = 'a'; const re = new RegExp(pattern); // ^^^^^^^ `, - errors: [ - { - line: 3, - column: 31, - endColumn: 38, - }, - ], - }, - { - code: ` + errors: [ + { + message: "Found character 'a'.", + line: 3, + column: 31, + endColumn: 38, + }, + ], + }, + { + code: ` const re = new RegExp(('a' + 'c') + 'b'); // ^^^^^^^^^^^^^^^^^ `, - errors: [ - { - line: 2, - column: 31, - endColumn: 48, - }, - ], - }, - { - code: ` + errors: [ + { + message: "Found character 'a'.", + line: 2, + column: 31, + endColumn: 48, + }, + ], + }, + { + code: ` const pattern = 'a'; const re = new RegExp('c' + pattern + 'b');`, - errors: 1, - }, - { - code: ` + errors: 1, + }, + { + code: ` 'str'.match('a'); 'str'.matchAll('a'); 'str'.search('a'); `, - errors: 3, - }, - { - // test we are reporting only once - code: ` + errors: 3, + }, + { + // test we are reporting only once + code: ` const pattern = 'a'; const regexPattern = /a/; 'str'.search(pattern); @@ -195,11 +199,33 @@ ruleTester.run('Template for regular expressions rules', rule, { 'str'.search(regexPattern); // we should not report here, as we are reporting on regex literal 'str'.search(new RegExp(pattern)); `, - errors: [{ line: 3 }, { line: 4 }, { line: 5 }, { line: 6 }, { line: 8 }], - }, - { - code: `RegExp('//a')`, - errors: 1, - }, - ], + errors: [ + { + message: "Found character 'a'.", + line: 3, + }, + { + message: "Found character 'a'.", + line: 4, + }, + { + message: "Found character 'a'.", + line: 5, + }, + { + message: "Found character 'a'.", + line: 6, + }, + { + message: "Found character 'a'.", + line: 8, + }, + ], + }, + { + code: `RegExp('//a')`, + errors: 1, + }, + ], + }); }); diff --git a/packages/jsts/tests/rules/index.test.ts b/packages/jsts/tests/rules/index.test.ts index 7050f2884db..0fd724a84dc 100644 --- a/packages/jsts/tests/rules/index.test.ts +++ b/packages/jsts/tests/rules/index.test.ts @@ -22,15 +22,6 @@ import { describe, it } from 'node:test'; import { expect } from 'expect'; import { pathToFileURL } from 'node:url'; -const externalPlugins = [ - 'eslint', - 'typescript-eslint', - 'jsx-a11y', - 'import', - 'react', - 'react-hooks', -]; - import { rules as a11yRules } from '../../src/rules/external/a11y.js'; import { rules as reactRules } from '../../src/rules/external/react.js'; import { getESLintCoreRule } from '../../src/rules/external/core.js'; @@ -45,7 +36,10 @@ const allExternalRules = { import: key => importRules[key], react: key => reactRules[key], 'react-hooks': key => reactHooksRules[key], + '@stylistic/eslint-plugin-ts': async key => + await import(`@stylistic/eslint-plugin-ts/rules/${key}`), }; +const externalPlugins = Object.keys(allExternalRules); describe('Plugin public API', () => { it('should map keys to rules definitions', async () => { @@ -77,18 +71,18 @@ describe('Plugin public API', () => { } else if (metadata.implementation === 'external') { expect(externalPlugins).toContain(metadata.externalPlugin); expect(usedExternalEslintIds).not.toContain(metadata.eslintId); - expect(allExternalRules[metadata.externalPlugin](metadata.eslintId)).toBeDefined(); + expect(await allExternalRules[metadata.externalPlugin](metadata.eslintId)).toBeDefined(); usedExternalEslintIds.push(metadata.eslintId); } else if (metadata.implementation === 'decorated') { expect(metadata.externalRules.length).toBeGreaterThan(0); - metadata.externalRules.forEach(externalRule => { + for (const externalRule of metadata.externalRules) { expect(usedExternalEslintIds).not.toContain(externalRule.externalRule); usedExternalEslintIds.push(externalRule.externalRule); expect(externalPlugins).toContain(externalRule.externalPlugin); expect( - allExternalRules[externalRule.externalPlugin](externalRule.externalRule), + await allExternalRules[externalRule.externalPlugin](externalRule.externalRule), ).toBeDefined(); - }); + } } } }); diff --git a/packages/jsts/tests/rules/typescript-eslint/sanitize.test.ts b/packages/jsts/tests/rules/typescript-eslint/sanitize.test.ts index 2966a3774a4..8d1f5517fe5 100644 --- a/packages/jsts/tests/rules/typescript-eslint/sanitize.test.ts +++ b/packages/jsts/tests/rules/typescript-eslint/sanitize.test.ts @@ -14,15 +14,12 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import pkg from '@typescript-eslint/eslint-plugin'; import { Linter } from 'eslint'; -import { sanitize } from '../../../src/rules/external/typescript-eslint/sanitize.js'; import path from 'path'; -import { parseTypeScriptSourceFile } from '../../tools/helpers/index.js'; import { describe, test } from 'node:test'; import { expect } from 'expect'; - -const { rules: typescriptESLintRules } = pkg; +import { parseTypeScriptSourceFile } from '../../tools/helpers/parsing.js'; +import { rules } from '../../../src/rules/external/typescript-eslint/index.js'; const cases = [ { @@ -43,19 +40,18 @@ describe('sanitize', () => { cases.forEach(({ action, typing, tsConfigFiles, issues }) => { test(`should ${action} a sanitized rule raise issues when type information is ${typing}`, async () => { const ruleId = 'prefer-readonly'; - const sanitizedRule = sanitize(typescriptESLintRules[ruleId]); - - const linter = new Linter(); - linter.defineRule(ruleId, sanitizedRule); - const fixtures = path.join(import.meta.dirname, 'fixtures', 'sanitize'); const filePath = path.join(fixtures, 'file.ts'); const tsConfigs = tsConfigFiles.map(file => path.join(fixtures, file)); const sourceCode = await parseTypeScriptSourceFile(filePath, tsConfigs); - const rules = { [ruleId]: 'error' } as any; - const messages = linter.verify(sourceCode, { rules }); + const messages = new Linter().verify(sourceCode, { + plugins: { + sonarjs: { rules: { [ruleId]: rules[ruleId] } }, + }, + rules: { [`sonarjs/${ruleId}`]: 'error' }, + }); expect(messages).toHaveLength(issues); }); }); diff --git a/packages/jsts/tests/tools/index.ts b/packages/jsts/tests/tools/index.ts deleted file mode 100644 index e34b06182cb..00000000000 --- a/packages/jsts/tests/tools/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SonarQube JavaScript Plugin - * Copyright (C) 2011-2024 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Sonar Source-Available License for more details. - * - * You should have received a copy of the Sonar Source-Available License - * along with this program; if not, see https://sonarsource.com/license/ssal/ - */ -export * from './helpers/index.js'; -export * from './testers/index.js'; diff --git a/packages/jsts/tests/tools/sonar-runtime/rule/no-missing-sonar-runtime.test.ts b/packages/jsts/tests/tools/sonar-runtime/rule/no-missing-sonar-runtime.test.ts index cbc59e12d7a..dd722d441f3 100644 --- a/packages/jsts/tests/tools/sonar-runtime/rule/no-missing-sonar-runtime.test.ts +++ b/packages/jsts/tests/tools/sonar-runtime/rule/no-missing-sonar-runtime.test.ts @@ -15,11 +15,10 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { rule } from './no-missing-sonar-runtime.js'; -import { NodeRuleTester } from '../../testers/rule-tester.js'; +import { RuleTester } from '../../testers/rule-tester.js'; + +const ruleTester = new RuleTester(); -const ruleTester = new NodeRuleTester({ - parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, -}); ruleTester.run('sonar-runtime configuration for secondary locations', rule, { valid: [ { diff --git a/packages/jsts/tests/tools/sonar-runtime/sonar-runtime.test.ts b/packages/jsts/tests/tools/sonar-runtime/sonar-runtime.test.ts index a43650efb7e..75408d2280c 100644 --- a/packages/jsts/tests/tools/sonar-runtime/sonar-runtime.test.ts +++ b/packages/jsts/tests/tools/sonar-runtime/sonar-runtime.test.ts @@ -19,12 +19,12 @@ import { rule as noMissingSonarRuntimeRule, ruleId as noMissingSonarRuntimeRuleId, } from './rule/no-missing-sonar-runtime.js'; -import { parseTypeScriptSourceFile } from '../helpers/index.js'; import path from 'path'; import { readdir } from 'fs/promises'; import { describe, it } from 'node:test'; import { expect } from 'expect'; import { fileReadable } from '../../../../shared/src/helpers/files.js'; +import { parseTypeScriptSourceFile } from '../helpers/parsing.js'; /** * Detects missing secondary location support for rules using secondary locations. @@ -52,7 +52,6 @@ describe('sonar-runtime', () => { const misconfiguredRules = []; const linter = new Linter(); - linter.defineRule(noMissingSonarRuntimeRuleId, noMissingSonarRuntimeRule); const rulesDir = path.join(import.meta.dirname, '/../../../src/rules/'); const rulesList = (await readdir(rulesDir)).filter(name => /S\d{3,4}/.test(name)); @@ -66,7 +65,10 @@ describe('sonar-runtime', () => { const ruleSourceCode = await parseTypeScriptSourceFile(ruleFilePath, []); const issues = linter.verify(ruleSourceCode, { - rules: { [noMissingSonarRuntimeRuleId]: 'error' }, + plugins: { + sonarjs: { rules: { [noMissingSonarRuntimeRuleId]: noMissingSonarRuntimeRule } }, + }, + rules: { [`sonarjs/${noMissingSonarRuntimeRuleId}`]: 'error' }, }); if (issues.length > 0) { diff --git a/packages/ruling/tests/tools/testProject.ts b/packages/ruling/tests/tools/testProject.ts index 96b30581cc5..14569040c59 100644 --- a/packages/ruling/tests/tools/testProject.ts +++ b/packages/ruling/tests/tools/testProject.ts @@ -24,10 +24,8 @@ import { analyzeHTML } from '../../../html/src/index.js'; import { isHtmlFile, isJsFile, isTsFile, isYamlFile } from './languages.js'; import { analyzeYAML } from '../../../yaml/src/index.js'; import projects from '../data/projects.json' with { type: 'json' }; -import { loadCustomRules } from '../../../jsts/src/linter/bundle-loader.js'; import { before } from 'node:test'; -import { CustomRule } from '../../../jsts/src/linter/custom-rules/custom-rule.js'; -import { getLinter, initializeLinter } from '../../../jsts/src/linter/linters.js'; +import { initializeLinter } from '../../../jsts/src/linter/linters.js'; import { DEFAULT_ENVIRONMENTS, DEFAULT_GLOBALS, @@ -88,7 +86,7 @@ const DEFAULT_EXCLUSIONS = [ '**/external/**', ].map(pattern => new Minimatch(pattern, { nocase: true, dot: true })); -export function setupBeforeAll(projectFile: string, customRules?: CustomRule[]) { +export function setupBeforeAll(projectFile: string) { const { project, rules, expectedPath, actualPath } = extractParameters(projectFile); before(async () => { @@ -98,7 +96,7 @@ export function setupBeforeAll(projectFile: string, customRules?: CustomRule[]) sonarlint: false, bundles: [], }); - await initializeRules(rules, customRules); + await initializeRules(rules, project); }); return { @@ -108,20 +106,19 @@ export function setupBeforeAll(projectFile: string, customRules?: CustomRule[]) rules, }; } -async function initializeRules(rules: RuleConfig[], customRules?: CustomRule[]) { - if (customRules) { - const defaultLinter = getLinter(); - const htmlLinter = getLinter(HTML_LINTER_ID); - loadCustomRules(defaultLinter.linter, customRules); - loadCustomRules(htmlLinter.linter, customRules); - } - await initializeLinter(rules, DEFAULT_ENVIRONMENTS, DEFAULT_GLOBALS); +async function initializeRules(rules: RuleConfig[], project: RulingInput) { + await initializeLinter( + rules, + DEFAULT_ENVIRONMENTS, + DEFAULT_GLOBALS, + path.join(jsTsProjectsPath, project.folder ?? project.name), + ); const htmlRules = rules.filter(rule => rule.key !== 'S3504'); await initializeLinter( htmlRules, DEFAULT_ENVIRONMENTS, DEFAULT_GLOBALS, - undefined, + path.join(jsTsProjectsPath, project.folder ?? project.name), HTML_LINTER_ID, ); } diff --git a/packages/yaml/tests/analysis/analyzer.test.ts b/packages/yaml/tests/analysis/analyzer.test.ts index 564d2ba3447..a3d94a8a130 100644 --- a/packages/yaml/tests/analysis/analyzer.test.ts +++ b/packages/yaml/tests/analysis/analyzer.test.ts @@ -15,7 +15,6 @@ * along with this program; if not, see https://sonarsource.com/license/ssal/ */ import { join } from 'path'; -import { embeddedInput } from '../../../jsts/tests/tools/index.js'; import type { Rule } from 'eslint'; import { describe, it, before } from 'node:test'; import { expect } from 'expect'; @@ -23,8 +22,10 @@ import { setContext } from '../../../shared/src/helpers/context.js'; import { parseAwsFromYaml } from '../../src/aws/parser.js'; import { analyzeEmbedded } from '../../../jsts/src/embedded/analysis/analyzer.js'; import { APIError } from '../../../shared/src/errors/error.js'; -import { getLinter, initializeLinter } from '../../../jsts/src/linter/linters.js'; +import { initializeLinter } from '../../../jsts/src/linter/linters.js'; +import { rules } from '../../../jsts/src/linter/wrapper.js'; import { composeSyntheticFilePath } from '../../../jsts/src/embedded/builder/build.js'; +import { embeddedInput } from '../../../jsts/tests/tools/helpers/input.js'; describe('analyzeYAML', () => { const fixturesPath = join(import.meta.dirname, 'fixtures'); @@ -197,8 +198,8 @@ describe('analyzeYAML', () => { }, }, }; + rules[rule.key] = rule.module; await initializeLinter([{ key: rule.key, configurations: [], fileTypeTarget: ['MAIN'] }]); - getLinter().linter.defineRule(rule.key, rule.module); analyzeEmbedded(await embeddedInput({ filePath }), parseAwsFromYaml); }); }); diff --git a/packages/yaml/tests/builder/build.test.ts b/packages/yaml/tests/builder/build.test.ts index 458099b69f2..40e2f6904f8 100644 --- a/packages/yaml/tests/builder/build.test.ts +++ b/packages/yaml/tests/builder/build.test.ts @@ -16,7 +16,6 @@ */ import estree from 'estree'; import { join } from 'path'; -import { embeddedInput } from '../../../jsts/tests/tools/index.js'; import { describe, it } from 'node:test'; import { expect } from 'expect'; import { @@ -25,6 +24,7 @@ import { } from '../../../jsts/src/embedded/builder/build.js'; import { parseAwsFromYaml } from '../../src/aws/parser.js'; import { APIError } from '../../../shared/src/errors/error.js'; +import { embeddedInput } from '../../../jsts/tests/tools/helpers/input.js'; describe('buildSourceCodes()', () => { const fixturesPath = join(import.meta.dirname, 'fixtures', 'build'); @@ -32,14 +32,14 @@ describe('buildSourceCodes()', () => { const filePath = join(fixturesPath, 'valid-lambda.yaml'); const sourceCodes = buildSourceCodes(await embeddedInput({ filePath }), parseAwsFromYaml); expect(sourceCodes).toHaveLength(1); - expect(sourceCodes[0].ast.loc.start).toEqual({ line: 8, column: 17 }); + expect(sourceCodes[0].sourceCode.ast.loc.start).toEqual({ line: 8, column: 17 }); }); it('should build source code from YAML serverless file', async () => { const filePath = join(fixturesPath, 'valid-serverless.yaml'); const sourceCodes = buildSourceCodes(await embeddedInput({ filePath }), parseAwsFromYaml); expect(sourceCodes).toHaveLength(1); - expect(sourceCodes[0].ast.loc.start).toEqual({ line: 7, column: 18 }); + expect(sourceCodes[0].sourceCode.ast.loc.start).toEqual({ line: 7, column: 18 }); }); it('should return YAML parsing errors on invalid YAML file', async () => { @@ -75,7 +75,11 @@ describe('buildSourceCodes()', () => { it('should fix plain-based format locations', async () => { const filePath = join(fixturesPath, 'flow-plain.yaml'); - const [{ ast }] = buildSourceCodes(await embeddedInput({ filePath }), parseAwsFromYaml); + const [ + { + sourceCode: { ast }, + }, + ] = buildSourceCodes(await embeddedInput({ filePath }), parseAwsFromYaml); const { body: [ifStmt], @@ -144,7 +148,11 @@ describe('buildSourceCodes()', () => { it('should fix block-folded-based format locations', async () => { const filePath = join(fixturesPath, 'block-folded.yaml'); - const [{ ast }] = buildSourceCodes(await embeddedInput({ filePath }), parseAwsFromYaml); + const [ + { + sourceCode: { ast }, + }, + ] = buildSourceCodes(await embeddedInput({ filePath }), parseAwsFromYaml); const { body: [ifStmt], } = ast; @@ -212,7 +220,11 @@ describe('buildSourceCodes()', () => { it('should fix block-literal-based format locations', async () => { const filePath = join(fixturesPath, 'block-literal.yaml'); - const [{ ast }] = buildSourceCodes(await embeddedInput({ filePath }), parseAwsFromYaml); + const [ + { + sourceCode: { ast }, + }, + ] = buildSourceCodes(await embeddedInput({ filePath }), parseAwsFromYaml); const { body: [ifStmt], } = ast; diff --git a/packages/yaml/tests/builder/patch.test.ts b/packages/yaml/tests/builder/patch.test.ts index 221e40b02ff..2e8ee516a08 100644 --- a/packages/yaml/tests/builder/patch.test.ts +++ b/packages/yaml/tests/builder/patch.test.ts @@ -47,7 +47,7 @@ describe('patchSourceCode', () => { } as EmbeddedAnalysisInput, parseAwsFromYaml, ); - expect(patchedSourceCode).toEqual( + expect(patchedSourceCode.sourceCode).toEqual( expect.objectContaining({ text, lineStartIndices: [0, 37, 48, 70, 108, 124, 152, 172, 199, 222, 232], @@ -69,7 +69,7 @@ describe('patchSourceCode', () => { }); ['body', 'tokens', 'comments'].forEach(property => { - it('should patch ast %s', async () => { + it(`should patch ast ${property}`, async () => { const fixture = path.join(import.meta.dirname, 'fixtures', 'patch', property); let filePath = `${fixture}.yaml`; @@ -78,7 +78,7 @@ describe('patchSourceCode', () => { { filePath, fileContent } as EmbeddedAnalysisInput, parseAwsFromYaml, ); - const patchedNodes = patchedSourceCode.ast[property]; + const patchedNodes = patchedSourceCode.sourceCode.ast[property]; filePath = `${fixture}.js`; fileContent = await readFile(filePath); diff --git a/sonar-plugin/javascript-checks/src/main/java/org/sonar/javascript/checks/S4275.java b/sonar-plugin/javascript-checks/src/main/java/org/sonar/javascript/checks/S4275.java index 73efd651896..cec1301c772 100644 --- a/sonar-plugin/javascript-checks/src/main/java/org/sonar/javascript/checks/S4275.java +++ b/sonar-plugin/javascript-checks/src/main/java/org/sonar/javascript/checks/S4275.java @@ -16,7 +16,10 @@ */ package org.sonar.javascript.checks; +import java.util.Collections; +import java.util.List; import org.sonar.check.Rule; +import org.sonar.check.RuleProperty; import org.sonar.plugins.javascript.api.Check; import org.sonar.plugins.javascript.api.JavaScriptRule; import org.sonar.plugins.javascript.api.TypeScriptRule; @@ -24,4 +27,28 @@ @JavaScriptRule @TypeScriptRule @Rule(key = "S4275") -public class S4275 extends Check {} +public class S4275 extends Check { + + private static final boolean DEFAULT_ALLOW_IMPLICIT = false; + + @RuleProperty( + key = "allowImplicit", + description = "Allow implicitly returning undefined with a return statement.", + defaultValue = "" + DEFAULT_ALLOW_IMPLICIT + ) + boolean allowImplicit = DEFAULT_ALLOW_IMPLICIT; + + @Override + public List configurations() { + return Collections.singletonList(new Config(allowImplicit)); + } + + private static class Config { + + boolean allowImplicit; + + Config(boolean allowImplicit) { + this.allowImplicit = allowImplicit; + } + } +} diff --git a/sonar-plugin/javascript-checks/src/main/java/org/sonar/javascript/checks/S6418.java b/sonar-plugin/javascript-checks/src/main/java/org/sonar/javascript/checks/S6418.java index 3ffb8736bd8..c245841cdbb 100644 --- a/sonar-plugin/javascript-checks/src/main/java/org/sonar/javascript/checks/S6418.java +++ b/sonar-plugin/javascript-checks/src/main/java/org/sonar/javascript/checks/S6418.java @@ -54,11 +54,11 @@ public List configurations() { private static class Config { String secretWords; - String randomnessSensibility; + double randomnessSensibility; Config(String secretWords, String randomnessSensibility) { this.secretWords = secretWords; - this.randomnessSensibility = randomnessSensibility; + this.randomnessSensibility = Double.parseDouble(randomnessSensibility); } } } diff --git a/sonar-plugin/javascript-checks/src/main/resources/org/sonar/l10n/javascript/rules/javascript/schemas/S3776-schema.json b/sonar-plugin/javascript-checks/src/main/resources/org/sonar/l10n/javascript/rules/javascript/schemas/S3776-schema.json index 5938e12b0fa..62a8625d01e 100644 --- a/sonar-plugin/javascript-checks/src/main/resources/org/sonar/l10n/javascript/rules/javascript/schemas/S3776-schema.json +++ b/sonar-plugin/javascript-checks/src/main/resources/org/sonar/l10n/javascript/rules/javascript/schemas/S3776-schema.json @@ -3,6 +3,7 @@ "minItems": 0, "maxItems": 2, "items": [ - { "type": "integer", "minimum": 0 } + { "oneOf": [{ "type": "integer", "minimum": 0 },{ "type": "string"}] }, + { "type": "string" } ] } diff --git a/sonar-plugin/javascript-checks/src/main/resources/org/sonar/l10n/javascript/rules/javascript/schemas/S6418-schema.json b/sonar-plugin/javascript-checks/src/main/resources/org/sonar/l10n/javascript/rules/javascript/schemas/S6418-schema.json new file mode 100644 index 00000000000..8aa785c8b91 --- /dev/null +++ b/sonar-plugin/javascript-checks/src/main/resources/org/sonar/l10n/javascript/rules/javascript/schemas/S6418-schema.json @@ -0,0 +1,19 @@ +{ + "type": "array", + "minItems": 0, + "maxItems": 1, + "items": [ + { + "type": "object", + "properties": { + "secretWords": { + "type": "string" + }, + "randomnessSensibility": { + "type": "number" + } + }, + "additionalProperties": false + } + ] +} diff --git a/sonar-plugin/javascript-checks/src/test/java/org/sonar/javascript/checks/CheckListTest.java b/sonar-plugin/javascript-checks/src/test/java/org/sonar/javascript/checks/CheckListTest.java index 90884d0e24c..d4126e56da1 100644 --- a/sonar-plugin/javascript-checks/src/test/java/org/sonar/javascript/checks/CheckListTest.java +++ b/sonar-plugin/javascript-checks/src/test/java/org/sonar/javascript/checks/CheckListTest.java @@ -31,7 +31,7 @@ class CheckListTest { - private static final int CHECKS_PROPERTIES_COUNT = 38; + private static final int CHECKS_PROPERTIES_COUNT = 39; /** * Enforces that each check declared in list. diff --git a/packages/jsts/src/linter/parameters/helpers/schema.ts b/sonar-plugin/javascript-checks/src/test/java/org/sonar/javascript/checks/S4275Test.java similarity index 53% rename from packages/jsts/src/linter/parameters/helpers/schema.ts rename to sonar-plugin/javascript-checks/src/test/java/org/sonar/javascript/checks/S4275Test.java index f372bd4044e..0b92b4f3830 100644 --- a/packages/jsts/src/linter/parameters/helpers/schema.ts +++ b/sonar-plugin/javascript-checks/src/test/java/org/sonar/javascript/checks/S4275Test.java @@ -14,22 +14,23 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import type { Rule } from 'eslint'; -import { debug } from '../../../../../shared/src/helpers/logging.js'; +package org.sonar.javascript.checks; -/** - * Extracts the schema of a rule - * @param ruleModule the rule definition - * @param ruleId the rule id - * @returns the extracted rule schema, if any - */ -export function getRuleSchema(ruleModule: Rule.RuleModule | undefined, ruleId: string) { - if (!ruleModule) { - debug(`ruleModule not found for rule ${ruleId}`); - return undefined; - } - if (!ruleModule.meta?.schema) { - return undefined; +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.Gson; +import org.junit.jupiter.api.Test; + +class S4275Test { + + @Test + void configurations() { + S4275 check = new S4275(); + // default configuration + String defaultConfigAsString = new Gson().toJson(check.configurations()); + assertThat(defaultConfigAsString).isEqualTo("[{\"allowImplicit\":false}]"); + check.allowImplicit = true; + String customConfigAsString = new Gson().toJson(check.configurations()); + assertThat(customConfigAsString).isEqualTo("[{\"allowImplicit\":true}]"); } - return ruleModule.meta.schema; } diff --git a/sonar-plugin/javascript-checks/src/test/java/org/sonar/javascript/checks/S6418Test.java b/sonar-plugin/javascript-checks/src/test/java/org/sonar/javascript/checks/S6418Test.java index f76c7adcc30..fde72f6ac37 100644 --- a/sonar-plugin/javascript-checks/src/test/java/org/sonar/javascript/checks/S6418Test.java +++ b/sonar-plugin/javascript-checks/src/test/java/org/sonar/javascript/checks/S6418Test.java @@ -29,7 +29,7 @@ void configurations() { // default configuration String defaultConfigAsString = new Gson().toJson(check.configurations()); assertThat(defaultConfigAsString).isEqualTo( - "[{\"secretWords\":\"api[_.-]?key,auth,credential,secret,token\",\"randomnessSensibility\":\"5.0\"}]" + "[{\"secretWords\":\"api[_.-]?key,auth,credential,secret,token\",\"randomnessSensibility\":5.0}]" ); } } diff --git a/sonar-plugin/sonar-javascript-plugin/src/test/java/org/sonar/plugins/javascript/analysis/TsConfigProviderTest.java b/sonar-plugin/sonar-javascript-plugin/src/test/java/org/sonar/plugins/javascript/analysis/TsConfigProviderTest.java index 32ec486326f..51a521e7f12 100644 --- a/sonar-plugin/sonar-javascript-plugin/src/test/java/org/sonar/plugins/javascript/analysis/TsConfigProviderTest.java +++ b/sonar-plugin/sonar-javascript-plugin/src/test/java/org/sonar/plugins/javascript/analysis/TsConfigProviderTest.java @@ -204,11 +204,12 @@ void should_create_tsconfig() throws Exception { List tsconfigs = getTsConfigs(new ContextUtils(ctx), this::tsConfigFileCreator); assertThat(tsconfigs).hasSize(1); String tsconfig = Files.readString(Paths.get(tsconfigs.get(0))); + String expectedBaseDir = this.baseDir.toString().replaceAll("[\\\\/]", "/"); assertThat(tsconfig).isEqualToIgnoringCase( String.format( "{\"files\":[\"%s/file1.ts\",\"%s/file2.ts\"],\"compilerOptions\":{\"allowJs\":true,\"noImplicitAny\":true}}", - baseDir.toRealPath().toString().replaceAll("[\\\\/]", "/"), - baseDir.toRealPath().toString().replaceAll("[\\\\/]", "/") + expectedBaseDir, + expectedBaseDir ) ); } diff --git a/tools/templates/ts/rule.cbtest.template b/tools/templates/ts/rule.cbtest.template index 97a39b3789f..5f335821979 100644 --- a/tools/templates/ts/rule.cbtest.template +++ b/tools/templates/ts/rule.cbtest.template @@ -1,5 +1,5 @@ ___HEADER___// https://sonarsource.github.io/rspec/#/rspec/___RULE_KEY___/javascript -import { check } from '../../../tests/tools/index.js'; +import { check } from '../../../tests/tools/testers/comment-based/index.js'; import { rule } from './index.js'; import path from 'path'; import { describe } from 'node:test'; diff --git a/typings/@stylistic__eslint-plugin-ts/index.d.ts b/typings/@stylistic__eslint-plugin-ts/index.d.ts new file mode 100644 index 00000000000..cffcf75da2b --- /dev/null +++ b/typings/@stylistic__eslint-plugin-ts/index.d.ts @@ -0,0 +1,5 @@ +declare module '@stylistic/eslint-plugin-ts/rules/*' { + import type { Rule } from 'eslint'; + const rule: Rule.RuleModule; + export default rule; +} From 26c61391c0fa77583fc6f2b12ed8e03447b60106 Mon Sep 17 00:00:00 2001 From: Victor Diez Date: Fri, 20 Dec 2024 15:23:49 +0100 Subject: [PATCH 3/8] JS-492 Migrate formatting rules to @stylistic --- packages/jsts/src/rules/S1116/index.ts | 4 ++-- packages/jsts/src/rules/S1116/meta.ts | 2 +- packages/jsts/src/rules/S1438/index.ts | 4 ++-- packages/jsts/src/rules/S1438/meta.ts | 4 +++- packages/jsts/src/rules/S1537/index.ts | 3 +-- packages/jsts/src/rules/S1537/meta.ts | 2 +- 6 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/jsts/src/rules/S1116/index.ts b/packages/jsts/src/rules/S1116/index.ts index ce08f0408a3..a8a36b521b3 100644 --- a/packages/jsts/src/rules/S1116/index.ts +++ b/packages/jsts/src/rules/S1116/index.ts @@ -14,7 +14,7 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { rules as tsEslintRules } from '../external/typescript-eslint/index.js'; +import originalRule from '@stylistic/eslint-plugin-ts/rules/no-extra-semi'; import { decorate } from './decorator.js'; -export const rule = decorate(tsEslintRules['no-extra-semi']); +export const rule = decorate(originalRule); diff --git a/packages/jsts/src/rules/S1116/meta.ts b/packages/jsts/src/rules/S1116/meta.ts index 54cab0e5631..0f68761773c 100644 --- a/packages/jsts/src/rules/S1116/meta.ts +++ b/packages/jsts/src/rules/S1116/meta.ts @@ -18,5 +18,5 @@ export * from './generated-meta.js'; export const implementation = 'decorated'; export const eslintId = 'no-extra-semi'; export const externalRules = [ - { externalPlugin: 'typescript-eslint', externalRule: 'no-extra-semi' }, + { externalPlugin: '@stylistic/eslint-plugin-ts', externalRule: 'no-extra-semi' }, ]; diff --git a/packages/jsts/src/rules/S1438/index.ts b/packages/jsts/src/rules/S1438/index.ts index 711c6fb4c1b..b929b16da0a 100644 --- a/packages/jsts/src/rules/S1438/index.ts +++ b/packages/jsts/src/rules/S1438/index.ts @@ -14,7 +14,7 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { rules as tsEslintRules } from '../external/typescript-eslint/index.js'; +import originalRule from '@stylistic/eslint-plugin-ts/rules/semi'; import { decorate } from './decorator.js'; -export const rule = decorate(tsEslintRules['semi']); +export const rule = decorate(originalRule); diff --git a/packages/jsts/src/rules/S1438/meta.ts b/packages/jsts/src/rules/S1438/meta.ts index 22eebe4c2fc..ef61d49ae0f 100644 --- a/packages/jsts/src/rules/S1438/meta.ts +++ b/packages/jsts/src/rules/S1438/meta.ts @@ -17,4 +17,6 @@ export * from './generated-meta.js'; export const implementation = 'decorated'; export const eslintId = 'semi'; -export const externalRules = [{ externalPlugin: 'typescript-eslint', externalRule: 'semi' }]; +export const externalRules = [ + { externalPlugin: '@stylistic/eslint-plugin-ts', externalRule: 'semi' }, +]; diff --git a/packages/jsts/src/rules/S1537/index.ts b/packages/jsts/src/rules/S1537/index.ts index 56df653cc4f..6e40d7881b7 100644 --- a/packages/jsts/src/rules/S1537/index.ts +++ b/packages/jsts/src/rules/S1537/index.ts @@ -14,5 +14,4 @@ * You should have received a copy of the Sonar Source-Available License * along with this program; if not, see https://sonarsource.com/license/ssal/ */ -import { rules } from '../external/typescript-eslint/index.js'; -export const rule = rules['comma-dangle']; +export { default as rule } from '@stylistic/eslint-plugin-ts/rules/comma-dangle'; diff --git a/packages/jsts/src/rules/S1537/meta.ts b/packages/jsts/src/rules/S1537/meta.ts index 1eb18848dcd..56f627252ab 100644 --- a/packages/jsts/src/rules/S1537/meta.ts +++ b/packages/jsts/src/rules/S1537/meta.ts @@ -17,4 +17,4 @@ export * from './generated-meta.js'; export const implementation = 'external'; export const eslintId = 'comma-dangle'; -export const externalPlugin = 'typescript-eslint'; +export const externalPlugin = '@stylistic/eslint-plugin-ts'; From 54ef632b797afc05c1befc589c0e7f35e62c1d8e Mon Sep 17 00:00:00 2001 From: Victor Diez Date: Fri, 20 Dec 2024 15:25:15 +0100 Subject: [PATCH 4/8] JS-509 Update docs for new mandatory fields in RuleTester --- docs/DEV.md | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/docs/DEV.md b/docs/DEV.md index 4a47793bc4c..cb8a7d7a70e 100644 --- a/docs/DEV.md +++ b/docs/DEV.md @@ -164,9 +164,9 @@ The contents of the test code have the following structure: ```javascript some.clean.code(); -some.faulty.code(); // Noncompliant N [[qf1,qf2,...]] {{Optional message to assert}} +some.faulty.code(); // Noncompliant [[qf1,qf2,...]] {{Message to assert}} // ^^^^^^ -// fix@qf1 {{Optional suggestion description}} +// fix@qf1 {{Suggestion description}} // edit@qf1 [[sc=1;ec=5]] {{text to replace line from [sc] column to [ec] column}} faulty.setFaultyParam(true); // ^^^^^^^^^^^^^^< {{Optional secondary message to assert}} @@ -196,18 +196,12 @@ You can find an example at [the bottom of this document](#examples). #### Tests syntax -Given the above test snippet: the issue primary location (`// ^^^^`), issue messages (`{{...}}`), secondary location(s) (`// ^^^<`), issues count (`N`) and quick fixes are optional. - -`N` is an integer defining the amount of issues will be reported in the line. - -Only one of the methods (`{{messageN}}+` OR `N`) to define the expected issues can be used in a `Noncompliant` line. If you set both `N` and messages, the framework will throw an error. - -If no `N` nor messages are provided, the engine will expect one issue to be raised. Meaning, `//Noncompliant` is equivalent to `//Noncompliant 1`. +Given the above test snippet, issue messages (`{{...}}`) and quick fixes (if the rule provides them) are mandatory. The issue primary location (`// ^^^^`) and secondary location(s) (`// ^^^<`) are optional. `Noncompliant` lines will be associated by default to the line of code where they are writen. The syntax `@line_number` allows for an issue to be associated to another line: ```javascript -// Noncompliant@2 N [[qf1,qf2,...]] {{Optional message to assert}} +// Noncompliant@2 [[qf1,qf2,...]] {{Optional message to assert}} some.faulty.code(); ``` From 75b68ee505899f500ae17e5ef13441b208988e6c Mon Sep 17 00:00:00 2001 From: Victor Diez Date: Fri, 20 Dec 2024 15:27:50 +0100 Subject: [PATCH 5/8] JS-510 Adapt ESLint plugin to new ESLint 9 types --- its/eslint8-plugin-sonarjs/package.json | 12 ++++++------ its/eslint9-plugin-sonarjs/package.json | 7 ++++--- packages/jsts/src/rules/plugin.ts | 8 +++----- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/its/eslint8-plugin-sonarjs/package.json b/its/eslint8-plugin-sonarjs/package.json index d425c9e40f5..89961a827be 100644 --- a/its/eslint8-plugin-sonarjs/package.json +++ b/its/eslint8-plugin-sonarjs/package.json @@ -5,12 +5,12 @@ "test": "node index.test.js" }, "devDependencies": { - "eslint-plugin-sonarjs": "file:../../lib/eslint-plugin-sonarjs-0.0.0-SNAPSHOT.tgz", - "@types/eslint": "^8.56.12", + "@types/eslint": "^8", "cross-spawn": "7.0.6", - "eslint": "8.57.1", - "eslint-plugin-import": "2.31.0", - "typescript": "5.6.3", - "typescript-eslint": "7.18.0" + "eslint": "^8", + "eslint-plugin-sonarjs": "file:../../lib/eslint-plugin-sonarjs-0.0.0-SNAPSHOT.tgz", + "typescript": "^5", + "typescript-eslint": "^7", + "@typescript-eslint/parser": "^7" } } diff --git a/its/eslint9-plugin-sonarjs/package.json b/its/eslint9-plugin-sonarjs/package.json index d73d814a5c4..b43ef1e3c72 100644 --- a/its/eslint9-plugin-sonarjs/package.json +++ b/its/eslint9-plugin-sonarjs/package.json @@ -7,8 +7,9 @@ "devDependencies": { "eslint-plugin-sonarjs": "file:../../lib/eslint-plugin-sonarjs-0.0.0-SNAPSHOT.tgz", "cross-spawn": "7.0.6", - "eslint": "9 - 9.14", - "typescript": "5.6.3", - "typescript-eslint": "^8.5.0" + "eslint": "^9", + "typescript": "^5", + "typescript-eslint": "^8", + "@typescript-eslint/parser": "^8" } } diff --git a/packages/jsts/src/rules/plugin.ts b/packages/jsts/src/rules/plugin.ts index f6cae2b9cdc..30e0c1eddff 100644 --- a/packages/jsts/src/rules/plugin.ts +++ b/packages/jsts/src/rules/plugin.ts @@ -22,10 +22,8 @@ import type { Linter } from 'eslint'; import { rules } from './plugin-rules.js'; -const recommendedLegacyConfig: Linter.Config = { plugins: ['sonarjs'], rules: {} }; -const recommendedConfig: Linter.FlatConfig & { - rules: Linter.RulesRecord; -} = { +const recommendedLegacyConfig: Linter.LegacyConfig = { plugins: ['sonarjs'], rules: {} }; +const recommendedConfig: Linter.FlatConfig = { name: 'sonarjs/recommended', plugins: { sonarjs: { @@ -43,7 +41,7 @@ const recommendedConfig: Linter.FlatConfig & { for (const [key, rule] of Object.entries(rules)) { const recommended = rule.meta?.docs?.recommended || false; - recommendedConfig.rules[`sonarjs/${key}`] = recommended ? 'error' : 'off'; + recommendedConfig.rules![`sonarjs/${key}`] = recommended ? 'error' : 'off'; } recommendedLegacyConfig.rules = recommendedConfig.rules; From 3cef7de1a0eaf6aba1df1109c215e12d798b7a88 Mon Sep 17 00:00:00 2001 From: Victor Diez Date: Fri, 20 Dec 2024 15:37:49 +0100 Subject: [PATCH 6/8] Fix telemetry test --- packages/jsts/tests/analysis/analyzer.test.ts | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/packages/jsts/tests/analysis/analyzer.test.ts b/packages/jsts/tests/analysis/analyzer.test.ts index d909906c649..beca698aedf 100644 --- a/packages/jsts/tests/analysis/analyzer.test.ts +++ b/packages/jsts/tests/analysis/analyzer.test.ts @@ -910,29 +910,38 @@ describe('analyzeJSTS', () => { it('should populate dependencies after analysis', async () => { const baseDir = path.join(currentPath, 'fixtures', 'dependencies'); const linter = new Linter(); - linter.defineRule('custom-rule-file', { - create(context) { - return { - CallExpression(node) { - // Necessarily call 'getDependencies' to populate the cache of dependencies - const dependencies = getDependencies(toUnixPath(context.filename), baseDir); - if (dependencies.size) { - context.report({ - node: node.callee, - message: 'call', - }); - } + const linterConfig: Linter.Config = { + plugins: { + sonarjs: { + rules: { + 'custom-rule-file': { + create(context) { + return { + CallExpression(node) { + // Necessarily call 'getDependencies' to populate the cache of dependencies + const dependencies = getDependencies(toUnixPath(context.filename), baseDir); + if (dependencies.size) { + context.report({ + node: node.callee, + message: 'call', + }); + } + }, + }; + }, + }, }, - }; + }, }, - } as Rule.RuleModule); + rules: { 'sonarjs/custom-rule-file': 'error' }, + files: ['**/*.js'], + }; const filePath = path.join(currentPath, 'fixtures', 'dependencies', 'index.js'); const sourceCode = await parseJavaScriptSourceFile(filePath); - linter.verify( - sourceCode, - { rules: { 'custom-rule-file': 'error' } }, - { filename: filePath, allowInlineConfig: false }, - ); + linter.verify(sourceCode, linterConfig, { + filename: filePath, + allowInlineConfig: false, + }); const { dependencies } = getTelemetry(); expect(dependencies).toStrictEqual([ { From d8092030a60b36af4ee7250fdf2b143eb4bfe2ab Mon Sep 17 00:00:00 2001 From: Victor Diez Date: Fri, 20 Dec 2024 17:05:22 +0100 Subject: [PATCH 7/8] Fix ruling for S131 --- packages/jsts/src/rules/S131/rule.ts | 5 +++++ packages/jsts/src/rules/S131/unit.test.ts | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/packages/jsts/src/rules/S131/rule.ts b/packages/jsts/src/rules/S131/rule.ts index 10f837a5d80..8a7bedaa24c 100644 --- a/packages/jsts/src/rules/S131/rule.ts +++ b/packages/jsts/src/rules/S131/rule.ts @@ -140,6 +140,11 @@ export const rule: Rule.RuleModule = { ...decoratedSwitchExhaustivenessRule.meta?.messages, }, schema: switchExhaustivenessRule.meta!.schema, + defaultOptions: [ + { + considerDefaultExhaustiveForUnions: true, + }, + ], }), create(context: Rule.RuleContext) { return mergeRules( diff --git a/packages/jsts/src/rules/S131/unit.test.ts b/packages/jsts/src/rules/S131/unit.test.ts index 2f2c2ec7c93..588d7d60973 100644 --- a/packages/jsts/src/rules/S131/unit.test.ts +++ b/packages/jsts/src/rules/S131/unit.test.ts @@ -43,6 +43,18 @@ describe('S131', () => { case 'bar': break; } + `, + }, + { + code: ` + type T = 'foo' | 'bar'; + const x = 'foo' as T; + switch (x) { + case 'foo': + break; + default: + break; + } `, }, { From 15f2b1ec3091927607cf1a98a95398dbaa9d1a7f Mon Sep 17 00:00:00 2001 From: Tibor Blenessy Date: Fri, 20 Dec 2024 17:35:30 +0100 Subject: [PATCH 8/8] JS-512 Fix special characters in filenames (#5029) --- packages/jsts/src/linter/wrapper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jsts/src/linter/wrapper.ts b/packages/jsts/src/linter/wrapper.ts index 4634dd8fc3f..f7ce536ffad 100644 --- a/packages/jsts/src/linter/wrapper.ts +++ b/packages/jsts/src/linter/wrapper.ts @@ -171,7 +171,7 @@ export class LinterWrapper { } const config = { ...linterConfig, - files: [`**/${path.posix.basename(toUnixPath(filePath))}`], + files: [`**/*${path.posix.extname(toUnixPath(filePath))}`], settings: { ...linterConfig.settings, fileType }, }; const options = { filename: filePath, allowInlineConfig: false };