├── .gitattributes ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .yarn └── releases │ └── yarn-4.9.1.cjs ├── .yarnrc.yml ├── LICENSE ├── README.md ├── bsconfig.json ├── package.json ├── rescript.json ├── src ├── Vitest.res ├── Vitest_Assert.res ├── Vitest_Benchmark.res ├── Vitest_Benchmark.resi ├── Vitest_Bindings.res ├── Vitest_Helpers.res ├── Vitest_Matchers.res ├── Vitest_Types.res └── insource.res ├── tests ├── __snapshots__ │ ├── assertions.test.mjs.snap │ └── suite.test.mjs.snap ├── assertions.test.res ├── basic.test.res ├── each.test.res ├── for.test.res ├── promise.test.res ├── sort.bench.res ├── suite.test.res └── vi.test.res ├── vite.config.mjs └── yarn.lock /.gitattributes: -------------------------------------------------------------------------------- 1 | .yarn/** linguist-vendored 2 | .yarn/releases/* binary linguist-vendored 3 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Integration 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - main 7 | push: 8 | branches: 9 | - main 10 | 11 | jobs: 12 | test: 13 | name: Running tests 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Checkout Repo 17 | uses: actions/checkout@v4 18 | 19 | - name: Setup Node.js 20 | uses: actions/setup-node@v4 21 | with: 22 | node-version: 21 23 | cache: yarn 24 | 25 | - name: Install Dependencies 26 | run: yarn install --immutable 27 | 28 | - name: Build ReScript 29 | run: yarn rescript build -with-deps 30 | 31 | - name: Execute Tests 32 | run: yarn test run 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .merlin 3 | .bsb.lock 4 | *.log 5 | 6 | *.mjs 7 | !vite.config.mjs 8 | 9 | /lib/ 10 | node_modules/ 11 | 12 | .pnp.* 13 | .yarn/* 14 | !.yarn/patches 15 | !.yarn/plugins 16 | !.yarn/releases 17 | !.yarn/sdks 18 | !.yarn/versions 19 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nmMode: hardlinks-global 2 | 3 | nodeLinker: node-modules 4 | 5 | yarnPath: .yarn/releases/yarn-4.9.1.cjs 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Hyeseong Kim 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # rescript-vitest 2 | 3 | [![npm](https://img.shields.io/npm/v/rescript-vitest)](https://www.npmjs.com/package/rescript-vitest) 4 | [![npm downloads](https://img.shields.io/npm/dm/rescript-vitest)](https://www.npmjs.com/package/rescript-vitest) 5 | [![license](https://img.shields.io/github/license/cometkim/rescript-vitest)](#LICENSE) 6 | 7 | [ReScript](https://rescript-lang.org) bindings to [Vitest](https://vitest.dev) 8 | 9 | ## Prerequisite 10 | 11 | ReScript v10.1+ is required since v1.0.0. To use `Js.Promise2` and `async`/`await` for tests. 12 | 13 | ReScript v11.x with the [uncurried mode](https://rescript-lang.org/blog/uncurried-mode) is supported since v2.x. 14 | 15 | ## Config 16 | 17 | Configure with plain `vite.config.js`. 18 | 19 | You can use [vite-plugin-rescript](https://github.com/jihchi/vite-plugin-rescript) to build ReScript automatically before the test. 20 | 21 | ## Usage 22 | 23 | You can find examples on [tests](./tests) 24 | 25 | ### Basic 26 | 27 | ```res 28 | open Vitest 29 | 30 | describe("Hello, Vitest", () => { 31 | test("This is a test case", t => { 32 | // t is `expect` object for suite-wide assertions 33 | t->assertions(3) 34 | 35 | // Test using the `Expect` module 36 | t->expect(1 + 2)->Expect.toBe(3) 37 | 38 | // There are some nested modules for specific type 39 | t->expect([1, 2, 3]) 40 | ->Expect.Array.toContain(2) 41 | 42 | t->expect("Hello, ReScript-Vitest!") 43 | ->Expect.String.toContain("ReScript") 44 | 45 | // You can specify timeout for a test suite 46 | }, ~timeout=2000) 47 | }) 48 | ``` 49 | 50 | ### In-source testing (experimental) 51 | 52 | Vitest support [in-source testing](https://vitest.dev/guide/in-source) 53 | 54 | ```res 55 | // This if block can be removed from production code. 56 | // You need to define `import.meta.vitest` to `undefined` 57 | if Vitest.inSource { 58 | open Vitest.InSource 59 | 60 | test("In-source testing", t => { 61 | t->expect(1 + 2)->Expect.toBe(3) 62 | }) 63 | } 64 | ``` 65 | 66 | ### Migration from 1.x 67 | 68 | You need to bind test context `t` explicitly. 69 | 70 | ```diff 71 | open Vitest 72 | 73 | describe("Hello, Vitest", () => { 74 | - test("This is a test case", _ => { 75 | + test("This is a test case", t => { 76 | 77 | - assertions(3) 78 | + t->assertions(3) 79 | 80 | - expect(1 + 2)->Expect.toBe(3) 81 | + t->expect(1 + 2)->Expect.toBe(3) 82 | }) 83 | }) 84 | ``` 85 | 86 | You can use simple flags for `skip`, `concurrent`, and `only`. 87 | 88 | ```res 89 | Skip.test("This will be skipped", t => { 90 | // ... 91 | }) 92 | 93 | // Use simple flags instead. 94 | test(~skip=true, "This will be skipped", t => { 95 | // ... 96 | }) 97 | ``` 98 | 99 | Module bindings will be deprecated and removed in next major (v3) 100 | 101 | ## LICENCE 102 | 103 | MIT 104 | -------------------------------------------------------------------------------- /bsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rescript-vitest", 3 | "namespace": false, 4 | "suffix": ".mjs", 5 | "sources": [ 6 | { 7 | "dir": "src" 8 | }, 9 | { 10 | "dir": "tests", 11 | "type": "dev" 12 | } 13 | ], 14 | "package-specs": { 15 | "module": "es6", 16 | "in-source": true 17 | }, 18 | "bs-dependencies": [ 19 | ], 20 | "bs-dev-dependencies": [ 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rescript-vitest", 3 | "version": "2.1.0", 4 | "license": "MIT", 5 | "author": { 6 | "name": "Hyeseong Kim", 7 | "email": "hey@hyeseong.kim" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/cometkim/rescript-vitest.git" 12 | }, 13 | "keywords": [ 14 | "testing", 15 | "rescript", 16 | "vite", 17 | "vitest" 18 | ], 19 | "scripts": { 20 | "prepack": "yarn clean && yarn build", 21 | "clean": "rescript clean", 22 | "build": "rescript build", 23 | "test": "vitest", 24 | "bench": "vitest bench" 25 | }, 26 | "files": [ 27 | "bsconfig.json", 28 | "rescript.json", 29 | "src/Vitest.res", 30 | "src/Vitest_Assert.res", 31 | "src/Vitest_Benchmark.res", 32 | "src/Vitest_Benchmark.resi", 33 | "src/Vitest_Bindings.res", 34 | "src/Vitest_Helpers.res", 35 | "src/Vitest_Matchers.res", 36 | "src/Vitest_Types.res" 37 | ], 38 | "peerDependencies": { 39 | "rescript": "^10.1.0 || ^11.0.0-0 || ^12.0.0-0", 40 | "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" 41 | }, 42 | "dependencies": { 43 | "vitest": "^3.1.4" 44 | }, 45 | "devDependencies": { 46 | "@jihchi/vite-plugin-rescript": "^7.0.0", 47 | "rescript": "12.0.0-alpha.12", 48 | "vite": "^6.3.5" 49 | }, 50 | "publishConfig": { 51 | "access": "public", 52 | "registry": "https://registry.npmjs.org" 53 | }, 54 | "packageManager": "yarn@4.9.1" 55 | } 56 | -------------------------------------------------------------------------------- /rescript.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rescript-vitest", 3 | "namespace": false, 4 | "suffix": ".mjs", 5 | "sources": [ 6 | { 7 | "dir": "src" 8 | }, 9 | { 10 | "dir": "tests", 11 | "type": "dev" 12 | } 13 | ], 14 | "package-specs": { 15 | "module": "esmodule", 16 | "in-source": true 17 | }, 18 | "bs-dependencies": [ 19 | ], 20 | "bs-dev-dependencies": [ 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/Vitest.res: -------------------------------------------------------------------------------- 1 | open Vitest_Types 2 | 3 | type suiteOptions = { 4 | timeout?: int, 5 | retry?: int, 6 | repeats?: int, 7 | shuffle?: bool, 8 | concurrent?: bool, 9 | sequential?: bool, 10 | skip?: bool, 11 | only?: bool, 12 | todo?: bool, 13 | fails?: bool, 14 | } 15 | 16 | type testOptions = { 17 | timeout?: int, 18 | retry?: int, 19 | repeats?: int, 20 | concurrent?: bool, 21 | sequential?: bool, 22 | skip?: bool, 23 | only?: bool, 24 | todo?: bool, 25 | fails?: bool, 26 | } 27 | 28 | type testCollectorOptions = { 29 | timeout?: int, 30 | retry?: int, 31 | repeats?: int, 32 | concurrent?: bool, 33 | sequential?: bool, 34 | skip?: bool, 35 | only?: bool, 36 | todo?: bool, 37 | fails?: bool, 38 | } 39 | 40 | type suiteDef = (string, suiteOptions, unit => unit) => unit 41 | type testDef = (string, testOptions, testCtx => unit) => unit 42 | type testAsyncDef = (string, testOptions, testCtx => promise) => unit 43 | 44 | module type Runner = { 45 | let describe: suiteDef 46 | let test: testDef 47 | let testAsync: testAsyncDef 48 | let it: testDef 49 | let itAsync: testAsyncDef 50 | } 51 | 52 | module type ConcurrentRunner = { 53 | let describe: suiteDef 54 | let testAsync: testAsyncDef 55 | let itAsync: testAsyncDef 56 | } 57 | 58 | module MakeRunner = (Runner: Runner) => { 59 | @inline 60 | let describe = ( 61 | name, 62 | ~timeout=?, 63 | ~retry=?, 64 | ~repeats=?, 65 | ~shuffle=?, 66 | ~concurrent=?, 67 | ~sequential=?, 68 | ~skip=?, 69 | ~only=?, 70 | ~todo=?, 71 | ~fails=?, 72 | callback, 73 | ) => 74 | Runner.describe( 75 | name, 76 | { 77 | ?timeout, 78 | ?retry, 79 | ?repeats, 80 | ?shuffle, 81 | ?concurrent, 82 | ?sequential, 83 | ?skip, 84 | ?only, 85 | ?todo, 86 | ?fails, 87 | }, 88 | callback, 89 | ) 90 | 91 | @inline 92 | let test = ( 93 | name, 94 | ~timeout=?, 95 | ~retry=?, 96 | ~repeats=?, 97 | ~concurrent=?, 98 | ~sequential=?, 99 | ~skip=?, 100 | ~only=?, 101 | ~todo=?, 102 | ~fails=?, 103 | callback, 104 | ) => 105 | Runner.test( 106 | name, 107 | { 108 | ?timeout, 109 | ?retry, 110 | ?repeats, 111 | ?concurrent, 112 | ?sequential, 113 | ?skip, 114 | ?only, 115 | ?todo, 116 | ?fails, 117 | }, 118 | callback, 119 | ) 120 | 121 | @inline 122 | let testAsync = ( 123 | name, 124 | ~timeout=?, 125 | ~retry=?, 126 | ~repeats=?, 127 | ~concurrent=?, 128 | ~sequential=?, 129 | ~skip=?, 130 | ~only=?, 131 | ~todo=?, 132 | ~fails=?, 133 | callback, 134 | ) => 135 | Runner.testAsync( 136 | name, 137 | { 138 | ?timeout, 139 | ?retry, 140 | ?repeats, 141 | ?concurrent, 142 | ?sequential, 143 | ?skip, 144 | ?only, 145 | ?todo, 146 | ?fails, 147 | }, 148 | callback, 149 | ) 150 | 151 | @inline 152 | let it = ( 153 | name, 154 | ~timeout=?, 155 | ~retry=?, 156 | ~repeats=?, 157 | ~concurrent=?, 158 | ~sequential=?, 159 | ~skip=?, 160 | ~only=?, 161 | ~todo=?, 162 | ~fails=?, 163 | callback, 164 | ) => 165 | Runner.it( 166 | name, 167 | { 168 | ?timeout, 169 | ?retry, 170 | ?repeats, 171 | ?concurrent, 172 | ?sequential, 173 | ?skip, 174 | ?only, 175 | ?todo, 176 | ?fails, 177 | }, 178 | callback, 179 | ) 180 | 181 | @inline 182 | let itAsync = ( 183 | name, 184 | ~timeout=?, 185 | ~retry=?, 186 | ~repeats=?, 187 | ~concurrent=?, 188 | ~sequential=?, 189 | ~skip=?, 190 | ~only=?, 191 | ~todo=?, 192 | ~fails=?, 193 | callback, 194 | ) => 195 | Runner.itAsync( 196 | name, 197 | { 198 | ?timeout, 199 | ?retry, 200 | ?repeats, 201 | ?concurrent, 202 | ?sequential, 203 | ?skip, 204 | ?only, 205 | ?todo, 206 | ?fails, 207 | }, 208 | callback, 209 | ) 210 | } 211 | 212 | module MakeConcurrentRunner = (Runner: ConcurrentRunner) => { 213 | @inline 214 | let describe = ( 215 | name, 216 | ~timeout=?, 217 | ~retry=?, 218 | ~repeats=?, 219 | ~shuffle=?, 220 | ~skip=?, 221 | ~only=?, 222 | ~todo=?, 223 | ~fails=?, 224 | callback, 225 | ) => 226 | Runner.describe( 227 | name, 228 | { 229 | ?timeout, 230 | ?retry, 231 | ?repeats, 232 | ?shuffle, 233 | ?skip, 234 | ?only, 235 | ?todo, 236 | ?fails, 237 | }, 238 | callback, 239 | ) 240 | 241 | @inline 242 | let testAsync = ( 243 | name, 244 | ~timeout=?, 245 | ~retry=?, 246 | ~repeats=?, 247 | ~skip=?, 248 | ~only=?, 249 | ~todo=?, 250 | ~fails=?, 251 | callback, 252 | ) => 253 | Runner.testAsync( 254 | name, 255 | { 256 | ?timeout, 257 | ?retry, 258 | ?repeats, 259 | ?skip, 260 | ?only, 261 | ?todo, 262 | ?fails, 263 | }, 264 | callback, 265 | ) 266 | 267 | @inline 268 | let itAsync = ( 269 | name, 270 | ~timeout=?, 271 | ~retry=?, 272 | ~repeats=?, 273 | ~skip=?, 274 | ~only=?, 275 | ~todo=?, 276 | ~fails=?, 277 | callback, 278 | ) => 279 | Runner.itAsync( 280 | name, 281 | { 282 | ?timeout, 283 | ?retry, 284 | ?repeats, 285 | ?skip, 286 | ?only, 287 | ?todo, 288 | ?fails, 289 | }, 290 | callback, 291 | ) 292 | } 293 | 294 | include MakeRunner({ 295 | @module("vitest") @val 296 | external describe: suiteDef = "describe" 297 | 298 | @module("vitest") @val 299 | external test: testDef = "test" 300 | 301 | @module("vitest") @val 302 | external testAsync: testAsyncDef = "test" 303 | 304 | @module("vitest") @val 305 | external it: testDef = "it" 306 | 307 | @module("vitest") @val 308 | external itAsync: testAsyncDef = "it" 309 | }) 310 | 311 | @deprecated("Use `~concurrent` argument instead.") 312 | module Concurrent = { 313 | type concurrent_describe 314 | type concurrent_test 315 | type concurrent_it 316 | 317 | %%private( 318 | @module("vitest") @val 319 | external concurrent_describe: concurrent_describe = "describe" 320 | 321 | @module("vitest") @val 322 | external concurrent_test: concurrent_test = "test" 323 | 324 | @module("vitest") @val 325 | external concurrent_it: concurrent_it = "it" 326 | ) 327 | 328 | @get 329 | external describe: concurrent_describe => suiteDef = "concurrent" 330 | 331 | @get 332 | external testAsync: concurrent_test => testAsyncDef = "concurrent" 333 | 334 | @get 335 | external itAsync: concurrent_it => testAsyncDef = "concurrent" 336 | 337 | include MakeConcurrentRunner({ 338 | let describe = concurrent_describe->describe 339 | let testAsync = concurrent_test->testAsync 340 | let itAsync = concurrent_it->itAsync 341 | }) 342 | } 343 | 344 | @deprecated("Use `~only` argument instead.") 345 | module Only = { 346 | type only_describe 347 | type only_test 348 | type only_it 349 | 350 | %%private( 351 | @module("vitest") @val 352 | external only_describe: only_describe = "describe" 353 | 354 | @module("vitest") @val 355 | external only_test: only_test = "test" 356 | 357 | @module("vitest") @val 358 | external only_it: only_it = "it" 359 | ) 360 | 361 | @get 362 | external describe: only_describe => suiteDef = "only" 363 | 364 | @get 365 | external test: only_test => testDef = "only" 366 | 367 | @get 368 | external testAsync: only_test => testAsyncDef = "only" 369 | 370 | @get 371 | external it: only_it => testDef = "only" 372 | 373 | @get 374 | external itAsync: only_it => testAsyncDef = "only" 375 | 376 | include MakeRunner({ 377 | let describe = only_describe->describe 378 | let test = only_test->test 379 | let testAsync = only_test->testAsync 380 | let it = only_it->it 381 | let itAsync = only_it->itAsync 382 | }) 383 | 384 | module Concurrent = { 385 | type concurrent_describe 386 | type concurrent_test 387 | type concurrent_it 388 | 389 | %%private( 390 | @get 391 | external concurrent_describe: only_describe => concurrent_describe = "only" 392 | 393 | @get 394 | external concurrent_test: only_test => concurrent_test = "only" 395 | 396 | @get 397 | external concurrent_it: only_it => concurrent_it = "only" 398 | ) 399 | 400 | @get 401 | external describe: concurrent_describe => suiteDef = "concurrent" 402 | 403 | @get 404 | external testAsync: concurrent_test => testAsyncDef = "concurrent" 405 | 406 | @get 407 | external itAsync: concurrent_it => testAsyncDef = "concurrent" 408 | 409 | include MakeConcurrentRunner({ 410 | let describe = only_describe->concurrent_describe->describe 411 | let testAsync = only_test->concurrent_test->testAsync 412 | let itAsync = only_it->concurrent_it->itAsync 413 | }) 414 | } 415 | } 416 | 417 | @deprecated("Use `~skip` argument or `t->skip` API instead.") 418 | module Skip = { 419 | type skip_describe 420 | type skip_test 421 | type skip_it 422 | 423 | %%private( 424 | @module("vitest") @val 425 | external skip_describe: skip_describe = "describe" 426 | 427 | @module("vitest") @val 428 | external skip_test: skip_test = "test" 429 | 430 | @module("vitest") @val 431 | external skip_it: skip_it = "it" 432 | ) 433 | 434 | @get 435 | external describe: skip_describe => suiteDef = "skip" 436 | 437 | @get 438 | external test: skip_test => testDef = "skip" 439 | 440 | @get 441 | external testAsync: skip_test => testAsyncDef = "skip" 442 | 443 | @get 444 | external it: skip_it => testDef = "skip" 445 | 446 | @get 447 | external itAsync: skip_it => testAsyncDef = "skip" 448 | 449 | include MakeRunner({ 450 | let describe = skip_describe->describe 451 | let test = skip_test->test 452 | let testAsync = skip_test->testAsync 453 | let it = skip_it->it 454 | let itAsync = skip_it->itAsync 455 | }) 456 | 457 | module Concurrent = { 458 | type concurrent_describe 459 | type concurrent_test 460 | type concurrent_it 461 | 462 | %%private( 463 | @get 464 | external concurrent_describe: skip_describe => concurrent_describe = "skip" 465 | 466 | @get 467 | external concurrent_test: skip_test => concurrent_test = "skip" 468 | 469 | @get 470 | external concurrent_it: skip_it => concurrent_it = "skip" 471 | ) 472 | 473 | @get 474 | external describe: concurrent_describe => suiteDef = "concurrent" 475 | 476 | @get 477 | external testAsync: concurrent_test => testAsyncDef = "concurrent" 478 | 479 | @get 480 | external itAsync: concurrent_it => testAsyncDef = "concurrent" 481 | 482 | include MakeConcurrentRunner({ 483 | let describe = skip_describe->concurrent_describe->describe 484 | let testAsync = skip_test->concurrent_test->testAsync 485 | let itAsync = skip_it->concurrent_it->itAsync 486 | }) 487 | } 488 | } 489 | 490 | module type EachType = { 491 | let test: (array<'a>, string, ~timeout: int=?, 'a => unit) => unit 492 | let test2: (array<('a, 'b)>, string, ~timeout: int=?, ('a, 'b) => unit) => unit 493 | let test3: (array<('a, 'b, 'c)>, string, ~timeout: int=?, ('a, 'b, 'c) => unit) => unit 494 | let test4: (array<('a, 'b, 'c, 'd)>, string, ~timeout: int=?, ('a, 'b, 'c, 'd) => unit) => unit 495 | let test5: ( 496 | array<('a, 'b, 'c, 'd, 'e)>, 497 | string, 498 | ~timeout: int=?, 499 | ('a, 'b, 'c, 'd, 'e) => unit, 500 | ) => unit 501 | 502 | let testAsync: (array<'a>, string, ~timeout: int=?, 'a => promise) => unit 503 | let test2Async: (array<('a, 'b)>, string, ~timeout: int=?, ('a, 'b) => promise) => unit 504 | let test3Async: ( 505 | array<('a, 'b, 'c)>, 506 | string, 507 | ~timeout: int=?, 508 | ('a, 'b, 'c) => promise, 509 | ) => unit 510 | let test4Async: ( 511 | array<('a, 'b, 'c, 'd)>, 512 | string, 513 | ~timeout: int=?, 514 | ('a, 'b, 'c, 'd) => promise, 515 | ) => unit 516 | let test5Async: ( 517 | array<('a, 'b, 'c, 'd, 'e)>, 518 | string, 519 | ~timeout: int=?, 520 | ('a, 'b, 'c, 'd, 'e) => promise, 521 | ) => unit 522 | 523 | let describe: (array<'a>, string, ~timeout: int=?, 'a => unit) => unit 524 | let describe2: (array<('a, 'b)>, string, ~timeout: int=?, ('a, 'b) => unit) => unit 525 | let describe3: (array<('a, 'b, 'c)>, string, ~timeout: int=?, ('a, 'b, 'c) => unit) => unit 526 | let describe4: ( 527 | array<('a, 'b, 'c, 'd)>, 528 | string, 529 | ~timeout: int=?, 530 | ('a, 'b, 'c, 'd) => unit, 531 | ) => unit 532 | let describe5: ( 533 | array<('a, 'b, 'c, 'd, 'e)>, 534 | string, 535 | ~timeout: int=?, 536 | ('a, 'b, 'c, 'd, 'e) => unit, 537 | ) => unit 538 | 539 | let describeAsync: (array<'a>, string, ~timeout: int=?, 'a => promise) => unit 540 | let describe2Async: (array<('a, 'b)>, string, ~timeout: int=?, ('a, 'b) => promise) => unit 541 | let describe3Async: ( 542 | array<('a, 'b, 'c)>, 543 | string, 544 | ~timeout: int=?, 545 | ('a, 'b, 'c) => promise, 546 | ) => unit 547 | let describe4Async: ( 548 | array<('a, 'b, 'c, 'd)>, 549 | string, 550 | ~timeout: int=?, 551 | ('a, 'b, 'c, 'd) => promise, 552 | ) => unit 553 | let describe5Async: ( 554 | array<('a, 'b, 'c, 'd, 'e)>, 555 | string, 556 | ~timeout: int=?, 557 | ('a, 'b, 'c, 'd, 'e) => promise, 558 | ) => unit 559 | } 560 | 561 | @deprecated("Use `For` instead.") 562 | module Each: EachType = { 563 | module Ext = { 564 | type test 565 | type describe 566 | 567 | @module("vitest") @val 568 | external test: test = "test" 569 | 570 | @module("vitest") @val 571 | external describe: describe = "describe" 572 | 573 | @send 574 | external testObj: ( 575 | ~test: test, 576 | ~cases: array<'a>, 577 | ) => (~name: string, ~f: @uncurry 'a => unit, ~timeout: Js.undefined) => unit = "each" 578 | 579 | @send 580 | external test2: ( 581 | ~test: test, 582 | ~cases: array<('a, 'b)>, 583 | ) => (~name: string, ~f: @uncurry ('a, 'b) => unit, ~timeout: Js.undefined) => unit = 584 | "each" 585 | 586 | @send 587 | external test3: ( 588 | ~test: test, 589 | ~cases: array<('a, 'b, 'c)>, 590 | ) => (~name: string, ~f: @uncurry ('a, 'b, 'c) => unit, ~timeout: Js.undefined) => unit = 591 | "each" 592 | 593 | @send 594 | external test4: ( 595 | ~test: test, 596 | ~cases: array<('a, 'b, 'c, 'd)>, 597 | ) => ( 598 | ~name: string, 599 | ~f: @uncurry ('a, 'b, 'c, 'd) => unit, 600 | ~timeout: Js.undefined, 601 | ) => unit = "each" 602 | 603 | @send 604 | external test5: ( 605 | ~test: test, 606 | ~cases: array<('a, 'b, 'c, 'd, 'e)>, 607 | ) => ( 608 | ~name: string, 609 | ~f: @uncurry ('a, 'b, 'c, 'd, 'e) => unit, 610 | ~timeout: Js.undefined, 611 | ) => unit = "each" 612 | 613 | @send 614 | external testObjAsync: ( 615 | ~test: test, 616 | ~cases: array<'a>, 617 | ) => (~name: string, ~f: @uncurry 'a => promise, ~timeout: Js.undefined) => unit = 618 | "each" 619 | 620 | @send 621 | external test2Async: ( 622 | ~test: test, 623 | ~cases: array<('a, 'b)>, 624 | ) => ( 625 | ~name: string, 626 | ~f: @uncurry ('a, 'b) => promise, 627 | ~timeout: Js.undefined, 628 | ) => unit = "each" 629 | 630 | @send 631 | external test3Async: ( 632 | ~test: test, 633 | ~cases: array<('a, 'b, 'c)>, 634 | ) => ( 635 | ~name: string, 636 | ~f: @uncurry ('a, 'b, 'c) => promise, 637 | ~timeout: Js.undefined, 638 | ) => unit = "each" 639 | 640 | @send 641 | external test4Async: ( 642 | ~test: test, 643 | ~cases: array<('a, 'b, 'c, 'd)>, 644 | ) => ( 645 | ~name: string, 646 | ~f: @uncurry ('a, 'b, 'c, 'd) => promise, 647 | ~timeout: Js.undefined, 648 | ) => unit = "each" 649 | 650 | @send 651 | external test5Async: ( 652 | ~test: test, 653 | ~cases: array<('a, 'b, 'c, 'd, 'e)>, 654 | ) => ( 655 | ~name: string, 656 | ~f: @uncurry ('a, 'b, 'c, 'd, 'e) => promise, 657 | ~timeout: Js.undefined, 658 | ) => unit = "each" 659 | 660 | @send 661 | external describeObj: ( 662 | ~describe: describe, 663 | ~cases: array<'a>, 664 | ) => (~name: string, ~f: @uncurry 'a => unit, ~timeout: Js.undefined) => unit = "each" 665 | 666 | @send 667 | external describe2: ( 668 | ~describe: describe, 669 | ~cases: array<('a, 'b)>, 670 | ) => (~name: string, ~f: @uncurry ('a, 'b) => unit, ~timeout: Js.undefined) => unit = 671 | "each" 672 | 673 | @send 674 | external describe3: ( 675 | ~describe: describe, 676 | ~cases: array<('a, 'b, 'c)>, 677 | ) => (~name: string, ~f: @uncurry ('a, 'b, 'c) => unit, ~timeout: Js.undefined) => unit = 678 | "each" 679 | 680 | @send 681 | external describe4: ( 682 | ~describe: describe, 683 | ~cases: array<('a, 'b, 'c, 'd)>, 684 | ) => ( 685 | ~name: string, 686 | ~f: @uncurry ('a, 'b, 'c, 'd) => unit, 687 | ~timeout: Js.undefined, 688 | ) => unit = "each" 689 | 690 | @send 691 | external describe5: ( 692 | ~describe: describe, 693 | ~cases: array<('a, 'b, 'c, 'd, 'e)>, 694 | ) => ( 695 | ~name: string, 696 | ~f: @uncurry ('a, 'b, 'c, 'd, 'e) => unit, 697 | ~timeout: Js.undefined, 698 | ) => unit = "each" 699 | 700 | @send 701 | external describeObjAsync: ( 702 | ~describe: describe, 703 | ~cases: array<'a>, 704 | ) => (~name: string, ~f: @uncurry 'a => promise, ~timeout: Js.undefined) => unit = 705 | "each" 706 | 707 | @send 708 | external describe2Async: ( 709 | ~describe: describe, 710 | ~cases: array<('a, 'b)>, 711 | ) => ( 712 | ~name: string, 713 | ~f: @uncurry ('a, 'b) => promise, 714 | ~timeout: Js.undefined, 715 | ) => unit = "each" 716 | 717 | @send 718 | external describe3Async: ( 719 | ~describe: describe, 720 | ~cases: array<('a, 'b, 'c)>, 721 | ) => ( 722 | ~name: string, 723 | ~f: @uncurry ('a, 'b, 'c) => promise, 724 | ~timeout: Js.undefined, 725 | ) => unit = "each" 726 | 727 | @send 728 | external describe4Async: ( 729 | ~describe: describe, 730 | ~cases: array<('a, 'b, 'c, 'd)>, 731 | ) => ( 732 | ~name: string, 733 | ~f: @uncurry ('a, 'b, 'c, 'd) => promise, 734 | ~timeout: Js.undefined, 735 | ) => unit = "each" 736 | 737 | @send 738 | external describe5Async: ( 739 | ~describe: describe, 740 | ~cases: array<('a, 'b, 'c, 'd, 'e)>, 741 | ) => ( 742 | ~name: string, 743 | ~f: @uncurry ('a, 'b, 'c, 'd, 'e) => promise, 744 | ~timeout: Js.undefined, 745 | ) => unit = "each" 746 | } 747 | 748 | @inline @deprecated("Use `For.test` instead.") 749 | let test = (cases, name, ~timeout=?, f) => 750 | Ext.testObj(~test=Ext.test, ~cases)(~name, ~f, ~timeout=timeout->Js.Undefined.fromOption) 751 | 752 | @inline @deprecated("Use `For.test` instead.") 753 | let test2 = (cases, name, ~timeout=?, f) => 754 | Ext.test2(~test=Ext.test, ~cases)(~name, ~f, ~timeout=timeout->Js.Undefined.fromOption) 755 | 756 | @inline @deprecated("Use `For.test` instead.") 757 | let test3 = (cases, name, ~timeout=?, f) => 758 | Ext.test3(~test=Ext.test, ~cases)(~name, ~f, ~timeout=timeout->Js.Undefined.fromOption) 759 | 760 | @inline @deprecated("Use `For.test` instead.") 761 | let test4 = (cases, name, ~timeout=?, f) => 762 | Ext.test4(~test=Ext.test, ~cases)(~name, ~f, ~timeout=timeout->Js.Undefined.fromOption) 763 | 764 | @inline @deprecated("Use `For.test` instead.") 765 | let test5 = (cases, name, ~timeout=?, f) => 766 | Ext.test5(~test=Ext.test, ~cases)(~name, ~f, ~timeout=timeout->Js.Undefined.fromOption) 767 | 768 | @inline @deprecated("Use `For.testAsync` instead.") 769 | let testAsync = (cases, name, ~timeout=?, f) => 770 | Ext.testObjAsync(~test=Ext.test, ~cases)(~name, ~f, ~timeout=timeout->Js.Undefined.fromOption) 771 | 772 | @inline @deprecated("Use `For.testAsync` instead.") 773 | let test2Async = (cases, name, ~timeout=?, f) => 774 | Ext.test2Async(~test=Ext.test, ~cases)(~name, ~f, ~timeout=timeout->Js.Undefined.fromOption) 775 | 776 | @inline @deprecated("Use `For.testAsync` instead.") 777 | let test3Async = (cases, name, ~timeout=?, f) => 778 | Ext.test3Async(~test=Ext.test, ~cases)(~name, ~f, ~timeout=timeout->Js.Undefined.fromOption) 779 | 780 | @inline @deprecated("Use `For.testAsync` instead.") 781 | let test4Async = (cases, name, ~timeout=?, f) => 782 | Ext.test4Async(~test=Ext.test, ~cases)(~name, ~f, ~timeout=timeout->Js.Undefined.fromOption) 783 | 784 | @inline @deprecated("Use `For.testAsync` instead.") 785 | let test5Async = (cases, name, ~timeout=?, f) => 786 | Ext.test5Async(~test=Ext.test, ~cases)(~name, ~f, ~timeout=timeout->Js.Undefined.fromOption) 787 | 788 | @inline @deprecated("Use `For.describe` instead.") 789 | let describe = (cases, name, ~timeout=?, f) => 790 | Ext.describeObj(~describe=Ext.describe, ~cases)( 791 | ~name, 792 | ~f, 793 | ~timeout=timeout->Js.Undefined.fromOption, 794 | ) 795 | 796 | @inline @deprecated("Use `For.describe` instead.") 797 | let describe2 = (cases, name, ~timeout=?, f) => 798 | Ext.describe2(~describe=Ext.describe, ~cases)( 799 | ~name, 800 | ~f, 801 | ~timeout=timeout->Js.Undefined.fromOption, 802 | ) 803 | 804 | @inline @deprecated("Use `For.describe` instead.") 805 | let describe3 = (cases, name, ~timeout=?, f) => 806 | Ext.describe3(~describe=Ext.describe, ~cases)( 807 | ~name, 808 | ~f, 809 | ~timeout=timeout->Js.Undefined.fromOption, 810 | ) 811 | 812 | @inline @deprecated("Use `For.describe` instead.") 813 | let describe4 = (cases, name, ~timeout=?, f) => 814 | Ext.describe4(~describe=Ext.describe, ~cases)( 815 | ~name, 816 | ~f, 817 | ~timeout=timeout->Js.Undefined.fromOption, 818 | ) 819 | 820 | @inline @deprecated("Use `For.describe` instead.") 821 | let describe5 = (cases, name, ~timeout=?, f) => 822 | Ext.describe5(~describe=Ext.describe, ~cases)( 823 | ~name, 824 | ~f, 825 | ~timeout=timeout->Js.Undefined.fromOption, 826 | ) 827 | 828 | @inline @deprecated("Use `For.describeAsync` instead.") 829 | let describeAsync = (cases, name, ~timeout=?, f) => 830 | Ext.describeObjAsync(~describe=Ext.describe, ~cases)( 831 | ~name, 832 | ~f, 833 | ~timeout=timeout->Js.Undefined.fromOption, 834 | ) 835 | 836 | @inline @deprecated("Use `For.describeAsync` instead.") 837 | let describe2Async = (cases, name, ~timeout=?, f) => 838 | Ext.describe2Async(~describe=Ext.describe, ~cases)( 839 | ~name, 840 | ~f, 841 | ~timeout=timeout->Js.Undefined.fromOption, 842 | ) 843 | 844 | @inline @deprecated("Use `For.describeAsync` instead.") 845 | let describe3Async = (cases, name, ~timeout=?, f) => 846 | Ext.describe3Async(~describe=Ext.describe, ~cases)( 847 | ~name, 848 | ~f, 849 | ~timeout=timeout->Js.Undefined.fromOption, 850 | ) 851 | 852 | @inline @deprecated("Use `For.describeAsync` instead.") 853 | let describe4Async = (cases, name, ~timeout=?, f) => 854 | Ext.describe4Async(~describe=Ext.describe, ~cases)( 855 | ~name, 856 | ~f, 857 | ~timeout=timeout->Js.Undefined.fromOption, 858 | ) 859 | 860 | @inline @deprecated("Use `For.describeAsync` instead.") 861 | let describe5Async = (cases, name, ~timeout=?, f) => 862 | Ext.describe5Async(~describe=Ext.describe, ~cases)( 863 | ~name, 864 | ~f, 865 | ~timeout=timeout->Js.Undefined.fromOption, 866 | ) 867 | } 868 | 869 | module type ForType = { 870 | let describe: ( 871 | array<'a>, 872 | string, 873 | ~timeout: int=?, 874 | ~retry: int=?, 875 | ~repeats: int=?, 876 | ~concurrent: bool=?, 877 | ~sequential: bool=?, 878 | ~skip: bool=?, 879 | ~only: bool=?, 880 | ~todo: bool=?, 881 | ~fails: bool=?, 882 | 'a => unit, 883 | ) => unit 884 | let describeAsync: ( 885 | array<'a>, 886 | string, 887 | ~timeout: int=?, 888 | ~retry: int=?, 889 | ~repeats: int=?, 890 | ~concurrent: bool=?, 891 | ~sequential: bool=?, 892 | ~skip: bool=?, 893 | ~only: bool=?, 894 | ~todo: bool=?, 895 | ~fails: bool=?, 896 | 'a => promise, 897 | ) => unit 898 | 899 | let test: ( 900 | array<'a>, 901 | string, 902 | ~timeout: int=?, 903 | ~retry: int=?, 904 | ~repeats: int=?, 905 | ~concurrent: bool=?, 906 | ~sequential: bool=?, 907 | ~skip: bool=?, 908 | ~only: bool=?, 909 | ~todo: bool=?, 910 | ~fails: bool=?, 911 | ('a, testCtx) => unit, 912 | ) => unit 913 | let testAsync: ( 914 | array<'a>, 915 | string, 916 | ~timeout: int=?, 917 | ~retry: int=?, 918 | ~repeats: int=?, 919 | ~concurrent: bool=?, 920 | ~sequential: bool=?, 921 | ~skip: bool=?, 922 | ~only: bool=?, 923 | ~todo: bool=?, 924 | ~fails: bool=?, 925 | ('a, testCtx) => promise, 926 | ) => unit 927 | 928 | let it: ( 929 | array<'a>, 930 | string, 931 | ~timeout: int=?, 932 | ~retry: int=?, 933 | ~repeats: int=?, 934 | ~concurrent: bool=?, 935 | ~sequential: bool=?, 936 | ~skip: bool=?, 937 | ~only: bool=?, 938 | ~todo: bool=?, 939 | ~fails: bool=?, 940 | ('a, testCtx) => unit, 941 | ) => unit 942 | let itAsync: ( 943 | array<'a>, 944 | string, 945 | ~timeout: int=?, 946 | ~retry: int=?, 947 | ~repeats: int=?, 948 | ~concurrent: bool=?, 949 | ~sequential: bool=?, 950 | ~skip: bool=?, 951 | ~only: bool=?, 952 | ~todo: bool=?, 953 | ~fails: bool=?, 954 | ('a, testCtx) => promise, 955 | ) => unit 956 | } 957 | 958 | module For: ForType = { 959 | module Ext = { 960 | type describe 961 | type test 962 | type it 963 | 964 | @module("vitest") @val 965 | external describe: describe = "describe" 966 | 967 | @module("vitest") @val 968 | external test: test = "test" 969 | 970 | @module("vitest") @val 971 | external it: it = "it" 972 | 973 | @send 974 | external describeObj: ( 975 | ~describe: describe, 976 | ~cases: array<'a>, 977 | ) => (~name: string, ~options: testCollectorOptions, ~f: @uncurry ('a => unit)) => unit = "for" 978 | 979 | @send 980 | external describeObjAsync: ( 981 | ~describe: describe, 982 | ~cases: array<'a>, 983 | ) => ( 984 | ~name: string, 985 | ~options: testCollectorOptions, 986 | ~f: @uncurry ('a => promise), 987 | ) => unit = "for" 988 | 989 | @send 990 | external testObj: ( 991 | ~test: test, 992 | ~cases: array<'a>, 993 | ) => ( 994 | ~name: string, 995 | ~options: testCollectorOptions, 996 | ~f: @uncurry ('a, testCtx) => unit, 997 | ) => unit = "for" 998 | 999 | @send 1000 | external testObjAsync: ( 1001 | ~test: test, 1002 | ~cases: array<'a>, 1003 | ) => ( 1004 | ~name: string, 1005 | ~options: testCollectorOptions, 1006 | ~f: @uncurry ('a, testCtx) => promise, 1007 | ) => unit = "for" 1008 | 1009 | @send 1010 | external itObj: ( 1011 | ~it: it, 1012 | ~cases: array<'a>, 1013 | ) => ( 1014 | ~name: string, 1015 | ~options: testCollectorOptions, 1016 | ~f: @uncurry ('a, testCtx) => unit, 1017 | ) => unit = "for" 1018 | 1019 | @send 1020 | external itObjAsync: ( 1021 | ~it: it, 1022 | ~cases: array<'a>, 1023 | ) => ( 1024 | ~name: string, 1025 | ~options: testCollectorOptions, 1026 | ~f: @uncurry ('a, testCtx) => promise, 1027 | ) => unit = "for" 1028 | } 1029 | 1030 | @inline 1031 | let describe = ( 1032 | cases, 1033 | name, 1034 | ~timeout=?, 1035 | ~retry=?, 1036 | ~repeats=?, 1037 | ~concurrent=?, 1038 | ~sequential=?, 1039 | ~skip=?, 1040 | ~only=?, 1041 | ~todo=?, 1042 | ~fails=?, 1043 | f, 1044 | ) => 1045 | Ext.describeObj(~describe=Ext.describe, ~cases)( 1046 | ~name, 1047 | ~options={ 1048 | ?timeout, 1049 | ?retry, 1050 | ?repeats, 1051 | ?concurrent, 1052 | ?sequential, 1053 | ?skip, 1054 | ?only, 1055 | ?todo, 1056 | ?fails, 1057 | }, 1058 | ~f, 1059 | ) 1060 | 1061 | @inline 1062 | let describeAsync = ( 1063 | cases, 1064 | name, 1065 | ~timeout=?, 1066 | ~retry=?, 1067 | ~repeats=?, 1068 | ~concurrent=?, 1069 | ~sequential=?, 1070 | ~skip=?, 1071 | ~only=?, 1072 | ~todo=?, 1073 | ~fails=?, 1074 | f, 1075 | ) => 1076 | Ext.describeObjAsync(~describe=Ext.describe, ~cases)( 1077 | ~name, 1078 | ~options={ 1079 | ?timeout, 1080 | ?retry, 1081 | ?repeats, 1082 | ?concurrent, 1083 | ?sequential, 1084 | ?skip, 1085 | ?only, 1086 | ?todo, 1087 | ?fails, 1088 | }, 1089 | ~f, 1090 | ) 1091 | 1092 | @inline 1093 | let test = ( 1094 | cases, 1095 | name, 1096 | ~timeout=?, 1097 | ~retry=?, 1098 | ~repeats=?, 1099 | ~concurrent=?, 1100 | ~sequential=?, 1101 | ~skip=?, 1102 | ~only=?, 1103 | ~todo=?, 1104 | ~fails=?, 1105 | f, 1106 | ) => 1107 | Ext.testObj(~test=Ext.test, ~cases)( 1108 | ~name, 1109 | ~options={ 1110 | ?timeout, 1111 | ?retry, 1112 | ?repeats, 1113 | ?concurrent, 1114 | ?sequential, 1115 | ?skip, 1116 | ?only, 1117 | ?todo, 1118 | ?fails, 1119 | }, 1120 | ~f, 1121 | ) 1122 | 1123 | @inline 1124 | let testAsync = ( 1125 | cases, 1126 | name, 1127 | ~timeout=?, 1128 | ~retry=?, 1129 | ~repeats=?, 1130 | ~concurrent=?, 1131 | ~sequential=?, 1132 | ~skip=?, 1133 | ~only=?, 1134 | ~todo=?, 1135 | ~fails=?, 1136 | f, 1137 | ) => 1138 | Ext.testObjAsync(~test=Ext.test, ~cases)( 1139 | ~name, 1140 | ~options={ 1141 | ?timeout, 1142 | ?retry, 1143 | ?repeats, 1144 | ?concurrent, 1145 | ?sequential, 1146 | ?skip, 1147 | ?only, 1148 | ?todo, 1149 | ?fails, 1150 | }, 1151 | ~f, 1152 | ) 1153 | 1154 | @inline 1155 | let it = ( 1156 | cases, 1157 | name, 1158 | ~timeout=?, 1159 | ~retry=?, 1160 | ~repeats=?, 1161 | ~concurrent=?, 1162 | ~sequential=?, 1163 | ~skip=?, 1164 | ~only=?, 1165 | ~todo=?, 1166 | ~fails=?, 1167 | f, 1168 | ) => 1169 | Ext.itObj(~it=Ext.it, ~cases)( 1170 | ~name, 1171 | ~options={ 1172 | ?timeout, 1173 | ?retry, 1174 | ?repeats, 1175 | ?concurrent, 1176 | ?sequential, 1177 | ?skip, 1178 | ?only, 1179 | ?todo, 1180 | ?fails, 1181 | }, 1182 | ~f, 1183 | ) 1184 | 1185 | @inline 1186 | let itAsync = ( 1187 | cases, 1188 | name, 1189 | ~timeout=?, 1190 | ~retry=?, 1191 | ~repeats=?, 1192 | ~concurrent=?, 1193 | ~sequential=?, 1194 | ~skip=?, 1195 | ~only=?, 1196 | ~todo=?, 1197 | ~fails=?, 1198 | f, 1199 | ) => 1200 | Ext.itObjAsync(~it=Ext.it, ~cases)( 1201 | ~name, 1202 | ~options={ 1203 | ?timeout, 1204 | ?retry, 1205 | ?repeats, 1206 | ?concurrent, 1207 | ?sequential, 1208 | ?skip, 1209 | ?only, 1210 | ?todo, 1211 | ?fails, 1212 | }, 1213 | ~f, 1214 | ) 1215 | } 1216 | 1217 | module Todo = { 1218 | type todo_describe 1219 | type todo_test 1220 | type todo_it 1221 | 1222 | %%private( 1223 | @module("vitest") @val 1224 | external todo_describe: todo_describe = "describe" 1225 | 1226 | @module("vitest") @val 1227 | external todo_test: todo_test = "test" 1228 | 1229 | @module("vitest") @val 1230 | external todo_it: todo_it = "it" 1231 | ) 1232 | 1233 | @send external describe: (todo_describe, string) => unit = "todo" 1234 | @inline let describe = name => todo_describe->describe(name) 1235 | 1236 | @send external test: (todo_test, string) => unit = "todo" 1237 | @inline let test = name => todo_test->test(name) 1238 | 1239 | @send external it: (todo_it, string) => unit = "todo" 1240 | @inline let it = name => todo_it->it(name) 1241 | } 1242 | 1243 | @module("vitest") @val external beforeEach: (unit => unit) => unit = "beforeEach" 1244 | 1245 | @module("vitest") @val 1246 | external beforeEachAsync: (unit => promise, Js.Undefined.t) => unit = "beforeEach" 1247 | 1248 | @inline 1249 | let beforeEachAsync = (~timeout=?, callback) => 1250 | beforeEachAsync(callback, timeout->Js.Undefined.fromOption) 1251 | 1252 | @module("vitest") external beforeAll: (unit => unit) => unit = "beforeAll" 1253 | 1254 | @module("vitest") 1255 | external beforeAllAsync: (unit => promise, Js.Undefined.t) => unit = "beforeAll" 1256 | 1257 | @inline 1258 | let beforeAllAsync = (~timeout=?, callback) => 1259 | beforeAllAsync(callback, timeout->Js.Undefined.fromOption) 1260 | 1261 | @module("vitest") external afterEach: (unit => unit) => unit = "afterEach" 1262 | 1263 | @module("vitest") 1264 | external afterEachAsync: (unit => promise, Js.Undefined.t) => unit = "afterEach" 1265 | 1266 | @inline 1267 | let afterEachAsync = (~timeout=?, callback) => 1268 | afterEachAsync(callback, timeout->Js.Undefined.fromOption) 1269 | 1270 | @module("vitest") 1271 | external afterAll: (unit => unit) => unit = "afterAll" 1272 | 1273 | @module("vitest") 1274 | external afterAllAsync: (unit => promise, Js.Undefined.t) => unit = "afterAll" 1275 | 1276 | @inline 1277 | let afterAllAsync = (~timeout=?, callback) => 1278 | afterAllAsync(callback, timeout->Js.Undefined.fromOption) 1279 | 1280 | module Expect = Vitest_Matchers 1281 | 1282 | module Assert = Vitest_Assert 1283 | 1284 | module Vi = Vitest_Helpers 1285 | 1286 | module Bindings = Vitest_Bindings 1287 | 1288 | @send 1289 | external expect: (testCtx, 'a) => expected<'a> = "expect" 1290 | 1291 | @get 1292 | external inner: testCtx => testCtxExpect = "expect" 1293 | 1294 | @send 1295 | external assertions: (testCtxExpect, int) => unit = "assertions" 1296 | @inline 1297 | let assertions = (testCtx, n) => testCtx->inner->assertions(n) 1298 | 1299 | @send 1300 | external hasAssertion: testCtxExpect => unit = "hasAssertion" 1301 | @inline 1302 | let hasAssertion = testCtx => testCtx->inner->hasAssertion 1303 | 1304 | @send external skip: (testCtx, ~note: string=?) => unit = "skip" 1305 | 1306 | @send external skipIf: (testCtx, bool, ~note: string=?) => unit = "skip" 1307 | @inline 1308 | let skipIf = (testCtx, ~note=?, condition) => testCtx->skipIf(condition, ~note?) 1309 | 1310 | @scope("import.meta") @val 1311 | external inSource: bool = "vitest" 1312 | 1313 | module InSource = Vitest_Bindings.InSource 1314 | 1315 | module Benchmark = Vitest_Benchmark 1316 | -------------------------------------------------------------------------------- /src/Vitest_Assert.res: -------------------------------------------------------------------------------- 1 | type t 2 | 3 | %%private(@module("vitest") @val external assert_obj: t = "assert") 4 | 5 | @module("vitest") 6 | external assert_: (bool, Js.undefined) => unit = "assert" 7 | let assert_ = (~message=?, value) => assert_(value, message->Js.Undefined.fromOption) 8 | 9 | @module("vitest") @scope("expect") 10 | external unreachable: (~message: string=?, unit) => unit = "unreachable" 11 | 12 | @send external equal: (t, 'a, 'a, Js.undefined) => unit = "equal" 13 | 14 | @inline 15 | let equal = (~message=?, a, b) => assert_obj->equal(a, b, message->Js.Undefined.fromOption) 16 | 17 | @send external deepEqual: (t, 'a, 'a, Js.undefined) => unit = "deepEqual" 18 | 19 | @inline 20 | let deepEqual = (~message=?, a, b) => assert_obj->deepEqual(a, b, message->Js.Undefined.fromOption) 21 | -------------------------------------------------------------------------------- /src/Vitest_Benchmark.res: -------------------------------------------------------------------------------- 1 | // TODO: import rescript-tinybench 2 | 3 | type bench 4 | 5 | type suiteOptions = { 6 | skip?: bool, 7 | only?: bool, 8 | todo?: bool, 9 | } 10 | 11 | type benchOptions = { 12 | time?: int, 13 | iterations?: int, 14 | throws?: bool, 15 | warmupTime?: int, 16 | warmupIterations?: int, 17 | } 18 | 19 | type suiteDef = (string, suiteOptions, unit => unit) => unit 20 | type benchDef = (string, bench => unit, benchOptions) => unit 21 | type benchAsyncDef = (string, bench => promise, benchOptions) => unit 22 | 23 | module type Bindings = { 24 | let describe: suiteDef 25 | let bench: benchDef 26 | let benchAsync: benchAsyncDef 27 | } 28 | 29 | module type Runner = { 30 | let describe: ( 31 | string, 32 | ~skip: bool=?, 33 | ~only: bool=?, 34 | ~todo: bool=?, 35 | unit => unit, 36 | ) => unit 37 | let bench: ( 38 | string, 39 | ~time: int=?, 40 | ~iterations: int=?, 41 | ~throws: bool=?, 42 | ~warmupTime: int=?, 43 | ~warmupIterations: int=?, 44 | bench => unit, 45 | ) => unit 46 | let benchAsync: ( 47 | string, 48 | ~time: int=?, 49 | ~iterations: int=?, 50 | ~throws: bool=?, 51 | ~warmupTime: int=?, 52 | ~warmupIterations: int=?, 53 | bench => promise, 54 | ) => unit 55 | } 56 | 57 | module MakeRunner = (Bindings: Bindings) => { 58 | @inline 59 | let describe = (name, ~skip=?, ~only=?, ~todo=?, callback) => 60 | Bindings.describe( 61 | name, 62 | { 63 | ?skip, 64 | ?only, 65 | ?todo, 66 | }, 67 | callback, 68 | ) 69 | 70 | @inline 71 | let bench = ( 72 | name, 73 | ~time=?, 74 | ~iterations=?, 75 | ~throws=?, 76 | ~warmupTime=?, 77 | ~warmupIterations=?, 78 | callback, 79 | ) => Bindings.bench(name, callback, {?time, ?iterations, ?throws, ?warmupTime, ?warmupIterations}) 80 | 81 | @inline 82 | let benchAsync = ( 83 | name, 84 | ~time=?, 85 | ~iterations=?, 86 | ~throws=?, 87 | ~warmupTime=?, 88 | ~warmupIterations=?, 89 | callback, 90 | ) => 91 | Bindings.benchAsync(name, callback, {?time, ?iterations, ?throws, ?warmupTime, ?warmupIterations}) 92 | } 93 | 94 | include MakeRunner({ 95 | @module("vitest") @val 96 | external describe: suiteDef = "describe" 97 | 98 | @module("vitest") @val 99 | external bench: benchDef = "bench" 100 | 101 | @module("vitest") @val 102 | external benchAsync: benchAsyncDef = "bench" 103 | }) 104 | 105 | module Only = { 106 | type only_describe 107 | type only_bench 108 | 109 | %%private( 110 | @module("vitest") @val 111 | external only_describe: only_describe = "describe" 112 | 113 | @module("vitest") @val 114 | external only_bench: only_bench = "bench" 115 | ) 116 | 117 | @get 118 | external describe: only_describe => suiteDef = "only" 119 | 120 | @get 121 | external bench: only_bench => benchDef = "only" 122 | 123 | @get 124 | external benchAsync: only_bench => benchAsyncDef = "only" 125 | 126 | include MakeRunner({ 127 | let describe = only_describe->describe 128 | let bench = only_bench->bench 129 | let benchAsync = only_bench->benchAsync 130 | }) 131 | } 132 | 133 | module Skip = { 134 | type skip_describe 135 | type skip_bench 136 | 137 | %%private( 138 | @module("vitest") @val 139 | external skip_describe: skip_describe = "describe" 140 | 141 | @module("vitest") @val 142 | external skip_bench: skip_bench = "bench" 143 | ) 144 | 145 | @get 146 | external describe: skip_describe => suiteDef = "skip" 147 | 148 | @get 149 | external bench: skip_bench => benchDef = "skip" 150 | 151 | @get 152 | external benchAsync: skip_bench => benchAsyncDef = "skip" 153 | 154 | include MakeRunner({ 155 | let describe = skip_describe->describe 156 | let bench = skip_bench->bench 157 | let benchAsync = skip_bench->benchAsync 158 | }) 159 | } 160 | 161 | module Todo = { 162 | type todo_describe 163 | type todo_bench 164 | 165 | %%private( 166 | @module("vitest") @val 167 | external todo_describe: todo_describe = "describe" 168 | 169 | @module("vitest") @val 170 | external todo_bench: todo_bench = "bench" 171 | ) 172 | 173 | @send 174 | external describe: (todo_describe, string) => unit = "todo" 175 | @inline 176 | let describe = name => todo_describe->describe(name) 177 | 178 | @send 179 | external bench: (todo_bench, string) => unit = "todo" 180 | @inline 181 | let bench = name => todo_bench->bench(name) 182 | 183 | @send 184 | external benchAsync: (todo_bench, string) => unit = "todo" 185 | @inline 186 | let benchAsync = name => todo_bench->benchAsync(name) 187 | } 188 | -------------------------------------------------------------------------------- /src/Vitest_Benchmark.resi: -------------------------------------------------------------------------------- 1 | type bench 2 | 3 | type suiteOptions = { 4 | skip?: bool, 5 | only?: bool, 6 | todo?: bool, 7 | } 8 | 9 | type benchOptions = { 10 | time?: int, 11 | iterations?: int, 12 | throws?: bool, 13 | warmupTime?: int, 14 | warmupIterations?: int, 15 | } 16 | 17 | module type Runner = { 18 | let describe: ( 19 | string, 20 | ~skip: bool=?, 21 | ~only: bool=?, 22 | ~todo: bool=?, 23 | unit => unit, 24 | ) => unit 25 | let bench: ( 26 | string, 27 | ~time: int=?, 28 | ~iterations: int=?, 29 | ~throws: bool=?, 30 | ~warmupTime: int=?, 31 | ~warmupIterations: int=?, 32 | bench => unit, 33 | ) => unit 34 | let benchAsync: ( 35 | string, 36 | ~time: int=?, 37 | ~iterations: int=?, 38 | ~throws: bool=?, 39 | ~warmupTime: int=?, 40 | ~warmupIterations: int=?, 41 | bench => promise, 42 | ) => unit 43 | } 44 | 45 | include Runner 46 | module Only: Runner 47 | module Skip: Runner 48 | 49 | module Todo: { 50 | let describe: string => unit 51 | let bench: string => unit 52 | let benchAsync: string => unit 53 | } 54 | -------------------------------------------------------------------------------- /src/Vitest_Bindings.res: -------------------------------------------------------------------------------- 1 | open Vitest_Types 2 | 3 | @deprecated("Implicit `BuiltIn` binding is deprecated, please bind the `t` context explicitly.") 4 | module BuiltIn = { 5 | @module("vitest") @val 6 | external testCtx: testCtx = "expect" 7 | 8 | @module("vitest") 9 | external expect: 'a => expected<'a> = "expect" 10 | 11 | @send 12 | external assertions: (testCtx, int) => unit = "assertions" 13 | let assertions = x => testCtx->assertions(x) 14 | 15 | @send 16 | external hasAssertion: testCtx => unit = "hasAssertion" 17 | let hasAssertion = () => testCtx->hasAssertion 18 | } 19 | 20 | module InSource = { 21 | @scope("import.meta.vitest") @val 22 | external describe: (string, @uncurry unit => unit) => unit = "describe" 23 | 24 | @scope("import.meta.vitest") @val 25 | external test: (string, @uncurry testCtx => unit) => unit = "test" 26 | 27 | @scope("import.meta.vitest") @val 28 | external testAsync: (string, @uncurry unit => promise) => unit = "test" 29 | 30 | @scope("import.meta.vitest") @val 31 | external it: (string, @uncurry unit => unit) => unit = "it" 32 | 33 | @scope("import.meta.vitest") @val 34 | external itAsync: (string, @uncurry unit => promise) => unit = "it" 35 | 36 | @send 37 | external expect: (testCtx, 'a) => expected<'a> = "expect" 38 | 39 | module Expect = Vitest_Matchers 40 | } 41 | -------------------------------------------------------------------------------- /src/Vitest_Helpers.res: -------------------------------------------------------------------------------- 1 | type t 2 | 3 | %%private(@module("vitest") @val external vi_obj: t = "vi") 4 | 5 | @send external advanceTimersByTime: (t, int) => t = "advanceTimersByTime" 6 | @inline let advanceTimersByTime = ms => vi_obj->advanceTimersByTime(ms) 7 | 8 | @send external advanceTimersByTimeAsync: (t, int) => promise = "advanceTimersByTimeAsync" 9 | let advanceTimersByTimeAsync = time => vi_obj->advanceTimersByTimeAsync(time) 10 | 11 | @send external advanceTimersToNextTimer: t => t = "advanceTimersToNextTimer" 12 | @inline let advanceTimersToNextTimer = () => vi_obj->advanceTimersToNextTimer 13 | 14 | @send external advanceTimersToNextTimerAsync: t => promise = "advanceTimersToNextTimerAsync" 15 | let advanceTimersToNextTimerAsync = () => vi_obj->advanceTimersToNextTimerAsync 16 | 17 | @send external getTimerCount: t => int = "getTimerCount" 18 | let getTimerCount = () => vi_obj->getTimerCount 19 | 20 | @send external clearAllTimers: t => t = "clearAllTimers" 21 | let clearAllTimers = () => vi_obj->clearAllTimers 22 | 23 | @send external runAllTicks: t => t = "runAllTicks" 24 | let runAllTicks = () => vi_obj->runAllTicks 25 | 26 | @send external runAllTimers: t => t = "runAllTimers" 27 | @inline let runAllTimers = () => vi_obj->runAllTimers 28 | 29 | @send external runAllTimersAsync: t => promise = "runAllTimersAsync" 30 | let runAllTimersAsync = () => vi_obj->runAllTimersAsync 31 | 32 | @send external runOnlyPendingTimers: t => t = "runOnlyPendingTimers" 33 | @inline let runOnlyPendingTimers = () => vi_obj->runOnlyPendingTimers 34 | 35 | @send external runOnlyPendingTimersAsync: t => promise = "runOnlyPendingTimersAsync" 36 | let runOnlyPendingTimersAsync = () => vi_obj->runOnlyPendingTimersAsync 37 | 38 | @send 39 | external setSystemTime: (t, @unwrap [#Date(Js.Date.t) | #String(string) | #Int(int)]) => t = 40 | "setSystemTime" 41 | let setSystemTime = time => vi_obj->setSystemTime(time) 42 | 43 | /** 44 | @see https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/sinonjs__fake-timers/index.d.ts 45 | */ 46 | type fakeTimersConfig = { 47 | now?: Js.Date.t, // or int 48 | toFake?: array, 49 | loopLimit?: int, 50 | shouldAdvanceTime?: bool, 51 | advanceTimeDelta?: int, 52 | shouldClearNativeTimers?: bool, 53 | } 54 | 55 | @send external useFakeTimers: (t, ~config: fakeTimersConfig=?, unit) => t = "useFakeTimers" 56 | @inline let useFakeTimers = (~config=?, ()) => vi_obj->useFakeTimers(~config?, ()) 57 | 58 | @send external useRealTimers: t => t = "useRealTimers" 59 | @inline let useRealTimers = () => vi_obj->useRealTimers 60 | 61 | @send external isFakeTimers: t => bool = "isFakeTimers" 62 | let isFakeTimers = () => vi_obj->isFakeTimers 63 | 64 | @send @return(nullable) 65 | external getMockedSystemTime: t => option = "getMockedSystemTime" 66 | let getMockedSystemTime = () => vi_obj->getMockedSystemTime 67 | 68 | @send external getRealSystemTime: t => float = "getRealSystemTime" 69 | let getRealSystemTime = () => vi_obj->getRealSystemTime 70 | 71 | type waitForOptions = { 72 | timeout?: int, 73 | interval?: int, 74 | } 75 | 76 | @send external waitFor: (t, @uncurry unit => 'a, waitForOptions) => promise<'a> = "waitFor" 77 | 78 | /** 79 | @since(vitest >= 0.34.5) 80 | */ 81 | let waitFor = (callback, ~timeout=?, ~interval=?, ()) => { 82 | waitFor(vi_obj, callback, {?timeout, ?interval}) 83 | } 84 | 85 | @send 86 | external waitForAsync: (t, @uncurry unit => promise<'a>, waitForOptions) => promise<'a> = "waitFor" 87 | 88 | /** 89 | @since(vitest >= 0.34.5) 90 | */ 91 | let waitForAsync = (callback, ~timeout=?, ~interval=?, ()) => { 92 | waitForAsync(vi_obj, callback, {?timeout, ?interval}) 93 | } 94 | 95 | type waitUntilOptions = { 96 | timeout?: int, 97 | interval?: int, 98 | } 99 | 100 | @send 101 | external waitUntil: (t, @uncurry unit => 'a, waitUntilOptions) => promise<'a> = "waitUntil" 102 | 103 | /** 104 | @since(vitest >= 0.34.5) 105 | */ 106 | let waitUntil = (callback, ~timeout=?, ~interval=?, ()) => { 107 | waitUntil(vi_obj, callback, {?timeout, ?interval}) 108 | } 109 | 110 | @send 111 | external waitUntilAsync: (t, @uncurry unit => promise<'a>, waitUntilOptions) => promise<'a> = 112 | "waitUntil" 113 | 114 | /** 115 | @since(vitest >= 0.34.5) 116 | */ 117 | let waitUntilAsync = (callback, ~timeout=?, ~interval=?, ()) => { 118 | waitUntilAsync(vi_obj, callback, {?timeout, ?interval}) 119 | } 120 | 121 | // binding this using vi_obj causes a runtime error. this is because vitest sees this inside this file, then tries to evaluate the hoisted function, but the hoisted function is not provided yet, it's just a parameter to the function 122 | @send external hoisted: (t, @uncurry unit => 'a) => 'a = "hoisted" 123 | -------------------------------------------------------------------------------- /src/Vitest_Matchers.res: -------------------------------------------------------------------------------- 1 | open Vitest_Types 2 | 3 | type reinforcement<'a, 'b> = (assertion<'a>, 'a => 'b) => assertion<'b> 4 | 5 | external coerce_assertion: assertion<'a> => assertion<'b> = "%identity" 6 | 7 | let dangerously_reinforce_assertion: reinforcement<'a, 'b> = %raw(` 8 | function(assertion, cast) { 9 | let inner = assertion.__flags; 10 | inner.object = cast(inner.object); 11 | return assertion; 12 | } 13 | `) 14 | 15 | module MakeMatchers = ( 16 | Config: { 17 | type return<'a> 18 | }, 19 | ) => { 20 | @get external not: assertion<'a> => assertion<'a> = "not" 21 | 22 | @send external toBe: (assertion<'a>, 'a) => Config.return<'a> = "toBe" 23 | 24 | @send external eq: (assertion<'a>, 'a) => Config.return<'a> = "eq" 25 | 26 | @send external toBeDefined: assertion> => Config.return<'a> = "toBeDefined" 27 | 28 | @send external toBeUndefined: assertion> => Config.return<'a> = "toBeUndefined" 29 | 30 | @send external toBeTruthy: assertion<'a> => Config.return<'a> = "toBeTruthy" 31 | 32 | @send external toBeFalsy: assertion<'a> => Config.return<'a> = "toBeFalsy" 33 | 34 | @send external toBeNull: assertion> => Config.return<'a> = "toBeNull" 35 | 36 | // @send external toBeInstanceOf: (assertion<'a>, ?) => Config.return<'a> = "toBeInstanceOf" 37 | 38 | @send external toEqual: (assertion<'a>, 'a) => Config.return<'a> = "toEqual" 39 | 40 | @inline 41 | let toBeSome = (~some=?, expected: assertion>) => { 42 | switch some { 43 | | Some(id) => expected->toEqual(id) 44 | | None => expected->coerce_assertion->not->toBeUndefined 45 | } 46 | } 47 | 48 | @inline 49 | let toBeNone = (expected: assertion>) => { 50 | expected->coerce_assertion->toBeUndefined 51 | } 52 | 53 | @send external toStrictEqual: (assertion<'a>, 'a) => Config.return<'a> = "toStrictEqual" 54 | 55 | @send external toContain: (assertion>, 'a) => Config.return<'a> = "toContain" 56 | 57 | @send external toContainEqual: (assertion>, 'a) => Config.return<'a> = "toContainEqual" 58 | 59 | @send external toMatchSnapshot: assertion<'a> => Config.return<'a> = "toMatchSnapshot" 60 | 61 | @send 62 | external toThrow: (assertion 'a>, Js.undefined) => Config.return<'a> = "toThrow" 63 | @inline 64 | let toThrow = (~message=?, expected) => expected->toThrow(message->Js.Undefined.fromOption) 65 | 66 | @send 67 | external toThrowError: (assertion 'a>, Js.undefined) => Config.return<'a> = 68 | "toThrowError" 69 | @inline 70 | let toThrowError = (~message=?, expected) => 71 | expected->toThrowError(message->Js.Undefined.fromOption) 72 | 73 | module Int = { 74 | type t = int 75 | type expected = assertion 76 | 77 | @send external toBeGreaterThan: (expected, t) => Config.return<'a> = "toBeGreaterThan" 78 | 79 | @send 80 | external toBeGreaterThanOrEqual: (expected, t) => Config.return<'a> = "toBeGreaterThanOrEqual" 81 | 82 | @send external toBeLessThan: (expected, t) => Config.return<'a> = "toBeLessThan" 83 | 84 | @send external toBeLessThanOrEqual: (expected, t) => Config.return<'a> = "toBeLessThanOrEqual" 85 | } 86 | 87 | module Float = { 88 | type t = float 89 | type expected = assertion 90 | 91 | @send external toBeNaN: expected => Config.return<'a> = "toBeNaN" 92 | 93 | @send 94 | external toBeCloseTo: (expected, t, int) => Config.return<'a> = "toBeCloseTo" 95 | 96 | @send 97 | external toBeGreaterThan: (expected, t) => Config.return<'a> = "toBeGreaterThan" 98 | 99 | @send 100 | external toBeGreaterThanOrEqual: (expected, t) => Config.return<'a> = "toBeGreaterThanOrEqual" 101 | 102 | @send 103 | external toBeLessThan: (expected, t) => Config.return<'a> = "toBeLessThan" 104 | 105 | @send 106 | external toBeLessThanOrEqual: (expected, t) => Config.return<'a> = "toBeLessThanOrEqual" 107 | } 108 | 109 | module String = { 110 | type t = string 111 | type expected = assertion 112 | 113 | @send external toContain: (expected, t) => Config.return<'a> = "toContain" 114 | 115 | @send external toHaveLength: (expected, int) => Config.return<'a> = "toHaveLength" 116 | 117 | @send external toMatch: (expected, Js.Re.t) => Config.return<'a> = "toMatch" 118 | } 119 | 120 | module Array = { 121 | @send external toContain: (assertion>, 'a) => Config.return<'a> = "toContain" 122 | 123 | @send 124 | external toContainEqual: (assertion>, 'a) => Config.return<'a> = "toContainEqual" 125 | 126 | @send external toHaveLength: (assertion>, int) => Config.return<'a> = "toHaveLength" 127 | 128 | @send external toMatch: (assertion>, array<'a>) => Config.return<'a> = "toMatchObject" 129 | } 130 | 131 | module List = { 132 | @inline 133 | let toContain = (expected, item) => { 134 | expected 135 | ->dangerously_reinforce_assertion(list => list->Belt.List.toArray) 136 | ->Array.toContain(item) 137 | } 138 | 139 | @inline 140 | let toContainEqual = (expected, item) => { 141 | expected 142 | ->dangerously_reinforce_assertion(list => list->Belt.List.toArray) 143 | ->Array.toContainEqual(item) 144 | } 145 | 146 | @inline 147 | let toHaveLength = (expected, length) => { 148 | expected 149 | ->dangerously_reinforce_assertion(list => list->Belt.List.toArray) 150 | ->Array.toHaveLength(length) 151 | } 152 | 153 | @inline 154 | let toMatch = (expected, list) => { 155 | expected 156 | ->dangerously_reinforce_assertion(list => list->Belt.List.toArray) 157 | ->Array.toMatch(list->Belt.List.toArray) 158 | } 159 | } 160 | 161 | module Dict = { 162 | @send 163 | external toHaveProperty: (assertion>, string, 'a) => Config.return<'a> = 164 | "toHaveProperty" 165 | 166 | @send 167 | external toHaveKey: (assertion>, string) => Config.return<'a> = "toHaveProperty" 168 | 169 | @send 170 | external toMatch: (assertion>, Js.Dict.t<'a>) => Config.return<'a> = 171 | "toMatchObject" 172 | } 173 | } 174 | 175 | include MakeMatchers({ 176 | type return<'a> = unit 177 | }) 178 | 179 | module Promise = { 180 | @get external rejects: assertion> => assertion<'a> = "rejects" 181 | @get external resolves: assertion> => assertion<'a> = "resolves" 182 | 183 | include MakeMatchers({ 184 | type return<'a> = promise 185 | }) 186 | 187 | @send 188 | external toThrow: (assertion<'a>, Js.undefined) => promise = "toThrow" 189 | @inline 190 | let toThrow = (~message=?, expected) => expected->toThrow(message->Js.Undefined.fromOption) 191 | 192 | @send 193 | external toThrowError: (assertion<'a>, Js.undefined) => promise = "toThrowError" 194 | @inline 195 | let toThrowError = (~message=?, expected) => 196 | expected->toThrowError(message->Js.Undefined.fromOption) 197 | } 198 | 199 | -------------------------------------------------------------------------------- /src/Vitest_Types.res: -------------------------------------------------------------------------------- 1 | type testCtx 2 | type testCtxExpect 3 | 4 | /** Chai Assertion object */ 5 | type assertion<'a> 6 | type expected<'a> = assertion<'a> -------------------------------------------------------------------------------- /src/insource.res: -------------------------------------------------------------------------------- 1 | if Vitest.inSource { 2 | open Vitest.InSource 3 | 4 | test("In-source testing", t => { 5 | t->expect(1 + 2)->Expect.toBe(3) 6 | }) 7 | } 8 | -------------------------------------------------------------------------------- /tests/__snapshots__/assertions.test.mjs.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`Expect > toMatchSnapshot 1`] = `1`; 4 | 5 | exports[`Expect > toMatchSnapshot 2`] = `2`; 6 | 7 | exports[`Expect > toMatchSnapshot 3`] = `"one"`; 8 | 9 | exports[`Expect > toMatchSnapshot 4`] = `true`; 10 | 11 | exports[`Expect > toMatchSnapshot 5`] = ` 12 | { 13 | "foo": "bar", 14 | } 15 | `; 16 | -------------------------------------------------------------------------------- /tests/__snapshots__/suite.test.mjs.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`suite name > snapshot 1`] = ` 4 | { 5 | "foo": "bar", 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /tests/assertions.test.res: -------------------------------------------------------------------------------- 1 | open Vitest 2 | open! Bindings.BuiltIn 3 | 4 | describe("Assert", () => { 5 | test("assert_", _t => { 6 | Assert.assert_(true) 7 | Assert.assert_(1 == 1) 8 | Assert.assert_("one" == "one") 9 | Assert.assert_(1 == 1) 10 | }) 11 | 12 | test("unreachable", _t => { 13 | try { 14 | let _ = Js.Exn.raiseError("error") 15 | Assert.unreachable() 16 | } catch { 17 | | _ => Assert.assert_(~message="threw error", true) 18 | } 19 | 20 | try { 21 | expect(true)->Expect.toBe(true) 22 | } catch { 23 | | _ => Assert.unreachable() 24 | } 25 | }) 26 | }) 27 | 28 | describe("Expect", () => { 29 | test("toBe", _t => { 30 | expect(1)->Expect.toBe(1) 31 | expect(2.)->Expect.toBe(2.) 32 | expect("one")->Expect.toBe("one") 33 | expect(true)->Expect.toBe(true) 34 | }) 35 | 36 | test("not", _t => { 37 | expect(1)->Expect.not->Expect.toBe(2) 38 | expect(2.)->Expect.not->Expect.toBe(1.) 39 | expect("one")->Expect.not->Expect.toBe("two") 40 | expect(true)->Expect.not->Expect.toBe(false) 41 | }) 42 | 43 | test("eq", _t => { 44 | expect(1)->Expect.eq(1) 45 | expect(2.)->Expect.eq(2.) 46 | expect("one")->Expect.eq("one") 47 | expect(true)->Expect.eq(true) 48 | }) 49 | 50 | test("toBeDefined", _t => { 51 | Js.Undefined.return(1)->expect->Expect.toBeDefined 52 | Js.Undefined.return(2.)->expect->Expect.toBeDefined 53 | Js.Undefined.return("one")->expect->Expect.toBeDefined 54 | Js.Undefined.return(true)->expect->Expect.toBeDefined 55 | }) 56 | 57 | test("toBeUndefined", _t => { 58 | Js.Undefined.empty->expect->Expect.toBeUndefined 59 | }) 60 | 61 | test("toBeTruthy", _t => { 62 | expect({"foo": "bar"})->Expect.toBeTruthy 63 | expect(1)->Expect.toBeTruthy 64 | expect(0)->Expect.not->Expect.toBeTruthy 65 | expect("one")->Expect.toBeTruthy 66 | expect("")->Expect.not->Expect.toBeTruthy 67 | expect(true)->Expect.toBeTruthy 68 | expect(false)->Expect.not->Expect.toBeTruthy 69 | }) 70 | 71 | test("toBeFalsy", _t => { 72 | expect(0)->Expect.toBeFalsy 73 | expect(1)->Expect.not->Expect.toBeFalsy 74 | expect("")->Expect.toBeFalsy 75 | expect("one")->Expect.not->Expect.toBeFalsy 76 | expect(false)->Expect.toBeFalsy 77 | expect(true)->Expect.not->Expect.toBeFalsy 78 | }) 79 | 80 | test("toBeNull", _t => { 81 | Js.Null.empty->expect->Expect.toBeNull 82 | }) 83 | 84 | test("toEqual", _t => { 85 | expect(Ok(1))->Expect.toEqual(Ok(1)) 86 | expect(Error("error"))->Expect.toEqual(Error("error")) 87 | expect(Some("option"))->Expect.toEqual(Some("option")) 88 | expect(None)->Expect.toEqual(None) 89 | expect({"foo": "bar"})->Expect.toEqual({"foo": "bar"}) 90 | expect(1)->Expect.toEqual(1) 91 | expect(2.)->Expect.toEqual(2.) 92 | expect("one")->Expect.toEqual("one") 93 | expect(true)->Expect.toEqual(true) 94 | }) 95 | 96 | test("toBeSome", _t => { 97 | Some(1)->expect->Expect.toBeSome 98 | Some(2.)->expect->Expect.toBeSome 99 | Some("one")->expect->Expect.toBeSome 100 | Some(true)->expect->Expect.toBeSome 101 | Some({"foo": "bar"})->expect->Expect.toBeSome 102 | }) 103 | 104 | test("toBeNone", _t => { 105 | None->expect->Expect.toBeNone 106 | }) 107 | 108 | test("toStrictEqual", _t => { 109 | expect(Ok(1))->Expect.toStrictEqual(Ok(1)) 110 | expect(Error("error"))->Expect.toStrictEqual(Error("error")) 111 | expect(Some("option"))->Expect.toStrictEqual(Some("option")) 112 | expect(None)->Expect.toStrictEqual(None) 113 | expect({"foo": "bar"})->Expect.toStrictEqual({"foo": "bar"}) 114 | expect(1)->Expect.toStrictEqual(1) 115 | expect(2.)->Expect.toStrictEqual(2.) 116 | expect("one")->Expect.toStrictEqual("one") 117 | expect(true)->Expect.toStrictEqual(true) 118 | }) 119 | 120 | test("toContain", _t => { 121 | expect([1, 2, 3])->Expect.toContain(1) 122 | expect([1, 2, 3])->Expect.toContain(2) 123 | expect([1, 2, 3])->Expect.toContain(3) 124 | expect([1, 2, 3])->Expect.not->Expect.toContain(4) 125 | }) 126 | 127 | test("toContainEqual", _t => { 128 | expect([{"foo": 1}, {"foo": 2}, {"foo": 3}])->Expect.toContainEqual({"foo": 1}) 129 | expect([{"foo": 1}, {"foo": 2}, {"foo": 3}])->Expect.toContainEqual({"foo": 2}) 130 | expect([{"foo": 1}, {"foo": 2}, {"foo": 3}])->Expect.toContainEqual({"foo": 3}) 131 | expect([{"foo": 1}, {"foo": 2}, {"foo": 3}])->Expect.not->Expect.toContainEqual({"foo": 4}) 132 | }) 133 | 134 | test("toMatchSnapshot", _t => { 135 | expect(1)->Expect.toMatchSnapshot 136 | expect(2.)->Expect.toMatchSnapshot 137 | expect("one")->Expect.toMatchSnapshot 138 | expect(true)->Expect.toMatchSnapshot 139 | expect({"foo": "bar"})->Expect.toMatchSnapshot 140 | }) 141 | 142 | test("toThrow", _t => { 143 | expect(() => raise(Js.Exn.raiseError("error")))->Expect.toThrow 144 | }) 145 | 146 | test("toThrowError", _t => { 147 | expect(() => raise(Js.Exn.raiseError("error")))->Expect.toThrowError(~message="error") 148 | }) 149 | 150 | describe("Int", () => { 151 | describe( 152 | "Int", 153 | () => { 154 | test( 155 | "toBeGreaterThan", 156 | _t => { 157 | expect(5)->Expect.Int.toBeGreaterThan(3) 158 | expect(10)->Expect.Int.toBeGreaterThan(5) 159 | expect(0)->Expect.Int.toBeGreaterThan(-5) 160 | }, 161 | ) 162 | 163 | test( 164 | "toBeGreaterThanOrEqual", 165 | _t => { 166 | expect(5)->Expect.Int.toBeGreaterThanOrEqual(3) 167 | expect(5)->Expect.Int.toBeGreaterThanOrEqual(5) 168 | expect(10)->Expect.Int.toBeGreaterThanOrEqual(5) 169 | }, 170 | ) 171 | 172 | test( 173 | "toBeLessThan", 174 | _t => { 175 | expect(3)->Expect.Int.toBeLessThan(5) 176 | expect(5)->Expect.Int.toBeLessThan(10) 177 | expect(-5)->Expect.Int.toBeLessThan(0) 178 | }, 179 | ) 180 | 181 | test( 182 | "toBeLessThanOrEqual", 183 | _t => { 184 | expect(3)->Expect.Int.toBeLessThanOrEqual(5) 185 | expect(5)->Expect.Int.toBeLessThanOrEqual(5) 186 | expect(5)->Expect.Int.toBeLessThanOrEqual(10) 187 | }, 188 | ) 189 | }, 190 | ) 191 | }) 192 | 193 | describe("Float", () => { 194 | test( 195 | "toBeNaN", 196 | _t => { 197 | expect(Js.Math.acos(2.))->Expect.Float.toBeNaN 198 | }, 199 | ) 200 | 201 | test( 202 | "toBeCloseTo", 203 | _t => { 204 | expect(1.1)->Expect.Float.toBeCloseTo(1.2, 0) 205 | }, 206 | ) 207 | 208 | test( 209 | "toBeGreaterThan", 210 | _t => { 211 | expect(5.)->Expect.Float.toBeGreaterThan(3.) 212 | expect(10.)->Expect.Float.toBeGreaterThan(5.) 213 | expect(0.)->Expect.Float.toBeGreaterThan(-5.) 214 | }, 215 | ) 216 | 217 | test( 218 | "toBeGreaterThanOrEqual", 219 | _t => { 220 | expect(5.)->Expect.Float.toBeGreaterThanOrEqual(3.) 221 | expect(5.)->Expect.Float.toBeGreaterThanOrEqual(5.) 222 | expect(0.)->Expect.Float.toBeGreaterThanOrEqual(-5.) 223 | }, 224 | ) 225 | 226 | test( 227 | "toBeLessThan", 228 | _t => { 229 | expect(3.)->Expect.Float.toBeLessThan(5.) 230 | expect(5.)->Expect.Float.toBeLessThan(10.) 231 | expect(-5.)->Expect.Float.toBeLessThan(0.) 232 | }, 233 | ) 234 | 235 | test( 236 | "toBeLessThanOrEqual", 237 | _t => { 238 | expect(3.)->Expect.Float.toBeLessThanOrEqual(5.) 239 | expect(5.)->Expect.Float.toBeLessThanOrEqual(5.) 240 | expect(-5.)->Expect.Float.toBeLessThanOrEqual(0.) 241 | }, 242 | ) 243 | }) 244 | 245 | describe("String", () => { 246 | test( 247 | "toContain", 248 | _t => { 249 | expect("hello")->Expect.String.toContain("ell") 250 | expect("hello")->Expect.String.toContain("lo") 251 | expect("hello")->Expect.String.toContain("h") 252 | expect("hello")->Expect.not->Expect.String.toContain("x") 253 | }, 254 | ) 255 | 256 | test( 257 | "toHaveLength", 258 | _t => { 259 | expect("hello")->Expect.String.toHaveLength(5) 260 | expect("")->Expect.String.toHaveLength(0) 261 | expect("world")->Expect.not->Expect.String.toHaveLength(10) 262 | }, 263 | ) 264 | 265 | test( 266 | "toMatch", 267 | _t => { 268 | expect("hello")->Expect.String.toMatch(%re("/h.*o/")) 269 | expect("world")->Expect.String.toMatch(%re("/w.*d/")) 270 | expect("hello")->Expect.not->Expect.String.toMatch(%re("/x.*y/")) 271 | }, 272 | ) 273 | }) 274 | 275 | describe("Array", () => { 276 | test( 277 | "toContain", 278 | _t => { 279 | expect([1, 2, 3])->Expect.Array.toContain(2) 280 | expect(["hello", "world"])->Expect.Array.toContain("world") 281 | expect([true, false])->Expect.Array.toContain(false) 282 | expect([1, 2, 3])->Expect.not->Expect.Array.toContain(4) 283 | }, 284 | ) 285 | 286 | test( 287 | "toContainEqual", 288 | _t => { 289 | expect([1, 2, 3])->Expect.Array.toContainEqual(2) 290 | expect(["hello", "world"])->Expect.Array.toContainEqual("world") 291 | expect([true, false])->Expect.Array.toContainEqual(false) 292 | expect([1, 2, 3])->Expect.not->Expect.Array.toContainEqual(4) 293 | }, 294 | ) 295 | 296 | test( 297 | "toHaveLength", 298 | _t => { 299 | expect([1, 2, 3])->Expect.Array.toHaveLength(3) 300 | expect([])->Expect.Array.toHaveLength(0) 301 | expect([1, 2, 3])->Expect.not->Expect.Array.toHaveLength(5) 302 | }, 303 | ) 304 | 305 | test( 306 | "toMatch", 307 | _t => { 308 | expect([1, 2, 3])->Expect.Array.toMatch([1, 2, 3]) 309 | expect(["hello", "world"])->Expect.Array.toMatch(["hello", "world"]) 310 | expect([true, false])->Expect.Array.toMatch([true, false]) 311 | expect([1, 2, 3])->Expect.not->Expect.Array.toMatch([1, 2]) 312 | }, 313 | ) 314 | }) 315 | 316 | describe("List", () => { 317 | test( 318 | "toContain", 319 | _t => { 320 | let value = list{1, 2, 3} 321 | expect(value)->Expect.List.toContain(1) 322 | expect(value)->Expect.List.toContain(2) 323 | expect(value)->Expect.List.toContain(3) 324 | expect(value)->Expect.not->Expect.List.toContain(4) 325 | }, 326 | ) 327 | 328 | test( 329 | "toContainEqual", 330 | _t => { 331 | let value = list{{"property": 1}, {"property": 2}, {"property": 3}} 332 | expect(value)->Expect.List.toContainEqual({"property": 1}) 333 | expect(value)->Expect.List.toContainEqual({"property": 2}) 334 | expect(value)->Expect.List.toContainEqual({"property": 3}) 335 | expect(value)->Expect.not->Expect.List.toContainEqual({"property": 4}) 336 | }, 337 | ) 338 | 339 | test( 340 | "toHaveLength", 341 | _t => { 342 | let value = list{1, 2, 3} 343 | expect(value)->Expect.List.toHaveLength(3) 344 | expect(value)->Expect.not->Expect.List.toHaveLength(5) 345 | }, 346 | ) 347 | 348 | test( 349 | "toMatch", 350 | _t => { 351 | let value = list{1, 2, 3} 352 | expect(value)->Expect.List.toMatch(list{1, 2, 3}) 353 | expect(value)->Expect.not->Expect.List.toMatch(list{1, 2}) 354 | }, 355 | ) 356 | }) 357 | 358 | describe("Dict", () => { 359 | test( 360 | "toHaveProperty", 361 | _t => { 362 | let dict = Js.Dict.empty() 363 | Js.Dict.set(dict, "key", "value") 364 | expect(dict)->Expect.Dict.toHaveProperty("key", "value") 365 | expect(dict)->Expect.not->Expect.Dict.toHaveProperty("nonexistent", "value") 366 | }, 367 | ) 368 | 369 | test( 370 | "toHaveKey", 371 | _t => { 372 | let dict = Js.Dict.empty() 373 | Js.Dict.set(dict, "key", "value") 374 | expect(dict)->Expect.Dict.toHaveKey("key") 375 | expect(dict)->Expect.not->Expect.Dict.toHaveKey("nonexistent") 376 | }, 377 | ) 378 | 379 | test( 380 | "toMatch", 381 | _t => { 382 | let dict = Js.Dict.empty() 383 | Js.Dict.set(dict, "key1", "value1") 384 | Js.Dict.set(dict, "key2", "value2") 385 | expect(dict)->Expect.Dict.toMatch( 386 | Js.Dict.fromArray([("key1", "value1"), ("key2", "value2")]), 387 | ) 388 | expect(dict)->Expect.Dict.toMatch(Js.Dict.fromArray([("key1", "value1")])) 389 | expect(dict)->Expect.Dict.toMatch(Js.Dict.fromArray([("key2", "value2")])) 390 | expect(dict)->Expect.not->Expect.Dict.toMatch(Js.Dict.fromArray([("key1", "value2")])) 391 | }, 392 | ) 393 | }) 394 | 395 | describe("Promise", () => { 396 | testAsync( 397 | "rejects", 398 | async _t => { 399 | let promise = () => Js.Promise.reject(%raw(`new Error("hi")`)) 400 | await expect(promise())->Expect.Promise.rejects->Expect.Promise.toThrow(~message="hi") 401 | await expect(promise())->Expect.Promise.rejects->Expect.Promise.toThrowError(~message="hi") 402 | }, 403 | ) 404 | 405 | testAsync( 406 | "resolves", 407 | async _t => { 408 | let promise = () => Js.Promise.resolve(1) 409 | await expect(promise())->Expect.Promise.resolves->Expect.Promise.toEqual(1) 410 | }, 411 | ) 412 | }) 413 | }) 414 | -------------------------------------------------------------------------------- /tests/basic.test.res: -------------------------------------------------------------------------------- 1 | open Js 2 | open Vitest 3 | 4 | test("Math.sqrt()", t => { 5 | open Expect 6 | 7 | t->assertions(3) 8 | 9 | t->expect(Math.sqrt(4.0))->toBe(2.0) 10 | t->expect(Math.sqrt(144.0))->toBe(12.0) 11 | t->expect(Math.sqrt(2.0))->toBe(Math._SQRT2) 12 | }) 13 | 14 | @scope("JSON") @val external parse: string => 'a = "parse" 15 | @scope("JSON") @val external stringify: 'a => string = "stringify" 16 | 17 | test("JSON", t => { 18 | let input = { 19 | "foo": "hello", 20 | "bar": "world", 21 | } 22 | 23 | let output = stringify(input) 24 | 25 | t->expect(output)->Expect.eq(`{"foo":"hello","bar":"world"}`) 26 | Assert.deepEqual(parse(output), input, ~message="matches original") 27 | }) 28 | 29 | exception TestError 30 | 31 | let throwExn = () => { 32 | raise(TestError) 33 | } 34 | 35 | test("Exn", t => { 36 | t->expect(() => throwExn())->Expect.toThrowError 37 | }) 38 | 39 | test(~skip=true, "Skip 1", t => { 40 | t->expect(true)->Expect.toBeTruthy 41 | }) 42 | 43 | test("Skip 2", t => { 44 | t->skip(~note="Skipping this test") 45 | t->expect(true)->Expect.toBeFalsy 46 | }) 47 | 48 | test("Skip 3", t => { 49 | t->skipIf(true) 50 | t->expect(true)->Expect.toBeFalsy 51 | }) 52 | 53 | test(~fails=true, "Fails", t => { 54 | t->expect(true)->Expect.toBeFalsy 55 | }) 56 | -------------------------------------------------------------------------------- /tests/each.test.res: -------------------------------------------------------------------------------- 1 | open Vitest 2 | open! Bindings.BuiltIn 3 | 4 | let sumObj = [{"a": 3, "b": 5, "sum": 8}, {"a": 6, "b": 2, "sum": 8}] 5 | let sum2 = [(1, "1"), (6, "6")] 6 | let sum3 = [(1, 3, "4"), (6, 3, "9")] 7 | let sum4 = [(1, 2, 8, "11"), (6, 3, 8, "17"), (5, 9, 2, "16")] 8 | let sum5 = [(1, 3, 8, 6, "18"), (6, 3, 2, 4, "15"), (5, 9, 2, 3, "19")] 9 | 10 | Each.test(sumObj, "test: sum $a+$b=$sum", i => { 11 | expect(i["a"] + i["b"])->Expect.toBe(i["sum"]) 12 | expect(i["a"] + i["b"] + 1)->Expect.not->Expect.toBe(i["sum"]) 13 | }) 14 | 15 | Each.test2(sum2, "test2: %i=%s", (a, b) => { 16 | expect(a->Js.Int.toString)->Expect.toBe(b) 17 | expect((a + 1)->Js.Int.toString)->Expect.not->Expect.toBe(b) 18 | }) 19 | 20 | Each.test3(sum3, "test3: sum %i+%i=%s", (a, b, sum) => { 21 | expect((a + b)->Js.Int.toString)->Expect.toBe(sum) 22 | expect((a + b + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 23 | }) 24 | 25 | Each.test4(sum4, "test4: sum %i+%i+%i=%s", (a, b, c, sum) => { 26 | expect((a + b + c)->Js.Int.toString)->Expect.toBe(sum) 27 | expect((a + b + c + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 28 | }) 29 | 30 | Each.test5(sum5, "test5: sum %i+%i+%i+%i=%s", (a, b, c, d, sum) => { 31 | expect((a + b + c + d)->Js.Int.toString)->Expect.toBe(sum) 32 | expect((a + b + c + d + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 33 | }) 34 | 35 | Each.testAsync(sumObj, "testAsync: sum $a+$b=$sum", async i => 36 | { 37 | expect(i["a"] + i["b"])->Expect.toBe(i["sum"]) 38 | expect(i["a"] + i["b"] + 1)->Expect.not->Expect.toBe(i["sum"]) 39 | } 40 | ) 41 | 42 | Each.test2Async(sum2, "test2Async: %i=%s", async (a, b) => 43 | { 44 | expect(a->Js.Int.toString)->Expect.toBe(b) 45 | expect((a + 1)->Js.Int.toString)->Expect.not->Expect.toBe(b) 46 | } 47 | ) 48 | 49 | Each.test3Async(sum3, "test3Async: sum %i+%i=%s", async (a, b, sum) => 50 | { 51 | expect((a + b)->Js.Int.toString)->Expect.toBe(sum) 52 | expect((a + b + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 53 | } 54 | ) 55 | 56 | Each.test4Async(sum4, "test4Async: sum %i+%i+%i=%s", async (a, b, c, sum) => 57 | { 58 | expect((a + b + c)->Js.Int.toString)->Expect.toBe(sum) 59 | expect((a + b + c + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 60 | } 61 | ) 62 | 63 | Each.test5Async(sum5, "test5Async: sum %i+%i+%i+%i=%s", async (a, b, c, d, sum) => 64 | { 65 | expect((a + b + c + d)->Js.Int.toString)->Expect.toBe(sum) 66 | expect((a + b + c + d + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 67 | } 68 | ) 69 | 70 | Each.describe(sumObj, "describe: sum $a+$b=$sum", i => { 71 | test("correct", _ => expect(i["a"] + i["b"])->Expect.toBe(i["sum"])) 72 | test("incorrect", _ => expect(i["a"] + i["b"] + 1)->Expect.not->Expect.toBe(i["sum"])) 73 | }) 74 | 75 | Each.describe2(sum2, "describe2: %i=%s", (a, b) => { 76 | test("correct", _ => expect(a->Js.Int.toString)->Expect.toBe(b)) 77 | test("incorrect", _ => expect((a + 1)->Js.Int.toString)->Expect.not->Expect.toBe(b)) 78 | }) 79 | 80 | Each.describe3(sum3, "describe3: sum %i+%i=%s", (a, b, sum) => { 81 | test("correct", _ => expect((a + b)->Js.Int.toString)->Expect.toBe(sum)) 82 | test("incorrect", _ => expect((a + b + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum)) 83 | }) 84 | 85 | Each.describe4(sum4, "describe4: sum %i+%i+%i=%s", (a, b, c, sum) => { 86 | test("correct", _ => expect((a + b + c)->Js.Int.toString)->Expect.toBe(sum)) 87 | test("incorrect", _ => expect((a + b + c + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum)) 88 | }) 89 | 90 | Each.describe5(sum5, "describe5: sum %i+%i+%i+%i=%s", (a, b, c, d, sum) => { 91 | test("correct", _ => expect((a + b + c + d)->Js.Int.toString)->Expect.toBe(sum)) 92 | test("incorrect", _ => expect((a + b + c + d + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum)) 93 | }) 94 | 95 | Each.describeAsync(sumObj, "describeAsync: sum $a+$b=$sum", async i => 96 | { 97 | test("correct", _ => expect(i["a"] + i["b"])->Expect.toBe(i["sum"])) 98 | test("incorrect", _ => expect(i["a"] + i["b"] + 1)->Expect.not->Expect.toBe(i["sum"])) 99 | } 100 | ) 101 | Each.describe2Async(sum2, "describe2Async: %i=%s", async (a, b) => 102 | { 103 | test("correct", _ => expect(a->Js.Int.toString)->Expect.toBe(b)) 104 | test("incorrect", _ => expect((a + 1)->Js.Int.toString)->Expect.not->Expect.toBe(b)) 105 | } 106 | ) 107 | 108 | Each.describe3Async(sum3, "describe3Async: sum %i+%i=%s", async (a, b, sum) => 109 | { 110 | test("correct", _ => expect((a + b)->Js.Int.toString)->Expect.toBe(sum)) 111 | test("incorrect", _ => expect((a + b + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum)) 112 | } 113 | ) 114 | 115 | Each.describe4Async(sum4, "describe4Async: sum %i+%i+%i=%s", async (a, b, c, sum) => 116 | { 117 | test("correct", _ => expect((a + b + c)->Js.Int.toString)->Expect.toBe(sum)) 118 | test("incorrect", _ => expect((a + b + c + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum)) 119 | } 120 | ) 121 | 122 | Each.describe5Async(sum5, "describe5Async: sum %i+%i+%i+%i=%s", async (a, b, c, d, sum) => 123 | { 124 | test("correct", _ => expect((a + b + c + d)->Js.Int.toString)->Expect.toBe(sum)) 125 | test("incorrect", _ => 126 | expect((a + b + c + d + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 127 | ) 128 | } 129 | ) 130 | -------------------------------------------------------------------------------- /tests/for.test.res: -------------------------------------------------------------------------------- 1 | open Vitest 2 | 3 | let sumObj = [{"a": 3, "b": 5, "sum": 8}, {"a": 6, "b": 2, "sum": 8}] 4 | let sum2 = [(1, "1"), (6, "6")] 5 | let sum3 = [(1, 3, "4"), (6, 3, "9")] 6 | let sum4 = [(1, 2, 8, "11"), (6, 3, 8, "17"), (5, 9, 2, "16")] 7 | let sum5 = [(1, 3, 8, 6, "18"), (6, 3, 2, 4, "15"), (5, 9, 2, 3, "19")] 8 | 9 | sumObj->For.test("test: sum $a+$b=$sum", (i, t) => { 10 | t->expect(i["a"] + i["b"])->Expect.toBe(i["sum"]) 11 | t->expect(i["a"] + i["b"] + 1)->Expect.not->Expect.toBe(i["sum"]) 12 | }) 13 | 14 | sum2->For.test("test: %i=%s", ((a, b), t) => { 15 | t->expect(a->Js.Int.toString)->Expect.toBe(b) 16 | t->expect((a + 1)->Js.Int.toString)->Expect.not->Expect.toBe(b) 17 | }) 18 | 19 | sum3->For.test("test: sum %i+%i=%s", ((a, b, sum), t) => { 20 | t->expect((a + b)->Js.Int.toString)->Expect.toBe(sum) 21 | t->expect((a + b + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 22 | }) 23 | 24 | sum4->For.test("test: sum %i+%i+%i=%s", ((a, b, c, sum), t) => { 25 | t->expect((a + b + c)->Js.Int.toString)->Expect.toBe(sum) 26 | t->expect((a + b + c + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 27 | }) 28 | 29 | sum5->For.test("test: sum %i+%i+%i+%i=%s", ((a, b, c, d, sum), t) => { 30 | t->expect((a + b + c + d)->Js.Int.toString)->Expect.toBe(sum) 31 | t->expect((a + b + c + d + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 32 | }) 33 | 34 | sumObj->For.testAsync("testAsync: sum $a+$b=$sum", async (i, t) => { 35 | t->expect(i["a"] + i["b"])->Expect.toBe(i["sum"]) 36 | t->expect(i["a"] + i["b"] + 1)->Expect.not->Expect.toBe(i["sum"]) 37 | }) 38 | 39 | sum2->For.testAsync("testAsync: %i=%s", async ((a, b), t) => { 40 | t->expect(a->Js.Int.toString)->Expect.toBe(b) 41 | t->expect((a + 1)->Js.Int.toString)->Expect.not->Expect.toBe(b) 42 | }) 43 | 44 | sum3->For.testAsync("testAsync: sum %i+%i=%s", async ((a, b, sum), t) => { 45 | t->expect((a + b)->Js.Int.toString)->Expect.toBe(sum) 46 | t->expect((a + b + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 47 | }) 48 | 49 | sum4->For.testAsync("testAsync: sum %i+%i+%i=%s", async ((a, b, c, sum), t) => { 50 | t->expect((a + b + c)->Js.Int.toString)->Expect.toBe(sum) 51 | t->expect((a + b + c + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 52 | }) 53 | 54 | sum5->For.testAsync("testAsync: sum %i+%i+%i+%i=%s", async ((a, b, c, d, sum), t) => { 55 | t->expect((a + b + c + d)->Js.Int.toString)->Expect.toBe(sum) 56 | t->expect((a + b + c + d + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 57 | }) 58 | 59 | sumObj->For.it("it: sum $a+$b=$sum", (i, t) => { 60 | t->expect(i["a"] + i["b"])->Expect.toBe(i["sum"]) 61 | t->expect(i["a"] + i["b"] + 1)->Expect.not->Expect.toBe(i["sum"]) 62 | }) 63 | 64 | sum2->For.it("it: %i=%s", ((a, b), t) => { 65 | t->expect(a->Js.Int.toString)->Expect.toBe(b) 66 | t->expect((a + 1)->Js.Int.toString)->Expect.not->Expect.toBe(b) 67 | }) 68 | 69 | sum3->For.it("it: sum %i+%i=%s", ((a, b, sum), t) => { 70 | t->expect((a + b)->Js.Int.toString)->Expect.toBe(sum) 71 | t->expect((a + b + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 72 | }) 73 | 74 | sum4->For.it("it: sum %i+%i+%i=%s", ((a, b, c, sum), t) => { 75 | t->expect((a + b + c)->Js.Int.toString)->Expect.toBe(sum) 76 | t->expect((a + b + c + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 77 | }) 78 | 79 | sum5->For.it("it: sum %i+%i+%i+%i=%s", ((a, b, c, d, sum), t) => { 80 | t->expect((a + b + c + d)->Js.Int.toString)->Expect.toBe(sum) 81 | t->expect((a + b + c + d + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 82 | }) 83 | 84 | sumObj->For.itAsync("itAsync: sum $a+$b=$sum", async (i, t) => { 85 | t->expect(i["a"] + i["b"])->Expect.toBe(i["sum"]) 86 | t->expect(i["a"] + i["b"] + 1)->Expect.not->Expect.toBe(i["sum"]) 87 | }) 88 | 89 | sum2->For.itAsync("itAsync: %i=%s", async ((a, b), t) => { 90 | t->expect(a->Js.Int.toString)->Expect.toBe(b) 91 | t->expect((a + 1)->Js.Int.toString)->Expect.not->Expect.toBe(b) 92 | }) 93 | 94 | sum3->For.itAsync("itAsync: sum %i+%i=%s", async ((a, b, sum), t) => { 95 | t->expect((a + b)->Js.Int.toString)->Expect.toBe(sum) 96 | t->expect((a + b + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 97 | }) 98 | 99 | sum4->For.itAsync("itAsync: sum %i+%i+%i=%s", async ((a, b, c, sum), t) => { 100 | t->expect((a + b + c)->Js.Int.toString)->Expect.toBe(sum) 101 | t->expect((a + b + c + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 102 | }) 103 | 104 | sum5->For.itAsync("itAsync: sum %i+%i+%i+%i=%s", async ((a, b, c, d, sum), t) => { 105 | t->expect((a + b + c + d)->Js.Int.toString)->Expect.toBe(sum) 106 | t->expect((a + b + c + d + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 107 | }) 108 | 109 | sumObj->For.describe("sum $a+$b=$sum", i => { 110 | test("inner test", t => { 111 | t->expect(i["a"] + i["b"])->Expect.toBe(i["sum"]) 112 | t->expect(i["a"] + i["b"] + 1)->Expect.not->Expect.toBe(i["sum"]) 113 | }) 114 | }) 115 | 116 | sum2->For.describe("%i=%s", ((a, b)) => { 117 | test("inner test", t => { 118 | t->expect(a->Js.Int.toString)->Expect.toBe(b) 119 | t->expect((a + 1)->Js.Int.toString)->Expect.not->Expect.toBe(b) 120 | }) 121 | }) 122 | 123 | sum3->For.describe("sum %i+%i=%s", ((a, b, sum)) => { 124 | test("inner test", t => { 125 | t->expect((a + b)->Js.Int.toString)->Expect.toBe(sum) 126 | t->expect((a + b + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 127 | }) 128 | }) 129 | 130 | sum4->For.describe("sum %i+%i+%i=%s", ((a, b, c, sum)) => { 131 | test("inner test", t => { 132 | t->expect((a + b + c)->Js.Int.toString)->Expect.toBe(sum) 133 | t->expect((a + b + c + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 134 | }) 135 | }) 136 | 137 | sum5->For.describe("sum %i+%i+%i+%i=%s", ((a, b, c, d, sum)) => { 138 | test("inner test", t => { 139 | t->expect((a + b + c + d)->Js.Int.toString)->Expect.toBe(sum) 140 | t->expect((a + b + c + d + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 141 | }) 142 | }) 143 | 144 | sumObj->For.describeAsync("sum $a+$b=$sum", async i => { 145 | test("inner test", t => { 146 | t->expect(i["a"] + i["b"])->Expect.toBe(i["sum"]) 147 | t->expect(i["a"] + i["b"] + 1)->Expect.not->Expect.toBe(i["sum"]) 148 | }) 149 | }) 150 | 151 | sum2->For.describeAsync("%i=%s", async ((a, b)) => { 152 | test("inner test", t => { 153 | t->expect(a->Js.Int.toString)->Expect.toBe(b) 154 | t->expect((a + 1)->Js.Int.toString)->Expect.not->Expect.toBe(b) 155 | }) 156 | }) 157 | 158 | sum3->For.describeAsync("sum %i+%i=%s", async ((a, b, sum)) => { 159 | test("inner test", t => { 160 | t->expect((a + b)->Js.Int.toString)->Expect.toBe(sum) 161 | t->expect((a + b + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 162 | }) 163 | }) 164 | 165 | sum4->For.describeAsync("sum %i+%i+%i=%s", async ((a, b, c, sum)) => { 166 | test("inner test", t => { 167 | t->expect((a + b + c)->Js.Int.toString)->Expect.toBe(sum) 168 | t->expect((a + b + c + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 169 | }) 170 | }) 171 | 172 | sum5->For.describeAsync("sum %i+%i+%i+%i=%s", async ((a, b, c, d, sum)) => { 173 | test("inner test", t => { 174 | t->expect((a + b + c + d)->Js.Int.toString)->Expect.toBe(sum) 175 | t->expect((a + b + c + d + 1)->Js.Int.toString)->Expect.not->Expect.toBe(sum) 176 | }) 177 | }) 178 | -------------------------------------------------------------------------------- /tests/promise.test.res: -------------------------------------------------------------------------------- 1 | let echoAsync = async msg => msg 2 | 3 | exception TestError 4 | 5 | let throwAsync: unit => Js.Promise2.t = async () => { 6 | raise(TestError) 7 | } 8 | 9 | open Vitest 10 | 11 | testAsync("async/await test 1", async t => { 12 | let result = await echoAsync("Hey") 13 | t->expect(result)->Expect.toEqual("Hey") 14 | }) 15 | 16 | testAsync("async/await test 2", async t => { 17 | await t->expect(echoAsync("Hey"))->Expect.Promise.resolves->Expect.Promise.toEqual("Hey") 18 | }) 19 | 20 | testAsync("exception test for async functions", async t => { 21 | await t->expect(throwAsync())->Expect.Promise.rejects->Expect.Promise.toThrow 22 | }) 23 | -------------------------------------------------------------------------------- /tests/sort.bench.res: -------------------------------------------------------------------------------- 1 | open Js 2 | open Vitest.Benchmark 3 | 4 | describe("sort", () => { 5 | bench("normal", _ => { 6 | let x = [1, 5, 4, 2, 3] 7 | x 8 | ->Array2.sortInPlaceWith( 9 | (a, b) => { 10 | a - b 11 | }, 12 | ) 13 | ->ignore 14 | }) 15 | 16 | bench("reverse", _ => { 17 | let x = [1, 5, 4, 2, 3] 18 | x 19 | ->Array2.reverseInPlace 20 | ->Array2.sortInPlaceWith( 21 | (a, b) => { 22 | a - b 23 | }, 24 | ) 25 | ->ignore 26 | }) 27 | 28 | Todo.bench("todo") 29 | }) 30 | -------------------------------------------------------------------------------- /tests/suite.test.res: -------------------------------------------------------------------------------- 1 | open Js 2 | open Vitest 3 | 4 | describe("suite name", () => { 5 | it("foo", _ => { 6 | Assert.equal(Math.sqrt(4.0), 2.0) 7 | }) 8 | 9 | open Expect 10 | 11 | it("bar", t => { 12 | t->expect(1 + 1)->eq(2) 13 | }) 14 | 15 | it("not", t => { 16 | t->expect(1 + 2)->not->eq(4) 17 | }) 18 | 19 | it("snapshot", t => { 20 | t->expect({"foo": "bar"})->toMatchSnapshot 21 | }) 22 | }) 23 | 24 | Todo.test("vi.fn()") 25 | -------------------------------------------------------------------------------- /tests/vi.test.res: -------------------------------------------------------------------------------- 1 | @@uncurried 2 | 3 | open Vitest 4 | open! Bindings.BuiltIn 5 | 6 | @val external nextTick: (unit => unit) => unit = "process.nextTick" 7 | 8 | describe("Vi", () => { 9 | beforeEach(() => { 10 | let _ = Vi.useRealTimers() 11 | }) 12 | 13 | afterAll(() => { 14 | let _ = Vi.useRealTimers() 15 | }) 16 | 17 | let _promise = () => Js.Promise2.resolve() 18 | 19 | itAsync("should compile fake timers correctly", async _t => { 20 | let _ = Vi.useFakeTimers() 21 | Vi.isFakeTimers()->expect->Expect.toBe(true) 22 | 23 | let called = ref(false) 24 | let called2 = ref(false) 25 | 26 | let _ = Js.Global.setTimeout(() => called := true, 100) 27 | let _ = Js.Global.setTimeout(() => called2 := true, 200) 28 | let _ = Vi.advanceTimersByTime(10) 29 | called->expect->Expect.toEqual({contents: false}) 30 | called2->expect->Expect.toEqual({contents: false}) 31 | 32 | let _ = Vi.advanceTimersByTime(100) 33 | called->expect->Expect.toEqual({contents: true}) 34 | called2->expect->Expect.toEqual({contents: false}) 35 | called := false 36 | 37 | let _ = await Vi.advanceTimersByTimeAsync(1000) 38 | called2->expect->Expect.toEqual({contents: true}) 39 | called2 := false 40 | Vi.getTimerCount()->expect->Expect.toBe(0) 41 | 42 | let _ = Js.Global.setTimeout(() => called := true, 1000) 43 | let _ = Js.Global.setTimeout(() => called2 := true, 2000) 44 | Vi.getTimerCount()->expect->Expect.toBe(2) 45 | let _ = Vi.runAllTimers() 46 | called->expect->Expect.toEqual({contents: true}) 47 | called2->expect->Expect.toEqual({contents: true}) 48 | called := false 49 | called2 := false 50 | 51 | let _ = Js.Global.setTimeout(() => called := true, 1000) 52 | let _ = Js.Global.setTimeout(() => called2 := true, 2000) 53 | Vi.getTimerCount()->expect->Expect.toBe(2) 54 | let _ = await Vi.runAllTimersAsync() 55 | called->expect->Expect.toEqual({contents: true}) 56 | called2->expect->Expect.toEqual({contents: true}) 57 | called := false 58 | called2 := false 59 | 60 | let _ = Js.Global.setTimeout(() => called := true, 1000) 61 | Vi.getTimerCount()->expect->Expect.toBe(1) 62 | let _ = Vi.runOnlyPendingTimers() 63 | called->expect->Expect.toEqual({contents: true}) 64 | called := false 65 | 66 | let _ = Js.Global.setTimeout(() => called := true, 1000) 67 | Vi.getTimerCount()->expect->Expect.toBe(1) 68 | let _ = await Vi.runOnlyPendingTimersAsync() 69 | called->expect->Expect.toEqual({contents: true}) 70 | called := false 71 | 72 | let _ = Js.Global.setTimeout(() => called := true, 1000) 73 | let _ = Js.Global.setTimeout(() => called2 := true, 2000) 74 | Vi.getTimerCount()->expect->Expect.toBe(2) 75 | let _ = Vi.advanceTimersToNextTimer() 76 | called->expect->Expect.toEqual({contents: true}) 77 | called2.contents->expect->Expect.toBe(false) 78 | 79 | let _ = await Vi.advanceTimersToNextTimerAsync() 80 | called2.contents->expect->Expect.toBe(true) 81 | 82 | let _ = Js.Global.setTimeout(() => called := true, 1000) 83 | Vi.getTimerCount()->expect->Expect.toBe(1) 84 | let _ = Vi.clearAllTimers() 85 | Vi.getTimerCount()->expect->Expect.toBe(0) 86 | 87 | nextTick(() => called := true) 88 | let _ = Vi.runAllTicks() 89 | called->expect->Expect.toEqual({contents: true}) 90 | called := false 91 | }) 92 | 93 | itAsync("should compile waitFor correctly", async _t => { 94 | let called = ref(false) 95 | let _ = Js.Global.setTimeout(() => called := true, 100) 96 | await Vi.waitFor(() => Assert.assert_(called.contents == true), ()) 97 | called->expect->Expect.toEqual({contents: true}) 98 | 99 | let called = ref(false) 100 | let _ = Js.Global.setTimeout(() => called := true, 100) 101 | await Vi.waitFor(() => Assert.assert_(called.contents == true), ~timeout=200, ()) 102 | called->expect->Expect.toEqual({contents: true}) 103 | 104 | let called = ref(false) 105 | let _ = Js.Global.setTimeout(() => called := true, 100) 106 | await Vi.waitFor(() => Assert.assert_(called.contents == true), ~interval=50, ()) 107 | called->expect->Expect.toEqual({contents: true}) 108 | 109 | let called = ref(false) 110 | let _ = Js.Global.setTimeout(() => called := true, 100) 111 | await Vi.waitFor(() => Assert.assert_(called.contents == true), ~timeout=200, ~interval=50, ()) 112 | called->expect->Expect.toEqual({contents: true}) 113 | 114 | let run = async () => { 115 | let called = ref(false) 116 | let _ = Js.Global.setTimeout(() => called := true, 100) 117 | await Vi.waitFor(() => Assert.assert_(called.contents == true), ~timeout=50, ()) 118 | called->expect->Expect.toEqual({contents: false}) 119 | } 120 | 121 | await run() 122 | ->expect 123 | ->Expect.Promise.rejects 124 | ->Expect.Promise.toThrow 125 | }) 126 | 127 | itAsync("should compile waitForAsync correctly", async _t => { 128 | let _ = Vi.useFakeTimers() 129 | 130 | let sleep = ms => { 131 | Js.Promise2.make( 132 | (~resolve, ~reject as _) => { 133 | let _ = Js.Global.setTimeout(() => resolve(. ()), ms) 134 | }, 135 | ) 136 | } 137 | 138 | await Vi.waitForAsync(() => sleep(1), ()) 139 | await Vi.waitForAsync(() => sleep(20), ~timeout=100, ()) 140 | await Vi.waitForAsync(() => sleep(50), ~interval=50, ()) 141 | await Vi.waitForAsync(() => sleep(150), ~timeout=200, ~interval=50, ()) 142 | 143 | let run = () => Vi.waitForAsync(() => sleep(100), ~timeout=50, ()) 144 | 145 | await run() 146 | ->expect 147 | ->Expect.Promise.rejects 148 | ->Expect.Promise.toThrow 149 | }) 150 | 151 | it("compile mocking system time correctly", _t => { 152 | Vi.getMockedSystemTime()->expect->Expect.toBeNone 153 | 154 | let date = Js.Date.makeWithYMD(~year=2021., ~month=1., ~date=1., ()) 155 | let _ = Vi.setSystemTime(#Date(date)) 156 | Vi.getMockedSystemTime()->expect->Expect.toBeSome(~some=Some(date)) 157 | Vi.getRealSystemTime()->expect->Expect.Float.toBeGreaterThan(Js.Date.getTime(date)) 158 | 159 | Vi.getRealSystemTime()->expect->Expect.Float.toBeGreaterThanOrEqual(0.0) 160 | let _ = Vi.useRealTimers() 161 | Vi.isFakeTimers()->expect->Expect.toBe(false) 162 | Vi.getMockedSystemTime()->expect->Expect.toBeNone 163 | }) 164 | }) 165 | -------------------------------------------------------------------------------- /vite.config.mjs: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import rescript from '@jihchi/vite-plugin-rescript'; 3 | 4 | export default defineConfig({ 5 | test: { 6 | includeSource: ['src/insource.mjs'], 7 | }, 8 | plugins: [ 9 | // https://github.com/jihchi/vite-plugin-rescript/issues/231 10 | // rescript(), 11 | ], 12 | }) 13 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # This file is generated by running "yarn install" inside your project. 2 | # Manual changes might be lost - proceed with caution! 3 | 4 | __metadata: 5 | version: 8 6 | cacheKey: 10c0 7 | 8 | "@esbuild/aix-ppc64@npm:0.25.4": 9 | version: 0.25.4 10 | resolution: "@esbuild/aix-ppc64@npm:0.25.4" 11 | conditions: os=aix & cpu=ppc64 12 | languageName: node 13 | linkType: hard 14 | 15 | "@esbuild/android-arm64@npm:0.25.4": 16 | version: 0.25.4 17 | resolution: "@esbuild/android-arm64@npm:0.25.4" 18 | conditions: os=android & cpu=arm64 19 | languageName: node 20 | linkType: hard 21 | 22 | "@esbuild/android-arm@npm:0.25.4": 23 | version: 0.25.4 24 | resolution: "@esbuild/android-arm@npm:0.25.4" 25 | conditions: os=android & cpu=arm 26 | languageName: node 27 | linkType: hard 28 | 29 | "@esbuild/android-x64@npm:0.25.4": 30 | version: 0.25.4 31 | resolution: "@esbuild/android-x64@npm:0.25.4" 32 | conditions: os=android & cpu=x64 33 | languageName: node 34 | linkType: hard 35 | 36 | "@esbuild/darwin-arm64@npm:0.25.4": 37 | version: 0.25.4 38 | resolution: "@esbuild/darwin-arm64@npm:0.25.4" 39 | conditions: os=darwin & cpu=arm64 40 | languageName: node 41 | linkType: hard 42 | 43 | "@esbuild/darwin-x64@npm:0.25.4": 44 | version: 0.25.4 45 | resolution: "@esbuild/darwin-x64@npm:0.25.4" 46 | conditions: os=darwin & cpu=x64 47 | languageName: node 48 | linkType: hard 49 | 50 | "@esbuild/freebsd-arm64@npm:0.25.4": 51 | version: 0.25.4 52 | resolution: "@esbuild/freebsd-arm64@npm:0.25.4" 53 | conditions: os=freebsd & cpu=arm64 54 | languageName: node 55 | linkType: hard 56 | 57 | "@esbuild/freebsd-x64@npm:0.25.4": 58 | version: 0.25.4 59 | resolution: "@esbuild/freebsd-x64@npm:0.25.4" 60 | conditions: os=freebsd & cpu=x64 61 | languageName: node 62 | linkType: hard 63 | 64 | "@esbuild/linux-arm64@npm:0.25.4": 65 | version: 0.25.4 66 | resolution: "@esbuild/linux-arm64@npm:0.25.4" 67 | conditions: os=linux & cpu=arm64 68 | languageName: node 69 | linkType: hard 70 | 71 | "@esbuild/linux-arm@npm:0.25.4": 72 | version: 0.25.4 73 | resolution: "@esbuild/linux-arm@npm:0.25.4" 74 | conditions: os=linux & cpu=arm 75 | languageName: node 76 | linkType: hard 77 | 78 | "@esbuild/linux-ia32@npm:0.25.4": 79 | version: 0.25.4 80 | resolution: "@esbuild/linux-ia32@npm:0.25.4" 81 | conditions: os=linux & cpu=ia32 82 | languageName: node 83 | linkType: hard 84 | 85 | "@esbuild/linux-loong64@npm:0.25.4": 86 | version: 0.25.4 87 | resolution: "@esbuild/linux-loong64@npm:0.25.4" 88 | conditions: os=linux & cpu=loong64 89 | languageName: node 90 | linkType: hard 91 | 92 | "@esbuild/linux-mips64el@npm:0.25.4": 93 | version: 0.25.4 94 | resolution: "@esbuild/linux-mips64el@npm:0.25.4" 95 | conditions: os=linux & cpu=mips64el 96 | languageName: node 97 | linkType: hard 98 | 99 | "@esbuild/linux-ppc64@npm:0.25.4": 100 | version: 0.25.4 101 | resolution: "@esbuild/linux-ppc64@npm:0.25.4" 102 | conditions: os=linux & cpu=ppc64 103 | languageName: node 104 | linkType: hard 105 | 106 | "@esbuild/linux-riscv64@npm:0.25.4": 107 | version: 0.25.4 108 | resolution: "@esbuild/linux-riscv64@npm:0.25.4" 109 | conditions: os=linux & cpu=riscv64 110 | languageName: node 111 | linkType: hard 112 | 113 | "@esbuild/linux-s390x@npm:0.25.4": 114 | version: 0.25.4 115 | resolution: "@esbuild/linux-s390x@npm:0.25.4" 116 | conditions: os=linux & cpu=s390x 117 | languageName: node 118 | linkType: hard 119 | 120 | "@esbuild/linux-x64@npm:0.25.4": 121 | version: 0.25.4 122 | resolution: "@esbuild/linux-x64@npm:0.25.4" 123 | conditions: os=linux & cpu=x64 124 | languageName: node 125 | linkType: hard 126 | 127 | "@esbuild/netbsd-arm64@npm:0.25.4": 128 | version: 0.25.4 129 | resolution: "@esbuild/netbsd-arm64@npm:0.25.4" 130 | conditions: os=netbsd & cpu=arm64 131 | languageName: node 132 | linkType: hard 133 | 134 | "@esbuild/netbsd-x64@npm:0.25.4": 135 | version: 0.25.4 136 | resolution: "@esbuild/netbsd-x64@npm:0.25.4" 137 | conditions: os=netbsd & cpu=x64 138 | languageName: node 139 | linkType: hard 140 | 141 | "@esbuild/openbsd-arm64@npm:0.25.4": 142 | version: 0.25.4 143 | resolution: "@esbuild/openbsd-arm64@npm:0.25.4" 144 | conditions: os=openbsd & cpu=arm64 145 | languageName: node 146 | linkType: hard 147 | 148 | "@esbuild/openbsd-x64@npm:0.25.4": 149 | version: 0.25.4 150 | resolution: "@esbuild/openbsd-x64@npm:0.25.4" 151 | conditions: os=openbsd & cpu=x64 152 | languageName: node 153 | linkType: hard 154 | 155 | "@esbuild/sunos-x64@npm:0.25.4": 156 | version: 0.25.4 157 | resolution: "@esbuild/sunos-x64@npm:0.25.4" 158 | conditions: os=sunos & cpu=x64 159 | languageName: node 160 | linkType: hard 161 | 162 | "@esbuild/win32-arm64@npm:0.25.4": 163 | version: 0.25.4 164 | resolution: "@esbuild/win32-arm64@npm:0.25.4" 165 | conditions: os=win32 & cpu=arm64 166 | languageName: node 167 | linkType: hard 168 | 169 | "@esbuild/win32-ia32@npm:0.25.4": 170 | version: 0.25.4 171 | resolution: "@esbuild/win32-ia32@npm:0.25.4" 172 | conditions: os=win32 & cpu=ia32 173 | languageName: node 174 | linkType: hard 175 | 176 | "@esbuild/win32-x64@npm:0.25.4": 177 | version: 0.25.4 178 | resolution: "@esbuild/win32-x64@npm:0.25.4" 179 | conditions: os=win32 & cpu=x64 180 | languageName: node 181 | linkType: hard 182 | 183 | "@gar/promisify@npm:^1.0.1": 184 | version: 1.1.2 185 | resolution: "@gar/promisify@npm:1.1.2" 186 | checksum: 10c0/5272869fb1e0b765710f8aa522b4c1be9319a9be5b70510daccc570e2a0d69478e5b8a6a665040fdea78f4cf1a4f0e3d7eaaf862410493a201c9ddb961b74b80 187 | languageName: node 188 | linkType: hard 189 | 190 | "@jihchi/vite-plugin-rescript@npm:^7.0.0": 191 | version: 7.0.0 192 | resolution: "@jihchi/vite-plugin-rescript@npm:7.0.0" 193 | dependencies: 194 | chalk: "npm:^5.4.1" 195 | execa: "npm:^9.5.1" 196 | npm-run-path: "npm:^6.0.0" 197 | peerDependencies: 198 | rescript: ">=9" 199 | vite: ">=5.1.0" 200 | checksum: 10c0/5c86e1d84dda8c2ab23c275dfbff76973b63b56761e20b8cd5dc48a9228ca3c7c8236f26d4c2f73511acfd07f082ab9f912915b4438ecf2ba788bb37461debfc 201 | languageName: node 202 | linkType: hard 203 | 204 | "@jridgewell/sourcemap-codec@npm:^1.5.0": 205 | version: 1.5.0 206 | resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" 207 | checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 208 | languageName: node 209 | linkType: hard 210 | 211 | "@npmcli/fs@npm:^1.0.0": 212 | version: 1.1.0 213 | resolution: "@npmcli/fs@npm:1.1.0" 214 | dependencies: 215 | "@gar/promisify": "npm:^1.0.1" 216 | semver: "npm:^7.3.5" 217 | checksum: 10c0/64b4c3c19dd2c2fe192155e04932e4352bbe6d119a46f9a4bfc69f78dcbd511bff8a2f1eb427efb1bbd52e9765d0fc40f80e607ca6b0e657a3f1f9d6954d7e33 218 | languageName: node 219 | linkType: hard 220 | 221 | "@npmcli/move-file@npm:^1.0.1": 222 | version: 1.1.2 223 | resolution: "@npmcli/move-file@npm:1.1.2" 224 | dependencies: 225 | mkdirp: "npm:^1.0.4" 226 | rimraf: "npm:^3.0.2" 227 | checksum: 10c0/02e946f3dafcc6743132fe2e0e2b585a96ca7265653a38df5a3e53fcf26c7c7a57fc0f861d7c689a23fdb6d6836c7eea5050c8086abf3c994feb2208d1514ff0 228 | languageName: node 229 | linkType: hard 230 | 231 | "@rollup/rollup-android-arm-eabi@npm:4.41.0": 232 | version: 4.41.0 233 | resolution: "@rollup/rollup-android-arm-eabi@npm:4.41.0" 234 | conditions: os=android & cpu=arm 235 | languageName: node 236 | linkType: hard 237 | 238 | "@rollup/rollup-android-arm64@npm:4.41.0": 239 | version: 4.41.0 240 | resolution: "@rollup/rollup-android-arm64@npm:4.41.0" 241 | conditions: os=android & cpu=arm64 242 | languageName: node 243 | linkType: hard 244 | 245 | "@rollup/rollup-darwin-arm64@npm:4.41.0": 246 | version: 4.41.0 247 | resolution: "@rollup/rollup-darwin-arm64@npm:4.41.0" 248 | conditions: os=darwin & cpu=arm64 249 | languageName: node 250 | linkType: hard 251 | 252 | "@rollup/rollup-darwin-x64@npm:4.41.0": 253 | version: 4.41.0 254 | resolution: "@rollup/rollup-darwin-x64@npm:4.41.0" 255 | conditions: os=darwin & cpu=x64 256 | languageName: node 257 | linkType: hard 258 | 259 | "@rollup/rollup-freebsd-arm64@npm:4.41.0": 260 | version: 4.41.0 261 | resolution: "@rollup/rollup-freebsd-arm64@npm:4.41.0" 262 | conditions: os=freebsd & cpu=arm64 263 | languageName: node 264 | linkType: hard 265 | 266 | "@rollup/rollup-freebsd-x64@npm:4.41.0": 267 | version: 4.41.0 268 | resolution: "@rollup/rollup-freebsd-x64@npm:4.41.0" 269 | conditions: os=freebsd & cpu=x64 270 | languageName: node 271 | linkType: hard 272 | 273 | "@rollup/rollup-linux-arm-gnueabihf@npm:4.41.0": 274 | version: 4.41.0 275 | resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.41.0" 276 | conditions: os=linux & cpu=arm & libc=glibc 277 | languageName: node 278 | linkType: hard 279 | 280 | "@rollup/rollup-linux-arm-musleabihf@npm:4.41.0": 281 | version: 4.41.0 282 | resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.41.0" 283 | conditions: os=linux & cpu=arm & libc=musl 284 | languageName: node 285 | linkType: hard 286 | 287 | "@rollup/rollup-linux-arm64-gnu@npm:4.41.0": 288 | version: 4.41.0 289 | resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.41.0" 290 | conditions: os=linux & cpu=arm64 & libc=glibc 291 | languageName: node 292 | linkType: hard 293 | 294 | "@rollup/rollup-linux-arm64-musl@npm:4.41.0": 295 | version: 4.41.0 296 | resolution: "@rollup/rollup-linux-arm64-musl@npm:4.41.0" 297 | conditions: os=linux & cpu=arm64 & libc=musl 298 | languageName: node 299 | linkType: hard 300 | 301 | "@rollup/rollup-linux-loongarch64-gnu@npm:4.41.0": 302 | version: 4.41.0 303 | resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.41.0" 304 | conditions: os=linux & cpu=loong64 & libc=glibc 305 | languageName: node 306 | linkType: hard 307 | 308 | "@rollup/rollup-linux-powerpc64le-gnu@npm:4.41.0": 309 | version: 4.41.0 310 | resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.41.0" 311 | conditions: os=linux & cpu=ppc64 & libc=glibc 312 | languageName: node 313 | linkType: hard 314 | 315 | "@rollup/rollup-linux-riscv64-gnu@npm:4.41.0": 316 | version: 4.41.0 317 | resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.41.0" 318 | conditions: os=linux & cpu=riscv64 & libc=glibc 319 | languageName: node 320 | linkType: hard 321 | 322 | "@rollup/rollup-linux-riscv64-musl@npm:4.41.0": 323 | version: 4.41.0 324 | resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.41.0" 325 | conditions: os=linux & cpu=riscv64 & libc=musl 326 | languageName: node 327 | linkType: hard 328 | 329 | "@rollup/rollup-linux-s390x-gnu@npm:4.41.0": 330 | version: 4.41.0 331 | resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.41.0" 332 | conditions: os=linux & cpu=s390x & libc=glibc 333 | languageName: node 334 | linkType: hard 335 | 336 | "@rollup/rollup-linux-x64-gnu@npm:4.41.0": 337 | version: 4.41.0 338 | resolution: "@rollup/rollup-linux-x64-gnu@npm:4.41.0" 339 | conditions: os=linux & cpu=x64 & libc=glibc 340 | languageName: node 341 | linkType: hard 342 | 343 | "@rollup/rollup-linux-x64-musl@npm:4.41.0": 344 | version: 4.41.0 345 | resolution: "@rollup/rollup-linux-x64-musl@npm:4.41.0" 346 | conditions: os=linux & cpu=x64 & libc=musl 347 | languageName: node 348 | linkType: hard 349 | 350 | "@rollup/rollup-win32-arm64-msvc@npm:4.41.0": 351 | version: 4.41.0 352 | resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.41.0" 353 | conditions: os=win32 & cpu=arm64 354 | languageName: node 355 | linkType: hard 356 | 357 | "@rollup/rollup-win32-ia32-msvc@npm:4.41.0": 358 | version: 4.41.0 359 | resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.41.0" 360 | conditions: os=win32 & cpu=ia32 361 | languageName: node 362 | linkType: hard 363 | 364 | "@rollup/rollup-win32-x64-msvc@npm:4.41.0": 365 | version: 4.41.0 366 | resolution: "@rollup/rollup-win32-x64-msvc@npm:4.41.0" 367 | conditions: os=win32 & cpu=x64 368 | languageName: node 369 | linkType: hard 370 | 371 | "@sec-ant/readable-stream@npm:^0.4.1": 372 | version: 0.4.1 373 | resolution: "@sec-ant/readable-stream@npm:0.4.1" 374 | checksum: 10c0/64e9e9cf161e848067a5bf60cdc04d18495dc28bb63a8d9f8993e4dd99b91ad34e4b563c85de17d91ffb177ec17a0664991d2e115f6543e73236a906068987af 375 | languageName: node 376 | linkType: hard 377 | 378 | "@sindresorhus/merge-streams@npm:^4.0.0": 379 | version: 4.0.0 380 | resolution: "@sindresorhus/merge-streams@npm:4.0.0" 381 | checksum: 10c0/482ee543629aa1933b332f811a1ae805a213681ecdd98c042b1c1b89387df63e7812248bb4df3910b02b3cc5589d3d73e4393f30e197c9dde18046ccd471fc6b 382 | languageName: node 383 | linkType: hard 384 | 385 | "@tootallnate/once@npm:1": 386 | version: 1.1.2 387 | resolution: "@tootallnate/once@npm:1.1.2" 388 | checksum: 10c0/8fe4d006e90422883a4fa9339dd05a83ff626806262e1710cee5758d493e8cbddf2db81c0e4690636dc840b02c9fda62877866ea774ebd07c1777ed5fafbdec6 389 | languageName: node 390 | linkType: hard 391 | 392 | "@types/estree@npm:1.0.7": 393 | version: 1.0.7 394 | resolution: "@types/estree@npm:1.0.7" 395 | checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c 396 | languageName: node 397 | linkType: hard 398 | 399 | "@types/estree@npm:^1.0.0": 400 | version: 1.0.5 401 | resolution: "@types/estree@npm:1.0.5" 402 | checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d 403 | languageName: node 404 | linkType: hard 405 | 406 | "@vitest/expect@npm:3.1.4": 407 | version: 3.1.4 408 | resolution: "@vitest/expect@npm:3.1.4" 409 | dependencies: 410 | "@vitest/spy": "npm:3.1.4" 411 | "@vitest/utils": "npm:3.1.4" 412 | chai: "npm:^5.2.0" 413 | tinyrainbow: "npm:^2.0.0" 414 | checksum: 10c0/9cfd7eb6d965a179b4ec0610a9c08b14dc97dbaf81925c8209a054f7a2a3d1eef59fa5e5cd4dd9bf8cb940d85aee5f5102555511a94be9933faf4cc734462a16 415 | languageName: node 416 | linkType: hard 417 | 418 | "@vitest/mocker@npm:3.1.4": 419 | version: 3.1.4 420 | resolution: "@vitest/mocker@npm:3.1.4" 421 | dependencies: 422 | "@vitest/spy": "npm:3.1.4" 423 | estree-walker: "npm:^3.0.3" 424 | magic-string: "npm:^0.30.17" 425 | peerDependencies: 426 | msw: ^2.4.9 427 | vite: ^5.0.0 || ^6.0.0 428 | peerDependenciesMeta: 429 | msw: 430 | optional: true 431 | vite: 432 | optional: true 433 | checksum: 10c0/d0b89e3974830d3893e7b8324a77ffeb9436db0969b57c01e2508ebd5b374c9d01f73796c8df8f555a3b1e1b502d40e725f159cd85966eebd3145b2f52e605e2 434 | languageName: node 435 | linkType: hard 436 | 437 | "@vitest/pretty-format@npm:3.1.4, @vitest/pretty-format@npm:^3.1.4": 438 | version: 3.1.4 439 | resolution: "@vitest/pretty-format@npm:3.1.4" 440 | dependencies: 441 | tinyrainbow: "npm:^2.0.0" 442 | checksum: 10c0/11e133640435822b8b8528be540b3d66c1de27ebc2dcf1de87608b7f01a44d15302c4d4bf8330fa848a435450d88a09d7e9442747a5739ae5f500ccdd1493159 443 | languageName: node 444 | linkType: hard 445 | 446 | "@vitest/runner@npm:3.1.4": 447 | version: 3.1.4 448 | resolution: "@vitest/runner@npm:3.1.4" 449 | dependencies: 450 | "@vitest/utils": "npm:3.1.4" 451 | pathe: "npm:^2.0.3" 452 | checksum: 10c0/efb7512eebd3d786baa617eab332ec9ca6ce62eb1c9dd3945019f7510d745b3cd0fc2978868d792050905aacbf158eefc132359c83e61f0398b46be566013ee6 453 | languageName: node 454 | linkType: hard 455 | 456 | "@vitest/snapshot@npm:3.1.4": 457 | version: 3.1.4 458 | resolution: "@vitest/snapshot@npm:3.1.4" 459 | dependencies: 460 | "@vitest/pretty-format": "npm:3.1.4" 461 | magic-string: "npm:^0.30.17" 462 | pathe: "npm:^2.0.3" 463 | checksum: 10c0/ce9d51e1b03e4f91ffad160c570991a8a3c603cb7dc2a9020e58c012e62dccbe2c6ee45e1a1d8489e265b4485c6721eb73b5e91404d1c76da08dcd663f4e18d1 464 | languageName: node 465 | linkType: hard 466 | 467 | "@vitest/spy@npm:3.1.4": 468 | version: 3.1.4 469 | resolution: "@vitest/spy@npm:3.1.4" 470 | dependencies: 471 | tinyspy: "npm:^3.0.2" 472 | checksum: 10c0/747914ac18efa82d75349b0fb0ad8a5e2af6e04f5bbb50a980c9270dd8958f9ddf84cee0849a54e1645af088fc1f709add94a35e99cb14aca2cdb322622ba501 473 | languageName: node 474 | linkType: hard 475 | 476 | "@vitest/utils@npm:3.1.4": 477 | version: 3.1.4 478 | resolution: "@vitest/utils@npm:3.1.4" 479 | dependencies: 480 | "@vitest/pretty-format": "npm:3.1.4" 481 | loupe: "npm:^3.1.3" 482 | tinyrainbow: "npm:^2.0.0" 483 | checksum: 10c0/78f1691a2dd578862b236f4962815e7475e547f006e7303a149dc5f910cc1ce6e0bdcbd7b4fd618122d62ca2dcc28bae464d31543f3898f5d88fa35017e00a95 484 | languageName: node 485 | linkType: hard 486 | 487 | "abbrev@npm:1": 488 | version: 1.1.1 489 | resolution: "abbrev@npm:1.1.1" 490 | checksum: 10c0/3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6 491 | languageName: node 492 | linkType: hard 493 | 494 | "agent-base@npm:6, agent-base@npm:^6.0.2": 495 | version: 6.0.2 496 | resolution: "agent-base@npm:6.0.2" 497 | dependencies: 498 | debug: "npm:4" 499 | checksum: 10c0/dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261 500 | languageName: node 501 | linkType: hard 502 | 503 | "agentkeepalive@npm:^4.1.3": 504 | version: 4.2.0 505 | resolution: "agentkeepalive@npm:4.2.0" 506 | dependencies: 507 | debug: "npm:^4.1.0" 508 | depd: "npm:^1.1.2" 509 | humanize-ms: "npm:^1.2.1" 510 | checksum: 10c0/b62bbae7c4154a9caf32fd3fac5787ba4289d4cec122f8c6ed236f3469c4b1c098ac0f3fc5dc97e89a234cdb27f9c9a627e19a67ccfb50e007b5c9854adcfb28 511 | languageName: node 512 | linkType: hard 513 | 514 | "aggregate-error@npm:^3.0.0": 515 | version: 3.1.0 516 | resolution: "aggregate-error@npm:3.1.0" 517 | dependencies: 518 | clean-stack: "npm:^2.0.0" 519 | indent-string: "npm:^4.0.0" 520 | checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 521 | languageName: node 522 | linkType: hard 523 | 524 | "ansi-regex@npm:^5.0.1": 525 | version: 5.0.1 526 | resolution: "ansi-regex@npm:5.0.1" 527 | checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 528 | languageName: node 529 | linkType: hard 530 | 531 | "aproba@npm:^1.0.3 || ^2.0.0": 532 | version: 2.0.0 533 | resolution: "aproba@npm:2.0.0" 534 | checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 535 | languageName: node 536 | linkType: hard 537 | 538 | "are-we-there-yet@npm:^2.0.0": 539 | version: 2.0.0 540 | resolution: "are-we-there-yet@npm:2.0.0" 541 | dependencies: 542 | delegates: "npm:^1.0.0" 543 | readable-stream: "npm:^3.6.0" 544 | checksum: 10c0/375f753c10329153c8d66dc95e8f8b6c7cc2aa66e05cb0960bd69092b10dae22900cacc7d653ad11d26b3ecbdbfe1e8bfb6ccf0265ba8077a7d979970f16b99c 545 | languageName: node 546 | linkType: hard 547 | 548 | "assertion-error@npm:^2.0.1": 549 | version: 2.0.1 550 | resolution: "assertion-error@npm:2.0.1" 551 | checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 552 | languageName: node 553 | linkType: hard 554 | 555 | "balanced-match@npm:^1.0.0": 556 | version: 1.0.2 557 | resolution: "balanced-match@npm:1.0.2" 558 | checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee 559 | languageName: node 560 | linkType: hard 561 | 562 | "brace-expansion@npm:^1.1.7": 563 | version: 1.1.11 564 | resolution: "brace-expansion@npm:1.1.11" 565 | dependencies: 566 | balanced-match: "npm:^1.0.0" 567 | concat-map: "npm:0.0.1" 568 | checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 569 | languageName: node 570 | linkType: hard 571 | 572 | "cac@npm:^6.7.14": 573 | version: 6.7.14 574 | resolution: "cac@npm:6.7.14" 575 | checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 576 | languageName: node 577 | linkType: hard 578 | 579 | "cacache@npm:^15.2.0": 580 | version: 15.3.0 581 | resolution: "cacache@npm:15.3.0" 582 | dependencies: 583 | "@npmcli/fs": "npm:^1.0.0" 584 | "@npmcli/move-file": "npm:^1.0.1" 585 | chownr: "npm:^2.0.0" 586 | fs-minipass: "npm:^2.0.0" 587 | glob: "npm:^7.1.4" 588 | infer-owner: "npm:^1.0.4" 589 | lru-cache: "npm:^6.0.0" 590 | minipass: "npm:^3.1.1" 591 | minipass-collect: "npm:^1.0.2" 592 | minipass-flush: "npm:^1.0.5" 593 | minipass-pipeline: "npm:^1.2.2" 594 | mkdirp: "npm:^1.0.3" 595 | p-map: "npm:^4.0.0" 596 | promise-inflight: "npm:^1.0.1" 597 | rimraf: "npm:^3.0.2" 598 | ssri: "npm:^8.0.1" 599 | tar: "npm:^6.0.2" 600 | unique-filename: "npm:^1.1.1" 601 | checksum: 10c0/886fcc0acc4f6fd5cd142d373d8276267bc6d655d7c4ce60726fbbec10854de3395ee19bbf9e7e73308cdca9fdad0ad55060ff3bd16c6d4165c5b8d21515e1d8 602 | languageName: node 603 | linkType: hard 604 | 605 | "chai@npm:^5.2.0": 606 | version: 5.2.0 607 | resolution: "chai@npm:5.2.0" 608 | dependencies: 609 | assertion-error: "npm:^2.0.1" 610 | check-error: "npm:^2.1.1" 611 | deep-eql: "npm:^5.0.1" 612 | loupe: "npm:^3.1.0" 613 | pathval: "npm:^2.0.0" 614 | checksum: 10c0/dfd1cb719c7cebb051b727672d382a35338af1470065cb12adb01f4ee451bbf528e0e0f9ab2016af5fc1eea4df6e7f4504dc8443f8f00bd8fb87ad32dc516f7d 615 | languageName: node 616 | linkType: hard 617 | 618 | "chalk@npm:^5.4.1": 619 | version: 5.4.1 620 | resolution: "chalk@npm:5.4.1" 621 | checksum: 10c0/b23e88132c702f4855ca6d25cb5538b1114343e41472d5263ee8a37cccfccd9c4216d111e1097c6a27830407a1dc81fecdf2a56f2c63033d4dbbd88c10b0dcef 622 | languageName: node 623 | linkType: hard 624 | 625 | "check-error@npm:^2.1.1": 626 | version: 2.1.1 627 | resolution: "check-error@npm:2.1.1" 628 | checksum: 10c0/979f13eccab306cf1785fa10941a590b4e7ea9916ea2a4f8c87f0316fc3eab07eabefb6e587424ef0f88cbcd3805791f172ea739863ca3d7ce2afc54641c7f0e 629 | languageName: node 630 | linkType: hard 631 | 632 | "chownr@npm:^2.0.0": 633 | version: 2.0.0 634 | resolution: "chownr@npm:2.0.0" 635 | checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 636 | languageName: node 637 | linkType: hard 638 | 639 | "clean-stack@npm:^2.0.0": 640 | version: 2.2.0 641 | resolution: "clean-stack@npm:2.2.0" 642 | checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 643 | languageName: node 644 | linkType: hard 645 | 646 | "color-support@npm:^1.1.2": 647 | version: 1.1.3 648 | resolution: "color-support@npm:1.1.3" 649 | bin: 650 | color-support: bin.js 651 | checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 652 | languageName: node 653 | linkType: hard 654 | 655 | "concat-map@npm:0.0.1": 656 | version: 0.0.1 657 | resolution: "concat-map@npm:0.0.1" 658 | checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f 659 | languageName: node 660 | linkType: hard 661 | 662 | "console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": 663 | version: 1.1.0 664 | resolution: "console-control-strings@npm:1.1.0" 665 | checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50 666 | languageName: node 667 | linkType: hard 668 | 669 | "cross-spawn@npm:^7.0.3": 670 | version: 7.0.3 671 | resolution: "cross-spawn@npm:7.0.3" 672 | dependencies: 673 | path-key: "npm:^3.1.0" 674 | shebang-command: "npm:^2.0.0" 675 | which: "npm:^2.0.1" 676 | checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 677 | languageName: node 678 | linkType: hard 679 | 680 | "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.1": 681 | version: 4.3.3 682 | resolution: "debug@npm:4.3.3" 683 | dependencies: 684 | ms: "npm:2.1.2" 685 | peerDependenciesMeta: 686 | supports-color: 687 | optional: true 688 | checksum: 10c0/31873df69ff7036ce4f4158dcd6f71cd399b834ab1efbf23383f660822d28c7e29442fa83d34ccdd2f5201ff69eb494f0c7e8c01ecd314f0207bb631bb048ac0 689 | languageName: node 690 | linkType: hard 691 | 692 | "debug@npm:^4.4.0": 693 | version: 4.4.1 694 | resolution: "debug@npm:4.4.1" 695 | dependencies: 696 | ms: "npm:^2.1.3" 697 | peerDependenciesMeta: 698 | supports-color: 699 | optional: true 700 | checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 701 | languageName: node 702 | linkType: hard 703 | 704 | "deep-eql@npm:^5.0.1": 705 | version: 5.0.2 706 | resolution: "deep-eql@npm:5.0.2" 707 | checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 708 | languageName: node 709 | linkType: hard 710 | 711 | "delegates@npm:^1.0.0": 712 | version: 1.0.0 713 | resolution: "delegates@npm:1.0.0" 714 | checksum: 10c0/ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5 715 | languageName: node 716 | linkType: hard 717 | 718 | "depd@npm:^1.1.2": 719 | version: 1.1.2 720 | resolution: "depd@npm:1.1.2" 721 | checksum: 10c0/acb24aaf936ef9a227b6be6d495f0d2eb20108a9a6ad40585c5bda1a897031512fef6484e4fdbb80bd249fdaa82841fa1039f416ece03188e677ba11bcfda249 722 | languageName: node 723 | linkType: hard 724 | 725 | "emoji-regex@npm:^8.0.0": 726 | version: 8.0.0 727 | resolution: "emoji-regex@npm:8.0.0" 728 | checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 729 | languageName: node 730 | linkType: hard 731 | 732 | "encoding@npm:^0.1.12": 733 | version: 0.1.13 734 | resolution: "encoding@npm:0.1.13" 735 | dependencies: 736 | iconv-lite: "npm:^0.6.2" 737 | checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 738 | languageName: node 739 | linkType: hard 740 | 741 | "env-paths@npm:^2.2.0": 742 | version: 2.2.1 743 | resolution: "env-paths@npm:2.2.1" 744 | checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 745 | languageName: node 746 | linkType: hard 747 | 748 | "err-code@npm:^2.0.2": 749 | version: 2.0.3 750 | resolution: "err-code@npm:2.0.3" 751 | checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 752 | languageName: node 753 | linkType: hard 754 | 755 | "es-module-lexer@npm:^1.7.0": 756 | version: 1.7.0 757 | resolution: "es-module-lexer@npm:1.7.0" 758 | checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b 759 | languageName: node 760 | linkType: hard 761 | 762 | "esbuild@npm:^0.25.0": 763 | version: 0.25.4 764 | resolution: "esbuild@npm:0.25.4" 765 | dependencies: 766 | "@esbuild/aix-ppc64": "npm:0.25.4" 767 | "@esbuild/android-arm": "npm:0.25.4" 768 | "@esbuild/android-arm64": "npm:0.25.4" 769 | "@esbuild/android-x64": "npm:0.25.4" 770 | "@esbuild/darwin-arm64": "npm:0.25.4" 771 | "@esbuild/darwin-x64": "npm:0.25.4" 772 | "@esbuild/freebsd-arm64": "npm:0.25.4" 773 | "@esbuild/freebsd-x64": "npm:0.25.4" 774 | "@esbuild/linux-arm": "npm:0.25.4" 775 | "@esbuild/linux-arm64": "npm:0.25.4" 776 | "@esbuild/linux-ia32": "npm:0.25.4" 777 | "@esbuild/linux-loong64": "npm:0.25.4" 778 | "@esbuild/linux-mips64el": "npm:0.25.4" 779 | "@esbuild/linux-ppc64": "npm:0.25.4" 780 | "@esbuild/linux-riscv64": "npm:0.25.4" 781 | "@esbuild/linux-s390x": "npm:0.25.4" 782 | "@esbuild/linux-x64": "npm:0.25.4" 783 | "@esbuild/netbsd-arm64": "npm:0.25.4" 784 | "@esbuild/netbsd-x64": "npm:0.25.4" 785 | "@esbuild/openbsd-arm64": "npm:0.25.4" 786 | "@esbuild/openbsd-x64": "npm:0.25.4" 787 | "@esbuild/sunos-x64": "npm:0.25.4" 788 | "@esbuild/win32-arm64": "npm:0.25.4" 789 | "@esbuild/win32-ia32": "npm:0.25.4" 790 | "@esbuild/win32-x64": "npm:0.25.4" 791 | dependenciesMeta: 792 | "@esbuild/aix-ppc64": 793 | optional: true 794 | "@esbuild/android-arm": 795 | optional: true 796 | "@esbuild/android-arm64": 797 | optional: true 798 | "@esbuild/android-x64": 799 | optional: true 800 | "@esbuild/darwin-arm64": 801 | optional: true 802 | "@esbuild/darwin-x64": 803 | optional: true 804 | "@esbuild/freebsd-arm64": 805 | optional: true 806 | "@esbuild/freebsd-x64": 807 | optional: true 808 | "@esbuild/linux-arm": 809 | optional: true 810 | "@esbuild/linux-arm64": 811 | optional: true 812 | "@esbuild/linux-ia32": 813 | optional: true 814 | "@esbuild/linux-loong64": 815 | optional: true 816 | "@esbuild/linux-mips64el": 817 | optional: true 818 | "@esbuild/linux-ppc64": 819 | optional: true 820 | "@esbuild/linux-riscv64": 821 | optional: true 822 | "@esbuild/linux-s390x": 823 | optional: true 824 | "@esbuild/linux-x64": 825 | optional: true 826 | "@esbuild/netbsd-arm64": 827 | optional: true 828 | "@esbuild/netbsd-x64": 829 | optional: true 830 | "@esbuild/openbsd-arm64": 831 | optional: true 832 | "@esbuild/openbsd-x64": 833 | optional: true 834 | "@esbuild/sunos-x64": 835 | optional: true 836 | "@esbuild/win32-arm64": 837 | optional: true 838 | "@esbuild/win32-ia32": 839 | optional: true 840 | "@esbuild/win32-x64": 841 | optional: true 842 | bin: 843 | esbuild: bin/esbuild 844 | checksum: 10c0/db9f51248f0560bc46ab219461d338047617f6caf373c95f643b204760bdfa10c95b48cfde948949f7e509599ae4ab61c3f112092a3534936c6abfb800c565b0 845 | languageName: node 846 | linkType: hard 847 | 848 | "estree-walker@npm:^3.0.3": 849 | version: 3.0.3 850 | resolution: "estree-walker@npm:3.0.3" 851 | dependencies: 852 | "@types/estree": "npm:^1.0.0" 853 | checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d 854 | languageName: node 855 | linkType: hard 856 | 857 | "execa@npm:^9.5.1": 858 | version: 9.5.3 859 | resolution: "execa@npm:9.5.3" 860 | dependencies: 861 | "@sindresorhus/merge-streams": "npm:^4.0.0" 862 | cross-spawn: "npm:^7.0.3" 863 | figures: "npm:^6.1.0" 864 | get-stream: "npm:^9.0.0" 865 | human-signals: "npm:^8.0.0" 866 | is-plain-obj: "npm:^4.1.0" 867 | is-stream: "npm:^4.0.1" 868 | npm-run-path: "npm:^6.0.0" 869 | pretty-ms: "npm:^9.0.0" 870 | signal-exit: "npm:^4.1.0" 871 | strip-final-newline: "npm:^4.0.0" 872 | yoctocolors: "npm:^2.0.0" 873 | checksum: 10c0/f39b38b960cfd68a69e73f19f74e6b5a15b43f913130c89e96d4c9377c6baa18243033bc5087003e25e6f67916dc5f37fc7cd3b940dfe699c30be5d17ba5fa1e 874 | languageName: node 875 | linkType: hard 876 | 877 | "expect-type@npm:^1.2.1": 878 | version: 1.2.1 879 | resolution: "expect-type@npm:1.2.1" 880 | checksum: 10c0/b775c9adab3c190dd0d398c722531726cdd6022849b4adba19dceab58dda7e000a7c6c872408cd73d665baa20d381eca36af4f7b393a4ba60dd10232d1fb8898 881 | languageName: node 882 | linkType: hard 883 | 884 | "fdir@npm:^6.4.4": 885 | version: 6.4.4 886 | resolution: "fdir@npm:6.4.4" 887 | peerDependencies: 888 | picomatch: ^3 || ^4 889 | peerDependenciesMeta: 890 | picomatch: 891 | optional: true 892 | checksum: 10c0/6ccc33be16945ee7bc841e1b4178c0b4cf18d3804894cb482aa514651c962a162f96da7ffc6ebfaf0df311689fb70091b04dd6caffe28d56b9ebdc0e7ccadfdd 893 | languageName: node 894 | linkType: hard 895 | 896 | "figures@npm:^6.1.0": 897 | version: 6.1.0 898 | resolution: "figures@npm:6.1.0" 899 | dependencies: 900 | is-unicode-supported: "npm:^2.0.0" 901 | checksum: 10c0/9159df4264d62ef447a3931537de92f5012210cf5135c35c010df50a2169377581378149abfe1eb238bd6acbba1c0d547b1f18e0af6eee49e30363cedaffcfe4 902 | languageName: node 903 | linkType: hard 904 | 905 | "fs-minipass@npm:^2.0.0": 906 | version: 2.1.0 907 | resolution: "fs-minipass@npm:2.1.0" 908 | dependencies: 909 | minipass: "npm:^3.0.0" 910 | checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 911 | languageName: node 912 | linkType: hard 913 | 914 | "fs.realpath@npm:^1.0.0": 915 | version: 1.0.0 916 | resolution: "fs.realpath@npm:1.0.0" 917 | checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 918 | languageName: node 919 | linkType: hard 920 | 921 | "fsevents@npm:~2.3.2": 922 | version: 2.3.2 923 | resolution: "fsevents@npm:2.3.2" 924 | dependencies: 925 | node-gyp: "npm:latest" 926 | checksum: 10c0/be78a3efa3e181cda3cf7a4637cb527bcebb0bd0ea0440105a3bb45b86f9245b307dc10a2507e8f4498a7d4ec349d1910f4d73e4d4495b16103106e07eee735b 927 | conditions: os=darwin 928 | languageName: node 929 | linkType: hard 930 | 931 | "fsevents@npm:~2.3.3": 932 | version: 2.3.3 933 | resolution: "fsevents@npm:2.3.3" 934 | dependencies: 935 | node-gyp: "npm:latest" 936 | checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 937 | conditions: os=darwin 938 | languageName: node 939 | linkType: hard 940 | 941 | "fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": 942 | version: 2.3.2 943 | resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" 944 | dependencies: 945 | node-gyp: "npm:latest" 946 | conditions: os=darwin 947 | languageName: node 948 | linkType: hard 949 | 950 | "fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": 951 | version: 2.3.3 952 | resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" 953 | dependencies: 954 | node-gyp: "npm:latest" 955 | conditions: os=darwin 956 | languageName: node 957 | linkType: hard 958 | 959 | "gauge@npm:^4.0.0": 960 | version: 4.0.0 961 | resolution: "gauge@npm:4.0.0" 962 | dependencies: 963 | ansi-regex: "npm:^5.0.1" 964 | aproba: "npm:^1.0.3 || ^2.0.0" 965 | color-support: "npm:^1.1.2" 966 | console-control-strings: "npm:^1.0.0" 967 | has-unicode: "npm:^2.0.1" 968 | signal-exit: "npm:^3.0.0" 969 | string-width: "npm:^4.2.3" 970 | strip-ansi: "npm:^6.0.1" 971 | wide-align: "npm:^1.1.2" 972 | checksum: 10c0/88e8b0b70b7b6d02c34086fa62d7d2e25e1c5a8c77c0b631362808bc1ae773b00fba09f9e9c4e66a2ca36d0253443c370736f15f2a2a8a2f6c039ca3bc03205e 973 | languageName: node 974 | linkType: hard 975 | 976 | "get-func-name@npm:^2.0.1": 977 | version: 2.0.2 978 | resolution: "get-func-name@npm:2.0.2" 979 | checksum: 10c0/89830fd07623fa73429a711b9daecdb304386d237c71268007f788f113505ef1d4cc2d0b9680e072c5082490aec9df5d7758bf5ac6f1c37062855e8e3dc0b9df 980 | languageName: node 981 | linkType: hard 982 | 983 | "get-stream@npm:^9.0.0": 984 | version: 9.0.1 985 | resolution: "get-stream@npm:9.0.1" 986 | dependencies: 987 | "@sec-ant/readable-stream": "npm:^0.4.1" 988 | is-stream: "npm:^4.0.1" 989 | checksum: 10c0/d70e73857f2eea1826ac570c3a912757dcfbe8a718a033fa0c23e12ac8e7d633195b01710e0559af574cbb5af101009b42df7b6f6b29ceec8dbdf7291931b948 990 | languageName: node 991 | linkType: hard 992 | 993 | "glob@npm:^7.1.3, glob@npm:^7.1.4": 994 | version: 7.2.0 995 | resolution: "glob@npm:7.2.0" 996 | dependencies: 997 | fs.realpath: "npm:^1.0.0" 998 | inflight: "npm:^1.0.4" 999 | inherits: "npm:2" 1000 | minimatch: "npm:^3.0.4" 1001 | once: "npm:^1.3.0" 1002 | path-is-absolute: "npm:^1.0.0" 1003 | checksum: 10c0/478b40e38be5a3d514e64950e1e07e0ac120585add6a37c98d0ed24d72d9127d734d2a125786073c8deb687096e84ae82b641c441a869ada3a9cc91b68978632 1004 | languageName: node 1005 | linkType: hard 1006 | 1007 | "graceful-fs@npm:^4.2.6": 1008 | version: 4.2.9 1009 | resolution: "graceful-fs@npm:4.2.9" 1010 | checksum: 10c0/2a66760ce6677ca18a24a1ef15d440cfd970086446af1e78c9e9de083c48122d8bd9c3fdc37f8f80f34aae833fa0d9dd52725e75a1c3f433ddd34eece39e7376 1011 | languageName: node 1012 | linkType: hard 1013 | 1014 | "has-unicode@npm:^2.0.1": 1015 | version: 2.0.1 1016 | resolution: "has-unicode@npm:2.0.1" 1017 | checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c 1018 | languageName: node 1019 | linkType: hard 1020 | 1021 | "http-cache-semantics@npm:^4.1.0": 1022 | version: 4.1.0 1023 | resolution: "http-cache-semantics@npm:4.1.0" 1024 | checksum: 10c0/abe115ddd9f24914a49842f2745ecc8380837bbe30b59b154648c76ebc1bd3d5f8bd05c1789aaa2ae6b79624c591d13c8aa79104ff21078e117140a65ac20654 1025 | languageName: node 1026 | linkType: hard 1027 | 1028 | "http-proxy-agent@npm:^4.0.1": 1029 | version: 4.0.1 1030 | resolution: "http-proxy-agent@npm:4.0.1" 1031 | dependencies: 1032 | "@tootallnate/once": "npm:1" 1033 | agent-base: "npm:6" 1034 | debug: "npm:4" 1035 | checksum: 10c0/4fa4774d65b5331814b74ac05cefea56854fc0d5989c80b13432c1b0d42a14c9f4342ca3ad9f0359a52e78da12b1744c9f8a28e50042136ea9171675d972a5fd 1036 | languageName: node 1037 | linkType: hard 1038 | 1039 | "https-proxy-agent@npm:^5.0.0": 1040 | version: 5.0.0 1041 | resolution: "https-proxy-agent@npm:5.0.0" 1042 | dependencies: 1043 | agent-base: "npm:6" 1044 | debug: "npm:4" 1045 | checksum: 10c0/670c04f7f0effb5a449c094ea037cbcfb28a5ab93ed22e8c343095202cc7288027869a5a21caf4ee3b8ea06f9624ef1e1fc9044669c0fd92617654ff39f30806 1046 | languageName: node 1047 | linkType: hard 1048 | 1049 | "human-signals@npm:^8.0.0": 1050 | version: 8.0.1 1051 | resolution: "human-signals@npm:8.0.1" 1052 | checksum: 10c0/195ac607108c56253757717242e17cd2e21b29f06c5d2dad362e86c672bf2d096e8a3bbb2601841c376c2301c4ae7cff129e87f740aa4ebff1390c163114c7c4 1053 | languageName: node 1054 | linkType: hard 1055 | 1056 | "humanize-ms@npm:^1.2.1": 1057 | version: 1.2.1 1058 | resolution: "humanize-ms@npm:1.2.1" 1059 | dependencies: 1060 | ms: "npm:^2.0.0" 1061 | checksum: 10c0/f34a2c20161d02303c2807badec2f3b49cbfbbb409abd4f95a07377ae01cfe6b59e3d15ac609cffcd8f2521f0eb37b7e1091acf65da99aa2a4f1ad63c21e7e7a 1062 | languageName: node 1063 | linkType: hard 1064 | 1065 | "iconv-lite@npm:^0.6.2": 1066 | version: 0.6.3 1067 | resolution: "iconv-lite@npm:0.6.3" 1068 | dependencies: 1069 | safer-buffer: "npm:>= 2.1.2 < 3.0.0" 1070 | checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 1071 | languageName: node 1072 | linkType: hard 1073 | 1074 | "imurmurhash@npm:^0.1.4": 1075 | version: 0.1.4 1076 | resolution: "imurmurhash@npm:0.1.4" 1077 | checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 1078 | languageName: node 1079 | linkType: hard 1080 | 1081 | "indent-string@npm:^4.0.0": 1082 | version: 4.0.0 1083 | resolution: "indent-string@npm:4.0.0" 1084 | checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f 1085 | languageName: node 1086 | linkType: hard 1087 | 1088 | "infer-owner@npm:^1.0.4": 1089 | version: 1.0.4 1090 | resolution: "infer-owner@npm:1.0.4" 1091 | checksum: 10c0/a7b241e3149c26e37474e3435779487f42f36883711f198c45794703c7556bc38af224088bd4d1a221a45b8208ae2c2bcf86200383621434d0c099304481c5b9 1092 | languageName: node 1093 | linkType: hard 1094 | 1095 | "inflight@npm:^1.0.4": 1096 | version: 1.0.6 1097 | resolution: "inflight@npm:1.0.6" 1098 | dependencies: 1099 | once: "npm:^1.3.0" 1100 | wrappy: "npm:1" 1101 | checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 1102 | languageName: node 1103 | linkType: hard 1104 | 1105 | "inherits@npm:2, inherits@npm:^2.0.3": 1106 | version: 2.0.4 1107 | resolution: "inherits@npm:2.0.4" 1108 | checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 1109 | languageName: node 1110 | linkType: hard 1111 | 1112 | "ip@npm:^1.1.5": 1113 | version: 1.1.5 1114 | resolution: "ip@npm:1.1.5" 1115 | checksum: 10c0/877e98d676cd8d0ca01fee8282d11b91fb97be7dd9d0b2d6d98e161db2d4277954f5b55db7cfc8556fe6841cb100d13526a74f50ab0d83d6b130fe8445040175 1116 | languageName: node 1117 | linkType: hard 1118 | 1119 | "is-fullwidth-code-point@npm:^3.0.0": 1120 | version: 3.0.0 1121 | resolution: "is-fullwidth-code-point@npm:3.0.0" 1122 | checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc 1123 | languageName: node 1124 | linkType: hard 1125 | 1126 | "is-lambda@npm:^1.0.1": 1127 | version: 1.0.1 1128 | resolution: "is-lambda@npm:1.0.1" 1129 | checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d 1130 | languageName: node 1131 | linkType: hard 1132 | 1133 | "is-plain-obj@npm:^4.1.0": 1134 | version: 4.1.0 1135 | resolution: "is-plain-obj@npm:4.1.0" 1136 | checksum: 10c0/32130d651d71d9564dc88ba7e6fda0e91a1010a3694648e9f4f47bb6080438140696d3e3e15c741411d712e47ac9edc1a8a9de1fe76f3487b0d90be06ac9975e 1137 | languageName: node 1138 | linkType: hard 1139 | 1140 | "is-stream@npm:^4.0.1": 1141 | version: 4.0.1 1142 | resolution: "is-stream@npm:4.0.1" 1143 | checksum: 10c0/2706c7f19b851327ba374687bc4a3940805e14ca496dc672b9629e744d143b1ad9c6f1b162dece81c7bfbc0f83b32b61ccc19ad2e05aad2dd7af347408f60c7f 1144 | languageName: node 1145 | linkType: hard 1146 | 1147 | "is-unicode-supported@npm:^2.0.0": 1148 | version: 2.1.0 1149 | resolution: "is-unicode-supported@npm:2.1.0" 1150 | checksum: 10c0/a0f53e9a7c1fdbcf2d2ef6e40d4736fdffff1c9f8944c75e15425118ff3610172c87bf7bc6c34d3903b04be59790bb2212ddbe21ee65b5a97030fc50370545a5 1151 | languageName: node 1152 | linkType: hard 1153 | 1154 | "isexe@npm:^2.0.0": 1155 | version: 2.0.0 1156 | resolution: "isexe@npm:2.0.0" 1157 | checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d 1158 | languageName: node 1159 | linkType: hard 1160 | 1161 | "loupe@npm:^3.1.0": 1162 | version: 3.1.1 1163 | resolution: "loupe@npm:3.1.1" 1164 | dependencies: 1165 | get-func-name: "npm:^2.0.1" 1166 | checksum: 10c0/99f88badc47e894016df0c403de846fedfea61154aadabbf776c8428dd59e8d8378007135d385d737de32ae47980af07d22ba7bec5ef7beebd721de9baa0a0af 1167 | languageName: node 1168 | linkType: hard 1169 | 1170 | "loupe@npm:^3.1.3": 1171 | version: 3.1.3 1172 | resolution: "loupe@npm:3.1.3" 1173 | checksum: 10c0/f5dab4144254677de83a35285be1b8aba58b3861439ce4ba65875d0d5f3445a4a496daef63100ccf02b2dbc25bf58c6db84c9cb0b96d6435331e9d0a33b48541 1174 | languageName: node 1175 | linkType: hard 1176 | 1177 | "lru-cache@npm:^6.0.0": 1178 | version: 6.0.0 1179 | resolution: "lru-cache@npm:6.0.0" 1180 | dependencies: 1181 | yallist: "npm:^4.0.0" 1182 | checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 1183 | languageName: node 1184 | linkType: hard 1185 | 1186 | "magic-string@npm:^0.30.17": 1187 | version: 0.30.17 1188 | resolution: "magic-string@npm:0.30.17" 1189 | dependencies: 1190 | "@jridgewell/sourcemap-codec": "npm:^1.5.0" 1191 | checksum: 10c0/16826e415d04b88378f200fe022b53e638e3838b9e496edda6c0e086d7753a44a6ed187adc72d19f3623810589bf139af1a315541cd6a26ae0771a0193eaf7b8 1192 | languageName: node 1193 | linkType: hard 1194 | 1195 | "make-fetch-happen@npm:^9.1.0": 1196 | version: 9.1.0 1197 | resolution: "make-fetch-happen@npm:9.1.0" 1198 | dependencies: 1199 | agentkeepalive: "npm:^4.1.3" 1200 | cacache: "npm:^15.2.0" 1201 | http-cache-semantics: "npm:^4.1.0" 1202 | http-proxy-agent: "npm:^4.0.1" 1203 | https-proxy-agent: "npm:^5.0.0" 1204 | is-lambda: "npm:^1.0.1" 1205 | lru-cache: "npm:^6.0.0" 1206 | minipass: "npm:^3.1.3" 1207 | minipass-collect: "npm:^1.0.2" 1208 | minipass-fetch: "npm:^1.3.2" 1209 | minipass-flush: "npm:^1.0.5" 1210 | minipass-pipeline: "npm:^1.2.4" 1211 | negotiator: "npm:^0.6.2" 1212 | promise-retry: "npm:^2.0.1" 1213 | socks-proxy-agent: "npm:^6.0.0" 1214 | ssri: "npm:^8.0.0" 1215 | checksum: 10c0/2c737faf6a7f67077679da548b5bfeeef890595bf8c4323a1f76eae355d27ebb33dcf9cf1a673f944cf2f2a7cbf4e2b09f0a0a62931737728f210d902c6be966 1216 | languageName: node 1217 | linkType: hard 1218 | 1219 | "minimatch@npm:^3.0.4": 1220 | version: 3.0.4 1221 | resolution: "minimatch@npm:3.0.4" 1222 | dependencies: 1223 | brace-expansion: "npm:^1.1.7" 1224 | checksum: 10c0/d0a2bcd93ebec08a9eef3ca83ba33c9fb6feb93932e0b4dc6aa46c5f37a9404bea7ad9ff7cafe23ce6634f1fe3b206f5315ecbb05812da6e692c21d8ecfd3dae 1225 | languageName: node 1226 | linkType: hard 1227 | 1228 | "minipass-collect@npm:^1.0.2": 1229 | version: 1.0.2 1230 | resolution: "minipass-collect@npm:1.0.2" 1231 | dependencies: 1232 | minipass: "npm:^3.0.0" 1233 | checksum: 10c0/8f82bd1f3095b24f53a991b04b67f4c710c894e518b813f0864a31de5570441a509be1ca17e0bb92b047591a8fdbeb886f502764fefb00d2f144f4011791e898 1234 | languageName: node 1235 | linkType: hard 1236 | 1237 | "minipass-fetch@npm:^1.3.2": 1238 | version: 1.4.1 1239 | resolution: "minipass-fetch@npm:1.4.1" 1240 | dependencies: 1241 | encoding: "npm:^0.1.12" 1242 | minipass: "npm:^3.1.0" 1243 | minipass-sized: "npm:^1.0.3" 1244 | minizlib: "npm:^2.0.0" 1245 | dependenciesMeta: 1246 | encoding: 1247 | optional: true 1248 | checksum: 10c0/a43da7401cd7c4f24b993887d41bd37d097356083b0bb836fd655916467463a1e6e9e553b2da4fcbe8745bf23d40c8b884eab20745562199663b3e9060cd8e7a 1249 | languageName: node 1250 | linkType: hard 1251 | 1252 | "minipass-flush@npm:^1.0.5": 1253 | version: 1.0.5 1254 | resolution: "minipass-flush@npm:1.0.5" 1255 | dependencies: 1256 | minipass: "npm:^3.0.0" 1257 | checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd 1258 | languageName: node 1259 | linkType: hard 1260 | 1261 | "minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": 1262 | version: 1.2.4 1263 | resolution: "minipass-pipeline@npm:1.2.4" 1264 | dependencies: 1265 | minipass: "npm:^3.0.0" 1266 | checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 1267 | languageName: node 1268 | linkType: hard 1269 | 1270 | "minipass-sized@npm:^1.0.3": 1271 | version: 1.0.3 1272 | resolution: "minipass-sized@npm:1.0.3" 1273 | dependencies: 1274 | minipass: "npm:^3.0.0" 1275 | checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb 1276 | languageName: node 1277 | linkType: hard 1278 | 1279 | "minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3": 1280 | version: 3.1.6 1281 | resolution: "minipass@npm:3.1.6" 1282 | dependencies: 1283 | yallist: "npm:^4.0.0" 1284 | checksum: 10c0/65c3007875602b0ed0e1ab11a284b8aea80cd7c3757a8db75ca3850bd1cd728bec1c87bb03fe35355aecd61e08de4875d7a81c654372ec0b50c29e13f2c3b924 1285 | languageName: node 1286 | linkType: hard 1287 | 1288 | "minizlib@npm:^2.0.0, minizlib@npm:^2.1.1": 1289 | version: 2.1.2 1290 | resolution: "minizlib@npm:2.1.2" 1291 | dependencies: 1292 | minipass: "npm:^3.0.0" 1293 | yallist: "npm:^4.0.0" 1294 | checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 1295 | languageName: node 1296 | linkType: hard 1297 | 1298 | "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": 1299 | version: 1.0.4 1300 | resolution: "mkdirp@npm:1.0.4" 1301 | bin: 1302 | mkdirp: bin/cmd.js 1303 | checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf 1304 | languageName: node 1305 | linkType: hard 1306 | 1307 | "ms@npm:2.1.2": 1308 | version: 2.1.2 1309 | resolution: "ms@npm:2.1.2" 1310 | checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc 1311 | languageName: node 1312 | linkType: hard 1313 | 1314 | "ms@npm:^2.0.0, ms@npm:^2.1.3": 1315 | version: 2.1.3 1316 | resolution: "ms@npm:2.1.3" 1317 | checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 1318 | languageName: node 1319 | linkType: hard 1320 | 1321 | "nanoid@npm:^3.3.8": 1322 | version: 3.3.11 1323 | resolution: "nanoid@npm:3.3.11" 1324 | bin: 1325 | nanoid: bin/nanoid.cjs 1326 | checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b 1327 | languageName: node 1328 | linkType: hard 1329 | 1330 | "negotiator@npm:^0.6.2": 1331 | version: 0.6.2 1332 | resolution: "negotiator@npm:0.6.2" 1333 | checksum: 10c0/cda4955b5a0d6624ff3322c9a9e7bfc039b8f2b0133708208edbb28be6ebb62c45493aee098374d8d0aeda60fc37dd08cf53cd60bd5fad3efb8fc36b52e3cdce 1334 | languageName: node 1335 | linkType: hard 1336 | 1337 | "node-gyp@npm:latest": 1338 | version: 8.4.1 1339 | resolution: "node-gyp@npm:8.4.1" 1340 | dependencies: 1341 | env-paths: "npm:^2.2.0" 1342 | glob: "npm:^7.1.4" 1343 | graceful-fs: "npm:^4.2.6" 1344 | make-fetch-happen: "npm:^9.1.0" 1345 | nopt: "npm:^5.0.0" 1346 | npmlog: "npm:^6.0.0" 1347 | rimraf: "npm:^3.0.2" 1348 | semver: "npm:^7.3.5" 1349 | tar: "npm:^6.1.2" 1350 | which: "npm:^2.0.2" 1351 | bin: 1352 | node-gyp: bin/node-gyp.js 1353 | checksum: 10c0/80ef333b3a882eb6a2695a8e08f31d618f4533eff192864e4a3a16b67ff0abc9d8c1d5fac0395550ec699326b9248c5e2b3be178492f7f4d1ccf97d2cf948021 1354 | languageName: node 1355 | linkType: hard 1356 | 1357 | "nopt@npm:^5.0.0": 1358 | version: 5.0.0 1359 | resolution: "nopt@npm:5.0.0" 1360 | dependencies: 1361 | abbrev: "npm:1" 1362 | bin: 1363 | nopt: bin/nopt.js 1364 | checksum: 10c0/fc5c4f07155cb455bf5fc3dd149fac421c1a40fd83c6bfe83aa82b52f02c17c5e88301321318adaa27611c8a6811423d51d29deaceab5fa158b585a61a551061 1365 | languageName: node 1366 | linkType: hard 1367 | 1368 | "npm-run-path@npm:^6.0.0": 1369 | version: 6.0.0 1370 | resolution: "npm-run-path@npm:6.0.0" 1371 | dependencies: 1372 | path-key: "npm:^4.0.0" 1373 | unicorn-magic: "npm:^0.3.0" 1374 | checksum: 10c0/b223c8a0dcd608abf95363ea5c3c0ccc3cd877daf0102eaf1b0f2390d6858d8337fbb7c443af2403b067a7d2c116d10691ecd22ab3c5273c44da1ff8d07753bd 1375 | languageName: node 1376 | linkType: hard 1377 | 1378 | "npmlog@npm:^6.0.0": 1379 | version: 6.0.0 1380 | resolution: "npmlog@npm:6.0.0" 1381 | dependencies: 1382 | are-we-there-yet: "npm:^2.0.0" 1383 | console-control-strings: "npm:^1.1.0" 1384 | gauge: "npm:^4.0.0" 1385 | set-blocking: "npm:^2.0.0" 1386 | checksum: 10c0/e31920162392a4e55172dcac183446501fbb4d3466fd9c84cf72f6facd4dbeaea0a582d28e9f89d9294d1cdb6be1e595cf4ab6dc53f8c0986a327d666f9d6c3a 1387 | languageName: node 1388 | linkType: hard 1389 | 1390 | "once@npm:^1.3.0": 1391 | version: 1.4.0 1392 | resolution: "once@npm:1.4.0" 1393 | dependencies: 1394 | wrappy: "npm:1" 1395 | checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 1396 | languageName: node 1397 | linkType: hard 1398 | 1399 | "p-map@npm:^4.0.0": 1400 | version: 4.0.0 1401 | resolution: "p-map@npm:4.0.0" 1402 | dependencies: 1403 | aggregate-error: "npm:^3.0.0" 1404 | checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 1405 | languageName: node 1406 | linkType: hard 1407 | 1408 | "parse-ms@npm:^4.0.0": 1409 | version: 4.0.0 1410 | resolution: "parse-ms@npm:4.0.0" 1411 | checksum: 10c0/a7900f4f1ebac24cbf5e9708c16fb2fd482517fad353aecd7aefb8c2ba2f85ce017913ccb8925d231770404780df46244ea6fec598b3bde6490882358b4d2d16 1412 | languageName: node 1413 | linkType: hard 1414 | 1415 | "path-is-absolute@npm:^1.0.0": 1416 | version: 1.0.1 1417 | resolution: "path-is-absolute@npm:1.0.1" 1418 | checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 1419 | languageName: node 1420 | linkType: hard 1421 | 1422 | "path-key@npm:^3.1.0": 1423 | version: 3.1.1 1424 | resolution: "path-key@npm:3.1.1" 1425 | checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c 1426 | languageName: node 1427 | linkType: hard 1428 | 1429 | "path-key@npm:^4.0.0": 1430 | version: 4.0.0 1431 | resolution: "path-key@npm:4.0.0" 1432 | checksum: 10c0/794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 1433 | languageName: node 1434 | linkType: hard 1435 | 1436 | "pathe@npm:^2.0.3": 1437 | version: 2.0.3 1438 | resolution: "pathe@npm:2.0.3" 1439 | checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 1440 | languageName: node 1441 | linkType: hard 1442 | 1443 | "pathval@npm:^2.0.0": 1444 | version: 2.0.0 1445 | resolution: "pathval@npm:2.0.0" 1446 | checksum: 10c0/602e4ee347fba8a599115af2ccd8179836a63c925c23e04bd056d0674a64b39e3a081b643cc7bc0b84390517df2d800a46fcc5598d42c155fe4977095c2f77c5 1447 | languageName: node 1448 | linkType: hard 1449 | 1450 | "picocolors@npm:^1.1.1": 1451 | version: 1.1.1 1452 | resolution: "picocolors@npm:1.1.1" 1453 | checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 1454 | languageName: node 1455 | linkType: hard 1456 | 1457 | "picomatch@npm:^4.0.2": 1458 | version: 4.0.2 1459 | resolution: "picomatch@npm:4.0.2" 1460 | checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc 1461 | languageName: node 1462 | linkType: hard 1463 | 1464 | "postcss@npm:^8.5.3": 1465 | version: 8.5.3 1466 | resolution: "postcss@npm:8.5.3" 1467 | dependencies: 1468 | nanoid: "npm:^3.3.8" 1469 | picocolors: "npm:^1.1.1" 1470 | source-map-js: "npm:^1.2.1" 1471 | checksum: 10c0/b75510d7b28c3ab728c8733dd01538314a18c52af426f199a3c9177e63eb08602a3938bfb66b62dc01350b9aed62087eabbf229af97a1659eb8d3513cec823b3 1472 | languageName: node 1473 | linkType: hard 1474 | 1475 | "pretty-ms@npm:^9.0.0": 1476 | version: 9.2.0 1477 | resolution: "pretty-ms@npm:9.2.0" 1478 | dependencies: 1479 | parse-ms: "npm:^4.0.0" 1480 | checksum: 10c0/ab6d066f90e9f77020426986e1b018369f41575674544c539aabec2e63a20fec01166d8cf6571d0e165ad11cfe5a8134a2a48a36d42ab291c59c6deca5264cbb 1481 | languageName: node 1482 | linkType: hard 1483 | 1484 | "promise-inflight@npm:^1.0.1": 1485 | version: 1.0.1 1486 | resolution: "promise-inflight@npm:1.0.1" 1487 | checksum: 10c0/d179d148d98fbff3d815752fa9a08a87d3190551d1420f17c4467f628214db12235ae068d98cd001f024453676d8985af8f28f002345646c4ece4600a79620bc 1488 | languageName: node 1489 | linkType: hard 1490 | 1491 | "promise-retry@npm:^2.0.1": 1492 | version: 2.0.1 1493 | resolution: "promise-retry@npm:2.0.1" 1494 | dependencies: 1495 | err-code: "npm:^2.0.2" 1496 | retry: "npm:^0.12.0" 1497 | checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 1498 | languageName: node 1499 | linkType: hard 1500 | 1501 | "readable-stream@npm:^3.6.0": 1502 | version: 3.6.0 1503 | resolution: "readable-stream@npm:3.6.0" 1504 | dependencies: 1505 | inherits: "npm:^2.0.3" 1506 | string_decoder: "npm:^1.1.1" 1507 | util-deprecate: "npm:^1.0.1" 1508 | checksum: 10c0/937bedd29ac8a68331666291922bea892fa2be1a33269e582de9f844a2002f146cf831e39cd49fe6a378d3f0c27358f259ed0e20d20f0bdc6a3f8fc21fce42dc 1509 | languageName: node 1510 | linkType: hard 1511 | 1512 | "rescript-vitest@workspace:.": 1513 | version: 0.0.0-use.local 1514 | resolution: "rescript-vitest@workspace:." 1515 | dependencies: 1516 | "@jihchi/vite-plugin-rescript": "npm:^7.0.0" 1517 | rescript: "npm:12.0.0-alpha.12" 1518 | vite: "npm:^6.3.5" 1519 | vitest: "npm:^3.1.4" 1520 | peerDependencies: 1521 | rescript: ^10.1.0 || ^11.0.0-0 || ^12.0.0-0 1522 | vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 1523 | languageName: unknown 1524 | linkType: soft 1525 | 1526 | "rescript@npm:12.0.0-alpha.12": 1527 | version: 12.0.0-alpha.12 1528 | resolution: "rescript@npm:12.0.0-alpha.12" 1529 | bin: 1530 | bsc: cli/bsc.js 1531 | bstracing: lib/bstracing.js 1532 | rescript: cli/rescript.js 1533 | rescript-tools: cli/rescript-tools.js 1534 | rewatch: cli/rewatch.js 1535 | checksum: 10c0/494a23c413905981fffc6230ad1b1019ed5fb1701a21f3eeb1526fb8cc78c511f82ac4edf151bbb881bef1a854895edd2085522ce51e11b359833ae743b7d9d8 1536 | languageName: node 1537 | linkType: hard 1538 | 1539 | "retry@npm:^0.12.0": 1540 | version: 0.12.0 1541 | resolution: "retry@npm:0.12.0" 1542 | checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe 1543 | languageName: node 1544 | linkType: hard 1545 | 1546 | "rimraf@npm:^3.0.2": 1547 | version: 3.0.2 1548 | resolution: "rimraf@npm:3.0.2" 1549 | dependencies: 1550 | glob: "npm:^7.1.3" 1551 | bin: 1552 | rimraf: bin.js 1553 | checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 1554 | languageName: node 1555 | linkType: hard 1556 | 1557 | "rollup@npm:^4.34.9": 1558 | version: 4.41.0 1559 | resolution: "rollup@npm:4.41.0" 1560 | dependencies: 1561 | "@rollup/rollup-android-arm-eabi": "npm:4.41.0" 1562 | "@rollup/rollup-android-arm64": "npm:4.41.0" 1563 | "@rollup/rollup-darwin-arm64": "npm:4.41.0" 1564 | "@rollup/rollup-darwin-x64": "npm:4.41.0" 1565 | "@rollup/rollup-freebsd-arm64": "npm:4.41.0" 1566 | "@rollup/rollup-freebsd-x64": "npm:4.41.0" 1567 | "@rollup/rollup-linux-arm-gnueabihf": "npm:4.41.0" 1568 | "@rollup/rollup-linux-arm-musleabihf": "npm:4.41.0" 1569 | "@rollup/rollup-linux-arm64-gnu": "npm:4.41.0" 1570 | "@rollup/rollup-linux-arm64-musl": "npm:4.41.0" 1571 | "@rollup/rollup-linux-loongarch64-gnu": "npm:4.41.0" 1572 | "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.41.0" 1573 | "@rollup/rollup-linux-riscv64-gnu": "npm:4.41.0" 1574 | "@rollup/rollup-linux-riscv64-musl": "npm:4.41.0" 1575 | "@rollup/rollup-linux-s390x-gnu": "npm:4.41.0" 1576 | "@rollup/rollup-linux-x64-gnu": "npm:4.41.0" 1577 | "@rollup/rollup-linux-x64-musl": "npm:4.41.0" 1578 | "@rollup/rollup-win32-arm64-msvc": "npm:4.41.0" 1579 | "@rollup/rollup-win32-ia32-msvc": "npm:4.41.0" 1580 | "@rollup/rollup-win32-x64-msvc": "npm:4.41.0" 1581 | "@types/estree": "npm:1.0.7" 1582 | fsevents: "npm:~2.3.2" 1583 | dependenciesMeta: 1584 | "@rollup/rollup-android-arm-eabi": 1585 | optional: true 1586 | "@rollup/rollup-android-arm64": 1587 | optional: true 1588 | "@rollup/rollup-darwin-arm64": 1589 | optional: true 1590 | "@rollup/rollup-darwin-x64": 1591 | optional: true 1592 | "@rollup/rollup-freebsd-arm64": 1593 | optional: true 1594 | "@rollup/rollup-freebsd-x64": 1595 | optional: true 1596 | "@rollup/rollup-linux-arm-gnueabihf": 1597 | optional: true 1598 | "@rollup/rollup-linux-arm-musleabihf": 1599 | optional: true 1600 | "@rollup/rollup-linux-arm64-gnu": 1601 | optional: true 1602 | "@rollup/rollup-linux-arm64-musl": 1603 | optional: true 1604 | "@rollup/rollup-linux-loongarch64-gnu": 1605 | optional: true 1606 | "@rollup/rollup-linux-powerpc64le-gnu": 1607 | optional: true 1608 | "@rollup/rollup-linux-riscv64-gnu": 1609 | optional: true 1610 | "@rollup/rollup-linux-riscv64-musl": 1611 | optional: true 1612 | "@rollup/rollup-linux-s390x-gnu": 1613 | optional: true 1614 | "@rollup/rollup-linux-x64-gnu": 1615 | optional: true 1616 | "@rollup/rollup-linux-x64-musl": 1617 | optional: true 1618 | "@rollup/rollup-win32-arm64-msvc": 1619 | optional: true 1620 | "@rollup/rollup-win32-ia32-msvc": 1621 | optional: true 1622 | "@rollup/rollup-win32-x64-msvc": 1623 | optional: true 1624 | fsevents: 1625 | optional: true 1626 | bin: 1627 | rollup: dist/bin/rollup 1628 | checksum: 10c0/4c3d361f400317cb18f5e3912553a514bb1dcc7ce0c92ff66b9786b598632eb1d56f7bb1cc11ed16a4ccdbe6808ae851bc6bde5d2305cc587450c6212e69617f 1629 | languageName: node 1630 | linkType: hard 1631 | 1632 | "safe-buffer@npm:~5.2.0": 1633 | version: 5.2.1 1634 | resolution: "safe-buffer@npm:5.2.1" 1635 | checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 1636 | languageName: node 1637 | linkType: hard 1638 | 1639 | "safer-buffer@npm:>= 2.1.2 < 3.0.0": 1640 | version: 2.1.2 1641 | resolution: "safer-buffer@npm:2.1.2" 1642 | checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 1643 | languageName: node 1644 | linkType: hard 1645 | 1646 | "semver@npm:^7.3.5": 1647 | version: 7.3.5 1648 | resolution: "semver@npm:7.3.5" 1649 | dependencies: 1650 | lru-cache: "npm:^6.0.0" 1651 | bin: 1652 | semver: bin/semver.js 1653 | checksum: 10c0/d450455b2601396dbc7d9f058a6709b1c0b99d74a911f9436c77887600ffcdb5f63d5adffa0c3b8f0092937d8a41cc61c6437bcba375ef4151cb1335ebe4f1f9 1654 | languageName: node 1655 | linkType: hard 1656 | 1657 | "set-blocking@npm:^2.0.0": 1658 | version: 2.0.0 1659 | resolution: "set-blocking@npm:2.0.0" 1660 | checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 1661 | languageName: node 1662 | linkType: hard 1663 | 1664 | "shebang-command@npm:^2.0.0": 1665 | version: 2.0.0 1666 | resolution: "shebang-command@npm:2.0.0" 1667 | dependencies: 1668 | shebang-regex: "npm:^3.0.0" 1669 | checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e 1670 | languageName: node 1671 | linkType: hard 1672 | 1673 | "shebang-regex@npm:^3.0.0": 1674 | version: 3.0.0 1675 | resolution: "shebang-regex@npm:3.0.0" 1676 | checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 1677 | languageName: node 1678 | linkType: hard 1679 | 1680 | "siginfo@npm:^2.0.0": 1681 | version: 2.0.0 1682 | resolution: "siginfo@npm:2.0.0" 1683 | checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 1684 | languageName: node 1685 | linkType: hard 1686 | 1687 | "signal-exit@npm:^3.0.0": 1688 | version: 3.0.6 1689 | resolution: "signal-exit@npm:3.0.6" 1690 | checksum: 10c0/46c4e620f57373f51707927e38b9b7408c4be2802eb213e3e7b578508548c0bc72e37c995f60c526086537f87125e90ed02d0eedcd08d6726c983fb7f2add262 1691 | languageName: node 1692 | linkType: hard 1693 | 1694 | "signal-exit@npm:^4.1.0": 1695 | version: 4.1.0 1696 | resolution: "signal-exit@npm:4.1.0" 1697 | checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 1698 | languageName: node 1699 | linkType: hard 1700 | 1701 | "smart-buffer@npm:^4.1.0": 1702 | version: 4.2.0 1703 | resolution: "smart-buffer@npm:4.2.0" 1704 | checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 1705 | languageName: node 1706 | linkType: hard 1707 | 1708 | "socks-proxy-agent@npm:^6.0.0": 1709 | version: 6.1.1 1710 | resolution: "socks-proxy-agent@npm:6.1.1" 1711 | dependencies: 1712 | agent-base: "npm:^6.0.2" 1713 | debug: "npm:^4.3.1" 1714 | socks: "npm:^2.6.1" 1715 | checksum: 10c0/4d2ff6af0a4c49aa0f5aa3847468a75667795bc72c8271f85ee4c0a121f13f610674da43a6cbe77275e51596022f59da744d58f57d722dafbd1f54208cfa427d 1716 | languageName: node 1717 | linkType: hard 1718 | 1719 | "socks@npm:^2.6.1": 1720 | version: 2.6.1 1721 | resolution: "socks@npm:2.6.1" 1722 | dependencies: 1723 | ip: "npm:^1.1.5" 1724 | smart-buffer: "npm:^4.1.0" 1725 | checksum: 10c0/e992192c7837bfa9093251abf3e78849741f332881900f481dcb3267d18b16595e93519f63dce29f39e4135789a7ed379d210dd68e98465564a40e81ccf9082a 1726 | languageName: node 1727 | linkType: hard 1728 | 1729 | "source-map-js@npm:^1.2.1": 1730 | version: 1.2.1 1731 | resolution: "source-map-js@npm:1.2.1" 1732 | checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf 1733 | languageName: node 1734 | linkType: hard 1735 | 1736 | "ssri@npm:^8.0.0, ssri@npm:^8.0.1": 1737 | version: 8.0.1 1738 | resolution: "ssri@npm:8.0.1" 1739 | dependencies: 1740 | minipass: "npm:^3.1.1" 1741 | checksum: 10c0/5cfae216ae02dcd154d1bbed2d0a60038a4b3a2fcaac3c7e47401ff4e058e551ee74cfdba618871bf168cd583db7b8324f94af6747d4303b73cd4c3f6dc5c9c2 1742 | languageName: node 1743 | linkType: hard 1744 | 1745 | "stackback@npm:0.0.2": 1746 | version: 0.0.2 1747 | resolution: "stackback@npm:0.0.2" 1748 | checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 1749 | languageName: node 1750 | linkType: hard 1751 | 1752 | "std-env@npm:^3.9.0": 1753 | version: 3.9.0 1754 | resolution: "std-env@npm:3.9.0" 1755 | checksum: 10c0/4a6f9218aef3f41046c3c7ecf1f98df00b30a07f4f35c6d47b28329bc2531eef820828951c7d7b39a1c5eb19ad8a46e3ddfc7deb28f0a2f3ceebee11bab7ba50 1756 | languageName: node 1757 | linkType: hard 1758 | 1759 | "string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.2.3": 1760 | version: 4.2.3 1761 | resolution: "string-width@npm:4.2.3" 1762 | dependencies: 1763 | emoji-regex: "npm:^8.0.0" 1764 | is-fullwidth-code-point: "npm:^3.0.0" 1765 | strip-ansi: "npm:^6.0.1" 1766 | checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b 1767 | languageName: node 1768 | linkType: hard 1769 | 1770 | "string_decoder@npm:^1.1.1": 1771 | version: 1.3.0 1772 | resolution: "string_decoder@npm:1.3.0" 1773 | dependencies: 1774 | safe-buffer: "npm:~5.2.0" 1775 | checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d 1776 | languageName: node 1777 | linkType: hard 1778 | 1779 | "strip-ansi@npm:^6.0.1": 1780 | version: 6.0.1 1781 | resolution: "strip-ansi@npm:6.0.1" 1782 | dependencies: 1783 | ansi-regex: "npm:^5.0.1" 1784 | checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 1785 | languageName: node 1786 | linkType: hard 1787 | 1788 | "strip-final-newline@npm:^4.0.0": 1789 | version: 4.0.0 1790 | resolution: "strip-final-newline@npm:4.0.0" 1791 | checksum: 10c0/b0cf2b62d597a1b0e3ebc42b88767f0a0d45601f89fd379a928a1812c8779440c81abba708082c946445af1d6b62d5f16e2a7cf4f30d9d6587b89425fae801ff 1792 | languageName: node 1793 | linkType: hard 1794 | 1795 | "tar@npm:^6.0.2, tar@npm:^6.1.2": 1796 | version: 6.1.11 1797 | resolution: "tar@npm:6.1.11" 1798 | dependencies: 1799 | chownr: "npm:^2.0.0" 1800 | fs-minipass: "npm:^2.0.0" 1801 | minipass: "npm:^3.0.0" 1802 | minizlib: "npm:^2.1.1" 1803 | mkdirp: "npm:^1.0.3" 1804 | yallist: "npm:^4.0.0" 1805 | checksum: 10c0/5a016f5330f43815420797b87ade578e2ea60affd47439c988a3fc8f7bb6b36450d627c31ba6a839346fae248b4c8c12bb06bb0716211f37476838c7eff91f05 1806 | languageName: node 1807 | linkType: hard 1808 | 1809 | "tinybench@npm:^2.9.0": 1810 | version: 2.9.0 1811 | resolution: "tinybench@npm:2.9.0" 1812 | checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c 1813 | languageName: node 1814 | linkType: hard 1815 | 1816 | "tinyexec@npm:^0.3.2": 1817 | version: 0.3.2 1818 | resolution: "tinyexec@npm:0.3.2" 1819 | checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 1820 | languageName: node 1821 | linkType: hard 1822 | 1823 | "tinyglobby@npm:^0.2.13": 1824 | version: 0.2.13 1825 | resolution: "tinyglobby@npm:0.2.13" 1826 | dependencies: 1827 | fdir: "npm:^6.4.4" 1828 | picomatch: "npm:^4.0.2" 1829 | checksum: 10c0/ef07dfaa7b26936601d3f6d999f7928a4d1c6234c5eb36896bb88681947c0d459b7ebe797022400e555fe4b894db06e922b95d0ce60cb05fd827a0a66326b18c 1830 | languageName: node 1831 | linkType: hard 1832 | 1833 | "tinypool@npm:^1.0.2": 1834 | version: 1.0.2 1835 | resolution: "tinypool@npm:1.0.2" 1836 | checksum: 10c0/31ac184c0ff1cf9a074741254fe9ea6de95026749eb2b8ec6fd2b9d8ca94abdccda731f8e102e7f32e72ed3b36d32c6975fd5f5523df3f1b6de6c3d8dfd95e63 1837 | languageName: node 1838 | linkType: hard 1839 | 1840 | "tinyrainbow@npm:^2.0.0": 1841 | version: 2.0.0 1842 | resolution: "tinyrainbow@npm:2.0.0" 1843 | checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f 1844 | languageName: node 1845 | linkType: hard 1846 | 1847 | "tinyspy@npm:^3.0.2": 1848 | version: 3.0.2 1849 | resolution: "tinyspy@npm:3.0.2" 1850 | checksum: 10c0/55ffad24e346622b59292e097c2ee30a63919d5acb7ceca87fc0d1c223090089890587b426e20054733f97a58f20af2c349fb7cc193697203868ab7ba00bcea0 1851 | languageName: node 1852 | linkType: hard 1853 | 1854 | "unicorn-magic@npm:^0.3.0": 1855 | version: 0.3.0 1856 | resolution: "unicorn-magic@npm:0.3.0" 1857 | checksum: 10c0/0a32a997d6c15f1c2a077a15b1c4ca6f268d574cf5b8975e778bb98e6f8db4ef4e86dfcae4e158cd4c7e38fb4dd383b93b13eefddc7f178dea13d3ac8a603271 1858 | languageName: node 1859 | linkType: hard 1860 | 1861 | "unique-filename@npm:^1.1.1": 1862 | version: 1.1.1 1863 | resolution: "unique-filename@npm:1.1.1" 1864 | dependencies: 1865 | unique-slug: "npm:^2.0.0" 1866 | checksum: 10c0/d005bdfaae6894da8407c4de2b52f38b3c58ec86e79fc2ee19939da3085374413b073478ec54e721dc8e32b102cf9e50d0481b8331abdc62202e774b789ea874 1867 | languageName: node 1868 | linkType: hard 1869 | 1870 | "unique-slug@npm:^2.0.0": 1871 | version: 2.0.2 1872 | resolution: "unique-slug@npm:2.0.2" 1873 | dependencies: 1874 | imurmurhash: "npm:^0.1.4" 1875 | checksum: 10c0/9eabc51680cf0b8b197811a48857e41f1364b25362300c1ff636c0eca5ec543a92a38786f59cf0697e62c6f814b11ecbe64e8093db71246468a1f03b80c83970 1876 | languageName: node 1877 | linkType: hard 1878 | 1879 | "util-deprecate@npm:^1.0.1": 1880 | version: 1.0.2 1881 | resolution: "util-deprecate@npm:1.0.2" 1882 | checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 1883 | languageName: node 1884 | linkType: hard 1885 | 1886 | "vite-node@npm:3.1.4": 1887 | version: 3.1.4 1888 | resolution: "vite-node@npm:3.1.4" 1889 | dependencies: 1890 | cac: "npm:^6.7.14" 1891 | debug: "npm:^4.4.0" 1892 | es-module-lexer: "npm:^1.7.0" 1893 | pathe: "npm:^2.0.3" 1894 | vite: "npm:^5.0.0 || ^6.0.0" 1895 | bin: 1896 | vite-node: vite-node.mjs 1897 | checksum: 10c0/2fc71ddadd308b19b0d0dc09f5b9a108ea9bb640ec5fbd6179267994da8fd6c9d6a4c92098af7de73a0fa817055b518b28972452a2f19a1be754e79947e289d2 1898 | languageName: node 1899 | linkType: hard 1900 | 1901 | "vite@npm:^5.0.0 || ^6.0.0, vite@npm:^6.3.5": 1902 | version: 6.3.5 1903 | resolution: "vite@npm:6.3.5" 1904 | dependencies: 1905 | esbuild: "npm:^0.25.0" 1906 | fdir: "npm:^6.4.4" 1907 | fsevents: "npm:~2.3.3" 1908 | picomatch: "npm:^4.0.2" 1909 | postcss: "npm:^8.5.3" 1910 | rollup: "npm:^4.34.9" 1911 | tinyglobby: "npm:^0.2.13" 1912 | peerDependencies: 1913 | "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 1914 | jiti: ">=1.21.0" 1915 | less: "*" 1916 | lightningcss: ^1.21.0 1917 | sass: "*" 1918 | sass-embedded: "*" 1919 | stylus: "*" 1920 | sugarss: "*" 1921 | terser: ^5.16.0 1922 | tsx: ^4.8.1 1923 | yaml: ^2.4.2 1924 | dependenciesMeta: 1925 | fsevents: 1926 | optional: true 1927 | peerDependenciesMeta: 1928 | "@types/node": 1929 | optional: true 1930 | jiti: 1931 | optional: true 1932 | less: 1933 | optional: true 1934 | lightningcss: 1935 | optional: true 1936 | sass: 1937 | optional: true 1938 | sass-embedded: 1939 | optional: true 1940 | stylus: 1941 | optional: true 1942 | sugarss: 1943 | optional: true 1944 | terser: 1945 | optional: true 1946 | tsx: 1947 | optional: true 1948 | yaml: 1949 | optional: true 1950 | bin: 1951 | vite: bin/vite.js 1952 | checksum: 10c0/df70201659085133abffc6b88dcdb8a57ef35f742a01311fc56a4cfcda6a404202860729cc65a2c401a724f6e25f9ab40ce4339ed4946f550541531ced6fe41c 1953 | languageName: node 1954 | linkType: hard 1955 | 1956 | "vitest@npm:^3.1.4": 1957 | version: 3.1.4 1958 | resolution: "vitest@npm:3.1.4" 1959 | dependencies: 1960 | "@vitest/expect": "npm:3.1.4" 1961 | "@vitest/mocker": "npm:3.1.4" 1962 | "@vitest/pretty-format": "npm:^3.1.4" 1963 | "@vitest/runner": "npm:3.1.4" 1964 | "@vitest/snapshot": "npm:3.1.4" 1965 | "@vitest/spy": "npm:3.1.4" 1966 | "@vitest/utils": "npm:3.1.4" 1967 | chai: "npm:^5.2.0" 1968 | debug: "npm:^4.4.0" 1969 | expect-type: "npm:^1.2.1" 1970 | magic-string: "npm:^0.30.17" 1971 | pathe: "npm:^2.0.3" 1972 | std-env: "npm:^3.9.0" 1973 | tinybench: "npm:^2.9.0" 1974 | tinyexec: "npm:^0.3.2" 1975 | tinyglobby: "npm:^0.2.13" 1976 | tinypool: "npm:^1.0.2" 1977 | tinyrainbow: "npm:^2.0.0" 1978 | vite: "npm:^5.0.0 || ^6.0.0" 1979 | vite-node: "npm:3.1.4" 1980 | why-is-node-running: "npm:^2.3.0" 1981 | peerDependencies: 1982 | "@edge-runtime/vm": "*" 1983 | "@types/debug": ^4.1.12 1984 | "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 1985 | "@vitest/browser": 3.1.4 1986 | "@vitest/ui": 3.1.4 1987 | happy-dom: "*" 1988 | jsdom: "*" 1989 | peerDependenciesMeta: 1990 | "@edge-runtime/vm": 1991 | optional: true 1992 | "@types/debug": 1993 | optional: true 1994 | "@types/node": 1995 | optional: true 1996 | "@vitest/browser": 1997 | optional: true 1998 | "@vitest/ui": 1999 | optional: true 2000 | happy-dom: 2001 | optional: true 2002 | jsdom: 2003 | optional: true 2004 | bin: 2005 | vitest: vitest.mjs 2006 | checksum: 10c0/aec575e3cc6cf9b3cee224ae63569479e3a41fa980e495a73d384e31e273f34b18317a0da23bbd577c60fe5e717fa41cdc390de4049ce224ffdaa266ea0cdc67 2007 | languageName: node 2008 | linkType: hard 2009 | 2010 | "which@npm:^2.0.1, which@npm:^2.0.2": 2011 | version: 2.0.2 2012 | resolution: "which@npm:2.0.2" 2013 | dependencies: 2014 | isexe: "npm:^2.0.0" 2015 | bin: 2016 | node-which: ./bin/node-which 2017 | checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f 2018 | languageName: node 2019 | linkType: hard 2020 | 2021 | "why-is-node-running@npm:^2.3.0": 2022 | version: 2.3.0 2023 | resolution: "why-is-node-running@npm:2.3.0" 2024 | dependencies: 2025 | siginfo: "npm:^2.0.0" 2026 | stackback: "npm:0.0.2" 2027 | bin: 2028 | why-is-node-running: cli.js 2029 | checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 2030 | languageName: node 2031 | linkType: hard 2032 | 2033 | "wide-align@npm:^1.1.2": 2034 | version: 1.1.5 2035 | resolution: "wide-align@npm:1.1.5" 2036 | dependencies: 2037 | string-width: "npm:^1.0.2 || 2 || 3 || 4" 2038 | checksum: 10c0/1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95 2039 | languageName: node 2040 | linkType: hard 2041 | 2042 | "wrappy@npm:1": 2043 | version: 1.0.2 2044 | resolution: "wrappy@npm:1.0.2" 2045 | checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 2046 | languageName: node 2047 | linkType: hard 2048 | 2049 | "yallist@npm:^4.0.0": 2050 | version: 4.0.0 2051 | resolution: "yallist@npm:4.0.0" 2052 | checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a 2053 | languageName: node 2054 | linkType: hard 2055 | 2056 | "yoctocolors@npm:^2.0.0": 2057 | version: 2.1.1 2058 | resolution: "yoctocolors@npm:2.1.1" 2059 | checksum: 10c0/85903f7fa96f1c70badee94789fade709f9d83dab2ec92753d612d84fcea6d34c772337a9f8914c6bed2f5fc03a428ac5d893e76fab636da5f1236ab725486d0 2060 | languageName: node 2061 | linkType: hard 2062 | --------------------------------------------------------------------------------