prototypey.org - atproto lexicon typescript toolkit - mirror https://github.com/tylersayshi/prototypey

swap to vitest

Tyler 0aafa030 7d14aedc

+1034 -155
+3 -2
package.json
··· 23 23 "build": "tsdown", 24 24 "format": "prettier .", 25 25 "lint": "eslint . --max-warnings 0", 26 - "test": "node --test", 26 + "test": "vitest run", 27 27 "tsc": "tsc" 28 28 }, 29 29 "devDependencies": { ··· 33 33 "prettier": "3.6.1", 34 34 "tsdown": "0.12.7", 35 35 "typescript": "5.8.3", 36 - "typescript-eslint": "8.35.0" 36 + "typescript-eslint": "8.35.0", 37 + "vitest": "^3.2.4" 37 38 }, 38 39 "packageManager": "pnpm@10.4.0", 39 40 "engines": {
+878
pnpm-lock.yaml
··· 29 29 typescript-eslint: 30 30 specifier: 8.35.0 31 31 version: 8.35.0(eslint@9.29.0(jiti@2.6.1))(typescript@5.8.3) 32 + vitest: 33 + specifier: ^3.2.4 34 + version: 3.2.4(@types/node@24.0.4)(jiti@2.6.1) 32 35 33 36 packages: 34 37 ··· 62 65 '@emnapi/wasi-threads@1.1.0': 63 66 resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} 64 67 68 + '@esbuild/aix-ppc64@0.25.10': 69 + resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} 70 + engines: {node: '>=18'} 71 + cpu: [ppc64] 72 + os: [aix] 73 + 74 + '@esbuild/android-arm64@0.25.10': 75 + resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} 76 + engines: {node: '>=18'} 77 + cpu: [arm64] 78 + os: [android] 79 + 80 + '@esbuild/android-arm@0.25.10': 81 + resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} 82 + engines: {node: '>=18'} 83 + cpu: [arm] 84 + os: [android] 85 + 86 + '@esbuild/android-x64@0.25.10': 87 + resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} 88 + engines: {node: '>=18'} 89 + cpu: [x64] 90 + os: [android] 91 + 92 + '@esbuild/darwin-arm64@0.25.10': 93 + resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} 94 + engines: {node: '>=18'} 95 + cpu: [arm64] 96 + os: [darwin] 97 + 98 + '@esbuild/darwin-x64@0.25.10': 99 + resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} 100 + engines: {node: '>=18'} 101 + cpu: [x64] 102 + os: [darwin] 103 + 104 + '@esbuild/freebsd-arm64@0.25.10': 105 + resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} 106 + engines: {node: '>=18'} 107 + cpu: [arm64] 108 + os: [freebsd] 109 + 110 + '@esbuild/freebsd-x64@0.25.10': 111 + resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} 112 + engines: {node: '>=18'} 113 + cpu: [x64] 114 + os: [freebsd] 115 + 116 + '@esbuild/linux-arm64@0.25.10': 117 + resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} 118 + engines: {node: '>=18'} 119 + cpu: [arm64] 120 + os: [linux] 121 + 122 + '@esbuild/linux-arm@0.25.10': 123 + resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} 124 + engines: {node: '>=18'} 125 + cpu: [arm] 126 + os: [linux] 127 + 128 + '@esbuild/linux-ia32@0.25.10': 129 + resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} 130 + engines: {node: '>=18'} 131 + cpu: [ia32] 132 + os: [linux] 133 + 134 + '@esbuild/linux-loong64@0.25.10': 135 + resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} 136 + engines: {node: '>=18'} 137 + cpu: [loong64] 138 + os: [linux] 139 + 140 + '@esbuild/linux-mips64el@0.25.10': 141 + resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} 142 + engines: {node: '>=18'} 143 + cpu: [mips64el] 144 + os: [linux] 145 + 146 + '@esbuild/linux-ppc64@0.25.10': 147 + resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} 148 + engines: {node: '>=18'} 149 + cpu: [ppc64] 150 + os: [linux] 151 + 152 + '@esbuild/linux-riscv64@0.25.10': 153 + resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} 154 + engines: {node: '>=18'} 155 + cpu: [riscv64] 156 + os: [linux] 157 + 158 + '@esbuild/linux-s390x@0.25.10': 159 + resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} 160 + engines: {node: '>=18'} 161 + cpu: [s390x] 162 + os: [linux] 163 + 164 + '@esbuild/linux-x64@0.25.10': 165 + resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} 166 + engines: {node: '>=18'} 167 + cpu: [x64] 168 + os: [linux] 169 + 170 + '@esbuild/netbsd-arm64@0.25.10': 171 + resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} 172 + engines: {node: '>=18'} 173 + cpu: [arm64] 174 + os: [netbsd] 175 + 176 + '@esbuild/netbsd-x64@0.25.10': 177 + resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} 178 + engines: {node: '>=18'} 179 + cpu: [x64] 180 + os: [netbsd] 181 + 182 + '@esbuild/openbsd-arm64@0.25.10': 183 + resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} 184 + engines: {node: '>=18'} 185 + cpu: [arm64] 186 + os: [openbsd] 187 + 188 + '@esbuild/openbsd-x64@0.25.10': 189 + resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} 190 + engines: {node: '>=18'} 191 + cpu: [x64] 192 + os: [openbsd] 193 + 194 + '@esbuild/openharmony-arm64@0.25.10': 195 + resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} 196 + engines: {node: '>=18'} 197 + cpu: [arm64] 198 + os: [openharmony] 199 + 200 + '@esbuild/sunos-x64@0.25.10': 201 + resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} 202 + engines: {node: '>=18'} 203 + cpu: [x64] 204 + os: [sunos] 205 + 206 + '@esbuild/win32-arm64@0.25.10': 207 + resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} 208 + engines: {node: '>=18'} 209 + cpu: [arm64] 210 + os: [win32] 211 + 212 + '@esbuild/win32-ia32@0.25.10': 213 + resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} 214 + engines: {node: '>=18'} 215 + cpu: [ia32] 216 + os: [win32] 217 + 218 + '@esbuild/win32-x64@0.25.10': 219 + resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} 220 + engines: {node: '>=18'} 221 + cpu: [x64] 222 + os: [win32] 223 + 65 224 '@eslint-community/eslint-utils@4.9.0': 66 225 resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} 67 226 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} ··· 221 380 '@rolldown/pluginutils@1.0.0-beta.11-commit.f051675': 222 381 resolution: {integrity: sha512-TAqMYehvpauLKz7v4TZOTUQNjxa5bUQWw2+51/+Zk3ItclBxgoSWhnZ31sXjdoX6le6OXdK2vZfV3KoyW/O/GA==} 223 382 383 + '@rollup/rollup-android-arm-eabi@4.52.4': 384 + resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==} 385 + cpu: [arm] 386 + os: [android] 387 + 388 + '@rollup/rollup-android-arm64@4.52.4': 389 + resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==} 390 + cpu: [arm64] 391 + os: [android] 392 + 393 + '@rollup/rollup-darwin-arm64@4.52.4': 394 + resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==} 395 + cpu: [arm64] 396 + os: [darwin] 397 + 398 + '@rollup/rollup-darwin-x64@4.52.4': 399 + resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==} 400 + cpu: [x64] 401 + os: [darwin] 402 + 403 + '@rollup/rollup-freebsd-arm64@4.52.4': 404 + resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==} 405 + cpu: [arm64] 406 + os: [freebsd] 407 + 408 + '@rollup/rollup-freebsd-x64@4.52.4': 409 + resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==} 410 + cpu: [x64] 411 + os: [freebsd] 412 + 413 + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': 414 + resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} 415 + cpu: [arm] 416 + os: [linux] 417 + 418 + '@rollup/rollup-linux-arm-musleabihf@4.52.4': 419 + resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} 420 + cpu: [arm] 421 + os: [linux] 422 + 423 + '@rollup/rollup-linux-arm64-gnu@4.52.4': 424 + resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} 425 + cpu: [arm64] 426 + os: [linux] 427 + 428 + '@rollup/rollup-linux-arm64-musl@4.52.4': 429 + resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} 430 + cpu: [arm64] 431 + os: [linux] 432 + 433 + '@rollup/rollup-linux-loong64-gnu@4.52.4': 434 + resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} 435 + cpu: [loong64] 436 + os: [linux] 437 + 438 + '@rollup/rollup-linux-ppc64-gnu@4.52.4': 439 + resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} 440 + cpu: [ppc64] 441 + os: [linux] 442 + 443 + '@rollup/rollup-linux-riscv64-gnu@4.52.4': 444 + resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} 445 + cpu: [riscv64] 446 + os: [linux] 447 + 448 + '@rollup/rollup-linux-riscv64-musl@4.52.4': 449 + resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} 450 + cpu: [riscv64] 451 + os: [linux] 452 + 453 + '@rollup/rollup-linux-s390x-gnu@4.52.4': 454 + resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} 455 + cpu: [s390x] 456 + os: [linux] 457 + 458 + '@rollup/rollup-linux-x64-gnu@4.52.4': 459 + resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} 460 + cpu: [x64] 461 + os: [linux] 462 + 463 + '@rollup/rollup-linux-x64-musl@4.52.4': 464 + resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} 465 + cpu: [x64] 466 + os: [linux] 467 + 468 + '@rollup/rollup-openharmony-arm64@4.52.4': 469 + resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} 470 + cpu: [arm64] 471 + os: [openharmony] 472 + 473 + '@rollup/rollup-win32-arm64-msvc@4.52.4': 474 + resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==} 475 + cpu: [arm64] 476 + os: [win32] 477 + 478 + '@rollup/rollup-win32-ia32-msvc@4.52.4': 479 + resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==} 480 + cpu: [ia32] 481 + os: [win32] 482 + 483 + '@rollup/rollup-win32-x64-gnu@4.52.4': 484 + resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==} 485 + cpu: [x64] 486 + os: [win32] 487 + 488 + '@rollup/rollup-win32-x64-msvc@4.52.4': 489 + resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==} 490 + cpu: [x64] 491 + os: [win32] 492 + 224 493 '@tybys/wasm-util@0.10.1': 225 494 resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} 495 + 496 + '@types/chai@5.2.2': 497 + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} 498 + 499 + '@types/deep-eql@4.0.2': 500 + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 226 501 227 502 '@types/estree@1.0.8': 228 503 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} ··· 292 567 resolution: {integrity: sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==} 293 568 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 294 569 570 + '@vitest/expect@3.2.4': 571 + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} 572 + 573 + '@vitest/mocker@3.2.4': 574 + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} 575 + peerDependencies: 576 + msw: ^2.4.9 577 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 578 + peerDependenciesMeta: 579 + msw: 580 + optional: true 581 + vite: 582 + optional: true 583 + 584 + '@vitest/pretty-format@3.2.4': 585 + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} 586 + 587 + '@vitest/runner@3.2.4': 588 + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} 589 + 590 + '@vitest/snapshot@3.2.4': 591 + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} 592 + 593 + '@vitest/spy@3.2.4': 594 + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} 595 + 596 + '@vitest/utils@3.2.4': 597 + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} 598 + 295 599 acorn-jsx@5.3.2: 296 600 resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 297 601 peerDependencies: ··· 316 620 argparse@2.0.1: 317 621 resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 318 622 623 + assertion-error@2.0.1: 624 + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 625 + engines: {node: '>=12'} 626 + 319 627 ast-kit@2.1.3: 320 628 resolution: {integrity: sha512-TH+b3Lv6pUjy/Nu0m6A2JULtdzLpmqF9x1Dhj00ZoEiML8qvVA9j1flkzTKNYgdEhWrjDwtWNpyyCUbfQe514g==} 321 629 engines: {node: '>=20.19.0'} ··· 344 652 resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 345 653 engines: {node: '>=6'} 346 654 655 + chai@5.3.3: 656 + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} 657 + engines: {node: '>=18'} 658 + 347 659 chalk@4.1.2: 348 660 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 349 661 engines: {node: '>=10'} 662 + 663 + check-error@2.1.1: 664 + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 665 + engines: {node: '>= 16'} 350 666 351 667 chokidar@4.0.3: 352 668 resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} ··· 375 691 supports-color: 376 692 optional: true 377 693 694 + deep-eql@5.0.2: 695 + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 696 + engines: {node: '>=6'} 697 + 378 698 deep-is@0.1.4: 379 699 resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 380 700 ··· 397 717 empathic@1.1.0: 398 718 resolution: {integrity: sha512-rsPft6CK3eHtrlp9Y5ALBb+hfK+DWnA4WFebbazxjWyx8vSm3rZeoM3z9irsjcqO3PYRzlfv27XIB4tz2DV7RA==} 399 719 engines: {node: '>=14'} 720 + 721 + es-module-lexer@1.7.0: 722 + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 723 + 724 + esbuild@0.25.10: 725 + resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} 726 + engines: {node: '>=18'} 727 + hasBin: true 400 728 401 729 escape-string-regexp@4.0.0: 402 730 resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} ··· 440 768 resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 441 769 engines: {node: '>=4.0'} 442 770 771 + estree-walker@3.0.3: 772 + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 773 + 443 774 esutils@2.0.3: 444 775 resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 445 776 engines: {node: '>=0.10.0'} 777 + 778 + expect-type@1.2.2: 779 + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} 780 + engines: {node: '>=12.0.0'} 446 781 447 782 fast-deep-equal@3.1.3: 448 783 resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} ··· 488 823 flatted@3.3.3: 489 824 resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 490 825 826 + fsevents@2.3.3: 827 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 828 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 829 + os: [darwin] 830 + 491 831 get-tsconfig@4.12.0: 492 832 resolution: {integrity: sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==} 493 833 ··· 548 888 resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 549 889 hasBin: true 550 890 891 + js-tokens@9.0.1: 892 + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} 893 + 551 894 js-yaml@4.1.0: 552 895 resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 553 896 hasBin: true ··· 580 923 lodash.merge@4.6.2: 581 924 resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 582 925 926 + loupe@3.2.1: 927 + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} 928 + 929 + magic-string@0.30.19: 930 + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} 931 + 583 932 merge2@1.4.1: 584 933 resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 585 934 engines: {node: '>= 8'} ··· 598 947 ms@2.1.3: 599 948 resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 600 949 950 + nanoid@3.3.11: 951 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 952 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 953 + hasBin: true 954 + 601 955 natural-compare@1.4.0: 602 956 resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 603 957 ··· 628 982 pathe@2.0.3: 629 983 resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 630 984 985 + pathval@2.0.1: 986 + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} 987 + engines: {node: '>= 14.16'} 988 + 989 + picocolors@1.1.1: 990 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 991 + 631 992 picomatch@2.3.1: 632 993 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 633 994 engines: {node: '>=8.6'} ··· 635 996 picomatch@4.0.3: 636 997 resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 637 998 engines: {node: '>=12'} 999 + 1000 + postcss@8.5.6: 1001 + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 1002 + engines: {node: ^10 || ^12 || >=14} 638 1003 639 1004 prelude-ls@1.2.1: 640 1005 resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} ··· 690 1055 resolution: {integrity: sha512-g8MCVkvg2GnrrG+j+WplOTx1nAmjSwYOMSOQI0qfxf8D4NmYZqJuG3f85yWK64XXQv6pKcXZsfMkOPs9B6B52A==} 691 1056 hasBin: true 692 1057 1058 + rollup@4.52.4: 1059 + resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==} 1060 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1061 + hasBin: true 1062 + 693 1063 run-parallel@1.2.0: 694 1064 resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 695 1065 ··· 706 1076 resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 707 1077 engines: {node: '>=8'} 708 1078 1079 + siginfo@2.0.0: 1080 + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1081 + 1082 + source-map-js@1.2.1: 1083 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1084 + engines: {node: '>=0.10.0'} 1085 + 1086 + stackback@0.0.2: 1087 + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1088 + 1089 + std-env@3.9.0: 1090 + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} 1091 + 709 1092 strip-json-comments@3.1.1: 710 1093 resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 711 1094 engines: {node: '>=8'} 712 1095 1096 + strip-literal@3.1.0: 1097 + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} 1098 + 713 1099 supports-color@7.2.0: 714 1100 resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 715 1101 engines: {node: '>=8'} 716 1102 1103 + tinybench@2.9.0: 1104 + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1105 + 1106 + tinyexec@0.3.2: 1107 + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1108 + 717 1109 tinyexec@1.0.1: 718 1110 resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} 719 1111 720 1112 tinyglobby@0.2.15: 721 1113 resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 722 1114 engines: {node: '>=12.0.0'} 1115 + 1116 + tinypool@1.1.1: 1117 + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} 1118 + engines: {node: ^18.0.0 || >=20.0.0} 1119 + 1120 + tinyrainbow@2.0.0: 1121 + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 1122 + engines: {node: '>=14.0.0'} 1123 + 1124 + tinyspy@4.0.4: 1125 + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} 1126 + engines: {node: '>=14.0.0'} 723 1127 724 1128 to-regex-range@5.0.1: 725 1129 resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} ··· 781 1185 uri-js@4.4.1: 782 1186 resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 783 1187 1188 + vite-node@3.2.4: 1189 + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} 1190 + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1191 + hasBin: true 1192 + 1193 + vite@7.1.9: 1194 + resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==} 1195 + engines: {node: ^20.19.0 || >=22.12.0} 1196 + hasBin: true 1197 + peerDependencies: 1198 + '@types/node': ^20.19.0 || >=22.12.0 1199 + jiti: '>=1.21.0' 1200 + less: ^4.0.0 1201 + lightningcss: ^1.21.0 1202 + sass: ^1.70.0 1203 + sass-embedded: ^1.70.0 1204 + stylus: '>=0.54.8' 1205 + sugarss: ^5.0.0 1206 + terser: ^5.16.0 1207 + tsx: ^4.8.1 1208 + yaml: ^2.4.2 1209 + peerDependenciesMeta: 1210 + '@types/node': 1211 + optional: true 1212 + jiti: 1213 + optional: true 1214 + less: 1215 + optional: true 1216 + lightningcss: 1217 + optional: true 1218 + sass: 1219 + optional: true 1220 + sass-embedded: 1221 + optional: true 1222 + stylus: 1223 + optional: true 1224 + sugarss: 1225 + optional: true 1226 + terser: 1227 + optional: true 1228 + tsx: 1229 + optional: true 1230 + yaml: 1231 + optional: true 1232 + 1233 + vitest@3.2.4: 1234 + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} 1235 + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1236 + hasBin: true 1237 + peerDependencies: 1238 + '@edge-runtime/vm': '*' 1239 + '@types/debug': ^4.1.12 1240 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1241 + '@vitest/browser': 3.2.4 1242 + '@vitest/ui': 3.2.4 1243 + happy-dom: '*' 1244 + jsdom: '*' 1245 + peerDependenciesMeta: 1246 + '@edge-runtime/vm': 1247 + optional: true 1248 + '@types/debug': 1249 + optional: true 1250 + '@types/node': 1251 + optional: true 1252 + '@vitest/browser': 1253 + optional: true 1254 + '@vitest/ui': 1255 + optional: true 1256 + happy-dom: 1257 + optional: true 1258 + jsdom: 1259 + optional: true 1260 + 784 1261 which@2.0.2: 785 1262 resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 786 1263 engines: {node: '>= 8'} 1264 + hasBin: true 1265 + 1266 + why-is-node-running@2.3.0: 1267 + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1268 + engines: {node: '>=8'} 787 1269 hasBin: true 788 1270 789 1271 word-wrap@1.2.5: ··· 833 1315 tslib: 2.8.1 834 1316 optional: true 835 1317 1318 + '@esbuild/aix-ppc64@0.25.10': 1319 + optional: true 1320 + 1321 + '@esbuild/android-arm64@0.25.10': 1322 + optional: true 1323 + 1324 + '@esbuild/android-arm@0.25.10': 1325 + optional: true 1326 + 1327 + '@esbuild/android-x64@0.25.10': 1328 + optional: true 1329 + 1330 + '@esbuild/darwin-arm64@0.25.10': 1331 + optional: true 1332 + 1333 + '@esbuild/darwin-x64@0.25.10': 1334 + optional: true 1335 + 1336 + '@esbuild/freebsd-arm64@0.25.10': 1337 + optional: true 1338 + 1339 + '@esbuild/freebsd-x64@0.25.10': 1340 + optional: true 1341 + 1342 + '@esbuild/linux-arm64@0.25.10': 1343 + optional: true 1344 + 1345 + '@esbuild/linux-arm@0.25.10': 1346 + optional: true 1347 + 1348 + '@esbuild/linux-ia32@0.25.10': 1349 + optional: true 1350 + 1351 + '@esbuild/linux-loong64@0.25.10': 1352 + optional: true 1353 + 1354 + '@esbuild/linux-mips64el@0.25.10': 1355 + optional: true 1356 + 1357 + '@esbuild/linux-ppc64@0.25.10': 1358 + optional: true 1359 + 1360 + '@esbuild/linux-riscv64@0.25.10': 1361 + optional: true 1362 + 1363 + '@esbuild/linux-s390x@0.25.10': 1364 + optional: true 1365 + 1366 + '@esbuild/linux-x64@0.25.10': 1367 + optional: true 1368 + 1369 + '@esbuild/netbsd-arm64@0.25.10': 1370 + optional: true 1371 + 1372 + '@esbuild/netbsd-x64@0.25.10': 1373 + optional: true 1374 + 1375 + '@esbuild/openbsd-arm64@0.25.10': 1376 + optional: true 1377 + 1378 + '@esbuild/openbsd-x64@0.25.10': 1379 + optional: true 1380 + 1381 + '@esbuild/openharmony-arm64@0.25.10': 1382 + optional: true 1383 + 1384 + '@esbuild/sunos-x64@0.25.10': 1385 + optional: true 1386 + 1387 + '@esbuild/win32-arm64@0.25.10': 1388 + optional: true 1389 + 1390 + '@esbuild/win32-ia32@0.25.10': 1391 + optional: true 1392 + 1393 + '@esbuild/win32-x64@0.25.10': 1394 + optional: true 1395 + 836 1396 '@eslint-community/eslint-utils@4.9.0(eslint@9.29.0(jiti@2.6.1))': 837 1397 dependencies: 838 1398 eslint: 9.29.0(jiti@2.6.1) ··· 973 1533 974 1534 '@rolldown/pluginutils@1.0.0-beta.11-commit.f051675': {} 975 1535 1536 + '@rollup/rollup-android-arm-eabi@4.52.4': 1537 + optional: true 1538 + 1539 + '@rollup/rollup-android-arm64@4.52.4': 1540 + optional: true 1541 + 1542 + '@rollup/rollup-darwin-arm64@4.52.4': 1543 + optional: true 1544 + 1545 + '@rollup/rollup-darwin-x64@4.52.4': 1546 + optional: true 1547 + 1548 + '@rollup/rollup-freebsd-arm64@4.52.4': 1549 + optional: true 1550 + 1551 + '@rollup/rollup-freebsd-x64@4.52.4': 1552 + optional: true 1553 + 1554 + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': 1555 + optional: true 1556 + 1557 + '@rollup/rollup-linux-arm-musleabihf@4.52.4': 1558 + optional: true 1559 + 1560 + '@rollup/rollup-linux-arm64-gnu@4.52.4': 1561 + optional: true 1562 + 1563 + '@rollup/rollup-linux-arm64-musl@4.52.4': 1564 + optional: true 1565 + 1566 + '@rollup/rollup-linux-loong64-gnu@4.52.4': 1567 + optional: true 1568 + 1569 + '@rollup/rollup-linux-ppc64-gnu@4.52.4': 1570 + optional: true 1571 + 1572 + '@rollup/rollup-linux-riscv64-gnu@4.52.4': 1573 + optional: true 1574 + 1575 + '@rollup/rollup-linux-riscv64-musl@4.52.4': 1576 + optional: true 1577 + 1578 + '@rollup/rollup-linux-s390x-gnu@4.52.4': 1579 + optional: true 1580 + 1581 + '@rollup/rollup-linux-x64-gnu@4.52.4': 1582 + optional: true 1583 + 1584 + '@rollup/rollup-linux-x64-musl@4.52.4': 1585 + optional: true 1586 + 1587 + '@rollup/rollup-openharmony-arm64@4.52.4': 1588 + optional: true 1589 + 1590 + '@rollup/rollup-win32-arm64-msvc@4.52.4': 1591 + optional: true 1592 + 1593 + '@rollup/rollup-win32-ia32-msvc@4.52.4': 1594 + optional: true 1595 + 1596 + '@rollup/rollup-win32-x64-gnu@4.52.4': 1597 + optional: true 1598 + 1599 + '@rollup/rollup-win32-x64-msvc@4.52.4': 1600 + optional: true 1601 + 976 1602 '@tybys/wasm-util@0.10.1': 977 1603 dependencies: 978 1604 tslib: 2.8.1 979 1605 optional: true 1606 + 1607 + '@types/chai@5.2.2': 1608 + dependencies: 1609 + '@types/deep-eql': 4.0.2 1610 + 1611 + '@types/deep-eql@4.0.2': {} 980 1612 981 1613 '@types/estree@1.0.8': {} 982 1614 ··· 1078 1710 '@typescript-eslint/types': 8.35.0 1079 1711 eslint-visitor-keys: 4.2.1 1080 1712 1713 + '@vitest/expect@3.2.4': 1714 + dependencies: 1715 + '@types/chai': 5.2.2 1716 + '@vitest/spy': 3.2.4 1717 + '@vitest/utils': 3.2.4 1718 + chai: 5.3.3 1719 + tinyrainbow: 2.0.0 1720 + 1721 + '@vitest/mocker@3.2.4(vite@7.1.9(@types/node@24.0.4)(jiti@2.6.1))': 1722 + dependencies: 1723 + '@vitest/spy': 3.2.4 1724 + estree-walker: 3.0.3 1725 + magic-string: 0.30.19 1726 + optionalDependencies: 1727 + vite: 7.1.9(@types/node@24.0.4)(jiti@2.6.1) 1728 + 1729 + '@vitest/pretty-format@3.2.4': 1730 + dependencies: 1731 + tinyrainbow: 2.0.0 1732 + 1733 + '@vitest/runner@3.2.4': 1734 + dependencies: 1735 + '@vitest/utils': 3.2.4 1736 + pathe: 2.0.3 1737 + strip-literal: 3.1.0 1738 + 1739 + '@vitest/snapshot@3.2.4': 1740 + dependencies: 1741 + '@vitest/pretty-format': 3.2.4 1742 + magic-string: 0.30.19 1743 + pathe: 2.0.3 1744 + 1745 + '@vitest/spy@3.2.4': 1746 + dependencies: 1747 + tinyspy: 4.0.4 1748 + 1749 + '@vitest/utils@3.2.4': 1750 + dependencies: 1751 + '@vitest/pretty-format': 3.2.4 1752 + loupe: 3.2.1 1753 + tinyrainbow: 2.0.0 1754 + 1081 1755 acorn-jsx@5.3.2(acorn@8.15.0): 1082 1756 dependencies: 1083 1757 acorn: 8.15.0 ··· 1098 1772 ansis@4.2.0: {} 1099 1773 1100 1774 argparse@2.0.1: {} 1775 + 1776 + assertion-error@2.0.1: {} 1101 1777 1102 1778 ast-kit@2.1.3: 1103 1779 dependencies: ··· 1125 1801 1126 1802 callsites@3.1.0: {} 1127 1803 1804 + chai@5.3.3: 1805 + dependencies: 1806 + assertion-error: 2.0.1 1807 + check-error: 2.1.1 1808 + deep-eql: 5.0.2 1809 + loupe: 3.2.1 1810 + pathval: 2.0.1 1811 + 1128 1812 chalk@4.1.2: 1129 1813 dependencies: 1130 1814 ansi-styles: 4.3.0 1131 1815 supports-color: 7.2.0 1816 + 1817 + check-error@2.1.1: {} 1132 1818 1133 1819 chokidar@4.0.3: 1134 1820 dependencies: ··· 1152 1838 dependencies: 1153 1839 ms: 2.1.3 1154 1840 1841 + deep-eql@5.0.2: {} 1842 + 1155 1843 deep-is@0.1.4: {} 1156 1844 1157 1845 defu@6.1.4: {} ··· 1162 1850 1163 1851 empathic@1.1.0: {} 1164 1852 1853 + es-module-lexer@1.7.0: {} 1854 + 1855 + esbuild@0.25.10: 1856 + optionalDependencies: 1857 + '@esbuild/aix-ppc64': 0.25.10 1858 + '@esbuild/android-arm': 0.25.10 1859 + '@esbuild/android-arm64': 0.25.10 1860 + '@esbuild/android-x64': 0.25.10 1861 + '@esbuild/darwin-arm64': 0.25.10 1862 + '@esbuild/darwin-x64': 0.25.10 1863 + '@esbuild/freebsd-arm64': 0.25.10 1864 + '@esbuild/freebsd-x64': 0.25.10 1865 + '@esbuild/linux-arm': 0.25.10 1866 + '@esbuild/linux-arm64': 0.25.10 1867 + '@esbuild/linux-ia32': 0.25.10 1868 + '@esbuild/linux-loong64': 0.25.10 1869 + '@esbuild/linux-mips64el': 0.25.10 1870 + '@esbuild/linux-ppc64': 0.25.10 1871 + '@esbuild/linux-riscv64': 0.25.10 1872 + '@esbuild/linux-s390x': 0.25.10 1873 + '@esbuild/linux-x64': 0.25.10 1874 + '@esbuild/netbsd-arm64': 0.25.10 1875 + '@esbuild/netbsd-x64': 0.25.10 1876 + '@esbuild/openbsd-arm64': 0.25.10 1877 + '@esbuild/openbsd-x64': 0.25.10 1878 + '@esbuild/openharmony-arm64': 0.25.10 1879 + '@esbuild/sunos-x64': 0.25.10 1880 + '@esbuild/win32-arm64': 0.25.10 1881 + '@esbuild/win32-ia32': 0.25.10 1882 + '@esbuild/win32-x64': 0.25.10 1883 + 1165 1884 escape-string-regexp@4.0.0: {} 1166 1885 1167 1886 eslint-scope@8.4.0: ··· 1231 1950 1232 1951 estraverse@5.3.0: {} 1233 1952 1953 + estree-walker@3.0.3: 1954 + dependencies: 1955 + '@types/estree': 1.0.8 1956 + 1234 1957 esutils@2.0.3: {} 1958 + 1959 + expect-type@1.2.2: {} 1235 1960 1236 1961 fast-deep-equal@3.1.3: {} 1237 1962 ··· 1274 1999 keyv: 4.5.4 1275 2000 1276 2001 flatted@3.3.3: {} 2002 + 2003 + fsevents@2.3.3: 2004 + optional: true 1277 2005 1278 2006 get-tsconfig@4.12.0: 1279 2007 dependencies: ··· 1318 2046 1319 2047 jiti@2.6.1: {} 1320 2048 2049 + js-tokens@9.0.1: {} 2050 + 1321 2051 js-yaml@4.1.0: 1322 2052 dependencies: 1323 2053 argparse: 2.0.1 ··· 1345 2075 1346 2076 lodash.merge@4.6.2: {} 1347 2077 2078 + loupe@3.2.1: {} 2079 + 2080 + magic-string@0.30.19: 2081 + dependencies: 2082 + '@jridgewell/sourcemap-codec': 1.5.5 2083 + 1348 2084 merge2@1.4.1: {} 1349 2085 1350 2086 micromatch@4.0.8: ··· 1361 2097 brace-expansion: 2.0.2 1362 2098 1363 2099 ms@2.1.3: {} 2100 + 2101 + nanoid@3.3.11: {} 1364 2102 1365 2103 natural-compare@1.4.0: {} 1366 2104 ··· 1390 2128 path-key@3.1.1: {} 1391 2129 1392 2130 pathe@2.0.3: {} 2131 + 2132 + pathval@2.0.1: {} 2133 + 2134 + picocolors@1.1.1: {} 1393 2135 1394 2136 picomatch@2.3.1: {} 1395 2137 1396 2138 picomatch@4.0.3: {} 1397 2139 2140 + postcss@8.5.6: 2141 + dependencies: 2142 + nanoid: 3.3.11 2143 + picocolors: 1.1.1 2144 + source-map-js: 1.2.1 2145 + 1398 2146 prelude-ls@1.2.1: {} 1399 2147 1400 2148 prettier@3.6.1: {} ··· 1450 2198 '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.11-commit.f051675 1451 2199 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.11-commit.f051675 1452 2200 2201 + rollup@4.52.4: 2202 + dependencies: 2203 + '@types/estree': 1.0.8 2204 + optionalDependencies: 2205 + '@rollup/rollup-android-arm-eabi': 4.52.4 2206 + '@rollup/rollup-android-arm64': 4.52.4 2207 + '@rollup/rollup-darwin-arm64': 4.52.4 2208 + '@rollup/rollup-darwin-x64': 4.52.4 2209 + '@rollup/rollup-freebsd-arm64': 4.52.4 2210 + '@rollup/rollup-freebsd-x64': 4.52.4 2211 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.4 2212 + '@rollup/rollup-linux-arm-musleabihf': 4.52.4 2213 + '@rollup/rollup-linux-arm64-gnu': 4.52.4 2214 + '@rollup/rollup-linux-arm64-musl': 4.52.4 2215 + '@rollup/rollup-linux-loong64-gnu': 4.52.4 2216 + '@rollup/rollup-linux-ppc64-gnu': 4.52.4 2217 + '@rollup/rollup-linux-riscv64-gnu': 4.52.4 2218 + '@rollup/rollup-linux-riscv64-musl': 4.52.4 2219 + '@rollup/rollup-linux-s390x-gnu': 4.52.4 2220 + '@rollup/rollup-linux-x64-gnu': 4.52.4 2221 + '@rollup/rollup-linux-x64-musl': 4.52.4 2222 + '@rollup/rollup-openharmony-arm64': 4.52.4 2223 + '@rollup/rollup-win32-arm64-msvc': 4.52.4 2224 + '@rollup/rollup-win32-ia32-msvc': 4.52.4 2225 + '@rollup/rollup-win32-x64-gnu': 4.52.4 2226 + '@rollup/rollup-win32-x64-msvc': 4.52.4 2227 + fsevents: 2.3.3 2228 + 1453 2229 run-parallel@1.2.0: 1454 2230 dependencies: 1455 2231 queue-microtask: 1.2.3 ··· 1462 2238 1463 2239 shebang-regex@3.0.0: {} 1464 2240 2241 + siginfo@2.0.0: {} 2242 + 2243 + source-map-js@1.2.1: {} 2244 + 2245 + stackback@0.0.2: {} 2246 + 2247 + std-env@3.9.0: {} 2248 + 1465 2249 strip-json-comments@3.1.1: {} 1466 2250 2251 + strip-literal@3.1.0: 2252 + dependencies: 2253 + js-tokens: 9.0.1 2254 + 1467 2255 supports-color@7.2.0: 1468 2256 dependencies: 1469 2257 has-flag: 4.0.0 1470 2258 2259 + tinybench@2.9.0: {} 2260 + 2261 + tinyexec@0.3.2: {} 2262 + 1471 2263 tinyexec@1.0.1: {} 1472 2264 1473 2265 tinyglobby@0.2.15: ··· 1475 2267 fdir: 6.5.0(picomatch@4.0.3) 1476 2268 picomatch: 4.0.3 1477 2269 2270 + tinypool@1.1.1: {} 2271 + 2272 + tinyrainbow@2.0.0: {} 2273 + 2274 + tinyspy@4.0.4: {} 2275 + 1478 2276 to-regex-range@5.0.1: 1479 2277 dependencies: 1480 2278 is-number: 7.0.0 ··· 1538 2336 dependencies: 1539 2337 punycode: 2.3.1 1540 2338 2339 + vite-node@3.2.4(@types/node@24.0.4)(jiti@2.6.1): 2340 + dependencies: 2341 + cac: 6.7.14 2342 + debug: 4.4.3 2343 + es-module-lexer: 1.7.0 2344 + pathe: 2.0.3 2345 + vite: 7.1.9(@types/node@24.0.4)(jiti@2.6.1) 2346 + transitivePeerDependencies: 2347 + - '@types/node' 2348 + - jiti 2349 + - less 2350 + - lightningcss 2351 + - sass 2352 + - sass-embedded 2353 + - stylus 2354 + - sugarss 2355 + - supports-color 2356 + - terser 2357 + - tsx 2358 + - yaml 2359 + 2360 + vite@7.1.9(@types/node@24.0.4)(jiti@2.6.1): 2361 + dependencies: 2362 + esbuild: 0.25.10 2363 + fdir: 6.5.0(picomatch@4.0.3) 2364 + picomatch: 4.0.3 2365 + postcss: 8.5.6 2366 + rollup: 4.52.4 2367 + tinyglobby: 0.2.15 2368 + optionalDependencies: 2369 + '@types/node': 24.0.4 2370 + fsevents: 2.3.3 2371 + jiti: 2.6.1 2372 + 2373 + vitest@3.2.4(@types/node@24.0.4)(jiti@2.6.1): 2374 + dependencies: 2375 + '@types/chai': 5.2.2 2376 + '@vitest/expect': 3.2.4 2377 + '@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@24.0.4)(jiti@2.6.1)) 2378 + '@vitest/pretty-format': 3.2.4 2379 + '@vitest/runner': 3.2.4 2380 + '@vitest/snapshot': 3.2.4 2381 + '@vitest/spy': 3.2.4 2382 + '@vitest/utils': 3.2.4 2383 + chai: 5.3.3 2384 + debug: 4.4.3 2385 + expect-type: 1.2.2 2386 + magic-string: 0.30.19 2387 + pathe: 2.0.3 2388 + picomatch: 4.0.3 2389 + std-env: 3.9.0 2390 + tinybench: 2.9.0 2391 + tinyexec: 0.3.2 2392 + tinyglobby: 0.2.15 2393 + tinypool: 1.1.1 2394 + tinyrainbow: 2.0.0 2395 + vite: 7.1.9(@types/node@24.0.4)(jiti@2.6.1) 2396 + vite-node: 3.2.4(@types/node@24.0.4)(jiti@2.6.1) 2397 + why-is-node-running: 2.3.0 2398 + optionalDependencies: 2399 + '@types/node': 24.0.4 2400 + transitivePeerDependencies: 2401 + - jiti 2402 + - less 2403 + - lightningcss 2404 + - msw 2405 + - sass 2406 + - sass-embedded 2407 + - stylus 2408 + - sugarss 2409 + - supports-color 2410 + - terser 2411 + - tsx 2412 + - yaml 2413 + 1541 2414 which@2.0.2: 1542 2415 dependencies: 1543 2416 isexe: 2.0.0 2417 + 2418 + why-is-node-running@2.3.0: 2419 + dependencies: 2420 + siginfo: 2.0.0 2421 + stackback: 0.0.2 1544 2422 1545 2423 word-wrap@1.2.5: {} 1546 2424
+1 -1
src/infer.ts
··· 94 94 [K in keyof T]: T[K]; 95 95 } & {}; 96 96 97 - export type InferDefs<T extends Record<string, unknown>> = Prettify<{ 97 + type InferDefs<T extends Record<string, unknown>> = Prettify<{ 98 98 -readonly [K in keyof T]: InferType<T[K]>; 99 99 }>; 100 100
-3
src/test.ts
··· 1 - import type schema from "../samples/demo.json"; 2 - import type { InferNS } from "./infer.ts"; 3 - export type Schema = InferNS<typeof schema>;
+2 -3
src/tests/base-case.test.ts
··· 1 - import { strict as assert } from "node:assert"; 2 - import { test } from "node:test"; 1 + import { expect, test } from "vitest"; 3 2 import { lx } from "../lib.ts"; 4 3 5 4 test("app.bsky.actor.profile", () => { ··· 13 12 }), 14 13 }); 15 14 16 - assert.deepEqual(profileNamespace, { 15 + expect(profileNamespace).toEqual({ 17 16 lexicon: 1, 18 17 id: "app.bsky.actor.profile", 19 18 defs: {
+37 -38
src/tests/bsky-actor.test.ts
··· 1 - import { strict as assert } from "node:assert"; 2 - import { test } from "node:test"; 1 + import { expect, test } from "vitest"; 3 2 import { lx } from "../lib.ts"; 4 3 5 4 test("app.bsky.actor.defs - profileViewBasic", () => { ··· 17 16 status: lx.ref("#statusView"), 18 17 }); 19 18 20 - assert.deepEqual(profileViewBasic, { 19 + expect(profileViewBasic).toEqual({ 21 20 type: "object", 22 21 properties: { 23 22 did: { type: "string", required: true, format: "did" }, ··· 56 55 status: lx.ref("#statusView"), 57 56 }); 58 57 59 - assert.deepEqual(profileView, { 58 + expect(profileView).toEqual({ 60 59 type: "object", 61 60 properties: { 62 61 did: { type: "string", required: true, format: "did" }, ··· 104 103 status: lx.ref("#statusView"), 105 104 }); 106 105 107 - assert.deepEqual(profileViewDetailed, { 106 + expect(profileViewDetailed).toEqual({ 108 107 type: "object", 109 108 properties: { 110 109 did: { type: "string", required: true, format: "did" }, ··· 148 147 activitySubscription: lx.ref("#profileAssociatedActivitySubscription"), 149 148 }); 150 149 151 - assert.deepEqual(profileAssociated, { 150 + expect(profileAssociated).toEqual({ 152 151 type: "object", 153 152 properties: { 154 153 lists: { type: "integer" }, ··· 172 171 }), 173 172 }); 174 173 175 - assert.deepEqual(profileAssociatedChat, { 174 + expect(profileAssociatedChat).toEqual({ 176 175 type: "object", 177 176 properties: { 178 177 allowIncoming: { ··· 193 192 }), 194 193 }); 195 194 196 - assert.deepEqual(profileAssociatedActivitySubscription, { 195 + expect(profileAssociatedActivitySubscription).toEqual({ 197 196 type: "object", 198 197 properties: { 199 198 allowSubscriptions: { ··· 221 220 ), 222 221 }); 223 222 224 - assert.deepEqual(viewerState, { 223 + expect(viewerState).toEqual({ 225 224 type: "object", 226 225 properties: { 227 226 muted: { type: "boolean" }, ··· 250 249 }), 251 250 }); 252 251 253 - assert.deepEqual(knownFollowers, { 252 + expect(knownFollowers).toEqual({ 254 253 type: "object", 255 254 properties: { 256 255 count: { type: "integer", required: true }, ··· 279 278 }), 280 279 }); 281 280 282 - assert.deepEqual(verificationState, { 281 + expect(verificationState).toEqual({ 283 282 type: "object", 284 283 properties: { 285 284 verifications: { ··· 310 309 createdAt: lx.string({ required: true, format: "datetime" }), 311 310 }); 312 311 313 - assert.deepEqual(verificationView, { 312 + expect(verificationView).toEqual({ 314 313 type: "object", 315 314 properties: { 316 315 issuer: { type: "string", required: true, format: "did" }, ··· 342 341 ]), 343 342 ); 344 343 345 - assert.deepEqual(preferences, { 344 + expect(preferences).toEqual({ 346 345 type: "array", 347 346 items: { 348 347 type: "union", ··· 371 370 enabled: lx.boolean({ required: true, default: false }), 372 371 }); 373 372 374 - assert.deepEqual(adultContentPref, { 373 + expect(adultContentPref).toEqual({ 375 374 type: "object", 376 375 properties: { 377 376 enabled: { type: "boolean", required: true, default: false }, ··· 390 389 }), 391 390 }); 392 391 393 - assert.deepEqual(contentLabelPref, { 392 + expect(contentLabelPref).toEqual({ 394 393 type: "object", 395 394 properties: { 396 395 labelerDid: { type: "string", format: "did" }, ··· 416 415 pinned: lx.boolean({ required: true }), 417 416 }); 418 417 419 - assert.deepEqual(savedFeed, { 418 + expect(savedFeed).toEqual({ 420 419 type: "object", 421 420 properties: { 422 421 id: { type: "string", required: true }, ··· 439 438 }), 440 439 }); 441 440 442 - assert.deepEqual(savedFeedsPrefV2, { 441 + expect(savedFeedsPrefV2).toEqual({ 443 442 type: "object", 444 443 properties: { 445 444 items: { ··· 459 458 timelineIndex: lx.integer(), 460 459 }); 461 460 462 - assert.deepEqual(savedFeedsPref, { 461 + expect(savedFeedsPref).toEqual({ 463 462 type: "object", 464 463 properties: { 465 464 pinned: { ··· 483 482 birthDate: lx.string({ format: "datetime" }), 484 483 }); 485 484 486 - assert.deepEqual(personalDetailsPref, { 485 + expect(personalDetailsPref).toEqual({ 487 486 type: "object", 488 487 properties: { 489 488 birthDate: { type: "string", format: "datetime" }, ··· 501 500 hideQuotePosts: lx.boolean(), 502 501 }); 503 502 504 - assert.deepEqual(feedViewPref, { 503 + expect(feedViewPref).toEqual({ 505 504 type: "object", 506 505 properties: { 507 506 feed: { type: "string", required: true }, ··· 523 522 prioritizeFollowedUsers: lx.boolean(), 524 523 }); 525 524 526 - assert.deepEqual(threadViewPref, { 525 + expect(threadViewPref).toEqual({ 527 526 type: "object", 528 527 properties: { 529 528 sort: { ··· 543 542 }), 544 543 }); 545 544 546 - assert.deepEqual(interestsPref, { 545 + expect(interestsPref).toEqual({ 547 546 type: "object", 548 547 properties: { 549 548 tags: { ··· 564 563 maxGraphemes: 64, 565 564 }); 566 565 567 - assert.deepEqual(mutedWordTarget, { 566 + expect(mutedWordTarget).toEqual({ 568 567 type: "string", 569 568 knownValues: ["content", "tag"], 570 569 maxLength: 640, ··· 586 585 expiresAt: lx.string({ format: "datetime" }), 587 586 }); 588 587 589 - assert.deepEqual(mutedWord, { 588 + expect(mutedWord).toEqual({ 590 589 type: "object", 591 590 properties: { 592 591 id: { type: "string" }, ··· 619 618 }), 620 619 }); 621 620 622 - assert.deepEqual(mutedWordsPref, { 621 + expect(mutedWordsPref).toEqual({ 623 622 type: "object", 624 623 properties: { 625 624 items: { ··· 637 636 items: lx.array(lx.string({ format: "at-uri" }), { required: true }), 638 637 }); 639 638 640 - assert.deepEqual(hiddenPostsPref, { 639 + expect(hiddenPostsPref).toEqual({ 641 640 type: "object", 642 641 properties: { 643 642 items: { ··· 655 654 labelers: lx.array(lx.ref("#labelerPrefItem"), { required: true }), 656 655 }); 657 656 658 - assert.deepEqual(labelersPref, { 657 + expect(labelersPref).toEqual({ 659 658 type: "object", 660 659 properties: { 661 660 labelers: { ··· 673 672 did: lx.string({ required: true, format: "did" }), 674 673 }); 675 674 676 - assert.deepEqual(labelerPrefItem, { 675 + expect(labelerPrefItem).toEqual({ 677 676 type: "object", 678 677 properties: { 679 678 did: { type: "string", required: true, format: "did" }, ··· 689 688 nuxs: lx.array(lx.ref("app.bsky.actor.defs#nux"), { maxLength: 100 }), 690 689 }); 691 690 692 - assert.deepEqual(bskyAppStatePref, { 691 + expect(bskyAppStatePref).toEqual({ 693 692 type: "object", 694 693 properties: { 695 694 activeProgressGuide: { type: "ref", ref: "#bskyAppProgressGuide" }, ··· 712 711 guide: lx.string({ required: true, maxLength: 100 }), 713 712 }); 714 713 715 - assert.deepEqual(bskyAppProgressGuide, { 714 + expect(bskyAppProgressGuide).toEqual({ 716 715 type: "object", 717 716 properties: { 718 717 guide: { type: "string", required: true, maxLength: 100 }, ··· 729 728 expiresAt: lx.string({ format: "datetime" }), 730 729 }); 731 730 732 - assert.deepEqual(nux, { 731 + expect(nux).toEqual({ 733 732 type: "object", 734 733 properties: { 735 734 id: { type: "string", required: true, maxLength: 100 }, ··· 746 745 hideBadges: lx.boolean({ default: false }), 747 746 }); 748 747 749 - assert.deepEqual(verificationPrefs, { 748 + expect(verificationPrefs).toEqual({ 750 749 type: "object", 751 750 properties: { 752 751 hideBadges: { type: "boolean", default: false }, ··· 771 770 ), 772 771 }); 773 772 774 - assert.deepEqual(postInteractionSettingsPref, { 773 + expect(postInteractionSettingsPref).toEqual({ 775 774 type: "object", 776 775 properties: { 777 776 threadgateAllowRules: { ··· 811 810 isActive: lx.boolean(), 812 811 }); 813 812 814 - assert.deepEqual(statusView, { 813 + expect(statusView).toEqual({ 815 814 type: "object", 816 815 properties: { 817 816 status: { ··· 861 860 }), 862 861 }); 863 862 864 - assert.deepEqual(actorDefs.lexicon, 1); 865 - assert.deepEqual(actorDefs.id, "app.bsky.actor.defs"); 866 - assert.deepEqual(actorDefs.defs.profileViewBasic.type, "object"); 867 - assert.deepEqual(actorDefs.defs.viewerState.type, "object"); 863 + expect(actorDefs.lexicon).toEqual(1); 864 + expect(actorDefs.id).toEqual("app.bsky.actor.defs"); 865 + expect(actorDefs.defs.profileViewBasic.type).toEqual("object"); 866 + expect(actorDefs.defs.viewerState.type).toEqual("object"); 868 867 });
+39 -40
src/tests/bsky-feed.test.ts
··· 1 - import { strict as assert } from "node:assert"; 2 - import { test } from "node:test"; 1 + import { expect, test } from "vitest"; 3 2 import { lx } from "../lib.ts"; 4 3 5 4 test("app.bsky.feed.defs - postView", () => { ··· 26 25 threadgate: lx.ref("#threadgateView"), 27 26 }); 28 27 29 - assert.deepEqual(postView, { 28 + expect(postView).toEqual({ 30 29 type: "object", 31 30 properties: { 32 31 uri: { type: "string", required: true, format: "at-uri" }, ··· 75 74 pinned: lx.boolean(), 76 75 }); 77 76 78 - assert.deepEqual(viewerState, { 77 + expect(viewerState).toEqual({ 79 78 type: "object", 80 79 properties: { 81 80 repost: { type: "string", format: "at-uri" }, ··· 94 93 rootAuthorLike: lx.string({ format: "at-uri" }), 95 94 }); 96 95 97 - assert.deepEqual(threadContext, { 96 + expect(threadContext).toEqual({ 98 97 type: "object", 99 98 properties: { 100 99 rootAuthorLike: { type: "string", format: "at-uri" }, ··· 111 110 reqId: lx.string({ maxLength: 100 }), 112 111 }); 113 112 114 - assert.deepEqual(feedViewPost, { 113 + expect(feedViewPost).toEqual({ 115 114 type: "object", 116 115 properties: { 117 116 post: { type: "ref", ref: "#postView", required: true }, ··· 138 137 grandparentAuthor: lx.ref("app.bsky.actor.defs#profileViewBasic"), 139 138 }); 140 139 141 - assert.deepEqual(replyRef, { 140 + expect(replyRef).toEqual({ 142 141 type: "object", 143 142 properties: { 144 143 root: { ··· 168 167 indexedAt: lx.string({ required: true, format: "datetime" }), 169 168 }); 170 169 171 - assert.deepEqual(reasonRepost, { 170 + expect(reasonRepost).toEqual({ 172 171 type: "object", 173 172 properties: { 174 173 by: { ··· 187 186 test("app.bsky.feed.defs - reasonPin", () => { 188 187 const reasonPin = lx.object({}); 189 188 190 - assert.deepEqual(reasonPin, { 189 + expect(reasonPin).toEqual({ 191 190 type: "object", 192 191 properties: {}, 193 192 }); ··· 203 202 threadContext: lx.ref("#threadContext"), 204 203 }); 205 204 206 - assert.deepEqual(threadViewPost, { 205 + expect(threadViewPost).toEqual({ 207 206 type: "object", 208 207 properties: { 209 208 post: { type: "ref", ref: "#postView", required: true }, ··· 230 229 notFound: lx.boolean({ required: true, const: true }), 231 230 }); 232 231 233 - assert.deepEqual(notFoundPost, { 232 + expect(notFoundPost).toEqual({ 234 233 type: "object", 235 234 properties: { 236 235 uri: { type: "string", required: true, format: "at-uri" }, ··· 247 246 author: lx.ref("#blockedAuthor", { required: true }), 248 247 }); 249 248 250 - assert.deepEqual(blockedPost, { 249 + expect(blockedPost).toEqual({ 251 250 type: "object", 252 251 properties: { 253 252 uri: { type: "string", required: true, format: "at-uri" }, ··· 264 263 viewer: lx.ref("app.bsky.actor.defs#viewerState"), 265 264 }); 266 265 267 - assert.deepEqual(blockedAuthor, { 266 + expect(blockedAuthor).toEqual({ 268 267 type: "object", 269 268 properties: { 270 269 did: { type: "string", required: true, format: "did" }, ··· 297 296 indexedAt: lx.string({ required: true, format: "datetime" }), 298 297 }); 299 298 300 - assert.deepEqual(generatorView, { 299 + expect(generatorView).toEqual({ 301 300 type: "object", 302 301 properties: { 303 302 uri: { type: "string", required: true, format: "at-uri" }, ··· 340 339 like: lx.string({ format: "at-uri" }), 341 340 }); 342 341 343 - assert.deepEqual(generatorViewerState, { 342 + expect(generatorViewerState).toEqual({ 344 343 type: "object", 345 344 properties: { 346 345 like: { type: "string", format: "at-uri" }, ··· 355 354 feedContext: lx.string({ maxLength: 2000 }), 356 355 }); 357 356 358 - assert.deepEqual(skeletonFeedPost, { 357 + expect(skeletonFeedPost).toEqual({ 359 358 type: "object", 360 359 properties: { 361 360 post: { type: "string", required: true, format: "at-uri" }, ··· 374 373 repost: lx.string({ required: true, format: "at-uri" }), 375 374 }); 376 375 377 - assert.deepEqual(skeletonReasonRepost, { 376 + expect(skeletonReasonRepost).toEqual({ 378 377 type: "object", 379 378 properties: { 380 379 repost: { type: "string", required: true, format: "at-uri" }, ··· 386 385 test("app.bsky.feed.defs - skeletonReasonPin", () => { 387 386 const skeletonReasonPin = lx.object({}); 388 387 389 - assert.deepEqual(skeletonReasonPin, { 388 + expect(skeletonReasonPin).toEqual({ 390 389 type: "object", 391 390 properties: {}, 392 391 }); ··· 400 399 lists: lx.array(lx.ref("app.bsky.graph.defs#listViewBasic")), 401 400 }); 402 401 403 - assert.deepEqual(threadgateView, { 402 + expect(threadgateView).toEqual({ 404 403 type: "object", 405 404 properties: { 406 405 uri: { type: "string", format: "at-uri" }, ··· 437 436 reqId: lx.string({ maxLength: 100 }), 438 437 }); 439 438 440 - assert.deepEqual(interaction, { 439 + expect(interaction).toEqual({ 441 440 type: "object", 442 441 properties: { 443 442 item: { type: "string", format: "at-uri" }, ··· 469 468 "Request that less content like the given feed item be shown in the feed", 470 469 ); 471 470 472 - assert.deepEqual(requestLess, { 471 + expect(requestLess).toEqual({ 473 472 type: "token", 474 473 description: 475 474 "Request that less content like the given feed item be shown in the feed", ··· 481 480 "Request that more content like the given feed item be shown in the feed", 482 481 ); 483 482 484 - assert.deepEqual(requestMore, { 483 + expect(requestMore).toEqual({ 485 484 type: "token", 486 485 description: 487 486 "Request that more content like the given feed item be shown in the feed", ··· 491 490 test("app.bsky.feed.defs - clickthroughItem token", () => { 492 491 const clickthroughItem = lx.token("User clicked through to the feed item"); 493 492 494 - assert.deepEqual(clickthroughItem, { 493 + expect(clickthroughItem).toEqual({ 495 494 type: "token", 496 495 description: "User clicked through to the feed item", 497 496 }); ··· 502 501 "User clicked through to the author of the feed item", 503 502 ); 504 503 505 - assert.deepEqual(clickthroughAuthor, { 504 + expect(clickthroughAuthor).toEqual({ 506 505 type: "token", 507 506 description: "User clicked through to the author of the feed item", 508 507 }); ··· 513 512 "User clicked through to the reposter of the feed item", 514 513 ); 515 514 516 - assert.deepEqual(clickthroughReposter, { 515 + expect(clickthroughReposter).toEqual({ 517 516 type: "token", 518 517 description: "User clicked through to the reposter of the feed item", 519 518 }); ··· 524 523 "User clicked through to the embedded content of the feed item", 525 524 ); 526 525 527 - assert.deepEqual(clickthroughEmbed, { 526 + expect(clickthroughEmbed).toEqual({ 528 527 type: "token", 529 528 description: 530 529 "User clicked through to the embedded content of the feed item", ··· 536 535 "Declares the feed generator returns any types of posts.", 537 536 ); 538 537 539 - assert.deepEqual(contentModeUnspecified, { 538 + expect(contentModeUnspecified).toEqual({ 540 539 type: "token", 541 540 description: "Declares the feed generator returns any types of posts.", 542 541 }); ··· 547 546 "Declares the feed generator returns posts containing app.bsky.embed.video embeds.", 548 547 ); 549 548 550 - assert.deepEqual(contentModeVideo, { 549 + expect(contentModeVideo).toEqual({ 551 550 type: "token", 552 551 description: 553 552 "Declares the feed generator returns posts containing app.bsky.embed.video embeds.", ··· 557 556 test("app.bsky.feed.defs - interactionSeen token", () => { 558 557 const interactionSeen = lx.token("Feed item was seen by user"); 559 558 560 - assert.deepEqual(interactionSeen, { 559 + expect(interactionSeen).toEqual({ 561 560 type: "token", 562 561 description: "Feed item was seen by user", 563 562 }); ··· 566 565 test("app.bsky.feed.defs - interactionLike token", () => { 567 566 const interactionLike = lx.token("User liked the feed item"); 568 567 569 - assert.deepEqual(interactionLike, { 568 + expect(interactionLike).toEqual({ 570 569 type: "token", 571 570 description: "User liked the feed item", 572 571 }); ··· 575 574 test("app.bsky.feed.defs - interactionRepost token", () => { 576 575 const interactionRepost = lx.token("User reposted the feed item"); 577 576 578 - assert.deepEqual(interactionRepost, { 577 + expect(interactionRepost).toEqual({ 579 578 type: "token", 580 579 description: "User reposted the feed item", 581 580 }); ··· 584 583 test("app.bsky.feed.defs - interactionReply token", () => { 585 584 const interactionReply = lx.token("User replied to the feed item"); 586 585 587 - assert.deepEqual(interactionReply, { 586 + expect(interactionReply).toEqual({ 588 587 type: "token", 589 588 description: "User replied to the feed item", 590 589 }); ··· 593 592 test("app.bsky.feed.defs - interactionQuote token", () => { 594 593 const interactionQuote = lx.token("User quoted the feed item"); 595 594 596 - assert.deepEqual(interactionQuote, { 595 + expect(interactionQuote).toEqual({ 597 596 type: "token", 598 597 description: "User quoted the feed item", 599 598 }); ··· 602 601 test("app.bsky.feed.defs - interactionShare token", () => { 603 602 const interactionShare = lx.token("User shared the feed item"); 604 603 605 - assert.deepEqual(interactionShare, { 604 + expect(interactionShare).toEqual({ 606 605 type: "token", 607 606 description: "User shared the feed item", 608 607 }); ··· 673 672 interactionShare: lx.token("User shared the feed item"), 674 673 }); 675 674 676 - assert.deepEqual(feedDefs.lexicon, 1); 677 - assert.deepEqual(feedDefs.id, "app.bsky.feed.defs"); 678 - assert.deepEqual(feedDefs.defs.postView.type, "object"); 679 - assert.deepEqual(feedDefs.defs.viewerState.type, "object"); 680 - assert.deepEqual(feedDefs.defs.requestLess.type, "token"); 681 - assert.deepEqual(feedDefs.defs.contentModeVideo.type, "token"); 675 + expect(feedDefs.lexicon).toEqual(1); 676 + expect(feedDefs.id).toEqual("app.bsky.feed.defs"); 677 + expect(feedDefs.defs.postView.type).toEqual("object"); 678 + expect(feedDefs.defs.viewerState.type).toEqual("object"); 679 + expect(feedDefs.defs.requestLess.type).toEqual("token"); 680 + expect(feedDefs.defs.contentModeVideo.type).toEqual("token"); 682 681 });
+67 -68
src/tests/primitives.test.ts
··· 1 - import { strict as assert } from "node:assert"; 1 + import { expect, test } from "vitest"; 2 2 import { lx } from "../lib.ts"; 3 - import { test } from "node:test"; 4 3 5 4 test("lx.null()", () => { 6 5 const result = lx.null(); 7 - assert.deepEqual(result, { type: "null" }); 6 + expect(result).toEqual({ type: "null" }); 8 7 }); 9 8 10 9 test("lx.boolean()", () => { 11 10 const result = lx.boolean(); 12 - assert.deepEqual(result, { type: "boolean" }); 11 + expect(result).toEqual({ type: "boolean" }); 13 12 }); 14 13 15 14 test("lx.boolean() with default", () => { 16 15 const result = lx.boolean({ default: true }); 17 - assert.deepEqual(result, { type: "boolean", default: true }); 16 + expect(result).toEqual({ type: "boolean", default: true }); 18 17 }); 19 18 20 19 test("lx.boolean() with const", () => { 21 20 const result = lx.boolean({ const: false }); 22 - assert.deepEqual(result, { type: "boolean", const: false }); 21 + expect(result).toEqual({ type: "boolean", const: false }); 23 22 }); 24 23 25 24 test("lx.integer()", () => { 26 25 const result = lx.integer(); 27 - assert.deepEqual(result, { type: "integer" }); 26 + expect(result).toEqual({ type: "integer" }); 28 27 }); 29 28 30 29 test("lx.integer() with minimum", () => { 31 30 const result = lx.integer({ minimum: 0 }); 32 - assert.deepEqual(result, { type: "integer", minimum: 0 }); 31 + expect(result).toEqual({ type: "integer", minimum: 0 }); 33 32 }); 34 33 35 34 test("lx.integer() with maximum", () => { 36 35 const result = lx.integer({ maximum: 100 }); 37 - assert.deepEqual(result, { type: "integer", maximum: 100 }); 36 + expect(result).toEqual({ type: "integer", maximum: 100 }); 38 37 }); 39 38 40 39 test("lx.integer() with minimum and maximum", () => { 41 40 const result = lx.integer({ minimum: 0, maximum: 100 }); 42 - assert.deepEqual(result, { type: "integer", minimum: 0, maximum: 100 }); 41 + expect(result).toEqual({ type: "integer", minimum: 0, maximum: 100 }); 43 42 }); 44 43 45 44 test("lx.integer() with enum", () => { 46 45 const result = lx.integer({ enum: [1, 2, 3, 5, 8, 13] }); 47 - assert.deepEqual(result, { type: "integer", enum: [1, 2, 3, 5, 8, 13] }); 46 + expect(result).toEqual({ type: "integer", enum: [1, 2, 3, 5, 8, 13] }); 48 47 }); 49 48 50 49 test("lx.integer() with default", () => { 51 50 const result = lx.integer({ default: 42 }); 52 - assert.deepEqual(result, { type: "integer", default: 42 }); 51 + expect(result).toEqual({ type: "integer", default: 42 }); 53 52 }); 54 53 55 54 test("lx.integer() with const", () => { 56 55 const result = lx.integer({ const: 7 }); 57 - assert.deepEqual(result, { type: "integer", const: 7 }); 56 + expect(result).toEqual({ type: "integer", const: 7 }); 58 57 }); 59 58 60 59 test("lx.string()", () => { 61 60 const result = lx.string(); 62 - assert.deepEqual(result, { type: "string" }); 61 + expect(result).toEqual({ type: "string" }); 63 62 }); 64 63 65 64 test("lx.string() with maxLength", () => { 66 65 const result = lx.string({ maxLength: 64 }); 67 - assert.deepEqual(result, { type: "string", maxLength: 64 }); 66 + expect(result).toEqual({ type: "string", maxLength: 64 }); 68 67 }); 69 68 70 69 test("lx.string() with enum", () => { 71 70 const result = lx.string({ enum: ["light", "dark", "auto"] }); 72 - assert.deepEqual(result, { type: "string", enum: ["light", "dark", "auto"] }); 71 + expect(result).toEqual({ type: "string", enum: ["light", "dark", "auto"] }); 73 72 }); 74 73 75 74 test("lx.unknown()", () => { 76 75 const result = lx.unknown(); 77 - assert.deepEqual(result, { type: "unknown" }); 76 + expect(result).toEqual({ type: "unknown" }); 78 77 }); 79 78 80 79 test("lx.bytes()", () => { 81 80 const result = lx.bytes(); 82 - assert.deepEqual(result, { type: "bytes" }); 81 + expect(result).toEqual({ type: "bytes" }); 83 82 }); 84 83 85 84 test("lx.bytes() with minLength", () => { 86 85 const result = lx.bytes({ minLength: 1 }); 87 - assert.deepEqual(result, { type: "bytes", minLength: 1 }); 86 + expect(result).toEqual({ type: "bytes", minLength: 1 }); 88 87 }); 89 88 90 89 test("lx.bytes() with maxLength", () => { 91 90 const result = lx.bytes({ maxLength: 1024 }); 92 - assert.deepEqual(result, { type: "bytes", maxLength: 1024 }); 91 + expect(result).toEqual({ type: "bytes", maxLength: 1024 }); 93 92 }); 94 93 95 94 test("lx.bytes() with minLength and maxLength", () => { 96 95 const result = lx.bytes({ minLength: 1, maxLength: 1024 }); 97 - assert.deepEqual(result, { type: "bytes", minLength: 1, maxLength: 1024 }); 96 + expect(result).toEqual({ type: "bytes", minLength: 1, maxLength: 1024 }); 98 97 }); 99 98 100 99 test("lx.cidLink()", () => { 101 100 const result = lx.cidLink( 102 101 "bafyreidfayvfuwqa7qlnopdjiqrxzs6blmoeu4rujcjtnci5beludirz2a", 103 102 ); 104 - assert.deepEqual(result, { 103 + expect(result).toEqual({ 105 104 type: "cid-link", 106 105 $link: "bafyreidfayvfuwqa7qlnopdjiqrxzs6blmoeu4rujcjtnci5beludirz2a", 107 106 }); ··· 109 108 110 109 test("lx.blob()", () => { 111 110 const result = lx.blob(); 112 - assert.deepEqual(result, { type: "blob" }); 111 + expect(result).toEqual({ type: "blob" }); 113 112 }); 114 113 115 114 test("lx.blob() with accept", () => { 116 115 const result = lx.blob({ accept: ["image/png", "image/jpeg"] }); 117 - assert.deepEqual(result, { 116 + expect(result).toEqual({ 118 117 type: "blob", 119 118 accept: ["image/png", "image/jpeg"], 120 119 }); ··· 122 121 123 122 test("lx.blob() with maxSize", () => { 124 123 const result = lx.blob({ maxSize: 1000000 }); 125 - assert.deepEqual(result, { type: "blob", maxSize: 1000000 }); 124 + expect(result).toEqual({ type: "blob", maxSize: 1000000 }); 126 125 }); 127 126 128 127 test("lx.blob() with accept and maxSize", () => { ··· 130 129 accept: ["image/png", "image/jpeg"], 131 130 maxSize: 5000000, 132 131 }); 133 - assert.deepEqual(result, { 132 + expect(result).toEqual({ 134 133 type: "blob", 135 134 accept: ["image/png", "image/jpeg"], 136 135 maxSize: 5000000, ··· 139 138 140 139 test("lx.array() with string items", () => { 141 140 const result = lx.array(lx.string()); 142 - assert.deepEqual(result, { type: "array", items: { type: "string" } }); 141 + expect(result).toEqual({ type: "array", items: { type: "string" } }); 143 142 }); 144 143 145 144 test("lx.array() with integer items", () => { 146 145 const result = lx.array(lx.integer()); 147 - assert.deepEqual(result, { type: "array", items: { type: "integer" } }); 146 + expect(result).toEqual({ type: "array", items: { type: "integer" } }); 148 147 }); 149 148 150 149 test("lx.array() with minLength", () => { 151 150 const result = lx.array(lx.string(), { minLength: 1 }); 152 - assert.deepEqual(result, { 151 + expect(result).toEqual({ 153 152 type: "array", 154 153 items: { type: "string" }, 155 154 minLength: 1, ··· 158 157 159 158 test("lx.array() with maxLength", () => { 160 159 const result = lx.array(lx.string(), { maxLength: 10 }); 161 - assert.deepEqual(result, { 160 + expect(result).toEqual({ 162 161 type: "array", 163 162 items: { type: "string" }, 164 163 maxLength: 10, ··· 167 166 168 167 test("lx.array() with minLength and maxLength", () => { 169 168 const result = lx.array(lx.string(), { minLength: 1, maxLength: 10 }); 170 - assert.deepEqual(result, { 169 + expect(result).toEqual({ 171 170 type: "array", 172 171 items: { type: "string" }, 173 172 minLength: 1, ··· 177 176 178 177 test("lx.array() with required", () => { 179 178 const result = lx.array(lx.string(), { required: true }); 180 - assert.deepEqual(result, { 179 + expect(result).toEqual({ 181 180 type: "array", 182 181 items: { type: "string" }, 183 182 required: true, ··· 188 187 const result = lx.token( 189 188 "Request that less content like the given feed item be shown in the feed", 190 189 ); 191 - assert.deepEqual(result, { 190 + expect(result).toEqual({ 192 191 type: "token", 193 192 description: 194 193 "Request that less content like the given feed item be shown in the feed", ··· 199 198 const result = lx.token( 200 199 "Declares the feed generator returns posts containing app.bsky.embed.video embeds", 201 200 ); 202 - assert.deepEqual(result, { 201 + expect(result).toEqual({ 203 202 type: "token", 204 203 description: 205 204 "Declares the feed generator returns posts containing app.bsky.embed.video embeds", ··· 208 207 209 208 test("lx.ref() with local definition", () => { 210 209 const result = lx.ref("#profileAssociated"); 211 - assert.deepEqual(result, { 210 + expect(result).toEqual({ 212 211 type: "ref", 213 212 ref: "#profileAssociated", 214 213 }); ··· 216 215 217 216 test("lx.ref() with external schema", () => { 218 217 const result = lx.ref("com.atproto.label.defs#label"); 219 - assert.deepEqual(result, { 218 + expect(result).toEqual({ 220 219 type: "ref", 221 220 ref: "com.atproto.label.defs#label", 222 221 }); ··· 224 223 225 224 test("lx.ref() with required option", () => { 226 225 const result = lx.ref("#profileView", { required: true }); 227 - assert.deepEqual(result, { 226 + expect(result).toEqual({ 228 227 type: "ref", 229 228 ref: "#profileView", 230 229 required: true, ··· 233 232 234 233 test("lx.ref() with nullable option", () => { 235 234 const result = lx.ref("#profileView", { nullable: true }); 236 - assert.deepEqual(result, { 235 + expect(result).toEqual({ 237 236 type: "ref", 238 237 ref: "#profileView", 239 238 nullable: true, ··· 245 244 required: true, 246 245 nullable: true, 247 246 }); 248 - assert.deepEqual(result, { 247 + expect(result).toEqual({ 249 248 type: "ref", 250 249 ref: "app.bsky.actor.defs#profileView", 251 250 required: true, ··· 255 254 256 255 test("lx.union() with local refs", () => { 257 256 const result = lx.union(["#reasonRepost", "#reasonPin"]); 258 - assert.deepEqual(result, { 257 + expect(result).toEqual({ 259 258 type: "union", 260 259 refs: ["#reasonRepost", "#reasonPin"], 261 260 }); ··· 269 268 "app.bsky.embed.record#view", 270 269 "app.bsky.embed.recordWithMedia#view", 271 270 ]); 272 - assert.deepEqual(result, { 271 + expect(result).toEqual({ 273 272 type: "union", 274 273 refs: [ 275 274 "app.bsky.embed.images#view", ··· 285 284 const result = lx.union(["#postView", "#notFoundPost", "#blockedPost"], { 286 285 closed: true, 287 286 }); 288 - assert.deepEqual(result, { 287 + expect(result).toEqual({ 289 288 type: "union", 290 289 refs: ["#postView", "#notFoundPost", "#blockedPost"], 291 290 closed: true, ··· 296 295 const result = lx.union(["#threadViewPost", "#notFoundPost"], { 297 296 closed: false, 298 297 }); 299 - assert.deepEqual(result, { 298 + expect(result).toEqual({ 300 299 type: "union", 301 300 refs: ["#threadViewPost", "#notFoundPost"], 302 301 closed: false, ··· 308 307 q: lx.string(), 309 308 limit: lx.integer(), 310 309 }); 311 - assert.deepEqual(result, { 310 + expect(result).toEqual({ 312 311 type: "params", 313 312 properties: { 314 313 q: { type: "string" }, ··· 322 321 q: lx.string({ required: true }), 323 322 limit: lx.integer(), 324 323 }); 325 - assert.deepEqual(result, { 324 + expect(result).toEqual({ 326 325 type: "params", 327 326 properties: { 328 327 q: { type: "string", required: true }, ··· 338 337 limit: lx.integer({ minimum: 1, maximum: 100, default: 25 }), 339 338 cursor: lx.string(), 340 339 }); 341 - assert.deepEqual(result, { 340 + expect(result).toEqual({ 342 341 type: "params", 343 342 properties: { 344 343 q: { type: "string" }, ··· 353 352 tags: lx.array(lx.string()), 354 353 ids: lx.array(lx.integer()), 355 354 }); 356 - assert.deepEqual(result, { 355 + expect(result).toEqual({ 357 356 type: "params", 358 357 properties: { 359 358 tags: { type: "array", items: { type: "string" } }, ··· 368 367 limit: lx.integer({ minimum: 1, maximum: 100, default: 25 }), 369 368 cursor: lx.string(), 370 369 }); 371 - assert.deepEqual(result, { 370 + expect(result).toEqual({ 372 371 type: "params", 373 372 properties: { 374 373 q: { type: "string", required: true }, ··· 381 380 382 381 test("lx.query() basic", () => { 383 382 const result = lx.query(); 384 - assert.deepEqual(result, { type: "query" }); 383 + expect(result).toEqual({ type: "query" }); 385 384 }); 386 385 387 386 test("lx.query() with description", () => { 388 387 const result = lx.query({ description: "Search for actors" }); 389 - assert.deepEqual(result, { type: "query", description: "Search for actors" }); 388 + expect(result).toEqual({ type: "query", description: "Search for actors" }); 390 389 }); 391 390 392 391 test("lx.query() with parameters", () => { ··· 396 395 limit: lx.integer({ minimum: 1, maximum: 100, default: 25 }), 397 396 }), 398 397 }); 399 - assert.deepEqual(result, { 398 + expect(result).toEqual({ 400 399 type: "query", 401 400 parameters: { 402 401 type: "params", ··· 421 420 }), 422 421 }, 423 422 }); 424 - assert.deepEqual(result, { 423 + expect(result).toEqual({ 425 424 type: "query", 426 425 output: { 427 426 encoding: "application/json", ··· 445 444 const result = lx.query({ 446 445 errors: [{ name: "BadQueryString" }], 447 446 }); 448 - assert.deepEqual(result, { 447 + expect(result).toEqual({ 449 448 type: "query", 450 449 errors: [{ name: "BadQueryString" }], 451 450 }); ··· 472 471 }, 473 472 errors: [{ name: "BadQueryString" }], 474 473 }); 475 - assert.deepEqual(result, { 474 + expect(result).toEqual({ 476 475 type: "query", 477 476 description: "Find posts matching search criteria", 478 477 parameters: { ··· 507 506 508 507 test("lx.procedure() basic", () => { 509 508 const result = lx.procedure(); 510 - assert.deepEqual(result, { type: "procedure" }); 509 + expect(result).toEqual({ type: "procedure" }); 511 510 }); 512 511 513 512 test("lx.procedure() with description", () => { 514 513 const result = lx.procedure({ description: "Create a new post" }); 515 - assert.deepEqual(result, { 514 + expect(result).toEqual({ 516 515 type: "procedure", 517 516 description: "Create a new post", 518 517 }); ··· 524 523 validate: lx.boolean({ default: true }), 525 524 }), 526 525 }); 527 - assert.deepEqual(result, { 526 + expect(result).toEqual({ 528 527 type: "procedure", 529 528 parameters: { 530 529 type: "params", ··· 545 544 }), 546 545 }, 547 546 }); 548 - assert.deepEqual(result, { 547 + expect(result).toEqual({ 549 548 type: "procedure", 550 549 input: { 551 550 encoding: "application/json", ··· 571 570 }), 572 571 }, 573 572 }); 574 - assert.deepEqual(result, { 573 + expect(result).toEqual({ 575 574 type: "procedure", 576 575 output: { 577 576 encoding: "application/json", ··· 594 593 { name: "RateLimitExceeded", description: "Too many requests" }, 595 594 ], 596 595 }); 597 - assert.deepEqual(result, { 596 + expect(result).toEqual({ 598 597 type: "procedure", 599 598 errors: [ 600 599 { name: "InvalidRequest" }, ··· 624 623 }, 625 624 errors: [{ name: "InvalidSwap" }, { name: "InvalidRecord" }], 626 625 }); 627 - assert.deepEqual(result, { 626 + expect(result).toEqual({ 628 627 type: "procedure", 629 628 description: "Create a post", 630 629 input: { ··· 657 656 658 657 test("lx.subscription() basic", () => { 659 658 const result = lx.subscription(); 660 - assert.deepEqual(result, { type: "subscription" }); 659 + expect(result).toEqual({ type: "subscription" }); 661 660 }); 662 661 663 662 test("lx.subscription() with description", () => { 664 663 const result = lx.subscription({ 665 664 description: "Repository event stream", 666 665 }); 667 - assert.deepEqual(result, { 666 + expect(result).toEqual({ 668 667 type: "subscription", 669 668 description: "Repository event stream", 670 669 }); ··· 676 675 cursor: lx.integer(), 677 676 }), 678 677 }); 679 - assert.deepEqual(result, { 678 + expect(result).toEqual({ 680 679 type: "subscription", 681 680 parameters: { 682 681 type: "params", ··· 693 692 schema: lx.union(["#commit", "#identity", "#account"]), 694 693 }, 695 694 }); 696 - assert.deepEqual(result, { 695 + expect(result).toEqual({ 697 696 type: "subscription", 698 697 message: { 699 698 schema: { ··· 711 710 schema: lx.union(["#commit", "#handle", "#migrate"]), 712 711 }, 713 712 }); 714 - assert.deepEqual(result, { 713 + expect(result).toEqual({ 715 714 type: "subscription", 716 715 message: { 717 716 description: "Event message types", ··· 730 729 { name: "ConsumerTooSlow", description: "Consumer is too slow" }, 731 730 ], 732 731 }); 733 - assert.deepEqual(result, { 732 + expect(result).toEqual({ 734 733 type: "subscription", 735 734 errors: [ 736 735 { name: "FutureCursor" }, ··· 759 758 }, 760 759 errors: [{ name: "FutureCursor" }, { name: "ConsumerTooSlow" }], 761 760 }); 762 - assert.deepEqual(result, { 761 + expect(result).toEqual({ 763 762 type: "subscription", 764 763 description: "Repository event stream, aka Firehose endpoint", 765 764 parameters: {
+7
vitest.config.ts
··· 1 + import { defineConfig } from "vitest/config"; 2 + 3 + export default defineConfig({ 4 + test: { 5 + include: ["src/**/*.test.ts"], 6 + }, 7 + });