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.

Merge pull request #22 from mio-19/main

chore: npm update, update rescript to 12.1.0 and refactor: new file HOTermMethod

authored by

Liam O'Connor and committed by
GitHub
c8e6ee57 25c461dd

+1016 -990
+540 -517
package-lock.json
··· 36 36 } 37 37 }, 38 38 "node_modules/@babel/code-frame": { 39 - "version": "7.27.1", 40 - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", 41 - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", 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 42 "dev": true, 43 43 "license": "MIT", 44 44 "dependencies": { 45 - "@babel/helper-validator-identifier": "^7.27.1", 45 + "@babel/helper-validator-identifier": "^7.28.5", 46 46 "js-tokens": "^4.0.0", 47 47 "picocolors": "^1.1.1" 48 48 }, ··· 51 51 } 52 52 }, 53 53 "node_modules/@babel/compat-data": { 54 - "version": "7.28.5", 55 - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", 56 - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", 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 57 "dev": true, 58 58 "license": "MIT", 59 59 "engines": { ··· 61 61 } 62 62 }, 63 63 "node_modules/@babel/core": { 64 - "version": "7.28.5", 65 - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", 66 - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", 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 67 "dev": true, 68 68 "license": "MIT", 69 - "peer": true, 70 69 "dependencies": { 71 - "@babel/code-frame": "^7.27.1", 72 - "@babel/generator": "^7.28.5", 73 - "@babel/helper-compilation-targets": "^7.27.2", 74 - "@babel/helper-module-transforms": "^7.28.3", 75 - "@babel/helpers": "^7.28.4", 76 - "@babel/parser": "^7.28.5", 77 - "@babel/template": "^7.27.2", 78 - "@babel/traverse": "^7.28.5", 79 - "@babel/types": "^7.28.5", 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", 80 79 "@jridgewell/remapping": "^2.3.5", 81 80 "convert-source-map": "^2.0.0", 82 81 "debug": "^4.1.0", ··· 93 92 } 94 93 }, 95 94 "node_modules/@babel/generator": { 96 - "version": "7.28.5", 97 - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", 98 - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", 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==", 99 98 "dev": true, 100 99 "license": "MIT", 101 100 "dependencies": { 102 - "@babel/parser": "^7.28.5", 103 - "@babel/types": "^7.28.5", 101 + "@babel/parser": "^7.29.0", 102 + "@babel/types": "^7.29.0", 104 103 "@jridgewell/gen-mapping": "^0.3.12", 105 104 "@jridgewell/trace-mapping": "^0.3.28", 106 105 "jsesc": "^3.0.2" ··· 110 109 } 111 110 }, 112 111 "node_modules/@babel/helper-compilation-targets": { 113 - "version": "7.27.2", 114 - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", 115 - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", 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==", 116 115 "dev": true, 117 116 "license": "MIT", 118 117 "dependencies": { 119 - "@babel/compat-data": "^7.27.2", 118 + "@babel/compat-data": "^7.28.6", 120 119 "@babel/helper-validator-option": "^7.27.1", 121 120 "browserslist": "^4.24.0", 122 121 "lru-cache": "^5.1.1", ··· 137 136 } 138 137 }, 139 138 "node_modules/@babel/helper-module-imports": { 140 - "version": "7.27.1", 141 - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", 142 - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", 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==", 143 142 "dev": true, 144 143 "license": "MIT", 145 144 "dependencies": { 146 - "@babel/traverse": "^7.27.1", 147 - "@babel/types": "^7.27.1" 145 + "@babel/traverse": "^7.28.6", 146 + "@babel/types": "^7.28.6" 148 147 }, 149 148 "engines": { 150 149 "node": ">=6.9.0" 151 150 } 152 151 }, 153 152 "node_modules/@babel/helper-module-transforms": { 154 - "version": "7.28.3", 155 - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", 156 - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", 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==", 157 156 "dev": true, 158 157 "license": "MIT", 159 158 "dependencies": { 160 - "@babel/helper-module-imports": "^7.27.1", 161 - "@babel/helper-validator-identifier": "^7.27.1", 162 - "@babel/traverse": "^7.28.3" 159 + "@babel/helper-module-imports": "^7.28.6", 160 + "@babel/helper-validator-identifier": "^7.28.5", 161 + "@babel/traverse": "^7.28.6" 163 162 }, 164 163 "engines": { 165 164 "node": ">=6.9.0" ··· 199 198 } 200 199 }, 201 200 "node_modules/@babel/helpers": { 202 - "version": "7.28.4", 203 - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", 204 - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", 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==", 205 204 "dev": true, 206 205 "license": "MIT", 207 206 "dependencies": { 208 - "@babel/template": "^7.27.2", 209 - "@babel/types": "^7.28.4" 207 + "@babel/template": "^7.28.6", 208 + "@babel/types": "^7.28.6" 210 209 }, 211 210 "engines": { 212 211 "node": ">=6.9.0" 213 212 } 214 213 }, 215 214 "node_modules/@babel/parser": { 216 - "version": "7.28.5", 217 - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", 218 - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", 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==", 219 218 "dev": true, 220 219 "license": "MIT", 221 220 "dependencies": { 222 - "@babel/types": "^7.28.5" 221 + "@babel/types": "^7.29.0" 223 222 }, 224 223 "bin": { 225 224 "parser": "bin/babel-parser.js" ··· 229 228 } 230 229 }, 231 230 "node_modules/@babel/template": { 232 - "version": "7.27.2", 233 - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", 234 - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", 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==", 235 234 "dev": true, 236 235 "license": "MIT", 237 236 "dependencies": { 238 - "@babel/code-frame": "^7.27.1", 239 - "@babel/parser": "^7.27.2", 240 - "@babel/types": "^7.27.1" 237 + "@babel/code-frame": "^7.28.6", 238 + "@babel/parser": "^7.28.6", 239 + "@babel/types": "^7.28.6" 241 240 }, 242 241 "engines": { 243 242 "node": ">=6.9.0" 244 243 } 245 244 }, 246 245 "node_modules/@babel/traverse": { 247 - "version": "7.28.5", 248 - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", 249 - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", 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==", 250 249 "dev": true, 251 250 "license": "MIT", 252 251 "dependencies": { 253 - "@babel/code-frame": "^7.27.1", 254 - "@babel/generator": "^7.28.5", 252 + "@babel/code-frame": "^7.29.0", 253 + "@babel/generator": "^7.29.0", 255 254 "@babel/helper-globals": "^7.28.0", 256 - "@babel/parser": "^7.28.5", 257 - "@babel/template": "^7.27.2", 258 - "@babel/types": "^7.28.5", 255 + "@babel/parser": "^7.29.0", 256 + "@babel/template": "^7.28.6", 257 + "@babel/types": "^7.29.0", 259 258 "debug": "^4.3.1" 260 259 }, 261 260 "engines": { ··· 263 262 } 264 263 }, 265 264 "node_modules/@babel/types": { 266 - "version": "7.28.5", 267 - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", 268 - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", 265 + "version": "7.29.0", 266 + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", 267 + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", 269 268 "dev": true, 270 269 "license": "MIT", 271 270 "dependencies": { ··· 309 308 "license": "MIT" 310 309 }, 311 310 "node_modules/@esbuild/aix-ppc64": { 312 - "version": "0.25.12", 313 - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", 314 - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", 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==", 315 314 "cpu": [ 316 315 "ppc64" 317 316 ], ··· 326 325 } 327 326 }, 328 327 "node_modules/@esbuild/android-arm": { 329 - "version": "0.25.12", 330 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", 331 - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", 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==", 332 331 "cpu": [ 333 332 "arm" 334 333 ], ··· 343 342 } 344 343 }, 345 344 "node_modules/@esbuild/android-arm64": { 346 - "version": "0.25.12", 347 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", 348 - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", 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==", 349 348 "cpu": [ 350 349 "arm64" 351 350 ], ··· 360 359 } 361 360 }, 362 361 "node_modules/@esbuild/android-x64": { 363 - "version": "0.25.12", 364 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", 365 - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", 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==", 366 365 "cpu": [ 367 366 "x64" 368 367 ], ··· 377 376 } 378 377 }, 379 378 "node_modules/@esbuild/darwin-arm64": { 380 - "version": "0.25.12", 381 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", 382 - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", 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==", 383 382 "cpu": [ 384 383 "arm64" 385 384 ], ··· 394 393 } 395 394 }, 396 395 "node_modules/@esbuild/darwin-x64": { 397 - "version": "0.25.12", 398 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", 399 - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", 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==", 400 399 "cpu": [ 401 400 "x64" 402 401 ], ··· 411 410 } 412 411 }, 413 412 "node_modules/@esbuild/freebsd-arm64": { 414 - "version": "0.25.12", 415 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", 416 - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", 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==", 417 416 "cpu": [ 418 417 "arm64" 419 418 ], ··· 428 427 } 429 428 }, 430 429 "node_modules/@esbuild/freebsd-x64": { 431 - "version": "0.25.12", 432 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", 433 - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", 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==", 434 433 "cpu": [ 435 434 "x64" 436 435 ], ··· 445 444 } 446 445 }, 447 446 "node_modules/@esbuild/linux-arm": { 448 - "version": "0.25.12", 449 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", 450 - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", 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==", 451 450 "cpu": [ 452 451 "arm" 453 452 ], ··· 462 461 } 463 462 }, 464 463 "node_modules/@esbuild/linux-arm64": { 465 - "version": "0.25.12", 466 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", 467 - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", 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==", 468 467 "cpu": [ 469 468 "arm64" 470 469 ], ··· 479 478 } 480 479 }, 481 480 "node_modules/@esbuild/linux-ia32": { 482 - "version": "0.25.12", 483 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", 484 - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", 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==", 485 484 "cpu": [ 486 485 "ia32" 487 486 ], ··· 496 495 } 497 496 }, 498 497 "node_modules/@esbuild/linux-loong64": { 499 - "version": "0.25.12", 500 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", 501 - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", 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==", 502 501 "cpu": [ 503 502 "loong64" 504 503 ], ··· 513 512 } 514 513 }, 515 514 "node_modules/@esbuild/linux-mips64el": { 516 - "version": "0.25.12", 517 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", 518 - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", 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==", 519 518 "cpu": [ 520 519 "mips64el" 521 520 ], ··· 530 529 } 531 530 }, 532 531 "node_modules/@esbuild/linux-ppc64": { 533 - "version": "0.25.12", 534 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", 535 - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", 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==", 536 535 "cpu": [ 537 536 "ppc64" 538 537 ], ··· 547 546 } 548 547 }, 549 548 "node_modules/@esbuild/linux-riscv64": { 550 - "version": "0.25.12", 551 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", 552 - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", 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==", 553 552 "cpu": [ 554 553 "riscv64" 555 554 ], ··· 564 563 } 565 564 }, 566 565 "node_modules/@esbuild/linux-s390x": { 567 - "version": "0.25.12", 568 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", 569 - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", 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==", 570 569 "cpu": [ 571 570 "s390x" 572 571 ], ··· 581 580 } 582 581 }, 583 582 "node_modules/@esbuild/linux-x64": { 584 - "version": "0.25.12", 585 - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", 586 - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", 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==", 587 586 "cpu": [ 588 587 "x64" 589 588 ], ··· 598 597 } 599 598 }, 600 599 "node_modules/@esbuild/netbsd-arm64": { 601 - "version": "0.25.12", 602 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", 603 - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", 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==", 604 603 "cpu": [ 605 604 "arm64" 606 605 ], ··· 615 614 } 616 615 }, 617 616 "node_modules/@esbuild/netbsd-x64": { 618 - "version": "0.25.12", 619 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", 620 - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", 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==", 621 620 "cpu": [ 622 621 "x64" 623 622 ], ··· 632 631 } 633 632 }, 634 633 "node_modules/@esbuild/openbsd-arm64": { 635 - "version": "0.25.12", 636 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", 637 - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", 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==", 638 637 "cpu": [ 639 638 "arm64" 640 639 ], ··· 649 648 } 650 649 }, 651 650 "node_modules/@esbuild/openbsd-x64": { 652 - "version": "0.25.12", 653 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", 654 - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", 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==", 655 654 "cpu": [ 656 655 "x64" 657 656 ], ··· 666 665 } 667 666 }, 668 667 "node_modules/@esbuild/openharmony-arm64": { 669 - "version": "0.25.12", 670 - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", 671 - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", 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==", 672 671 "cpu": [ 673 672 "arm64" 674 673 ], ··· 683 682 } 684 683 }, 685 684 "node_modules/@esbuild/sunos-x64": { 686 - "version": "0.25.12", 687 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", 688 - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", 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==", 689 688 "cpu": [ 690 689 "x64" 691 690 ], ··· 700 699 } 701 700 }, 702 701 "node_modules/@esbuild/win32-arm64": { 703 - "version": "0.25.12", 704 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", 705 - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", 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==", 706 705 "cpu": [ 707 706 "arm64" 708 707 ], ··· 717 716 } 718 717 }, 719 718 "node_modules/@esbuild/win32-ia32": { 720 - "version": "0.25.12", 721 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", 722 - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", 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==", 723 722 "cpu": [ 724 723 "ia32" 725 724 ], ··· 734 733 } 735 734 }, 736 735 "node_modules/@esbuild/win32-x64": { 737 - "version": "0.25.12", 738 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", 739 - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", 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==", 740 739 "cpu": [ 741 740 "x64" 742 741 ], ··· 751 750 } 752 751 }, 753 752 "node_modules/@eslint-community/eslint-utils": { 754 - "version": "4.9.0", 755 - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", 756 - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", 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==", 757 756 "dev": true, 758 757 "license": "MIT", 759 758 "dependencies": { ··· 871 870 } 872 871 }, 873 872 "node_modules/@eslint/js": { 874 - "version": "9.39.1", 875 - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", 876 - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", 873 + "version": "9.39.2", 874 + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", 875 + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", 877 876 "dev": true, 878 877 "license": "MIT", 879 878 "engines": { ··· 1082 1081 } 1083 1082 }, 1084 1083 "node_modules/@rescript/darwin-arm64": { 1085 - "version": "12.0.0", 1086 - "resolved": "https://registry.npmjs.org/@rescript/darwin-arm64/-/darwin-arm64-12.0.0.tgz", 1087 - "integrity": "sha512-N2zNj/Uh0zrg8BJGWxdQjYTDf0d2ZV8D+Vmct8xORaUcEZvAkvZb+xA66UxP2QGhWmATcHmBth7oJ48xpWz/Vg==", 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==", 1088 1087 "cpu": [ 1089 1088 "arm64" 1090 1089 ], ··· 1097 1096 } 1098 1097 }, 1099 1098 "node_modules/@rescript/darwin-x64": { 1100 - "version": "12.0.0", 1101 - "resolved": "https://registry.npmjs.org/@rescript/darwin-x64/-/darwin-x64-12.0.0.tgz", 1102 - "integrity": "sha512-Qx/ao3Fl2lx3rF8mbRsyRK5HGAx8pmzyCdpSIAaUun5wLBnsJbNqgvqUH7VeI2TwaczHvcIljrYmnB7T5LJdFQ==", 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==", 1103 1102 "cpu": [ 1104 1103 "x64" 1105 1104 ], ··· 1112 1111 } 1113 1112 }, 1114 1113 "node_modules/@rescript/linux-arm64": { 1115 - "version": "12.0.0", 1116 - "resolved": "https://registry.npmjs.org/@rescript/linux-arm64/-/linux-arm64-12.0.0.tgz", 1117 - "integrity": "sha512-H65csj/0uqqjYy235m0h5CFxbrsas6RoVfjy5Xjf91Vyg/r5R/QIGQvhMtFvl4QojYsa1wXzXGcujwXh+S15xQ==", 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==", 1118 1117 "cpu": [ 1119 1118 "arm64" 1120 1119 ], ··· 1127 1126 } 1128 1127 }, 1129 1128 "node_modules/@rescript/linux-x64": { 1130 - "version": "12.0.0", 1131 - "resolved": "https://registry.npmjs.org/@rescript/linux-x64/-/linux-x64-12.0.0.tgz", 1132 - "integrity": "sha512-WizQwyfMadxF096foZYU3I4zxcnNIc9XP7TP4fqdfe0v6OvQ5yHMI/uIfOsJ1GfNALce2UxvgS0pn67uxc55uA==", 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==", 1133 1132 "cpu": [ 1134 1133 "x64" 1135 1134 ], ··· 1142 1141 } 1143 1142 }, 1144 1143 "node_modules/@rescript/react": { 1145 - "version": "0.14.0", 1146 - "resolved": "https://registry.npmjs.org/@rescript/react/-/react-0.14.0.tgz", 1147 - "integrity": "sha512-ncOHWK7ujQmff+QMYKRmtwETvJVolzkwRpDa0MFenEXdUz9ZYywNbq+xH9F9RDQeSwC3/4s9JeUQVyTu4fMpHw==", 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==", 1148 1147 "license": "MIT", 1149 1148 "peerDependencies": { 1150 - "react": ">=19.0.0", 1151 - "react-dom": ">=19.0.0" 1149 + "react": ">=19.1.0", 1150 + "react-dom": ">=19.1.0" 1152 1151 } 1153 1152 }, 1154 1153 "node_modules/@rescript/runtime": { 1155 - "version": "12.0.0", 1156 - "resolved": "https://registry.npmjs.org/@rescript/runtime/-/runtime-12.0.0.tgz", 1157 - "integrity": "sha512-STRbYHT5rnW61vWn2+Bdtj620XaprnoBSbPbkvOYZ+Zs8nfqtpBjhNw+JNpGQLXf73crk6MhxFGPxL2o5vb8TQ==" 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==" 1158 1157 }, 1159 1158 "node_modules/@rescript/std": { 1160 1159 "version": "11.1.4", ··· 1164 1163 "license": "SEE LICENSE IN LICENSE" 1165 1164 }, 1166 1165 "node_modules/@rescript/win32-x64": { 1167 - "version": "12.0.0", 1168 - "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-12.0.0.tgz", 1169 - "integrity": "sha512-kkqj4kQGbni5YglWoPm76M6hUuzKJHDEiLce5EZxW2Q4FrkS9dNRgm02c2Ck1cz/uKCS3m+ZoKQGIMMXTvo5Jw==", 1166 + "version": "12.1.0", 1167 + "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-12.1.0.tgz", 1168 + "integrity": "sha512-nQC42QByyAbryfkbyK67iskipUqXVwTPCFrqissY4jJoP0128gg0yG6DydJnV1stXphtFdMFHtmyYE1ffG7UBg==", 1170 1169 "cpu": [ 1171 1170 "x64" 1172 1171 ], ··· 1179 1178 } 1180 1179 }, 1181 1180 "node_modules/@rolldown/pluginutils": { 1182 - "version": "1.0.0-beta.47", 1183 - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz", 1184 - "integrity": "sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==", 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==", 1185 1184 "dev": true, 1186 1185 "license": "MIT" 1187 1186 }, 1188 1187 "node_modules/@rollup/rollup-android-arm-eabi": { 1189 - "version": "4.53.3", 1190 - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", 1191 - "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==", 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==", 1192 1191 "cpu": [ 1193 1192 "arm" 1194 1193 ], ··· 1200 1199 ] 1201 1200 }, 1202 1201 "node_modules/@rollup/rollup-android-arm64": { 1203 - "version": "4.53.3", 1204 - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz", 1205 - "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==", 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==", 1206 1205 "cpu": [ 1207 1206 "arm64" 1208 1207 ], ··· 1214 1213 ] 1215 1214 }, 1216 1215 "node_modules/@rollup/rollup-darwin-arm64": { 1217 - "version": "4.53.3", 1218 - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz", 1219 - "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==", 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==", 1220 1219 "cpu": [ 1221 1220 "arm64" 1222 1221 ], ··· 1228 1227 ] 1229 1228 }, 1230 1229 "node_modules/@rollup/rollup-darwin-x64": { 1231 - "version": "4.53.3", 1232 - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz", 1233 - "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==", 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==", 1234 1233 "cpu": [ 1235 1234 "x64" 1236 1235 ], ··· 1242 1241 ] 1243 1242 }, 1244 1243 "node_modules/@rollup/rollup-freebsd-arm64": { 1245 - "version": "4.53.3", 1246 - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz", 1247 - "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==", 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==", 1248 1247 "cpu": [ 1249 1248 "arm64" 1250 1249 ], ··· 1256 1255 ] 1257 1256 }, 1258 1257 "node_modules/@rollup/rollup-freebsd-x64": { 1259 - "version": "4.53.3", 1260 - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz", 1261 - "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==", 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==", 1262 1261 "cpu": [ 1263 1262 "x64" 1264 1263 ], ··· 1270 1269 ] 1271 1270 }, 1272 1271 "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 1273 - "version": "4.53.3", 1274 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz", 1275 - "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==", 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==", 1276 1275 "cpu": [ 1277 1276 "arm" 1278 1277 ], ··· 1284 1283 ] 1285 1284 }, 1286 1285 "node_modules/@rollup/rollup-linux-arm-musleabihf": { 1287 - "version": "4.53.3", 1288 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz", 1289 - "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==", 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==", 1290 1289 "cpu": [ 1291 1290 "arm" 1292 1291 ], ··· 1298 1297 ] 1299 1298 }, 1300 1299 "node_modules/@rollup/rollup-linux-arm64-gnu": { 1301 - "version": "4.53.3", 1302 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz", 1303 - "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==", 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==", 1304 1303 "cpu": [ 1305 1304 "arm64" 1306 1305 ], ··· 1312 1311 ] 1313 1312 }, 1314 1313 "node_modules/@rollup/rollup-linux-arm64-musl": { 1315 - "version": "4.53.3", 1316 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz", 1317 - "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==", 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==", 1318 1317 "cpu": [ 1319 1318 "arm64" 1320 1319 ], ··· 1326 1325 ] 1327 1326 }, 1328 1327 "node_modules/@rollup/rollup-linux-loong64-gnu": { 1329 - "version": "4.53.3", 1330 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz", 1331 - "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==", 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==", 1331 + "cpu": [ 1332 + "loong64" 1333 + ], 1334 + "dev": true, 1335 + "license": "MIT", 1336 + "optional": true, 1337 + "os": [ 1338 + "linux" 1339 + ] 1340 + }, 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==", 1332 1345 "cpu": [ 1333 1346 "loong64" 1334 1347 ], ··· 1340 1353 ] 1341 1354 }, 1342 1355 "node_modules/@rollup/rollup-linux-ppc64-gnu": { 1343 - "version": "4.53.3", 1344 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz", 1345 - "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==", 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==", 1346 1373 "cpu": [ 1347 1374 "ppc64" 1348 1375 ], ··· 1354 1381 ] 1355 1382 }, 1356 1383 "node_modules/@rollup/rollup-linux-riscv64-gnu": { 1357 - "version": "4.53.3", 1358 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz", 1359 - "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==", 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==", 1360 1387 "cpu": [ 1361 1388 "riscv64" 1362 1389 ], ··· 1368 1395 ] 1369 1396 }, 1370 1397 "node_modules/@rollup/rollup-linux-riscv64-musl": { 1371 - "version": "4.53.3", 1372 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz", 1373 - "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==", 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==", 1374 1401 "cpu": [ 1375 1402 "riscv64" 1376 1403 ], ··· 1382 1409 ] 1383 1410 }, 1384 1411 "node_modules/@rollup/rollup-linux-s390x-gnu": { 1385 - "version": "4.53.3", 1386 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz", 1387 - "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==", 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==", 1388 1415 "cpu": [ 1389 1416 "s390x" 1390 1417 ], ··· 1396 1423 ] 1397 1424 }, 1398 1425 "node_modules/@rollup/rollup-linux-x64-gnu": { 1399 - "version": "4.53.3", 1400 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", 1401 - "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", 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==", 1402 1429 "cpu": [ 1403 1430 "x64" 1404 1431 ], ··· 1410 1437 ] 1411 1438 }, 1412 1439 "node_modules/@rollup/rollup-linux-x64-musl": { 1413 - "version": "4.53.3", 1414 - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz", 1415 - "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==", 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==", 1416 1443 "cpu": [ 1417 1444 "x64" 1418 1445 ], ··· 1423 1450 "linux" 1424 1451 ] 1425 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 + }, 1426 1467 "node_modules/@rollup/rollup-openharmony-arm64": { 1427 - "version": "4.53.3", 1428 - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz", 1429 - "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==", 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==", 1430 1471 "cpu": [ 1431 1472 "arm64" 1432 1473 ], ··· 1438 1479 ] 1439 1480 }, 1440 1481 "node_modules/@rollup/rollup-win32-arm64-msvc": { 1441 - "version": "4.53.3", 1442 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz", 1443 - "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==", 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==", 1444 1485 "cpu": [ 1445 1486 "arm64" 1446 1487 ], ··· 1452 1493 ] 1453 1494 }, 1454 1495 "node_modules/@rollup/rollup-win32-ia32-msvc": { 1455 - "version": "4.53.3", 1456 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz", 1457 - "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==", 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==", 1458 1499 "cpu": [ 1459 1500 "ia32" 1460 1501 ], ··· 1466 1507 ] 1467 1508 }, 1468 1509 "node_modules/@rollup/rollup-win32-x64-gnu": { 1469 - "version": "4.53.3", 1470 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz", 1471 - "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==", 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==", 1472 1513 "cpu": [ 1473 1514 "x64" 1474 1515 ], ··· 1480 1521 ] 1481 1522 }, 1482 1523 "node_modules/@rollup/rollup-win32-x64-msvc": { 1483 - "version": "4.53.3", 1484 - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz", 1485 - "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==", 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==", 1486 1527 "cpu": [ 1487 1528 "x64" 1488 1529 ], ··· 1507 1548 } 1508 1549 }, 1509 1550 "node_modules/@swc/core": { 1510 - "version": "1.15.3", 1511 - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.3.tgz", 1512 - "integrity": "sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==", 1551 + "version": "1.15.11", 1552 + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.11.tgz", 1553 + "integrity": "sha512-iLmLTodbYxU39HhMPaMUooPwO/zqJWvsqkrXv1ZI38rMb048p6N7qtAtTp37sw9NzSrvH6oli8EdDygo09IZ/w==", 1513 1554 "dev": true, 1514 1555 "hasInstallScript": true, 1515 1556 "license": "Apache-2.0", ··· 1525 1566 "url": "https://opencollective.com/swc" 1526 1567 }, 1527 1568 "optionalDependencies": { 1528 - "@swc/core-darwin-arm64": "1.15.3", 1529 - "@swc/core-darwin-x64": "1.15.3", 1530 - "@swc/core-linux-arm-gnueabihf": "1.15.3", 1531 - "@swc/core-linux-arm64-gnu": "1.15.3", 1532 - "@swc/core-linux-arm64-musl": "1.15.3", 1533 - "@swc/core-linux-x64-gnu": "1.15.3", 1534 - "@swc/core-linux-x64-musl": "1.15.3", 1535 - "@swc/core-win32-arm64-msvc": "1.15.3", 1536 - "@swc/core-win32-ia32-msvc": "1.15.3", 1537 - "@swc/core-win32-x64-msvc": "1.15.3" 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" 1538 1579 }, 1539 1580 "peerDependencies": { 1540 1581 "@swc/helpers": ">=0.5.17" ··· 1546 1587 } 1547 1588 }, 1548 1589 "node_modules/@swc/core-darwin-arm64": { 1549 - "version": "1.15.3", 1550 - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.3.tgz", 1551 - "integrity": "sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==", 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==", 1552 1593 "cpu": [ 1553 1594 "arm64" 1554 1595 ], ··· 1563 1604 } 1564 1605 }, 1565 1606 "node_modules/@swc/core-darwin-x64": { 1566 - "version": "1.15.3", 1567 - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.3.tgz", 1568 - "integrity": "sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==", 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==", 1569 1610 "cpu": [ 1570 1611 "x64" 1571 1612 ], ··· 1580 1621 } 1581 1622 }, 1582 1623 "node_modules/@swc/core-linux-arm-gnueabihf": { 1583 - "version": "1.15.3", 1584 - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.3.tgz", 1585 - "integrity": "sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==", 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==", 1586 1627 "cpu": [ 1587 1628 "arm" 1588 1629 ], ··· 1597 1638 } 1598 1639 }, 1599 1640 "node_modules/@swc/core-linux-arm64-gnu": { 1600 - "version": "1.15.3", 1601 - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.3.tgz", 1602 - "integrity": "sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==", 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==", 1603 1644 "cpu": [ 1604 1645 "arm64" 1605 1646 ], ··· 1614 1655 } 1615 1656 }, 1616 1657 "node_modules/@swc/core-linux-arm64-musl": { 1617 - "version": "1.15.3", 1618 - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.3.tgz", 1619 - "integrity": "sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==", 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==", 1620 1661 "cpu": [ 1621 1662 "arm64" 1622 1663 ], ··· 1631 1672 } 1632 1673 }, 1633 1674 "node_modules/@swc/core-linux-x64-gnu": { 1634 - "version": "1.15.3", 1635 - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.3.tgz", 1636 - "integrity": "sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==", 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==", 1637 1678 "cpu": [ 1638 1679 "x64" 1639 1680 ], ··· 1648 1689 } 1649 1690 }, 1650 1691 "node_modules/@swc/core-linux-x64-musl": { 1651 - "version": "1.15.3", 1652 - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.3.tgz", 1653 - "integrity": "sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==", 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==", 1654 1695 "cpu": [ 1655 1696 "x64" 1656 1697 ], ··· 1665 1706 } 1666 1707 }, 1667 1708 "node_modules/@swc/core-win32-arm64-msvc": { 1668 - "version": "1.15.3", 1669 - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.3.tgz", 1670 - "integrity": "sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==", 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==", 1671 1712 "cpu": [ 1672 1713 "arm64" 1673 1714 ], ··· 1682 1723 } 1683 1724 }, 1684 1725 "node_modules/@swc/core-win32-ia32-msvc": { 1685 - "version": "1.15.3", 1686 - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.3.tgz", 1687 - "integrity": "sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==", 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==", 1688 1729 "cpu": [ 1689 1730 "ia32" 1690 1731 ], ··· 1699 1740 } 1700 1741 }, 1701 1742 "node_modules/@swc/core-win32-x64-msvc": { 1702 - "version": "1.15.3", 1703 - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.3.tgz", 1704 - "integrity": "sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==", 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==", 1705 1746 "cpu": [ 1706 1747 "x64" 1707 1748 ], ··· 1747 1788 "license": "MIT" 1748 1789 }, 1749 1790 "node_modules/@types/react": { 1750 - "version": "19.2.7", 1751 - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", 1752 - "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", 1791 + "version": "19.2.13", 1792 + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.13.tgz", 1793 + "integrity": "sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==", 1753 1794 "dev": true, 1754 1795 "license": "MIT", 1755 - "peer": true, 1756 1796 "dependencies": { 1757 1797 "csstype": "^3.2.2" 1758 1798 } ··· 1768 1808 } 1769 1809 }, 1770 1810 "node_modules/@typescript-eslint/eslint-plugin": { 1771 - "version": "8.48.1", 1772 - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.1.tgz", 1773 - "integrity": "sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==", 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==", 1774 1814 "dev": true, 1775 1815 "license": "MIT", 1776 1816 "dependencies": { 1777 - "@eslint-community/regexpp": "^4.10.0", 1778 - "@typescript-eslint/scope-manager": "8.48.1", 1779 - "@typescript-eslint/type-utils": "8.48.1", 1780 - "@typescript-eslint/utils": "8.48.1", 1781 - "@typescript-eslint/visitor-keys": "8.48.1", 1782 - "graphemer": "^1.4.0", 1783 - "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", 1784 1823 "natural-compare": "^1.4.0", 1785 - "ts-api-utils": "^2.1.0" 1824 + "ts-api-utils": "^2.4.0" 1786 1825 }, 1787 1826 "engines": { 1788 1827 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1792 1831 "url": "https://opencollective.com/typescript-eslint" 1793 1832 }, 1794 1833 "peerDependencies": { 1795 - "@typescript-eslint/parser": "^8.48.1", 1834 + "@typescript-eslint/parser": "^8.54.0", 1796 1835 "eslint": "^8.57.0 || ^9.0.0", 1797 1836 "typescript": ">=4.8.4 <6.0.0" 1798 1837 } ··· 1808 1847 } 1809 1848 }, 1810 1849 "node_modules/@typescript-eslint/parser": { 1811 - "version": "8.48.1", 1812 - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.1.tgz", 1813 - "integrity": "sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==", 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==", 1814 1853 "dev": true, 1815 1854 "license": "MIT", 1816 - "peer": true, 1817 1855 "dependencies": { 1818 - "@typescript-eslint/scope-manager": "8.48.1", 1819 - "@typescript-eslint/types": "8.48.1", 1820 - "@typescript-eslint/typescript-estree": "8.48.1", 1821 - "@typescript-eslint/visitor-keys": "8.48.1", 1822 - "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" 1823 1861 }, 1824 1862 "engines": { 1825 1863 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1834 1872 } 1835 1873 }, 1836 1874 "node_modules/@typescript-eslint/project-service": { 1837 - "version": "8.48.1", 1838 - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.1.tgz", 1839 - "integrity": "sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==", 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==", 1840 1878 "dev": true, 1841 1879 "license": "MIT", 1842 1880 "dependencies": { 1843 - "@typescript-eslint/tsconfig-utils": "^8.48.1", 1844 - "@typescript-eslint/types": "^8.48.1", 1845 - "debug": "^4.3.4" 1881 + "@typescript-eslint/tsconfig-utils": "^8.54.0", 1882 + "@typescript-eslint/types": "^8.54.0", 1883 + "debug": "^4.4.3" 1846 1884 }, 1847 1885 "engines": { 1848 1886 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1856 1894 } 1857 1895 }, 1858 1896 "node_modules/@typescript-eslint/scope-manager": { 1859 - "version": "8.48.1", 1860 - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.1.tgz", 1861 - "integrity": "sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==", 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==", 1862 1900 "dev": true, 1863 1901 "license": "MIT", 1864 1902 "dependencies": { 1865 - "@typescript-eslint/types": "8.48.1", 1866 - "@typescript-eslint/visitor-keys": "8.48.1" 1903 + "@typescript-eslint/types": "8.54.0", 1904 + "@typescript-eslint/visitor-keys": "8.54.0" 1867 1905 }, 1868 1906 "engines": { 1869 1907 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1874 1912 } 1875 1913 }, 1876 1914 "node_modules/@typescript-eslint/tsconfig-utils": { 1877 - "version": "8.48.1", 1878 - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.1.tgz", 1879 - "integrity": "sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==", 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==", 1880 1918 "dev": true, 1881 1919 "license": "MIT", 1882 1920 "engines": { ··· 1891 1929 } 1892 1930 }, 1893 1931 "node_modules/@typescript-eslint/type-utils": { 1894 - "version": "8.48.1", 1895 - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.1.tgz", 1896 - "integrity": "sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==", 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==", 1897 1935 "dev": true, 1898 1936 "license": "MIT", 1899 1937 "dependencies": { 1900 - "@typescript-eslint/types": "8.48.1", 1901 - "@typescript-eslint/typescript-estree": "8.48.1", 1902 - "@typescript-eslint/utils": "8.48.1", 1903 - "debug": "^4.3.4", 1904 - "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" 1905 1943 }, 1906 1944 "engines": { 1907 1945 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1916 1954 } 1917 1955 }, 1918 1956 "node_modules/@typescript-eslint/types": { 1919 - "version": "8.48.1", 1920 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.1.tgz", 1921 - "integrity": "sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==", 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==", 1922 1960 "dev": true, 1923 1961 "license": "MIT", 1924 1962 "engines": { ··· 1930 1968 } 1931 1969 }, 1932 1970 "node_modules/@typescript-eslint/typescript-estree": { 1933 - "version": "8.48.1", 1934 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.1.tgz", 1935 - "integrity": "sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==", 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==", 1936 1974 "dev": true, 1937 1975 "license": "MIT", 1938 1976 "dependencies": { 1939 - "@typescript-eslint/project-service": "8.48.1", 1940 - "@typescript-eslint/tsconfig-utils": "8.48.1", 1941 - "@typescript-eslint/types": "8.48.1", 1942 - "@typescript-eslint/visitor-keys": "8.48.1", 1943 - "debug": "^4.3.4", 1944 - "minimatch": "^9.0.4", 1945 - "semver": "^7.6.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", 1946 1984 "tinyglobby": "^0.2.15", 1947 - "ts-api-utils": "^2.1.0" 1985 + "ts-api-utils": "^2.4.0" 1948 1986 }, 1949 1987 "engines": { 1950 1988 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 1984 2022 } 1985 2023 }, 1986 2024 "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { 1987 - "version": "7.7.3", 1988 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 1989 - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 2025 + "version": "7.7.4", 2026 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", 2027 + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", 1990 2028 "dev": true, 1991 2029 "license": "ISC", 1992 2030 "bin": { ··· 1997 2035 } 1998 2036 }, 1999 2037 "node_modules/@typescript-eslint/utils": { 2000 - "version": "8.48.1", 2001 - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.1.tgz", 2002 - "integrity": "sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==", 2038 + "version": "8.54.0", 2039 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.54.0.tgz", 2040 + "integrity": "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==", 2003 2041 "dev": true, 2004 2042 "license": "MIT", 2005 2043 "dependencies": { 2006 - "@eslint-community/eslint-utils": "^4.7.0", 2007 - "@typescript-eslint/scope-manager": "8.48.1", 2008 - "@typescript-eslint/types": "8.48.1", 2009 - "@typescript-eslint/typescript-estree": "8.48.1" 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" 2010 2048 }, 2011 2049 "engines": { 2012 2050 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 2021 2059 } 2022 2060 }, 2023 2061 "node_modules/@typescript-eslint/visitor-keys": { 2024 - "version": "8.48.1", 2025 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.1.tgz", 2026 - "integrity": "sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==", 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==", 2027 2065 "dev": true, 2028 2066 "license": "MIT", 2029 2067 "dependencies": { 2030 - "@typescript-eslint/types": "8.48.1", 2068 + "@typescript-eslint/types": "8.54.0", 2031 2069 "eslint-visitor-keys": "^4.2.1" 2032 2070 }, 2033 2071 "engines": { ··· 2039 2077 } 2040 2078 }, 2041 2079 "node_modules/@vitejs/plugin-react-swc": { 2042 - "version": "4.2.2", 2043 - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.2.2.tgz", 2044 - "integrity": "sha512-x+rE6tsxq/gxrEJN3Nv3dIV60lFflPj94c90b+NNo6n1QV1QQUTLoL0MpaOVasUZ0zqVBn7ead1B5ecx1JAGfA==", 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==", 2045 2083 "dev": true, 2046 2084 "license": "MIT", 2047 2085 "dependencies": { 2048 - "@rolldown/pluginutils": "1.0.0-beta.47", 2049 - "@swc/core": "^1.13.5" 2086 + "@rolldown/pluginutils": "1.0.0-rc.2", 2087 + "@swc/core": "^1.15.11" 2050 2088 }, 2051 2089 "engines": { 2052 2090 "node": "^20.19.0 || >=22.12.0" ··· 2061 2099 "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 2062 2100 "dev": true, 2063 2101 "license": "MIT", 2064 - "peer": true, 2065 2102 "bin": { 2066 2103 "acorn": "bin/acorn" 2067 2104 }, ··· 2097 2134 } 2098 2135 }, 2099 2136 "node_modules/ansi-escapes": { 2100 - "version": "7.2.0", 2101 - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", 2102 - "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", 2137 + "version": "7.3.0", 2138 + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", 2139 + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", 2103 2140 "dev": true, 2104 2141 "license": "MIT", 2105 2142 "dependencies": { ··· 2177 2214 "license": "MIT" 2178 2215 }, 2179 2216 "node_modules/baseline-browser-mapping": { 2180 - "version": "2.8.32", 2181 - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.32.tgz", 2182 - "integrity": "sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw==", 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==", 2183 2220 "dev": true, 2184 2221 "license": "Apache-2.0", 2185 2222 "bin": { ··· 2224 2261 } 2225 2262 }, 2226 2263 "node_modules/browserslist": { 2227 - "version": "4.28.0", 2228 - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", 2229 - "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", 2264 + "version": "4.28.1", 2265 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", 2266 + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", 2230 2267 "dev": true, 2231 2268 "funding": [ 2232 2269 { ··· 2243 2280 } 2244 2281 ], 2245 2282 "license": "MIT", 2246 - "peer": true, 2247 2283 "dependencies": { 2248 - "baseline-browser-mapping": "^2.8.25", 2249 - "caniuse-lite": "^1.0.30001754", 2250 - "electron-to-chromium": "^1.5.249", 2284 + "baseline-browser-mapping": "^2.9.0", 2285 + "caniuse-lite": "^1.0.30001759", 2286 + "electron-to-chromium": "^1.5.263", 2251 2287 "node-releases": "^2.0.27", 2252 - "update-browserslist-db": "^1.1.4" 2288 + "update-browserslist-db": "^1.2.0" 2253 2289 }, 2254 2290 "bin": { 2255 2291 "browserslist": "cli.js" ··· 2269 2305 } 2270 2306 }, 2271 2307 "node_modules/caniuse-lite": { 2272 - "version": "1.0.30001757", 2273 - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", 2274 - "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==", 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==", 2275 2311 "dev": true, 2276 2312 "funding": [ 2277 2313 { ··· 2405 2441 "license": "MIT" 2406 2442 }, 2407 2443 "node_modules/commander": { 2408 - "version": "14.0.2", 2409 - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", 2410 - "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", 2444 + "version": "14.0.3", 2445 + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", 2446 + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", 2411 2447 "dev": true, 2412 2448 "license": "MIT", 2413 2449 "engines": { ··· 2476 2512 "license": "MIT" 2477 2513 }, 2478 2514 "node_modules/diff": { 2479 - "version": "5.2.0", 2480 - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", 2481 - "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==", 2482 2518 "dev": true, 2483 2519 "license": "BSD-3-Clause", 2484 2520 "engines": { ··· 2486 2522 } 2487 2523 }, 2488 2524 "node_modules/electron-to-chromium": { 2489 - "version": "1.5.263", 2490 - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.263.tgz", 2491 - "integrity": "sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg==", 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==", 2492 2528 "dev": true, 2493 2529 "license": "ISC" 2494 2530 }, ··· 2513 2549 } 2514 2550 }, 2515 2551 "node_modules/esbuild": { 2516 - "version": "0.25.12", 2517 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", 2518 - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", 2552 + "version": "0.27.3", 2553 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", 2554 + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", 2519 2555 "dev": true, 2520 2556 "hasInstallScript": true, 2521 2557 "license": "MIT", ··· 2526 2562 "node": ">=18" 2527 2563 }, 2528 2564 "optionalDependencies": { 2529 - "@esbuild/aix-ppc64": "0.25.12", 2530 - "@esbuild/android-arm": "0.25.12", 2531 - "@esbuild/android-arm64": "0.25.12", 2532 - "@esbuild/android-x64": "0.25.12", 2533 - "@esbuild/darwin-arm64": "0.25.12", 2534 - "@esbuild/darwin-x64": "0.25.12", 2535 - "@esbuild/freebsd-arm64": "0.25.12", 2536 - "@esbuild/freebsd-x64": "0.25.12", 2537 - "@esbuild/linux-arm": "0.25.12", 2538 - "@esbuild/linux-arm64": "0.25.12", 2539 - "@esbuild/linux-ia32": "0.25.12", 2540 - "@esbuild/linux-loong64": "0.25.12", 2541 - "@esbuild/linux-mips64el": "0.25.12", 2542 - "@esbuild/linux-ppc64": "0.25.12", 2543 - "@esbuild/linux-riscv64": "0.25.12", 2544 - "@esbuild/linux-s390x": "0.25.12", 2545 - "@esbuild/linux-x64": "0.25.12", 2546 - "@esbuild/netbsd-arm64": "0.25.12", 2547 - "@esbuild/netbsd-x64": "0.25.12", 2548 - "@esbuild/openbsd-arm64": "0.25.12", 2549 - "@esbuild/openbsd-x64": "0.25.12", 2550 - "@esbuild/openharmony-arm64": "0.25.12", 2551 - "@esbuild/sunos-x64": "0.25.12", 2552 - "@esbuild/win32-arm64": "0.25.12", 2553 - "@esbuild/win32-ia32": "0.25.12", 2554 - "@esbuild/win32-x64": "0.25.12" 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" 2555 2591 } 2556 2592 }, 2557 2593 "node_modules/escalade": { ··· 2578 2614 } 2579 2615 }, 2580 2616 "node_modules/eslint": { 2581 - "version": "9.39.1", 2582 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", 2583 - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", 2617 + "version": "9.39.2", 2618 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", 2619 + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", 2584 2620 "dev": true, 2585 2621 "license": "MIT", 2586 - "peer": true, 2587 2622 "dependencies": { 2588 2623 "@eslint-community/eslint-utils": "^4.8.0", 2589 2624 "@eslint-community/regexpp": "^4.12.1", ··· 2591 2626 "@eslint/config-helpers": "^0.4.2", 2592 2627 "@eslint/core": "^0.17.0", 2593 2628 "@eslint/eslintrc": "^3.3.1", 2594 - "@eslint/js": "9.39.1", 2629 + "@eslint/js": "9.39.2", 2595 2630 "@eslint/plugin-kit": "^0.4.1", 2596 2631 "@humanfs/node": "^0.16.6", 2597 2632 "@humanwhocodes/module-importer": "^1.0.1", ··· 2659 2694 } 2660 2695 }, 2661 2696 "node_modules/eslint-plugin-react-refresh": { 2662 - "version": "0.4.24", 2663 - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.24.tgz", 2664 - "integrity": "sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==", 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==", 2665 2700 "dev": true, 2666 2701 "license": "MIT", 2667 2702 "peerDependencies": { ··· 2717 2752 } 2718 2753 }, 2719 2754 "node_modules/esquery": { 2720 - "version": "1.6.0", 2721 - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 2722 - "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==", 2723 2758 "dev": true, 2724 2759 "license": "BSD-3-Clause", 2725 2760 "dependencies": { ··· 2763 2798 } 2764 2799 }, 2765 2800 "node_modules/eventemitter3": { 2766 - "version": "5.0.1", 2767 - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", 2768 - "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==", 2769 2804 "dev": true, 2770 2805 "license": "MIT" 2771 2806 }, ··· 2821 2856 "license": "MIT" 2822 2857 }, 2823 2858 "node_modules/fastq": { 2824 - "version": "1.19.1", 2825 - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", 2826 - "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==", 2827 2862 "dev": true, 2828 2863 "license": "ISC", 2829 2864 "dependencies": { ··· 2988 3023 "engines": { 2989 3024 "node": ">= 4" 2990 3025 } 2991 - }, 2992 - "node_modules/graphemer": { 2993 - "version": "1.4.0", 2994 - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2995 - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 2996 - "dev": true, 2997 - "license": "MIT" 2998 3026 }, 2999 3027 "node_modules/has-flag": { 3000 3028 "version": "4.0.0", ··· 3705 3733 "license": "MIT" 3706 3734 }, 3707 3735 "node_modules/react": { 3708 - "version": "19.2.0", 3709 - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", 3710 - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", 3736 + "version": "19.2.4", 3737 + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", 3738 + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", 3711 3739 "license": "MIT", 3712 - "peer": true, 3713 3740 "engines": { 3714 3741 "node": ">=0.10.0" 3715 3742 } 3716 3743 }, 3717 3744 "node_modules/react-dom": { 3718 - "version": "19.2.0", 3719 - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", 3720 - "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", 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==", 3721 3748 "license": "MIT", 3722 - "peer": true, 3723 3749 "dependencies": { 3724 3750 "scheduler": "^0.27.0" 3725 3751 }, 3726 3752 "peerDependencies": { 3727 - "react": "^19.2.0" 3753 + "react": "^19.2.4" 3728 3754 } 3729 3755 }, 3730 3756 "node_modules/readdirp": { ··· 3741 3767 } 3742 3768 }, 3743 3769 "node_modules/rescript": { 3744 - "version": "12.0.0", 3745 - "resolved": "https://registry.npmjs.org/rescript/-/rescript-12.0.0.tgz", 3746 - "integrity": "sha512-DGcZI2L5W0c6FuEnspLE0MIe1UtTt1VsW/vQfzBFCEBxSsQtoA6YRHUB8Puwnb30PHqZiFK1ADhn6UgA8LWK0A==", 3770 + "version": "12.1.0", 3771 + "resolved": "https://registry.npmjs.org/rescript/-/rescript-12.1.0.tgz", 3772 + "integrity": "sha512-n/B43wzIEKV4OmlrWbrlQOL4zZaz0RM/Cc8PG2YvhQvQDW7nscHJliDq1AGeVwHoMX68MeaKKzLDOMOMU9Z6FA==", 3747 3773 "license": "SEE LICENSE IN LICENSE", 3748 - "peer": true, 3749 3774 "workspaces": [ 3750 3775 "packages/playground", 3751 3776 "packages/@rescript/*", ··· 3757 3782 "scripts/res" 3758 3783 ], 3759 3784 "dependencies": { 3760 - "@rescript/runtime": "12.0.0" 3785 + "@rescript/runtime": "12.1.0" 3761 3786 }, 3762 3787 "bin": { 3763 3788 "bsc": "cli/bsc.js", ··· 3770 3795 "node": ">=20.11.0" 3771 3796 }, 3772 3797 "optionalDependencies": { 3773 - "@rescript/darwin-arm64": "12.0.0", 3774 - "@rescript/darwin-x64": "12.0.0", 3775 - "@rescript/linux-arm64": "12.0.0", 3776 - "@rescript/linux-x64": "12.0.0", 3777 - "@rescript/win32-x64": "12.0.0" 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" 3778 3803 } 3779 3804 }, 3780 3805 "node_modules/resolve-from": { ··· 3823 3848 "license": "MIT" 3824 3849 }, 3825 3850 "node_modules/rollup": { 3826 - "version": "4.53.3", 3827 - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", 3828 - "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", 3851 + "version": "4.57.1", 3852 + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", 3853 + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", 3829 3854 "dev": true, 3830 3855 "license": "MIT", 3831 3856 "dependencies": { ··· 3839 3864 "npm": ">=8.0.0" 3840 3865 }, 3841 3866 "optionalDependencies": { 3842 - "@rollup/rollup-android-arm-eabi": "4.53.3", 3843 - "@rollup/rollup-android-arm64": "4.53.3", 3844 - "@rollup/rollup-darwin-arm64": "4.53.3", 3845 - "@rollup/rollup-darwin-x64": "4.53.3", 3846 - "@rollup/rollup-freebsd-arm64": "4.53.3", 3847 - "@rollup/rollup-freebsd-x64": "4.53.3", 3848 - "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", 3849 - "@rollup/rollup-linux-arm-musleabihf": "4.53.3", 3850 - "@rollup/rollup-linux-arm64-gnu": "4.53.3", 3851 - "@rollup/rollup-linux-arm64-musl": "4.53.3", 3852 - "@rollup/rollup-linux-loong64-gnu": "4.53.3", 3853 - "@rollup/rollup-linux-ppc64-gnu": "4.53.3", 3854 - "@rollup/rollup-linux-riscv64-gnu": "4.53.3", 3855 - "@rollup/rollup-linux-riscv64-musl": "4.53.3", 3856 - "@rollup/rollup-linux-s390x-gnu": "4.53.3", 3857 - "@rollup/rollup-linux-x64-gnu": "4.53.3", 3858 - "@rollup/rollup-linux-x64-musl": "4.53.3", 3859 - "@rollup/rollup-openharmony-arm64": "4.53.3", 3860 - "@rollup/rollup-win32-arm64-msvc": "4.53.3", 3861 - "@rollup/rollup-win32-ia32-msvc": "4.53.3", 3862 - "@rollup/rollup-win32-x64-gnu": "4.53.3", 3863 - "@rollup/rollup-win32-x64-msvc": "4.53.3", 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", 3864 3892 "fsevents": "~2.3.2" 3865 3893 } 3866 3894 }, ··· 4004 4032 } 4005 4033 }, 4006 4034 "node_modules/string-width": { 4007 - "version": "8.1.0", 4008 - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", 4009 - "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==", 4010 4038 "dev": true, 4011 4039 "license": "MIT", 4012 4040 "dependencies": { ··· 4103 4131 "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 4104 4132 "dev": true, 4105 4133 "license": "MIT", 4106 - "peer": true, 4107 4134 "engines": { 4108 4135 "node": ">=12" 4109 4136 }, ··· 4135 4162 } 4136 4163 }, 4137 4164 "node_modules/ts-api-utils": { 4138 - "version": "2.1.0", 4139 - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", 4140 - "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==", 4141 4168 "dev": true, 4142 4169 "license": "MIT", 4143 4170 "engines": { ··· 4166 4193 "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 4167 4194 "dev": true, 4168 4195 "license": "Apache-2.0", 4169 - "peer": true, 4170 4196 "bin": { 4171 4197 "tsc": "bin/tsc", 4172 4198 "tsserver": "bin/tsserver" ··· 4176 4202 } 4177 4203 }, 4178 4204 "node_modules/typescript-eslint": { 4179 - "version": "8.48.1", 4180 - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.48.1.tgz", 4181 - "integrity": "sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==", 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==", 4182 4208 "dev": true, 4183 4209 "license": "MIT", 4184 4210 "dependencies": { 4185 - "@typescript-eslint/eslint-plugin": "8.48.1", 4186 - "@typescript-eslint/parser": "8.48.1", 4187 - "@typescript-eslint/typescript-estree": "8.48.1", 4188 - "@typescript-eslint/utils": "8.48.1" 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" 4189 4215 }, 4190 4216 "engines": { 4191 4217 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 4213 4239 } 4214 4240 }, 4215 4241 "node_modules/update-browserslist-db": { 4216 - "version": "1.1.4", 4217 - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", 4218 - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", 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==", 4219 4245 "dev": true, 4220 4246 "funding": [ 4221 4247 { ··· 4254 4280 } 4255 4281 }, 4256 4282 "node_modules/vite": { 4257 - "version": "7.2.6", 4258 - "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.6.tgz", 4259 - "integrity": "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==", 4283 + "version": "7.3.1", 4284 + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", 4285 + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", 4260 4286 "dev": true, 4261 4287 "license": "MIT", 4262 - "peer": true, 4263 4288 "dependencies": { 4264 - "esbuild": "^0.25.0", 4289 + "esbuild": "^0.27.0", 4265 4290 "fdir": "^6.5.0", 4266 4291 "picomatch": "^4.0.3", 4267 4292 "postcss": "^8.5.6", ··· 4353 4378 "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 4354 4379 "dev": true, 4355 4380 "license": "MIT", 4356 - "peer": true, 4357 4381 "engines": { 4358 4382 "node": ">=12" 4359 4383 }, ··· 4473 4497 } 4474 4498 }, 4475 4499 "node_modules/zod": { 4476 - "version": "4.1.13", 4477 - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", 4478 - "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", 4500 + "version": "4.3.6", 4501 + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", 4502 + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", 4479 4503 "dev": true, 4480 4504 "license": "MIT", 4481 - "peer": true, 4482 4505 "funding": { 4483 4506 "url": "https://github.com/sponsors/colinhacks" 4484 4507 }
+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 + }
-471
src/Method.res
··· 501 501 } 502 502 } 503 503 } 504 - 505 - module MakeRewriteHOTerm = ( 506 - Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 507 - Config: { 508 - let keyword: string 509 - let reversed: bool 510 - }, 511 - ) => { 512 - module Term = HOTerm 513 - module Rule = Rule.Make(HOTerm, Judgment) 514 - module Context = Context(HOTerm, Judgment) 515 - 516 - let extractEqualityTermsFromJudgment = (judgment: Judgment.t): option<(HOTerm.t, HOTerm.t)> => { 517 - let term: HOTerm.t = judgment 518 - switch HOTerm.strip(term) { 519 - | (HOTerm.Symbol({name: "="}), args) if Array.length(args) == 2 => 520 - Some((args->Array.getUnsafe(0), args->Array.getUnsafe(1))) 521 - | _ => None 522 - } 523 - } 524 - 525 - let extractEqualityTerms = (rule: Rule.t): option<(HOTerm.t, HOTerm.t)> => { 526 - if Array.length(rule.premises) != 0 { 527 - None 528 - } else { 529 - extractEqualityTermsFromJudgment(rule.conclusion) 530 - } 531 - } 532 - 533 - let extractEqualityTermsFromBare = (rule: Rule.bare): option<(HOTerm.t, HOTerm.t)> => { 534 - if Array.length(rule.premises) != 0 { 535 - None 536 - } else { 537 - extractEqualityTermsFromJudgment(rule.conclusion) 538 - } 539 - } 540 - 541 - let isEqualityRule = (rule: Rule.t): bool => { 542 - extractEqualityTerms(rule)->Option.isSome 543 - } 544 - 545 - type t<'a> = { 546 - equalityName: string, 547 - instantiation: array<Judgment.substCodom>, 548 - subgoal: 'a, 549 - } 550 - 551 - let keywords = [Config.keyword] 552 - 553 - let map = (it: t<'a>, f) => { 554 - { 555 - equalityName: it.equalityName, 556 - instantiation: it.instantiation, 557 - subgoal: f(it.subgoal), 558 - } 559 - } 560 - 561 - let substitute = (it: t<'a>, subst: Judgment.subst) => { 562 - { 563 - equalityName: it.equalityName, 564 - instantiation: it.instantiation->Array.map(t => t->Judgment.substituteSubstCodom(subst)), 565 - subgoal: it.subgoal, 566 - } 567 - } 568 - 569 - let prettyPrint = ( 570 - it: t<'a>, 571 - ~scope, 572 - ~indentation=0, 573 - ~subprinter: ('a, ~scope: array<HOTerm.meta>, ~indentation: int=?) => string, 574 - ) => { 575 - let ind = String.repeat(" ", indentation) 576 - let args = it.instantiation->Array.map(t => Judgment.prettyPrintSubstCodom(t, ~scope)) 577 - let argsStr = if Array.length(args) > 0 { 578 - " " ++ Array.join(args, " ") 579 - } else { 580 - "" 581 - } 582 - `${ind}${Config.keyword} (${it.equalityName}${argsStr}) {\n` 583 - ->String.concat(subprinter(it.subgoal, ~scope, ~indentation=indentation + 2)) 584 - ->String.concat("\n") 585 - ->String.concat(ind) 586 - ->String.concat("}") 587 - } 588 - 589 - exception InternalParseError(string) 590 - 591 - let parse = (input, ~keyword as _, ~scope, ~gen, ~subparser) => { 592 - let cur = ref(String.trim(input)) 593 - 594 - if cur.contents->String.get(0) == Some("(") { 595 - switch Rule.parseRuleName(cur.contents->String.sliceToEnd(~start=1)) { 596 - | Error(e) => Error(e) 597 - | Ok((equalityName, rest)) => { 598 - cur := rest 599 - let instantiation = [] 600 - let it = ref(Error("")) 601 - while { 602 - it := Judgment.parseSubstCodom(cur.contents, ~scope, ~gen) 603 - it.contents->Result.isOk 604 - } { 605 - let (val, rest) = it.contents->Result.getExn 606 - Array.push(instantiation, val) 607 - cur := String.trim(rest) 608 - } 609 - if cur.contents->String.get(0) == Some(")") { 610 - cur := String.trim(cur.contents->String.sliceToEnd(~start=1)) 611 - 612 - if cur.contents->String.get(0) == Some("{") { 613 - cur := String.trim(String.sliceToEnd(cur.contents, ~start=1)) 614 - 615 - try { 616 - switch subparser(cur.contents, ~scope, ~gen) { 617 - | Error(e) => throw(InternalParseError(e)) 618 - | Ok((subgoal, rest2)) => { 619 - cur := String.trim(rest2) 620 - 621 - if cur.contents->String.get(0) == Some("}") { 622 - cur := String.trim(String.sliceToEnd(cur.contents, ~start=1)) 623 - Ok(({equalityName, instantiation, subgoal}, cur.contents)) 624 - } else { 625 - Error("Expected } after subgoal") 626 - } 627 - } 628 - } 629 - } catch { 630 - | InternalParseError(e) => Error(e) 631 - } 632 - } else { 633 - Error("Expected { after equality instantiation") 634 - } 635 - } else { 636 - Error(") or term expected") 637 - } 638 - } 639 - } 640 - } else { 641 - Error("Expected (") 642 - } 643 - } 644 - 645 - let rewriteJudgmentTerms = ( 646 - judgment: Judgment.t, 647 - from: HOTerm.t, 648 - to: HOTerm.t, 649 - ~gen: option<HOTerm.gen>, 650 - ): (HOTerm.subst, Judgment.t) => { 651 - let subst: ref<HOTerm.subst> = ref(HOTerm.makeSubst()) 652 - let j = Judgment.mapTerms(judgment, term => { 653 - let (subst', newTerm) = HOTerm.rewrite(term, from, to, ~subst=subst.contents, ~gen) 654 - subst := subst' 655 - newTerm 656 - }) 657 - (subst.contents, j) 658 - } 659 - 660 - let apply = (ctx: Context.t, j: Judgment.t, gen: HOTerm.gen, f: Rule.t => 'a) => { 661 - let ret: Dict.t<(t<'a>, Judgment.subst)> = Dict.make() 662 - 663 - ctx.facts->Dict.forEachWithKey((eqRule, name) => { 664 - if isEqualityRule(eqRule) { 665 - let insts = eqRule->Rule.genSchemaInsts(gen, ~scope=ctx.fixes) 666 - let instantiatedRule = eqRule->Rule.instantiate(insts) 667 - 668 - switch extractEqualityTermsFromBare(instantiatedRule) { 669 - | Some((lhs, rhs)) => { 670 - let (from, to) = if Config.reversed { 671 - (rhs, lhs) 672 - } else { 673 - (lhs, rhs) 674 - } 675 - 676 - let (subst, rewrittenGoal) = rewriteJudgmentTerms(j, from, to, ~gen=Some(gen)) 677 - 678 - // If the rewritten one is the same as the original, for example rewriting with reflexivity, skip it 679 - if ( 680 - !Judgment.equivalent( 681 - j->Judgment.substitute(subst)->Judgment.reduce, 682 - rewrittenGoal->Judgment.substitute(subst)->Judgment.reduce, 683 - ) 684 - ) { 685 - let rewrittenRule: Rule.t = { 686 - vars: [], 687 - premises: [], 688 - conclusion: rewrittenGoal, 689 - } 690 - let method = { 691 - equalityName: name, 692 - instantiation: insts, 693 - subgoal: f(rewrittenRule), 694 - } 695 - ret->Dict.set(`${Config.keyword} ${name}`, (method, subst)) 696 - } 697 - } 698 - | None => () 699 - } 700 - } 701 - }) 702 - 703 - ret 704 - } 705 - 706 - let check = (it: t<'a>, ctx: Context.t, goal: Judgment.t, f: ('a, Rule.t) => 'b) => { 707 - switch ctx.facts->Dict.get(it.equalityName) { 708 - | None => Error(`Cannot find equality '${it.equalityName}'`) 709 - | Some(eqRule) if !isEqualityRule(eqRule) => 710 - Error(`'${it.equalityName}' is not a valid equality (has premises)`) 711 - | Some(eqRule) if Array.length(eqRule.vars) != Array.length(it.instantiation) => 712 - Error(`Incorrect number of instantiation arguments for '${it.equalityName}'`) 713 - | Some(eqRule) => { 714 - let instantiatedRule = Rule.instantiate(eqRule, it.instantiation) 715 - 716 - switch extractEqualityTermsFromBare(instantiatedRule) { 717 - | None => 718 - Error(`Cannot extract equality from '${it.equalityName}' - not in expected equality form`) 719 - | Some((lhs, rhs)) => { 720 - let (from, to) = if Config.reversed { 721 - (rhs, lhs) 722 - } else { 723 - (lhs, rhs) 724 - } 725 - 726 - // TODO: what gen to use? 727 - let (_, rewrittenGoal) = rewriteJudgmentTerms(goal, from, to, ~gen=None) 728 - 729 - let rewrittenRule: Rule.t = { 730 - vars: [], 731 - premises: [], 732 - conclusion: rewrittenGoal, 733 - } 734 - 735 - Ok({ 736 - equalityName: it.equalityName, 737 - instantiation: it.instantiation, 738 - subgoal: f(it.subgoal, rewrittenRule), 739 - }) 740 - } 741 - } 742 - } 743 - } 744 - } 745 - } 746 - 747 - module Rewrite = ( 748 - Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 749 - ) => MakeRewriteHOTerm( 750 - Judgment, 751 - { 752 - let keyword = "rewrite" 753 - let reversed = false 754 - }, 755 - ) 756 - 757 - module RewriteReverse = ( 758 - Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 759 - ) => MakeRewriteHOTerm( 760 - Judgment, 761 - { 762 - let keyword = "rewrite_reverse" 763 - let reversed = true 764 - }, 765 - ) 766 - 767 - module ConstructorNeq = ( 768 - Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 769 - ) => { 770 - module Term = HOTerm 771 - module Rule = Rule.Make(HOTerm, Judgment) 772 - module Context = Context(HOTerm, Judgment) 773 - 774 - type t<'a> = unit 775 - 776 - type constructorHead = {name: string, args: array<HOTerm.t>} 777 - 778 - let constructorHead = (term: HOTerm.t): option<constructorHead> => { 779 - let (head, args) = HOTerm.strip(term) 780 - switch head { 781 - | HOTerm.Symbol({name, constructor: true}) => Some({name, args}) 782 - | _ => None 783 - } 784 - } 785 - 786 - type constructorComparison = {lhs: constructorHead, rhs: constructorHead, negated: bool} 787 - 788 - let extractConstructorEqualityFrom = (term: HOTerm.t): option<( 789 - constructorHead, 790 - constructorHead, 791 - )> => { 792 - let (head, args) = HOTerm.strip(term) 793 - switch head { 794 - | HOTerm.Symbol({name: "="}) if Array.length(args) == 2 => 795 - switch ( 796 - constructorHead(args->Array.getUnsafe(0)), 797 - constructorHead(args->Array.getUnsafe(1)), 798 - ) { 799 - | (Some(lhs), Some(rhs)) => Some((lhs, rhs)) 800 - | _ => None 801 - } 802 - | _ => None 803 - } 804 - } 805 - 806 - let extractConstructorEquality = (judgment: Judgment.t): option<constructorComparison> => { 807 - let reduced = judgment->Judgment.reduce 808 - switch extractConstructorEqualityFrom(reduced) { 809 - | Some((lhs, rhs)) => Some({lhs, rhs, negated: false}) 810 - | None => 811 - switch HOTerm.strip(reduced) { 812 - | (HOTerm.Symbol({name: "not"}), [inner]) => 813 - extractConstructorEqualityFrom(inner)->Option.map(((lhs, rhs)) => {lhs, rhs, negated: true}) 814 - | _ => None 815 - } 816 - } 817 - } 818 - 819 - let keywords = ["constructor_neq"] 820 - 821 - let map = (it: t<'a>, _f: 'a => 'b): t<'b> => it 822 - 823 - let substitute = (it: t<'a>, _subst: Judgment.subst) => it 824 - 825 - let prettyPrint = (_it: t<'a>, ~scope as _, ~indentation=0, ~subprinter as _) => 826 - String.repeat(" ", indentation)->String.concat("constructor_neq") 827 - 828 - let parse = (input, ~keyword as _, ~scope as _, ~gen as _, ~subparser as _) => Ok(( 829 - (), 830 - String.trim(input), 831 - )) 832 - 833 - let apply = (_ctx: Context.t, j: Judgment.t, _gen: HOTerm.gen, _f: Rule.t => 'a) => { 834 - let ret = Dict.make() 835 - switch extractConstructorEquality(j) { 836 - | Some({lhs: {name: lhs}, rhs: {name: rhs}}) if lhs != rhs => 837 - ret->Dict.set(`constructor_neq ${lhs} ${rhs}`, ((), HOTerm.makeSubst())) 838 - | _ => () 839 - } 840 - ret 841 - } 842 - 843 - let check = (_it: t<'a>, _ctx: Context.t, goal: Judgment.t, _f: ('a, Rule.t) => 'b) => 844 - switch extractConstructorEquality(goal) { 845 - | Some({lhs: {name: lhs}, rhs: {name: rhs}}) => 846 - if lhs == rhs { 847 - Error("constructor_neq expects different constructor symbols") 848 - } else { 849 - Ok() 850 - } 851 - | None => Error("constructor_neq applies only to equalities between constructors") 852 - } 853 - } 854 - 855 - module ConstructorInj = ( 856 - Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 857 - ) => { 858 - module Rule = Rule.Make(HOTerm, Judgment) 859 - module Context = Context(HOTerm, Judgment) 860 - 861 - // we need to define this to workaround a type error for map 862 - type inner = { 863 - source: string, 864 - argIndex: int, 865 - } 866 - type t<'a> = inner 867 - 868 - let keywords = ["constructor_inj"] 869 - 870 - let map = (it: t<'a>, _f: 'a => 'b): t<'b> => it 871 - 872 - let substitute = (it: t<'a>, _subst: Judgment.subst) => it 873 - 874 - let prettyPrint = (it: t<'a>, ~scope as _, ~indentation=0, ~subprinter as _) => 875 - String.repeat(" ", indentation)->String.concat( 876 - `constructor_inj ${it.source} ${Int.toString(it.argIndex)}`, 877 - ) 878 - 879 - let parseIntPrefix = (input: string): option<(int, string)> => { 880 - let cur = input->String.trimStart 881 - let re = RegExp.fromStringWithFlags("^(-?[0-9]+)", ~flags="y") 882 - switch re->RegExp.exec(cur) { 883 - | None => None 884 - | Some(res) => 885 - switch RegExp.Result.matches(res) { 886 - | [n] => 887 - Some(( 888 - n->Int.fromString->Option.getExn, 889 - cur->String.sliceToEnd(~start=RegExp.lastIndex(re)), 890 - )) 891 - | _ => None 892 - } 893 - } 894 - } 895 - 896 - let parse = (input, ~keyword as _, ~scope as _, ~gen as _, ~subparser as _) => { 897 - let cur = String.trim(input) 898 - switch Rule.parseRuleName(cur) { 899 - | Error(e) => Error(e) 900 - | Ok((source, rest)) => 901 - let rest = String.trim(rest) 902 - switch parseIntPrefix(rest) { 903 - | Some((argIndex, remainder)) => Ok(({source, argIndex}, remainder->String.trim)) 904 - | None => Ok(({source, argIndex: 0}, rest)) 905 - } 906 - } 907 - } 908 - 909 - let extractConstructorEquality = (term: HOTerm.t): option<( 910 - string, 911 - array<HOTerm.t>, 912 - array<HOTerm.t>, 913 - )> => { 914 - let (_head, args) = term->HOTerm.strip 915 - if Array.length(args) != 2 { 916 - None 917 - } else { 918 - let (lHead, lArgs) = args->Array.getUnsafe(0)->HOTerm.strip 919 - let (rHead, rArgs) = args->Array.getUnsafe(1)->HOTerm.strip 920 - switch (lHead, rHead) { 921 - | (HOTerm.Symbol({name: ln, constructor: true}), HOTerm.Symbol({name: rn, constructor: true})) 922 - if ln == rn && lArgs->Array.length == rArgs->Array.length => 923 - Some((ln, lArgs, rArgs)) 924 - | _ => None 925 - } 926 - } 927 - } 928 - 929 - let apply = (ctx: Context.t, j: Judgment.t, _gen: HOTerm.gen, _f: Rule.t => 'a) => { 930 - let ret = Dict.make() 931 - switch j->Judgment.reduce->HOTerm.strip { 932 - | (HOTerm.Symbol({name: "="}), [lhs, rhs]) => 933 - ctx.facts->Dict.forEachWithKey((fact, name) => { 934 - switch extractConstructorEquality(fact.conclusion) { 935 - | Some((_cName, lArgs, rArgs)) => 936 - Belt.Array.zip(lArgs, rArgs)->Array.forEachWithIndex(((la, ra), idx) => 937 - if HOTerm.equivalent(la, lhs) && HOTerm.equivalent(ra, rhs) { 938 - ret->Dict.set( 939 - `constructor_inj ${name} ${Int.toString(idx)}`, 940 - ({source: name, argIndex: idx}, HOTerm.makeSubst()), 941 - ) 942 - } 943 - ) 944 - | None => () 945 - } 946 - }) 947 - | _ => () 948 - } 949 - ret 950 - } 951 - 952 - let check = (it: t<'a>, ctx: Context.t, goal: Judgment.t, _f: ('a, Rule.t) => 'b) => { 953 - switch (ctx.facts->Dict.get(it.source), goal->Judgment.reduce->HOTerm.strip) { 954 - | (None, _) => Error(`Cannot find equality '${it.source}'`) 955 - | (Some(fact), (HOTerm.Symbol({name: "="}), [lhs, rhs])) => 956 - switch extractConstructorEquality(fact.conclusion) { 957 - | None => Error(`'${it.source}' is not a constructor equality`) 958 - | Some((_cName, lArgs, rArgs)) => 959 - if it.argIndex < 0 || it.argIndex >= Array.length(lArgs) { 960 - Error("constructor_inj index out of range") 961 - } else { 962 - let la = lArgs->Array.getUnsafe(it.argIndex) 963 - let ra = rArgs->Array.getUnsafe(it.argIndex) 964 - if HOTerm.equivalent(la, lhs) && HOTerm.equivalent(ra, rhs) { 965 - Ok({source: it.source, argIndex: it.argIndex}) 966 - } else { 967 - Error("constructor_inj target does not match goal") 968 - } 969 - } 970 - } 971 - | (_, _) => Error("constructor_inj applies to equality goals") 972 - } 973 - } 974 - }
+3 -2
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 ··· 248 249 module ConstructorNeqView = ( 249 250 Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 250 251 ) => { 251 - module Method = Method.ConstructorNeq(Judgment) 252 + module Method = ConstructorNeq(Judgment) 252 253 type props<'a> = { 253 254 method: Method.t<'a>, 254 255 scope: array<HOTerm.meta>, ··· 274 275 module ConstructorInjView = ( 275 276 Judgment: JUDGMENT with module Term := HOTerm and type subst = HOTerm.subst and type t = HOTerm.t, 276 277 ) => { 277 - module Method = Method.ConstructorInj(Judgment) 278 + module Method = ConstructorInj(Judgment) 278 279 type props<'a> = { 279 280 method: Method.t<'a>, 280 281 scope: array<HOTerm.meta>,