tangled
alpha
login
or
join now
tylur.dev
/
prototypey
1
fork
atom
prototypey.org - atproto lexicon typescript toolkit - mirror https://github.com/tylersayshi/prototypey
1
fork
atom
overview
issues
pulls
pipelines
swap to vitest
Tyler
5 months ago
0aafa030
7d14aedc
+1034
-155
9 changed files
expand all
collapse all
unified
split
package.json
pnpm-lock.yaml
src
infer.ts
test.ts
tests
base-case.test.ts
bsky-actor.test.ts
bsky-feed.test.ts
primitives.test.ts
vitest.config.ts
+3
-2
package.json
···
23
23
"build": "tsdown",
24
24
"format": "prettier .",
25
25
"lint": "eslint . --max-warnings 0",
26
26
-
"test": "node --test",
26
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
36
-
"typescript-eslint": "8.35.0"
36
36
+
"typescript-eslint": "8.35.0",
37
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
32
+
vitest:
33
33
+
specifier: ^3.2.4
34
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
68
+
'@esbuild/aix-ppc64@0.25.10':
69
69
+
resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
70
70
+
engines: {node: '>=18'}
71
71
+
cpu: [ppc64]
72
72
+
os: [aix]
73
73
+
74
74
+
'@esbuild/android-arm64@0.25.10':
75
75
+
resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
76
76
+
engines: {node: '>=18'}
77
77
+
cpu: [arm64]
78
78
+
os: [android]
79
79
+
80
80
+
'@esbuild/android-arm@0.25.10':
81
81
+
resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
82
82
+
engines: {node: '>=18'}
83
83
+
cpu: [arm]
84
84
+
os: [android]
85
85
+
86
86
+
'@esbuild/android-x64@0.25.10':
87
87
+
resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
88
88
+
engines: {node: '>=18'}
89
89
+
cpu: [x64]
90
90
+
os: [android]
91
91
+
92
92
+
'@esbuild/darwin-arm64@0.25.10':
93
93
+
resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
94
94
+
engines: {node: '>=18'}
95
95
+
cpu: [arm64]
96
96
+
os: [darwin]
97
97
+
98
98
+
'@esbuild/darwin-x64@0.25.10':
99
99
+
resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
100
100
+
engines: {node: '>=18'}
101
101
+
cpu: [x64]
102
102
+
os: [darwin]
103
103
+
104
104
+
'@esbuild/freebsd-arm64@0.25.10':
105
105
+
resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
106
106
+
engines: {node: '>=18'}
107
107
+
cpu: [arm64]
108
108
+
os: [freebsd]
109
109
+
110
110
+
'@esbuild/freebsd-x64@0.25.10':
111
111
+
resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
112
112
+
engines: {node: '>=18'}
113
113
+
cpu: [x64]
114
114
+
os: [freebsd]
115
115
+
116
116
+
'@esbuild/linux-arm64@0.25.10':
117
117
+
resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
118
118
+
engines: {node: '>=18'}
119
119
+
cpu: [arm64]
120
120
+
os: [linux]
121
121
+
122
122
+
'@esbuild/linux-arm@0.25.10':
123
123
+
resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
124
124
+
engines: {node: '>=18'}
125
125
+
cpu: [arm]
126
126
+
os: [linux]
127
127
+
128
128
+
'@esbuild/linux-ia32@0.25.10':
129
129
+
resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
130
130
+
engines: {node: '>=18'}
131
131
+
cpu: [ia32]
132
132
+
os: [linux]
133
133
+
134
134
+
'@esbuild/linux-loong64@0.25.10':
135
135
+
resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
136
136
+
engines: {node: '>=18'}
137
137
+
cpu: [loong64]
138
138
+
os: [linux]
139
139
+
140
140
+
'@esbuild/linux-mips64el@0.25.10':
141
141
+
resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
142
142
+
engines: {node: '>=18'}
143
143
+
cpu: [mips64el]
144
144
+
os: [linux]
145
145
+
146
146
+
'@esbuild/linux-ppc64@0.25.10':
147
147
+
resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
148
148
+
engines: {node: '>=18'}
149
149
+
cpu: [ppc64]
150
150
+
os: [linux]
151
151
+
152
152
+
'@esbuild/linux-riscv64@0.25.10':
153
153
+
resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
154
154
+
engines: {node: '>=18'}
155
155
+
cpu: [riscv64]
156
156
+
os: [linux]
157
157
+
158
158
+
'@esbuild/linux-s390x@0.25.10':
159
159
+
resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
160
160
+
engines: {node: '>=18'}
161
161
+
cpu: [s390x]
162
162
+
os: [linux]
163
163
+
164
164
+
'@esbuild/linux-x64@0.25.10':
165
165
+
resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
166
166
+
engines: {node: '>=18'}
167
167
+
cpu: [x64]
168
168
+
os: [linux]
169
169
+
170
170
+
'@esbuild/netbsd-arm64@0.25.10':
171
171
+
resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
172
172
+
engines: {node: '>=18'}
173
173
+
cpu: [arm64]
174
174
+
os: [netbsd]
175
175
+
176
176
+
'@esbuild/netbsd-x64@0.25.10':
177
177
+
resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
178
178
+
engines: {node: '>=18'}
179
179
+
cpu: [x64]
180
180
+
os: [netbsd]
181
181
+
182
182
+
'@esbuild/openbsd-arm64@0.25.10':
183
183
+
resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
184
184
+
engines: {node: '>=18'}
185
185
+
cpu: [arm64]
186
186
+
os: [openbsd]
187
187
+
188
188
+
'@esbuild/openbsd-x64@0.25.10':
189
189
+
resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
190
190
+
engines: {node: '>=18'}
191
191
+
cpu: [x64]
192
192
+
os: [openbsd]
193
193
+
194
194
+
'@esbuild/openharmony-arm64@0.25.10':
195
195
+
resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
196
196
+
engines: {node: '>=18'}
197
197
+
cpu: [arm64]
198
198
+
os: [openharmony]
199
199
+
200
200
+
'@esbuild/sunos-x64@0.25.10':
201
201
+
resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
202
202
+
engines: {node: '>=18'}
203
203
+
cpu: [x64]
204
204
+
os: [sunos]
205
205
+
206
206
+
'@esbuild/win32-arm64@0.25.10':
207
207
+
resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
208
208
+
engines: {node: '>=18'}
209
209
+
cpu: [arm64]
210
210
+
os: [win32]
211
211
+
212
212
+
'@esbuild/win32-ia32@0.25.10':
213
213
+
resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
214
214
+
engines: {node: '>=18'}
215
215
+
cpu: [ia32]
216
216
+
os: [win32]
217
217
+
218
218
+
'@esbuild/win32-x64@0.25.10':
219
219
+
resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
220
220
+
engines: {node: '>=18'}
221
221
+
cpu: [x64]
222
222
+
os: [win32]
223
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
383
+
'@rollup/rollup-android-arm-eabi@4.52.4':
384
384
+
resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==}
385
385
+
cpu: [arm]
386
386
+
os: [android]
387
387
+
388
388
+
'@rollup/rollup-android-arm64@4.52.4':
389
389
+
resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==}
390
390
+
cpu: [arm64]
391
391
+
os: [android]
392
392
+
393
393
+
'@rollup/rollup-darwin-arm64@4.52.4':
394
394
+
resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==}
395
395
+
cpu: [arm64]
396
396
+
os: [darwin]
397
397
+
398
398
+
'@rollup/rollup-darwin-x64@4.52.4':
399
399
+
resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==}
400
400
+
cpu: [x64]
401
401
+
os: [darwin]
402
402
+
403
403
+
'@rollup/rollup-freebsd-arm64@4.52.4':
404
404
+
resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==}
405
405
+
cpu: [arm64]
406
406
+
os: [freebsd]
407
407
+
408
408
+
'@rollup/rollup-freebsd-x64@4.52.4':
409
409
+
resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==}
410
410
+
cpu: [x64]
411
411
+
os: [freebsd]
412
412
+
413
413
+
'@rollup/rollup-linux-arm-gnueabihf@4.52.4':
414
414
+
resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==}
415
415
+
cpu: [arm]
416
416
+
os: [linux]
417
417
+
418
418
+
'@rollup/rollup-linux-arm-musleabihf@4.52.4':
419
419
+
resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==}
420
420
+
cpu: [arm]
421
421
+
os: [linux]
422
422
+
423
423
+
'@rollup/rollup-linux-arm64-gnu@4.52.4':
424
424
+
resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==}
425
425
+
cpu: [arm64]
426
426
+
os: [linux]
427
427
+
428
428
+
'@rollup/rollup-linux-arm64-musl@4.52.4':
429
429
+
resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==}
430
430
+
cpu: [arm64]
431
431
+
os: [linux]
432
432
+
433
433
+
'@rollup/rollup-linux-loong64-gnu@4.52.4':
434
434
+
resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==}
435
435
+
cpu: [loong64]
436
436
+
os: [linux]
437
437
+
438
438
+
'@rollup/rollup-linux-ppc64-gnu@4.52.4':
439
439
+
resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==}
440
440
+
cpu: [ppc64]
441
441
+
os: [linux]
442
442
+
443
443
+
'@rollup/rollup-linux-riscv64-gnu@4.52.4':
444
444
+
resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==}
445
445
+
cpu: [riscv64]
446
446
+
os: [linux]
447
447
+
448
448
+
'@rollup/rollup-linux-riscv64-musl@4.52.4':
449
449
+
resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==}
450
450
+
cpu: [riscv64]
451
451
+
os: [linux]
452
452
+
453
453
+
'@rollup/rollup-linux-s390x-gnu@4.52.4':
454
454
+
resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==}
455
455
+
cpu: [s390x]
456
456
+
os: [linux]
457
457
+
458
458
+
'@rollup/rollup-linux-x64-gnu@4.52.4':
459
459
+
resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==}
460
460
+
cpu: [x64]
461
461
+
os: [linux]
462
462
+
463
463
+
'@rollup/rollup-linux-x64-musl@4.52.4':
464
464
+
resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==}
465
465
+
cpu: [x64]
466
466
+
os: [linux]
467
467
+
468
468
+
'@rollup/rollup-openharmony-arm64@4.52.4':
469
469
+
resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==}
470
470
+
cpu: [arm64]
471
471
+
os: [openharmony]
472
472
+
473
473
+
'@rollup/rollup-win32-arm64-msvc@4.52.4':
474
474
+
resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==}
475
475
+
cpu: [arm64]
476
476
+
os: [win32]
477
477
+
478
478
+
'@rollup/rollup-win32-ia32-msvc@4.52.4':
479
479
+
resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==}
480
480
+
cpu: [ia32]
481
481
+
os: [win32]
482
482
+
483
483
+
'@rollup/rollup-win32-x64-gnu@4.52.4':
484
484
+
resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==}
485
485
+
cpu: [x64]
486
486
+
os: [win32]
487
487
+
488
488
+
'@rollup/rollup-win32-x64-msvc@4.52.4':
489
489
+
resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==}
490
490
+
cpu: [x64]
491
491
+
os: [win32]
492
492
+
224
493
'@tybys/wasm-util@0.10.1':
225
494
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
495
495
+
496
496
+
'@types/chai@5.2.2':
497
497
+
resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
498
498
+
499
499
+
'@types/deep-eql@4.0.2':
500
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
570
+
'@vitest/expect@3.2.4':
571
571
+
resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
572
572
+
573
573
+
'@vitest/mocker@3.2.4':
574
574
+
resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
575
575
+
peerDependencies:
576
576
+
msw: ^2.4.9
577
577
+
vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
578
578
+
peerDependenciesMeta:
579
579
+
msw:
580
580
+
optional: true
581
581
+
vite:
582
582
+
optional: true
583
583
+
584
584
+
'@vitest/pretty-format@3.2.4':
585
585
+
resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
586
586
+
587
587
+
'@vitest/runner@3.2.4':
588
588
+
resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
589
589
+
590
590
+
'@vitest/snapshot@3.2.4':
591
591
+
resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
592
592
+
593
593
+
'@vitest/spy@3.2.4':
594
594
+
resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
595
595
+
596
596
+
'@vitest/utils@3.2.4':
597
597
+
resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
598
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
623
+
assertion-error@2.0.1:
624
624
+
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
625
625
+
engines: {node: '>=12'}
626
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
655
+
chai@5.3.3:
656
656
+
resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
657
657
+
engines: {node: '>=18'}
658
658
+
347
659
chalk@4.1.2:
348
660
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
349
661
engines: {node: '>=10'}
662
662
+
663
663
+
check-error@2.1.1:
664
664
+
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
665
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
694
+
deep-eql@5.0.2:
695
695
+
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
696
696
+
engines: {node: '>=6'}
697
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
720
+
721
721
+
es-module-lexer@1.7.0:
722
722
+
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
723
723
+
724
724
+
esbuild@0.25.10:
725
725
+
resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==}
726
726
+
engines: {node: '>=18'}
727
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
771
+
estree-walker@3.0.3:
772
772
+
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
773
773
+
443
774
esutils@2.0.3:
444
775
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
445
776
engines: {node: '>=0.10.0'}
777
777
+
778
778
+
expect-type@1.2.2:
779
779
+
resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
780
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
826
+
fsevents@2.3.3:
827
827
+
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
828
828
+
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
829
829
+
os: [darwin]
830
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
891
+
js-tokens@9.0.1:
892
892
+
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
893
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
926
+
loupe@3.2.1:
927
927
+
resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
928
928
+
929
929
+
magic-string@0.30.19:
930
930
+
resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
931
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
950
+
nanoid@3.3.11:
951
951
+
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
952
952
+
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
953
953
+
hasBin: true
954
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
985
+
pathval@2.0.1:
986
986
+
resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
987
987
+
engines: {node: '>= 14.16'}
988
988
+
989
989
+
picocolors@1.1.1:
990
990
+
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
991
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
999
+
1000
1000
+
postcss@8.5.6:
1001
1001
+
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
1002
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
1058
+
rollup@4.52.4:
1059
1059
+
resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==}
1060
1060
+
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1061
1061
+
hasBin: true
1062
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
1079
+
siginfo@2.0.0:
1080
1080
+
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
1081
1081
+
1082
1082
+
source-map-js@1.2.1:
1083
1083
+
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1084
1084
+
engines: {node: '>=0.10.0'}
1085
1085
+
1086
1086
+
stackback@0.0.2:
1087
1087
+
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
1088
1088
+
1089
1089
+
std-env@3.9.0:
1090
1090
+
resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
1091
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
1096
+
strip-literal@3.1.0:
1097
1097
+
resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
1098
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
1103
+
tinybench@2.9.0:
1104
1104
+
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
1105
1105
+
1106
1106
+
tinyexec@0.3.2:
1107
1107
+
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
1108
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
1115
+
1116
1116
+
tinypool@1.1.1:
1117
1117
+
resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
1118
1118
+
engines: {node: ^18.0.0 || >=20.0.0}
1119
1119
+
1120
1120
+
tinyrainbow@2.0.0:
1121
1121
+
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
1122
1122
+
engines: {node: '>=14.0.0'}
1123
1123
+
1124
1124
+
tinyspy@4.0.4:
1125
1125
+
resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
1126
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
1188
+
vite-node@3.2.4:
1189
1189
+
resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
1190
1190
+
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1191
1191
+
hasBin: true
1192
1192
+
1193
1193
+
vite@7.1.9:
1194
1194
+
resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==}
1195
1195
+
engines: {node: ^20.19.0 || >=22.12.0}
1196
1196
+
hasBin: true
1197
1197
+
peerDependencies:
1198
1198
+
'@types/node': ^20.19.0 || >=22.12.0
1199
1199
+
jiti: '>=1.21.0'
1200
1200
+
less: ^4.0.0
1201
1201
+
lightningcss: ^1.21.0
1202
1202
+
sass: ^1.70.0
1203
1203
+
sass-embedded: ^1.70.0
1204
1204
+
stylus: '>=0.54.8'
1205
1205
+
sugarss: ^5.0.0
1206
1206
+
terser: ^5.16.0
1207
1207
+
tsx: ^4.8.1
1208
1208
+
yaml: ^2.4.2
1209
1209
+
peerDependenciesMeta:
1210
1210
+
'@types/node':
1211
1211
+
optional: true
1212
1212
+
jiti:
1213
1213
+
optional: true
1214
1214
+
less:
1215
1215
+
optional: true
1216
1216
+
lightningcss:
1217
1217
+
optional: true
1218
1218
+
sass:
1219
1219
+
optional: true
1220
1220
+
sass-embedded:
1221
1221
+
optional: true
1222
1222
+
stylus:
1223
1223
+
optional: true
1224
1224
+
sugarss:
1225
1225
+
optional: true
1226
1226
+
terser:
1227
1227
+
optional: true
1228
1228
+
tsx:
1229
1229
+
optional: true
1230
1230
+
yaml:
1231
1231
+
optional: true
1232
1232
+
1233
1233
+
vitest@3.2.4:
1234
1234
+
resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
1235
1235
+
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1236
1236
+
hasBin: true
1237
1237
+
peerDependencies:
1238
1238
+
'@edge-runtime/vm': '*'
1239
1239
+
'@types/debug': ^4.1.12
1240
1240
+
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
1241
1241
+
'@vitest/browser': 3.2.4
1242
1242
+
'@vitest/ui': 3.2.4
1243
1243
+
happy-dom: '*'
1244
1244
+
jsdom: '*'
1245
1245
+
peerDependenciesMeta:
1246
1246
+
'@edge-runtime/vm':
1247
1247
+
optional: true
1248
1248
+
'@types/debug':
1249
1249
+
optional: true
1250
1250
+
'@types/node':
1251
1251
+
optional: true
1252
1252
+
'@vitest/browser':
1253
1253
+
optional: true
1254
1254
+
'@vitest/ui':
1255
1255
+
optional: true
1256
1256
+
happy-dom:
1257
1257
+
optional: true
1258
1258
+
jsdom:
1259
1259
+
optional: true
1260
1260
+
784
1261
which@2.0.2:
785
1262
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
786
1263
engines: {node: '>= 8'}
1264
1264
+
hasBin: true
1265
1265
+
1266
1266
+
why-is-node-running@2.3.0:
1267
1267
+
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
1268
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
1318
+
'@esbuild/aix-ppc64@0.25.10':
1319
1319
+
optional: true
1320
1320
+
1321
1321
+
'@esbuild/android-arm64@0.25.10':
1322
1322
+
optional: true
1323
1323
+
1324
1324
+
'@esbuild/android-arm@0.25.10':
1325
1325
+
optional: true
1326
1326
+
1327
1327
+
'@esbuild/android-x64@0.25.10':
1328
1328
+
optional: true
1329
1329
+
1330
1330
+
'@esbuild/darwin-arm64@0.25.10':
1331
1331
+
optional: true
1332
1332
+
1333
1333
+
'@esbuild/darwin-x64@0.25.10':
1334
1334
+
optional: true
1335
1335
+
1336
1336
+
'@esbuild/freebsd-arm64@0.25.10':
1337
1337
+
optional: true
1338
1338
+
1339
1339
+
'@esbuild/freebsd-x64@0.25.10':
1340
1340
+
optional: true
1341
1341
+
1342
1342
+
'@esbuild/linux-arm64@0.25.10':
1343
1343
+
optional: true
1344
1344
+
1345
1345
+
'@esbuild/linux-arm@0.25.10':
1346
1346
+
optional: true
1347
1347
+
1348
1348
+
'@esbuild/linux-ia32@0.25.10':
1349
1349
+
optional: true
1350
1350
+
1351
1351
+
'@esbuild/linux-loong64@0.25.10':
1352
1352
+
optional: true
1353
1353
+
1354
1354
+
'@esbuild/linux-mips64el@0.25.10':
1355
1355
+
optional: true
1356
1356
+
1357
1357
+
'@esbuild/linux-ppc64@0.25.10':
1358
1358
+
optional: true
1359
1359
+
1360
1360
+
'@esbuild/linux-riscv64@0.25.10':
1361
1361
+
optional: true
1362
1362
+
1363
1363
+
'@esbuild/linux-s390x@0.25.10':
1364
1364
+
optional: true
1365
1365
+
1366
1366
+
'@esbuild/linux-x64@0.25.10':
1367
1367
+
optional: true
1368
1368
+
1369
1369
+
'@esbuild/netbsd-arm64@0.25.10':
1370
1370
+
optional: true
1371
1371
+
1372
1372
+
'@esbuild/netbsd-x64@0.25.10':
1373
1373
+
optional: true
1374
1374
+
1375
1375
+
'@esbuild/openbsd-arm64@0.25.10':
1376
1376
+
optional: true
1377
1377
+
1378
1378
+
'@esbuild/openbsd-x64@0.25.10':
1379
1379
+
optional: true
1380
1380
+
1381
1381
+
'@esbuild/openharmony-arm64@0.25.10':
1382
1382
+
optional: true
1383
1383
+
1384
1384
+
'@esbuild/sunos-x64@0.25.10':
1385
1385
+
optional: true
1386
1386
+
1387
1387
+
'@esbuild/win32-arm64@0.25.10':
1388
1388
+
optional: true
1389
1389
+
1390
1390
+
'@esbuild/win32-ia32@0.25.10':
1391
1391
+
optional: true
1392
1392
+
1393
1393
+
'@esbuild/win32-x64@0.25.10':
1394
1394
+
optional: true
1395
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
1536
+
'@rollup/rollup-android-arm-eabi@4.52.4':
1537
1537
+
optional: true
1538
1538
+
1539
1539
+
'@rollup/rollup-android-arm64@4.52.4':
1540
1540
+
optional: true
1541
1541
+
1542
1542
+
'@rollup/rollup-darwin-arm64@4.52.4':
1543
1543
+
optional: true
1544
1544
+
1545
1545
+
'@rollup/rollup-darwin-x64@4.52.4':
1546
1546
+
optional: true
1547
1547
+
1548
1548
+
'@rollup/rollup-freebsd-arm64@4.52.4':
1549
1549
+
optional: true
1550
1550
+
1551
1551
+
'@rollup/rollup-freebsd-x64@4.52.4':
1552
1552
+
optional: true
1553
1553
+
1554
1554
+
'@rollup/rollup-linux-arm-gnueabihf@4.52.4':
1555
1555
+
optional: true
1556
1556
+
1557
1557
+
'@rollup/rollup-linux-arm-musleabihf@4.52.4':
1558
1558
+
optional: true
1559
1559
+
1560
1560
+
'@rollup/rollup-linux-arm64-gnu@4.52.4':
1561
1561
+
optional: true
1562
1562
+
1563
1563
+
'@rollup/rollup-linux-arm64-musl@4.52.4':
1564
1564
+
optional: true
1565
1565
+
1566
1566
+
'@rollup/rollup-linux-loong64-gnu@4.52.4':
1567
1567
+
optional: true
1568
1568
+
1569
1569
+
'@rollup/rollup-linux-ppc64-gnu@4.52.4':
1570
1570
+
optional: true
1571
1571
+
1572
1572
+
'@rollup/rollup-linux-riscv64-gnu@4.52.4':
1573
1573
+
optional: true
1574
1574
+
1575
1575
+
'@rollup/rollup-linux-riscv64-musl@4.52.4':
1576
1576
+
optional: true
1577
1577
+
1578
1578
+
'@rollup/rollup-linux-s390x-gnu@4.52.4':
1579
1579
+
optional: true
1580
1580
+
1581
1581
+
'@rollup/rollup-linux-x64-gnu@4.52.4':
1582
1582
+
optional: true
1583
1583
+
1584
1584
+
'@rollup/rollup-linux-x64-musl@4.52.4':
1585
1585
+
optional: true
1586
1586
+
1587
1587
+
'@rollup/rollup-openharmony-arm64@4.52.4':
1588
1588
+
optional: true
1589
1589
+
1590
1590
+
'@rollup/rollup-win32-arm64-msvc@4.52.4':
1591
1591
+
optional: true
1592
1592
+
1593
1593
+
'@rollup/rollup-win32-ia32-msvc@4.52.4':
1594
1594
+
optional: true
1595
1595
+
1596
1596
+
'@rollup/rollup-win32-x64-gnu@4.52.4':
1597
1597
+
optional: true
1598
1598
+
1599
1599
+
'@rollup/rollup-win32-x64-msvc@4.52.4':
1600
1600
+
optional: true
1601
1601
+
976
1602
'@tybys/wasm-util@0.10.1':
977
1603
dependencies:
978
1604
tslib: 2.8.1
979
1605
optional: true
1606
1606
+
1607
1607
+
'@types/chai@5.2.2':
1608
1608
+
dependencies:
1609
1609
+
'@types/deep-eql': 4.0.2
1610
1610
+
1611
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
1713
+
'@vitest/expect@3.2.4':
1714
1714
+
dependencies:
1715
1715
+
'@types/chai': 5.2.2
1716
1716
+
'@vitest/spy': 3.2.4
1717
1717
+
'@vitest/utils': 3.2.4
1718
1718
+
chai: 5.3.3
1719
1719
+
tinyrainbow: 2.0.0
1720
1720
+
1721
1721
+
'@vitest/mocker@3.2.4(vite@7.1.9(@types/node@24.0.4)(jiti@2.6.1))':
1722
1722
+
dependencies:
1723
1723
+
'@vitest/spy': 3.2.4
1724
1724
+
estree-walker: 3.0.3
1725
1725
+
magic-string: 0.30.19
1726
1726
+
optionalDependencies:
1727
1727
+
vite: 7.1.9(@types/node@24.0.4)(jiti@2.6.1)
1728
1728
+
1729
1729
+
'@vitest/pretty-format@3.2.4':
1730
1730
+
dependencies:
1731
1731
+
tinyrainbow: 2.0.0
1732
1732
+
1733
1733
+
'@vitest/runner@3.2.4':
1734
1734
+
dependencies:
1735
1735
+
'@vitest/utils': 3.2.4
1736
1736
+
pathe: 2.0.3
1737
1737
+
strip-literal: 3.1.0
1738
1738
+
1739
1739
+
'@vitest/snapshot@3.2.4':
1740
1740
+
dependencies:
1741
1741
+
'@vitest/pretty-format': 3.2.4
1742
1742
+
magic-string: 0.30.19
1743
1743
+
pathe: 2.0.3
1744
1744
+
1745
1745
+
'@vitest/spy@3.2.4':
1746
1746
+
dependencies:
1747
1747
+
tinyspy: 4.0.4
1748
1748
+
1749
1749
+
'@vitest/utils@3.2.4':
1750
1750
+
dependencies:
1751
1751
+
'@vitest/pretty-format': 3.2.4
1752
1752
+
loupe: 3.2.1
1753
1753
+
tinyrainbow: 2.0.0
1754
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
1775
+
1776
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
1804
+
chai@5.3.3:
1805
1805
+
dependencies:
1806
1806
+
assertion-error: 2.0.1
1807
1807
+
check-error: 2.1.1
1808
1808
+
deep-eql: 5.0.2
1809
1809
+
loupe: 3.2.1
1810
1810
+
pathval: 2.0.1
1811
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
1816
+
1817
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
1841
+
deep-eql@5.0.2: {}
1842
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
1853
+
es-module-lexer@1.7.0: {}
1854
1854
+
1855
1855
+
esbuild@0.25.10:
1856
1856
+
optionalDependencies:
1857
1857
+
'@esbuild/aix-ppc64': 0.25.10
1858
1858
+
'@esbuild/android-arm': 0.25.10
1859
1859
+
'@esbuild/android-arm64': 0.25.10
1860
1860
+
'@esbuild/android-x64': 0.25.10
1861
1861
+
'@esbuild/darwin-arm64': 0.25.10
1862
1862
+
'@esbuild/darwin-x64': 0.25.10
1863
1863
+
'@esbuild/freebsd-arm64': 0.25.10
1864
1864
+
'@esbuild/freebsd-x64': 0.25.10
1865
1865
+
'@esbuild/linux-arm': 0.25.10
1866
1866
+
'@esbuild/linux-arm64': 0.25.10
1867
1867
+
'@esbuild/linux-ia32': 0.25.10
1868
1868
+
'@esbuild/linux-loong64': 0.25.10
1869
1869
+
'@esbuild/linux-mips64el': 0.25.10
1870
1870
+
'@esbuild/linux-ppc64': 0.25.10
1871
1871
+
'@esbuild/linux-riscv64': 0.25.10
1872
1872
+
'@esbuild/linux-s390x': 0.25.10
1873
1873
+
'@esbuild/linux-x64': 0.25.10
1874
1874
+
'@esbuild/netbsd-arm64': 0.25.10
1875
1875
+
'@esbuild/netbsd-x64': 0.25.10
1876
1876
+
'@esbuild/openbsd-arm64': 0.25.10
1877
1877
+
'@esbuild/openbsd-x64': 0.25.10
1878
1878
+
'@esbuild/openharmony-arm64': 0.25.10
1879
1879
+
'@esbuild/sunos-x64': 0.25.10
1880
1880
+
'@esbuild/win32-arm64': 0.25.10
1881
1881
+
'@esbuild/win32-ia32': 0.25.10
1882
1882
+
'@esbuild/win32-x64': 0.25.10
1883
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
1953
+
estree-walker@3.0.3:
1954
1954
+
dependencies:
1955
1955
+
'@types/estree': 1.0.8
1956
1956
+
1234
1957
esutils@2.0.3: {}
1958
1958
+
1959
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
2002
+
2003
2003
+
fsevents@2.3.3:
2004
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
2049
+
js-tokens@9.0.1: {}
2050
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
2078
+
loupe@3.2.1: {}
2079
2079
+
2080
2080
+
magic-string@0.30.19:
2081
2081
+
dependencies:
2082
2082
+
'@jridgewell/sourcemap-codec': 1.5.5
2083
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
2100
+
2101
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
2131
+
2132
2132
+
pathval@2.0.1: {}
2133
2133
+
2134
2134
+
picocolors@1.1.1: {}
1393
2135
1394
2136
picomatch@2.3.1: {}
1395
2137
1396
2138
picomatch@4.0.3: {}
1397
2139
2140
2140
+
postcss@8.5.6:
2141
2141
+
dependencies:
2142
2142
+
nanoid: 3.3.11
2143
2143
+
picocolors: 1.1.1
2144
2144
+
source-map-js: 1.2.1
2145
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
2201
+
rollup@4.52.4:
2202
2202
+
dependencies:
2203
2203
+
'@types/estree': 1.0.8
2204
2204
+
optionalDependencies:
2205
2205
+
'@rollup/rollup-android-arm-eabi': 4.52.4
2206
2206
+
'@rollup/rollup-android-arm64': 4.52.4
2207
2207
+
'@rollup/rollup-darwin-arm64': 4.52.4
2208
2208
+
'@rollup/rollup-darwin-x64': 4.52.4
2209
2209
+
'@rollup/rollup-freebsd-arm64': 4.52.4
2210
2210
+
'@rollup/rollup-freebsd-x64': 4.52.4
2211
2211
+
'@rollup/rollup-linux-arm-gnueabihf': 4.52.4
2212
2212
+
'@rollup/rollup-linux-arm-musleabihf': 4.52.4
2213
2213
+
'@rollup/rollup-linux-arm64-gnu': 4.52.4
2214
2214
+
'@rollup/rollup-linux-arm64-musl': 4.52.4
2215
2215
+
'@rollup/rollup-linux-loong64-gnu': 4.52.4
2216
2216
+
'@rollup/rollup-linux-ppc64-gnu': 4.52.4
2217
2217
+
'@rollup/rollup-linux-riscv64-gnu': 4.52.4
2218
2218
+
'@rollup/rollup-linux-riscv64-musl': 4.52.4
2219
2219
+
'@rollup/rollup-linux-s390x-gnu': 4.52.4
2220
2220
+
'@rollup/rollup-linux-x64-gnu': 4.52.4
2221
2221
+
'@rollup/rollup-linux-x64-musl': 4.52.4
2222
2222
+
'@rollup/rollup-openharmony-arm64': 4.52.4
2223
2223
+
'@rollup/rollup-win32-arm64-msvc': 4.52.4
2224
2224
+
'@rollup/rollup-win32-ia32-msvc': 4.52.4
2225
2225
+
'@rollup/rollup-win32-x64-gnu': 4.52.4
2226
2226
+
'@rollup/rollup-win32-x64-msvc': 4.52.4
2227
2227
+
fsevents: 2.3.3
2228
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
2241
+
siginfo@2.0.0: {}
2242
2242
+
2243
2243
+
source-map-js@1.2.1: {}
2244
2244
+
2245
2245
+
stackback@0.0.2: {}
2246
2246
+
2247
2247
+
std-env@3.9.0: {}
2248
2248
+
1465
2249
strip-json-comments@3.1.1: {}
1466
2250
2251
2251
+
strip-literal@3.1.0:
2252
2252
+
dependencies:
2253
2253
+
js-tokens: 9.0.1
2254
2254
+
1467
2255
supports-color@7.2.0:
1468
2256
dependencies:
1469
2257
has-flag: 4.0.0
1470
2258
2259
2259
+
tinybench@2.9.0: {}
2260
2260
+
2261
2261
+
tinyexec@0.3.2: {}
2262
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
2270
+
tinypool@1.1.1: {}
2271
2271
+
2272
2272
+
tinyrainbow@2.0.0: {}
2273
2273
+
2274
2274
+
tinyspy@4.0.4: {}
2275
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
2339
+
vite-node@3.2.4(@types/node@24.0.4)(jiti@2.6.1):
2340
2340
+
dependencies:
2341
2341
+
cac: 6.7.14
2342
2342
+
debug: 4.4.3
2343
2343
+
es-module-lexer: 1.7.0
2344
2344
+
pathe: 2.0.3
2345
2345
+
vite: 7.1.9(@types/node@24.0.4)(jiti@2.6.1)
2346
2346
+
transitivePeerDependencies:
2347
2347
+
- '@types/node'
2348
2348
+
- jiti
2349
2349
+
- less
2350
2350
+
- lightningcss
2351
2351
+
- sass
2352
2352
+
- sass-embedded
2353
2353
+
- stylus
2354
2354
+
- sugarss
2355
2355
+
- supports-color
2356
2356
+
- terser
2357
2357
+
- tsx
2358
2358
+
- yaml
2359
2359
+
2360
2360
+
vite@7.1.9(@types/node@24.0.4)(jiti@2.6.1):
2361
2361
+
dependencies:
2362
2362
+
esbuild: 0.25.10
2363
2363
+
fdir: 6.5.0(picomatch@4.0.3)
2364
2364
+
picomatch: 4.0.3
2365
2365
+
postcss: 8.5.6
2366
2366
+
rollup: 4.52.4
2367
2367
+
tinyglobby: 0.2.15
2368
2368
+
optionalDependencies:
2369
2369
+
'@types/node': 24.0.4
2370
2370
+
fsevents: 2.3.3
2371
2371
+
jiti: 2.6.1
2372
2372
+
2373
2373
+
vitest@3.2.4(@types/node@24.0.4)(jiti@2.6.1):
2374
2374
+
dependencies:
2375
2375
+
'@types/chai': 5.2.2
2376
2376
+
'@vitest/expect': 3.2.4
2377
2377
+
'@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@24.0.4)(jiti@2.6.1))
2378
2378
+
'@vitest/pretty-format': 3.2.4
2379
2379
+
'@vitest/runner': 3.2.4
2380
2380
+
'@vitest/snapshot': 3.2.4
2381
2381
+
'@vitest/spy': 3.2.4
2382
2382
+
'@vitest/utils': 3.2.4
2383
2383
+
chai: 5.3.3
2384
2384
+
debug: 4.4.3
2385
2385
+
expect-type: 1.2.2
2386
2386
+
magic-string: 0.30.19
2387
2387
+
pathe: 2.0.3
2388
2388
+
picomatch: 4.0.3
2389
2389
+
std-env: 3.9.0
2390
2390
+
tinybench: 2.9.0
2391
2391
+
tinyexec: 0.3.2
2392
2392
+
tinyglobby: 0.2.15
2393
2393
+
tinypool: 1.1.1
2394
2394
+
tinyrainbow: 2.0.0
2395
2395
+
vite: 7.1.9(@types/node@24.0.4)(jiti@2.6.1)
2396
2396
+
vite-node: 3.2.4(@types/node@24.0.4)(jiti@2.6.1)
2397
2397
+
why-is-node-running: 2.3.0
2398
2398
+
optionalDependencies:
2399
2399
+
'@types/node': 24.0.4
2400
2400
+
transitivePeerDependencies:
2401
2401
+
- jiti
2402
2402
+
- less
2403
2403
+
- lightningcss
2404
2404
+
- msw
2405
2405
+
- sass
2406
2406
+
- sass-embedded
2407
2407
+
- stylus
2408
2408
+
- sugarss
2409
2409
+
- supports-color
2410
2410
+
- terser
2411
2411
+
- tsx
2412
2412
+
- yaml
2413
2413
+
1541
2414
which@2.0.2:
1542
2415
dependencies:
1543
2416
isexe: 2.0.0
2417
2417
+
2418
2418
+
why-is-node-running@2.3.0:
2419
2419
+
dependencies:
2420
2420
+
siginfo: 2.0.0
2421
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
97
-
export type InferDefs<T extends Record<string, unknown>> = Prettify<{
97
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
1
-
import type schema from "../samples/demo.json";
2
2
-
import type { InferNS } from "./infer.ts";
3
3
-
export type Schema = InferNS<typeof schema>;
+2
-3
src/tests/base-case.test.ts
···
1
1
-
import { strict as assert } from "node:assert";
2
2
-
import { test } from "node:test";
1
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
16
-
assert.deepEqual(profileNamespace, {
15
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
1
-
import { strict as assert } from "node:assert";
2
2
-
import { test } from "node:test";
1
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
20
-
assert.deepEqual(profileViewBasic, {
19
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
59
-
assert.deepEqual(profileView, {
58
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
107
-
assert.deepEqual(profileViewDetailed, {
106
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
151
-
assert.deepEqual(profileAssociated, {
150
150
+
expect(profileAssociated).toEqual({
152
151
type: "object",
153
152
properties: {
154
153
lists: { type: "integer" },
···
172
171
}),
173
172
});
174
173
175
175
-
assert.deepEqual(profileAssociatedChat, {
174
174
+
expect(profileAssociatedChat).toEqual({
176
175
type: "object",
177
176
properties: {
178
177
allowIncoming: {
···
193
192
}),
194
193
});
195
194
196
196
-
assert.deepEqual(profileAssociatedActivitySubscription, {
195
195
+
expect(profileAssociatedActivitySubscription).toEqual({
197
196
type: "object",
198
197
properties: {
199
198
allowSubscriptions: {
···
221
220
),
222
221
});
223
222
224
224
-
assert.deepEqual(viewerState, {
223
223
+
expect(viewerState).toEqual({
225
224
type: "object",
226
225
properties: {
227
226
muted: { type: "boolean" },
···
250
249
}),
251
250
});
252
251
253
253
-
assert.deepEqual(knownFollowers, {
252
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
282
-
assert.deepEqual(verificationState, {
281
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
313
-
assert.deepEqual(verificationView, {
312
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
345
-
assert.deepEqual(preferences, {
344
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
374
-
assert.deepEqual(adultContentPref, {
373
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
393
-
assert.deepEqual(contentLabelPref, {
392
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
419
-
assert.deepEqual(savedFeed, {
418
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
442
-
assert.deepEqual(savedFeedsPrefV2, {
441
441
+
expect(savedFeedsPrefV2).toEqual({
443
442
type: "object",
444
443
properties: {
445
444
items: {
···
459
458
timelineIndex: lx.integer(),
460
459
});
461
460
462
462
-
assert.deepEqual(savedFeedsPref, {
461
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
486
-
assert.deepEqual(personalDetailsPref, {
485
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
504
-
assert.deepEqual(feedViewPref, {
503
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
526
-
assert.deepEqual(threadViewPref, {
525
525
+
expect(threadViewPref).toEqual({
527
526
type: "object",
528
527
properties: {
529
528
sort: {
···
543
542
}),
544
543
});
545
544
546
546
-
assert.deepEqual(interestsPref, {
545
545
+
expect(interestsPref).toEqual({
547
546
type: "object",
548
547
properties: {
549
548
tags: {
···
564
563
maxGraphemes: 64,
565
564
});
566
565
567
567
-
assert.deepEqual(mutedWordTarget, {
566
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
589
-
assert.deepEqual(mutedWord, {
588
588
+
expect(mutedWord).toEqual({
590
589
type: "object",
591
590
properties: {
592
591
id: { type: "string" },
···
619
618
}),
620
619
});
621
620
622
622
-
assert.deepEqual(mutedWordsPref, {
621
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
640
-
assert.deepEqual(hiddenPostsPref, {
639
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
658
-
assert.deepEqual(labelersPref, {
657
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
676
-
assert.deepEqual(labelerPrefItem, {
675
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
692
-
assert.deepEqual(bskyAppStatePref, {
691
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
715
-
assert.deepEqual(bskyAppProgressGuide, {
714
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
732
-
assert.deepEqual(nux, {
731
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
749
-
assert.deepEqual(verificationPrefs, {
748
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
774
-
assert.deepEqual(postInteractionSettingsPref, {
773
773
+
expect(postInteractionSettingsPref).toEqual({
775
774
type: "object",
776
775
properties: {
777
776
threadgateAllowRules: {
···
811
810
isActive: lx.boolean(),
812
811
});
813
812
814
814
-
assert.deepEqual(statusView, {
813
813
+
expect(statusView).toEqual({
815
814
type: "object",
816
815
properties: {
817
816
status: {
···
861
860
}),
862
861
});
863
862
864
864
-
assert.deepEqual(actorDefs.lexicon, 1);
865
865
-
assert.deepEqual(actorDefs.id, "app.bsky.actor.defs");
866
866
-
assert.deepEqual(actorDefs.defs.profileViewBasic.type, "object");
867
867
-
assert.deepEqual(actorDefs.defs.viewerState.type, "object");
863
863
+
expect(actorDefs.lexicon).toEqual(1);
864
864
+
expect(actorDefs.id).toEqual("app.bsky.actor.defs");
865
865
+
expect(actorDefs.defs.profileViewBasic.type).toEqual("object");
866
866
+
expect(actorDefs.defs.viewerState.type).toEqual("object");
868
867
});
+39
-40
src/tests/bsky-feed.test.ts
···
1
1
-
import { strict as assert } from "node:assert";
2
2
-
import { test } from "node:test";
1
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
29
-
assert.deepEqual(postView, {
28
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
78
-
assert.deepEqual(viewerState, {
77
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
97
-
assert.deepEqual(threadContext, {
96
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
114
-
assert.deepEqual(feedViewPost, {
113
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
141
-
assert.deepEqual(replyRef, {
140
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
171
-
assert.deepEqual(reasonRepost, {
170
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
190
-
assert.deepEqual(reasonPin, {
189
189
+
expect(reasonPin).toEqual({
191
190
type: "object",
192
191
properties: {},
193
192
});
···
203
202
threadContext: lx.ref("#threadContext"),
204
203
});
205
204
206
206
-
assert.deepEqual(threadViewPost, {
205
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
233
-
assert.deepEqual(notFoundPost, {
232
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
250
-
assert.deepEqual(blockedPost, {
249
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
267
-
assert.deepEqual(blockedAuthor, {
266
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
300
-
assert.deepEqual(generatorView, {
299
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
343
-
assert.deepEqual(generatorViewerState, {
342
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
358
-
assert.deepEqual(skeletonFeedPost, {
357
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
377
-
assert.deepEqual(skeletonReasonRepost, {
376
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
389
-
assert.deepEqual(skeletonReasonPin, {
388
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
403
-
assert.deepEqual(threadgateView, {
402
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
440
-
assert.deepEqual(interaction, {
439
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
472
-
assert.deepEqual(requestLess, {
471
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
484
-
assert.deepEqual(requestMore, {
483
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
494
-
assert.deepEqual(clickthroughItem, {
493
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
505
-
assert.deepEqual(clickthroughAuthor, {
504
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
516
-
assert.deepEqual(clickthroughReposter, {
515
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
527
-
assert.deepEqual(clickthroughEmbed, {
526
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
539
-
assert.deepEqual(contentModeUnspecified, {
538
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
550
-
assert.deepEqual(contentModeVideo, {
549
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
560
-
assert.deepEqual(interactionSeen, {
559
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
569
-
assert.deepEqual(interactionLike, {
568
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
578
-
assert.deepEqual(interactionRepost, {
577
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
587
-
assert.deepEqual(interactionReply, {
586
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
596
-
assert.deepEqual(interactionQuote, {
595
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
605
-
assert.deepEqual(interactionShare, {
604
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
676
-
assert.deepEqual(feedDefs.lexicon, 1);
677
677
-
assert.deepEqual(feedDefs.id, "app.bsky.feed.defs");
678
678
-
assert.deepEqual(feedDefs.defs.postView.type, "object");
679
679
-
assert.deepEqual(feedDefs.defs.viewerState.type, "object");
680
680
-
assert.deepEqual(feedDefs.defs.requestLess.type, "token");
681
681
-
assert.deepEqual(feedDefs.defs.contentModeVideo.type, "token");
675
675
+
expect(feedDefs.lexicon).toEqual(1);
676
676
+
expect(feedDefs.id).toEqual("app.bsky.feed.defs");
677
677
+
expect(feedDefs.defs.postView.type).toEqual("object");
678
678
+
expect(feedDefs.defs.viewerState.type).toEqual("object");
679
679
+
expect(feedDefs.defs.requestLess.type).toEqual("token");
680
680
+
expect(feedDefs.defs.contentModeVideo.type).toEqual("token");
682
681
});
+67
-68
src/tests/primitives.test.ts
···
1
1
-
import { strict as assert } from "node:assert";
1
1
+
import { expect, test } from "vitest";
2
2
import { lx } from "../lib.ts";
3
3
-
import { test } from "node:test";
4
3
5
4
test("lx.null()", () => {
6
5
const result = lx.null();
7
7
-
assert.deepEqual(result, { type: "null" });
6
6
+
expect(result).toEqual({ type: "null" });
8
7
});
9
8
10
9
test("lx.boolean()", () => {
11
10
const result = lx.boolean();
12
12
-
assert.deepEqual(result, { type: "boolean" });
11
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
17
-
assert.deepEqual(result, { type: "boolean", default: true });
16
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
22
-
assert.deepEqual(result, { type: "boolean", const: false });
21
21
+
expect(result).toEqual({ type: "boolean", const: false });
23
22
});
24
23
25
24
test("lx.integer()", () => {
26
25
const result = lx.integer();
27
27
-
assert.deepEqual(result, { type: "integer" });
26
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
32
-
assert.deepEqual(result, { type: "integer", minimum: 0 });
31
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
37
-
assert.deepEqual(result, { type: "integer", maximum: 100 });
36
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
42
-
assert.deepEqual(result, { type: "integer", minimum: 0, maximum: 100 });
41
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
47
-
assert.deepEqual(result, { type: "integer", enum: [1, 2, 3, 5, 8, 13] });
46
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
52
-
assert.deepEqual(result, { type: "integer", default: 42 });
51
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
57
-
assert.deepEqual(result, { type: "integer", const: 7 });
56
56
+
expect(result).toEqual({ type: "integer", const: 7 });
58
57
});
59
58
60
59
test("lx.string()", () => {
61
60
const result = lx.string();
62
62
-
assert.deepEqual(result, { type: "string" });
61
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
67
-
assert.deepEqual(result, { type: "string", maxLength: 64 });
66
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
72
-
assert.deepEqual(result, { type: "string", enum: ["light", "dark", "auto"] });
71
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
77
-
assert.deepEqual(result, { type: "unknown" });
76
76
+
expect(result).toEqual({ type: "unknown" });
78
77
});
79
78
80
79
test("lx.bytes()", () => {
81
80
const result = lx.bytes();
82
82
-
assert.deepEqual(result, { type: "bytes" });
81
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
87
-
assert.deepEqual(result, { type: "bytes", minLength: 1 });
86
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
92
-
assert.deepEqual(result, { type: "bytes", maxLength: 1024 });
91
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
97
-
assert.deepEqual(result, { type: "bytes", minLength: 1, maxLength: 1024 });
96
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
104
-
assert.deepEqual(result, {
103
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
112
-
assert.deepEqual(result, { type: "blob" });
111
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
117
-
assert.deepEqual(result, {
116
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
125
-
assert.deepEqual(result, { type: "blob", maxSize: 1000000 });
124
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
133
-
assert.deepEqual(result, {
132
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
142
-
assert.deepEqual(result, { type: "array", items: { type: "string" } });
141
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
147
-
assert.deepEqual(result, { type: "array", items: { type: "integer" } });
146
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
152
-
assert.deepEqual(result, {
151
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
161
-
assert.deepEqual(result, {
160
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
170
-
assert.deepEqual(result, {
169
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
180
-
assert.deepEqual(result, {
179
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
191
-
assert.deepEqual(result, {
190
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
202
-
assert.deepEqual(result, {
201
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
211
-
assert.deepEqual(result, {
210
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
219
-
assert.deepEqual(result, {
218
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
227
-
assert.deepEqual(result, {
226
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
236
-
assert.deepEqual(result, {
235
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
248
-
assert.deepEqual(result, {
247
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
258
-
assert.deepEqual(result, {
257
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
272
-
assert.deepEqual(result, {
271
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
288
-
assert.deepEqual(result, {
287
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
299
-
assert.deepEqual(result, {
298
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
311
-
assert.deepEqual(result, {
310
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
325
-
assert.deepEqual(result, {
324
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
341
-
assert.deepEqual(result, {
340
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
356
-
assert.deepEqual(result, {
355
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
371
-
assert.deepEqual(result, {
370
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
384
-
assert.deepEqual(result, { type: "query" });
383
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
389
-
assert.deepEqual(result, { type: "query", description: "Search for actors" });
388
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
399
-
assert.deepEqual(result, {
398
398
+
expect(result).toEqual({
400
399
type: "query",
401
400
parameters: {
402
401
type: "params",
···
421
420
}),
422
421
},
423
422
});
424
424
-
assert.deepEqual(result, {
423
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
448
-
assert.deepEqual(result, {
447
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
475
-
assert.deepEqual(result, {
474
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
510
-
assert.deepEqual(result, { type: "procedure" });
509
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
515
-
assert.deepEqual(result, {
514
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
527
-
assert.deepEqual(result, {
526
526
+
expect(result).toEqual({
528
527
type: "procedure",
529
528
parameters: {
530
529
type: "params",
···
545
544
}),
546
545
},
547
546
});
548
548
-
assert.deepEqual(result, {
547
547
+
expect(result).toEqual({
549
548
type: "procedure",
550
549
input: {
551
550
encoding: "application/json",
···
571
570
}),
572
571
},
573
572
});
574
574
-
assert.deepEqual(result, {
573
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
597
-
assert.deepEqual(result, {
596
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
627
-
assert.deepEqual(result, {
626
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
660
-
assert.deepEqual(result, { type: "subscription" });
659
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
667
-
assert.deepEqual(result, {
666
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
679
-
assert.deepEqual(result, {
678
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
696
-
assert.deepEqual(result, {
695
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
714
-
assert.deepEqual(result, {
713
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
733
-
assert.deepEqual(result, {
732
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
762
-
assert.deepEqual(result, {
761
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
1
+
import { defineConfig } from "vitest/config";
2
2
+
3
3
+
export default defineConfig({
4
4
+
test: {
5
5
+
include: ["src/**/*.test.ts"],
6
6
+
},
7
7
+
});