the next generation of the in-browser educational proof assistant
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

resolve upstream conflicts

+2465 -838
+93 -1
index.html
··· 284 284 ---- Pair 285 285 (Data (A a b)) 286 286 </hol-inductive> 287 + <hol-inductive id="index.html/natt" deps="index.html/myconfig"> 288 + x. 289 + -------- Znatt 290 + (natt x 0) 291 + n.x. 292 + (natt x n) 293 + -------- sucnatt 294 + (natt x (S n)) 295 + </hol-inductive> 287 296 <hol-comp id="index.html/baz" deps="index.html/myconfig"> 288 297 x.y. 289 298 (/\ x y) ··· 329 338 (P 0) 330 339 [k. (P k) |- (P (S (S k)))] 331 340 --------------------------- E-ind 332 - (P n) </hol-comp> 341 + (P n) 342 + 343 + a. 344 + ---- refl 345 + (= a a) 346 + 347 + a. b. f. 348 + (= a b) (f a) 349 + -------- eq-ap 350 + (f b) 351 + 352 + a. 353 + -------- eqab 354 + (= (A a) (B a)) 355 + </hol-comp> 333 356 <hol-config id="index.html/myconfig">Gentzen</hol-config> 334 357 <!-- <hol-proof id="index.html/prooftest" deps="index.html/myconfig index.html/baz index.html/nat"> --> 335 358 <!-- n. --> ··· 348 371 x.y. asm |- by (AI ((x. x. \1) y x) ((x. x. x) y x)) { 349 372 |- ? 350 373 |- ?} 374 + 375 + </hol-proof> 376 + 377 + <hol-proof id="index.html/prooftest-elim-bug" deps="index.html/myconfig index.html/baz index.html/nat"> 378 + a. 379 + (Even a) 380 + ------- 381 + (Nat a) 382 + 383 + a. asm |- ? 384 + 385 + </hol-proof> 386 + 387 + <hol-proof id="index.html/prooftest" deps="index.html/myconfig index.html/baz index.html/nat"> 388 + a. 389 + (Nat a) 390 + ------- 391 + (Nat (S (S a))) 392 + 393 + a. asm |- ? 394 + 395 + </hol-proof> 396 + 397 + <hol-proof id="index.html/prooftest3" deps="index.html/myconfig index.html/baz index.html/nat"> 398 + a. b. f. 399 + (= a b) 400 + ------- 401 + (= (f a) (f b)) 402 + 403 + a. b. f. asm |- ? 404 + </hol-proof> 405 + 406 + <hol-proof id="index.html/eq-trans" deps="index.html/myconfig index.html/baz index.html/nat"> 407 + a. b. c. 408 + (= a b) 409 + (= b c) 410 + ------- eq-trans 411 + (= a c) 412 + 413 + a. b. c. ab bc |- ? 414 + </hol-proof> 415 + <hol-proof id="index.html/eq-high" deps="index.html/myconfig index.html/baz index.html/nat"> 416 + ------- A0B0 417 + (= (A 0) (B 0)) 418 + 419 + |- ? 420 + </hol-proof> 421 + <hol-proof id="index.html/constructor-neq-test" deps="index.html/myconfig index.html/baz index.html/nat"> 422 + x. y. 423 + -------------------- neq-constructors 424 + (not (= (@Z x) (@S y))) 425 + 426 + x. y. |- ? 427 + </hol-proof> 428 + <hol-proof id="index.html/constructor-inj-test" deps="index.html/myconfig index.html/baz index.html/nat"> 429 + x. y. 430 + (= (@S x) (@S y)) 431 + -------------- S-inj 432 + (= x y) 433 + 434 + x. y. eq |- ? 435 + </hol-proof> 436 + <hol-proof id="index.html/fcu-test" deps="index.html/myconfig"> 437 + x. 438 + [P. (P (fst x))] 439 + ---------------- 440 + (r (fst (fst x))) 441 + 442 + x. asm |- by (asm ((x. x. r (fst x)) x)) {} 351 443 </hol-proof> 352 444 <h1>String</h1> 353 445 <h2>Basic</h2>
+1290 -564
package-lock.json
··· 8 8 "name": "holbert-ng", 9 9 "version": "0.0.0", 10 10 "dependencies": { 11 - "@rescript/react": "^0.13.1", 11 + "@jmagaram/rescript-seq": "^4.4.1", 12 + "@rescript/react": "^0.14.0", 12 13 "react": "^19.1.0", 13 14 "react-dom": "^19.1.0", 14 - "rescript": "^11.1.4" 15 + "rescript": "^12.0.0" 15 16 }, 16 17 "devDependencies": { 17 18 "@dusty-phillips/rescript-zora": "^5.0.1", ··· 20 21 "@rescript/std": "^11.1.4", 21 22 "@types/react": "^19.1.2", 22 23 "@types/react-dom": "^19.1.2", 23 - "@vitejs/plugin-react-swc": "^3.9.0", 24 + "@vitejs/plugin-react-swc": "^4.2.2", 24 25 "eslint": "^9.25.0", 25 - "eslint-plugin-react-hooks": "^5.2.0", 26 + "eslint-plugin-react-hooks": "^7.0.1", 26 27 "eslint-plugin-react-refresh": "^0.4.19", 27 28 "globals": "^16.0.0", 28 29 "husky": "^9.1.7", 29 30 "lint-staged": "^16.2.3", 30 31 "onchange": "^7.1.0", 31 32 "pta": "^1.3.0", 32 - "typescript": "~5.8.3", 33 + "typescript": "^5.9.3", 33 34 "typescript-eslint": "^8.30.1", 34 - "vite": "^6.3.5" 35 + "vite": "^7.2.6" 36 + } 37 + }, 38 + "node_modules/@babel/code-frame": { 39 + "version": "7.29.0", 40 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", 41 + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", 42 + "dev": true, 43 + "license": "MIT", 44 + "dependencies": { 45 + "@babel/helper-validator-identifier": "^7.28.5", 46 + "js-tokens": "^4.0.0", 47 + "picocolors": "^1.1.1" 48 + }, 49 + "engines": { 50 + "node": ">=6.9.0" 51 + } 52 + }, 53 + "node_modules/@babel/compat-data": { 54 + "version": "7.29.0", 55 + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", 56 + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", 57 + "dev": true, 58 + "license": "MIT", 59 + "engines": { 60 + "node": ">=6.9.0" 61 + } 62 + }, 63 + "node_modules/@babel/core": { 64 + "version": "7.29.0", 65 + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", 66 + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", 67 + "dev": true, 68 + "license": "MIT", 69 + "dependencies": { 70 + "@babel/code-frame": "^7.29.0", 71 + "@babel/generator": "^7.29.0", 72 + "@babel/helper-compilation-targets": "^7.28.6", 73 + "@babel/helper-module-transforms": "^7.28.6", 74 + "@babel/helpers": "^7.28.6", 75 + "@babel/parser": "^7.29.0", 76 + "@babel/template": "^7.28.6", 77 + "@babel/traverse": "^7.29.0", 78 + "@babel/types": "^7.29.0", 79 + "@jridgewell/remapping": "^2.3.5", 80 + "convert-source-map": "^2.0.0", 81 + "debug": "^4.1.0", 82 + "gensync": "^1.0.0-beta.2", 83 + "json5": "^2.2.3", 84 + "semver": "^6.3.1" 85 + }, 86 + "engines": { 87 + "node": ">=6.9.0" 88 + }, 89 + "funding": { 90 + "type": "opencollective", 91 + "url": "https://opencollective.com/babel" 92 + } 93 + }, 94 + "node_modules/@babel/generator": { 95 + "version": "7.29.1", 96 + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", 97 + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", 98 + "dev": true, 99 + "license": "MIT", 100 + "dependencies": { 101 + "@babel/parser": "^7.29.0", 102 + "@babel/types": "^7.29.0", 103 + "@jridgewell/gen-mapping": "^0.3.12", 104 + "@jridgewell/trace-mapping": "^0.3.28", 105 + "jsesc": "^3.0.2" 106 + }, 107 + "engines": { 108 + "node": ">=6.9.0" 109 + } 110 + }, 111 + "node_modules/@babel/helper-compilation-targets": { 112 + "version": "7.28.6", 113 + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", 114 + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", 115 + "dev": true, 116 + "license": "MIT", 117 + "dependencies": { 118 + "@babel/compat-data": "^7.28.6", 119 + "@babel/helper-validator-option": "^7.27.1", 120 + "browserslist": "^4.24.0", 121 + "lru-cache": "^5.1.1", 122 + "semver": "^6.3.1" 123 + }, 124 + "engines": { 125 + "node": ">=6.9.0" 126 + } 127 + }, 128 + "node_modules/@babel/helper-globals": { 129 + "version": "7.28.0", 130 + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", 131 + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", 132 + "dev": true, 133 + "license": "MIT", 134 + "engines": { 135 + "node": ">=6.9.0" 136 + } 137 + }, 138 + "node_modules/@babel/helper-module-imports": { 139 + "version": "7.28.6", 140 + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", 141 + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", 142 + "dev": true, 143 + "license": "MIT", 144 + "dependencies": { 145 + "@babel/traverse": "^7.28.6", 146 + "@babel/types": "^7.28.6" 147 + }, 148 + "engines": { 149 + "node": ">=6.9.0" 150 + } 151 + }, 152 + "node_modules/@babel/helper-module-transforms": { 153 + "version": "7.28.6", 154 + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", 155 + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", 156 + "dev": true, 157 + "license": "MIT", 158 + "dependencies": { 159 + "@babel/helper-module-imports": "^7.28.6", 160 + "@babel/helper-validator-identifier": "^7.28.5", 161 + "@babel/traverse": "^7.28.6" 162 + }, 163 + "engines": { 164 + "node": ">=6.9.0" 165 + }, 166 + "peerDependencies": { 167 + "@babel/core": "^7.0.0" 168 + } 169 + }, 170 + "node_modules/@babel/helper-string-parser": { 171 + "version": "7.27.1", 172 + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", 173 + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", 174 + "dev": true, 175 + "license": "MIT", 176 + "engines": { 177 + "node": ">=6.9.0" 178 + } 179 + }, 180 + "node_modules/@babel/helper-validator-identifier": { 181 + "version": "7.28.5", 182 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", 183 + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", 184 + "dev": true, 185 + "license": "MIT", 186 + "engines": { 187 + "node": ">=6.9.0" 188 + } 189 + }, 190 + "node_modules/@babel/helper-validator-option": { 191 + "version": "7.27.1", 192 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", 193 + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", 194 + "dev": true, 195 + "license": "MIT", 196 + "engines": { 197 + "node": ">=6.9.0" 198 + } 199 + }, 200 + "node_modules/@babel/helpers": { 201 + "version": "7.28.6", 202 + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", 203 + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", 204 + "dev": true, 205 + "license": "MIT", 206 + "dependencies": { 207 + "@babel/template": "^7.28.6", 208 + "@babel/types": "^7.28.6" 209 + }, 210 + "engines": { 211 + "node": ">=6.9.0" 212 + } 213 + }, 214 + "node_modules/@babel/parser": { 215 + "version": "7.29.0", 216 + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", 217 + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", 218 + "dev": true, 219 + "license": "MIT", 220 + "dependencies": { 221 + "@babel/types": "^7.29.0" 222 + }, 223 + "bin": { 224 + "parser": "bin/babel-parser.js" 225 + }, 226 + "engines": { 227 + "node": ">=6.0.0" 228 + } 229 + }, 230 + "node_modules/@babel/template": { 231 + "version": "7.28.6", 232 + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", 233 + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", 234 + "dev": true, 235 + "license": "MIT", 236 + "dependencies": { 237 + "@babel/code-frame": "^7.28.6", 238 + "@babel/parser": "^7.28.6", 239 + "@babel/types": "^7.28.6" 240 + }, 241 + "engines": { 242 + "node": ">=6.9.0" 243 + } 244 + }, 245 + "node_modules/@babel/traverse": { 246 + "version": "7.29.0", 247 + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", 248 + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", 249 + "dev": true, 250 + "license": "MIT", 251 + "dependencies": { 252 + "@babel/code-frame": "^7.29.0", 253 + "@babel/generator": "^7.29.0", 254 + "@babel/helper-globals": "^7.28.0", 255 + "@babel/parser": "^7.29.0", 256 + "@babel/template": "^7.28.6", 257 + "@babel/types": "^7.29.0", 258 + "debug": "^4.3.1" 259 + }, 260 + "engines": { 261 + "node": ">=6.9.0" 262 + } 263 + }, 264 + "node_modules/@babel/types": { 265 + "version": "7.29.0", 266 + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", 267 + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", 268 + "dev": true, 269 + "license": "MIT", 270 + "dependencies": { 271 + "@babel/helper-string-parser": "^7.27.1", 272 + "@babel/helper-validator-identifier": "^7.28.5" 273 + }, 274 + "engines": { 275 + "node": ">=6.9.0" 35 276 } 36 277 }, 37 278 "node_modules/@blakeembrey/deque": { ··· 67 308 "license": "MIT" 68 309 }, 69 310 "node_modules/@esbuild/aix-ppc64": { 70 - "version": "0.25.5", 71 - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", 72 - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", 311 + "version": "0.27.3", 312 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", 313 + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", 73 314 "cpu": [ 74 315 "ppc64" 75 316 ], ··· 84 325 } 85 326 }, 86 327 "node_modules/@esbuild/android-arm": { 87 - "version": "0.25.5", 88 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", 89 - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", 328 + "version": "0.27.3", 329 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", 330 + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", 90 331 "cpu": [ 91 332 "arm" 92 333 ], ··· 101 342 } 102 343 }, 103 344 "node_modules/@esbuild/android-arm64": { 104 - "version": "0.25.5", 105 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", 106 - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", 345 + "version": "0.27.3", 346 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", 347 + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", 107 348 "cpu": [ 108 349 "arm64" 109 350 ], ··· 118 359 } 119 360 }, 120 361 "node_modules/@esbuild/android-x64": { 121 - "version": "0.25.5", 122 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", 123 - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", 362 + "version": "0.27.3", 363 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", 364 + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", 124 365 "cpu": [ 125 366 "x64" 126 367 ], ··· 135 376 } 136 377 }, 137 378 "node_modules/@esbuild/darwin-arm64": { 138 - "version": "0.25.5", 139 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", 140 - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", 379 + "version": "0.27.3", 380 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", 381 + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", 141 382 "cpu": [ 142 383 "arm64" 143 384 ], ··· 152 393 } 153 394 }, 154 395 "node_modules/@esbuild/darwin-x64": { 155 - "version": "0.25.5", 156 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", 157 - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", 396 + "version": "0.27.3", 397 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", 398 + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", 158 399 "cpu": [ 159 400 "x64" 160 401 ], ··· 169 410 } 170 411 }, 171 412 "node_modules/@esbuild/freebsd-arm64": { 172 - "version": "0.25.5", 173 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", 174 - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", 413 + "version": "0.27.3", 414 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", 415 + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", 175 416 "cpu": [ 176 417 "arm64" 177 418 ], ··· 186 427 } 187 428 }, 188 429 "node_modules/@esbuild/freebsd-x64": { 189 - "version": "0.25.5", 190 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", 191 - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", 430 + "version": "0.27.3", 431 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", 432 + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", 192 433 "cpu": [ 193 434 "x64" 194 435 ], ··· 203 444 } 204 445 }, 205 446 "node_modules/@esbuild/linux-arm": { 206 - "version": "0.25.5", 207 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", 208 - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", 447 + "version": "0.27.3", 448 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", 449 + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", 209 450 "cpu": [ 210 451 "arm" 211 452 ], ··· 220 461 } 221 462 }, 222 463 "node_modules/@esbuild/linux-arm64": { 223 - "version": "0.25.5", 224 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", 225 - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", 464 + "version": "0.27.3", 465 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", 466 + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", 226 467 "cpu": [ 227 468 "arm64" 228 469 ], ··· 237 478 } 238 479 }, 239 480 "node_modules/@esbuild/linux-ia32": { 240 - "version": "0.25.5", 241 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", 242 - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", 481 + "version": "0.27.3", 482 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", 483 + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", 243 484 "cpu": [ 244 485 "ia32" 245 486 ], ··· 254 495 } 255 496 }, 256 497 "node_modules/@esbuild/linux-loong64": { 257 - "version": "0.25.5", 258 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", 259 - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", 498 + "version": "0.27.3", 499 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", 500 + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", 260 501 "cpu": [ 261 502 "loong64" 262 503 ], ··· 271 512 } 272 513 }, 273 514 "node_modules/@esbuild/linux-mips64el": { 274 - "version": "0.25.5", 275 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", 276 - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", 515 + "version": "0.27.3", 516 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", 517 + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", 277 518 "cpu": [ 278 519 "mips64el" 279 520 ], ··· 288 529 } 289 530 }, 290 531 "node_modules/@esbuild/linux-ppc64": { 291 - "version": "0.25.5", 292 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", 293 - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", 532 + "version": "0.27.3", 533 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", 534 + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", 294 535 "cpu": [ 295 536 "ppc64" 296 537 ], ··· 305 546 } 306 547 }, 307 548 "node_modules/@esbuild/linux-riscv64": { 308 - "version": "0.25.5", 309 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", 310 - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", 549 + "version": "0.27.3", 550 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", 551 + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", 311 552 "cpu": [ 312 553 "riscv64" 313 554 ], ··· 322 563 } 323 564 }, 324 565 "node_modules/@esbuild/linux-s390x": { 325 - "version": "0.25.5", 326 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", 327 - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", 566 + "version": "0.27.3", 567 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", 568 + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", 328 569 "cpu": [ 329 570 "s390x" 330 571 ], ··· 339 580 } 340 581 }, 341 582 "node_modules/@esbuild/linux-x64": { 342 - "version": "0.25.5", 343 - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", 344 - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", 583 + "version": "0.27.3", 584 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", 585 + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", 345 586 "cpu": [ 346 587 "x64" 347 588 ], ··· 356 597 } 357 598 }, 358 599 "node_modules/@esbuild/netbsd-arm64": { 359 - "version": "0.25.5", 360 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", 361 - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", 600 + "version": "0.27.3", 601 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", 602 + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", 362 603 "cpu": [ 363 604 "arm64" 364 605 ], ··· 373 614 } 374 615 }, 375 616 "node_modules/@esbuild/netbsd-x64": { 376 - "version": "0.25.5", 377 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", 378 - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", 617 + "version": "0.27.3", 618 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", 619 + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", 379 620 "cpu": [ 380 621 "x64" 381 622 ], ··· 390 631 } 391 632 }, 392 633 "node_modules/@esbuild/openbsd-arm64": { 393 - "version": "0.25.5", 394 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", 395 - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", 634 + "version": "0.27.3", 635 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", 636 + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", 396 637 "cpu": [ 397 638 "arm64" 398 639 ], ··· 407 648 } 408 649 }, 409 650 "node_modules/@esbuild/openbsd-x64": { 410 - "version": "0.25.5", 411 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", 412 - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", 651 + "version": "0.27.3", 652 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", 653 + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", 413 654 "cpu": [ 414 655 "x64" 415 656 ], ··· 423 664 "node": ">=18" 424 665 } 425 666 }, 667 + "node_modules/@esbuild/openharmony-arm64": { 668 + "version": "0.27.3", 669 + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", 670 + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", 671 + "cpu": [ 672 + "arm64" 673 + ], 674 + "dev": true, 675 + "license": "MIT", 676 + "optional": true, 677 + "os": [ 678 + "openharmony" 679 + ], 680 + "engines": { 681 + "node": ">=18" 682 + } 683 + }, 426 684 "node_modules/@esbuild/sunos-x64": { 427 - "version": "0.25.5", 428 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", 429 - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", 685 + "version": "0.27.3", 686 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", 687 + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", 430 688 "cpu": [ 431 689 "x64" 432 690 ], ··· 441 699 } 442 700 }, 443 701 "node_modules/@esbuild/win32-arm64": { 444 - "version": "0.25.5", 445 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", 446 - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", 702 + "version": "0.27.3", 703 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", 704 + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", 447 705 "cpu": [ 448 706 "arm64" 449 707 ], ··· 458 716 } 459 717 }, 460 718 "node_modules/@esbuild/win32-ia32": { 461 - "version": "0.25.5", 462 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", 463 - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", 719 + "version": "0.27.3", 720 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", 721 + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", 464 722 "cpu": [ 465 723 "ia32" 466 724 ], ··· 475 733 } 476 734 }, 477 735 "node_modules/@esbuild/win32-x64": { 478 - "version": "0.25.5", 479 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", 480 - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", 736 + "version": "0.27.3", 737 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", 738 + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", 481 739 "cpu": [ 482 740 "x64" 483 741 ], ··· 492 750 } 493 751 }, 494 752 "node_modules/@eslint-community/eslint-utils": { 495 - "version": "4.7.0", 496 - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", 497 - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", 753 + "version": "4.9.1", 754 + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", 755 + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", 498 756 "dev": true, 499 757 "license": "MIT", 500 758 "dependencies": { ··· 524 782 } 525 783 }, 526 784 "node_modules/@eslint-community/regexpp": { 527 - "version": "4.12.1", 528 - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", 529 - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", 785 + "version": "4.12.2", 786 + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", 787 + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", 530 788 "dev": true, 531 789 "license": "MIT", 532 790 "engines": { ··· 534 792 } 535 793 }, 536 794 "node_modules/@eslint/config-array": { 537 - "version": "0.20.0", 538 - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", 539 - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", 795 + "version": "0.21.1", 796 + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", 797 + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", 540 798 "dev": true, 541 799 "license": "Apache-2.0", 542 800 "dependencies": { 543 - "@eslint/object-schema": "^2.1.6", 801 + "@eslint/object-schema": "^2.1.7", 544 802 "debug": "^4.3.1", 545 803 "minimatch": "^3.1.2" 546 804 }, ··· 549 807 } 550 808 }, 551 809 "node_modules/@eslint/config-helpers": { 552 - "version": "0.2.2", 553 - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", 554 - "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", 810 + "version": "0.4.2", 811 + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", 812 + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", 555 813 "dev": true, 556 814 "license": "Apache-2.0", 815 + "dependencies": { 816 + "@eslint/core": "^0.17.0" 817 + }, 557 818 "engines": { 558 819 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 559 820 } 560 821 }, 561 822 "node_modules/@eslint/core": { 562 - "version": "0.14.0", 563 - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", 564 - "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", 823 + "version": "0.17.0", 824 + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", 825 + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", 565 826 "dev": true, 566 827 "license": "Apache-2.0", 567 828 "dependencies": { ··· 572 833 } 573 834 }, 574 835 "node_modules/@eslint/eslintrc": { 575 - "version": "3.3.1", 576 - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", 577 - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", 836 + "version": "3.3.3", 837 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", 838 + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", 578 839 "dev": true, 579 840 "license": "MIT", 580 841 "dependencies": { ··· 584 845 "globals": "^14.0.0", 585 846 "ignore": "^5.2.0", 586 847 "import-fresh": "^3.2.1", 587 - "js-yaml": "^4.1.0", 848 + "js-yaml": "^4.1.1", 588 849 "minimatch": "^3.1.2", 589 850 "strip-json-comments": "^3.1.1" 590 851 }, ··· 609 870 } 610 871 }, 611 872 "node_modules/@eslint/js": { 612 - "version": "9.28.0", 613 - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz", 614 - "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==", 873 + "version": "9.39.2", 874 + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", 875 + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", 615 876 "dev": true, 616 877 "license": "MIT", 617 878 "engines": { ··· 622 883 } 623 884 }, 624 885 "node_modules/@eslint/object-schema": { 625 - "version": "2.1.6", 626 - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", 627 - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", 886 + "version": "2.1.7", 887 + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", 888 + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", 628 889 "dev": true, 629 890 "license": "Apache-2.0", 630 891 "engines": { ··· 632 893 } 633 894 }, 634 895 "node_modules/@eslint/plugin-kit": { 635 - "version": "0.3.4", 636 - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", 637 - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", 896 + "version": "0.4.1", 897 + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", 898 + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", 638 899 "dev": true, 639 900 "license": "Apache-2.0", 640 901 "dependencies": { 641 - "@eslint/core": "^0.15.1", 902 + "@eslint/core": "^0.17.0", 642 903 "levn": "^0.4.1" 643 904 }, 644 905 "engines": { 645 906 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 646 907 } 647 908 }, 648 - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { 649 - "version": "0.15.1", 650 - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", 651 - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", 652 - "dev": true, 653 - "license": "Apache-2.0", 654 - "dependencies": { 655 - "@types/json-schema": "^7.0.15" 656 - }, 657 - "engines": { 658 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 659 - } 660 - }, 661 909 "node_modules/@humanfs/core": { 662 910 "version": "0.19.1", 663 911 "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", ··· 669 917 } 670 918 }, 671 919 "node_modules/@humanfs/node": { 672 - "version": "0.16.6", 673 - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", 674 - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", 920 + "version": "0.16.7", 921 + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", 922 + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", 675 923 "dev": true, 676 924 "license": "Apache-2.0", 677 925 "dependencies": { 678 926 "@humanfs/core": "^0.19.1", 679 - "@humanwhocodes/retry": "^0.3.0" 927 + "@humanwhocodes/retry": "^0.4.0" 680 928 }, 681 929 "engines": { 682 930 "node": ">=18.18.0" 683 931 } 684 932 }, 685 - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { 686 - "version": "0.3.1", 687 - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", 688 - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", 689 - "dev": true, 690 - "license": "Apache-2.0", 691 - "engines": { 692 - "node": ">=18.18" 693 - }, 694 - "funding": { 695 - "type": "github", 696 - "url": "https://github.com/sponsors/nzakas" 697 - } 698 - }, 699 933 "node_modules/@humanwhocodes/module-importer": { 700 934 "version": "1.0.1", 701 935 "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", ··· 724 958 "url": "https://github.com/sponsors/nzakas" 725 959 } 726 960 }, 961 + "node_modules/@jmagaram/rescript-seq": { 962 + "version": "4.4.1", 963 + "resolved": "https://registry.npmjs.org/@jmagaram/rescript-seq/-/rescript-seq-4.4.1.tgz", 964 + "integrity": "sha512-+OdQX3csszdwMAqiVDiSkqGauq564KaxyvXH21oHPMCwD+Z8VdBxsH9t+XkpQ4wS14YbnEd13R4+Z/fg8pkawQ==", 965 + "license": "ISC", 966 + "dependencies": { 967 + "@rescript/core": "^1.1.0", 968 + "rescript": "^11.0.1" 969 + } 970 + }, 971 + "node_modules/@jmagaram/rescript-seq/node_modules/rescript": { 972 + "version": "11.1.4", 973 + "resolved": "https://registry.npmjs.org/rescript/-/rescript-11.1.4.tgz", 974 + "integrity": "sha512-0bGU0bocihjSC6MsE3TMjHjY0EUpchyrREquLS8VsZ3ohSMD+VHUEwimEfB3kpBI1vYkw3UFZ3WD8R28guz/Vw==", 975 + "hasInstallScript": true, 976 + "license": "SEE LICENSE IN LICENSE", 977 + "bin": { 978 + "bsc": "bsc", 979 + "bstracing": "lib/bstracing", 980 + "rescript": "rescript" 981 + }, 982 + "engines": { 983 + "node": ">=10" 984 + } 985 + }, 986 + "node_modules/@jridgewell/gen-mapping": { 987 + "version": "0.3.13", 988 + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", 989 + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", 990 + "dev": true, 991 + "license": "MIT", 992 + "dependencies": { 993 + "@jridgewell/sourcemap-codec": "^1.5.0", 994 + "@jridgewell/trace-mapping": "^0.3.24" 995 + } 996 + }, 997 + "node_modules/@jridgewell/remapping": { 998 + "version": "2.3.5", 999 + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", 1000 + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", 1001 + "dev": true, 1002 + "license": "MIT", 1003 + "dependencies": { 1004 + "@jridgewell/gen-mapping": "^0.3.5", 1005 + "@jridgewell/trace-mapping": "^0.3.24" 1006 + } 1007 + }, 1008 + "node_modules/@jridgewell/resolve-uri": { 1009 + "version": "3.1.2", 1010 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 1011 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 1012 + "dev": true, 1013 + "license": "MIT", 1014 + "engines": { 1015 + "node": ">=6.0.0" 1016 + } 1017 + }, 1018 + "node_modules/@jridgewell/sourcemap-codec": { 1019 + "version": "1.5.5", 1020 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 1021 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 1022 + "dev": true, 1023 + "license": "MIT" 1024 + }, 1025 + "node_modules/@jridgewell/trace-mapping": { 1026 + "version": "0.3.31", 1027 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", 1028 + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", 1029 + "dev": true, 1030 + "license": "MIT", 1031 + "dependencies": { 1032 + "@jridgewell/resolve-uri": "^3.1.0", 1033 + "@jridgewell/sourcemap-codec": "^1.4.14" 1034 + } 1035 + }, 727 1036 "node_modules/@nodelib/fs.scandir": { 728 1037 "version": "2.1.5", 729 1038 "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", ··· 766 1075 "version": "1.6.1", 767 1076 "resolved": "https://registry.npmjs.org/@rescript/core/-/core-1.6.1.tgz", 768 1077 "integrity": "sha512-vyb5k90ck+65Fgui+5vCja/mUfzKaK3kOPT4Z6aAJdHLH1eljEi1zKhXroCiCtpNLSWp8k4ulh1bdB5WS0hvqA==", 769 - "dev": true, 770 1078 "license": "MIT", 771 1079 "peerDependencies": { 772 1080 "rescript": ">=11.1.0" 773 1081 } 774 1082 }, 1083 + "node_modules/@rescript/darwin-arm64": { 1084 + "version": "12.1.0", 1085 + "resolved": "https://registry.npmjs.org/@rescript/darwin-arm64/-/darwin-arm64-12.1.0.tgz", 1086 + "integrity": "sha512-OuJMT+2h2Lp60n8ONFx1oBAAePSVkM9zl7E/EX4VD2xkQoVTPklz0BpHYOICnFJSCOOdbOhbsTBXdLpo3yvllg==", 1087 + "cpu": [ 1088 + "arm64" 1089 + ], 1090 + "optional": true, 1091 + "os": [ 1092 + "darwin" 1093 + ], 1094 + "engines": { 1095 + "node": ">=20.11.0" 1096 + } 1097 + }, 1098 + "node_modules/@rescript/darwin-x64": { 1099 + "version": "12.1.0", 1100 + "resolved": "https://registry.npmjs.org/@rescript/darwin-x64/-/darwin-x64-12.1.0.tgz", 1101 + "integrity": "sha512-r5Iv4ga+LaNq+6g9LODwZG4bwydd9UDXACP/HKxOfrP9XQCITlF/XqB1ZDJWyJOgJLZSJCd7erlG38YtB0VZKA==", 1102 + "cpu": [ 1103 + "x64" 1104 + ], 1105 + "optional": true, 1106 + "os": [ 1107 + "darwin" 1108 + ], 1109 + "engines": { 1110 + "node": ">=20.11.0" 1111 + } 1112 + }, 1113 + "node_modules/@rescript/linux-arm64": { 1114 + "version": "12.1.0", 1115 + "resolved": "https://registry.npmjs.org/@rescript/linux-arm64/-/linux-arm64-12.1.0.tgz", 1116 + "integrity": "sha512-UTZv4GTjbyQ/T5LQDfQiGcumK3SzE1K7+ug6gWpDcGZ7ALc7hCS6BVEFL/LDs8iWVwAwkK/6r456s2zRnvS7wQ==", 1117 + "cpu": [ 1118 + "arm64" 1119 + ], 1120 + "optional": true, 1121 + "os": [ 1122 + "linux" 1123 + ], 1124 + "engines": { 1125 + "node": ">=20.11.0" 1126 + } 1127 + }, 1128 + "node_modules/@rescript/linux-x64": { 1129 + "version": "12.1.0", 1130 + "resolved": "https://registry.npmjs.org/@rescript/linux-x64/-/linux-x64-12.1.0.tgz", 1131 + "integrity": "sha512-c0PXuBL09JRSA4nQusYbR4mW5QJrBPqxDrqvIX+M79fk3d6jQmj5x4NsBwk5BavxvmbR/JU1JjYBlSAa3h22Vg==", 1132 + "cpu": [ 1133 + "x64" 1134 + ], 1135 + "optional": true, 1136 + "os": [ 1137 + "linux" 1138 + ], 1139 + "engines": { 1140 + "node": ">=20.11.0" 1141 + } 1142 + }, 775 1143 "node_modules/@rescript/react": { 776 - "version": "0.13.1", 777 - "resolved": "https://registry.npmjs.org/@rescript/react/-/react-0.13.1.tgz", 778 - "integrity": "sha512-VIWtu/sAJyYmDVoAhit0LHDYQrW6RqZ6z8sh8san5cjEAT4klv8JWkiaSK3FGUfooUDkGUXXgKTkqyj8zRR21w==", 1144 + "version": "0.14.1", 1145 + "resolved": "https://registry.npmjs.org/@rescript/react/-/react-0.14.1.tgz", 1146 + "integrity": "sha512-tCdzMnzSEuEfWs/A6wq6kLx/E5nBkVJmFST+MwU01W9hzFwQi2JpvE82Fl66ets+oaC5UVpFf3vy4KvXRN+jPA==", 779 1147 "license": "MIT", 780 1148 "peerDependencies": { 781 - "react": ">=18.0.0", 782 - "react-dom": ">=18.0.0" 1149 + "react": ">=19.1.0", 1150 + "react-dom": ">=19.1.0" 783 1151 } 784 1152 }, 1153 + "node_modules/@rescript/runtime": { 1154 + "version": "12.1.0", 1155 + "resolved": "https://registry.npmjs.org/@rescript/runtime/-/runtime-12.1.0.tgz", 1156 + "integrity": "sha512-bvr9RfvBD+JS/6foWCA4l2fLXmUXN0KGqylXQPHt09QxUghqgoCiaWVHaHSx5dOIk/jAPlGQ7zB5yVeMas/EFQ==" 1157 + }, 785 1158 "node_modules/@rescript/std": { 786 1159 "version": "11.1.4", 787 1160 "resolved": "https://registry.npmjs.org/@rescript/std/-/std-11.1.4.tgz", ··· 789 1162 "dev": true, 790 1163 "license": "SEE LICENSE IN LICENSE" 791 1164 }, 1165 + "node_modules/@rescript/win32-x64": { 1166 + "version": "12.1.0", 1167 + "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-12.1.0.tgz", 1168 + "integrity": "sha512-nQC42QByyAbryfkbyK67iskipUqXVwTPCFrqissY4jJoP0128gg0yG6DydJnV1stXphtFdMFHtmyYE1ffG7UBg==", 1169 + "cpu": [ 1170 + "x64" 1171 + ], 1172 + "optional": true, 1173 + "os": [ 1174 + "win32" 1175 + ], 1176 + "engines": { 1177 + "node": ">=20.11.0" 1178 + } 1179 + }, 792 1180 "node_modules/@rolldown/pluginutils": { 793 - "version": "1.0.0-beta.11", 794 - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.11.tgz", 795 - "integrity": "sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==", 1181 + "version": "1.0.0-rc.2", 1182 + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", 1183 + "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", 796 1184 "dev": true, 797 1185 "license": "MIT" 798 1186 }, 799 1187 "node_modules/@rollup/rollup-android-arm-eabi": { 800 - "version": "4.43.0", 801 - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.43.0.tgz", 802 - "integrity": "sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw==", 1188 + "version": "4.57.1", 1189 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", 1190 + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", 803 1191 "cpu": [ 804 1192 "arm" 805 1193 ], ··· 811 1199 ] 812 1200 }, 813 1201 "node_modules/@rollup/rollup-android-arm64": { 814 - "version": "4.43.0", 815 - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.43.0.tgz", 816 - "integrity": "sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA==", 1202 + "version": "4.57.1", 1203 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", 1204 + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", 817 1205 "cpu": [ 818 1206 "arm64" 819 1207 ], ··· 825 1213 ] 826 1214 }, 827 1215 "node_modules/@rollup/rollup-darwin-arm64": { 828 - "version": "4.43.0", 829 - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.43.0.tgz", 830 - "integrity": "sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A==", 1216 + "version": "4.57.1", 1217 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", 1218 + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", 831 1219 "cpu": [ 832 1220 "arm64" 833 1221 ], ··· 839 1227 ] 840 1228 }, 841 1229 "node_modules/@rollup/rollup-darwin-x64": { 842 - "version": "4.43.0", 843 - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.43.0.tgz", 844 - "integrity": "sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg==", 1230 + "version": "4.57.1", 1231 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", 1232 + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", 845 1233 "cpu": [ 846 1234 "x64" 847 1235 ], ··· 853 1241 ] 854 1242 }, 855 1243 "node_modules/@rollup/rollup-freebsd-arm64": { 856 - "version": "4.43.0", 857 - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.43.0.tgz", 858 - "integrity": "sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ==", 1244 + "version": "4.57.1", 1245 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", 1246 + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", 859 1247 "cpu": [ 860 1248 "arm64" 861 1249 ], ··· 867 1255 ] 868 1256 }, 869 1257 "node_modules/@rollup/rollup-freebsd-x64": { 870 - "version": "4.43.0", 871 - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.43.0.tgz", 872 - "integrity": "sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg==", 1258 + "version": "4.57.1", 1259 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", 1260 + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", 873 1261 "cpu": [ 874 1262 "x64" 875 1263 ], ··· 881 1269 ] 882 1270 }, 883 1271 "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 884 - "version": "4.43.0", 885 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.43.0.tgz", 886 - "integrity": "sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw==", 1272 + "version": "4.57.1", 1273 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", 1274 + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", 887 1275 "cpu": [ 888 1276 "arm" 889 1277 ], ··· 895 1283 ] 896 1284 }, 897 1285 "node_modules/@rollup/rollup-linux-arm-musleabihf": { 898 - "version": "4.43.0", 899 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.43.0.tgz", 900 - "integrity": "sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw==", 1286 + "version": "4.57.1", 1287 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", 1288 + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", 901 1289 "cpu": [ 902 1290 "arm" 903 1291 ], ··· 909 1297 ] 910 1298 }, 911 1299 "node_modules/@rollup/rollup-linux-arm64-gnu": { 912 - "version": "4.43.0", 913 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.43.0.tgz", 914 - "integrity": "sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA==", 1300 + "version": "4.57.1", 1301 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", 1302 + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", 915 1303 "cpu": [ 916 1304 "arm64" 917 1305 ], ··· 923 1311 ] 924 1312 }, 925 1313 "node_modules/@rollup/rollup-linux-arm64-musl": { 926 - "version": "4.43.0", 927 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.43.0.tgz", 928 - "integrity": "sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA==", 1314 + "version": "4.57.1", 1315 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", 1316 + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", 929 1317 "cpu": [ 930 1318 "arm64" 931 1319 ], ··· 936 1324 "linux" 937 1325 ] 938 1326 }, 939 - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 940 - "version": "4.43.0", 941 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.43.0.tgz", 942 - "integrity": "sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg==", 1327 + "node_modules/@rollup/rollup-linux-loong64-gnu": { 1328 + "version": "4.57.1", 1329 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", 1330 + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", 943 1331 "cpu": [ 944 1332 "loong64" 945 1333 ], ··· 950 1338 "linux" 951 1339 ] 952 1340 }, 953 - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 954 - "version": "4.43.0", 955 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.43.0.tgz", 956 - "integrity": "sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw==", 1341 + "node_modules/@rollup/rollup-linux-loong64-musl": { 1342 + "version": "4.57.1", 1343 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", 1344 + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", 1345 + "cpu": [ 1346 + "loong64" 1347 + ], 1348 + "dev": true, 1349 + "license": "MIT", 1350 + "optional": true, 1351 + "os": [ 1352 + "linux" 1353 + ] 1354 + }, 1355 + "node_modules/@rollup/rollup-linux-ppc64-gnu": { 1356 + "version": "4.57.1", 1357 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", 1358 + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", 1359 + "cpu": [ 1360 + "ppc64" 1361 + ], 1362 + "dev": true, 1363 + "license": "MIT", 1364 + "optional": true, 1365 + "os": [ 1366 + "linux" 1367 + ] 1368 + }, 1369 + "node_modules/@rollup/rollup-linux-ppc64-musl": { 1370 + "version": "4.57.1", 1371 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", 1372 + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", 957 1373 "cpu": [ 958 1374 "ppc64" 959 1375 ], ··· 965 1381 ] 966 1382 }, 967 1383 "node_modules/@rollup/rollup-linux-riscv64-gnu": { 968 - "version": "4.43.0", 969 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.43.0.tgz", 970 - "integrity": "sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g==", 1384 + "version": "4.57.1", 1385 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", 1386 + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", 971 1387 "cpu": [ 972 1388 "riscv64" 973 1389 ], ··· 979 1395 ] 980 1396 }, 981 1397 "node_modules/@rollup/rollup-linux-riscv64-musl": { 982 - "version": "4.43.0", 983 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.43.0.tgz", 984 - "integrity": "sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q==", 1398 + "version": "4.57.1", 1399 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", 1400 + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", 985 1401 "cpu": [ 986 1402 "riscv64" 987 1403 ], ··· 993 1409 ] 994 1410 }, 995 1411 "node_modules/@rollup/rollup-linux-s390x-gnu": { 996 - "version": "4.43.0", 997 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.43.0.tgz", 998 - "integrity": "sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw==", 1412 + "version": "4.57.1", 1413 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", 1414 + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", 999 1415 "cpu": [ 1000 1416 "s390x" 1001 1417 ], ··· 1007 1423 ] 1008 1424 }, 1009 1425 "node_modules/@rollup/rollup-linux-x64-gnu": { 1010 - "version": "4.43.0", 1011 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.43.0.tgz", 1012 - "integrity": "sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==", 1426 + "version": "4.57.1", 1427 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", 1428 + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", 1013 1429 "cpu": [ 1014 1430 "x64" 1015 1431 ], ··· 1021 1437 ] 1022 1438 }, 1023 1439 "node_modules/@rollup/rollup-linux-x64-musl": { 1024 - "version": "4.43.0", 1025 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.43.0.tgz", 1026 - "integrity": "sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==", 1440 + "version": "4.57.1", 1441 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", 1442 + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", 1027 1443 "cpu": [ 1028 1444 "x64" 1029 1445 ], ··· 1034 1450 "linux" 1035 1451 ] 1036 1452 }, 1453 + "node_modules/@rollup/rollup-openbsd-x64": { 1454 + "version": "4.57.1", 1455 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", 1456 + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", 1457 + "cpu": [ 1458 + "x64" 1459 + ], 1460 + "dev": true, 1461 + "license": "MIT", 1462 + "optional": true, 1463 + "os": [ 1464 + "openbsd" 1465 + ] 1466 + }, 1467 + "node_modules/@rollup/rollup-openharmony-arm64": { 1468 + "version": "4.57.1", 1469 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", 1470 + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", 1471 + "cpu": [ 1472 + "arm64" 1473 + ], 1474 + "dev": true, 1475 + "license": "MIT", 1476 + "optional": true, 1477 + "os": [ 1478 + "openharmony" 1479 + ] 1480 + }, 1037 1481 "node_modules/@rollup/rollup-win32-arm64-msvc": { 1038 - "version": "4.43.0", 1039 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.43.0.tgz", 1040 - "integrity": "sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw==", 1482 + "version": "4.57.1", 1483 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", 1484 + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", 1041 1485 "cpu": [ 1042 1486 "arm64" 1043 1487 ], ··· 1049 1493 ] 1050 1494 }, 1051 1495 "node_modules/@rollup/rollup-win32-ia32-msvc": { 1052 - "version": "4.43.0", 1053 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.43.0.tgz", 1054 - "integrity": "sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw==", 1496 + "version": "4.57.1", 1497 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", 1498 + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", 1055 1499 "cpu": [ 1056 1500 "ia32" 1057 1501 ], ··· 1062 1506 "win32" 1063 1507 ] 1064 1508 }, 1509 + "node_modules/@rollup/rollup-win32-x64-gnu": { 1510 + "version": "4.57.1", 1511 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", 1512 + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", 1513 + "cpu": [ 1514 + "x64" 1515 + ], 1516 + "dev": true, 1517 + "license": "MIT", 1518 + "optional": true, 1519 + "os": [ 1520 + "win32" 1521 + ] 1522 + }, 1065 1523 "node_modules/@rollup/rollup-win32-x64-msvc": { 1066 - "version": "4.43.0", 1067 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.43.0.tgz", 1068 - "integrity": "sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw==", 1524 + "version": "4.57.1", 1525 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", 1526 + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", 1069 1527 "cpu": [ 1070 1528 "x64" 1071 1529 ], ··· 1090 1548 } 1091 1549 }, 1092 1550 "node_modules/@swc/core": { 1093 - "version": "1.12.0", 1094 - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.12.0.tgz", 1095 - "integrity": "sha512-/C0kiMHPY/HnLfqXYGMGxGck3A5Y3mqwxfv+EwHTPHGjAVRfHpWAEEBTSTF5C88vVY6CvwBEkhR2TX7t8Mahcw==", 1551 + "version": "1.15.11", 1552 + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.11.tgz", 1553 + "integrity": "sha512-iLmLTodbYxU39HhMPaMUooPwO/zqJWvsqkrXv1ZI38rMb048p6N7qtAtTp37sw9NzSrvH6oli8EdDygo09IZ/w==", 1096 1554 "dev": true, 1097 1555 "hasInstallScript": true, 1098 1556 "license": "Apache-2.0", 1099 1557 "dependencies": { 1100 1558 "@swc/counter": "^0.1.3", 1101 - "@swc/types": "^0.1.22" 1559 + "@swc/types": "^0.1.25" 1102 1560 }, 1103 1561 "engines": { 1104 1562 "node": ">=10" ··· 1108 1566 "url": "https://opencollective.com/swc" 1109 1567 }, 1110 1568 "optionalDependencies": { 1111 - "@swc/core-darwin-arm64": "1.12.0", 1112 - "@swc/core-darwin-x64": "1.12.0", 1113 - "@swc/core-linux-arm-gnueabihf": "1.12.0", 1114 - "@swc/core-linux-arm64-gnu": "1.12.0", 1115 - "@swc/core-linux-arm64-musl": "1.12.0", 1116 - "@swc/core-linux-x64-gnu": "1.12.0", 1117 - "@swc/core-linux-x64-musl": "1.12.0", 1118 - "@swc/core-win32-arm64-msvc": "1.12.0", 1119 - "@swc/core-win32-ia32-msvc": "1.12.0", 1120 - "@swc/core-win32-x64-msvc": "1.12.0" 1569 + "@swc/core-darwin-arm64": "1.15.11", 1570 + "@swc/core-darwin-x64": "1.15.11", 1571 + "@swc/core-linux-arm-gnueabihf": "1.15.11", 1572 + "@swc/core-linux-arm64-gnu": "1.15.11", 1573 + "@swc/core-linux-arm64-musl": "1.15.11", 1574 + "@swc/core-linux-x64-gnu": "1.15.11", 1575 + "@swc/core-linux-x64-musl": "1.15.11", 1576 + "@swc/core-win32-arm64-msvc": "1.15.11", 1577 + "@swc/core-win32-ia32-msvc": "1.15.11", 1578 + "@swc/core-win32-x64-msvc": "1.15.11" 1121 1579 }, 1122 1580 "peerDependencies": { 1123 1581 "@swc/helpers": ">=0.5.17" ··· 1129 1587 } 1130 1588 }, 1131 1589 "node_modules/@swc/core-darwin-arm64": { 1132 - "version": "1.12.0", 1133 - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.12.0.tgz", 1134 - "integrity": "sha512-usLr8kC80GDv3pwH2zoEaS279kxtWY0MY3blbMFw7zA8fAjqxa8IDxm3WcgyNLNWckWn4asFfguEwz/Weem3nA==", 1590 + "version": "1.15.11", 1591 + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.11.tgz", 1592 + "integrity": "sha512-QoIupRWVH8AF1TgxYyeA5nS18dtqMuxNwchjBIwJo3RdwLEFiJq6onOx9JAxHtuPwUkIVuU2Xbp+jCJ7Vzmgtg==", 1135 1593 "cpu": [ 1136 1594 "arm64" 1137 1595 ], ··· 1146 1604 } 1147 1605 }, 1148 1606 "node_modules/@swc/core-darwin-x64": { 1149 - "version": "1.12.0", 1150 - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.12.0.tgz", 1151 - "integrity": "sha512-Cvv4sqDcTY7QF2Dh1vn2Xbt/1ENYQcpmrGHzITJrXzxA2aBopsz/n4yQDiyRxTR0t802m4xu0CzMoZIHvVruWQ==", 1607 + "version": "1.15.11", 1608 + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.11.tgz", 1609 + "integrity": "sha512-S52Gu1QtPSfBYDiejlcfp9GlN+NjTZBRRNsz8PNwBgSE626/FUf2PcllVUix7jqkoMC+t0rS8t+2/aSWlMuQtA==", 1152 1610 "cpu": [ 1153 1611 "x64" 1154 1612 ], ··· 1163 1621 } 1164 1622 }, 1165 1623 "node_modules/@swc/core-linux-arm-gnueabihf": { 1166 - "version": "1.12.0", 1167 - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.12.0.tgz", 1168 - "integrity": "sha512-seM4/XMJMOupkzfLfHl8sRa3NdhsVZp+XgwA/vVeYZYJE4wuWUxVzhCYzwmNftVY32eF2IiRaWnhG6ho6jusnQ==", 1624 + "version": "1.15.11", 1625 + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.11.tgz", 1626 + "integrity": "sha512-lXJs8oXo6Z4yCpimpQ8vPeCjkgoHu5NoMvmJZ8qxDyU99KVdg6KwU9H79vzrmB+HfH+dCZ7JGMqMF//f8Cfvdg==", 1169 1627 "cpu": [ 1170 1628 "arm" 1171 1629 ], ··· 1180 1638 } 1181 1639 }, 1182 1640 "node_modules/@swc/core-linux-arm64-gnu": { 1183 - "version": "1.12.0", 1184 - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.12.0.tgz", 1185 - "integrity": "sha512-Al0x33gUVxNY5tutEYpSyv7mze6qQS1ONa0HEwoRxcK9WXsX0NHLTiOSGZoCUS1SsXM37ONlbA6/Bsp1MQyP+g==", 1641 + "version": "1.15.11", 1642 + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.11.tgz", 1643 + "integrity": "sha512-chRsz1K52/vj8Mfq/QOugVphlKPWlMh10V99qfH41hbGvwAU6xSPd681upO4bKiOr9+mRIZZW+EfJqY42ZzRyA==", 1186 1644 "cpu": [ 1187 1645 "arm64" 1188 1646 ], ··· 1197 1655 } 1198 1656 }, 1199 1657 "node_modules/@swc/core-linux-arm64-musl": { 1200 - "version": "1.12.0", 1201 - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.12.0.tgz", 1202 - "integrity": "sha512-OeFHz/5Hl9v75J9TYA5jQxNIYAZMqaiPpd9dYSTK2Xyqa/ZGgTtNyPhIwVfxx+9mHBf6+9c1mTlXUtACMtHmaQ==", 1658 + "version": "1.15.11", 1659 + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.11.tgz", 1660 + "integrity": "sha512-PYftgsTaGnfDK4m6/dty9ryK1FbLk+LosDJ/RJR2nkXGc8rd+WenXIlvHjWULiBVnS1RsjHHOXmTS4nDhe0v0w==", 1203 1661 "cpu": [ 1204 1662 "arm64" 1205 1663 ], ··· 1214 1672 } 1215 1673 }, 1216 1674 "node_modules/@swc/core-linux-x64-gnu": { 1217 - "version": "1.12.0", 1218 - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.12.0.tgz", 1219 - "integrity": "sha512-ltIvqNi7H0c5pRawyqjeYSKEIfZP4vv/datT3mwT6BW7muJtd1+KIDCPFLMIQ4wm/h76YQwPocsin3fzmnFdNA==", 1675 + "version": "1.15.11", 1676 + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.11.tgz", 1677 + "integrity": "sha512-DKtnJKIHiZdARyTKiX7zdRjiDS1KihkQWatQiCHMv+zc2sfwb4Glrodx2VLOX4rsa92NLR0Sw8WLcPEMFY1szQ==", 1220 1678 "cpu": [ 1221 1679 "x64" 1222 1680 ], ··· 1231 1689 } 1232 1690 }, 1233 1691 "node_modules/@swc/core-linux-x64-musl": { 1234 - "version": "1.12.0", 1235 - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.12.0.tgz", 1236 - "integrity": "sha512-Z/DhpjehaTK0uf+MhNB7mV9SuewpGs3P/q9/8+UsJeYoFr7yuOoPbAvrD6AqZkf6Bh7MRZ5OtG+KQgG5L+goiA==", 1692 + "version": "1.15.11", 1693 + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.11.tgz", 1694 + "integrity": "sha512-mUjjntHj4+8WBaiDe5UwRNHuEzLjIWBTSGTw0JT9+C9/Yyuh4KQqlcEQ3ro6GkHmBGXBFpGIj/o5VMyRWfVfWw==", 1237 1695 "cpu": [ 1238 1696 "x64" 1239 1697 ], ··· 1248 1706 } 1249 1707 }, 1250 1708 "node_modules/@swc/core-win32-arm64-msvc": { 1251 - "version": "1.12.0", 1252 - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.12.0.tgz", 1253 - "integrity": "sha512-wHnvbfHIh2gfSbvuFT7qP97YCMUDh+fuiso+pcC6ug8IsMxuViNapHET4o0ZdFNWHhXJ7/s0e6w7mkOalsqQiQ==", 1709 + "version": "1.15.11", 1710 + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.11.tgz", 1711 + "integrity": "sha512-ZkNNG5zL49YpaFzfl6fskNOSxtcZ5uOYmWBkY4wVAvgbSAQzLRVBp+xArGWh2oXlY/WgL99zQSGTv7RI5E6nzA==", 1254 1712 "cpu": [ 1255 1713 "arm64" 1256 1714 ], ··· 1265 1723 } 1266 1724 }, 1267 1725 "node_modules/@swc/core-win32-ia32-msvc": { 1268 - "version": "1.12.0", 1269 - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.12.0.tgz", 1270 - "integrity": "sha512-88umlXwK+7J2p4DjfWHXQpmlZgCf1ayt6Ssj+PYlAfMCR0aBiJoAMwHWrvDXEozyOrsyP1j2X6WxbmA861vL5Q==", 1726 + "version": "1.15.11", 1727 + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.11.tgz", 1728 + "integrity": "sha512-6XnzORkZCQzvTQ6cPrU7iaT9+i145oLwnin8JrfsLG41wl26+5cNQ2XV3zcbrnFEV6esjOceom9YO1w9mGJByw==", 1271 1729 "cpu": [ 1272 1730 "ia32" 1273 1731 ], ··· 1282 1740 } 1283 1741 }, 1284 1742 "node_modules/@swc/core-win32-x64-msvc": { 1285 - "version": "1.12.0", 1286 - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.12.0.tgz", 1287 - "integrity": "sha512-KR9TSRp+FEVOhbgTU6c94p/AYpsyBk7dIvlKQiDp8oKScUoyHG5yjmMBFN/BqUyTq4kj6zlgsY2rFE4R8/yqWg==", 1743 + "version": "1.15.11", 1744 + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.11.tgz", 1745 + "integrity": "sha512-IQ2n6af7XKLL6P1gIeZACskSxK8jWtoKpJWLZmdXTDj1MGzktUy4i+FvpdtxFmJWNavRWH1VmTr6kAubRDHeKw==", 1288 1746 "cpu": [ 1289 1747 "x64" 1290 1748 ], ··· 1306 1764 "license": "Apache-2.0" 1307 1765 }, 1308 1766 "node_modules/@swc/types": { 1309 - "version": "0.1.23", 1310 - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz", 1311 - "integrity": "sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==", 1767 + "version": "0.1.25", 1768 + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", 1769 + "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", 1312 1770 "dev": true, 1313 1771 "license": "Apache-2.0", 1314 1772 "dependencies": { ··· 1330 1788 "license": "MIT" 1331 1789 }, 1332 1790 "node_modules/@types/react": { 1333 - "version": "19.1.8", 1334 - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", 1335 - "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", 1791 + "version": "19.2.13", 1792 + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.13.tgz", 1793 + "integrity": "sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==", 1336 1794 "dev": true, 1337 1795 "license": "MIT", 1338 1796 "dependencies": { 1339 - "csstype": "^3.0.2" 1797 + "csstype": "^3.2.2" 1340 1798 } 1341 1799 }, 1342 1800 "node_modules/@types/react-dom": { 1343 - "version": "19.1.6", 1344 - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", 1345 - "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", 1801 + "version": "19.2.3", 1802 + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", 1803 + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", 1346 1804 "dev": true, 1347 1805 "license": "MIT", 1348 1806 "peerDependencies": { 1349 - "@types/react": "^19.0.0" 1807 + "@types/react": "^19.2.0" 1350 1808 } 1351 1809 }, 1352 1810 "node_modules/@typescript-eslint/eslint-plugin": { 1353 - "version": "8.34.0", 1354 - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.0.tgz", 1355 - "integrity": "sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w==", 1811 + "version": "8.54.0", 1812 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz", 1813 + "integrity": "sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==", 1356 1814 "dev": true, 1357 1815 "license": "MIT", 1358 1816 "dependencies": { 1359 - "@eslint-community/regexpp": "^4.10.0", 1360 - "@typescript-eslint/scope-manager": "8.34.0", 1361 - "@typescript-eslint/type-utils": "8.34.0", 1362 - "@typescript-eslint/utils": "8.34.0", 1363 - "@typescript-eslint/visitor-keys": "8.34.0", 1364 - "graphemer": "^1.4.0", 1365 - "ignore": "^7.0.0", 1817 + "@eslint-community/regexpp": "^4.12.2", 1818 + "@typescript-eslint/scope-manager": "8.54.0", 1819 + "@typescript-eslint/type-utils": "8.54.0", 1820 + "@typescript-eslint/utils": "8.54.0", 1821 + "@typescript-eslint/visitor-keys": "8.54.0", 1822 + "ignore": "^7.0.5", 1366 1823 "natural-compare": "^1.4.0", 1367 - "ts-api-utils": "^2.1.0" 1824 + "ts-api-utils": "^2.4.0" 1368 1825 }, 1369 1826 "engines": { 1370 1827 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1374 1831 "url": "https://opencollective.com/typescript-eslint" 1375 1832 }, 1376 1833 "peerDependencies": { 1377 - "@typescript-eslint/parser": "^8.34.0", 1834 + "@typescript-eslint/parser": "^8.54.0", 1378 1835 "eslint": "^8.57.0 || ^9.0.0", 1379 - "typescript": ">=4.8.4 <5.9.0" 1836 + "typescript": ">=4.8.4 <6.0.0" 1380 1837 } 1381 1838 }, 1382 1839 "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { ··· 1390 1847 } 1391 1848 }, 1392 1849 "node_modules/@typescript-eslint/parser": { 1393 - "version": "8.34.0", 1394 - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.0.tgz", 1395 - "integrity": "sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA==", 1850 + "version": "8.54.0", 1851 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.54.0.tgz", 1852 + "integrity": "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==", 1396 1853 "dev": true, 1397 1854 "license": "MIT", 1398 1855 "dependencies": { 1399 - "@typescript-eslint/scope-manager": "8.34.0", 1400 - "@typescript-eslint/types": "8.34.0", 1401 - "@typescript-eslint/typescript-estree": "8.34.0", 1402 - "@typescript-eslint/visitor-keys": "8.34.0", 1403 - "debug": "^4.3.4" 1856 + "@typescript-eslint/scope-manager": "8.54.0", 1857 + "@typescript-eslint/types": "8.54.0", 1858 + "@typescript-eslint/typescript-estree": "8.54.0", 1859 + "@typescript-eslint/visitor-keys": "8.54.0", 1860 + "debug": "^4.4.3" 1404 1861 }, 1405 1862 "engines": { 1406 1863 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1411 1868 }, 1412 1869 "peerDependencies": { 1413 1870 "eslint": "^8.57.0 || ^9.0.0", 1414 - "typescript": ">=4.8.4 <5.9.0" 1871 + "typescript": ">=4.8.4 <6.0.0" 1415 1872 } 1416 1873 }, 1417 1874 "node_modules/@typescript-eslint/project-service": { 1418 - "version": "8.34.0", 1419 - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.0.tgz", 1420 - "integrity": "sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==", 1875 + "version": "8.54.0", 1876 + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz", 1877 + "integrity": "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==", 1421 1878 "dev": true, 1422 1879 "license": "MIT", 1423 1880 "dependencies": { 1424 - "@typescript-eslint/tsconfig-utils": "^8.34.0", 1425 - "@typescript-eslint/types": "^8.34.0", 1426 - "debug": "^4.3.4" 1881 + "@typescript-eslint/tsconfig-utils": "^8.54.0", 1882 + "@typescript-eslint/types": "^8.54.0", 1883 + "debug": "^4.4.3" 1427 1884 }, 1428 1885 "engines": { 1429 1886 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1433 1890 "url": "https://opencollective.com/typescript-eslint" 1434 1891 }, 1435 1892 "peerDependencies": { 1436 - "typescript": ">=4.8.4 <5.9.0" 1893 + "typescript": ">=4.8.4 <6.0.0" 1437 1894 } 1438 1895 }, 1439 1896 "node_modules/@typescript-eslint/scope-manager": { 1440 - "version": "8.34.0", 1441 - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.0.tgz", 1442 - "integrity": "sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==", 1897 + "version": "8.54.0", 1898 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz", 1899 + "integrity": "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==", 1443 1900 "dev": true, 1444 1901 "license": "MIT", 1445 1902 "dependencies": { 1446 - "@typescript-eslint/types": "8.34.0", 1447 - "@typescript-eslint/visitor-keys": "8.34.0" 1903 + "@typescript-eslint/types": "8.54.0", 1904 + "@typescript-eslint/visitor-keys": "8.54.0" 1448 1905 }, 1449 1906 "engines": { 1450 1907 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1455 1912 } 1456 1913 }, 1457 1914 "node_modules/@typescript-eslint/tsconfig-utils": { 1458 - "version": "8.34.0", 1459 - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.0.tgz", 1460 - "integrity": "sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==", 1915 + "version": "8.54.0", 1916 + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz", 1917 + "integrity": "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==", 1461 1918 "dev": true, 1462 1919 "license": "MIT", 1463 1920 "engines": { ··· 1468 1925 "url": "https://opencollective.com/typescript-eslint" 1469 1926 }, 1470 1927 "peerDependencies": { 1471 - "typescript": ">=4.8.4 <5.9.0" 1928 + "typescript": ">=4.8.4 <6.0.0" 1472 1929 } 1473 1930 }, 1474 1931 "node_modules/@typescript-eslint/type-utils": { 1475 - "version": "8.34.0", 1476 - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.0.tgz", 1477 - "integrity": "sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg==", 1932 + "version": "8.54.0", 1933 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz", 1934 + "integrity": "sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==", 1478 1935 "dev": true, 1479 1936 "license": "MIT", 1480 1937 "dependencies": { 1481 - "@typescript-eslint/typescript-estree": "8.34.0", 1482 - "@typescript-eslint/utils": "8.34.0", 1483 - "debug": "^4.3.4", 1484 - "ts-api-utils": "^2.1.0" 1938 + "@typescript-eslint/types": "8.54.0", 1939 + "@typescript-eslint/typescript-estree": "8.54.0", 1940 + "@typescript-eslint/utils": "8.54.0", 1941 + "debug": "^4.4.3", 1942 + "ts-api-utils": "^2.4.0" 1485 1943 }, 1486 1944 "engines": { 1487 1945 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1492 1950 }, 1493 1951 "peerDependencies": { 1494 1952 "eslint": "^8.57.0 || ^9.0.0", 1495 - "typescript": ">=4.8.4 <5.9.0" 1953 + "typescript": ">=4.8.4 <6.0.0" 1496 1954 } 1497 1955 }, 1498 1956 "node_modules/@typescript-eslint/types": { 1499 - "version": "8.34.0", 1500 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz", 1501 - "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==", 1957 + "version": "8.54.0", 1958 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.54.0.tgz", 1959 + "integrity": "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==", 1502 1960 "dev": true, 1503 1961 "license": "MIT", 1504 1962 "engines": { ··· 1510 1968 } 1511 1969 }, 1512 1970 "node_modules/@typescript-eslint/typescript-estree": { 1513 - "version": "8.34.0", 1514 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.0.tgz", 1515 - "integrity": "sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==", 1971 + "version": "8.54.0", 1972 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz", 1973 + "integrity": "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==", 1516 1974 "dev": true, 1517 1975 "license": "MIT", 1518 1976 "dependencies": { 1519 - "@typescript-eslint/project-service": "8.34.0", 1520 - "@typescript-eslint/tsconfig-utils": "8.34.0", 1521 - "@typescript-eslint/types": "8.34.0", 1522 - "@typescript-eslint/visitor-keys": "8.34.0", 1523 - "debug": "^4.3.4", 1524 - "fast-glob": "^3.3.2", 1525 - "is-glob": "^4.0.3", 1526 - "minimatch": "^9.0.4", 1527 - "semver": "^7.6.0", 1528 - "ts-api-utils": "^2.1.0" 1977 + "@typescript-eslint/project-service": "8.54.0", 1978 + "@typescript-eslint/tsconfig-utils": "8.54.0", 1979 + "@typescript-eslint/types": "8.54.0", 1980 + "@typescript-eslint/visitor-keys": "8.54.0", 1981 + "debug": "^4.4.3", 1982 + "minimatch": "^9.0.5", 1983 + "semver": "^7.7.3", 1984 + "tinyglobby": "^0.2.15", 1985 + "ts-api-utils": "^2.4.0" 1529 1986 }, 1530 1987 "engines": { 1531 1988 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1535 1992 "url": "https://opencollective.com/typescript-eslint" 1536 1993 }, 1537 1994 "peerDependencies": { 1538 - "typescript": ">=4.8.4 <5.9.0" 1995 + "typescript": ">=4.8.4 <6.0.0" 1539 1996 } 1540 1997 }, 1541 1998 "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { ··· 1564 2021 "url": "https://github.com/sponsors/isaacs" 1565 2022 } 1566 2023 }, 2024 + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { 2025 + "version": "7.7.4", 2026 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", 2027 + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", 2028 + "dev": true, 2029 + "license": "ISC", 2030 + "bin": { 2031 + "semver": "bin/semver.js" 2032 + }, 2033 + "engines": { 2034 + "node": ">=10" 2035 + } 2036 + }, 1567 2037 "node_modules/@typescript-eslint/utils": { 1568 - "version": "8.34.0", 1569 - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.0.tgz", 1570 - "integrity": "sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==", 2038 + "version": "8.54.0", 2039 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.54.0.tgz", 2040 + "integrity": "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==", 1571 2041 "dev": true, 1572 2042 "license": "MIT", 1573 2043 "dependencies": { 1574 - "@eslint-community/eslint-utils": "^4.7.0", 1575 - "@typescript-eslint/scope-manager": "8.34.0", 1576 - "@typescript-eslint/types": "8.34.0", 1577 - "@typescript-eslint/typescript-estree": "8.34.0" 2044 + "@eslint-community/eslint-utils": "^4.9.1", 2045 + "@typescript-eslint/scope-manager": "8.54.0", 2046 + "@typescript-eslint/types": "8.54.0", 2047 + "@typescript-eslint/typescript-estree": "8.54.0" 1578 2048 }, 1579 2049 "engines": { 1580 2050 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1585 2055 }, 1586 2056 "peerDependencies": { 1587 2057 "eslint": "^8.57.0 || ^9.0.0", 1588 - "typescript": ">=4.8.4 <5.9.0" 2058 + "typescript": ">=4.8.4 <6.0.0" 1589 2059 } 1590 2060 }, 1591 2061 "node_modules/@typescript-eslint/visitor-keys": { 1592 - "version": "8.34.0", 1593 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.0.tgz", 1594 - "integrity": "sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==", 2062 + "version": "8.54.0", 2063 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz", 2064 + "integrity": "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==", 1595 2065 "dev": true, 1596 2066 "license": "MIT", 1597 2067 "dependencies": { 1598 - "@typescript-eslint/types": "8.34.0", 1599 - "eslint-visitor-keys": "^4.2.0" 2068 + "@typescript-eslint/types": "8.54.0", 2069 + "eslint-visitor-keys": "^4.2.1" 1600 2070 }, 1601 2071 "engines": { 1602 2072 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1607 2077 } 1608 2078 }, 1609 2079 "node_modules/@vitejs/plugin-react-swc": { 1610 - "version": "3.10.2", 1611 - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.10.2.tgz", 1612 - "integrity": "sha512-xD3Rdvrt5LgANug7WekBn1KhcvLn1H3jNBfJRL3reeOIua/WnZOEV5qi5qIBq5T8R0jUDmRtxuvk4bPhzGHDWw==", 2080 + "version": "4.2.3", 2081 + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.2.3.tgz", 2082 + "integrity": "sha512-QIluDil2prhY1gdA3GGwxZzTAmLdi8cQ2CcuMW4PB/Wu4e/1pzqrwhYWVd09LInCRlDUidQjd0B70QWbjWtLxA==", 1613 2083 "dev": true, 1614 2084 "license": "MIT", 1615 2085 "dependencies": { 1616 - "@rolldown/pluginutils": "1.0.0-beta.11", 1617 - "@swc/core": "^1.11.31" 2086 + "@rolldown/pluginutils": "1.0.0-rc.2", 2087 + "@swc/core": "^1.15.11" 2088 + }, 2089 + "engines": { 2090 + "node": "^20.19.0 || >=22.12.0" 1618 2091 }, 1619 2092 "peerDependencies": { 1620 - "vite": "^4 || ^5 || ^6 || ^7.0.0-beta.0" 2093 + "vite": "^4 || ^5 || ^6 || ^7" 1621 2094 } 1622 2095 }, 1623 2096 "node_modules/acorn": { ··· 1661 2134 } 1662 2135 }, 1663 2136 "node_modules/ansi-escapes": { 1664 - "version": "7.1.1", 1665 - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", 1666 - "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", 2137 + "version": "7.3.0", 2138 + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", 2139 + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", 1667 2140 "dev": true, 1668 2141 "license": "MIT", 1669 2142 "dependencies": { ··· 1740 2213 "dev": true, 1741 2214 "license": "MIT" 1742 2215 }, 2216 + "node_modules/baseline-browser-mapping": { 2217 + "version": "2.9.19", 2218 + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", 2219 + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", 2220 + "dev": true, 2221 + "license": "Apache-2.0", 2222 + "bin": { 2223 + "baseline-browser-mapping": "dist/cli.js" 2224 + } 2225 + }, 1743 2226 "node_modules/binary-extensions": { 1744 2227 "version": "2.3.0", 1745 2228 "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", ··· 1777 2260 "node": ">=8" 1778 2261 } 1779 2262 }, 2263 + "node_modules/browserslist": { 2264 + "version": "4.28.1", 2265 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", 2266 + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", 2267 + "dev": true, 2268 + "funding": [ 2269 + { 2270 + "type": "opencollective", 2271 + "url": "https://opencollective.com/browserslist" 2272 + }, 2273 + { 2274 + "type": "tidelift", 2275 + "url": "https://tidelift.com/funding/github/npm/browserslist" 2276 + }, 2277 + { 2278 + "type": "github", 2279 + "url": "https://github.com/sponsors/ai" 2280 + } 2281 + ], 2282 + "license": "MIT", 2283 + "dependencies": { 2284 + "baseline-browser-mapping": "^2.9.0", 2285 + "caniuse-lite": "^1.0.30001759", 2286 + "electron-to-chromium": "^1.5.263", 2287 + "node-releases": "^2.0.27", 2288 + "update-browserslist-db": "^1.2.0" 2289 + }, 2290 + "bin": { 2291 + "browserslist": "cli.js" 2292 + }, 2293 + "engines": { 2294 + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 2295 + } 2296 + }, 1780 2297 "node_modules/callsites": { 1781 2298 "version": "3.1.0", 1782 2299 "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", ··· 1786 2303 "engines": { 1787 2304 "node": ">=6" 1788 2305 } 2306 + }, 2307 + "node_modules/caniuse-lite": { 2308 + "version": "1.0.30001769", 2309 + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", 2310 + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", 2311 + "dev": true, 2312 + "funding": [ 2313 + { 2314 + "type": "opencollective", 2315 + "url": "https://opencollective.com/browserslist" 2316 + }, 2317 + { 2318 + "type": "tidelift", 2319 + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 2320 + }, 2321 + { 2322 + "type": "github", 2323 + "url": "https://github.com/sponsors/ai" 2324 + } 2325 + ], 2326 + "license": "CC-BY-4.0" 1789 2327 }, 1790 2328 "node_modules/chalk": { 1791 2329 "version": "4.1.2", ··· 1859 2397 } 1860 2398 }, 1861 2399 "node_modules/cli-truncate": { 1862 - "version": "5.1.0", 1863 - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.0.tgz", 1864 - "integrity": "sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==", 2400 + "version": "5.1.1", 2401 + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz", 2402 + "integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==", 1865 2403 "dev": true, 1866 2404 "license": "MIT", 1867 2405 "dependencies": { ··· 1903 2441 "license": "MIT" 1904 2442 }, 1905 2443 "node_modules/commander": { 1906 - "version": "14.0.1", 1907 - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.1.tgz", 1908 - "integrity": "sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==", 2444 + "version": "14.0.3", 2445 + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", 2446 + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", 1909 2447 "dev": true, 1910 2448 "license": "MIT", 1911 2449 "engines": { ··· 1919 2457 "dev": true, 1920 2458 "license": "MIT" 1921 2459 }, 2460 + "node_modules/convert-source-map": { 2461 + "version": "2.0.0", 2462 + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 2463 + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 2464 + "dev": true, 2465 + "license": "MIT" 2466 + }, 1922 2467 "node_modules/cross-spawn": { 1923 2468 "version": "7.0.6", 1924 2469 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", ··· 1935 2480 } 1936 2481 }, 1937 2482 "node_modules/csstype": { 1938 - "version": "3.1.3", 1939 - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1940 - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 2483 + "version": "3.2.3", 2484 + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", 2485 + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", 1941 2486 "dev": true, 1942 2487 "license": "MIT" 1943 2488 }, 1944 2489 "node_modules/debug": { 1945 - "version": "4.4.1", 1946 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", 1947 - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", 2490 + "version": "4.4.3", 2491 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 2492 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 1948 2493 "dev": true, 1949 2494 "license": "MIT", 1950 2495 "dependencies": { ··· 1967 2512 "license": "MIT" 1968 2513 }, 1969 2514 "node_modules/diff": { 1970 - "version": "5.2.0", 1971 - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", 1972 - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", 2515 + "version": "5.2.2", 2516 + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", 2517 + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", 1973 2518 "dev": true, 1974 2519 "license": "BSD-3-Clause", 1975 2520 "engines": { 1976 2521 "node": ">=0.3.1" 1977 2522 } 1978 2523 }, 2524 + "node_modules/electron-to-chromium": { 2525 + "version": "1.5.286", 2526 + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", 2527 + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", 2528 + "dev": true, 2529 + "license": "ISC" 2530 + }, 1979 2531 "node_modules/emoji-regex": { 1980 - "version": "10.5.0", 1981 - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", 1982 - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", 2532 + "version": "10.6.0", 2533 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", 2534 + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", 1983 2535 "dev": true, 1984 2536 "license": "MIT" 1985 2537 }, ··· 1997 2549 } 1998 2550 }, 1999 2551 "node_modules/esbuild": { 2000 - "version": "0.25.5", 2001 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", 2002 - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", 2552 + "version": "0.27.3", 2553 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", 2554 + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", 2003 2555 "dev": true, 2004 2556 "hasInstallScript": true, 2005 2557 "license": "MIT", ··· 2010 2562 "node": ">=18" 2011 2563 }, 2012 2564 "optionalDependencies": { 2013 - "@esbuild/aix-ppc64": "0.25.5", 2014 - "@esbuild/android-arm": "0.25.5", 2015 - "@esbuild/android-arm64": "0.25.5", 2016 - "@esbuild/android-x64": "0.25.5", 2017 - "@esbuild/darwin-arm64": "0.25.5", 2018 - "@esbuild/darwin-x64": "0.25.5", 2019 - "@esbuild/freebsd-arm64": "0.25.5", 2020 - "@esbuild/freebsd-x64": "0.25.5", 2021 - "@esbuild/linux-arm": "0.25.5", 2022 - "@esbuild/linux-arm64": "0.25.5", 2023 - "@esbuild/linux-ia32": "0.25.5", 2024 - "@esbuild/linux-loong64": "0.25.5", 2025 - "@esbuild/linux-mips64el": "0.25.5", 2026 - "@esbuild/linux-ppc64": "0.25.5", 2027 - "@esbuild/linux-riscv64": "0.25.5", 2028 - "@esbuild/linux-s390x": "0.25.5", 2029 - "@esbuild/linux-x64": "0.25.5", 2030 - "@esbuild/netbsd-arm64": "0.25.5", 2031 - "@esbuild/netbsd-x64": "0.25.5", 2032 - "@esbuild/openbsd-arm64": "0.25.5", 2033 - "@esbuild/openbsd-x64": "0.25.5", 2034 - "@esbuild/sunos-x64": "0.25.5", 2035 - "@esbuild/win32-arm64": "0.25.5", 2036 - "@esbuild/win32-ia32": "0.25.5", 2037 - "@esbuild/win32-x64": "0.25.5" 2565 + "@esbuild/aix-ppc64": "0.27.3", 2566 + "@esbuild/android-arm": "0.27.3", 2567 + "@esbuild/android-arm64": "0.27.3", 2568 + "@esbuild/android-x64": "0.27.3", 2569 + "@esbuild/darwin-arm64": "0.27.3", 2570 + "@esbuild/darwin-x64": "0.27.3", 2571 + "@esbuild/freebsd-arm64": "0.27.3", 2572 + "@esbuild/freebsd-x64": "0.27.3", 2573 + "@esbuild/linux-arm": "0.27.3", 2574 + "@esbuild/linux-arm64": "0.27.3", 2575 + "@esbuild/linux-ia32": "0.27.3", 2576 + "@esbuild/linux-loong64": "0.27.3", 2577 + "@esbuild/linux-mips64el": "0.27.3", 2578 + "@esbuild/linux-ppc64": "0.27.3", 2579 + "@esbuild/linux-riscv64": "0.27.3", 2580 + "@esbuild/linux-s390x": "0.27.3", 2581 + "@esbuild/linux-x64": "0.27.3", 2582 + "@esbuild/netbsd-arm64": "0.27.3", 2583 + "@esbuild/netbsd-x64": "0.27.3", 2584 + "@esbuild/openbsd-arm64": "0.27.3", 2585 + "@esbuild/openbsd-x64": "0.27.3", 2586 + "@esbuild/openharmony-arm64": "0.27.3", 2587 + "@esbuild/sunos-x64": "0.27.3", 2588 + "@esbuild/win32-arm64": "0.27.3", 2589 + "@esbuild/win32-ia32": "0.27.3", 2590 + "@esbuild/win32-x64": "0.27.3" 2591 + } 2592 + }, 2593 + "node_modules/escalade": { 2594 + "version": "3.2.0", 2595 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 2596 + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 2597 + "dev": true, 2598 + "license": "MIT", 2599 + "engines": { 2600 + "node": ">=6" 2038 2601 } 2039 2602 }, 2040 2603 "node_modules/escape-string-regexp": { ··· 2051 2614 } 2052 2615 }, 2053 2616 "node_modules/eslint": { 2054 - "version": "9.28.0", 2055 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz", 2056 - "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==", 2617 + "version": "9.39.2", 2618 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", 2619 + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", 2057 2620 "dev": true, 2058 2621 "license": "MIT", 2059 2622 "dependencies": { 2060 - "@eslint-community/eslint-utils": "^4.2.0", 2623 + "@eslint-community/eslint-utils": "^4.8.0", 2061 2624 "@eslint-community/regexpp": "^4.12.1", 2062 - "@eslint/config-array": "^0.20.0", 2063 - "@eslint/config-helpers": "^0.2.1", 2064 - "@eslint/core": "^0.14.0", 2625 + "@eslint/config-array": "^0.21.1", 2626 + "@eslint/config-helpers": "^0.4.2", 2627 + "@eslint/core": "^0.17.0", 2065 2628 "@eslint/eslintrc": "^3.3.1", 2066 - "@eslint/js": "9.28.0", 2067 - "@eslint/plugin-kit": "^0.3.1", 2629 + "@eslint/js": "9.39.2", 2630 + "@eslint/plugin-kit": "^0.4.1", 2068 2631 "@humanfs/node": "^0.16.6", 2069 2632 "@humanwhocodes/module-importer": "^1.0.1", 2070 2633 "@humanwhocodes/retry": "^0.4.2", 2071 2634 "@types/estree": "^1.0.6", 2072 - "@types/json-schema": "^7.0.15", 2073 2635 "ajv": "^6.12.4", 2074 2636 "chalk": "^4.0.0", 2075 2637 "cross-spawn": "^7.0.6", 2076 2638 "debug": "^4.3.2", 2077 2639 "escape-string-regexp": "^4.0.0", 2078 - "eslint-scope": "^8.3.0", 2079 - "eslint-visitor-keys": "^4.2.0", 2080 - "espree": "^10.3.0", 2640 + "eslint-scope": "^8.4.0", 2641 + "eslint-visitor-keys": "^4.2.1", 2642 + "espree": "^10.4.0", 2081 2643 "esquery": "^1.5.0", 2082 2644 "esutils": "^2.0.2", 2083 2645 "fast-deep-equal": "^3.1.3", ··· 2112 2674 } 2113 2675 }, 2114 2676 "node_modules/eslint-plugin-react-hooks": { 2115 - "version": "5.2.0", 2116 - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", 2117 - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", 2677 + "version": "7.0.1", 2678 + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", 2679 + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", 2118 2680 "dev": true, 2119 2681 "license": "MIT", 2682 + "dependencies": { 2683 + "@babel/core": "^7.24.4", 2684 + "@babel/parser": "^7.24.4", 2685 + "hermes-parser": "^0.25.1", 2686 + "zod": "^3.25.0 || ^4.0.0", 2687 + "zod-validation-error": "^3.5.0 || ^4.0.0" 2688 + }, 2120 2689 "engines": { 2121 - "node": ">=10" 2690 + "node": ">=18" 2122 2691 }, 2123 2692 "peerDependencies": { 2124 2693 "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" 2125 2694 } 2126 2695 }, 2127 2696 "node_modules/eslint-plugin-react-refresh": { 2128 - "version": "0.4.20", 2129 - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", 2130 - "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", 2697 + "version": "0.4.26", 2698 + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", 2699 + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", 2131 2700 "dev": true, 2132 2701 "license": "MIT", 2133 2702 "peerDependencies": { ··· 2183 2752 } 2184 2753 }, 2185 2754 "node_modules/esquery": { 2186 - "version": "1.6.0", 2187 - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 2188 - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 2755 + "version": "1.7.0", 2756 + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", 2757 + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", 2189 2758 "dev": true, 2190 2759 "license": "BSD-3-Clause", 2191 2760 "dependencies": { ··· 2229 2798 } 2230 2799 }, 2231 2800 "node_modules/eventemitter3": { 2232 - "version": "5.0.1", 2233 - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", 2234 - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", 2801 + "version": "5.0.4", 2802 + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", 2803 + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", 2235 2804 "dev": true, 2236 2805 "license": "MIT" 2237 2806 }, ··· 2287 2856 "license": "MIT" 2288 2857 }, 2289 2858 "node_modules/fastq": { 2290 - "version": "1.19.1", 2291 - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", 2292 - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", 2859 + "version": "1.20.1", 2860 + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", 2861 + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", 2293 2862 "dev": true, 2294 2863 "license": "ISC", 2295 2864 "dependencies": { ··· 2373 2942 ], 2374 2943 "engines": { 2375 2944 "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 2945 + } 2946 + }, 2947 + "node_modules/gensync": { 2948 + "version": "1.0.0-beta.2", 2949 + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 2950 + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 2951 + "dev": true, 2952 + "license": "MIT", 2953 + "engines": { 2954 + "node": ">=6.9.0" 2376 2955 } 2377 2956 }, 2378 2957 "node_modules/get-east-asian-width": { ··· 2402 2981 } 2403 2982 }, 2404 2983 "node_modules/globals": { 2405 - "version": "16.2.0", 2406 - "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", 2407 - "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==", 2984 + "version": "16.5.0", 2985 + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", 2986 + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", 2408 2987 "dev": true, 2409 2988 "license": "MIT", 2410 2989 "engines": { ··· 2445 3024 "node": ">= 4" 2446 3025 } 2447 3026 }, 2448 - "node_modules/graphemer": { 2449 - "version": "1.4.0", 2450 - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2451 - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 2452 - "dev": true, 2453 - "license": "MIT" 2454 - }, 2455 3027 "node_modules/has-flag": { 2456 3028 "version": "4.0.0", 2457 3029 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", ··· 2462 3034 "node": ">=8" 2463 3035 } 2464 3036 }, 3037 + "node_modules/hermes-estree": { 3038 + "version": "0.25.1", 3039 + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", 3040 + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", 3041 + "dev": true, 3042 + "license": "MIT" 3043 + }, 3044 + "node_modules/hermes-parser": { 3045 + "version": "0.25.1", 3046 + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", 3047 + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", 3048 + "dev": true, 3049 + "license": "MIT", 3050 + "dependencies": { 3051 + "hermes-estree": "0.25.1" 3052 + } 3053 + }, 2465 3054 "node_modules/husky": { 2466 3055 "version": "9.1.7", 2467 3056 "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", ··· 2584 3173 "dev": true, 2585 3174 "license": "ISC" 2586 3175 }, 3176 + "node_modules/js-tokens": { 3177 + "version": "4.0.0", 3178 + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 3179 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 3180 + "dev": true, 3181 + "license": "MIT" 3182 + }, 2587 3183 "node_modules/js-yaml": { 2588 - "version": "4.1.0", 2589 - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2590 - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 3184 + "version": "4.1.1", 3185 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", 3186 + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", 2591 3187 "dev": true, 2592 3188 "license": "MIT", 2593 3189 "dependencies": { ··· 2597 3193 "js-yaml": "bin/js-yaml.js" 2598 3194 } 2599 3195 }, 3196 + "node_modules/jsesc": { 3197 + "version": "3.1.0", 3198 + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", 3199 + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", 3200 + "dev": true, 3201 + "license": "MIT", 3202 + "bin": { 3203 + "jsesc": "bin/jsesc" 3204 + }, 3205 + "engines": { 3206 + "node": ">=6" 3207 + } 3208 + }, 2600 3209 "node_modules/json-buffer": { 2601 3210 "version": "3.0.1", 2602 3211 "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", ··· 2618 3227 "dev": true, 2619 3228 "license": "MIT" 2620 3229 }, 3230 + "node_modules/json5": { 3231 + "version": "2.2.3", 3232 + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 3233 + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 3234 + "dev": true, 3235 + "license": "MIT", 3236 + "bin": { 3237 + "json5": "lib/cli.js" 3238 + }, 3239 + "engines": { 3240 + "node": ">=6" 3241 + } 3242 + }, 2621 3243 "node_modules/keyv": { 2622 3244 "version": "4.5.4", 2623 3245 "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", ··· 2643 3265 } 2644 3266 }, 2645 3267 "node_modules/lint-staged": { 2646 - "version": "16.2.3", 2647 - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.3.tgz", 2648 - "integrity": "sha512-1OnJEESB9zZqsp61XHH2fvpS1es3hRCxMplF/AJUDa8Ho8VrscYDIuxGrj3m8KPXbcWZ8fT9XTMUhEQmOVKpKw==", 3268 + "version": "16.2.7", 3269 + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.7.tgz", 3270 + "integrity": "sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==", 2649 3271 "dev": true, 2650 3272 "license": "MIT", 2651 3273 "dependencies": { 2652 - "commander": "^14.0.1", 2653 - "listr2": "^9.0.4", 3274 + "commander": "^14.0.2", 3275 + "listr2": "^9.0.5", 2654 3276 "micromatch": "^4.0.8", 2655 - "nano-spawn": "^1.0.3", 3277 + "nano-spawn": "^2.0.0", 2656 3278 "pidtree": "^0.6.0", 2657 3279 "string-argv": "^0.3.2", 2658 3280 "yaml": "^2.8.1" ··· 2668 3290 } 2669 3291 }, 2670 3292 "node_modules/listr2": { 2671 - "version": "9.0.4", 2672 - "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.4.tgz", 2673 - "integrity": "sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==", 3293 + "version": "9.0.5", 3294 + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", 3295 + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", 2674 3296 "dev": true, 2675 3297 "license": "MIT", 2676 3298 "dependencies": { ··· 2728 3350 "url": "https://github.com/sponsors/sindresorhus" 2729 3351 } 2730 3352 }, 3353 + "node_modules/lru-cache": { 3354 + "version": "5.1.1", 3355 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 3356 + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 3357 + "dev": true, 3358 + "license": "ISC", 3359 + "dependencies": { 3360 + "yallist": "^3.0.2" 3361 + } 3362 + }, 2731 3363 "node_modules/merge2": { 2732 3364 "version": "1.4.1", 2733 3365 "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", ··· 2786 3418 "license": "MIT" 2787 3419 }, 2788 3420 "node_modules/nano-spawn": { 2789 - "version": "1.0.3", 2790 - "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.3.tgz", 2791 - "integrity": "sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==", 3421 + "version": "2.0.0", 3422 + "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-2.0.0.tgz", 3423 + "integrity": "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==", 2792 3424 "dev": true, 2793 3425 "license": "MIT", 2794 3426 "engines": { ··· 2821 3453 "version": "1.4.0", 2822 3454 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2823 3455 "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 3456 + "dev": true, 3457 + "license": "MIT" 3458 + }, 3459 + "node_modules/node-releases": { 3460 + "version": "2.0.27", 3461 + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", 3462 + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", 2824 3463 "dev": true, 2825 3464 "license": "MIT" 2826 3465 }, ··· 2999 3638 } 3000 3639 }, 3001 3640 "node_modules/postcss": { 3002 - "version": "8.5.5", 3003 - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.5.tgz", 3004 - "integrity": "sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==", 3641 + "version": "8.5.6", 3642 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", 3643 + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", 3005 3644 "dev": true, 3006 3645 "funding": [ 3007 3646 { ··· 3094 3733 "license": "MIT" 3095 3734 }, 3096 3735 "node_modules/react": { 3097 - "version": "19.1.0", 3098 - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", 3099 - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", 3736 + "version": "19.2.4", 3737 + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", 3738 + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", 3100 3739 "license": "MIT", 3101 3740 "engines": { 3102 3741 "node": ">=0.10.0" 3103 3742 } 3104 3743 }, 3105 3744 "node_modules/react-dom": { 3106 - "version": "19.1.0", 3107 - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", 3108 - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", 3745 + "version": "19.2.4", 3746 + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", 3747 + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", 3109 3748 "license": "MIT", 3110 3749 "dependencies": { 3111 - "scheduler": "^0.26.0" 3750 + "scheduler": "^0.27.0" 3112 3751 }, 3113 3752 "peerDependencies": { 3114 - "react": "^19.1.0" 3753 + "react": "^19.2.4" 3115 3754 } 3116 3755 }, 3117 3756 "node_modules/readdirp": { ··· 3128 3767 } 3129 3768 }, 3130 3769 "node_modules/rescript": { 3131 - "version": "11.1.4", 3132 - "resolved": "https://registry.npmjs.org/rescript/-/rescript-11.1.4.tgz", 3133 - "integrity": "sha512-0bGU0bocihjSC6MsE3TMjHjY0EUpchyrREquLS8VsZ3ohSMD+VHUEwimEfB3kpBI1vYkw3UFZ3WD8R28guz/Vw==", 3134 - "hasInstallScript": true, 3770 + "version": "12.1.0", 3771 + "resolved": "https://registry.npmjs.org/rescript/-/rescript-12.1.0.tgz", 3772 + "integrity": "sha512-n/B43wzIEKV4OmlrWbrlQOL4zZaz0RM/Cc8PG2YvhQvQDW7nscHJliDq1AGeVwHoMX68MeaKKzLDOMOMU9Z6FA==", 3135 3773 "license": "SEE LICENSE IN LICENSE", 3774 + "workspaces": [ 3775 + "packages/playground", 3776 + "packages/@rescript/*", 3777 + "tests/dependencies/**", 3778 + "tests/analysis_tests/**", 3779 + "tests/docstring_tests", 3780 + "tests/gentype_tests/**", 3781 + "tests/tools_tests", 3782 + "scripts/res" 3783 + ], 3784 + "dependencies": { 3785 + "@rescript/runtime": "12.1.0" 3786 + }, 3136 3787 "bin": { 3137 - "bsc": "bsc", 3138 - "bstracing": "lib/bstracing", 3139 - "rescript": "rescript" 3788 + "bsc": "cli/bsc.js", 3789 + "bstracing": "cli/bstracing.js", 3790 + "rescript": "cli/rescript.js", 3791 + "rescript-legacy": "cli/rescript-legacy.js", 3792 + "rescript-tools": "cli/rescript-tools.js" 3140 3793 }, 3141 3794 "engines": { 3142 - "node": ">=10" 3795 + "node": ">=20.11.0" 3796 + }, 3797 + "optionalDependencies": { 3798 + "@rescript/darwin-arm64": "12.1.0", 3799 + "@rescript/darwin-x64": "12.1.0", 3800 + "@rescript/linux-arm64": "12.1.0", 3801 + "@rescript/linux-x64": "12.1.0", 3802 + "@rescript/win32-x64": "12.1.0" 3143 3803 } 3144 3804 }, 3145 3805 "node_modules/resolve-from": { ··· 3188 3848 "license": "MIT" 3189 3849 }, 3190 3850 "node_modules/rollup": { 3191 - "version": "4.43.0", 3192 - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.43.0.tgz", 3193 - "integrity": "sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==", 3851 + "version": "4.57.1", 3852 + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", 3853 + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", 3194 3854 "dev": true, 3195 3855 "license": "MIT", 3196 3856 "dependencies": { 3197 - "@types/estree": "1.0.7" 3857 + "@types/estree": "1.0.8" 3198 3858 }, 3199 3859 "bin": { 3200 3860 "rollup": "dist/bin/rollup" ··· 3204 3864 "npm": ">=8.0.0" 3205 3865 }, 3206 3866 "optionalDependencies": { 3207 - "@rollup/rollup-android-arm-eabi": "4.43.0", 3208 - "@rollup/rollup-android-arm64": "4.43.0", 3209 - "@rollup/rollup-darwin-arm64": "4.43.0", 3210 - "@rollup/rollup-darwin-x64": "4.43.0", 3211 - "@rollup/rollup-freebsd-arm64": "4.43.0", 3212 - "@rollup/rollup-freebsd-x64": "4.43.0", 3213 - "@rollup/rollup-linux-arm-gnueabihf": "4.43.0", 3214 - "@rollup/rollup-linux-arm-musleabihf": "4.43.0", 3215 - "@rollup/rollup-linux-arm64-gnu": "4.43.0", 3216 - "@rollup/rollup-linux-arm64-musl": "4.43.0", 3217 - "@rollup/rollup-linux-loongarch64-gnu": "4.43.0", 3218 - "@rollup/rollup-linux-powerpc64le-gnu": "4.43.0", 3219 - "@rollup/rollup-linux-riscv64-gnu": "4.43.0", 3220 - "@rollup/rollup-linux-riscv64-musl": "4.43.0", 3221 - "@rollup/rollup-linux-s390x-gnu": "4.43.0", 3222 - "@rollup/rollup-linux-x64-gnu": "4.43.0", 3223 - "@rollup/rollup-linux-x64-musl": "4.43.0", 3224 - "@rollup/rollup-win32-arm64-msvc": "4.43.0", 3225 - "@rollup/rollup-win32-ia32-msvc": "4.43.0", 3226 - "@rollup/rollup-win32-x64-msvc": "4.43.0", 3867 + "@rollup/rollup-android-arm-eabi": "4.57.1", 3868 + "@rollup/rollup-android-arm64": "4.57.1", 3869 + "@rollup/rollup-darwin-arm64": "4.57.1", 3870 + "@rollup/rollup-darwin-x64": "4.57.1", 3871 + "@rollup/rollup-freebsd-arm64": "4.57.1", 3872 + "@rollup/rollup-freebsd-x64": "4.57.1", 3873 + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", 3874 + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", 3875 + "@rollup/rollup-linux-arm64-gnu": "4.57.1", 3876 + "@rollup/rollup-linux-arm64-musl": "4.57.1", 3877 + "@rollup/rollup-linux-loong64-gnu": "4.57.1", 3878 + "@rollup/rollup-linux-loong64-musl": "4.57.1", 3879 + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", 3880 + "@rollup/rollup-linux-ppc64-musl": "4.57.1", 3881 + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", 3882 + "@rollup/rollup-linux-riscv64-musl": "4.57.1", 3883 + "@rollup/rollup-linux-s390x-gnu": "4.57.1", 3884 + "@rollup/rollup-linux-x64-gnu": "4.57.1", 3885 + "@rollup/rollup-linux-x64-musl": "4.57.1", 3886 + "@rollup/rollup-openbsd-x64": "4.57.1", 3887 + "@rollup/rollup-openharmony-arm64": "4.57.1", 3888 + "@rollup/rollup-win32-arm64-msvc": "4.57.1", 3889 + "@rollup/rollup-win32-ia32-msvc": "4.57.1", 3890 + "@rollup/rollup-win32-x64-gnu": "4.57.1", 3891 + "@rollup/rollup-win32-x64-msvc": "4.57.1", 3227 3892 "fsevents": "~2.3.2" 3228 3893 } 3229 - }, 3230 - "node_modules/rollup/node_modules/@types/estree": { 3231 - "version": "1.0.7", 3232 - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", 3233 - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", 3234 - "dev": true, 3235 - "license": "MIT" 3236 3894 }, 3237 3895 "node_modules/run-parallel": { 3238 3896 "version": "1.2.0", ··· 3259 3917 } 3260 3918 }, 3261 3919 "node_modules/scheduler": { 3262 - "version": "0.26.0", 3263 - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", 3264 - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", 3920 + "version": "0.27.0", 3921 + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", 3922 + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", 3265 3923 "license": "MIT" 3266 3924 }, 3267 3925 "node_modules/semver": { 3268 - "version": "7.7.2", 3269 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", 3270 - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", 3926 + "version": "6.3.1", 3927 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 3928 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 3271 3929 "dev": true, 3272 3930 "license": "ISC", 3273 3931 "bin": { 3274 3932 "semver": "bin/semver.js" 3275 - }, 3276 - "engines": { 3277 - "node": ">=10" 3278 3933 } 3279 3934 }, 3280 3935 "node_modules/shebang-command": { ··· 3377 4032 } 3378 4033 }, 3379 4034 "node_modules/string-width": { 3380 - "version": "8.1.0", 3381 - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", 3382 - "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", 4035 + "version": "8.1.1", 4036 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.1.tgz", 4037 + "integrity": "sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==", 3383 4038 "dev": true, 3384 4039 "license": "MIT", 3385 4040 "dependencies": { ··· 3436 4091 } 3437 4092 }, 3438 4093 "node_modules/tinyglobby": { 3439 - "version": "0.2.14", 3440 - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", 3441 - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", 4094 + "version": "0.2.15", 4095 + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 4096 + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 3442 4097 "dev": true, 3443 4098 "license": "MIT", 3444 4099 "dependencies": { 3445 - "fdir": "^6.4.4", 3446 - "picomatch": "^4.0.2" 4100 + "fdir": "^6.5.0", 4101 + "picomatch": "^4.0.3" 3447 4102 }, 3448 4103 "engines": { 3449 4104 "node": ">=12.0.0" ··· 3453 4108 } 3454 4109 }, 3455 4110 "node_modules/tinyglobby/node_modules/fdir": { 3456 - "version": "6.4.6", 3457 - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", 3458 - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", 4111 + "version": "6.5.0", 4112 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 4113 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 3459 4114 "dev": true, 3460 4115 "license": "MIT", 4116 + "engines": { 4117 + "node": ">=12.0.0" 4118 + }, 3461 4119 "peerDependencies": { 3462 4120 "picomatch": "^3 || ^4" 3463 4121 }, ··· 3468 4126 } 3469 4127 }, 3470 4128 "node_modules/tinyglobby/node_modules/picomatch": { 3471 - "version": "4.0.2", 3472 - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", 3473 - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", 4129 + "version": "4.0.3", 4130 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 4131 + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 3474 4132 "dev": true, 3475 4133 "license": "MIT", 3476 4134 "engines": { ··· 3504 4162 } 3505 4163 }, 3506 4164 "node_modules/ts-api-utils": { 3507 - "version": "2.1.0", 3508 - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", 3509 - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", 4165 + "version": "2.4.0", 4166 + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", 4167 + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", 3510 4168 "dev": true, 3511 4169 "license": "MIT", 3512 4170 "engines": { ··· 3530 4188 } 3531 4189 }, 3532 4190 "node_modules/typescript": { 3533 - "version": "5.8.3", 3534 - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", 3535 - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", 4191 + "version": "5.9.3", 4192 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 4193 + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 3536 4194 "dev": true, 3537 4195 "license": "Apache-2.0", 3538 4196 "bin": { ··· 3544 4202 } 3545 4203 }, 3546 4204 "node_modules/typescript-eslint": { 3547 - "version": "8.34.0", 3548 - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.0.tgz", 3549 - "integrity": "sha512-MRpfN7uYjTrTGigFCt8sRyNqJFhjN0WwZecldaqhWm+wy0gaRt8Edb/3cuUy0zdq2opJWT6iXINKAtewnDOltQ==", 4205 + "version": "8.54.0", 4206 + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.54.0.tgz", 4207 + "integrity": "sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==", 3550 4208 "dev": true, 3551 4209 "license": "MIT", 3552 4210 "dependencies": { 3553 - "@typescript-eslint/eslint-plugin": "8.34.0", 3554 - "@typescript-eslint/parser": "8.34.0", 3555 - "@typescript-eslint/utils": "8.34.0" 4211 + "@typescript-eslint/eslint-plugin": "8.54.0", 4212 + "@typescript-eslint/parser": "8.54.0", 4213 + "@typescript-eslint/typescript-estree": "8.54.0", 4214 + "@typescript-eslint/utils": "8.54.0" 3556 4215 }, 3557 4216 "engines": { 3558 4217 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 3563 4222 }, 3564 4223 "peerDependencies": { 3565 4224 "eslint": "^8.57.0 || ^9.0.0", 3566 - "typescript": ">=4.8.4 <5.9.0" 4225 + "typescript": ">=4.8.4 <6.0.0" 3567 4226 } 3568 4227 }, 3569 4228 "node_modules/unicorn-magic": { ··· 3579 4238 "url": "https://github.com/sponsors/sindresorhus" 3580 4239 } 3581 4240 }, 4241 + "node_modules/update-browserslist-db": { 4242 + "version": "1.2.3", 4243 + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", 4244 + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", 4245 + "dev": true, 4246 + "funding": [ 4247 + { 4248 + "type": "opencollective", 4249 + "url": "https://opencollective.com/browserslist" 4250 + }, 4251 + { 4252 + "type": "tidelift", 4253 + "url": "https://tidelift.com/funding/github/npm/browserslist" 4254 + }, 4255 + { 4256 + "type": "github", 4257 + "url": "https://github.com/sponsors/ai" 4258 + } 4259 + ], 4260 + "license": "MIT", 4261 + "dependencies": { 4262 + "escalade": "^3.2.0", 4263 + "picocolors": "^1.1.1" 4264 + }, 4265 + "bin": { 4266 + "update-browserslist-db": "cli.js" 4267 + }, 4268 + "peerDependencies": { 4269 + "browserslist": ">= 4.21.0" 4270 + } 4271 + }, 3582 4272 "node_modules/uri-js": { 3583 4273 "version": "4.4.1", 3584 4274 "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", ··· 3590 4280 } 3591 4281 }, 3592 4282 "node_modules/vite": { 3593 - "version": "6.3.6", 3594 - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz", 3595 - "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", 4283 + "version": "7.3.1", 4284 + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", 4285 + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", 3596 4286 "dev": true, 3597 4287 "license": "MIT", 3598 4288 "dependencies": { 3599 - "esbuild": "^0.25.0", 3600 - "fdir": "^6.4.4", 3601 - "picomatch": "^4.0.2", 3602 - "postcss": "^8.5.3", 3603 - "rollup": "^4.34.9", 3604 - "tinyglobby": "^0.2.13" 4289 + "esbuild": "^0.27.0", 4290 + "fdir": "^6.5.0", 4291 + "picomatch": "^4.0.3", 4292 + "postcss": "^8.5.6", 4293 + "rollup": "^4.43.0", 4294 + "tinyglobby": "^0.2.15" 3605 4295 }, 3606 4296 "bin": { 3607 4297 "vite": "bin/vite.js" 3608 4298 }, 3609 4299 "engines": { 3610 - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 4300 + "node": "^20.19.0 || >=22.12.0" 3611 4301 }, 3612 4302 "funding": { 3613 4303 "url": "https://github.com/vitejs/vite?sponsor=1" ··· 3616 4306 "fsevents": "~2.3.3" 3617 4307 }, 3618 4308 "peerDependencies": { 3619 - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", 4309 + "@types/node": "^20.19.0 || >=22.12.0", 3620 4310 "jiti": ">=1.21.0", 3621 - "less": "*", 4311 + "less": "^4.0.0", 3622 4312 "lightningcss": "^1.21.0", 3623 - "sass": "*", 3624 - "sass-embedded": "*", 3625 - "stylus": "*", 3626 - "sugarss": "*", 4313 + "sass": "^1.70.0", 4314 + "sass-embedded": "^1.70.0", 4315 + "stylus": ">=0.54.8", 4316 + "sugarss": "^5.0.0", 3627 4317 "terser": "^5.16.0", 3628 4318 "tsx": "^4.8.1", 3629 4319 "yaml": "^2.4.2" ··· 3665 4355 } 3666 4356 }, 3667 4357 "node_modules/vite/node_modules/fdir": { 3668 - "version": "6.4.6", 3669 - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", 3670 - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", 4358 + "version": "6.5.0", 4359 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 4360 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 3671 4361 "dev": true, 3672 4362 "license": "MIT", 4363 + "engines": { 4364 + "node": ">=12.0.0" 4365 + }, 3673 4366 "peerDependencies": { 3674 4367 "picomatch": "^3 || ^4" 3675 4368 }, ··· 3680 4373 } 3681 4374 }, 3682 4375 "node_modules/vite/node_modules/picomatch": { 3683 - "version": "4.0.2", 3684 - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", 3685 - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", 4376 + "version": "4.0.3", 4377 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 4378 + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 3686 4379 "dev": true, 3687 4380 "license": "MIT", 3688 4381 "engines": { ··· 3767 4460 "url": "https://github.com/sponsors/sindresorhus" 3768 4461 } 3769 4462 }, 4463 + "node_modules/yallist": { 4464 + "version": "3.1.1", 4465 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 4466 + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 4467 + "dev": true, 4468 + "license": "ISC" 4469 + }, 3770 4470 "node_modules/yaml": { 3771 - "version": "2.8.1", 3772 - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", 3773 - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", 4471 + "version": "2.8.2", 4472 + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", 4473 + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", 3774 4474 "dev": true, 3775 4475 "license": "ISC", 3776 4476 "bin": { ··· 3778 4478 }, 3779 4479 "engines": { 3780 4480 "node": ">= 14.6" 4481 + }, 4482 + "funding": { 4483 + "url": "https://github.com/sponsors/eemeli" 3781 4484 } 3782 4485 }, 3783 4486 "node_modules/yocto-queue": { ··· 3791 4494 }, 3792 4495 "funding": { 3793 4496 "url": "https://github.com/sponsors/sindresorhus" 4497 + } 4498 + }, 4499 + "node_modules/zod": { 4500 + "version": "4.3.6", 4501 + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", 4502 + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", 4503 + "dev": true, 4504 + "license": "MIT", 4505 + "funding": { 4506 + "url": "https://github.com/sponsors/colinhacks" 4507 + } 4508 + }, 4509 + "node_modules/zod-validation-error": { 4510 + "version": "4.0.2", 4511 + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", 4512 + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", 4513 + "dev": true, 4514 + "license": "MIT", 4515 + "engines": { 4516 + "node": ">=18.0.0" 4517 + }, 4518 + "peerDependencies": { 4519 + "zod": "^3.25.0 || ^4.0.0" 3794 4520 } 3795 4521 }, 3796 4522 "node_modules/zora": {
+8 -8
package.json
··· 10 10 "preview": "vite preview", 11 11 "res:build": "rescript", 12 12 "res:clean": "rescript clean", 13 - "res:dev": "rescript -w", 14 - "res:format": "rescript format -all", 13 + "res:dev": "rescript watch", 14 + "res:format": "rescript format", 15 15 "test": "npm run res:build && pta 'tests/*.mjs'", 16 16 "test-watch": "onchange --initial '{tests,src}/*.mjs' -- pta 'tests/*.mjs'", 17 17 "prepare": "husky" 18 18 }, 19 19 "dependencies": { 20 20 "@jmagaram/rescript-seq": "^4.4.1", 21 - "@rescript/react": "^0.13.1", 21 + "@rescript/react": "^0.14.0", 22 22 "react": "^19.1.0", 23 23 "react-dom": "^19.1.0", 24 - "rescript": "^11.1.4" 24 + "rescript": "^12.0.0" 25 25 }, 26 26 "devDependencies": { 27 27 "@dusty-phillips/rescript-zora": "^5.0.1", ··· 30 30 "@rescript/std": "^11.1.4", 31 31 "@types/react": "^19.1.2", 32 32 "@types/react-dom": "^19.1.2", 33 - "@vitejs/plugin-react-swc": "^3.9.0", 33 + "@vitejs/plugin-react-swc": "^4.2.2", 34 34 "eslint": "^9.25.0", 35 - "eslint-plugin-react-hooks": "^5.2.0", 35 + "eslint-plugin-react-hooks": "^7.0.1", 36 36 "eslint-plugin-react-refresh": "^0.4.19", 37 37 "globals": "^16.0.0", 38 38 "husky": "^9.1.7", 39 39 "lint-staged": "^16.2.3", 40 40 "onchange": "^7.1.0", 41 41 "pta": "^1.3.0", 42 - "typescript": "~5.8.3", 42 + "typescript": "^5.9.3", 43 43 "typescript-eslint": "^8.30.1", 44 - "vite": "^6.3.5" 44 + "vite": "^7.2.6" 45 45 }, 46 46 "lint-staged": { 47 47 "*.res": "rescript format"
+3 -3
rescript.json
··· 9 9 "in-source": true 10 10 }, 11 11 "suffix": ".mjs", 12 - "bs-dependencies": [ 12 + "dependencies": [ 13 13 "@rescript/core", 14 14 "@rescript/react", 15 15 "@jmagaram/rescript-seq" 16 16 ], 17 - "bs-dev-dependencies": ["@dusty-phillips/rescript-zora"], 18 - "bsc-flags": ["-open RescriptCore"], 17 + "dev-dependencies": ["@dusty-phillips/rescript-zora"], 18 + "compiler-flags": ["-open RescriptCore"], 19 19 "jsx": { "version": 4 } 20 20 }
+4 -2
src/AxiomSet.res
··· 54 54 <div 55 55 className={"axiom-set axiom-set-"->String.concat( 56 56 String.make(props.imports.ruleStyle->Option.getOr(Hybrid)), 57 - )}> 57 + )} 58 + > 58 59 {Dict.toArray(props.content) 59 60 ->Array.mapWithIndex(((n, r), i) => 60 61 <RuleView 61 62 rule={r} 62 63 scope={[]} 63 64 key={String.make(i)} 64 - style={props.imports.ruleStyle->Option.getOr(Hybrid)}> 65 + style={props.imports.ruleStyle->Option.getOr(Hybrid)} 66 + > 65 67 {React.string(n)} 66 68 </RuleView> 67 69 )
+104 -61
src/HOTerm.res
··· 5 5 }) 6 6 7 7 type rec t = 8 - | Symbol({name: string}) 8 + | Symbol({name: string, constructor: bool}) 9 9 | Var({idx: int}) 10 10 | Schematic({schematic: int}) 11 11 | Lam({name: string, body: t}) ··· 102 102 | Ok(newIdx) => 103 103 let new = newIdx + from 104 104 if new < 0 { 105 - raise(Err("mapbind: negative index")) 105 + throw(Err("mapbind: negative index")) 106 106 } 107 107 Var({ 108 108 idx: new, ··· 132 132 let upshift = (term: t, amount: int, ~from: int=0) => mapbind(term, idx => idx + amount, ~from) 133 133 let downshift = (term: t, amount: int, ~from: int=1) => { 134 134 if amount > from { 135 - raise(Err("downshift amount must be less than from")) 135 + throw(Err("downshift amount must be less than from")) 136 136 } 137 137 mapbind(term, idx => idx - amount, ~from) 138 138 } ··· 168 168 assert(subst->Belt.Map.Int.has(schematic) == false) 169 169 subst->Belt.Map.Int.set(schematic, term) 170 170 } 171 + let rec substitute = (term: t, subst: subst) => 172 + switch term { 173 + | Schematic({schematic, _}) => 174 + switch Belt.Map.Int.get(subst, schematic) { 175 + | None => term 176 + | Some(found) => found 177 + } 178 + | Lam({name, body}) => 179 + Lam({ 180 + name, 181 + // upshift is not needed for pattern unification, but it is safer to have upshift here 182 + body: substitute(body, subst->Belt.Map.Int.map(t => upshift(t, 1))), 183 + }) 184 + | App({func, arg}) => 185 + App({ 186 + func: substitute(func, subst), 187 + arg: substitute(arg, subst), 188 + }) 189 + | Var(_) | Unallowed | Symbol(_) => term 190 + } 171 191 172 - // TODO: check how will this interact with meta variables (schematics) and check if it is needed to have a subst parameter - it should not be needed for subst produced by pattern unification 173 192 let rec substDeBruijn = (term: t, substs: array<t>, ~from: int=0) => 174 193 switch term { 175 194 | Symbol(_) => term ··· 217 236 | Unallowed => Unallowed 218 237 } 219 238 } 220 - let substitute = (term: t, subst: subst) => { 221 - let rec inner = (term, subst) => 222 - switch term { 223 - | Schematic({schematic, _}) => 224 - switch Belt.Map.Int.get(subst, schematic) { 225 - | None => term 226 - | Some(found) => found 227 - } 228 - | Lam({name, body}) => 229 - Lam({ 230 - name, 231 - // upshift is not needed for pattern unification, but it is safer to have upshift here 232 - body: inner(body, subst->Belt.Map.Int.map(t => upshift(t, 1))), 233 - }) 234 - | App({func, arg}) => 235 - App({ 236 - func: inner(func, subst), 237 - arg: inner(arg, subst), 238 - }) 239 - | Var(_) | Unallowed | Symbol(_) => term 240 - } 241 - 242 - inner(term, subst)->reduce 243 - } 244 239 let reduceSubst = (subst: subst): subst => { 245 240 subst->Belt.Map.Int.map(x => reduce(substitute(x, subst))) 246 241 } ··· 338 333 let rec proj = (subst: subst, term: t, ~gen: option<gen>): subst => { 339 334 switch strip(devar(subst, term)) { 340 335 | (Lam({name: _, body}), args) if args->Array.length == 0 => proj(subst, body, ~gen) 341 - | (Unallowed, _args) => raise(UnifyFail("unallowed")) 336 + | (Unallowed, _args) => throw(UnifyFail("unallowed")) 342 337 | (Symbol(_) | Var(_), args) => Array.reduce(args, subst, (acc, a) => proj(acc, a, ~gen)) 343 338 | (Schematic({schematic}), args) => { 344 339 assert(!substHas(subst, schematic)) 345 340 if gen->Option.isNone { 346 - raise(UnifyFail("no gen provided")) 341 + throw(UnifyFail("no gen provided")) 347 342 } 348 343 let h = Schematic({schematic: fresh(Option.getExn(gen))}) 349 344 subst->substAdd( ··· 363 358 ), 364 359 ) 365 360 } 366 - | _ => raise(UnifyFail("not a symbol, var or schematic")) 361 + | _ => throw(UnifyFail("not a symbol, var or schematic")) 367 362 } 368 363 } 369 364 let flexflex = ( ··· 374 369 subst: subst, 375 370 ~gen: option<gen>, 376 371 ): subst => { 372 + if gen->Option.isNone { 373 + throw(UnifyFail("no gen provided")) 374 + } 377 375 if sa == sb { 378 376 if xs->Array.length != ys->Array.length { 379 - raise(UnifyFail("flexible schematics have different number of arguments")) 380 - } 381 - if gen->Option.isNone { 382 - raise(UnifyFail("no gen provided")) 377 + throw(UnifyFail("flexible schematics have different number of arguments")) 383 378 } 384 379 let len = xs->Array.length 385 380 let h = Schematic({schematic: fresh(Option.getExn(gen))}) ··· 401 396 } 402 397 let flexrigid = (sa: schematic, xs: array<t>, b: t, subst: subst, ~gen: option<gen>): subst => { 403 398 if occ(sa, subst, b) { 404 - raise(UnifyFail("flexible schematic occurs in rigid term")) 399 + throw(UnifyFail("flexible schematic occurs in rigid term")) 405 400 } 406 401 // pattern unification 407 402 // let u = b->mapbind0(bind => idx2(xs, bind)) ··· 417 412 if na == nb { 418 413 subst 419 414 } else { 420 - raise(UnifyFail("symbols do not match")) 415 + throw(UnifyFail("symbols do not match")) 421 416 } 422 417 | (Var({idx: ia}), Var({idx: ib})) => 423 418 if ia == ib { 424 419 subst 425 420 } else { 426 - raise(UnifyFail("variables do not match")) 421 + throw(UnifyFail("variables do not match")) 427 422 } 428 423 | (Schematic({schematic: sa}), Schematic({schematic: sb})) if sa == sb => subst 429 424 | (Lam({name: _, body: ba}), Lam({name: _, body: bb})) => unifyTerm(ba, bb, subst, ~gen) ··· 440 435 | ((a, xs), (b, ys)) => 441 436 switch (a, b) { 442 437 | (Symbol(_) | Var(_), Symbol(_) | Var(_)) => rigidrigid(a, xs, b, ys, subst, ~gen) 443 - | _ => raise(UnifyFail("no rules match")) 438 + | _ => throw(UnifyFail("no rules match")) 444 439 } 445 440 } 446 441 } 447 442 and unifyArray = (xs: array<t>, ys: array<t>, subst: subst, ~gen: option<gen>): subst => { 448 443 if xs->Array.length != ys->Array.length { 449 - raise(UnifyFail("arrays have different lengths")) 444 + throw(UnifyFail("arrays have different lengths")) 450 445 } 451 446 Belt.Array.zip(xs, ys)->Belt.Array.reduce(subst, (acc, (x, y)) => unifyTerm(x, y, acc, ~gen)) 452 447 } ··· 459 454 ~gen: option<gen>, 460 455 ): subst => { 461 456 if !equivalent(a, b) { 462 - raise(UnifyFail("rigid terms do not match")) 457 + throw(UnifyFail("rigid terms do not match")) 463 458 } 464 459 if xs->Array.length != ys->Array.length { 465 - raise(UnifyFail("rigid terms have different number of arguments")) 460 + throw(UnifyFail("rigid terms have different number of arguments")) 466 461 } 467 462 unifyArray(xs, ys, subst, ~gen) 468 463 } ··· 474 469 | UnifyFail(_) => [] 475 470 }, 476 471 ) 472 + let rec rewrite = (term: t, from: t, to: t, ~subst: subst, ~gen: option<gen>): (subst, t) => { 473 + try { 474 + let subst1 = unifyTerm(term, from, subst, ~gen) 475 + (subst1, to) 476 + } catch { 477 + | UnifyFail(_) => 478 + switch term { 479 + | Schematic({schematic}) if subst->substHas(schematic) => 480 + rewrite(subst->substGet(schematic)->Option.getExn, from, to, ~subst, ~gen) 481 + | Var(_) | Unallowed | Symbol(_) | Schematic(_) => (subst, term) 482 + | Lam({name, body}) => { 483 + let (subst1, body1) = rewrite(body, from, to, ~subst, ~gen) 484 + (subst1, Lam({name, body: body1})) 485 + } 486 + | App({func, arg}) => { 487 + let (subst1, func') = rewrite(func, from, to, ~subst, ~gen) 488 + let (subst2, arg') = rewrite(arg, from, to, ~subst=subst1, ~gen) 489 + (subst2, App({func: func', arg: arg'})) 490 + } 491 + } 492 + } 493 + } 477 494 let place = (x: int, ~scope: array<string>) => 478 495 app( 479 496 Schematic({ ··· 499 516 } 500 517 let rec prettyPrint = (it: t, ~scope: array<string>) => 501 518 switch it { 502 - | Symbol({name}) => name 519 + | Symbol({name, constructor}) => 520 + if constructor { 521 + String.concat("@", name) 522 + } else { 523 + name 524 + } 503 525 | Var({idx}) => prettyPrintVar(idx, scope) 504 526 | Schematic({schematic}) => "?"->String.concat(String.make(schematic)) 505 527 | Lam(_) => ··· 526 548 let symbolRegexpString = "^([^\\s()]+)" 527 549 let nameRES = "^([^\\s.\\[\\]()]+)\\." 528 550 exception ParseError(string) 529 - type token = LParen | RParen | VarT(int) | SchematicT(int) | AtomT(string) | NameT(string) | EOF 551 + type token = 552 + | LParen 553 + | RParen 554 + | VarT(int) 555 + | SchematicT(int) 556 + | AtomT(string) 557 + | ConsT(string) 558 + | NameT(string) 559 + | EOF 530 560 let varRegexpString = "^\\\\([0-9]+)" 531 561 let schematicRegexpString = "^\\?([0-9]+)" 532 562 let tokenize = (str0: string): (token, string) => { ··· 541 571 | "\\" => { 542 572 let re = RegExp.fromStringWithFlags(varRegexpString, ~flags="y") 543 573 switch re->RegExp.exec(str) { 544 - | None => raise(ParseError("invalid variable")) 574 + | None => throw(ParseError("invalid variable")) 545 575 | Some(res) => 546 576 switch RegExp.Result.matches(res) { 547 577 | [n] => ( 548 578 VarT(n->Int.fromString->Option.getExn), 549 579 String.sliceToEnd(str, ~start=RegExp.lastIndex(re)), 550 580 ) 551 - | _ => raise(ParseError("invalid variable")) 581 + | _ => throw(ParseError("invalid variable")) 552 582 } 553 583 } 554 584 } 555 585 | "?" => { 556 586 let re = RegExp.fromStringWithFlags(schematicRegexpString, ~flags="y") 557 587 switch re->RegExp.exec(str) { 558 - | None => raise(ParseError("invalid schematic")) 588 + | None => throw(ParseError("invalid schematic")) 559 589 | Some(res) => 560 590 switch RegExp.Result.matches(res) { 561 591 | [n] => ( 562 592 SchematicT(n->Int.fromString->Option.getExn), 563 593 String.sliceToEnd(str, ~start=RegExp.lastIndex(re)), 564 594 ) 565 - | _ => raise(ParseError("invalid schematic")) 595 + | _ => throw(ParseError("invalid schematic")) 566 596 } 567 597 } 568 598 } 599 + | "@" => 600 + let re = RegExp.fromStringWithFlags(symbolRegexpString, ~flags="y") 601 + switch re->RegExp.exec(rest()) { 602 + | None => throw(ParseError("invalid symbol")) 603 + | Some(res) => 604 + switch RegExp.Result.matches(res) { 605 + | [n] => (ConsT(n), String.sliceToEnd(rest(), ~start=RegExp.lastIndex(re))) 606 + | _ => throw(ParseError("invalid symbol")) 607 + } 608 + } 569 609 | _ => { 570 610 let reName = RegExp.fromStringWithFlags(nameRES, ~flags="y") 571 611 switch reName->RegExp.exec(str) { 572 612 | Some(res) => 573 613 switch RegExp.Result.matches(res) { 574 614 | [n] => (NameT(n), String.sliceToEnd(str, ~start=RegExp.lastIndex(reName))) 575 - | _ => raise(ParseError("invalid symbol")) 615 + | _ => throw(ParseError("invalid symbol")) 576 616 } 577 617 | None => 578 618 let re = RegExp.fromStringWithFlags(symbolRegexpString, ~flags="y") 579 619 switch re->RegExp.exec(str) { 580 - | None => raise(ParseError("invalid symbol")) 620 + | None => throw(ParseError("invalid symbol")) 581 621 | Some(res) => 582 622 switch RegExp.Result.matches(res) { 583 623 | [n] => (AtomT(n), String.sliceToEnd(str, ~start=RegExp.lastIndex(re))) 584 - | _ => raise(ParseError("invalid symbol")) 624 + | _ => throw(ParseError("invalid symbol")) 585 625 } 586 626 } 587 627 } ··· 591 631 } 592 632 type rec simple = 593 633 | ListS({xs: array<simple>}) 594 - | AtomS({name: string}) 634 + | AtomS({name: string, constructor: bool}) 595 635 | VarS({idx: int}) 596 636 | SchematicS({schematic: int}) 597 637 | LambdaS({name: string, body: simple}) ··· 611 651 let (tail, rest3) = parseSimple("("->String.concat(rest2)) 612 652 switch tail { 613 653 | ListS({xs}) => (ListS({xs: Array.concat([head], xs)}), rest3) 614 - | _ => raise(Unreachable("bug")) 654 + | _ => throw(Unreachable("bug")) 615 655 } 616 656 } 617 657 } 618 658 } 619 - | RParen => raise(ParseError("unexpected right parenthesis")) 659 + | RParen => throw(ParseError("unexpected right parenthesis")) 620 660 | VarT(idx) => (VarS({idx: idx}), rest) 621 661 | SchematicT(schematic) => (SchematicS({schematic: schematic}), rest) 622 - | AtomT(name) => (AtomS({name: name}), rest) 662 + | AtomT(name) => (AtomS({name, constructor: false}), rest) 663 + | ConsT(name) => (AtomS({name, constructor: true}), rest) 623 664 | NameT(name) => { 624 665 let (result, rest1) = parseSimple(rest) 625 666 (LambdaS({name, body: result}), rest1) 626 667 } 627 - | EOF => raise(ParseError("unexpected end of file")) 668 + | EOF => throw(ParseError("unexpected end of file")) 628 669 } 629 670 } 630 671 type env = Map.t<string, int> ··· 655 696 | ListS({xs}) => { 656 697 let ts = xs->Array.map(x => parseAll(x, ~env, ~gen?)) 657 698 if ts->Array.length == 0 { 658 - raise(ParseError("empty list")) 699 + throw(ParseError("empty list")) 659 700 } else { 660 701 ts 661 702 ->Array.sliceToEnd(~start=1) 662 703 ->Array.reduce(ts[0]->Option.getExn, (acc, x) => App({func: acc, arg: x})) 663 704 } 664 705 } 665 - | AtomS({name}) => 666 - if env->Map.has(name) { 706 + | AtomS({name, constructor}) => 707 + if constructor { 708 + Symbol({name, constructor: true}) 709 + } else if env->Map.has(name) { 667 710 let idx = env->Map.get(name)->Option.getExn 668 711 Var({idx: idx}) 669 712 } else { 670 - Symbol({name: name}) 713 + Symbol({name, constructor: false}) 671 714 } 672 715 | VarS({idx}) => Var({idx: idx}) 673 716 | SchematicS({schematic}) => ··· 676 719 seen(g, schematic) 677 720 Schematic({schematic: schematic}) 678 721 } 679 - | None => raise(ParseError("Schematics not allowed here")) 722 + | None => throw(ParseError("Schematics not allowed here")) 680 723 } 681 724 | LambdaS({name, body}) => 682 725 Lam({
+2 -1
src/HOTerm.resi
··· 1 1 type rec t = 2 - | Symbol({name: string}) 2 + | Symbol({name: string, constructor: bool}) 3 3 | Var({idx: int}) 4 4 | Schematic({schematic: int}) 5 5 | Lam({name: string, body: t}) ··· 22 22 let substAdd: (subst, schematic, t) => subst 23 23 let unifyTerm: (t, t, subst, ~gen: option<gen>) => subst 24 24 let reduceSubst: subst => subst 25 + let rewrite: (t, t, t, ~subst: subst, ~gen: option<gen>) => (subst, t)
+473
src/HOTermMethod.res
··· 1 + open Signatures 2 + open Method 3 + 4 + module MakeRewriteHOTerm = ( 5 + Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 6 + Config: { 7 + let keyword: string 8 + let reversed: bool 9 + }, 10 + ) => { 11 + module Term = HOTerm 12 + module Rule = Rule.Make(HOTerm, Judgment) 13 + module Context = Context(HOTerm, Judgment) 14 + 15 + let extractEqualityTermsFromJudgment = (judgment: Judgment.t): option<(HOTerm.t, HOTerm.t)> => { 16 + let term: HOTerm.t = judgment 17 + switch HOTerm.strip(term) { 18 + | (HOTerm.Symbol({name: "="}), args) if Array.length(args) == 2 => 19 + Some((args->Array.getUnsafe(0), args->Array.getUnsafe(1))) 20 + | _ => None 21 + } 22 + } 23 + 24 + let extractEqualityTerms = (rule: Rule.t): option<(HOTerm.t, HOTerm.t)> => { 25 + if Array.length(rule.premises) != 0 { 26 + None 27 + } else { 28 + extractEqualityTermsFromJudgment(rule.conclusion) 29 + } 30 + } 31 + 32 + let extractEqualityTermsFromBare = (rule: Rule.bare): option<(HOTerm.t, HOTerm.t)> => { 33 + if Array.length(rule.premises) != 0 { 34 + None 35 + } else { 36 + extractEqualityTermsFromJudgment(rule.conclusion) 37 + } 38 + } 39 + 40 + let isEqualityRule = (rule: Rule.t): bool => { 41 + extractEqualityTerms(rule)->Option.isSome 42 + } 43 + 44 + type t<'a> = { 45 + equalityName: string, 46 + instantiation: array<Judgment.substCodom>, 47 + subgoal: 'a, 48 + } 49 + 50 + let keywords = [Config.keyword] 51 + 52 + let map = (it: t<'a>, f) => { 53 + { 54 + equalityName: it.equalityName, 55 + instantiation: it.instantiation, 56 + subgoal: f(it.subgoal), 57 + } 58 + } 59 + 60 + let substitute = (it: t<'a>, subst: Judgment.subst) => { 61 + { 62 + equalityName: it.equalityName, 63 + instantiation: it.instantiation->Array.map(t => t->Judgment.substituteSubstCodom(subst)), 64 + subgoal: it.subgoal, 65 + } 66 + } 67 + 68 + let prettyPrint = ( 69 + it: t<'a>, 70 + ~scope, 71 + ~indentation=0, 72 + ~subprinter: ('a, ~scope: array<HOTerm.meta>, ~indentation: int=?) => string, 73 + ) => { 74 + let ind = String.repeat(" ", indentation) 75 + let args = it.instantiation->Array.map(t => Judgment.prettyPrintSubstCodom(t, ~scope)) 76 + let argsStr = if Array.length(args) > 0 { 77 + " " ++ Array.join(args, " ") 78 + } else { 79 + "" 80 + } 81 + `${ind}${Config.keyword} (${it.equalityName}${argsStr}) {\n` 82 + ->String.concat(subprinter(it.subgoal, ~scope, ~indentation=indentation + 2)) 83 + ->String.concat("\n") 84 + ->String.concat(ind) 85 + ->String.concat("}") 86 + } 87 + 88 + exception InternalParseError(string) 89 + 90 + let parse = (input, ~keyword as _, ~scope, ~gen, ~subparser) => { 91 + let cur = ref(String.trim(input)) 92 + 93 + if cur.contents->String.get(0) == Some("(") { 94 + switch Rule.parseRuleName(cur.contents->String.sliceToEnd(~start=1)) { 95 + | Error(e) => Error(e) 96 + | Ok((equalityName, rest)) => { 97 + cur := rest 98 + let instantiation = [] 99 + let it = ref(Error("")) 100 + while { 101 + it := Judgment.parseSubstCodom(cur.contents, ~scope, ~gen) 102 + it.contents->Result.isOk 103 + } { 104 + let (val, rest) = it.contents->Result.getExn 105 + Array.push(instantiation, val) 106 + cur := String.trim(rest) 107 + } 108 + if cur.contents->String.get(0) == Some(")") { 109 + cur := String.trim(cur.contents->String.sliceToEnd(~start=1)) 110 + 111 + if cur.contents->String.get(0) == Some("{") { 112 + cur := String.trim(String.sliceToEnd(cur.contents, ~start=1)) 113 + 114 + try { 115 + switch subparser(cur.contents, ~scope, ~gen) { 116 + | Error(e) => throw(InternalParseError(e)) 117 + | Ok((subgoal, rest2)) => { 118 + cur := String.trim(rest2) 119 + 120 + if cur.contents->String.get(0) == Some("}") { 121 + cur := String.trim(String.sliceToEnd(cur.contents, ~start=1)) 122 + Ok(({equalityName, instantiation, subgoal}, cur.contents)) 123 + } else { 124 + Error("Expected } after subgoal") 125 + } 126 + } 127 + } 128 + } catch { 129 + | InternalParseError(e) => Error(e) 130 + } 131 + } else { 132 + Error("Expected { after equality instantiation") 133 + } 134 + } else { 135 + Error(") or term expected") 136 + } 137 + } 138 + } 139 + } else { 140 + Error("Expected (") 141 + } 142 + } 143 + 144 + let rewriteJudgmentTerms = ( 145 + judgment: Judgment.t, 146 + from: HOTerm.t, 147 + to: HOTerm.t, 148 + ~gen: option<HOTerm.gen>, 149 + ): (HOTerm.subst, Judgment.t) => { 150 + let subst: ref<HOTerm.subst> = ref(HOTerm.makeSubst()) 151 + let j = Judgment.mapTerms(judgment, term => { 152 + let (subst', newTerm) = HOTerm.rewrite(term, from, to, ~subst=subst.contents, ~gen) 153 + subst := subst' 154 + newTerm 155 + }) 156 + (subst.contents, j) 157 + } 158 + 159 + let apply = (ctx: Context.t, j: Judgment.t, gen: HOTerm.gen, f: Rule.t => 'a) => { 160 + let ret: Dict.t<(t<'a>, Judgment.subst)> = Dict.make() 161 + 162 + ctx.facts->Dict.forEachWithKey((eqRule, name) => { 163 + if isEqualityRule(eqRule) { 164 + let insts = eqRule->Rule.genSchemaInsts(gen, ~scope=ctx.fixes) 165 + let instantiatedRule = eqRule->Rule.instantiate(insts) 166 + 167 + switch extractEqualityTermsFromBare(instantiatedRule) { 168 + | Some((lhs, rhs)) => { 169 + let (from, to) = if Config.reversed { 170 + (rhs, lhs) 171 + } else { 172 + (lhs, rhs) 173 + } 174 + 175 + let (subst, rewrittenGoal) = rewriteJudgmentTerms(j, from, to, ~gen=Some(gen)) 176 + 177 + // If the rewritten one is the same as the original, for example rewriting with reflexivity, skip it 178 + if ( 179 + !Judgment.equivalent( 180 + j->Judgment.substitute(subst)->Judgment.reduce, 181 + rewrittenGoal->Judgment.substitute(subst)->Judgment.reduce, 182 + ) 183 + ) { 184 + let rewrittenRule: Rule.t = { 185 + vars: [], 186 + premises: [], 187 + conclusion: rewrittenGoal, 188 + } 189 + let method = { 190 + equalityName: name, 191 + instantiation: insts, 192 + subgoal: f(rewrittenRule), 193 + } 194 + ret->Dict.set(`${Config.keyword} ${name}`, (method, subst)) 195 + } 196 + } 197 + | None => () 198 + } 199 + } 200 + }) 201 + 202 + ret 203 + } 204 + 205 + let check = (it: t<'a>, ctx: Context.t, goal: Judgment.t, f: ('a, Rule.t) => 'b) => { 206 + switch ctx.facts->Dict.get(it.equalityName) { 207 + | None => Error(`Cannot find equality '${it.equalityName}'`) 208 + | Some(eqRule) if !isEqualityRule(eqRule) => 209 + Error(`'${it.equalityName}' is not a valid equality (has premises)`) 210 + | Some(eqRule) if Array.length(eqRule.vars) != Array.length(it.instantiation) => 211 + Error(`Incorrect number of instantiation arguments for '${it.equalityName}'`) 212 + | Some(eqRule) => { 213 + let instantiatedRule = Rule.instantiate(eqRule, it.instantiation) 214 + 215 + switch extractEqualityTermsFromBare(instantiatedRule) { 216 + | None => 217 + Error(`Cannot extract equality from '${it.equalityName}' - not in expected equality form`) 218 + | Some((lhs, rhs)) => { 219 + let (from, to) = if Config.reversed { 220 + (rhs, lhs) 221 + } else { 222 + (lhs, rhs) 223 + } 224 + 225 + // TODO: what gen to use? 226 + let (_, rewrittenGoal) = rewriteJudgmentTerms(goal, from, to, ~gen=None) 227 + 228 + let rewrittenRule: Rule.t = { 229 + vars: [], 230 + premises: [], 231 + conclusion: rewrittenGoal, 232 + } 233 + 234 + Ok({ 235 + equalityName: it.equalityName, 236 + instantiation: it.instantiation, 237 + subgoal: f(it.subgoal, rewrittenRule), 238 + }) 239 + } 240 + } 241 + } 242 + } 243 + } 244 + } 245 + 246 + module Rewrite = ( 247 + Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 248 + ) => MakeRewriteHOTerm( 249 + Judgment, 250 + { 251 + let keyword = "rewrite" 252 + let reversed = false 253 + }, 254 + ) 255 + 256 + module RewriteReverse = ( 257 + Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 258 + ) => MakeRewriteHOTerm( 259 + Judgment, 260 + { 261 + let keyword = "rewrite_reverse" 262 + let reversed = true 263 + }, 264 + ) 265 + 266 + module ConstructorNeq = ( 267 + Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 268 + ) => { 269 + module Term = HOTerm 270 + module Rule = Rule.Make(HOTerm, Judgment) 271 + module Context = Context(HOTerm, Judgment) 272 + 273 + type t<'a> = unit 274 + 275 + type constructorHead = {name: string, args: array<HOTerm.t>} 276 + 277 + let constructorHead = (term: HOTerm.t): option<constructorHead> => { 278 + let (head, args) = HOTerm.strip(term) 279 + switch head { 280 + | HOTerm.Symbol({name, constructor: true}) => Some({name, args}) 281 + | _ => None 282 + } 283 + } 284 + 285 + type constructorComparison = {lhs: constructorHead, rhs: constructorHead, negated: bool} 286 + 287 + let extractConstructorEqualityFrom = (term: HOTerm.t): option<( 288 + constructorHead, 289 + constructorHead, 290 + )> => { 291 + let (head, args) = HOTerm.strip(term) 292 + switch head { 293 + | HOTerm.Symbol({name: "="}) if Array.length(args) == 2 => 294 + switch ( 295 + constructorHead(args->Array.getUnsafe(0)), 296 + constructorHead(args->Array.getUnsafe(1)), 297 + ) { 298 + | (Some(lhs), Some(rhs)) => Some((lhs, rhs)) 299 + | _ => None 300 + } 301 + | _ => None 302 + } 303 + } 304 + 305 + let extractConstructorEquality = (judgment: Judgment.t): option<constructorComparison> => { 306 + let reduced = judgment->Judgment.reduce 307 + switch extractConstructorEqualityFrom(reduced) { 308 + | Some((lhs, rhs)) => Some({lhs, rhs, negated: false}) 309 + | None => 310 + switch HOTerm.strip(reduced) { 311 + | (HOTerm.Symbol({name: "not"}), [inner]) => 312 + extractConstructorEqualityFrom(inner)->Option.map(((lhs, rhs)) => {lhs, rhs, negated: true}) 313 + | _ => None 314 + } 315 + } 316 + } 317 + 318 + let keywords = ["constructor_neq"] 319 + 320 + let map = (it: t<'a>, _f: 'a => 'b): t<'b> => it 321 + 322 + let substitute = (it: t<'a>, _subst: Judgment.subst) => it 323 + 324 + let prettyPrint = (_it: t<'a>, ~scope as _, ~indentation=0, ~subprinter as _) => 325 + String.repeat(" ", indentation)->String.concat("constructor_neq") 326 + 327 + let parse = (input, ~keyword as _, ~scope as _, ~gen as _, ~subparser as _) => Ok(( 328 + (), 329 + String.trim(input), 330 + )) 331 + 332 + let apply = (_ctx: Context.t, j: Judgment.t, _gen: HOTerm.gen, _f: Rule.t => 'a) => { 333 + let ret = Dict.make() 334 + switch extractConstructorEquality(j) { 335 + | Some({lhs: {name: lhs}, rhs: {name: rhs}}) if lhs != rhs => 336 + ret->Dict.set(`constructor_neq ${lhs} ${rhs}`, ((), HOTerm.makeSubst())) 337 + | _ => () 338 + } 339 + ret 340 + } 341 + 342 + let check = (_it: t<'a>, _ctx: Context.t, goal: Judgment.t, _f: ('a, Rule.t) => 'b) => 343 + switch extractConstructorEquality(goal) { 344 + | Some({lhs: {name: lhs}, rhs: {name: rhs}}) => 345 + if lhs == rhs { 346 + Error("constructor_neq expects different constructor symbols") 347 + } else { 348 + Ok() 349 + } 350 + | None => Error("constructor_neq applies only to equalities between constructors") 351 + } 352 + } 353 + 354 + module ConstructorInj = ( 355 + Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 356 + ) => { 357 + module Rule = Rule.Make(HOTerm, Judgment) 358 + module Context = Context(HOTerm, Judgment) 359 + 360 + // we need to define this to workaround a type error for map 361 + type inner = { 362 + source: string, 363 + argIndex: int, 364 + } 365 + type t<'a> = inner 366 + 367 + let keywords = ["constructor_inj"] 368 + 369 + let map = (it: t<'a>, _f: 'a => 'b): t<'b> => it 370 + 371 + let substitute = (it: t<'a>, _subst: Judgment.subst) => it 372 + 373 + let prettyPrint = (it: t<'a>, ~scope as _, ~indentation=0, ~subprinter as _) => 374 + String.repeat(" ", indentation)->String.concat( 375 + `constructor_inj ${it.source} ${Int.toString(it.argIndex)}`, 376 + ) 377 + 378 + let parseIntPrefix = (input: string): option<(int, string)> => { 379 + let cur = input->String.trimStart 380 + let re = RegExp.fromStringWithFlags("^(-?[0-9]+)", ~flags="y") 381 + switch re->RegExp.exec(cur) { 382 + | None => None 383 + | Some(res) => 384 + switch RegExp.Result.matches(res) { 385 + | [n] => 386 + Some(( 387 + n->Int.fromString->Option.getExn, 388 + cur->String.sliceToEnd(~start=RegExp.lastIndex(re)), 389 + )) 390 + | _ => None 391 + } 392 + } 393 + } 394 + 395 + let parse = (input, ~keyword as _, ~scope as _, ~gen as _, ~subparser as _) => { 396 + let cur = String.trim(input) 397 + switch Rule.parseRuleName(cur) { 398 + | Error(e) => Error(e) 399 + | Ok((source, rest)) => 400 + let rest = String.trim(rest) 401 + switch parseIntPrefix(rest) { 402 + | Some((argIndex, remainder)) => Ok(({source, argIndex}, remainder->String.trim)) 403 + | None => Ok(({source, argIndex: 0}, rest)) 404 + } 405 + } 406 + } 407 + 408 + let extractConstructorEquality = (term: HOTerm.t): option<( 409 + string, 410 + array<HOTerm.t>, 411 + array<HOTerm.t>, 412 + )> => { 413 + let (_head, args) = term->HOTerm.strip 414 + if Array.length(args) != 2 { 415 + None 416 + } else { 417 + let (lHead, lArgs) = args->Array.getUnsafe(0)->HOTerm.strip 418 + let (rHead, rArgs) = args->Array.getUnsafe(1)->HOTerm.strip 419 + switch (lHead, rHead) { 420 + | (HOTerm.Symbol({name: ln, constructor: true}), HOTerm.Symbol({name: rn, constructor: true})) 421 + if ln == rn && lArgs->Array.length == rArgs->Array.length => 422 + Some((ln, lArgs, rArgs)) 423 + | _ => None 424 + } 425 + } 426 + } 427 + 428 + let apply = (ctx: Context.t, j: Judgment.t, _gen: HOTerm.gen, _f: Rule.t => 'a) => { 429 + let ret = Dict.make() 430 + switch j->Judgment.reduce->HOTerm.strip { 431 + | (HOTerm.Symbol({name: "="}), [lhs, rhs]) => 432 + ctx.facts->Dict.forEachWithKey((fact, name) => { 433 + switch extractConstructorEquality(fact.conclusion) { 434 + | Some((_cName, lArgs, rArgs)) => 435 + Belt.Array.zip(lArgs, rArgs)->Array.forEachWithIndex(((la, ra), idx) => 436 + if HOTerm.equivalent(la, lhs) && HOTerm.equivalent(ra, rhs) { 437 + ret->Dict.set( 438 + `constructor_inj ${name} ${Int.toString(idx)}`, 439 + ({source: name, argIndex: idx}, HOTerm.makeSubst()), 440 + ) 441 + } 442 + ) 443 + | None => () 444 + } 445 + }) 446 + | _ => () 447 + } 448 + ret 449 + } 450 + 451 + let check = (it: t<'a>, ctx: Context.t, goal: Judgment.t, _f: ('a, Rule.t) => 'b) => { 452 + switch (ctx.facts->Dict.get(it.source), goal->Judgment.reduce->HOTerm.strip) { 453 + | (None, _) => Error(`Cannot find equality '${it.source}'`) 454 + | (Some(fact), (HOTerm.Symbol({name: "="}), [lhs, rhs])) => 455 + switch extractConstructorEquality(fact.conclusion) { 456 + | None => Error(`'${it.source}' is not a constructor equality`) 457 + | Some((_cName, lArgs, rArgs)) => 458 + if it.argIndex < 0 || it.argIndex >= Array.length(lArgs) { 459 + Error("constructor_inj index out of range") 460 + } else { 461 + let la = lArgs->Array.getUnsafe(it.argIndex) 462 + let ra = rArgs->Array.getUnsafe(it.argIndex) 463 + if HOTerm.equivalent(la, lhs) && HOTerm.equivalent(ra, rhs) { 464 + Ok({source: it.source, argIndex: it.argIndex}) 465 + } else { 466 + Error("constructor_inj target does not match goal") 467 + } 468 + } 469 + } 470 + | (_, _) => Error("constructor_inj applies to equality goals") 471 + } 472 + } 473 + }
+24 -11
src/HOTermView.res
··· 1 - type props = {term: HOTerm.t, scope: array<string>} 2 1 open Util 3 2 type idx_props = {idx: int, scope: array<string>} 4 3 let viewVar = (props: idx_props) => ··· 33 32 [React.string(" "), e] 34 33 } 35 34 ) 36 - 35 + type props1 = {term: HOTerm.t, scope: array<string>, brackets: bool} 37 36 @react.componentWithProps 38 - let rec make = ({term, scope}) => 37 + let rec make1 = ({term, scope, brackets}) => 39 38 switch term { 40 39 | Var({idx}) => viewVar({idx, scope}) 41 40 | Symbol({name: s}) => <span className="term-const"> {React.string(s)} </span> ··· 46 45 </span> 47 46 | App(_) => 48 47 switch HOTerm.strip(term) { 48 + | (Symbol({name: "="}), args) if Array.length(args) == 2 => 49 + <span className="term-equality"> 50 + {React.createElement(make1, {term: args->Array.getUnsafe(0), scope, brackets: true})} 51 + {React.string("=")} 52 + {React.createElement(make1, {term: args->Array.getUnsafe(1), scope, brackets: true})} 53 + </span> 49 54 | (func, args) => 50 - <span className="term-app"> 51 - {React.createElement(make, {term: func, scope})} 52 - <span className="term-app-telescope"> 53 - {args 54 - ->Array.mapWithIndex((t, i) => React.createElement(make, withKey({term: t, scope}, i))) 55 + let xs = Array.concat([func], args) 56 + let a = 57 + <span className="term-app"> 58 + {xs 59 + ->Array.mapWithIndex((t, i) => 60 + React.createElement(make1, withKey({term: t, scope, brackets: true}, i)) 61 + ) 55 62 ->intersperse 56 - ->parenthesise 57 63 ->React.array} 58 64 </span> 59 - </span> 65 + if brackets { 66 + [a]->parenthesise->React.array 67 + } else { 68 + a 69 + } 60 70 } 61 71 | Lam({name, body}) => { 62 72 let newScope = Array.concat([name], scope) 63 73 <span className="term-lambda"> 64 74 {React.string(name)} 65 - {React.createElement(make, {term: body, scope: newScope})} 75 + {React.createElement(make1, {term: body, scope: newScope, brackets: false})} 66 76 </span> 67 77 } 68 78 | Unallowed => <p> {React.string("Internal error: unallowed")} </p> 69 79 } 80 + type props = {term: HOTerm.t, scope: array<string>} 81 + @react.componentWithProps 82 + let make = ({term, scope}) => make1({term, scope, brackets: false})
+84 -30
src/InductiveSet.res
··· 18 18 onChange: (state, ~exports: Ports.t=?) => unit, 19 19 } 20 20 21 - type constructorGroup = { 21 + type predicateGroup = { 22 22 name: string, 23 23 arity: int, 24 24 rules: array<(string, Rule.t)>, 25 25 } 26 26 27 27 let makeKey = (name, arity) => name ++ "§" ++ Int.toString(arity) 28 + let makeVarNames = (arity: int) => 29 + Array.fromInitializer(~length=arity, i => "§" ++ Int.toString(i)) 30 + let makeVarArgs = (arity: int) => Array.fromInitializer(~length=arity, i => HOTerm.Var({idx: i})) 28 31 29 - let extractConstructorSignature = (rule: Rule.t): option<(string, int)> => { 32 + let extractPredicateSignature = (rule: Rule.t): option<(string, int)> => { 30 33 let (head, args) = HOTerm.strip(rule.conclusion) 31 34 switch head { 32 35 | Symbol({name}) => Some((name, Array.length(args))) ··· 34 37 } 35 38 } 36 39 37 - let groupByConstructor = (rules: dict<Rule.t>): array<constructorGroup> => 40 + let groupByPredicate = (rules: dict<Rule.t>): array<predicateGroup> => 38 41 rules 39 42 ->Dict.toArray 40 43 ->Array.filterMap(((name, rule)) => 41 - extractConstructorSignature(rule)->Option.map(sig => (name, rule, sig)) 44 + extractPredicateSignature(rule)->Option.map(sig => (name, rule, sig)) 42 45 ) 43 46 ->Array.reduce(Dict.make(), (acc, (name, rule, (cname, arity))) => { 44 47 let key = makeKey(cname, arity) ··· 46 49 acc 47 50 }) 48 51 ->Dict.valuesToArray 49 - ->Array.map(constructors => { 50 - let (_, firstRule) = constructors[0]->Option.getExn 51 - let (name, arity) = extractConstructorSignature(firstRule)->Option.getExn 52 - {name, arity, rules: constructors} 52 + ->Array.map(predicates => { 53 + let (_, firstRule) = predicates[0]->Option.getExn 54 + let (name, arity) = extractPredicateSignature(firstRule)->Option.getExn 55 + {name, arity, rules: predicates} 53 56 }) 54 - let generateInductionRule = ( 55 - group: constructorGroup, 56 - allGroups: array<constructorGroup>, 57 - ): Rule.t => { 57 + let generateInductionRule = (group: predicateGroup, allGroups: array<predicateGroup>): Rule.t => { 58 58 let {name: str, arity: i} = group 59 59 let numFormers = Array.length(allGroups) 60 60 let groupIndex = mustFindIndex(allGroups, g => g.name == str && g.arity == i) ··· 89 89 let (conclusionHead, conclusionArgs) = HOTerm.strip(constructorRule.conclusion) 90 90 let typeIndex = switch conclusionHead { 91 91 | Symbol({name}) => findFormerIndex(name, Array.length(conclusionArgs)) 92 - | _ => raise(Unreachable("Constructor conclusion must have a Symbol head")) 92 + | _ => throw(Unreachable("Constructor conclusion must have a Symbol head")) 93 93 } 94 94 95 95 { ··· 104 104 105 105 { 106 106 Rule.vars: Array.concat( 107 - Array.fromInitializer(~length=i, i => "§" ++ Int.toString(i)), 107 + makeVarNames(i), 108 108 Array.fromInitializer(~length=numFormers, i => "§P" ++ Int.toString(i)), 109 109 ), 110 110 premises: [ 111 111 { 112 112 Rule.vars: [], 113 113 premises: [], 114 - conclusion: HOTerm.app(HOTerm.Symbol({name: str}), HOTerm.mkvars(i)), 114 + conclusion: HOTerm.app(HOTerm.Symbol({name: str, constructor: false}), makeVarArgs(i)), 115 115 }, 116 116 ...subgoals, 117 117 ], 118 - conclusion: HOTerm.app(HOTerm.Var({idx: i + groupIndex}), HOTerm.mkvars(i)), 118 + conclusion: HOTerm.app(HOTerm.Var({idx: i + groupIndex}), makeVarArgs(i)), 119 119 } 120 120 } 121 121 ··· 132 132 } 133 133 } 134 134 135 - let isSelfReference = (group: constructorGroup, (name, arity)): bool => 135 + let isSelfReference = (group: predicateGroup, (name, arity)): bool => 136 136 name == group.name && arity == group.arity 137 137 138 - let findDependencies = (group: constructorGroup): array<(string, int)> => 138 + let findDependencies = (group: predicateGroup): array<(string, int)> => 139 139 group.rules 140 140 ->Array.flatMap(((_name, rule)) => rule.premises->Array.filterMap(extractInductiveType)) 141 141 ->Array.filter(dep => !isSelfReference(group, dep)) ··· 143 143 let rec collectReachable = ( 144 144 toVisit: array<(string, int)>, 145 145 visited: Belt.Set.t<string, StringCmp.identity>, 146 - allGroups: array<constructorGroup>, 146 + allGroups: array<predicateGroup>, 147 147 ): Belt.Set.t<string, StringCmp.identity> => 148 148 switch toVisit { 149 149 | [] => visited ··· 166 166 } 167 167 168 168 let findMutuallyInductiveComponent = ( 169 - targetGroup: constructorGroup, 170 - allGroups: array<constructorGroup>, 171 - ): array<constructorGroup> => { 169 + targetGroup: predicateGroup, 170 + allGroups: array<predicateGroup>, 171 + ): array<predicateGroup> => { 172 172 let reachableKeys = collectReachable( 173 173 [(targetGroup.name, targetGroup.arity)], 174 174 Belt.Set.make(~id=module(StringCmp)), ··· 177 177 allGroups->Array.filter(g => Belt.Set.has(reachableKeys, makeKey(g.name, g.arity))) 178 178 } 179 179 180 + let generateCasesRule = (group: predicateGroup): Rule.t => { 181 + let {name: str, arity} = group 182 + 183 + let caseSubgoal = ((_constructorName: string, predicateRule: Rule.t)): Rule.t => { 184 + let offset = Array.length(predicateRule.vars) 185 + 186 + // Extract the argument from the predicate conclusion 187 + // e.g., from (Nat 0) extract 0, from (Nat (S n)) extract (S n) 188 + let (_head, args) = HOTerm.strip(predicateRule.conclusion) 189 + assert(Array.length(args) == arity) 190 + 191 + let equalityPremises = args->Array.mapWithIndex((arg, idx) => { 192 + { 193 + Rule.vars: [], 194 + premises: [], 195 + conclusion: HOTerm.app( 196 + HOTerm.Symbol({name: "=", constructor: false}), 197 + [HOTerm.Var({idx: offset + idx}), arg], 198 + ), 199 + } 200 + }) 201 + 202 + { 203 + Rule.vars: predicateRule.vars, 204 + premises: Array.concat(equalityPremises, predicateRule.premises), 205 + conclusion: HOTerm.Var({idx: offset + arity}), 206 + } 207 + } 208 + 209 + let subgoals = Array.map(group.rules, ((name, rule)) => caseSubgoal((name, rule))) 210 + 211 + { 212 + Rule.vars: Array.concat(makeVarNames(arity), ["§P"]), 213 + premises: [ 214 + { 215 + Rule.vars: [], 216 + premises: [], 217 + conclusion: HOTerm.app( 218 + HOTerm.Symbol({name: str, constructor: false}), 219 + makeVarArgs(arity), 220 + ), 221 + }, 222 + ...subgoals, 223 + ], 224 + conclusion: HOTerm.Var({idx: arity}), 225 + } 226 + } 227 + 180 228 let derived = (state: state): state => 181 229 state 182 - ->groupByConstructor 183 - ->Array.map(group => { 184 - let mutualComponent = findMutuallyInductiveComponent(group, groupByConstructor(state)) 185 - let rule = generateInductionRule(group, mutualComponent) 186 - ("§induction-" ++ makeKey(group.name, group.arity), rule) 230 + ->groupByPredicate 231 + ->Array.flatMap(group => { 232 + let mutualComponent = findMutuallyInductiveComponent(group, groupByPredicate(state)) 233 + let inductionRule = generateInductionRule(group, mutualComponent) 234 + let casesRule = generateCasesRule(group) 235 + [("§induction-" ++ group.name, inductionRule), ("§cases-" ++ group.name, casesRule)] 187 236 }) 188 237 ->Dict.fromArray 189 238 let serialise = (state: state) => ··· 217 266 } 218 267 } 219 268 } 220 - ret.contents->Result.map(state => (state, {Ports.facts: state->Dict.copy->Dict.assign(derived(state)), ruleStyle: None})) 269 + ret.contents->Result.map(state => ( 270 + state, 271 + {Ports.facts: state->Dict.copy->Dict.assign(derived(state)), ruleStyle: None}, 272 + )) 221 273 } 222 274 223 275 let make = props => { 224 276 <div 225 277 className={"axiom-set axiom-set-"->String.concat( 226 278 String.make(props.imports.ruleStyle->Option.getOr(Hybrid)), 227 - )}> 279 + )} 280 + > 228 281 {Dict.toArray(props.content->Dict.copy->Dict.assign(derived(props.content))) 229 282 ->Array.mapWithIndex(((n, r), i) => 230 283 <RuleView 231 284 rule={r} 232 285 scope={[]} 233 286 key={String.make(i)} 234 - style={props.imports.ruleStyle->Option.getOr(Hybrid)}> 287 + style={props.imports.ruleStyle->Option.getOr(Hybrid)} 288 + > 235 289 {React.string(n)} 236 290 </RuleView> 237 291 )
+3 -3
src/Method.res
··· 112 112 Array.push(subgoals, sg) 113 113 cur := String.trim(rest) 114 114 } 115 - | Error(e) => raise(InternalParseError(e)) 115 + | Error(e) => throw(InternalParseError(e)) 116 116 } 117 117 } 118 118 if cur.contents->String.get(0) == Some("}") { ··· 276 276 Array.push(subgoals, sg) 277 277 cur := String.trim(rest) 278 278 } 279 - | Error(e) => raise(InternalParseError(e)) 279 + | Error(e) => throw(InternalParseError(e)) 280 280 } 281 281 } 282 282 if cur.contents->String.get(0) == Some("}") { ··· 365 365 possibleElims->Array.forEach(((elimName, elim)) => { 366 366 let ruleInsts = rule->Rule.genSchemaInsts(gen, ~scope=ctx.fixes) 367 367 let rule' = rule->Rule.instantiate(ruleInsts) 368 - Judgment.unify((rule'.premises[0]->Option.getExn).conclusion, elim.conclusion) 368 + Judgment.unify((rule'.premises[0]->Option.getExn).conclusion, elim.conclusion, ~gen) 369 369 ->Seq.take(seqSizeLimit) 370 370 ->Seq.forEach( 371 371 elimSub => {
+240 -94
src/MethodView.res
··· 1 1 open Signatures 2 2 open Method 3 + open HOTermMethod 3 4 module type METHOD_VIEW = { 4 5 module Term: TERM 5 6 module Judgment: JUDGMENT with module Term := Term ··· 37 38 "gen": Term.gen, 38 39 "onChange": ('a, Judgment.subst) => unit, 39 40 } 40 - let make = (subRender: srProps<'a> => React.element) => props => { 41 - <div> 42 - <b> {React.string("by ")} </b> 43 - {React.string(props.method.ruleName)} 44 - <ul> 45 - {props.method.subgoals 46 - ->Array.mapWithIndex((sg, i) => { 47 - <li key={String.make(i)}> 41 + let make = (subRender: srProps<'a> => React.element) => 42 + props => { 43 + <div> 44 + <b> {React.string("by ")} </b> 45 + {React.string(props.method.ruleName)} 46 + <ul> 47 + {props.method.subgoals 48 + ->Array.mapWithIndex((sg, i) => { 49 + <li key={String.make(i)}> 50 + {React.createElement( 51 + subRender, 52 + { 53 + "proof": sg, 54 + "scope": props.scope, 55 + "ruleStyle": props.ruleStyle, 56 + "gen": props.gen, 57 + "onChange": (newa, subst: Judgment.subst) => 58 + props.onChange(props.method->Method.updateAtKey(i, _ => newa), subst), 59 + }, 60 + )} 61 + </li> 62 + }) 63 + ->React.array} 64 + </ul> 65 + </div> 66 + } 67 + } 68 + 69 + module EliminationView = (Term: TERM, Judgment: JUDGMENT with module Term := Term) => { 70 + module Method = Elimination(Term, Judgment) 71 + type props<'a> = { 72 + method: Method.t<'a>, 73 + scope: array<Term.meta>, 74 + ruleStyle: RuleView.style, 75 + gen: Term.gen, 76 + onChange: (Method.t<'a>, Judgment.subst) => unit, 77 + } 78 + type srProps<'a> = { 79 + "proof": 'a, 80 + "scope": array<Term.meta>, 81 + "ruleStyle": RuleView.style, 82 + "gen": Term.gen, 83 + "onChange": ('a, Judgment.subst) => unit, 84 + } 85 + let make = (subRender: srProps<'a> => React.element) => 86 + props => { 87 + <div> 88 + <b> {React.string("elim ")} </b> 89 + {React.string(`${props.method.ruleName} ${props.method.elimName}`)} 90 + <ul> 91 + {props.method.subgoals 92 + ->Array.mapWithIndex((sg, i) => { 93 + <li key={String.make(i)}> 94 + {React.createElement( 95 + subRender, 96 + { 97 + "proof": sg, 98 + "scope": props.scope, 99 + "ruleStyle": props.ruleStyle, 100 + "gen": props.gen, 101 + "onChange": (newa, subst: Judgment.subst) => 102 + props.onChange(props.method->Method.updateAtKey(i, _ => newa), subst), 103 + }, 104 + )} 105 + </li> 106 + }) 107 + ->React.array} 108 + </ul> 109 + </div> 110 + } 111 + } 112 + 113 + module LemmaView = ( 114 + Term: TERM, 115 + Judgment: JUDGMENT with module Term := Term, 116 + JudgmentView: JUDGMENT_VIEW with module Term := Term and module Judgment := Judgment, 117 + ) => { 118 + module Method = Lemma(Term, Judgment) 119 + type props<'a> = { 120 + method: Method.t<'a>, 121 + scope: array<Term.meta>, 122 + ruleStyle: RuleView.style, 123 + gen: Term.gen, 124 + onChange: (Method.t<'a>, Judgment.subst) => unit, 125 + } 126 + type srProps<'a> = { 127 + "proof": 'a, 128 + "scope": array<Term.meta>, 129 + "ruleStyle": RuleView.style, 130 + "gen": Term.gen, 131 + "onChange": ('a, Judgment.subst) => unit, 132 + } 133 + module RuleView = RuleView.Make(Term, Judgment, JudgmentView) 134 + let make = (subRender: srProps<'a> => React.element) => 135 + props => { 136 + <div> 137 + <b> {React.string("have ")} </b> 138 + <RuleView rule={props.method.rule} scope={props.scope} style={props.ruleStyle}> 139 + {React.null} 140 + </RuleView> 141 + {React.createElement( 142 + subRender, 143 + { 144 + "proof": props.method.proof, 145 + "scope": props.scope, 146 + "ruleStyle": props.ruleStyle, 147 + "gen": props.gen, 148 + "onChange": (proof, subst) => {props.onChange({...props.method, proof}, subst)}, 149 + }, 150 + )} 151 + {React.createElement( 152 + subRender, 153 + { 154 + "proof": props.method.show, 155 + "scope": props.scope, 156 + "ruleStyle": props.ruleStyle, 157 + "gen": props.gen, 158 + "onChange": (show, subst) => {props.onChange({...props.method, show}, subst)}, 159 + }, 160 + )} 161 + </div> 162 + } 163 + } 164 + 165 + module RewriteView = ( 166 + Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 167 + ) => { 168 + module Method = Rewrite(Judgment) 169 + type props<'a> = { 170 + method: Method.t<'a>, 171 + scope: array<HOTerm.meta>, 172 + ruleStyle: RuleView.style, 173 + gen: HOTerm.gen, 174 + onChange: (Method.t<'a>, Judgment.subst) => unit, 175 + } 176 + type srProps<'a> = { 177 + "proof": 'a, 178 + "scope": array<HOTerm.meta>, 179 + "ruleStyle": RuleView.style, 180 + "gen": HOTerm.gen, 181 + "onChange": ('a, Judgment.subst) => unit, 182 + } 183 + let make = (subRender: srProps<'a> => React.element) => 184 + props => { 185 + <div> 186 + <b> {React.string("rewrite ")} </b> 187 + {React.string(props.method.equalityName)} 188 + <ul> 189 + <li> 48 190 {React.createElement( 49 191 subRender, 50 192 { 51 - "proof": sg, 193 + "proof": props.method.subgoal, 52 194 "scope": props.scope, 53 195 "ruleStyle": props.ruleStyle, 54 196 "gen": props.gen, 55 - "onChange": (newa, subst: Judgment.subst) => 56 - props.onChange(props.method->Method.updateAtKey(i, _ => newa), subst), 197 + "onChange": (subgoal, subst: Judgment.subst) => 198 + props.onChange({...props.method, subgoal}, subst), 57 199 }, 58 200 )} 59 201 </li> 60 - }) 61 - ->React.array} 62 - </ul> 63 - </div> 64 - } 202 + </ul> 203 + </div> 204 + } 65 205 } 66 206 67 - module EliminationView = (Term: TERM, Judgment: JUDGMENT with module Term := Term) => { 68 - module Method = Elimination(Term, Judgment) 207 + module RewriteReverseView = ( 208 + Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 209 + ) => { 210 + module Method = RewriteReverse(Judgment) 69 211 type props<'a> = { 70 212 method: Method.t<'a>, 71 - scope: array<Term.meta>, 213 + scope: array<HOTerm.meta>, 72 214 ruleStyle: RuleView.style, 73 - gen: Term.gen, 215 + gen: HOTerm.gen, 74 216 onChange: (Method.t<'a>, Judgment.subst) => unit, 75 217 } 76 218 type srProps<'a> = { 77 219 "proof": 'a, 78 - "scope": array<Term.meta>, 220 + "scope": array<HOTerm.meta>, 79 221 "ruleStyle": RuleView.style, 80 - "gen": Term.gen, 222 + "gen": HOTerm.gen, 81 223 "onChange": ('a, Judgment.subst) => unit, 82 224 } 83 - let make = (subRender: srProps<'a> => React.element) => props => { 84 - <div> 85 - <b> {React.string("elim ")} </b> 86 - {React.string(`${props.method.ruleName} ${props.method.elimName}`)} 87 - <ul> 88 - {props.method.subgoals 89 - ->Array.mapWithIndex((sg, i) => { 90 - <li key={String.make(i)}> 225 + let make = (subRender: srProps<'a> => React.element) => 226 + props => { 227 + <div> 228 + <b> {React.string("rewrite_reverse ")} </b> 229 + {React.string(props.method.equalityName)} 230 + <ul> 231 + <li> 91 232 {React.createElement( 92 233 subRender, 93 234 { 94 - "proof": sg, 235 + "proof": props.method.subgoal, 95 236 "scope": props.scope, 96 237 "ruleStyle": props.ruleStyle, 97 238 "gen": props.gen, 98 - "onChange": (newa, subst: Judgment.subst) => 99 - props.onChange(props.method->Method.updateAtKey(i, _ => newa), subst), 239 + "onChange": (subgoal, subst: Judgment.subst) => 240 + props.onChange({...props.method, subgoal}, subst), 100 241 }, 101 242 )} 102 243 </li> 103 - }) 104 - ->React.array} 105 - </ul> 106 - </div> 244 + </ul> 245 + </div> 246 + } 247 + } 248 + 249 + module ConstructorNeqView = ( 250 + Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 251 + ) => { 252 + module Method = ConstructorNeq(Judgment) 253 + type props<'a> = { 254 + method: Method.t<'a>, 255 + scope: array<HOTerm.meta>, 256 + ruleStyle: RuleView.style, 257 + gen: HOTerm.gen, 258 + onChange: (Method.t<'a>, Judgment.subst) => unit, 107 259 } 260 + type srProps<'a> = { 261 + "proof": 'a, 262 + "scope": array<HOTerm.meta>, 263 + "ruleStyle": RuleView.style, 264 + "gen": HOTerm.gen, 265 + "onChange": ('a, Judgment.subst) => unit, 266 + } 267 + let make = (_subRender: srProps<'a> => React.element) => 268 + _props => { 269 + <div> 270 + <b> {React.string("constructor_neq")} </b> 271 + </div> 272 + } 108 273 } 109 274 110 - module LemmaView = ( 111 - Term: TERM, 112 - Judgment: JUDGMENT with module Term := Term, 113 - JudgmentView: JUDGMENT_VIEW with module Term := Term and module Judgment := Judgment, 275 + module ConstructorInjView = ( 276 + Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 114 277 ) => { 115 - module Method = Lemma(Term, Judgment) 278 + module Method = ConstructorInj(Judgment) 116 279 type props<'a> = { 117 280 method: Method.t<'a>, 118 - scope: array<Term.meta>, 281 + scope: array<HOTerm.meta>, 119 282 ruleStyle: RuleView.style, 120 - gen: Term.gen, 283 + gen: HOTerm.gen, 121 284 onChange: (Method.t<'a>, Judgment.subst) => unit, 122 285 } 123 286 type srProps<'a> = { 124 287 "proof": 'a, 125 - "scope": array<Term.meta>, 288 + "scope": array<HOTerm.meta>, 126 289 "ruleStyle": RuleView.style, 127 - "gen": Term.gen, 290 + "gen": HOTerm.gen, 128 291 "onChange": ('a, Judgment.subst) => unit, 129 292 } 130 - module RuleView = RuleView.Make(Term, Judgment, JudgmentView) 131 - let make = (subRender: srProps<'a> => React.element) => props => { 132 - <div> 133 - <b> {React.string("have ")} </b> 134 - <RuleView rule={props.method.rule} scope={props.scope} style={props.ruleStyle}> 135 - {React.null} 136 - </RuleView> 137 - {React.createElement( 138 - subRender, 139 - { 140 - "proof": props.method.proof, 141 - "scope": props.scope, 142 - "ruleStyle": props.ruleStyle, 143 - "gen": props.gen, 144 - "onChange": (proof, subst) => {props.onChange({...props.method, proof}, subst)}, 145 - }, 146 - )} 147 - {React.createElement( 148 - subRender, 149 - { 150 - "proof": props.method.show, 151 - "scope": props.scope, 152 - "ruleStyle": props.ruleStyle, 153 - "gen": props.gen, 154 - "onChange": (show, subst) => {props.onChange({...props.method, show}, subst)}, 155 - }, 156 - )} 157 - </div> 158 - } 293 + let make = (_subRender: srProps<'a> => React.element) => 294 + props => { 295 + <div> 296 + <b> 297 + {React.string( 298 + `constructor_inj ${props.method.source} ${Int.toString(props.method.argIndex)}`, 299 + )} 300 + </b> 301 + </div> 302 + } 159 303 } 304 + 160 305 module CombineMethodView = ( 161 306 Term: TERM, 162 307 Judgment: JUDGMENT with module Term := Term, ··· 175 320 onChange: (Method.t<'a>, Judgment.subst) => unit, 176 321 } 177 322 type srProps<'a> = Method1View.srProps<'a> 178 - let make = (subrender: srProps<'a> => React.element) => props => { 179 - switch props.method { 180 - | First(m) => 181 - Method1View.make(subrender)({ 182 - method: m, 183 - scope: props.scope, 184 - ruleStyle: props.ruleStyle, 185 - gen: props.gen, 186 - onChange: (n, s) => props.onChange(First(n), s), 187 - }) 188 - | Second(m) => 189 - Method2View.make(subrender)({ 190 - method: m, 191 - scope: props.scope, 192 - ruleStyle: props.ruleStyle, 193 - gen: props.gen, 194 - onChange: (n, s) => props.onChange(Second(n), s), 195 - }) 323 + let make = (subrender: srProps<'a> => React.element) => 324 + props => { 325 + switch props.method { 326 + | First(m) => 327 + Method1View.make(subrender)({ 328 + method: m, 329 + scope: props.scope, 330 + ruleStyle: props.ruleStyle, 331 + gen: props.gen, 332 + onChange: (n, s) => props.onChange(First(n), s), 333 + }) 334 + | Second(m) => 335 + Method2View.make(subrender)({ 336 + method: m, 337 + scope: props.scope, 338 + ruleStyle: props.ruleStyle, 339 + gen: props.gen, 340 + onChange: (n, s) => props.onChange(Second(n), s), 341 + }) 342 + } 196 343 } 197 - } 198 344 }
+2 -1
src/ProofView.res
··· 46 46 props.onChange( 47 47 Proof.Checked({fixes, assumptions, method: Do(opt), rule}), 48 48 subst, 49 - )}> 49 + )} 50 + > 50 51 {React.string(str)} 51 52 </button> 52 53 })
+4 -4
src/Rule.res
··· 11 11 { 12 12 vars: rule.vars, 13 13 premises: rule.premises->Array.map(premise => premise->substitute(subst')), 14 - conclusion: rule.conclusion->Judgment.substitute(subst'), 14 + conclusion: rule.conclusion->Judgment.substitute(subst')->Judgment.reduce, 15 15 } 16 16 } 17 17 let rec substDeBruijn = (rule: t, substs: array<Judgment.substCodom>, ~from: int=0) => { ··· 39 39 let substituteBare = (rule: bare, subst: Judgment.subst) => { 40 40 { 41 41 premises: rule.premises->Array.map(premise => premise->substitute(subst)), 42 - conclusion: rule.conclusion->Judgment.substitute(subst), 42 + conclusion: rule.conclusion->Judgment.substitute(subst)->Judgment.reduce, 43 43 } 44 44 } 45 45 let instantiate = (rule: t, terms: array<Judgment.substCodom>) => { ··· 103 103 cur := rest 104 104 premises->Array.push(p) 105 105 } 106 - | Error(_) => raise(InternalParseError("expected turnstile or premise")) 106 + | Error(_) => throw(InternalParseError("expected turnstile or premise")) 107 107 } 108 108 } 109 109 if cur.contents->String.trim->String.get(0) == Some("]") { ··· 162 162 cur := rest 163 163 premises->Array.push(p) 164 164 } 165 - | Error(e) => raise(InternalParseError(e)) 165 + | Error(e) => throw(InternalParseError(e)) 166 166 } 167 167 } 168 168 let (ruleName, rest) = it.contents->Result.getExn
+2 -1
src/RuleView.res
··· 91 91 <tr> 92 92 <td 93 93 colSpan={premises->Array.length + 1} 94 - className="rule-cell rule-hypothetical-conclusion"> 94 + className="rule-cell rule-hypothetical-conclusion" 95 + > 95 96 <JudgmentView judgment={conclusion} scope={scope} /> 96 97 </td> 97 98 </tr>
+4 -4
src/SExp.res
··· 324 324 seen(g, num) 325 325 Some(Schematic({schematic: num, allowed: bits})) 326 326 } 327 - | None => raise(ParseError("Schematics not allowed here")) 327 + | None => throw(ParseError("Schematics not allowed here")) 328 328 } 329 - | _ => raise(ParseError("Expected closing parenthesis")) 329 + | _ => throw(ParseError("Expected closing parenthesis")) 330 330 } 331 331 } 332 - | _ => raise(ParseError("Expected opening parenthesis")) 332 + | _ => throw(ParseError("Expected opening parenthesis")) 333 333 } 334 334 } 335 335 | Some(LParen) => { ··· 344 344 } 345 345 switch lex() { 346 346 | Some(RParen) => Some(Compound({subexps: bits})) 347 - | _ => raise(ParseError("Expected closing parenthesis")) 347 + | _ => throw(ParseError("Expected closing parenthesis")) 348 348 } 349 349 } 350 350 | _ => None
+33 -2
src/Scratch.res
··· 2 2 3 3 module AxiomS = Editable.TextArea(AxiomSet.Make(HOTerm, HOTermJ, HOTermJView)) 4 4 module InductiveS = Editable.TextArea(InductiveSet.Make(HOTerm, HOTermJ, HOTermJView)) 5 + 6 + module EqualityViews = MethodView.CombineMethodView( 7 + HOTerm, 8 + HOTermJ, 9 + MethodView.RewriteView(HOTermJ), 10 + MethodView.RewriteReverseView(HOTermJ), 11 + ) 12 + module ConstructorEqualityViews = MethodView.CombineMethodView( 13 + HOTerm, 14 + HOTermJ, 15 + EqualityViews, 16 + MethodView.ConstructorNeqView(HOTermJ), 17 + ) 18 + module RewritesView = MethodView.CombineMethodView( 19 + HOTerm, 20 + HOTermJ, 21 + ConstructorEqualityViews, 22 + MethodView.ConstructorInjView(HOTermJ), 23 + ) 5 24 module DerivationsOrLemmasView = MethodView.CombineMethodView( 6 25 HOTerm, 7 26 HOTermJ, ··· 13 32 ), 14 33 MethodView.EliminationView(HOTerm, HOTermJ), 15 34 ) 16 - module TheoremS = Editable.TextArea( 17 - Theorem.Make(HOTerm, HOTermJ, HOTermJView, DerivationsOrLemmasView), 35 + module DLRView = MethodView.CombineMethodView( 36 + HOTerm, 37 + HOTermJ, 38 + DerivationsOrLemmasView, 39 + RewritesView, 40 + ) 41 + module DLREView = MethodView.CombineMethodView( 42 + HOTerm, 43 + HOTermJ, 44 + DLRView, 45 + MethodView.EliminationView(HOTerm, HOTermJ), 18 46 ) 47 + 48 + // Temporarily use DLRView (without Elimination) due to HOTerm unification bug 49 + module TheoremS = Editable.TextArea(Theorem.Make(HOTerm, HOTermJ, HOTermJView, DLRView)) 19 50 module ConfS = ConfigBlock.Make(HOTerm, HOTermJ) 20 51 21 52 module AxiomStr = Editable.TextArea(StringAxiomSet)
+2
src/Signatures.res
··· 44 44 let upshift: (t, int, ~from: int=?) => t 45 45 let upshiftSubstCodom: (substCodom, int, ~from: int=?) => substCodom 46 46 let placeSubstCodom: (schematic, ~scope: array<meta>) => substCodom 47 + // Map a function over all terms in the judgment 48 + let mapTerms: (t, Term.t => Term.t) => t 47 49 let parse: (string, ~scope: array<Term.meta>, ~gen: Term.gen=?) => result<(t, string), string> 48 50 let parseSubstCodom: ( 49 51 string,
+5 -5
src/StringAxiomSet.res
··· 45 45 group.rules 46 46 ->Array.flatMap(r => 47 47 r.premises 48 - ->Array.map(p => p.conclusion->snd->getSExpName) 48 + ->Array.map(p => p.conclusion->Pair.second->getSExpName) 49 49 ->Array.keepSome 50 50 ->Array.filter(name => allGroupNames->Array.find(name' => name' == name)->Option.isSome) 51 51 ) ··· 83 83 let baseIdx = baseIdx + Array.length(rule.vars) 84 84 let inductionHyps = 85 85 rule.premises 86 - ->Array.filter(r => lookupGroup(r.conclusion->snd)->Option.isSome) 86 + ->Array.filter(r => lookupGroup(r.conclusion->Pair.second)->Option.isSome) 87 87 ->Array.map(r => replaceJudgeRHS(r, baseIdx)) 88 - let pIdx = lookupGroup(rule.conclusion->snd)->Option.getExn 88 + let pIdx = lookupGroup(rule.conclusion->Pair.second)->Option.getExn 89 89 { 90 90 vars: rule.vars, 91 91 premises: rule.premises->Array.concat(inductionHyps), 92 92 conclusion: ( 93 - surround(rule.conclusion->fst, aIdx + baseIdx, bIdx + baseIdx), 93 + surround(rule.conclusion->Pair.first, aIdx + baseIdx, bIdx + baseIdx), 94 94 Var({idx: pIdx + baseIdx}), 95 95 ), 96 96 } ··· 143 143 getBase(str)->Result.map(raw => { 144 144 let grouped: dict<array<Rule.t>> = Dict.make() 145 145 raw->Dict.forEach(rule => 146 - switch rule.conclusion->snd { 146 + switch rule.conclusion->Pair.second { 147 147 | Symbol({name: a}) => 148 148 switch grouped->Dict.get(a) { 149 149 | None => grouped->Dict.set(a, [rule])
+10 -10
src/StringTerm.res
··· 40 40 } 41 41 ) 42 42 let maxSchematicCount = (term: t) => { 43 - schematicsCountsIn(term)->Belt.Map.Int.maximum->Option.map(snd)->Option.getOr(0) 43 + schematicsCountsIn(term)->Belt.Map.Int.maximum->Option.map(Pair.second)->Option.getOr(0) 44 44 } 45 45 let reduce = t => t 46 46 let freeVarsIn = (term: t): Belt.Set.t<int, IntCmp.identity> => ··· 350 350 } 351 351 352 352 let parseMeta = (str: string) => { 353 - let re = %re("/^([^\s.\[\]()]+)\./y") 353 + let re = /^([^\s.\[\]()]+)\./y 354 354 switch re->RegExp.exec(str->String.trim) { 355 355 | None => Error("not a meta name") 356 356 | Some(res) => ··· 416 416 let execRe = re => execRe(re, String.sliceToEnd(str, ~start=pos.contents)) 417 417 let stringLit = () => { 418 418 let identRegex = RegExp.fromString(`^${Util.identRegexStr}`) 419 - let symbolRegex = %re(`/^([!@#\$%\^~&*_+\-={};':|,.<>\/?]+)/`) 420 - let numberRegex = %re(`/^(\d+)/`) 419 + let symbolRegex = /^([!@#\$%\^~&*_+\-={};':|,.<>\/?]+)/ 420 + let numberRegex = /^(\d+)/ 421 421 switch execRe(identRegex) 422 422 ->Option.orElse(execRe(symbolRegex)) 423 423 ->Option.orElse(execRe(numberRegex)) { ··· 427 427 } 428 428 } 429 429 let escaped = () => { 430 - let escapedRegex = %re(`/\\([\$\?\\\"])/`) 430 + let escapedRegex = /\\([\$\?\\\"])/ 431 431 switch execRe(escapedRegex) { 432 432 | Some([char], l) => add(String(char), ~nAdvance=l) 433 433 | Some(_) => error("regex escaped error") ··· 436 436 } 437 437 let readInt = s => Int.fromString(s)->Option.getExn 438 438 let schema = () => { 439 - let schemaRegex = %re("/\?(\d+)\(((?:\d+\s*)*)\)/") 439 + let schemaRegex = /\?(\d+)\(((?:\d+\s*)*)\)/ 440 440 switch execRe(schemaRegex) { 441 441 | Some([idStr, allowedStr], l) => { 442 442 let schematic = readInt(idStr) 443 443 let allowed = 444 444 allowedStr 445 445 ->String.trim 446 - ->String.splitByRegExp(%re("/\s+/")) 446 + ->String.splitByRegExp(/\s+/) 447 447 ->Array.keepSome 448 448 ->Array.filter(s => s != "") 449 449 ->Array.map(readInt) ··· 454 454 } 455 455 } 456 456 let var = () => { 457 - let varLitRegex = %re("/^\$\\(\d+)/") 458 - let varScopeRegex = %re("/^\$([a-zA-Z]\w*)/") 457 + let varLitRegex = /^\$\\(\d+)/ 458 + let varScopeRegex = /^\$([a-zA-Z]\w*)/ 459 459 switch execRe(varLitRegex) { 460 460 | Some([match], l) => add(Var({idx: readInt(match)}), ~nAdvance=l) 461 461 | Some(_) => error("var lit regex error") ··· 473 473 } 474 474 475 475 // consume leading whitespace + open quote 476 - switch execRe(%re(`/^\s*"/`)) { 476 + switch execRe(/^\s*"/) { 477 477 | Some(_, l) => pos := l 478 478 | None => error("expected open quote") 479 479 }
+7
src/StringTermJudgment.res
··· 76 76 | SExpV(j) => SExpV(SExp.upshift(j, amount, ~from)) 77 77 } 78 78 79 + let mapTerms = ((t, j): t, f: StringTerm.t => StringTerm.t): t => { 80 + // Apply the function to both the string term and the sexp (converted to/from string term) 81 + let newT = f(t) 82 + let newJ = j->StringTerm.fromSExp->f->StringTerm.toSExp 83 + (newT, newJ) 84 + } 85 + 79 86 let parse = (str: string, ~scope: array<StringTerm.meta>, ~gen=?) => { 80 87 StringTerm.parse(str, ~scope, ~gen?)->Result.flatMap(((t, str)) => 81 88 SExp.parse(str, ~scope)->Result.map(((j, str)) => ((t, j), str))
+4 -1
src/TermAsJudgment.res
··· 1 1 open Signatures 2 2 3 - module Make = (Term: TERM): (JUDGMENT with module Term := Term and type t = Term.t) => { 3 + module Make = (Term: TERM): ( 4 + JUDGMENT with module Term := Term and type t = Term.t and type subst = Term.subst 5 + ) => { 4 6 include Term 5 7 type substCodom = Term.t 6 8 let prettyPrintSubstCodom = Term.prettyPrint ··· 8 10 let placeSubstCodom = Term.place 9 11 let upshiftSubstCodom = Term.upshift 10 12 let substituteSubstCodom = Term.substitute 13 + let mapTerms = (t: Term.t, f: Term.t => Term.t): Term.t => f(t) 11 14 } 12 15 13 16 module SExpJ = Make(SExp)
+1 -1
src/Util.res
··· 113 113 exception Err(string) 114 114 let mustFindIndex = (arr, f) => { 115 115 switch Array.findIndex(arr, f) { 116 - | -1 => raise(Unreachable("Element not found")) 116 + | -1 => throw(Unreachable("Element not found")) 117 117 | i => i 118 118 } 119 119 }
+53 -22
tests/HOTermTest.res
··· 51 51 testUnify0(t, bt, at, ~subst?, ~msg?, ~reduce) 52 52 } 53 53 zoraBlock("parse symbol", t => { 54 - t->block("single char", t => t->Util.testParse("x", Symbol({name: "x"}))) 55 - t->block("multi char", t => t->Util.testParse("xyz", Symbol({name: "xyz"}))) 54 + t->block("single char", t => t->Util.testParse("x", Symbol({name: "x", constructor: false}))) 55 + t->block("multi char", t => t->Util.testParse("xyz", Symbol({name: "xyz", constructor: false}))) 56 56 }) 57 57 58 58 zoraBlock("parse var", t => { ··· 66 66 67 67 zoraBlock("parse application", t => { 68 68 t->block("multiple", t => { 69 - t->Util.testParse("(a b)", App({func: Symbol({name: "a"}), arg: Symbol({name: "b"})})) 69 + t->Util.testParse( 70 + "(a b)", 71 + App({ 72 + func: Symbol({name: "a", constructor: false}), 73 + arg: Symbol({name: "b", constructor: false}), 74 + }), 75 + ) 70 76 }) 71 77 t->block("multiple more", t => { 72 78 t->Util.testParse( 73 79 "(a b c)", 74 80 App({ 75 - func: App({func: Symbol({name: "a"}), arg: Symbol({name: "b"})}), 76 - arg: Symbol({name: "c"}), 81 + func: App({ 82 + func: Symbol({name: "a", constructor: false}), 83 + arg: Symbol({name: "b", constructor: false}), 84 + }), 85 + arg: Symbol({name: "c", constructor: false}), 77 86 }), 78 87 ) 79 88 }) ··· 81 90 t->Util.testParse( 82 91 "(a \\1 ?1)", 83 92 App({ 84 - func: App({func: Symbol({name: "a"}), arg: Var({idx: 1})}), 93 + func: App({func: Symbol({name: "a", constructor: false}), arg: Var({idx: 1})}), 85 94 arg: Schematic({schematic: 1}), 86 95 }), 87 96 ) ··· 113 122 "x. (x x)", 114 123 Lam({name: "x", body: App({func: Var({idx: 0}), arg: Var({idx: 0})})}), 115 124 ) 125 + }) 126 + t->block("constructor", t => { 127 + t->Util.testParse("@cons", Symbol({name: "cons", constructor: true})) 116 128 }) 117 129 // TODO: test if remaining strings are returned correctly 118 130 }) ··· 121 133 t->block("examples", t => { 122 134 t->Util.testParsePrettyPrint("\\1", "\\1") 123 135 t->Util.testParsePrettyPrint("?1", "?1") 136 + t->Util.testParsePrettyPrint("@cons", "@cons") 124 137 t->Util.testParsePrettyPrint("(x. x)", "(x. x)") 125 138 t->Util.testParsePrettyPrint("(x. x. \\0)", "(x. x. x)") 126 139 t->Util.testParsePrettyPrint("(x. x. \\1)", "(x. x. \\1)") ··· 150 163 t->block("flex-rigid", t => { 151 164 let x = "?0" 152 165 let y = "y" 153 - t->testUnify(x, y, ~subst=emptySubst->substAdd(0, Symbol({name: "y"}))) 166 + t->testUnify(x, y, ~subst=emptySubst->substAdd(0, Symbol({name: "y", constructor: false}))) 154 167 }) 155 168 t->block("flex-rigid2", t => { 156 169 let x = "(x. ?0 x)" ··· 162 175 ~reduce=false, 163 176 ~subst=emptySubst->substAdd( 164 177 0, 165 - Lam({name: "x", body: App({func: Symbol({name: "y"}), arg: Var({idx: 0})})}), 178 + Lam({ 179 + name: "x", 180 + body: App({func: Symbol({name: "y", constructor: false}), arg: Var({idx: 0})}), 181 + }), 166 182 ), 167 183 ) 168 - t->testUnify(x, y, ~reduce=true, ~subst=emptySubst->substAdd(0, Symbol({name: "y"}))) 184 + t->testUnify( 185 + x, 186 + y, 187 + ~reduce=true, 188 + ~subst=emptySubst->substAdd(0, Symbol({name: "y", constructor: false})), 189 + ) 169 190 }) 170 191 t->block("flex-rigid3", t => { 171 192 let x = "(?0 \\10)" 172 193 let y = "(fst \\10)" 173 - t->testUnify(x, y, ~reduce=true, ~subst=emptySubst->substAdd(0, Symbol({name: "fst"}))) 194 + t->testUnify( 195 + x, 196 + y, 197 + ~reduce=true, 198 + ~subst=emptySubst->substAdd(0, Symbol({name: "fst", constructor: false})), 199 + ) 174 200 }) 175 201 t->block("flex-rigid", t => { 176 202 let x = "(?0 \\10)" ··· 183 209 Lam({ 184 210 name: "x", 185 211 body: App({ 186 - func: Symbol({name: "r"}), 187 - arg: App({func: Symbol({name: "fst"}), arg: Var({idx: 0})}), 212 + func: Symbol({name: "r", constructor: false}), 213 + arg: App({func: Symbol({name: "fst", constructor: false}), arg: Var({idx: 0})}), 188 214 }), 189 215 }), 190 216 ), ··· 198 224 y, 199 225 ~subst=emptySubst->substAdd( 200 226 0, 201 - HOTerm.parse("(x. (r (fst x)))", ~scope=[])->Result.getExn->fst, 227 + HOTerm.parse("(x. (r (fst x)))", ~scope=[])->Result.getExn->Pair.first, 202 228 ), 203 229 ) 204 230 }) ··· 210 236 y, 211 237 ~subst=emptySubst->substAdd( 212 238 1, 213 - HOTerm.parse("(x. x. (r (q \\0 \\1)))", ~scope=[])->Result.getExn->fst, 239 + HOTerm.parse("(x. x. (r (q \\0 \\1)))", ~scope=[])->Result.getExn->Pair.first, 214 240 ), 215 241 ) 216 242 }) ··· 222 248 y, 223 249 ~subst=emptySubst->substAdd( 224 250 1, 225 - HOTerm.parse("(x. x. (r (q (snd \\0) \\1)))", ~scope=[])->Result.getExn->fst, 251 + HOTerm.parse("(x. x. (r (q (snd \\0) \\1)))", ~scope=[])->Result.getExn->Pair.first, 226 252 ), 227 253 ) 228 254 }) ··· 265 291 "(x. ?0 x)", 266 292 "a", 267 293 ~reduce=true, 268 - ~subst=emptySubst->substAdd(0, Symbol({name: "a"})), 294 + ~subst=emptySubst->substAdd(0, Symbol({name: "a", constructor: false})), 269 295 ) 270 296 }) 271 - t->block("divergent", t => { 272 - let divergent = "((x. x x) (x. x x))" 273 - let a = "((x. ?0 x) (x. x x))" 297 + t->block("divergent", _t => { 298 + let _divergent = "((x. x x) (x. x x))" 299 + let _a = "((x. ?0 x) (x. x x))" 274 300 // we don't care 275 301 // t->Util.testNotUnify(a, divergent) 276 302 }) ··· 278 304 let a = "(?0 \\0 \\0)" 279 305 let b = "\\0" 280 306 t->testUnify(a, b, ~subst=emptySubst->substAdd(0, t->Util.parse("(x. x. \\0)"))) 307 + }) 308 + t->block("dup var 2", t => { 309 + let a = "(k. ?0 k k)" 310 + let b = "(k. G k)" 311 + t->testUnify(a, b, ~subst=emptySubst->substAdd(0, t->Util.parse("(x. x. G x)"))) 281 312 }) 282 313 // Yokoyama et al.'s example in A Functional Implementation of Function-as-Constructor Higher-Order Unification Makoto Hamana1 283 314 t->block("break global resctriction", t => { ··· 312 343 t->Util.testUnifyFail(a, b) 313 344 t->testUnify(c, b, ~subst=emptySubst->substAdd(6, t->Util.parse("(x. S \\0)"))) 314 345 }) 315 - t->block("tests from induction examples", t => { 316 - let r = ("((?0 \\0) (?1 \\0))") 317 - let g = ("(f \\0)") 346 + t->block("tests from induction examples", _t => { 347 + let _r = "((?0 \\0) (?1 \\0))" 348 + let _g = "(f \\0)" 318 349 // what it's currently doing: 319 350 // 0 := (x. y. f x) 320 351 // 1 := doesn't matter
+4 -4
tests/RuleTest.res
··· 7 7 let res = RuleInst.parseInner(input, ~scope, ~gen=Term.makeGen()) 8 8 switch res { 9 9 | Ok(res) => { 10 - t->equal(res->snd, "", ~msg=input ++ " input consumed") 11 - t->equal(res->fst, expect, ~msg?) 10 + t->equal(res->Pair.second, "", ~msg=input ++ " input consumed") 11 + t->equal(res->Pair.first, expect, ~msg?) 12 12 } 13 13 | Error(msg) => t->fail(~msg="parse failed: " ++ msg) 14 14 } ··· 23 23 let res = RuleInst.parseTopLevel(input, ~scope, ~gen=Term.makeGen()) 24 24 switch res { 25 25 | Ok(res) => { 26 - t->equal(res->snd, "", ~msg=input ++ " input consumed") 27 - t->equal(res->fst, expect, ~msg?) 26 + t->equal(res->Pair.second, "", ~msg=input ++ " input consumed") 27 + t->equal(res->Pair.first, expect, ~msg?) 28 28 } 29 29 | Error(msg) => t->fail(~msg="parse failed: " ++ msg) 30 30 }
+2 -1
tests/SExpTest.res
··· 40 40 }) 41 41 }) 42 42 43 - let parse = (input: string) => SExp.parse(input, ~scope=[], ~gen=SExp.makeGen())->Result.getExn->fst 43 + let parse = (input: string) => 44 + SExp.parse(input, ~scope=[], ~gen=SExp.makeGen())->Result.getExn->Pair.first 44 45 45 46 zoraBlock("unify var", t => { 46 47 let x = parse("x")
+1 -1
tests/StringTermTest.res
··· 38 38 }) 39 39 40 40 let parse = (input: string) => 41 - StringTerm.parse(input, ~scope=[], ~gen=StringTerm.makeGen())->Result.getExn->fst 41 + StringTerm.parse(input, ~scope=[], ~gen=StringTerm.makeGen())->Result.getExn->Pair.first 42 42 43 43 zoraBlock("unify", t => { 44 44 let a = parse(`"a"`)
+3 -3
tests/TestUtil.res
··· 52 52 53 53 switch res { 54 54 | Ok(res) => { 55 - let result = Term.prettyPrint(res->fst, ~scope) 55 + let result = Term.prettyPrint(res->Pair.first, ~scope) 56 56 t->equal(result, expected, ~msg="prettyPrint output matches expected") 57 57 } 58 58 | Error(msg) => t->fail(~msg="parse failed: " ++ msg) ··· 64 64 | Ok((term, "")) => term 65 65 | Ok((_, rest)) => { 66 66 t->fail(~msg="parse incomplete: " ++ rest) 67 - raise(Unreachable("")) 67 + throw(Unreachable("")) 68 68 } 69 69 | Error(msg) => { 70 70 t->fail(~msg="parse failed: " ++ msg) 71 - raise(Unreachable("")) 71 + throw(Unreachable("")) 72 72 } 73 73 } 74 74 }