+2
.cargo/config.toml
+2
.cargo/config.toml
+1
.envrc
+1
.envrc
···
1
+
use flake
+42
.gitignore
+42
.gitignore
···
1
+
node_modules
2
+
3
+
# Output
4
+
.output
5
+
.vercel
6
+
.svelte-kit
7
+
build
8
+
visitcount
9
+
bouncecount
10
+
legitvisitcount
11
+
fakevisitcount
12
+
distancetravelled
13
+
notes
14
+
note
15
+
data
16
+
17
+
# OS
18
+
.DS_Store
19
+
Thumbs.db
20
+
21
+
# Env
22
+
.env
23
+
.env.*
24
+
!.env.example
25
+
!.env.test
26
+
27
+
# Vite
28
+
vite.config.js.timestamp-*
29
+
vite.config.ts.timestamp-*
30
+
31
+
# nix
32
+
/result
33
+
/.direnv
34
+
35
+
# scala
36
+
target
37
+
.metals
38
+
.bloop
39
+
guestbook/entries
40
+
guestbook/entries_size
41
+
last_game.json
42
+
last_track.json
+6655
Cargo.lock
+6655
Cargo.lock
···
1
+
# This file is automatically @generated by Cargo.
2
+
# It is not intended for manual editing.
3
+
version = 4
4
+
5
+
[[package]]
6
+
name = "abnf"
7
+
version = "0.13.0"
8
+
source = "registry+https://github.com/rust-lang/crates.io-index"
9
+
checksum = "087113bd50d9adce24850eed5d0476c7d199d532fce8fab5173650331e09033a"
10
+
dependencies = [
11
+
"abnf-core",
12
+
"nom",
13
+
]
14
+
15
+
[[package]]
16
+
name = "abnf-core"
17
+
version = "0.5.0"
18
+
source = "registry+https://github.com/rust-lang/crates.io-index"
19
+
checksum = "c44e09c43ae1c368fb91a03a566472d0087c26cf7e1b9e8e289c14ede681dd7d"
20
+
dependencies = [
21
+
"nom",
22
+
]
23
+
24
+
[[package]]
25
+
name = "addr2line"
26
+
version = "0.25.1"
27
+
source = "registry+https://github.com/rust-lang/crates.io-index"
28
+
checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b"
29
+
dependencies = [
30
+
"gimli",
31
+
]
32
+
33
+
[[package]]
34
+
name = "adler2"
35
+
version = "2.0.1"
36
+
source = "registry+https://github.com/rust-lang/crates.io-index"
37
+
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
38
+
39
+
[[package]]
40
+
name = "aho-corasick"
41
+
version = "1.1.4"
42
+
source = "registry+https://github.com/rust-lang/crates.io-index"
43
+
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
44
+
dependencies = [
45
+
"memchr",
46
+
]
47
+
48
+
[[package]]
49
+
name = "aliasable"
50
+
version = "0.1.3"
51
+
source = "registry+https://github.com/rust-lang/crates.io-index"
52
+
checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
53
+
54
+
[[package]]
55
+
name = "alloc-no-stdlib"
56
+
version = "2.0.4"
57
+
source = "registry+https://github.com/rust-lang/crates.io-index"
58
+
checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
59
+
60
+
[[package]]
61
+
name = "alloc-stdlib"
62
+
version = "0.2.2"
63
+
source = "registry+https://github.com/rust-lang/crates.io-index"
64
+
checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
65
+
dependencies = [
66
+
"alloc-no-stdlib",
67
+
]
68
+
69
+
[[package]]
70
+
name = "allocator-api2"
71
+
version = "0.2.21"
72
+
source = "registry+https://github.com/rust-lang/crates.io-index"
73
+
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
74
+
75
+
[[package]]
76
+
name = "alphanumeric-sort"
77
+
version = "1.5.4"
78
+
source = "registry+https://github.com/rust-lang/crates.io-index"
79
+
checksum = "ab31f79a61d3c25cae1d6734a386662e5cf1b6ba5a9720c135b609273c058c15"
80
+
81
+
[[package]]
82
+
name = "android_system_properties"
83
+
version = "0.1.5"
84
+
source = "registry+https://github.com/rust-lang/crates.io-index"
85
+
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
86
+
dependencies = [
87
+
"libc",
88
+
]
89
+
90
+
[[package]]
91
+
name = "ansi-str"
92
+
version = "0.9.0"
93
+
source = "registry+https://github.com/rust-lang/crates.io-index"
94
+
checksum = "060de1453b69f46304b28274f382132f4e72c55637cf362920926a70d090890d"
95
+
dependencies = [
96
+
"ansitok",
97
+
]
98
+
99
+
[[package]]
100
+
name = "ansi_term"
101
+
version = "0.12.1"
102
+
source = "registry+https://github.com/rust-lang/crates.io-index"
103
+
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
104
+
dependencies = [
105
+
"winapi",
106
+
]
107
+
108
+
[[package]]
109
+
name = "ansitok"
110
+
version = "0.3.0"
111
+
source = "registry+https://github.com/rust-lang/crates.io-index"
112
+
checksum = "c0a8acea8c2f1c60f0a92a8cd26bf96ca97db56f10bbcab238bbe0cceba659ee"
113
+
dependencies = [
114
+
"nom",
115
+
"vte",
116
+
]
117
+
118
+
[[package]]
119
+
name = "anstream"
120
+
version = "0.6.21"
121
+
source = "registry+https://github.com/rust-lang/crates.io-index"
122
+
checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
123
+
dependencies = [
124
+
"anstyle",
125
+
"anstyle-parse",
126
+
"anstyle-query",
127
+
"anstyle-wincon",
128
+
"colorchoice",
129
+
"is_terminal_polyfill",
130
+
"utf8parse",
131
+
]
132
+
133
+
[[package]]
134
+
name = "anstyle"
135
+
version = "1.0.13"
136
+
source = "registry+https://github.com/rust-lang/crates.io-index"
137
+
checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
138
+
139
+
[[package]]
140
+
name = "anstyle-parse"
141
+
version = "0.2.7"
142
+
source = "registry+https://github.com/rust-lang/crates.io-index"
143
+
checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
144
+
dependencies = [
145
+
"utf8parse",
146
+
]
147
+
148
+
[[package]]
149
+
name = "anstyle-query"
150
+
version = "1.1.5"
151
+
source = "registry+https://github.com/rust-lang/crates.io-index"
152
+
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
153
+
dependencies = [
154
+
"windows-sys 0.61.2",
155
+
]
156
+
157
+
[[package]]
158
+
name = "anstyle-wincon"
159
+
version = "3.0.11"
160
+
source = "registry+https://github.com/rust-lang/crates.io-index"
161
+
checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
162
+
dependencies = [
163
+
"anstyle",
164
+
"once_cell_polyfill",
165
+
"windows-sys 0.61.2",
166
+
]
167
+
168
+
[[package]]
169
+
name = "anyhow"
170
+
version = "1.0.100"
171
+
source = "registry+https://github.com/rust-lang/crates.io-index"
172
+
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
173
+
174
+
[[package]]
175
+
name = "arbitrary"
176
+
version = "1.4.2"
177
+
source = "registry+https://github.com/rust-lang/crates.io-index"
178
+
checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
179
+
dependencies = [
180
+
"derive_arbitrary",
181
+
]
182
+
183
+
[[package]]
184
+
name = "arrayvec"
185
+
version = "0.7.6"
186
+
source = "registry+https://github.com/rust-lang/crates.io-index"
187
+
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
188
+
189
+
[[package]]
190
+
name = "async-compression"
191
+
version = "0.4.36"
192
+
source = "registry+https://github.com/rust-lang/crates.io-index"
193
+
checksum = "98ec5f6c2f8bc326c994cb9e241cc257ddaba9afa8555a43cffbb5dd86efaa37"
194
+
dependencies = [
195
+
"compression-codecs",
196
+
"compression-core",
197
+
"futures-core",
198
+
"pin-project-lite",
199
+
"tokio",
200
+
]
201
+
202
+
[[package]]
203
+
name = "atoi_simd"
204
+
version = "0.16.1"
205
+
source = "registry+https://github.com/rust-lang/crates.io-index"
206
+
checksum = "c2a49e05797ca52e312a0c658938b7d00693ef037799ef7187678f212d7684cf"
207
+
dependencies = [
208
+
"debug_unsafe",
209
+
]
210
+
211
+
[[package]]
212
+
name = "atomic-polyfill"
213
+
version = "1.0.3"
214
+
source = "registry+https://github.com/rust-lang/crates.io-index"
215
+
checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4"
216
+
dependencies = [
217
+
"critical-section",
218
+
]
219
+
220
+
[[package]]
221
+
name = "atomic-waker"
222
+
version = "1.1.2"
223
+
source = "registry+https://github.com/rust-lang/crates.io-index"
224
+
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
225
+
226
+
[[package]]
227
+
name = "autocfg"
228
+
version = "1.5.0"
229
+
source = "registry+https://github.com/rust-lang/crates.io-index"
230
+
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
231
+
232
+
[[package]]
233
+
name = "backtrace"
234
+
version = "0.3.76"
235
+
source = "registry+https://github.com/rust-lang/crates.io-index"
236
+
checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6"
237
+
dependencies = [
238
+
"addr2line",
239
+
"cfg-if",
240
+
"libc",
241
+
"miniz_oxide",
242
+
"object",
243
+
"rustc-demangle",
244
+
"windows-link 0.2.1",
245
+
]
246
+
247
+
[[package]]
248
+
name = "backtrace-ext"
249
+
version = "0.2.1"
250
+
source = "registry+https://github.com/rust-lang/crates.io-index"
251
+
checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50"
252
+
dependencies = [
253
+
"backtrace",
254
+
]
255
+
256
+
[[package]]
257
+
name = "base-x"
258
+
version = "0.2.11"
259
+
source = "registry+https://github.com/rust-lang/crates.io-index"
260
+
checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270"
261
+
262
+
[[package]]
263
+
name = "base16ct"
264
+
version = "0.2.0"
265
+
source = "registry+https://github.com/rust-lang/crates.io-index"
266
+
checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
267
+
268
+
[[package]]
269
+
name = "base256emoji"
270
+
version = "1.0.2"
271
+
source = "registry+https://github.com/rust-lang/crates.io-index"
272
+
checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c"
273
+
dependencies = [
274
+
"const-str",
275
+
"match-lookup",
276
+
]
277
+
278
+
[[package]]
279
+
name = "base64"
280
+
version = "0.22.1"
281
+
source = "registry+https://github.com/rust-lang/crates.io-index"
282
+
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
283
+
284
+
[[package]]
285
+
name = "base64ct"
286
+
version = "1.8.1"
287
+
source = "registry+https://github.com/rust-lang/crates.io-index"
288
+
checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a"
289
+
290
+
[[package]]
291
+
name = "bindgen"
292
+
version = "0.72.1"
293
+
source = "registry+https://github.com/rust-lang/crates.io-index"
294
+
checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895"
295
+
dependencies = [
296
+
"bitflags",
297
+
"cexpr",
298
+
"clang-sys",
299
+
"itertools 0.13.0",
300
+
"proc-macro2",
301
+
"quote",
302
+
"regex",
303
+
"rustc-hash",
304
+
"shlex",
305
+
"syn 2.0.111",
306
+
]
307
+
308
+
[[package]]
309
+
name = "bit-set"
310
+
version = "0.8.0"
311
+
source = "registry+https://github.com/rust-lang/crates.io-index"
312
+
checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
313
+
dependencies = [
314
+
"bit-vec",
315
+
]
316
+
317
+
[[package]]
318
+
name = "bit-vec"
319
+
version = "0.8.0"
320
+
source = "registry+https://github.com/rust-lang/crates.io-index"
321
+
checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
322
+
323
+
[[package]]
324
+
name = "bitflags"
325
+
version = "2.10.0"
326
+
source = "registry+https://github.com/rust-lang/crates.io-index"
327
+
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
328
+
329
+
[[package]]
330
+
name = "block-buffer"
331
+
version = "0.10.4"
332
+
source = "registry+https://github.com/rust-lang/crates.io-index"
333
+
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
334
+
dependencies = [
335
+
"generic-array",
336
+
]
337
+
338
+
[[package]]
339
+
name = "bon"
340
+
version = "3.8.1"
341
+
source = "registry+https://github.com/rust-lang/crates.io-index"
342
+
checksum = "ebeb9aaf9329dff6ceb65c689ca3db33dbf15f324909c60e4e5eef5701ce31b1"
343
+
dependencies = [
344
+
"bon-macros",
345
+
"rustversion",
346
+
]
347
+
348
+
[[package]]
349
+
name = "bon-macros"
350
+
version = "3.8.1"
351
+
source = "registry+https://github.com/rust-lang/crates.io-index"
352
+
checksum = "77e9d642a7e3a318e37c2c9427b5a6a48aa1ad55dcd986f3034ab2239045a645"
353
+
dependencies = [
354
+
"darling",
355
+
"ident_case",
356
+
"prettyplease",
357
+
"proc-macro2",
358
+
"quote",
359
+
"rustversion",
360
+
"syn 2.0.111",
361
+
]
362
+
363
+
[[package]]
364
+
name = "borsh"
365
+
version = "1.6.0"
366
+
source = "registry+https://github.com/rust-lang/crates.io-index"
367
+
checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f"
368
+
dependencies = [
369
+
"cfg_aliases",
370
+
]
371
+
372
+
[[package]]
373
+
name = "bracoxide"
374
+
version = "0.1.7"
375
+
source = "registry+https://github.com/rust-lang/crates.io-index"
376
+
checksum = "f5a4d25760c1b6f53db7257292236bc20da1215a1004ee330b37976eeac3af31"
377
+
378
+
[[package]]
379
+
name = "brotli"
380
+
version = "8.0.2"
381
+
source = "registry+https://github.com/rust-lang/crates.io-index"
382
+
checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560"
383
+
dependencies = [
384
+
"alloc-no-stdlib",
385
+
"alloc-stdlib",
386
+
"brotli-decompressor",
387
+
]
388
+
389
+
[[package]]
390
+
name = "brotli-decompressor"
391
+
version = "5.0.0"
392
+
source = "registry+https://github.com/rust-lang/crates.io-index"
393
+
checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03"
394
+
dependencies = [
395
+
"alloc-no-stdlib",
396
+
"alloc-stdlib",
397
+
]
398
+
399
+
[[package]]
400
+
name = "bstr"
401
+
version = "1.12.1"
402
+
source = "registry+https://github.com/rust-lang/crates.io-index"
403
+
checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab"
404
+
dependencies = [
405
+
"memchr",
406
+
"regex-automata",
407
+
"serde",
408
+
]
409
+
410
+
[[package]]
411
+
name = "btree-range-map"
412
+
version = "0.7.2"
413
+
source = "registry+https://github.com/rust-lang/crates.io-index"
414
+
checksum = "1be5c9672446d3800bcbcaabaeba121fe22f1fb25700c4562b22faf76d377c33"
415
+
dependencies = [
416
+
"btree-slab",
417
+
"cc-traits",
418
+
"range-traits",
419
+
"serde",
420
+
"slab",
421
+
]
422
+
423
+
[[package]]
424
+
name = "btree-slab"
425
+
version = "0.6.1"
426
+
source = "registry+https://github.com/rust-lang/crates.io-index"
427
+
checksum = "7a2b56d3029f075c4fa892428a098425b86cef5c89ae54073137ece416aef13c"
428
+
dependencies = [
429
+
"cc-traits",
430
+
"slab",
431
+
"smallvec",
432
+
]
433
+
434
+
[[package]]
435
+
name = "buf-trait"
436
+
version = "0.4.1"
437
+
source = "registry+https://github.com/rust-lang/crates.io-index"
438
+
checksum = "21eaafc770e8c073d6c3facafe7617e774305d4954aa6351b9c452eb37ee17b4"
439
+
dependencies = [
440
+
"zerocopy 0.7.35",
441
+
]
442
+
443
+
[[package]]
444
+
name = "bumpalo"
445
+
version = "3.19.0"
446
+
source = "registry+https://github.com/rust-lang/crates.io-index"
447
+
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
448
+
449
+
[[package]]
450
+
name = "bytecount"
451
+
version = "0.6.9"
452
+
source = "registry+https://github.com/rust-lang/crates.io-index"
453
+
checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e"
454
+
455
+
[[package]]
456
+
name = "byteorder"
457
+
version = "1.5.0"
458
+
source = "registry+https://github.com/rust-lang/crates.io-index"
459
+
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
460
+
461
+
[[package]]
462
+
name = "bytes"
463
+
version = "1.11.0"
464
+
source = "registry+https://github.com/rust-lang/crates.io-index"
465
+
checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3"
466
+
dependencies = [
467
+
"serde",
468
+
]
469
+
470
+
[[package]]
471
+
name = "bytesize"
472
+
version = "2.3.1"
473
+
source = "registry+https://github.com/rust-lang/crates.io-index"
474
+
checksum = "6bd91ee7b2422bcb158d90ef4d14f75ef67f340943fc4149891dcce8f8b972a3"
475
+
476
+
[[package]]
477
+
name = "byteyarn"
478
+
version = "0.5.1"
479
+
source = "registry+https://github.com/rust-lang/crates.io-index"
480
+
checksum = "b93e51d26468a15ea59f8525e0c13dc405db43e644a0b1e6d44346c72cf4cf7b"
481
+
dependencies = [
482
+
"buf-trait",
483
+
]
484
+
485
+
[[package]]
486
+
name = "calamine"
487
+
version = "0.28.0"
488
+
source = "registry+https://github.com/rust-lang/crates.io-index"
489
+
checksum = "15e02a18e79de779a78b0a6ec84a3deed1ff0607dd970a11369f993263f99f1a"
490
+
dependencies = [
491
+
"atoi_simd",
492
+
"byteorder",
493
+
"chrono",
494
+
"codepage",
495
+
"encoding_rs",
496
+
"fast-float2",
497
+
"log",
498
+
"quick-xml 0.37.5",
499
+
"serde",
500
+
"zip",
501
+
]
502
+
503
+
[[package]]
504
+
name = "castaway"
505
+
version = "0.2.4"
506
+
source = "registry+https://github.com/rust-lang/crates.io-index"
507
+
checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a"
508
+
dependencies = [
509
+
"rustversion",
510
+
]
511
+
512
+
[[package]]
513
+
name = "cbor4ii"
514
+
version = "0.2.14"
515
+
source = "registry+https://github.com/rust-lang/crates.io-index"
516
+
checksum = "b544cf8c89359205f4f990d0e6f3828db42df85b5dac95d09157a250eb0749c4"
517
+
dependencies = [
518
+
"serde",
519
+
]
520
+
521
+
[[package]]
522
+
name = "cc"
523
+
version = "1.2.49"
524
+
source = "registry+https://github.com/rust-lang/crates.io-index"
525
+
checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215"
526
+
dependencies = [
527
+
"find-msvc-tools",
528
+
"shlex",
529
+
]
530
+
531
+
[[package]]
532
+
name = "cc-traits"
533
+
version = "2.0.0"
534
+
source = "registry+https://github.com/rust-lang/crates.io-index"
535
+
checksum = "060303ef31ef4a522737e1b1ab68c67916f2a787bb2f4f54f383279adba962b5"
536
+
dependencies = [
537
+
"slab",
538
+
]
539
+
540
+
[[package]]
541
+
name = "cexpr"
542
+
version = "0.6.0"
543
+
source = "registry+https://github.com/rust-lang/crates.io-index"
544
+
checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
545
+
dependencies = [
546
+
"nom",
547
+
]
548
+
549
+
[[package]]
550
+
name = "cfg-if"
551
+
version = "1.0.4"
552
+
source = "registry+https://github.com/rust-lang/crates.io-index"
553
+
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
554
+
555
+
[[package]]
556
+
name = "cfg_aliases"
557
+
version = "0.2.1"
558
+
source = "registry+https://github.com/rust-lang/crates.io-index"
559
+
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
560
+
561
+
[[package]]
562
+
name = "chardetng"
563
+
version = "0.1.17"
564
+
source = "registry+https://github.com/rust-lang/crates.io-index"
565
+
checksum = "14b8f0b65b7b08ae3c8187e8d77174de20cb6777864c6b832d8ad365999cf1ea"
566
+
dependencies = [
567
+
"cfg-if",
568
+
"encoding_rs",
569
+
"memchr",
570
+
]
571
+
572
+
[[package]]
573
+
name = "chrono"
574
+
version = "0.4.42"
575
+
source = "registry+https://github.com/rust-lang/crates.io-index"
576
+
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
577
+
dependencies = [
578
+
"iana-time-zone",
579
+
"js-sys",
580
+
"num-traits",
581
+
"pure-rust-locales",
582
+
"serde",
583
+
"wasm-bindgen",
584
+
"windows-link 0.2.1",
585
+
]
586
+
587
+
[[package]]
588
+
name = "chrono-humanize"
589
+
version = "0.2.3"
590
+
source = "registry+https://github.com/rust-lang/crates.io-index"
591
+
checksum = "799627e6b4d27827a814e837b9d8a504832086081806d45b1afa34dc982b023b"
592
+
dependencies = [
593
+
"chrono",
594
+
]
595
+
596
+
[[package]]
597
+
name = "chrono-tz"
598
+
version = "0.10.4"
599
+
source = "registry+https://github.com/rust-lang/crates.io-index"
600
+
checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3"
601
+
dependencies = [
602
+
"chrono",
603
+
"phf 0.12.1",
604
+
]
605
+
606
+
[[package]]
607
+
name = "ciborium"
608
+
version = "0.2.2"
609
+
source = "registry+https://github.com/rust-lang/crates.io-index"
610
+
checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e"
611
+
dependencies = [
612
+
"ciborium-io",
613
+
"ciborium-ll",
614
+
"serde",
615
+
]
616
+
617
+
[[package]]
618
+
name = "ciborium-io"
619
+
version = "0.2.2"
620
+
source = "registry+https://github.com/rust-lang/crates.io-index"
621
+
checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757"
622
+
623
+
[[package]]
624
+
name = "ciborium-ll"
625
+
version = "0.2.2"
626
+
source = "registry+https://github.com/rust-lang/crates.io-index"
627
+
checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9"
628
+
dependencies = [
629
+
"ciborium-io",
630
+
"half",
631
+
]
632
+
633
+
[[package]]
634
+
name = "cid"
635
+
version = "0.11.1"
636
+
source = "registry+https://github.com/rust-lang/crates.io-index"
637
+
checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a"
638
+
dependencies = [
639
+
"core2",
640
+
"multibase",
641
+
"multihash",
642
+
"serde",
643
+
"serde_bytes",
644
+
"unsigned-varint 0.8.0",
645
+
]
646
+
647
+
[[package]]
648
+
name = "clang-sys"
649
+
version = "1.8.1"
650
+
source = "registry+https://github.com/rust-lang/crates.io-index"
651
+
checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
652
+
dependencies = [
653
+
"glob",
654
+
"libc",
655
+
"libloading",
656
+
]
657
+
658
+
[[package]]
659
+
name = "clap"
660
+
version = "4.5.53"
661
+
source = "registry+https://github.com/rust-lang/crates.io-index"
662
+
checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8"
663
+
dependencies = [
664
+
"clap_builder",
665
+
]
666
+
667
+
[[package]]
668
+
name = "clap_builder"
669
+
version = "4.5.53"
670
+
source = "registry+https://github.com/rust-lang/crates.io-index"
671
+
checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00"
672
+
dependencies = [
673
+
"anstream",
674
+
"anstyle",
675
+
"clap_lex",
676
+
"strsim",
677
+
"terminal_size",
678
+
]
679
+
680
+
[[package]]
681
+
name = "clap_lex"
682
+
version = "0.7.6"
683
+
source = "registry+https://github.com/rust-lang/crates.io-index"
684
+
checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d"
685
+
686
+
[[package]]
687
+
name = "cobs"
688
+
version = "0.3.0"
689
+
source = "registry+https://github.com/rust-lang/crates.io-index"
690
+
checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1"
691
+
dependencies = [
692
+
"thiserror 2.0.17",
693
+
]
694
+
695
+
[[package]]
696
+
name = "codepage"
697
+
version = "0.1.2"
698
+
source = "registry+https://github.com/rust-lang/crates.io-index"
699
+
checksum = "48f68d061bc2828ae826206326e61251aca94c1e4a5305cf52d9138639c918b4"
700
+
dependencies = [
701
+
"encoding_rs",
702
+
]
703
+
704
+
[[package]]
705
+
name = "colorchoice"
706
+
version = "1.0.4"
707
+
source = "registry+https://github.com/rust-lang/crates.io-index"
708
+
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
709
+
710
+
[[package]]
711
+
name = "compression-codecs"
712
+
version = "0.4.35"
713
+
source = "registry+https://github.com/rust-lang/crates.io-index"
714
+
checksum = "b0f7ac3e5b97fdce45e8922fb05cae2c37f7bbd63d30dd94821dacfd8f3f2bf2"
715
+
dependencies = [
716
+
"compression-core",
717
+
"flate2",
718
+
"memchr",
719
+
]
720
+
721
+
[[package]]
722
+
name = "compression-core"
723
+
version = "0.4.31"
724
+
source = "registry+https://github.com/rust-lang/crates.io-index"
725
+
checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d"
726
+
727
+
[[package]]
728
+
name = "console"
729
+
version = "0.15.11"
730
+
source = "registry+https://github.com/rust-lang/crates.io-index"
731
+
checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
732
+
dependencies = [
733
+
"encode_unicode",
734
+
"libc",
735
+
"once_cell",
736
+
"unicode-width 0.2.2",
737
+
"windows-sys 0.59.0",
738
+
]
739
+
740
+
[[package]]
741
+
name = "console"
742
+
version = "0.16.1"
743
+
source = "registry+https://github.com/rust-lang/crates.io-index"
744
+
checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4"
745
+
dependencies = [
746
+
"encode_unicode",
747
+
"libc",
748
+
"once_cell",
749
+
"unicode-width 0.2.2",
750
+
"windows-sys 0.61.2",
751
+
]
752
+
753
+
[[package]]
754
+
name = "console_error_panic_hook"
755
+
version = "0.1.7"
756
+
source = "registry+https://github.com/rust-lang/crates.io-index"
757
+
checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
758
+
dependencies = [
759
+
"cfg-if",
760
+
"wasm-bindgen",
761
+
]
762
+
763
+
[[package]]
764
+
name = "const-oid"
765
+
version = "0.9.6"
766
+
source = "registry+https://github.com/rust-lang/crates.io-index"
767
+
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
768
+
769
+
[[package]]
770
+
name = "const-str"
771
+
version = "0.4.3"
772
+
source = "registry+https://github.com/rust-lang/crates.io-index"
773
+
checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3"
774
+
775
+
[[package]]
776
+
name = "const_format"
777
+
version = "0.2.35"
778
+
source = "registry+https://github.com/rust-lang/crates.io-index"
779
+
checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad"
780
+
dependencies = [
781
+
"const_format_proc_macros",
782
+
]
783
+
784
+
[[package]]
785
+
name = "const_format_proc_macros"
786
+
version = "0.2.34"
787
+
source = "registry+https://github.com/rust-lang/crates.io-index"
788
+
checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744"
789
+
dependencies = [
790
+
"proc-macro2",
791
+
"quote",
792
+
"unicode-xid",
793
+
]
794
+
795
+
[[package]]
796
+
name = "cordyceps"
797
+
version = "0.3.4"
798
+
source = "registry+https://github.com/rust-lang/crates.io-index"
799
+
checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a"
800
+
dependencies = [
801
+
"loom",
802
+
"tracing",
803
+
]
804
+
805
+
[[package]]
806
+
name = "core-foundation"
807
+
version = "0.9.4"
808
+
source = "registry+https://github.com/rust-lang/crates.io-index"
809
+
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
810
+
dependencies = [
811
+
"core-foundation-sys",
812
+
"libc",
813
+
]
814
+
815
+
[[package]]
816
+
name = "core-foundation-sys"
817
+
version = "0.8.7"
818
+
source = "registry+https://github.com/rust-lang/crates.io-index"
819
+
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
820
+
821
+
[[package]]
822
+
name = "core2"
823
+
version = "0.4.0"
824
+
source = "registry+https://github.com/rust-lang/crates.io-index"
825
+
checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
826
+
dependencies = [
827
+
"memchr",
828
+
]
829
+
830
+
[[package]]
831
+
name = "cpufeatures"
832
+
version = "0.2.17"
833
+
source = "registry+https://github.com/rust-lang/crates.io-index"
834
+
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
835
+
dependencies = [
836
+
"libc",
837
+
]
838
+
839
+
[[package]]
840
+
name = "crc32fast"
841
+
version = "1.5.0"
842
+
source = "registry+https://github.com/rust-lang/crates.io-index"
843
+
checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
844
+
dependencies = [
845
+
"cfg-if",
846
+
]
847
+
848
+
[[package]]
849
+
name = "critical-section"
850
+
version = "1.2.0"
851
+
source = "registry+https://github.com/rust-lang/crates.io-index"
852
+
checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
853
+
854
+
[[package]]
855
+
name = "crossbeam-channel"
856
+
version = "0.5.15"
857
+
source = "registry+https://github.com/rust-lang/crates.io-index"
858
+
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
859
+
dependencies = [
860
+
"crossbeam-utils",
861
+
]
862
+
863
+
[[package]]
864
+
name = "crossbeam-deque"
865
+
version = "0.8.6"
866
+
source = "registry+https://github.com/rust-lang/crates.io-index"
867
+
checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
868
+
dependencies = [
869
+
"crossbeam-epoch",
870
+
"crossbeam-utils",
871
+
]
872
+
873
+
[[package]]
874
+
name = "crossbeam-epoch"
875
+
version = "0.9.18"
876
+
source = "registry+https://github.com/rust-lang/crates.io-index"
877
+
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
878
+
dependencies = [
879
+
"crossbeam-utils",
880
+
]
881
+
882
+
[[package]]
883
+
name = "crossbeam-utils"
884
+
version = "0.8.21"
885
+
source = "registry+https://github.com/rust-lang/crates.io-index"
886
+
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
887
+
888
+
[[package]]
889
+
name = "crossterm_winapi"
890
+
version = "0.9.1"
891
+
source = "registry+https://github.com/rust-lang/crates.io-index"
892
+
checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
893
+
dependencies = [
894
+
"winapi",
895
+
]
896
+
897
+
[[package]]
898
+
name = "crunchy"
899
+
version = "0.2.4"
900
+
source = "registry+https://github.com/rust-lang/crates.io-index"
901
+
checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
902
+
903
+
[[package]]
904
+
name = "crypto-bigint"
905
+
version = "0.5.5"
906
+
source = "registry+https://github.com/rust-lang/crates.io-index"
907
+
checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
908
+
dependencies = [
909
+
"generic-array",
910
+
"rand_core 0.6.4",
911
+
"subtle",
912
+
"zeroize",
913
+
]
914
+
915
+
[[package]]
916
+
name = "crypto-common"
917
+
version = "0.1.6"
918
+
source = "registry+https://github.com/rust-lang/crates.io-index"
919
+
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
920
+
dependencies = [
921
+
"generic-array",
922
+
"typenum",
923
+
]
924
+
925
+
[[package]]
926
+
name = "csv"
927
+
version = "1.4.0"
928
+
source = "registry+https://github.com/rust-lang/crates.io-index"
929
+
checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938"
930
+
dependencies = [
931
+
"csv-core",
932
+
"itoa",
933
+
"ryu",
934
+
"serde_core",
935
+
]
936
+
937
+
[[package]]
938
+
name = "csv-core"
939
+
version = "0.1.13"
940
+
source = "registry+https://github.com/rust-lang/crates.io-index"
941
+
checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782"
942
+
dependencies = [
943
+
"memchr",
944
+
]
945
+
946
+
[[package]]
947
+
name = "curve25519-dalek"
948
+
version = "4.1.3"
949
+
source = "registry+https://github.com/rust-lang/crates.io-index"
950
+
checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be"
951
+
dependencies = [
952
+
"cfg-if",
953
+
"cpufeatures",
954
+
"curve25519-dalek-derive",
955
+
"digest",
956
+
"fiat-crypto",
957
+
"rustc_version",
958
+
"subtle",
959
+
"zeroize",
960
+
]
961
+
962
+
[[package]]
963
+
name = "curve25519-dalek-derive"
964
+
version = "0.1.1"
965
+
source = "registry+https://github.com/rust-lang/crates.io-index"
966
+
checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
967
+
dependencies = [
968
+
"proc-macro2",
969
+
"quote",
970
+
"syn 2.0.111",
971
+
]
972
+
973
+
[[package]]
974
+
name = "darling"
975
+
version = "0.21.3"
976
+
source = "registry+https://github.com/rust-lang/crates.io-index"
977
+
checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0"
978
+
dependencies = [
979
+
"darling_core",
980
+
"darling_macro",
981
+
]
982
+
983
+
[[package]]
984
+
name = "darling_core"
985
+
version = "0.21.3"
986
+
source = "registry+https://github.com/rust-lang/crates.io-index"
987
+
checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
988
+
dependencies = [
989
+
"fnv",
990
+
"ident_case",
991
+
"proc-macro2",
992
+
"quote",
993
+
"strsim",
994
+
"syn 2.0.111",
995
+
]
996
+
997
+
[[package]]
998
+
name = "darling_macro"
999
+
version = "0.21.3"
1000
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1001
+
checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
1002
+
dependencies = [
1003
+
"darling_core",
1004
+
"quote",
1005
+
"syn 2.0.111",
1006
+
]
1007
+
1008
+
[[package]]
1009
+
name = "dashmap"
1010
+
version = "6.1.0"
1011
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1012
+
checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf"
1013
+
dependencies = [
1014
+
"cfg-if",
1015
+
"crossbeam-utils",
1016
+
"hashbrown 0.14.5",
1017
+
"lock_api",
1018
+
"once_cell",
1019
+
"parking_lot_core",
1020
+
]
1021
+
1022
+
[[package]]
1023
+
name = "data-encoding"
1024
+
version = "2.9.0"
1025
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1026
+
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
1027
+
1028
+
[[package]]
1029
+
name = "data-encoding-macro"
1030
+
version = "0.1.18"
1031
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1032
+
checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d"
1033
+
dependencies = [
1034
+
"data-encoding",
1035
+
"data-encoding-macro-internal",
1036
+
]
1037
+
1038
+
[[package]]
1039
+
name = "data-encoding-macro-internal"
1040
+
version = "0.1.16"
1041
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1042
+
checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976"
1043
+
dependencies = [
1044
+
"data-encoding",
1045
+
"syn 2.0.111",
1046
+
]
1047
+
1048
+
[[package]]
1049
+
name = "debug_unsafe"
1050
+
version = "0.1.3"
1051
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1052
+
checksum = "85d3cef41d236720ed453e102153a53e4cc3d2fde848c0078a50cf249e8e3e5b"
1053
+
1054
+
[[package]]
1055
+
name = "der"
1056
+
version = "0.7.10"
1057
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1058
+
checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
1059
+
dependencies = [
1060
+
"const-oid",
1061
+
"pem-rfc7468",
1062
+
"zeroize",
1063
+
]
1064
+
1065
+
[[package]]
1066
+
name = "deranged"
1067
+
version = "0.5.5"
1068
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1069
+
checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
1070
+
dependencies = [
1071
+
"powerfmt",
1072
+
"serde_core",
1073
+
]
1074
+
1075
+
[[package]]
1076
+
name = "derive_arbitrary"
1077
+
version = "1.4.2"
1078
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1079
+
checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a"
1080
+
dependencies = [
1081
+
"proc-macro2",
1082
+
"quote",
1083
+
"syn 2.0.111",
1084
+
]
1085
+
1086
+
[[package]]
1087
+
name = "derive_more"
1088
+
version = "1.0.0"
1089
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1090
+
checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
1091
+
dependencies = [
1092
+
"derive_more-impl",
1093
+
]
1094
+
1095
+
[[package]]
1096
+
name = "derive_more-impl"
1097
+
version = "1.0.0"
1098
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1099
+
checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
1100
+
dependencies = [
1101
+
"proc-macro2",
1102
+
"quote",
1103
+
"syn 2.0.111",
1104
+
"unicode-xid",
1105
+
]
1106
+
1107
+
[[package]]
1108
+
name = "devicons"
1109
+
version = "0.6.12"
1110
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1111
+
checksum = "830e47e2f330cf4fdd5a958dcef921b9523ffc21ab6713aa5e77ba2cce03904b"
1112
+
dependencies = [
1113
+
"lazy_static",
1114
+
]
1115
+
1116
+
[[package]]
1117
+
name = "dialoguer"
1118
+
version = "0.11.0"
1119
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1120
+
checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de"
1121
+
dependencies = [
1122
+
"console 0.15.11",
1123
+
"fuzzy-matcher",
1124
+
"shell-words",
1125
+
"thiserror 1.0.69",
1126
+
]
1127
+
1128
+
[[package]]
1129
+
name = "diatomic-waker"
1130
+
version = "0.2.3"
1131
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1132
+
checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c"
1133
+
1134
+
[[package]]
1135
+
name = "digest"
1136
+
version = "0.10.7"
1137
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1138
+
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
1139
+
dependencies = [
1140
+
"block-buffer",
1141
+
"const-oid",
1142
+
"crypto-common",
1143
+
"subtle",
1144
+
]
1145
+
1146
+
[[package]]
1147
+
name = "dirs"
1148
+
version = "6.0.0"
1149
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1150
+
checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
1151
+
dependencies = [
1152
+
"dirs-sys",
1153
+
]
1154
+
1155
+
[[package]]
1156
+
name = "dirs-sys"
1157
+
version = "0.5.0"
1158
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1159
+
checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
1160
+
dependencies = [
1161
+
"libc",
1162
+
"option-ext",
1163
+
"redox_users",
1164
+
"windows-sys 0.61.2",
1165
+
]
1166
+
1167
+
[[package]]
1168
+
name = "displaydoc"
1169
+
version = "0.2.5"
1170
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1171
+
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
1172
+
dependencies = [
1173
+
"proc-macro2",
1174
+
"quote",
1175
+
"syn 2.0.111",
1176
+
]
1177
+
1178
+
[[package]]
1179
+
name = "dtparse"
1180
+
version = "2.0.1"
1181
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1182
+
checksum = "23fb403c0926d35af2cc54d961bc2696a10d40725c08360ef69db04a4c201fd7"
1183
+
dependencies = [
1184
+
"chrono",
1185
+
"lazy_static",
1186
+
"num-traits",
1187
+
"rust_decimal",
1188
+
]
1189
+
1190
+
[[package]]
1191
+
name = "dyn-clone"
1192
+
version = "1.0.20"
1193
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1194
+
checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
1195
+
1196
+
[[package]]
1197
+
name = "ecdsa"
1198
+
version = "0.16.9"
1199
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1200
+
checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
1201
+
dependencies = [
1202
+
"der",
1203
+
"digest",
1204
+
"elliptic-curve",
1205
+
"rfc6979",
1206
+
"signature",
1207
+
"spki",
1208
+
]
1209
+
1210
+
[[package]]
1211
+
name = "ed25519"
1212
+
version = "2.2.3"
1213
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1214
+
checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
1215
+
dependencies = [
1216
+
"pkcs8",
1217
+
"signature",
1218
+
]
1219
+
1220
+
[[package]]
1221
+
name = "ed25519-dalek"
1222
+
version = "2.2.0"
1223
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1224
+
checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9"
1225
+
dependencies = [
1226
+
"curve25519-dalek",
1227
+
"ed25519",
1228
+
"rand_core 0.6.4",
1229
+
"serde",
1230
+
"sha2",
1231
+
"subtle",
1232
+
"zeroize",
1233
+
]
1234
+
1235
+
[[package]]
1236
+
name = "either"
1237
+
version = "1.15.0"
1238
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1239
+
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
1240
+
1241
+
[[package]]
1242
+
name = "elliptic-curve"
1243
+
version = "0.13.8"
1244
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1245
+
checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
1246
+
dependencies = [
1247
+
"base16ct",
1248
+
"crypto-bigint",
1249
+
"digest",
1250
+
"ff",
1251
+
"generic-array",
1252
+
"group",
1253
+
"pem-rfc7468",
1254
+
"pkcs8",
1255
+
"rand_core 0.6.4",
1256
+
"sec1",
1257
+
"subtle",
1258
+
"zeroize",
1259
+
]
1260
+
1261
+
[[package]]
1262
+
name = "embedded-io"
1263
+
version = "0.4.0"
1264
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1265
+
checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"
1266
+
1267
+
[[package]]
1268
+
name = "embedded-io"
1269
+
version = "0.6.1"
1270
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1271
+
checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d"
1272
+
1273
+
[[package]]
1274
+
name = "encode_unicode"
1275
+
version = "1.0.0"
1276
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1277
+
checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
1278
+
1279
+
[[package]]
1280
+
name = "encoding_rs"
1281
+
version = "0.8.35"
1282
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1283
+
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
1284
+
dependencies = [
1285
+
"cfg-if",
1286
+
]
1287
+
1288
+
[[package]]
1289
+
name = "equivalent"
1290
+
version = "1.0.2"
1291
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1292
+
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
1293
+
1294
+
[[package]]
1295
+
name = "erased-serde"
1296
+
version = "0.4.9"
1297
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1298
+
checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3"
1299
+
dependencies = [
1300
+
"serde",
1301
+
"serde_core",
1302
+
"typeid",
1303
+
]
1304
+
1305
+
[[package]]
1306
+
name = "errno"
1307
+
version = "0.3.14"
1308
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1309
+
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
1310
+
dependencies = [
1311
+
"libc",
1312
+
"windows-sys 0.61.2",
1313
+
]
1314
+
1315
+
[[package]]
1316
+
name = "fancy-regex"
1317
+
version = "0.16.2"
1318
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1319
+
checksum = "998b056554fbe42e03ae0e152895cd1a7e1002aec800fdc6635d20270260c46f"
1320
+
dependencies = [
1321
+
"bit-set",
1322
+
"regex-automata",
1323
+
"regex-syntax",
1324
+
]
1325
+
1326
+
[[package]]
1327
+
name = "fast-float2"
1328
+
version = "0.2.3"
1329
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1330
+
checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55"
1331
+
1332
+
[[package]]
1333
+
name = "fastrand"
1334
+
version = "2.3.0"
1335
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1336
+
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
1337
+
1338
+
[[package]]
1339
+
name = "faunu"
1340
+
version = "0.1.0"
1341
+
dependencies = [
1342
+
"ansi_term",
1343
+
"anyhow",
1344
+
"console_error_panic_hook",
1345
+
"futures",
1346
+
"getrandom 0.3.4",
1347
+
"jacquard",
1348
+
"jacquard-repo",
1349
+
"js-sys",
1350
+
"miette",
1351
+
"nu-cmd-extra",
1352
+
"nu-cmd-lang",
1353
+
"nu-command",
1354
+
"nu-engine",
1355
+
"nu-parser",
1356
+
"nu-protocol",
1357
+
"rapidhash",
1358
+
"reqwest",
1359
+
"scc",
1360
+
"serde",
1361
+
"serde_ipld_dagcbor",
1362
+
"serde_json",
1363
+
"url",
1364
+
"vfs",
1365
+
"wasm-bindgen",
1366
+
"wasm-bindgen-futures",
1367
+
"web-sys",
1368
+
]
1369
+
1370
+
[[package]]
1371
+
name = "ff"
1372
+
version = "0.13.1"
1373
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1374
+
checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393"
1375
+
dependencies = [
1376
+
"rand_core 0.6.4",
1377
+
"subtle",
1378
+
]
1379
+
1380
+
[[package]]
1381
+
name = "fiat-crypto"
1382
+
version = "0.2.9"
1383
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1384
+
checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d"
1385
+
1386
+
[[package]]
1387
+
name = "filesize"
1388
+
version = "0.2.0"
1389
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1390
+
checksum = "12d741e2415d4e2e5bd1c1d00409d1a8865a57892c2d689b504365655d237d43"
1391
+
dependencies = [
1392
+
"winapi",
1393
+
]
1394
+
1395
+
[[package]]
1396
+
name = "filetime"
1397
+
version = "0.2.26"
1398
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1399
+
checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed"
1400
+
dependencies = [
1401
+
"cfg-if",
1402
+
"libc",
1403
+
"libredox",
1404
+
"windows-sys 0.60.2",
1405
+
]
1406
+
1407
+
[[package]]
1408
+
name = "find-msvc-tools"
1409
+
version = "0.1.5"
1410
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1411
+
checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
1412
+
1413
+
[[package]]
1414
+
name = "flate2"
1415
+
version = "1.1.5"
1416
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1417
+
checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb"
1418
+
dependencies = [
1419
+
"crc32fast",
1420
+
"libz-rs-sys",
1421
+
"miniz_oxide",
1422
+
]
1423
+
1424
+
[[package]]
1425
+
name = "fluent"
1426
+
version = "0.17.0"
1427
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1428
+
checksum = "8137a6d5a2c50d6b0ebfcb9aaa91a28154e0a70605f112d30cb0cd4a78670477"
1429
+
dependencies = [
1430
+
"fluent-bundle",
1431
+
"unic-langid",
1432
+
]
1433
+
1434
+
[[package]]
1435
+
name = "fluent-bundle"
1436
+
version = "0.16.0"
1437
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1438
+
checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4"
1439
+
dependencies = [
1440
+
"fluent-langneg",
1441
+
"fluent-syntax",
1442
+
"intl-memoizer",
1443
+
"intl_pluralrules",
1444
+
"rustc-hash",
1445
+
"self_cell",
1446
+
"smallvec",
1447
+
"unic-langid",
1448
+
]
1449
+
1450
+
[[package]]
1451
+
name = "fluent-langneg"
1452
+
version = "0.13.1"
1453
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1454
+
checksum = "7eebbe59450baee8282d71676f3bfed5689aeab00b27545e83e5f14b1195e8b0"
1455
+
dependencies = [
1456
+
"unic-langid",
1457
+
]
1458
+
1459
+
[[package]]
1460
+
name = "fluent-syntax"
1461
+
version = "0.12.0"
1462
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1463
+
checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198"
1464
+
dependencies = [
1465
+
"memchr",
1466
+
"thiserror 2.0.17",
1467
+
]
1468
+
1469
+
[[package]]
1470
+
name = "fnv"
1471
+
version = "1.0.7"
1472
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1473
+
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1474
+
1475
+
[[package]]
1476
+
name = "foldhash"
1477
+
version = "0.1.5"
1478
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1479
+
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
1480
+
1481
+
[[package]]
1482
+
name = "form_urlencoded"
1483
+
version = "1.2.2"
1484
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1485
+
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
1486
+
dependencies = [
1487
+
"percent-encoding",
1488
+
]
1489
+
1490
+
[[package]]
1491
+
name = "futf"
1492
+
version = "0.1.5"
1493
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1494
+
checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
1495
+
dependencies = [
1496
+
"mac",
1497
+
"new_debug_unreachable",
1498
+
]
1499
+
1500
+
[[package]]
1501
+
name = "futures"
1502
+
version = "0.3.31"
1503
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1504
+
checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
1505
+
dependencies = [
1506
+
"futures-channel",
1507
+
"futures-core",
1508
+
"futures-executor",
1509
+
"futures-io",
1510
+
"futures-sink",
1511
+
"futures-task",
1512
+
"futures-util",
1513
+
]
1514
+
1515
+
[[package]]
1516
+
name = "futures-buffered"
1517
+
version = "0.2.12"
1518
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1519
+
checksum = "a8e0e1f38ec07ba4abbde21eed377082f17ccb988be9d988a5adbf4bafc118fd"
1520
+
dependencies = [
1521
+
"cordyceps",
1522
+
"diatomic-waker",
1523
+
"futures-core",
1524
+
"pin-project-lite",
1525
+
"spin 0.10.0",
1526
+
]
1527
+
1528
+
[[package]]
1529
+
name = "futures-channel"
1530
+
version = "0.3.31"
1531
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1532
+
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
1533
+
dependencies = [
1534
+
"futures-core",
1535
+
"futures-sink",
1536
+
]
1537
+
1538
+
[[package]]
1539
+
name = "futures-core"
1540
+
version = "0.3.31"
1541
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1542
+
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
1543
+
1544
+
[[package]]
1545
+
name = "futures-executor"
1546
+
version = "0.3.31"
1547
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1548
+
checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
1549
+
dependencies = [
1550
+
"futures-core",
1551
+
"futures-task",
1552
+
"futures-util",
1553
+
]
1554
+
1555
+
[[package]]
1556
+
name = "futures-io"
1557
+
version = "0.3.31"
1558
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1559
+
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
1560
+
1561
+
[[package]]
1562
+
name = "futures-lite"
1563
+
version = "2.6.1"
1564
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1565
+
checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
1566
+
dependencies = [
1567
+
"fastrand",
1568
+
"futures-core",
1569
+
"futures-io",
1570
+
"parking",
1571
+
"pin-project-lite",
1572
+
]
1573
+
1574
+
[[package]]
1575
+
name = "futures-macro"
1576
+
version = "0.3.31"
1577
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1578
+
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
1579
+
dependencies = [
1580
+
"proc-macro2",
1581
+
"quote",
1582
+
"syn 2.0.111",
1583
+
]
1584
+
1585
+
[[package]]
1586
+
name = "futures-sink"
1587
+
version = "0.3.31"
1588
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1589
+
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
1590
+
1591
+
[[package]]
1592
+
name = "futures-task"
1593
+
version = "0.3.31"
1594
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1595
+
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
1596
+
1597
+
[[package]]
1598
+
name = "futures-util"
1599
+
version = "0.3.31"
1600
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1601
+
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
1602
+
dependencies = [
1603
+
"futures-channel",
1604
+
"futures-core",
1605
+
"futures-io",
1606
+
"futures-macro",
1607
+
"futures-sink",
1608
+
"futures-task",
1609
+
"memchr",
1610
+
"pin-project-lite",
1611
+
"pin-utils",
1612
+
"slab",
1613
+
]
1614
+
1615
+
[[package]]
1616
+
name = "fuzzy-matcher"
1617
+
version = "0.3.7"
1618
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1619
+
checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94"
1620
+
dependencies = [
1621
+
"thread_local",
1622
+
]
1623
+
1624
+
[[package]]
1625
+
name = "generator"
1626
+
version = "0.8.7"
1627
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1628
+
checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2"
1629
+
dependencies = [
1630
+
"cc",
1631
+
"cfg-if",
1632
+
"libc",
1633
+
"log",
1634
+
"rustversion",
1635
+
"windows 0.61.3",
1636
+
]
1637
+
1638
+
[[package]]
1639
+
name = "generic-array"
1640
+
version = "0.14.9"
1641
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1642
+
checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
1643
+
dependencies = [
1644
+
"typenum",
1645
+
"version_check",
1646
+
"zeroize",
1647
+
]
1648
+
1649
+
[[package]]
1650
+
name = "getrandom"
1651
+
version = "0.2.16"
1652
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1653
+
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
1654
+
dependencies = [
1655
+
"cfg-if",
1656
+
"js-sys",
1657
+
"libc",
1658
+
"wasi",
1659
+
"wasm-bindgen",
1660
+
]
1661
+
1662
+
[[package]]
1663
+
name = "getrandom"
1664
+
version = "0.3.4"
1665
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1666
+
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
1667
+
dependencies = [
1668
+
"cfg-if",
1669
+
"js-sys",
1670
+
"libc",
1671
+
"r-efi",
1672
+
"wasip2",
1673
+
"wasm-bindgen",
1674
+
]
1675
+
1676
+
[[package]]
1677
+
name = "gimli"
1678
+
version = "0.32.3"
1679
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1680
+
checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
1681
+
1682
+
[[package]]
1683
+
name = "glob"
1684
+
version = "0.3.3"
1685
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1686
+
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
1687
+
1688
+
[[package]]
1689
+
name = "gloo-storage"
1690
+
version = "0.3.0"
1691
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1692
+
checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a"
1693
+
dependencies = [
1694
+
"gloo-utils",
1695
+
"js-sys",
1696
+
"serde",
1697
+
"serde_json",
1698
+
"thiserror 1.0.69",
1699
+
"wasm-bindgen",
1700
+
"web-sys",
1701
+
]
1702
+
1703
+
[[package]]
1704
+
name = "gloo-utils"
1705
+
version = "0.2.0"
1706
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1707
+
checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa"
1708
+
dependencies = [
1709
+
"js-sys",
1710
+
"serde",
1711
+
"serde_json",
1712
+
"wasm-bindgen",
1713
+
"web-sys",
1714
+
]
1715
+
1716
+
[[package]]
1717
+
name = "group"
1718
+
version = "0.13.0"
1719
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1720
+
checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
1721
+
dependencies = [
1722
+
"ff",
1723
+
"rand_core 0.6.4",
1724
+
"subtle",
1725
+
]
1726
+
1727
+
[[package]]
1728
+
name = "h2"
1729
+
version = "0.4.12"
1730
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1731
+
checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
1732
+
dependencies = [
1733
+
"atomic-waker",
1734
+
"bytes",
1735
+
"fnv",
1736
+
"futures-core",
1737
+
"futures-sink",
1738
+
"http",
1739
+
"indexmap 2.12.1",
1740
+
"slab",
1741
+
"tokio",
1742
+
"tokio-util",
1743
+
"tracing",
1744
+
]
1745
+
1746
+
[[package]]
1747
+
name = "half"
1748
+
version = "2.7.1"
1749
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1750
+
checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
1751
+
dependencies = [
1752
+
"cfg-if",
1753
+
"crunchy",
1754
+
"zerocopy 0.8.31",
1755
+
]
1756
+
1757
+
[[package]]
1758
+
name = "hash32"
1759
+
version = "0.2.1"
1760
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1761
+
checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
1762
+
dependencies = [
1763
+
"byteorder",
1764
+
]
1765
+
1766
+
[[package]]
1767
+
name = "hashbrown"
1768
+
version = "0.12.3"
1769
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1770
+
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
1771
+
1772
+
[[package]]
1773
+
name = "hashbrown"
1774
+
version = "0.14.5"
1775
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1776
+
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
1777
+
1778
+
[[package]]
1779
+
name = "hashbrown"
1780
+
version = "0.15.5"
1781
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1782
+
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
1783
+
dependencies = [
1784
+
"allocator-api2",
1785
+
"equivalent",
1786
+
"foldhash",
1787
+
]
1788
+
1789
+
[[package]]
1790
+
name = "hashbrown"
1791
+
version = "0.16.1"
1792
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1793
+
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
1794
+
1795
+
[[package]]
1796
+
name = "heapless"
1797
+
version = "0.7.17"
1798
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1799
+
checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f"
1800
+
dependencies = [
1801
+
"atomic-polyfill",
1802
+
"hash32",
1803
+
"rustc_version",
1804
+
"serde",
1805
+
"spin 0.9.8",
1806
+
"stable_deref_trait",
1807
+
]
1808
+
1809
+
[[package]]
1810
+
name = "heck"
1811
+
version = "0.4.1"
1812
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1813
+
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
1814
+
1815
+
[[package]]
1816
+
name = "heck"
1817
+
version = "0.5.0"
1818
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1819
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
1820
+
1821
+
[[package]]
1822
+
name = "hex"
1823
+
version = "0.4.3"
1824
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1825
+
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
1826
+
1827
+
[[package]]
1828
+
name = "hex_fmt"
1829
+
version = "0.3.0"
1830
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1831
+
checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f"
1832
+
1833
+
[[package]]
1834
+
name = "hmac"
1835
+
version = "0.12.1"
1836
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1837
+
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
1838
+
dependencies = [
1839
+
"digest",
1840
+
]
1841
+
1842
+
[[package]]
1843
+
name = "html5ever"
1844
+
version = "0.27.0"
1845
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1846
+
checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4"
1847
+
dependencies = [
1848
+
"log",
1849
+
"mac",
1850
+
"markup5ever",
1851
+
"proc-macro2",
1852
+
"quote",
1853
+
"syn 2.0.111",
1854
+
]
1855
+
1856
+
[[package]]
1857
+
name = "http"
1858
+
version = "1.4.0"
1859
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1860
+
checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
1861
+
dependencies = [
1862
+
"bytes",
1863
+
"itoa",
1864
+
]
1865
+
1866
+
[[package]]
1867
+
name = "http-body"
1868
+
version = "1.0.1"
1869
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1870
+
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
1871
+
dependencies = [
1872
+
"bytes",
1873
+
"http",
1874
+
]
1875
+
1876
+
[[package]]
1877
+
name = "http-body-util"
1878
+
version = "0.1.3"
1879
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1880
+
checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
1881
+
dependencies = [
1882
+
"bytes",
1883
+
"futures-core",
1884
+
"http",
1885
+
"http-body",
1886
+
"pin-project-lite",
1887
+
]
1888
+
1889
+
[[package]]
1890
+
name = "httparse"
1891
+
version = "1.10.1"
1892
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1893
+
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
1894
+
1895
+
[[package]]
1896
+
name = "human-date-parser"
1897
+
version = "0.3.1"
1898
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1899
+
checksum = "406f83c56de4b2c9183be52ae9a4fefa22c0e0c3d3d7ef80be26eaee11c7110e"
1900
+
dependencies = [
1901
+
"chrono",
1902
+
"pest",
1903
+
"pest_consume",
1904
+
"pest_derive",
1905
+
"thiserror 1.0.69",
1906
+
]
1907
+
1908
+
[[package]]
1909
+
name = "hyper"
1910
+
version = "1.8.1"
1911
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1912
+
checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11"
1913
+
dependencies = [
1914
+
"atomic-waker",
1915
+
"bytes",
1916
+
"futures-channel",
1917
+
"futures-core",
1918
+
"h2",
1919
+
"http",
1920
+
"http-body",
1921
+
"httparse",
1922
+
"itoa",
1923
+
"pin-project-lite",
1924
+
"pin-utils",
1925
+
"smallvec",
1926
+
"tokio",
1927
+
"want",
1928
+
]
1929
+
1930
+
[[package]]
1931
+
name = "hyper-rustls"
1932
+
version = "0.27.7"
1933
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1934
+
checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
1935
+
dependencies = [
1936
+
"http",
1937
+
"hyper",
1938
+
"hyper-util",
1939
+
"rustls",
1940
+
"rustls-pki-types",
1941
+
"tokio",
1942
+
"tokio-rustls",
1943
+
"tower-service",
1944
+
"webpki-roots",
1945
+
]
1946
+
1947
+
[[package]]
1948
+
name = "hyper-util"
1949
+
version = "0.1.19"
1950
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1951
+
checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f"
1952
+
dependencies = [
1953
+
"base64",
1954
+
"bytes",
1955
+
"futures-channel",
1956
+
"futures-core",
1957
+
"futures-util",
1958
+
"http",
1959
+
"http-body",
1960
+
"hyper",
1961
+
"ipnet",
1962
+
"libc",
1963
+
"percent-encoding",
1964
+
"pin-project-lite",
1965
+
"socket2",
1966
+
"system-configuration",
1967
+
"tokio",
1968
+
"tower-service",
1969
+
"tracing",
1970
+
"windows-registry",
1971
+
]
1972
+
1973
+
[[package]]
1974
+
name = "iana-time-zone"
1975
+
version = "0.1.64"
1976
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1977
+
checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
1978
+
dependencies = [
1979
+
"android_system_properties",
1980
+
"core-foundation-sys",
1981
+
"iana-time-zone-haiku",
1982
+
"js-sys",
1983
+
"log",
1984
+
"wasm-bindgen",
1985
+
"windows-core 0.62.2",
1986
+
]
1987
+
1988
+
[[package]]
1989
+
name = "iana-time-zone-haiku"
1990
+
version = "0.1.2"
1991
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1992
+
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
1993
+
dependencies = [
1994
+
"cc",
1995
+
]
1996
+
1997
+
[[package]]
1998
+
name = "icu_collections"
1999
+
version = "2.1.1"
2000
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2001
+
checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
2002
+
dependencies = [
2003
+
"displaydoc",
2004
+
"potential_utf",
2005
+
"yoke",
2006
+
"zerofrom",
2007
+
"zerovec",
2008
+
]
2009
+
2010
+
[[package]]
2011
+
name = "icu_locale_core"
2012
+
version = "2.1.1"
2013
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2014
+
checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
2015
+
dependencies = [
2016
+
"displaydoc",
2017
+
"litemap",
2018
+
"tinystr",
2019
+
"writeable",
2020
+
"zerovec",
2021
+
]
2022
+
2023
+
[[package]]
2024
+
name = "icu_normalizer"
2025
+
version = "2.1.1"
2026
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2027
+
checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
2028
+
dependencies = [
2029
+
"icu_collections",
2030
+
"icu_normalizer_data",
2031
+
"icu_properties",
2032
+
"icu_provider",
2033
+
"smallvec",
2034
+
"zerovec",
2035
+
]
2036
+
2037
+
[[package]]
2038
+
name = "icu_normalizer_data"
2039
+
version = "2.1.1"
2040
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2041
+
checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
2042
+
2043
+
[[package]]
2044
+
name = "icu_properties"
2045
+
version = "2.1.2"
2046
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2047
+
checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec"
2048
+
dependencies = [
2049
+
"icu_collections",
2050
+
"icu_locale_core",
2051
+
"icu_properties_data",
2052
+
"icu_provider",
2053
+
"zerotrie",
2054
+
"zerovec",
2055
+
]
2056
+
2057
+
[[package]]
2058
+
name = "icu_properties_data"
2059
+
version = "2.1.2"
2060
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2061
+
checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af"
2062
+
2063
+
[[package]]
2064
+
name = "icu_provider"
2065
+
version = "2.1.1"
2066
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2067
+
checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
2068
+
dependencies = [
2069
+
"displaydoc",
2070
+
"icu_locale_core",
2071
+
"writeable",
2072
+
"yoke",
2073
+
"zerofrom",
2074
+
"zerotrie",
2075
+
"zerovec",
2076
+
]
2077
+
2078
+
[[package]]
2079
+
name = "ident_case"
2080
+
version = "1.0.1"
2081
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2082
+
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
2083
+
2084
+
[[package]]
2085
+
name = "idna"
2086
+
version = "1.1.0"
2087
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2088
+
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
2089
+
dependencies = [
2090
+
"idna_adapter",
2091
+
"smallvec",
2092
+
"utf8_iter",
2093
+
]
2094
+
2095
+
[[package]]
2096
+
name = "idna_adapter"
2097
+
version = "1.2.1"
2098
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2099
+
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
2100
+
dependencies = [
2101
+
"icu_normalizer",
2102
+
"icu_properties",
2103
+
]
2104
+
2105
+
[[package]]
2106
+
name = "indexmap"
2107
+
version = "1.9.3"
2108
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2109
+
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
2110
+
dependencies = [
2111
+
"autocfg",
2112
+
"hashbrown 0.12.3",
2113
+
"serde",
2114
+
]
2115
+
2116
+
[[package]]
2117
+
name = "indexmap"
2118
+
version = "2.12.1"
2119
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2120
+
checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2"
2121
+
dependencies = [
2122
+
"equivalent",
2123
+
"hashbrown 0.16.1",
2124
+
"serde",
2125
+
"serde_core",
2126
+
]
2127
+
2128
+
[[package]]
2129
+
name = "indicatif"
2130
+
version = "0.18.3"
2131
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2132
+
checksum = "9375e112e4b463ec1b1c6c011953545c65a30164fbab5b581df32b3abf0dcb88"
2133
+
dependencies = [
2134
+
"console 0.16.1",
2135
+
"portable-atomic",
2136
+
"unicode-width 0.2.2",
2137
+
"unit-prefix",
2138
+
"web-time",
2139
+
]
2140
+
2141
+
[[package]]
2142
+
name = "indoc"
2143
+
version = "2.0.7"
2144
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2145
+
checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
2146
+
dependencies = [
2147
+
"rustversion",
2148
+
]
2149
+
2150
+
[[package]]
2151
+
name = "intl-memoizer"
2152
+
version = "0.5.3"
2153
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2154
+
checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f"
2155
+
dependencies = [
2156
+
"type-map",
2157
+
"unic-langid",
2158
+
]
2159
+
2160
+
[[package]]
2161
+
name = "intl_pluralrules"
2162
+
version = "7.0.2"
2163
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2164
+
checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972"
2165
+
dependencies = [
2166
+
"unic-langid",
2167
+
]
2168
+
2169
+
[[package]]
2170
+
name = "inventory"
2171
+
version = "0.3.21"
2172
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2173
+
checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e"
2174
+
dependencies = [
2175
+
"rustversion",
2176
+
]
2177
+
2178
+
[[package]]
2179
+
name = "ipld-core"
2180
+
version = "0.4.2"
2181
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2182
+
checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db"
2183
+
dependencies = [
2184
+
"cid",
2185
+
"serde",
2186
+
"serde_bytes",
2187
+
]
2188
+
2189
+
[[package]]
2190
+
name = "ipnet"
2191
+
version = "2.11.0"
2192
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2193
+
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
2194
+
2195
+
[[package]]
2196
+
name = "iri-string"
2197
+
version = "0.7.9"
2198
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2199
+
checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397"
2200
+
dependencies = [
2201
+
"memchr",
2202
+
"serde",
2203
+
]
2204
+
2205
+
[[package]]
2206
+
name = "iroh-car"
2207
+
version = "0.5.1"
2208
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2209
+
checksum = "cb7f8cd4cb9aa083fba8b52e921764252d0b4dcb1cd6d120b809dbfe1106e81a"
2210
+
dependencies = [
2211
+
"anyhow",
2212
+
"cid",
2213
+
"futures",
2214
+
"serde",
2215
+
"serde_ipld_dagcbor",
2216
+
"thiserror 1.0.69",
2217
+
"tokio",
2218
+
"unsigned-varint 0.7.2",
2219
+
]
2220
+
2221
+
[[package]]
2222
+
name = "is_ci"
2223
+
version = "1.2.0"
2224
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2225
+
checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45"
2226
+
2227
+
[[package]]
2228
+
name = "is_debug"
2229
+
version = "1.1.0"
2230
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2231
+
checksum = "1fe266d2e243c931d8190177f20bf7f24eed45e96f39e87dc49a27b32d12d407"
2232
+
2233
+
[[package]]
2234
+
name = "is_terminal_polyfill"
2235
+
version = "1.70.2"
2236
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2237
+
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
2238
+
2239
+
[[package]]
2240
+
name = "itertools"
2241
+
version = "0.11.0"
2242
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2243
+
checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
2244
+
dependencies = [
2245
+
"either",
2246
+
]
2247
+
2248
+
[[package]]
2249
+
name = "itertools"
2250
+
version = "0.13.0"
2251
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2252
+
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
2253
+
dependencies = [
2254
+
"either",
2255
+
]
2256
+
2257
+
[[package]]
2258
+
name = "itertools"
2259
+
version = "0.14.0"
2260
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2261
+
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
2262
+
dependencies = [
2263
+
"either",
2264
+
]
2265
+
2266
+
[[package]]
2267
+
name = "itoa"
2268
+
version = "1.0.15"
2269
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2270
+
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
2271
+
2272
+
[[package]]
2273
+
name = "jacquard"
2274
+
version = "0.9.4"
2275
+
source = "git+https://tangled.sh/ptr.pet/jacquard#1461248486744fa5d3f487701faba85a27caa19d"
2276
+
dependencies = [
2277
+
"bytes",
2278
+
"getrandom 0.2.16",
2279
+
"gloo-storage",
2280
+
"http",
2281
+
"jacquard-api",
2282
+
"jacquard-common",
2283
+
"jacquard-identity",
2284
+
"jacquard-oauth",
2285
+
"jose-jwk",
2286
+
"miette",
2287
+
"regex",
2288
+
"regex-lite",
2289
+
"reqwest",
2290
+
"ring",
2291
+
"serde",
2292
+
"serde_html_form",
2293
+
"serde_json",
2294
+
"smol_str",
2295
+
"thiserror 2.0.17",
2296
+
"tokio",
2297
+
"trait-variant",
2298
+
"url",
2299
+
"webpage",
2300
+
]
2301
+
2302
+
[[package]]
2303
+
name = "jacquard-api"
2304
+
version = "0.9.2"
2305
+
source = "git+https://tangled.sh/ptr.pet/jacquard#1461248486744fa5d3f487701faba85a27caa19d"
2306
+
dependencies = [
2307
+
"bon",
2308
+
"bytes",
2309
+
"jacquard-common",
2310
+
"jacquard-derive",
2311
+
"jacquard-lexicon",
2312
+
"miette",
2313
+
"rustversion",
2314
+
"serde",
2315
+
"serde_bytes",
2316
+
"serde_ipld_dagcbor",
2317
+
"thiserror 2.0.17",
2318
+
"unicode-segmentation",
2319
+
]
2320
+
2321
+
[[package]]
2322
+
name = "jacquard-common"
2323
+
version = "0.9.2"
2324
+
source = "git+https://tangled.sh/ptr.pet/jacquard#1461248486744fa5d3f487701faba85a27caa19d"
2325
+
dependencies = [
2326
+
"base64",
2327
+
"bon",
2328
+
"bytes",
2329
+
"chrono",
2330
+
"cid",
2331
+
"ed25519-dalek",
2332
+
"getrandom 0.2.16",
2333
+
"getrandom 0.3.4",
2334
+
"http",
2335
+
"ipld-core",
2336
+
"k256",
2337
+
"langtag",
2338
+
"miette",
2339
+
"multibase",
2340
+
"multihash",
2341
+
"ouroboros",
2342
+
"p256",
2343
+
"postcard",
2344
+
"rand 0.9.2",
2345
+
"regex",
2346
+
"regex-lite",
2347
+
"reqwest",
2348
+
"ring",
2349
+
"serde",
2350
+
"serde_bytes",
2351
+
"serde_html_form",
2352
+
"serde_ipld_dagcbor",
2353
+
"serde_json",
2354
+
"signature",
2355
+
"smol_str",
2356
+
"thiserror 2.0.17",
2357
+
"tokio",
2358
+
"tokio-util",
2359
+
"trait-variant",
2360
+
"url",
2361
+
]
2362
+
2363
+
[[package]]
2364
+
name = "jacquard-derive"
2365
+
version = "0.9.4"
2366
+
source = "git+https://tangled.sh/ptr.pet/jacquard#1461248486744fa5d3f487701faba85a27caa19d"
2367
+
dependencies = [
2368
+
"heck 0.5.0",
2369
+
"jacquard-lexicon",
2370
+
"proc-macro2",
2371
+
"quote",
2372
+
"syn 2.0.111",
2373
+
]
2374
+
2375
+
[[package]]
2376
+
name = "jacquard-identity"
2377
+
version = "0.9.2"
2378
+
source = "git+https://tangled.sh/ptr.pet/jacquard#1461248486744fa5d3f487701faba85a27caa19d"
2379
+
dependencies = [
2380
+
"bon",
2381
+
"bytes",
2382
+
"http",
2383
+
"jacquard-api",
2384
+
"jacquard-common",
2385
+
"jacquard-lexicon",
2386
+
"miette",
2387
+
"mini-moka",
2388
+
"n0-future",
2389
+
"percent-encoding",
2390
+
"reqwest",
2391
+
"ring",
2392
+
"serde",
2393
+
"serde_html_form",
2394
+
"serde_json",
2395
+
"thiserror 2.0.17",
2396
+
"tokio",
2397
+
"trait-variant",
2398
+
"url",
2399
+
"urlencoding",
2400
+
]
2401
+
2402
+
[[package]]
2403
+
name = "jacquard-lexicon"
2404
+
version = "0.9.2"
2405
+
source = "git+https://tangled.sh/ptr.pet/jacquard#1461248486744fa5d3f487701faba85a27caa19d"
2406
+
dependencies = [
2407
+
"cid",
2408
+
"dashmap",
2409
+
"heck 0.5.0",
2410
+
"inventory",
2411
+
"jacquard-common",
2412
+
"miette",
2413
+
"multihash",
2414
+
"prettyplease",
2415
+
"proc-macro2",
2416
+
"quote",
2417
+
"serde",
2418
+
"serde_ipld_dagcbor",
2419
+
"serde_json",
2420
+
"serde_repr",
2421
+
"serde_with",
2422
+
"sha2",
2423
+
"syn 2.0.111",
2424
+
"thiserror 2.0.17",
2425
+
"unicode-segmentation",
2426
+
]
2427
+
2428
+
[[package]]
2429
+
name = "jacquard-oauth"
2430
+
version = "0.9.2"
2431
+
source = "git+https://tangled.sh/ptr.pet/jacquard#1461248486744fa5d3f487701faba85a27caa19d"
2432
+
dependencies = [
2433
+
"base64",
2434
+
"bytes",
2435
+
"chrono",
2436
+
"dashmap",
2437
+
"elliptic-curve",
2438
+
"http",
2439
+
"jacquard-common",
2440
+
"jacquard-identity",
2441
+
"jose-jwa",
2442
+
"jose-jwk",
2443
+
"miette",
2444
+
"p256",
2445
+
"rand 0.8.5",
2446
+
"ring",
2447
+
"serde",
2448
+
"serde_html_form",
2449
+
"serde_json",
2450
+
"sha2",
2451
+
"smol_str",
2452
+
"thiserror 2.0.17",
2453
+
"tokio",
2454
+
"trait-variant",
2455
+
"url",
2456
+
]
2457
+
2458
+
[[package]]
2459
+
name = "jacquard-repo"
2460
+
version = "0.9.4"
2461
+
source = "git+https://tangled.sh/ptr.pet/jacquard#1461248486744fa5d3f487701faba85a27caa19d"
2462
+
dependencies = [
2463
+
"bytes",
2464
+
"cid",
2465
+
"ed25519-dalek",
2466
+
"iroh-car",
2467
+
"jacquard-common",
2468
+
"jacquard-derive",
2469
+
"k256",
2470
+
"miette",
2471
+
"multihash",
2472
+
"n0-future",
2473
+
"p256",
2474
+
"serde",
2475
+
"serde_bytes",
2476
+
"serde_ipld_dagcbor",
2477
+
"sha2",
2478
+
"smol_str",
2479
+
"thiserror 2.0.17",
2480
+
"tokio",
2481
+
"trait-variant",
2482
+
]
2483
+
2484
+
[[package]]
2485
+
name = "jose-b64"
2486
+
version = "0.1.2"
2487
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2488
+
checksum = "bec69375368709666b21c76965ce67549f2d2db7605f1f8707d17c9656801b56"
2489
+
dependencies = [
2490
+
"base64ct",
2491
+
"serde",
2492
+
"subtle",
2493
+
"zeroize",
2494
+
]
2495
+
2496
+
[[package]]
2497
+
name = "jose-jwa"
2498
+
version = "0.1.2"
2499
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2500
+
checksum = "9ab78e053fe886a351d67cf0d194c000f9d0dcb92906eb34d853d7e758a4b3a7"
2501
+
dependencies = [
2502
+
"serde",
2503
+
]
2504
+
2505
+
[[package]]
2506
+
name = "jose-jwk"
2507
+
version = "0.1.2"
2508
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2509
+
checksum = "280fa263807fe0782ecb6f2baadc28dffc04e00558a58e33bfdb801d11fd58e7"
2510
+
dependencies = [
2511
+
"jose-b64",
2512
+
"jose-jwa",
2513
+
"p256",
2514
+
"p384",
2515
+
"rsa",
2516
+
"serde",
2517
+
"zeroize",
2518
+
]
2519
+
2520
+
[[package]]
2521
+
name = "js-sys"
2522
+
version = "0.3.81"
2523
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2524
+
checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305"
2525
+
dependencies = [
2526
+
"once_cell",
2527
+
"wasm-bindgen",
2528
+
]
2529
+
2530
+
[[package]]
2531
+
name = "k256"
2532
+
version = "0.13.4"
2533
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2534
+
checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b"
2535
+
dependencies = [
2536
+
"cfg-if",
2537
+
"ecdsa",
2538
+
"elliptic-curve",
2539
+
"once_cell",
2540
+
"sha2",
2541
+
"signature",
2542
+
]
2543
+
2544
+
[[package]]
2545
+
name = "langtag"
2546
+
version = "0.4.0"
2547
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2548
+
checksum = "9ecb4c689a30e48ebeaa14237f34037e300dd072e6ad21a9ec72e810ff3c6600"
2549
+
dependencies = [
2550
+
"serde",
2551
+
"static-regular-grammar",
2552
+
"thiserror 1.0.69",
2553
+
]
2554
+
2555
+
[[package]]
2556
+
name = "lazy_static"
2557
+
version = "1.5.0"
2558
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2559
+
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
2560
+
dependencies = [
2561
+
"spin 0.9.8",
2562
+
]
2563
+
2564
+
[[package]]
2565
+
name = "lean_string"
2566
+
version = "0.5.1"
2567
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2568
+
checksum = "962df00ba70ac8d5ca5c064e17e5c3d090c087fd8d21aa45096c716b169da514"
2569
+
dependencies = [
2570
+
"castaway",
2571
+
"itoa",
2572
+
"ryu",
2573
+
"serde",
2574
+
]
2575
+
2576
+
[[package]]
2577
+
name = "libc"
2578
+
version = "0.2.178"
2579
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2580
+
checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091"
2581
+
2582
+
[[package]]
2583
+
name = "libloading"
2584
+
version = "0.8.9"
2585
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2586
+
checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
2587
+
dependencies = [
2588
+
"cfg-if",
2589
+
"windows-link 0.2.1",
2590
+
]
2591
+
2592
+
[[package]]
2593
+
name = "libm"
2594
+
version = "0.2.15"
2595
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2596
+
checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
2597
+
2598
+
[[package]]
2599
+
name = "libproc"
2600
+
version = "0.14.11"
2601
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2602
+
checksum = "a54ad7278b8bc5301d5ffd2a94251c004feb971feba96c971ea4063645990757"
2603
+
dependencies = [
2604
+
"bindgen",
2605
+
"errno",
2606
+
"libc",
2607
+
]
2608
+
2609
+
[[package]]
2610
+
name = "libredox"
2611
+
version = "0.1.10"
2612
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2613
+
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
2614
+
dependencies = [
2615
+
"bitflags",
2616
+
"libc",
2617
+
"redox_syscall",
2618
+
]
2619
+
2620
+
[[package]]
2621
+
name = "libz-rs-sys"
2622
+
version = "0.5.4"
2623
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2624
+
checksum = "15413ef615ad868d4d65dce091cb233b229419c7c0c4bcaa746c0901c49ff39c"
2625
+
dependencies = [
2626
+
"zlib-rs",
2627
+
]
2628
+
2629
+
[[package]]
2630
+
name = "linked-hash-map"
2631
+
version = "0.5.6"
2632
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2633
+
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
2634
+
dependencies = [
2635
+
"serde",
2636
+
]
2637
+
2638
+
[[package]]
2639
+
name = "linux-raw-sys"
2640
+
version = "0.4.15"
2641
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2642
+
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
2643
+
2644
+
[[package]]
2645
+
name = "linux-raw-sys"
2646
+
version = "0.11.0"
2647
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2648
+
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
2649
+
2650
+
[[package]]
2651
+
name = "litemap"
2652
+
version = "0.8.1"
2653
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2654
+
checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
2655
+
2656
+
[[package]]
2657
+
name = "lock_api"
2658
+
version = "0.4.14"
2659
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2660
+
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
2661
+
dependencies = [
2662
+
"scopeguard",
2663
+
]
2664
+
2665
+
[[package]]
2666
+
name = "log"
2667
+
version = "0.4.29"
2668
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2669
+
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
2670
+
2671
+
[[package]]
2672
+
name = "loom"
2673
+
version = "0.7.2"
2674
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2675
+
checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca"
2676
+
dependencies = [
2677
+
"cfg-if",
2678
+
"generator",
2679
+
"scoped-tls",
2680
+
"tracing",
2681
+
"tracing-subscriber",
2682
+
]
2683
+
2684
+
[[package]]
2685
+
name = "lru"
2686
+
version = "0.12.5"
2687
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2688
+
checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
2689
+
dependencies = [
2690
+
"hashbrown 0.15.5",
2691
+
]
2692
+
2693
+
[[package]]
2694
+
name = "lru-slab"
2695
+
version = "0.1.2"
2696
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2697
+
checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
2698
+
2699
+
[[package]]
2700
+
name = "lscolors"
2701
+
version = "0.20.0"
2702
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2703
+
checksum = "61183da5de8ba09a58e330d55e5ea796539d8443bd00fdeb863eac39724aa4ab"
2704
+
dependencies = [
2705
+
"aho-corasick",
2706
+
"nu-ansi-term",
2707
+
]
2708
+
2709
+
[[package]]
2710
+
name = "mac"
2711
+
version = "0.1.1"
2712
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2713
+
checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
2714
+
2715
+
[[package]]
2716
+
name = "mach2"
2717
+
version = "0.4.3"
2718
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2719
+
checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44"
2720
+
dependencies = [
2721
+
"libc",
2722
+
]
2723
+
2724
+
[[package]]
2725
+
name = "markup5ever"
2726
+
version = "0.12.1"
2727
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2728
+
checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45"
2729
+
dependencies = [
2730
+
"log",
2731
+
"phf 0.11.3",
2732
+
"phf_codegen",
2733
+
"string_cache",
2734
+
"string_cache_codegen",
2735
+
"tendril",
2736
+
]
2737
+
2738
+
[[package]]
2739
+
name = "markup5ever_rcdom"
2740
+
version = "0.3.0"
2741
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2742
+
checksum = "edaa21ab3701bfee5099ade5f7e1f84553fd19228cf332f13cd6e964bf59be18"
2743
+
dependencies = [
2744
+
"html5ever",
2745
+
"markup5ever",
2746
+
"tendril",
2747
+
"xml5ever",
2748
+
]
2749
+
2750
+
[[package]]
2751
+
name = "match-lookup"
2752
+
version = "0.1.1"
2753
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2754
+
checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e"
2755
+
dependencies = [
2756
+
"proc-macro2",
2757
+
"quote",
2758
+
"syn 1.0.109",
2759
+
]
2760
+
2761
+
[[package]]
2762
+
name = "matchers"
2763
+
version = "0.2.0"
2764
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2765
+
checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
2766
+
dependencies = [
2767
+
"regex-automata",
2768
+
]
2769
+
2770
+
[[package]]
2771
+
name = "md-5"
2772
+
version = "0.10.6"
2773
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2774
+
checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
2775
+
dependencies = [
2776
+
"cfg-if",
2777
+
"digest",
2778
+
]
2779
+
2780
+
[[package]]
2781
+
name = "memchr"
2782
+
version = "2.7.6"
2783
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2784
+
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
2785
+
2786
+
[[package]]
2787
+
name = "memoffset"
2788
+
version = "0.9.1"
2789
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2790
+
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
2791
+
dependencies = [
2792
+
"autocfg",
2793
+
]
2794
+
2795
+
[[package]]
2796
+
name = "miette"
2797
+
version = "7.6.0"
2798
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2799
+
checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7"
2800
+
dependencies = [
2801
+
"backtrace",
2802
+
"backtrace-ext",
2803
+
"cfg-if",
2804
+
"miette-derive",
2805
+
"owo-colors",
2806
+
"supports-color",
2807
+
"supports-hyperlinks",
2808
+
"supports-unicode",
2809
+
"terminal_size",
2810
+
"textwrap",
2811
+
"unicode-width 0.1.14",
2812
+
]
2813
+
2814
+
[[package]]
2815
+
name = "miette-derive"
2816
+
version = "7.6.0"
2817
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2818
+
checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b"
2819
+
dependencies = [
2820
+
"proc-macro2",
2821
+
"quote",
2822
+
"syn 2.0.111",
2823
+
]
2824
+
2825
+
[[package]]
2826
+
name = "mime"
2827
+
version = "0.3.17"
2828
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2829
+
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
2830
+
2831
+
[[package]]
2832
+
name = "mime_guess"
2833
+
version = "2.0.5"
2834
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2835
+
checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
2836
+
dependencies = [
2837
+
"mime",
2838
+
"unicase",
2839
+
]
2840
+
2841
+
[[package]]
2842
+
name = "mini-moka"
2843
+
version = "0.10.99"
2844
+
source = "git+https://tangled.sh/ptr.pet/jacquard#1461248486744fa5d3f487701faba85a27caa19d"
2845
+
dependencies = [
2846
+
"crossbeam-channel",
2847
+
"crossbeam-utils",
2848
+
"dashmap",
2849
+
"smallvec",
2850
+
"tagptr",
2851
+
"triomphe",
2852
+
"web-time",
2853
+
]
2854
+
2855
+
[[package]]
2856
+
name = "minimal-lexical"
2857
+
version = "0.2.1"
2858
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2859
+
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
2860
+
2861
+
[[package]]
2862
+
name = "miniz_oxide"
2863
+
version = "0.8.9"
2864
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2865
+
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
2866
+
dependencies = [
2867
+
"adler2",
2868
+
"simd-adler32",
2869
+
]
2870
+
2871
+
[[package]]
2872
+
name = "mio"
2873
+
version = "1.1.1"
2874
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2875
+
checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc"
2876
+
dependencies = [
2877
+
"libc",
2878
+
"wasi",
2879
+
"windows-sys 0.61.2",
2880
+
]
2881
+
2882
+
[[package]]
2883
+
name = "multibase"
2884
+
version = "0.9.2"
2885
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2886
+
checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77"
2887
+
dependencies = [
2888
+
"base-x",
2889
+
"base256emoji",
2890
+
"data-encoding",
2891
+
"data-encoding-macro",
2892
+
]
2893
+
2894
+
[[package]]
2895
+
name = "multihash"
2896
+
version = "0.19.3"
2897
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2898
+
checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d"
2899
+
dependencies = [
2900
+
"core2",
2901
+
"serde",
2902
+
"unsigned-varint 0.8.0",
2903
+
]
2904
+
2905
+
[[package]]
2906
+
name = "n0-future"
2907
+
version = "0.1.3"
2908
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2909
+
checksum = "7bb0e5d99e681ab3c938842b96fcb41bf8a7bb4bfdb11ccbd653a7e83e06c794"
2910
+
dependencies = [
2911
+
"cfg_aliases",
2912
+
"derive_more",
2913
+
"futures-buffered",
2914
+
"futures-lite",
2915
+
"futures-util",
2916
+
"js-sys",
2917
+
"pin-project",
2918
+
"send_wrapper",
2919
+
"tokio",
2920
+
"tokio-util",
2921
+
"wasm-bindgen",
2922
+
"wasm-bindgen-futures",
2923
+
"web-time",
2924
+
]
2925
+
2926
+
[[package]]
2927
+
name = "new_debug_unreachable"
2928
+
version = "1.0.6"
2929
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2930
+
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
2931
+
2932
+
[[package]]
2933
+
name = "nix"
2934
+
version = "0.30.1"
2935
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2936
+
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
2937
+
dependencies = [
2938
+
"bitflags",
2939
+
"cfg-if",
2940
+
"cfg_aliases",
2941
+
"libc",
2942
+
]
2943
+
2944
+
[[package]]
2945
+
name = "nom"
2946
+
version = "7.1.3"
2947
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2948
+
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
2949
+
dependencies = [
2950
+
"memchr",
2951
+
"minimal-lexical",
2952
+
]
2953
+
2954
+
[[package]]
2955
+
name = "ntapi"
2956
+
version = "0.4.1"
2957
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2958
+
checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
2959
+
dependencies = [
2960
+
"winapi",
2961
+
]
2962
+
2963
+
[[package]]
2964
+
name = "nu-ansi-term"
2965
+
version = "0.50.3"
2966
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2967
+
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
2968
+
dependencies = [
2969
+
"windows-sys 0.61.2",
2970
+
]
2971
+
2972
+
[[package]]
2973
+
name = "nu-cmd-base"
2974
+
version = "0.109.1"
2975
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2976
+
checksum = "2460ee389a43b935aa18ef5ed9fa8275bdf617e8c05eba7c2b82f92effd2132b"
2977
+
dependencies = [
2978
+
"indexmap 2.12.1",
2979
+
"miette",
2980
+
"nu-engine",
2981
+
"nu-parser",
2982
+
"nu-path",
2983
+
"nu-protocol",
2984
+
]
2985
+
2986
+
[[package]]
2987
+
name = "nu-cmd-extra"
2988
+
version = "0.109.1"
2989
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2990
+
checksum = "96f1ac416cd5182ca427a1007c9d0193feaa746aeb54b5320251faad41481cfe"
2991
+
dependencies = [
2992
+
"fancy-regex",
2993
+
"heck 0.5.0",
2994
+
"itertools 0.14.0",
2995
+
"mime",
2996
+
"nu-ansi-term",
2997
+
"nu-cmd-base",
2998
+
"nu-engine",
2999
+
"nu-json",
3000
+
"nu-parser",
3001
+
"nu-pretty-hex",
3002
+
"nu-protocol",
3003
+
"nu-utils",
3004
+
"num-traits",
3005
+
"rust-embed",
3006
+
"serde",
3007
+
"serde_urlencoded",
3008
+
"v_htmlescape",
3009
+
]
3010
+
3011
+
[[package]]
3012
+
name = "nu-cmd-lang"
3013
+
version = "0.109.1"
3014
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3015
+
checksum = "5b266674d87b816264f6aff8cca351e6ebb156f34faab45d7d728c2aba005495"
3016
+
dependencies = [
3017
+
"itertools 0.14.0",
3018
+
"nu-cmd-base",
3019
+
"nu-engine",
3020
+
"nu-experimental",
3021
+
"nu-parser",
3022
+
"nu-protocol",
3023
+
"nu-utils",
3024
+
"shadow-rs",
3025
+
]
3026
+
3027
+
[[package]]
3028
+
name = "nu-color-config"
3029
+
version = "0.109.1"
3030
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3031
+
checksum = "440a59265caf5468af6ff186e656bc6e6d349c08662ee959b116375597864206"
3032
+
dependencies = [
3033
+
"nu-ansi-term",
3034
+
"nu-engine",
3035
+
"nu-json",
3036
+
"nu-protocol",
3037
+
"serde",
3038
+
]
3039
+
3040
+
[[package]]
3041
+
name = "nu-command"
3042
+
version = "0.109.1"
3043
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3044
+
checksum = "5380a9cf6ef0f482280b71d6e78fa8d4bc1b2b43aa8f0b1fa786f96087c2d500"
3045
+
dependencies = [
3046
+
"alphanumeric-sort",
3047
+
"base64",
3048
+
"bracoxide",
3049
+
"brotli",
3050
+
"byteorder",
3051
+
"bytesize",
3052
+
"calamine",
3053
+
"chardetng",
3054
+
"chrono",
3055
+
"chrono-humanize",
3056
+
"chrono-tz",
3057
+
"csv",
3058
+
"data-encoding",
3059
+
"devicons",
3060
+
"dialoguer",
3061
+
"digest",
3062
+
"dtparse",
3063
+
"encoding_rs",
3064
+
"fancy-regex",
3065
+
"filesize",
3066
+
"filetime",
3067
+
"fuzzy-matcher",
3068
+
"http",
3069
+
"human-date-parser",
3070
+
"indexmap 2.12.1",
3071
+
"indicatif",
3072
+
"itertools 0.14.0",
3073
+
"log",
3074
+
"lscolors",
3075
+
"md-5",
3076
+
"mime",
3077
+
"mime_guess",
3078
+
"nix",
3079
+
"nu-ansi-term",
3080
+
"nu-cmd-base",
3081
+
"nu-color-config",
3082
+
"nu-engine",
3083
+
"nu-experimental",
3084
+
"nu-glob",
3085
+
"nu-json",
3086
+
"nu-parser",
3087
+
"nu-path",
3088
+
"nu-pretty-hex",
3089
+
"nu-protocol",
3090
+
"nu-system",
3091
+
"nu-table",
3092
+
"nu-term-grid",
3093
+
"nu-utils",
3094
+
"num-format",
3095
+
"num-traits",
3096
+
"nuon",
3097
+
"oem_cp",
3098
+
"pathdiff",
3099
+
"percent-encoding",
3100
+
"print-positions",
3101
+
"procfs 0.17.0",
3102
+
"quick-xml 0.38.4",
3103
+
"rayon",
3104
+
"rmp",
3105
+
"roxmltree",
3106
+
"scopeguard",
3107
+
"serde",
3108
+
"serde_json",
3109
+
"serde_urlencoded",
3110
+
"serde_yaml",
3111
+
"sha2",
3112
+
"strum",
3113
+
"sysinfo",
3114
+
"tabled",
3115
+
"titlecase",
3116
+
"toml",
3117
+
"uds_windows",
3118
+
"umask",
3119
+
"unicode-segmentation",
3120
+
"unicode-width 0.2.2",
3121
+
"url",
3122
+
"uucore",
3123
+
"v_htmlescape",
3124
+
"wax",
3125
+
"web-time",
3126
+
"windows 0.62.2",
3127
+
"winreg",
3128
+
]
3129
+
3130
+
[[package]]
3131
+
name = "nu-derive-value"
3132
+
version = "0.109.1"
3133
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3134
+
checksum = "1465d2d3ada6004cb6689f269a08c70ba81056231e2b5392d1e0ccf5825f81cb"
3135
+
dependencies = [
3136
+
"heck 0.5.0",
3137
+
"proc-macro-error2",
3138
+
"proc-macro2",
3139
+
"quote",
3140
+
"syn 2.0.111",
3141
+
]
3142
+
3143
+
[[package]]
3144
+
name = "nu-engine"
3145
+
version = "0.109.1"
3146
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3147
+
checksum = "b3b777faf7c5180fe5d7f67d83c44fd14138d91f2938a36494ed6ac66b7160f3"
3148
+
dependencies = [
3149
+
"fancy-regex",
3150
+
"log",
3151
+
"nu-experimental",
3152
+
"nu-glob",
3153
+
"nu-path",
3154
+
"nu-protocol",
3155
+
"nu-utils",
3156
+
]
3157
+
3158
+
[[package]]
3159
+
name = "nu-experimental"
3160
+
version = "0.109.1"
3161
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3162
+
checksum = "73dd212a1afdad646a38c00579a0988264880aeb97fee820b349a28cdcc04df2"
3163
+
dependencies = [
3164
+
"itertools 0.14.0",
3165
+
"thiserror 2.0.17",
3166
+
]
3167
+
3168
+
[[package]]
3169
+
name = "nu-glob"
3170
+
version = "0.109.1"
3171
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3172
+
checksum = "15aa2c17078926f14e393b4b708e69f228cb6fd4c81136839bde82772bdde1b5"
3173
+
3174
+
[[package]]
3175
+
name = "nu-json"
3176
+
version = "0.109.1"
3177
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3178
+
checksum = "7ca63927a3c1c4fb889e80dc5cfbe754daed822a7b503cc74e600627c2aa8435"
3179
+
dependencies = [
3180
+
"linked-hash-map",
3181
+
"nu-utils",
3182
+
"num-traits",
3183
+
"serde",
3184
+
"serde_json",
3185
+
]
3186
+
3187
+
[[package]]
3188
+
name = "nu-parser"
3189
+
version = "0.109.1"
3190
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3191
+
checksum = "237172636312c3566272511a00c1dc355202406c376e1546a45a33c65e81babe"
3192
+
dependencies = [
3193
+
"bytesize",
3194
+
"chrono",
3195
+
"itertools 0.14.0",
3196
+
"log",
3197
+
"nu-engine",
3198
+
"nu-path",
3199
+
"nu-protocol",
3200
+
"nu-utils",
3201
+
"serde_json",
3202
+
]
3203
+
3204
+
[[package]]
3205
+
name = "nu-path"
3206
+
version = "0.109.1"
3207
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3208
+
checksum = "dde9d8ba26f62c07176c0237a36f38ce964ab3a0dcfb6aab1feea7515d1c6594"
3209
+
dependencies = [
3210
+
"dirs",
3211
+
"omnipath",
3212
+
"pwd",
3213
+
"ref-cast",
3214
+
]
3215
+
3216
+
[[package]]
3217
+
name = "nu-pretty-hex"
3218
+
version = "0.109.1"
3219
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3220
+
checksum = "02561546604ac4c443bad65d9485ab3965154cad0873340e2e9ebe72d4a18aef"
3221
+
dependencies = [
3222
+
"nu-ansi-term",
3223
+
]
3224
+
3225
+
[[package]]
3226
+
name = "nu-protocol"
3227
+
version = "0.109.1"
3228
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3229
+
checksum = "038943300ca9de0924fef1c795a7dd16ffc67105629477cf163e8ee6bad95ea6"
3230
+
dependencies = [
3231
+
"bytes",
3232
+
"chrono",
3233
+
"chrono-humanize",
3234
+
"dirs",
3235
+
"dirs-sys",
3236
+
"fancy-regex",
3237
+
"heck 0.5.0",
3238
+
"indexmap 2.12.1",
3239
+
"log",
3240
+
"lru",
3241
+
"memchr",
3242
+
"miette",
3243
+
"nix",
3244
+
"nu-derive-value",
3245
+
"nu-experimental",
3246
+
"nu-glob",
3247
+
"nu-path",
3248
+
"nu-system",
3249
+
"nu-utils",
3250
+
"num-format",
3251
+
"serde",
3252
+
"serde_json",
3253
+
"strum",
3254
+
"strum_macros",
3255
+
"thiserror 2.0.17",
3256
+
"typetag",
3257
+
"web-time",
3258
+
"windows 0.62.2",
3259
+
"windows-sys 0.61.2",
3260
+
]
3261
+
3262
+
[[package]]
3263
+
name = "nu-system"
3264
+
version = "0.109.1"
3265
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3266
+
checksum = "46be734cc9b19e09a9665769e14360e13e6978490056ba5c8bfad7dd0537ea83"
3267
+
dependencies = [
3268
+
"chrono",
3269
+
"itertools 0.14.0",
3270
+
"libc",
3271
+
"libproc",
3272
+
"log",
3273
+
"mach2",
3274
+
"nix",
3275
+
"ntapi",
3276
+
"procfs 0.17.0",
3277
+
"sysinfo",
3278
+
"web-time",
3279
+
"windows 0.62.2",
3280
+
]
3281
+
3282
+
[[package]]
3283
+
name = "nu-table"
3284
+
version = "0.109.1"
3285
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3286
+
checksum = "aa96502adbb69c838d8469715327ba2dacf2c4f5254a4cdee7536e2c6849de1d"
3287
+
dependencies = [
3288
+
"fancy-regex",
3289
+
"nu-ansi-term",
3290
+
"nu-color-config",
3291
+
"nu-engine",
3292
+
"nu-protocol",
3293
+
"nu-utils",
3294
+
"tabled",
3295
+
]
3296
+
3297
+
[[package]]
3298
+
name = "nu-term-grid"
3299
+
version = "0.109.1"
3300
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3301
+
checksum = "2b6545b361413e88bea37c4b9c7aa97a7fd7a11d84a5d330a72242367fd1d2df"
3302
+
dependencies = [
3303
+
"nu-utils",
3304
+
"unicode-width 0.2.2",
3305
+
]
3306
+
3307
+
[[package]]
3308
+
name = "nu-utils"
3309
+
version = "0.109.1"
3310
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3311
+
checksum = "3f8eb43c29cc5bce85f87defdadc2cca964fa434d808af37036a7cb78f3c68e9"
3312
+
dependencies = [
3313
+
"byteyarn",
3314
+
"crossterm_winapi",
3315
+
"fancy-regex",
3316
+
"lean_string",
3317
+
"log",
3318
+
"lscolors",
3319
+
"memchr",
3320
+
"nix",
3321
+
"num-format",
3322
+
"serde",
3323
+
"serde_json",
3324
+
"strip-ansi-escapes",
3325
+
"sys-locale",
3326
+
"unicase",
3327
+
]
3328
+
3329
+
[[package]]
3330
+
name = "num-bigint-dig"
3331
+
version = "0.8.6"
3332
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3333
+
checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7"
3334
+
dependencies = [
3335
+
"lazy_static",
3336
+
"libm",
3337
+
"num-integer",
3338
+
"num-iter",
3339
+
"num-traits",
3340
+
"rand 0.8.5",
3341
+
"smallvec",
3342
+
"zeroize",
3343
+
]
3344
+
3345
+
[[package]]
3346
+
name = "num-conv"
3347
+
version = "0.1.0"
3348
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3349
+
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
3350
+
3351
+
[[package]]
3352
+
name = "num-format"
3353
+
version = "0.4.4"
3354
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3355
+
checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3"
3356
+
dependencies = [
3357
+
"arrayvec",
3358
+
"itoa",
3359
+
]
3360
+
3361
+
[[package]]
3362
+
name = "num-integer"
3363
+
version = "0.1.46"
3364
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3365
+
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
3366
+
dependencies = [
3367
+
"num-traits",
3368
+
]
3369
+
3370
+
[[package]]
3371
+
name = "num-iter"
3372
+
version = "0.1.45"
3373
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3374
+
checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
3375
+
dependencies = [
3376
+
"autocfg",
3377
+
"num-integer",
3378
+
"num-traits",
3379
+
]
3380
+
3381
+
[[package]]
3382
+
name = "num-traits"
3383
+
version = "0.2.19"
3384
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3385
+
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
3386
+
dependencies = [
3387
+
"autocfg",
3388
+
"libm",
3389
+
]
3390
+
3391
+
[[package]]
3392
+
name = "num_threads"
3393
+
version = "0.1.7"
3394
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3395
+
checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
3396
+
dependencies = [
3397
+
"libc",
3398
+
]
3399
+
3400
+
[[package]]
3401
+
name = "number_prefix"
3402
+
version = "0.4.0"
3403
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3404
+
checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
3405
+
3406
+
[[package]]
3407
+
name = "nuon"
3408
+
version = "0.109.1"
3409
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3410
+
checksum = "f8c4f2e4460a6cf00e50cddf0840f954874d645be3af5196c5858c70c069d8c0"
3411
+
dependencies = [
3412
+
"nu-engine",
3413
+
"nu-parser",
3414
+
"nu-protocol",
3415
+
"nu-utils",
3416
+
]
3417
+
3418
+
[[package]]
3419
+
name = "objc2-core-foundation"
3420
+
version = "0.3.2"
3421
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3422
+
checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
3423
+
dependencies = [
3424
+
"bitflags",
3425
+
]
3426
+
3427
+
[[package]]
3428
+
name = "objc2-io-kit"
3429
+
version = "0.3.2"
3430
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3431
+
checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15"
3432
+
dependencies = [
3433
+
"libc",
3434
+
"objc2-core-foundation",
3435
+
]
3436
+
3437
+
[[package]]
3438
+
name = "object"
3439
+
version = "0.37.3"
3440
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3441
+
checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe"
3442
+
dependencies = [
3443
+
"memchr",
3444
+
]
3445
+
3446
+
[[package]]
3447
+
name = "oem_cp"
3448
+
version = "2.1.1"
3449
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3450
+
checksum = "a4b91a3be3b523e58bd7a9d839b0bf65720331db50ddfba5ace0680f8c6f58a1"
3451
+
dependencies = [
3452
+
"phf 0.11.3",
3453
+
]
3454
+
3455
+
[[package]]
3456
+
name = "omnipath"
3457
+
version = "0.1.6"
3458
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3459
+
checksum = "80adb31078122c880307e9cdfd4e3361e6545c319f9b9dcafcb03acd3b51a575"
3460
+
3461
+
[[package]]
3462
+
name = "once_cell"
3463
+
version = "1.21.3"
3464
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3465
+
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
3466
+
3467
+
[[package]]
3468
+
name = "once_cell_polyfill"
3469
+
version = "1.70.2"
3470
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3471
+
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
3472
+
3473
+
[[package]]
3474
+
name = "option-ext"
3475
+
version = "0.2.0"
3476
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3477
+
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
3478
+
3479
+
[[package]]
3480
+
name = "os_display"
3481
+
version = "0.1.4"
3482
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3483
+
checksum = "ad5fd71b79026fb918650dde6d125000a233764f1c2f1659a1c71118e33ea08f"
3484
+
dependencies = [
3485
+
"unicode-width 0.2.2",
3486
+
]
3487
+
3488
+
[[package]]
3489
+
name = "ouroboros"
3490
+
version = "0.18.5"
3491
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3492
+
checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59"
3493
+
dependencies = [
3494
+
"aliasable",
3495
+
"ouroboros_macro",
3496
+
"static_assertions",
3497
+
]
3498
+
3499
+
[[package]]
3500
+
name = "ouroboros_macro"
3501
+
version = "0.18.5"
3502
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3503
+
checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0"
3504
+
dependencies = [
3505
+
"heck 0.4.1",
3506
+
"proc-macro2",
3507
+
"proc-macro2-diagnostics",
3508
+
"quote",
3509
+
"syn 2.0.111",
3510
+
]
3511
+
3512
+
[[package]]
3513
+
name = "owo-colors"
3514
+
version = "4.2.3"
3515
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3516
+
checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52"
3517
+
3518
+
[[package]]
3519
+
name = "p256"
3520
+
version = "0.13.2"
3521
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3522
+
checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
3523
+
dependencies = [
3524
+
"ecdsa",
3525
+
"elliptic-curve",
3526
+
"primeorder",
3527
+
"sha2",
3528
+
]
3529
+
3530
+
[[package]]
3531
+
name = "p384"
3532
+
version = "0.13.1"
3533
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3534
+
checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6"
3535
+
dependencies = [
3536
+
"elliptic-curve",
3537
+
"primeorder",
3538
+
]
3539
+
3540
+
[[package]]
3541
+
name = "papergrid"
3542
+
version = "0.17.0"
3543
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3544
+
checksum = "6978128c8b51d8f4080631ceb2302ab51e32cc6e8615f735ee2f83fd269ae3f1"
3545
+
dependencies = [
3546
+
"ansi-str",
3547
+
"ansitok",
3548
+
"bytecount",
3549
+
"fnv",
3550
+
"unicode-width 0.2.2",
3551
+
]
3552
+
3553
+
[[package]]
3554
+
name = "parking"
3555
+
version = "2.2.1"
3556
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3557
+
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
3558
+
3559
+
[[package]]
3560
+
name = "parking_lot"
3561
+
version = "0.12.5"
3562
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3563
+
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
3564
+
dependencies = [
3565
+
"lock_api",
3566
+
"parking_lot_core",
3567
+
]
3568
+
3569
+
[[package]]
3570
+
name = "parking_lot_core"
3571
+
version = "0.9.12"
3572
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3573
+
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
3574
+
dependencies = [
3575
+
"cfg-if",
3576
+
"libc",
3577
+
"redox_syscall",
3578
+
"smallvec",
3579
+
"windows-link 0.2.1",
3580
+
]
3581
+
3582
+
[[package]]
3583
+
name = "paste"
3584
+
version = "1.0.15"
3585
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3586
+
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
3587
+
3588
+
[[package]]
3589
+
name = "pathdiff"
3590
+
version = "0.2.3"
3591
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3592
+
checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
3593
+
3594
+
[[package]]
3595
+
name = "pem-rfc7468"
3596
+
version = "0.7.0"
3597
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3598
+
checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
3599
+
dependencies = [
3600
+
"base64ct",
3601
+
]
3602
+
3603
+
[[package]]
3604
+
name = "percent-encoding"
3605
+
version = "2.3.2"
3606
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3607
+
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
3608
+
3609
+
[[package]]
3610
+
name = "pest"
3611
+
version = "2.8.4"
3612
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3613
+
checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22"
3614
+
dependencies = [
3615
+
"memchr",
3616
+
"ucd-trie",
3617
+
]
3618
+
3619
+
[[package]]
3620
+
name = "pest_consume"
3621
+
version = "1.1.3"
3622
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3623
+
checksum = "79447402d15d18e7142e14c72f2e63fa3d155be1bc5b70b3ccbb610ac55f536b"
3624
+
dependencies = [
3625
+
"pest",
3626
+
"pest_consume_macros",
3627
+
"pest_derive",
3628
+
]
3629
+
3630
+
[[package]]
3631
+
name = "pest_consume_macros"
3632
+
version = "1.1.0"
3633
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3634
+
checksum = "9d8630a7a899cb344ec1c16ba0a6b24240029af34bdc0a21f84e411d7f793f29"
3635
+
dependencies = [
3636
+
"proc-macro2",
3637
+
"quote",
3638
+
"syn 1.0.109",
3639
+
]
3640
+
3641
+
[[package]]
3642
+
name = "pest_derive"
3643
+
version = "2.8.4"
3644
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3645
+
checksum = "51f72981ade67b1ca6adc26ec221be9f463f2b5839c7508998daa17c23d94d7f"
3646
+
dependencies = [
3647
+
"pest",
3648
+
"pest_generator",
3649
+
]
3650
+
3651
+
[[package]]
3652
+
name = "pest_generator"
3653
+
version = "2.8.4"
3654
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3655
+
checksum = "dee9efd8cdb50d719a80088b76f81aec7c41ed6d522ee750178f83883d271625"
3656
+
dependencies = [
3657
+
"pest",
3658
+
"pest_meta",
3659
+
"proc-macro2",
3660
+
"quote",
3661
+
"syn 2.0.111",
3662
+
]
3663
+
3664
+
[[package]]
3665
+
name = "pest_meta"
3666
+
version = "2.8.4"
3667
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3668
+
checksum = "bf1d70880e76bdc13ba52eafa6239ce793d85c8e43896507e43dd8984ff05b82"
3669
+
dependencies = [
3670
+
"pest",
3671
+
"sha2",
3672
+
]
3673
+
3674
+
[[package]]
3675
+
name = "phf"
3676
+
version = "0.11.3"
3677
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3678
+
checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
3679
+
dependencies = [
3680
+
"phf_shared 0.11.3",
3681
+
]
3682
+
3683
+
[[package]]
3684
+
name = "phf"
3685
+
version = "0.12.1"
3686
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3687
+
checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7"
3688
+
dependencies = [
3689
+
"phf_shared 0.12.1",
3690
+
]
3691
+
3692
+
[[package]]
3693
+
name = "phf"
3694
+
version = "0.13.1"
3695
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3696
+
checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
3697
+
dependencies = [
3698
+
"phf_shared 0.13.1",
3699
+
"serde",
3700
+
]
3701
+
3702
+
[[package]]
3703
+
name = "phf_codegen"
3704
+
version = "0.11.3"
3705
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3706
+
checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
3707
+
dependencies = [
3708
+
"phf_generator",
3709
+
"phf_shared 0.11.3",
3710
+
]
3711
+
3712
+
[[package]]
3713
+
name = "phf_generator"
3714
+
version = "0.11.3"
3715
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3716
+
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
3717
+
dependencies = [
3718
+
"phf_shared 0.11.3",
3719
+
"rand 0.8.5",
3720
+
]
3721
+
3722
+
[[package]]
3723
+
name = "phf_shared"
3724
+
version = "0.11.3"
3725
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3726
+
checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
3727
+
dependencies = [
3728
+
"siphasher",
3729
+
]
3730
+
3731
+
[[package]]
3732
+
name = "phf_shared"
3733
+
version = "0.12.1"
3734
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3735
+
checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981"
3736
+
dependencies = [
3737
+
"siphasher",
3738
+
]
3739
+
3740
+
[[package]]
3741
+
name = "phf_shared"
3742
+
version = "0.13.1"
3743
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3744
+
checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
3745
+
dependencies = [
3746
+
"siphasher",
3747
+
]
3748
+
3749
+
[[package]]
3750
+
name = "pin-project"
3751
+
version = "1.1.10"
3752
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3753
+
checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
3754
+
dependencies = [
3755
+
"pin-project-internal",
3756
+
]
3757
+
3758
+
[[package]]
3759
+
name = "pin-project-internal"
3760
+
version = "1.1.10"
3761
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3762
+
checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
3763
+
dependencies = [
3764
+
"proc-macro2",
3765
+
"quote",
3766
+
"syn 2.0.111",
3767
+
]
3768
+
3769
+
[[package]]
3770
+
name = "pin-project-lite"
3771
+
version = "0.2.16"
3772
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3773
+
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
3774
+
3775
+
[[package]]
3776
+
name = "pin-utils"
3777
+
version = "0.1.0"
3778
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3779
+
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
3780
+
3781
+
[[package]]
3782
+
name = "pkcs1"
3783
+
version = "0.7.5"
3784
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3785
+
checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
3786
+
dependencies = [
3787
+
"der",
3788
+
"pkcs8",
3789
+
"spki",
3790
+
]
3791
+
3792
+
[[package]]
3793
+
name = "pkcs8"
3794
+
version = "0.10.2"
3795
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3796
+
checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
3797
+
dependencies = [
3798
+
"der",
3799
+
"spki",
3800
+
]
3801
+
3802
+
[[package]]
3803
+
name = "pori"
3804
+
version = "0.0.0"
3805
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3806
+
checksum = "a4a63d338dec139f56dacc692ca63ad35a6be6a797442479b55acd611d79e906"
3807
+
dependencies = [
3808
+
"nom",
3809
+
]
3810
+
3811
+
[[package]]
3812
+
name = "portable-atomic"
3813
+
version = "1.11.1"
3814
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3815
+
checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
3816
+
3817
+
[[package]]
3818
+
name = "postcard"
3819
+
version = "1.1.3"
3820
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3821
+
checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24"
3822
+
dependencies = [
3823
+
"cobs",
3824
+
"embedded-io 0.4.0",
3825
+
"embedded-io 0.6.1",
3826
+
"heapless",
3827
+
"serde",
3828
+
]
3829
+
3830
+
[[package]]
3831
+
name = "potential_utf"
3832
+
version = "0.1.4"
3833
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3834
+
checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
3835
+
dependencies = [
3836
+
"zerovec",
3837
+
]
3838
+
3839
+
[[package]]
3840
+
name = "powerfmt"
3841
+
version = "0.2.0"
3842
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3843
+
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
3844
+
3845
+
[[package]]
3846
+
name = "ppv-lite86"
3847
+
version = "0.2.21"
3848
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3849
+
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
3850
+
dependencies = [
3851
+
"zerocopy 0.8.31",
3852
+
]
3853
+
3854
+
[[package]]
3855
+
name = "precomputed-hash"
3856
+
version = "0.1.1"
3857
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3858
+
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
3859
+
3860
+
[[package]]
3861
+
name = "prettyplease"
3862
+
version = "0.2.37"
3863
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3864
+
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
3865
+
dependencies = [
3866
+
"proc-macro2",
3867
+
"syn 2.0.111",
3868
+
]
3869
+
3870
+
[[package]]
3871
+
name = "primeorder"
3872
+
version = "0.13.6"
3873
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3874
+
checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
3875
+
dependencies = [
3876
+
"elliptic-curve",
3877
+
]
3878
+
3879
+
[[package]]
3880
+
name = "print-positions"
3881
+
version = "0.6.1"
3882
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3883
+
checksum = "1df593470e3ef502e48cb0cfc9a3a61e5f61e967b78e1ed35a67ac615cfbd208"
3884
+
dependencies = [
3885
+
"unicode-segmentation",
3886
+
]
3887
+
3888
+
[[package]]
3889
+
name = "proc-macro-error"
3890
+
version = "1.0.4"
3891
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3892
+
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
3893
+
dependencies = [
3894
+
"proc-macro-error-attr",
3895
+
"proc-macro2",
3896
+
"quote",
3897
+
"syn 1.0.109",
3898
+
"version_check",
3899
+
]
3900
+
3901
+
[[package]]
3902
+
name = "proc-macro-error-attr"
3903
+
version = "1.0.4"
3904
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3905
+
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
3906
+
dependencies = [
3907
+
"proc-macro2",
3908
+
"quote",
3909
+
"version_check",
3910
+
]
3911
+
3912
+
[[package]]
3913
+
name = "proc-macro-error-attr2"
3914
+
version = "2.0.0"
3915
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3916
+
checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5"
3917
+
dependencies = [
3918
+
"proc-macro2",
3919
+
"quote",
3920
+
]
3921
+
3922
+
[[package]]
3923
+
name = "proc-macro-error2"
3924
+
version = "2.0.1"
3925
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3926
+
checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802"
3927
+
dependencies = [
3928
+
"proc-macro-error-attr2",
3929
+
"proc-macro2",
3930
+
"quote",
3931
+
"syn 2.0.111",
3932
+
]
3933
+
3934
+
[[package]]
3935
+
name = "proc-macro2"
3936
+
version = "1.0.103"
3937
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3938
+
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
3939
+
dependencies = [
3940
+
"unicode-ident",
3941
+
]
3942
+
3943
+
[[package]]
3944
+
name = "proc-macro2-diagnostics"
3945
+
version = "0.10.1"
3946
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3947
+
checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
3948
+
dependencies = [
3949
+
"proc-macro2",
3950
+
"quote",
3951
+
"syn 2.0.111",
3952
+
"version_check",
3953
+
"yansi",
3954
+
]
3955
+
3956
+
[[package]]
3957
+
name = "procfs"
3958
+
version = "0.17.0"
3959
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3960
+
checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f"
3961
+
dependencies = [
3962
+
"bitflags",
3963
+
"chrono",
3964
+
"flate2",
3965
+
"hex",
3966
+
"procfs-core 0.17.0",
3967
+
"rustix 0.38.44",
3968
+
]
3969
+
3970
+
[[package]]
3971
+
name = "procfs"
3972
+
version = "0.18.0"
3973
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3974
+
checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7"
3975
+
dependencies = [
3976
+
"bitflags",
3977
+
"chrono",
3978
+
"flate2",
3979
+
"procfs-core 0.18.0",
3980
+
"rustix 1.1.2",
3981
+
]
3982
+
3983
+
[[package]]
3984
+
name = "procfs-core"
3985
+
version = "0.17.0"
3986
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3987
+
checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec"
3988
+
dependencies = [
3989
+
"bitflags",
3990
+
"chrono",
3991
+
"hex",
3992
+
]
3993
+
3994
+
[[package]]
3995
+
name = "procfs-core"
3996
+
version = "0.18.0"
3997
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3998
+
checksum = "e6401bf7b6af22f78b563665d15a22e9aef27775b79b149a66ca022468a4e405"
3999
+
dependencies = [
4000
+
"bitflags",
4001
+
"chrono",
4002
+
"hex",
4003
+
]
4004
+
4005
+
[[package]]
4006
+
name = "pure-rust-locales"
4007
+
version = "0.8.2"
4008
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4009
+
checksum = "869675ad2d7541aea90c6d88c81f46a7f4ea9af8cd0395d38f11a95126998a0d"
4010
+
4011
+
[[package]]
4012
+
name = "pwd"
4013
+
version = "1.4.0"
4014
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4015
+
checksum = "72c71c0c79b9701efe4e1e4b563b2016dd4ee789eb99badcb09d61ac4b92e4a2"
4016
+
dependencies = [
4017
+
"libc",
4018
+
"thiserror 1.0.69",
4019
+
]
4020
+
4021
+
[[package]]
4022
+
name = "quick-xml"
4023
+
version = "0.37.5"
4024
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4025
+
checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb"
4026
+
dependencies = [
4027
+
"encoding_rs",
4028
+
"memchr",
4029
+
]
4030
+
4031
+
[[package]]
4032
+
name = "quick-xml"
4033
+
version = "0.38.4"
4034
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4035
+
checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c"
4036
+
dependencies = [
4037
+
"memchr",
4038
+
]
4039
+
4040
+
[[package]]
4041
+
name = "quinn"
4042
+
version = "0.11.9"
4043
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4044
+
checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
4045
+
dependencies = [
4046
+
"bytes",
4047
+
"cfg_aliases",
4048
+
"pin-project-lite",
4049
+
"quinn-proto",
4050
+
"quinn-udp",
4051
+
"rustc-hash",
4052
+
"rustls",
4053
+
"socket2",
4054
+
"thiserror 2.0.17",
4055
+
"tokio",
4056
+
"tracing",
4057
+
"web-time",
4058
+
]
4059
+
4060
+
[[package]]
4061
+
name = "quinn-proto"
4062
+
version = "0.11.13"
4063
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4064
+
checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
4065
+
dependencies = [
4066
+
"bytes",
4067
+
"getrandom 0.3.4",
4068
+
"lru-slab",
4069
+
"rand 0.9.2",
4070
+
"ring",
4071
+
"rustc-hash",
4072
+
"rustls",
4073
+
"rustls-pki-types",
4074
+
"slab",
4075
+
"thiserror 2.0.17",
4076
+
"tinyvec",
4077
+
"tracing",
4078
+
"web-time",
4079
+
]
4080
+
4081
+
[[package]]
4082
+
name = "quinn-udp"
4083
+
version = "0.5.14"
4084
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4085
+
checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd"
4086
+
dependencies = [
4087
+
"cfg_aliases",
4088
+
"libc",
4089
+
"once_cell",
4090
+
"socket2",
4091
+
"tracing",
4092
+
"windows-sys 0.60.2",
4093
+
]
4094
+
4095
+
[[package]]
4096
+
name = "quote"
4097
+
version = "1.0.42"
4098
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4099
+
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
4100
+
dependencies = [
4101
+
"proc-macro2",
4102
+
]
4103
+
4104
+
[[package]]
4105
+
name = "r-efi"
4106
+
version = "5.3.0"
4107
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4108
+
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
4109
+
4110
+
[[package]]
4111
+
name = "rand"
4112
+
version = "0.8.5"
4113
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4114
+
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
4115
+
dependencies = [
4116
+
"libc",
4117
+
"rand_chacha 0.3.1",
4118
+
"rand_core 0.6.4",
4119
+
]
4120
+
4121
+
[[package]]
4122
+
name = "rand"
4123
+
version = "0.9.2"
4124
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4125
+
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
4126
+
dependencies = [
4127
+
"rand_chacha 0.9.0",
4128
+
"rand_core 0.9.3",
4129
+
]
4130
+
4131
+
[[package]]
4132
+
name = "rand_chacha"
4133
+
version = "0.3.1"
4134
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4135
+
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
4136
+
dependencies = [
4137
+
"ppv-lite86",
4138
+
"rand_core 0.6.4",
4139
+
]
4140
+
4141
+
[[package]]
4142
+
name = "rand_chacha"
4143
+
version = "0.9.0"
4144
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4145
+
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
4146
+
dependencies = [
4147
+
"ppv-lite86",
4148
+
"rand_core 0.9.3",
4149
+
]
4150
+
4151
+
[[package]]
4152
+
name = "rand_core"
4153
+
version = "0.6.4"
4154
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4155
+
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
4156
+
dependencies = [
4157
+
"getrandom 0.2.16",
4158
+
]
4159
+
4160
+
[[package]]
4161
+
name = "rand_core"
4162
+
version = "0.9.3"
4163
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4164
+
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
4165
+
dependencies = [
4166
+
"getrandom 0.3.4",
4167
+
]
4168
+
4169
+
[[package]]
4170
+
name = "range-traits"
4171
+
version = "0.3.2"
4172
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4173
+
checksum = "d20581732dd76fa913c7dff1a2412b714afe3573e94d41c34719de73337cc8ab"
4174
+
4175
+
[[package]]
4176
+
name = "rapidhash"
4177
+
version = "4.1.1"
4178
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4179
+
checksum = "d8e65c75143ce5d47c55b510297eeb1182f3c739b6043c537670e9fc18612dae"
4180
+
dependencies = [
4181
+
"rustversion",
4182
+
]
4183
+
4184
+
[[package]]
4185
+
name = "rayon"
4186
+
version = "1.11.0"
4187
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4188
+
checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
4189
+
dependencies = [
4190
+
"either",
4191
+
"rayon-core",
4192
+
]
4193
+
4194
+
[[package]]
4195
+
name = "rayon-core"
4196
+
version = "1.13.0"
4197
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4198
+
checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
4199
+
dependencies = [
4200
+
"crossbeam-deque",
4201
+
"crossbeam-utils",
4202
+
]
4203
+
4204
+
[[package]]
4205
+
name = "redox_syscall"
4206
+
version = "0.5.18"
4207
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4208
+
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
4209
+
dependencies = [
4210
+
"bitflags",
4211
+
]
4212
+
4213
+
[[package]]
4214
+
name = "redox_users"
4215
+
version = "0.5.2"
4216
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4217
+
checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
4218
+
dependencies = [
4219
+
"getrandom 0.2.16",
4220
+
"libredox",
4221
+
"thiserror 2.0.17",
4222
+
]
4223
+
4224
+
[[package]]
4225
+
name = "ref-cast"
4226
+
version = "1.0.25"
4227
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4228
+
checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
4229
+
dependencies = [
4230
+
"ref-cast-impl",
4231
+
]
4232
+
4233
+
[[package]]
4234
+
name = "ref-cast-impl"
4235
+
version = "1.0.25"
4236
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4237
+
checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
4238
+
dependencies = [
4239
+
"proc-macro2",
4240
+
"quote",
4241
+
"syn 2.0.111",
4242
+
]
4243
+
4244
+
[[package]]
4245
+
name = "regex"
4246
+
version = "1.12.2"
4247
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4248
+
checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
4249
+
dependencies = [
4250
+
"aho-corasick",
4251
+
"memchr",
4252
+
"regex-automata",
4253
+
"regex-syntax",
4254
+
]
4255
+
4256
+
[[package]]
4257
+
name = "regex-automata"
4258
+
version = "0.4.13"
4259
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4260
+
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
4261
+
dependencies = [
4262
+
"aho-corasick",
4263
+
"memchr",
4264
+
"regex-syntax",
4265
+
]
4266
+
4267
+
[[package]]
4268
+
name = "regex-lite"
4269
+
version = "0.1.8"
4270
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4271
+
checksum = "8d942b98df5e658f56f20d592c7f868833fe38115e65c33003d8cd224b0155da"
4272
+
4273
+
[[package]]
4274
+
name = "regex-syntax"
4275
+
version = "0.8.8"
4276
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4277
+
checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
4278
+
4279
+
[[package]]
4280
+
name = "reqwest"
4281
+
version = "0.12.25"
4282
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4283
+
checksum = "b6eff9328d40131d43bd911d42d79eb6a47312002a4daefc9e37f17e74a7701a"
4284
+
dependencies = [
4285
+
"base64",
4286
+
"bytes",
4287
+
"encoding_rs",
4288
+
"futures-core",
4289
+
"h2",
4290
+
"http",
4291
+
"http-body",
4292
+
"http-body-util",
4293
+
"hyper",
4294
+
"hyper-rustls",
4295
+
"hyper-util",
4296
+
"js-sys",
4297
+
"log",
4298
+
"mime",
4299
+
"percent-encoding",
4300
+
"pin-project-lite",
4301
+
"quinn",
4302
+
"rustls",
4303
+
"rustls-pki-types",
4304
+
"serde",
4305
+
"serde_json",
4306
+
"serde_urlencoded",
4307
+
"sync_wrapper",
4308
+
"tokio",
4309
+
"tokio-rustls",
4310
+
"tower",
4311
+
"tower-http",
4312
+
"tower-service",
4313
+
"url",
4314
+
"wasm-bindgen",
4315
+
"wasm-bindgen-futures",
4316
+
"web-sys",
4317
+
"webpki-roots",
4318
+
]
4319
+
4320
+
[[package]]
4321
+
name = "rfc6979"
4322
+
version = "0.4.0"
4323
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4324
+
checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
4325
+
dependencies = [
4326
+
"hmac",
4327
+
"subtle",
4328
+
]
4329
+
4330
+
[[package]]
4331
+
name = "ring"
4332
+
version = "0.17.14"
4333
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4334
+
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
4335
+
dependencies = [
4336
+
"cc",
4337
+
"cfg-if",
4338
+
"getrandom 0.2.16",
4339
+
"libc",
4340
+
"untrusted",
4341
+
"windows-sys 0.52.0",
4342
+
]
4343
+
4344
+
[[package]]
4345
+
name = "rmp"
4346
+
version = "0.8.14"
4347
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4348
+
checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4"
4349
+
dependencies = [
4350
+
"byteorder",
4351
+
"num-traits",
4352
+
"paste",
4353
+
]
4354
+
4355
+
[[package]]
4356
+
name = "roxmltree"
4357
+
version = "0.20.0"
4358
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4359
+
checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
4360
+
4361
+
[[package]]
4362
+
name = "rsa"
4363
+
version = "0.9.9"
4364
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4365
+
checksum = "40a0376c50d0358279d9d643e4bf7b7be212f1f4ff1da9070a7b54d22ef75c88"
4366
+
dependencies = [
4367
+
"const-oid",
4368
+
"digest",
4369
+
"num-bigint-dig",
4370
+
"num-integer",
4371
+
"num-traits",
4372
+
"pkcs1",
4373
+
"pkcs8",
4374
+
"rand_core 0.6.4",
4375
+
"signature",
4376
+
"spki",
4377
+
"subtle",
4378
+
"zeroize",
4379
+
]
4380
+
4381
+
[[package]]
4382
+
name = "rust-embed"
4383
+
version = "8.9.0"
4384
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4385
+
checksum = "947d7f3fad52b283d261c4c99a084937e2fe492248cb9a68a8435a861b8798ca"
4386
+
dependencies = [
4387
+
"rust-embed-impl",
4388
+
"rust-embed-utils",
4389
+
"walkdir",
4390
+
]
4391
+
4392
+
[[package]]
4393
+
name = "rust-embed-impl"
4394
+
version = "8.9.0"
4395
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4396
+
checksum = "5fa2c8c9e8711e10f9c4fd2d64317ef13feaab820a4c51541f1a8c8e2e851ab2"
4397
+
dependencies = [
4398
+
"proc-macro2",
4399
+
"quote",
4400
+
"rust-embed-utils",
4401
+
"syn 2.0.111",
4402
+
"walkdir",
4403
+
]
4404
+
4405
+
[[package]]
4406
+
name = "rust-embed-utils"
4407
+
version = "8.9.0"
4408
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4409
+
checksum = "60b161f275cb337fe0a44d924a5f4df0ed69c2c39519858f931ce61c779d3475"
4410
+
dependencies = [
4411
+
"sha2",
4412
+
"walkdir",
4413
+
]
4414
+
4415
+
[[package]]
4416
+
name = "rust_decimal"
4417
+
version = "1.39.0"
4418
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4419
+
checksum = "35affe401787a9bd846712274d97654355d21b2a2c092a3139aabe31e9022282"
4420
+
dependencies = [
4421
+
"arrayvec",
4422
+
"num-traits",
4423
+
]
4424
+
4425
+
[[package]]
4426
+
name = "rustc-demangle"
4427
+
version = "0.1.26"
4428
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4429
+
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
4430
+
4431
+
[[package]]
4432
+
name = "rustc-hash"
4433
+
version = "2.1.1"
4434
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4435
+
checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
4436
+
4437
+
[[package]]
4438
+
name = "rustc_version"
4439
+
version = "0.4.1"
4440
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4441
+
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
4442
+
dependencies = [
4443
+
"semver",
4444
+
]
4445
+
4446
+
[[package]]
4447
+
name = "rustix"
4448
+
version = "0.38.44"
4449
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4450
+
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
4451
+
dependencies = [
4452
+
"bitflags",
4453
+
"errno",
4454
+
"libc",
4455
+
"linux-raw-sys 0.4.15",
4456
+
"windows-sys 0.59.0",
4457
+
]
4458
+
4459
+
[[package]]
4460
+
name = "rustix"
4461
+
version = "1.1.2"
4462
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4463
+
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
4464
+
dependencies = [
4465
+
"bitflags",
4466
+
"errno",
4467
+
"libc",
4468
+
"linux-raw-sys 0.11.0",
4469
+
"windows-sys 0.61.2",
4470
+
]
4471
+
4472
+
[[package]]
4473
+
name = "rustls"
4474
+
version = "0.23.28"
4475
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4476
+
checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643"
4477
+
dependencies = [
4478
+
"once_cell",
4479
+
"ring",
4480
+
"rustls-pki-types",
4481
+
"rustls-webpki",
4482
+
"subtle",
4483
+
"zeroize",
4484
+
]
4485
+
4486
+
[[package]]
4487
+
name = "rustls-pki-types"
4488
+
version = "1.13.1"
4489
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4490
+
checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c"
4491
+
dependencies = [
4492
+
"web-time",
4493
+
"zeroize",
4494
+
]
4495
+
4496
+
[[package]]
4497
+
name = "rustls-webpki"
4498
+
version = "0.103.8"
4499
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4500
+
checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52"
4501
+
dependencies = [
4502
+
"ring",
4503
+
"rustls-pki-types",
4504
+
"untrusted",
4505
+
]
4506
+
4507
+
[[package]]
4508
+
name = "rustversion"
4509
+
version = "1.0.22"
4510
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4511
+
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
4512
+
4513
+
[[package]]
4514
+
name = "ryu"
4515
+
version = "1.0.20"
4516
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4517
+
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
4518
+
4519
+
[[package]]
4520
+
name = "saa"
4521
+
version = "5.4.0"
4522
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4523
+
checksum = "3192d99ee2f69effeacef86c9fa80e75b6604e2a5d3ade6856d206b519521e53"
4524
+
4525
+
[[package]]
4526
+
name = "same-file"
4527
+
version = "1.0.6"
4528
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4529
+
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
4530
+
dependencies = [
4531
+
"winapi-util",
4532
+
]
4533
+
4534
+
[[package]]
4535
+
name = "scc"
4536
+
version = "3.4.6"
4537
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4538
+
checksum = "0b6f8686af8563182fc6b63ab7bd7b5cad8f40fbe660675627caedc6c073eca8"
4539
+
dependencies = [
4540
+
"saa",
4541
+
"sdd",
4542
+
]
4543
+
4544
+
[[package]]
4545
+
name = "schemars"
4546
+
version = "0.9.0"
4547
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4548
+
checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f"
4549
+
dependencies = [
4550
+
"dyn-clone",
4551
+
"ref-cast",
4552
+
"serde",
4553
+
"serde_json",
4554
+
]
4555
+
4556
+
[[package]]
4557
+
name = "schemars"
4558
+
version = "1.1.0"
4559
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4560
+
checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289"
4561
+
dependencies = [
4562
+
"dyn-clone",
4563
+
"ref-cast",
4564
+
"serde",
4565
+
"serde_json",
4566
+
]
4567
+
4568
+
[[package]]
4569
+
name = "scoped-tls"
4570
+
version = "1.0.1"
4571
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4572
+
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
4573
+
4574
+
[[package]]
4575
+
name = "scopeguard"
4576
+
version = "1.2.0"
4577
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4578
+
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
4579
+
4580
+
[[package]]
4581
+
name = "sdd"
4582
+
version = "4.5.0"
4583
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4584
+
checksum = "7168ecf885fdd3920ade15d50189593b076e1d060b60406a745766380195d65a"
4585
+
4586
+
[[package]]
4587
+
name = "sec1"
4588
+
version = "0.7.3"
4589
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4590
+
checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
4591
+
dependencies = [
4592
+
"base16ct",
4593
+
"der",
4594
+
"generic-array",
4595
+
"pkcs8",
4596
+
"subtle",
4597
+
"zeroize",
4598
+
]
4599
+
4600
+
[[package]]
4601
+
name = "self_cell"
4602
+
version = "1.2.1"
4603
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4604
+
checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33"
4605
+
4606
+
[[package]]
4607
+
name = "semver"
4608
+
version = "1.0.27"
4609
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4610
+
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
4611
+
4612
+
[[package]]
4613
+
name = "send_wrapper"
4614
+
version = "0.6.0"
4615
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4616
+
checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
4617
+
4618
+
[[package]]
4619
+
name = "serde"
4620
+
version = "1.0.228"
4621
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4622
+
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
4623
+
dependencies = [
4624
+
"serde_core",
4625
+
"serde_derive",
4626
+
]
4627
+
4628
+
[[package]]
4629
+
name = "serde_bytes"
4630
+
version = "0.11.19"
4631
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4632
+
checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8"
4633
+
dependencies = [
4634
+
"serde",
4635
+
"serde_core",
4636
+
]
4637
+
4638
+
[[package]]
4639
+
name = "serde_core"
4640
+
version = "1.0.228"
4641
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4642
+
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
4643
+
dependencies = [
4644
+
"serde_derive",
4645
+
]
4646
+
4647
+
[[package]]
4648
+
name = "serde_derive"
4649
+
version = "1.0.228"
4650
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4651
+
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
4652
+
dependencies = [
4653
+
"proc-macro2",
4654
+
"quote",
4655
+
"syn 2.0.111",
4656
+
]
4657
+
4658
+
[[package]]
4659
+
name = "serde_html_form"
4660
+
version = "0.2.8"
4661
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4662
+
checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f"
4663
+
dependencies = [
4664
+
"form_urlencoded",
4665
+
"indexmap 2.12.1",
4666
+
"itoa",
4667
+
"ryu",
4668
+
"serde_core",
4669
+
]
4670
+
4671
+
[[package]]
4672
+
name = "serde_ipld_dagcbor"
4673
+
version = "0.6.4"
4674
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4675
+
checksum = "46182f4f08349a02b45c998ba3215d3f9de826246ba02bb9dddfe9a2a2100778"
4676
+
dependencies = [
4677
+
"cbor4ii",
4678
+
"ipld-core",
4679
+
"scopeguard",
4680
+
"serde",
4681
+
]
4682
+
4683
+
[[package]]
4684
+
name = "serde_json"
4685
+
version = "1.0.145"
4686
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4687
+
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
4688
+
dependencies = [
4689
+
"indexmap 2.12.1",
4690
+
"itoa",
4691
+
"memchr",
4692
+
"ryu",
4693
+
"serde",
4694
+
"serde_core",
4695
+
]
4696
+
4697
+
[[package]]
4698
+
name = "serde_repr"
4699
+
version = "0.1.20"
4700
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4701
+
checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
4702
+
dependencies = [
4703
+
"proc-macro2",
4704
+
"quote",
4705
+
"syn 2.0.111",
4706
+
]
4707
+
4708
+
[[package]]
4709
+
name = "serde_spanned"
4710
+
version = "0.6.9"
4711
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4712
+
checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
4713
+
dependencies = [
4714
+
"serde",
4715
+
]
4716
+
4717
+
[[package]]
4718
+
name = "serde_urlencoded"
4719
+
version = "0.7.1"
4720
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4721
+
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
4722
+
dependencies = [
4723
+
"form_urlencoded",
4724
+
"itoa",
4725
+
"ryu",
4726
+
"serde",
4727
+
]
4728
+
4729
+
[[package]]
4730
+
name = "serde_with"
4731
+
version = "3.16.1"
4732
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4733
+
checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7"
4734
+
dependencies = [
4735
+
"base64",
4736
+
"chrono",
4737
+
"hex",
4738
+
"indexmap 1.9.3",
4739
+
"indexmap 2.12.1",
4740
+
"schemars 0.9.0",
4741
+
"schemars 1.1.0",
4742
+
"serde_core",
4743
+
"serde_json",
4744
+
"serde_with_macros",
4745
+
"time",
4746
+
]
4747
+
4748
+
[[package]]
4749
+
name = "serde_with_macros"
4750
+
version = "3.16.1"
4751
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4752
+
checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c"
4753
+
dependencies = [
4754
+
"darling",
4755
+
"proc-macro2",
4756
+
"quote",
4757
+
"syn 2.0.111",
4758
+
]
4759
+
4760
+
[[package]]
4761
+
name = "serde_yaml"
4762
+
version = "0.9.34+deprecated"
4763
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4764
+
checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
4765
+
dependencies = [
4766
+
"indexmap 2.12.1",
4767
+
"itoa",
4768
+
"ryu",
4769
+
"serde",
4770
+
"unsafe-libyaml",
4771
+
]
4772
+
4773
+
[[package]]
4774
+
name = "sha2"
4775
+
version = "0.10.9"
4776
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4777
+
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
4778
+
dependencies = [
4779
+
"cfg-if",
4780
+
"cpufeatures",
4781
+
"digest",
4782
+
]
4783
+
4784
+
[[package]]
4785
+
name = "shadow-rs"
4786
+
version = "1.4.0"
4787
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4788
+
checksum = "72d18183cef626bce22836103349c7050d73db799be0171386b80947d157ae32"
4789
+
dependencies = [
4790
+
"const_format",
4791
+
"is_debug",
4792
+
"time",
4793
+
"tzdb",
4794
+
]
4795
+
4796
+
[[package]]
4797
+
name = "sharded-slab"
4798
+
version = "0.1.7"
4799
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4800
+
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
4801
+
dependencies = [
4802
+
"lazy_static",
4803
+
]
4804
+
4805
+
[[package]]
4806
+
name = "shell-words"
4807
+
version = "1.1.1"
4808
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4809
+
checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77"
4810
+
4811
+
[[package]]
4812
+
name = "shlex"
4813
+
version = "1.3.0"
4814
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4815
+
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
4816
+
4817
+
[[package]]
4818
+
name = "signature"
4819
+
version = "2.2.0"
4820
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4821
+
checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
4822
+
dependencies = [
4823
+
"digest",
4824
+
"rand_core 0.6.4",
4825
+
]
4826
+
4827
+
[[package]]
4828
+
name = "simd-adler32"
4829
+
version = "0.3.8"
4830
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4831
+
checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2"
4832
+
4833
+
[[package]]
4834
+
name = "siphasher"
4835
+
version = "1.0.1"
4836
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4837
+
checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
4838
+
4839
+
[[package]]
4840
+
name = "slab"
4841
+
version = "0.4.11"
4842
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4843
+
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
4844
+
4845
+
[[package]]
4846
+
name = "smallvec"
4847
+
version = "1.15.1"
4848
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4849
+
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
4850
+
4851
+
[[package]]
4852
+
name = "smol_str"
4853
+
version = "0.3.4"
4854
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4855
+
checksum = "3498b0a27f93ef1402f20eefacfaa1691272ac4eca1cdc8c596cb0a245d6cbf5"
4856
+
dependencies = [
4857
+
"borsh",
4858
+
"serde_core",
4859
+
]
4860
+
4861
+
[[package]]
4862
+
name = "socket2"
4863
+
version = "0.6.1"
4864
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4865
+
checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
4866
+
dependencies = [
4867
+
"libc",
4868
+
"windows-sys 0.60.2",
4869
+
]
4870
+
4871
+
[[package]]
4872
+
name = "spin"
4873
+
version = "0.9.8"
4874
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4875
+
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
4876
+
dependencies = [
4877
+
"lock_api",
4878
+
]
4879
+
4880
+
[[package]]
4881
+
name = "spin"
4882
+
version = "0.10.0"
4883
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4884
+
checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591"
4885
+
4886
+
[[package]]
4887
+
name = "spki"
4888
+
version = "0.7.3"
4889
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4890
+
checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
4891
+
dependencies = [
4892
+
"base64ct",
4893
+
"der",
4894
+
]
4895
+
4896
+
[[package]]
4897
+
name = "stable_deref_trait"
4898
+
version = "1.2.1"
4899
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4900
+
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
4901
+
4902
+
[[package]]
4903
+
name = "static-regular-grammar"
4904
+
version = "2.0.2"
4905
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4906
+
checksum = "4f4a6c40247579acfbb138c3cd7de3dab113ab4ac6227f1b7de7d626ee667957"
4907
+
dependencies = [
4908
+
"abnf",
4909
+
"btree-range-map",
4910
+
"ciborium",
4911
+
"hex_fmt",
4912
+
"indoc",
4913
+
"proc-macro-error",
4914
+
"proc-macro2",
4915
+
"quote",
4916
+
"serde",
4917
+
"sha2",
4918
+
"syn 2.0.111",
4919
+
"thiserror 1.0.69",
4920
+
]
4921
+
4922
+
[[package]]
4923
+
name = "static_assertions"
4924
+
version = "1.1.0"
4925
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4926
+
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
4927
+
4928
+
[[package]]
4929
+
name = "string_cache"
4930
+
version = "0.8.9"
4931
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4932
+
checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f"
4933
+
dependencies = [
4934
+
"new_debug_unreachable",
4935
+
"parking_lot",
4936
+
"phf_shared 0.11.3",
4937
+
"precomputed-hash",
4938
+
"serde",
4939
+
]
4940
+
4941
+
[[package]]
4942
+
name = "string_cache_codegen"
4943
+
version = "0.5.4"
4944
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4945
+
checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0"
4946
+
dependencies = [
4947
+
"phf_generator",
4948
+
"phf_shared 0.11.3",
4949
+
"proc-macro2",
4950
+
"quote",
4951
+
]
4952
+
4953
+
[[package]]
4954
+
name = "strip-ansi-escapes"
4955
+
version = "0.2.1"
4956
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4957
+
checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025"
4958
+
dependencies = [
4959
+
"vte",
4960
+
]
4961
+
4962
+
[[package]]
4963
+
name = "strsim"
4964
+
version = "0.11.1"
4965
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4966
+
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
4967
+
4968
+
[[package]]
4969
+
name = "strum"
4970
+
version = "0.26.3"
4971
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4972
+
checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06"
4973
+
4974
+
[[package]]
4975
+
name = "strum_macros"
4976
+
version = "0.27.2"
4977
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4978
+
checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
4979
+
dependencies = [
4980
+
"heck 0.5.0",
4981
+
"proc-macro2",
4982
+
"quote",
4983
+
"syn 2.0.111",
4984
+
]
4985
+
4986
+
[[package]]
4987
+
name = "subtle"
4988
+
version = "2.6.1"
4989
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4990
+
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
4991
+
4992
+
[[package]]
4993
+
name = "supports-color"
4994
+
version = "3.0.2"
4995
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4996
+
checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6"
4997
+
dependencies = [
4998
+
"is_ci",
4999
+
]
5000
+
5001
+
[[package]]
5002
+
name = "supports-hyperlinks"
5003
+
version = "3.1.0"
5004
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5005
+
checksum = "804f44ed3c63152de6a9f90acbea1a110441de43006ea51bcce8f436196a288b"
5006
+
5007
+
[[package]]
5008
+
name = "supports-unicode"
5009
+
version = "3.0.0"
5010
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5011
+
checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2"
5012
+
5013
+
[[package]]
5014
+
name = "syn"
5015
+
version = "1.0.109"
5016
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5017
+
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
5018
+
dependencies = [
5019
+
"proc-macro2",
5020
+
"quote",
5021
+
"unicode-ident",
5022
+
]
5023
+
5024
+
[[package]]
5025
+
name = "syn"
5026
+
version = "2.0.111"
5027
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5028
+
checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
5029
+
dependencies = [
5030
+
"proc-macro2",
5031
+
"quote",
5032
+
"unicode-ident",
5033
+
]
5034
+
5035
+
[[package]]
5036
+
name = "sync_wrapper"
5037
+
version = "1.0.2"
5038
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5039
+
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
5040
+
dependencies = [
5041
+
"futures-core",
5042
+
]
5043
+
5044
+
[[package]]
5045
+
name = "synstructure"
5046
+
version = "0.13.2"
5047
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5048
+
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
5049
+
dependencies = [
5050
+
"proc-macro2",
5051
+
"quote",
5052
+
"syn 2.0.111",
5053
+
]
5054
+
5055
+
[[package]]
5056
+
name = "sys-locale"
5057
+
version = "0.3.2"
5058
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5059
+
checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4"
5060
+
dependencies = [
5061
+
"libc",
5062
+
]
5063
+
5064
+
[[package]]
5065
+
name = "sysinfo"
5066
+
version = "0.37.2"
5067
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5068
+
checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f"
5069
+
dependencies = [
5070
+
"libc",
5071
+
"memchr",
5072
+
"ntapi",
5073
+
"objc2-core-foundation",
5074
+
"objc2-io-kit",
5075
+
"windows 0.61.3",
5076
+
]
5077
+
5078
+
[[package]]
5079
+
name = "system-configuration"
5080
+
version = "0.6.1"
5081
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5082
+
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
5083
+
dependencies = [
5084
+
"bitflags",
5085
+
"core-foundation",
5086
+
"system-configuration-sys",
5087
+
]
5088
+
5089
+
[[package]]
5090
+
name = "system-configuration-sys"
5091
+
version = "0.6.0"
5092
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5093
+
checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
5094
+
dependencies = [
5095
+
"core-foundation-sys",
5096
+
"libc",
5097
+
]
5098
+
5099
+
[[package]]
5100
+
name = "tabled"
5101
+
version = "0.20.0"
5102
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5103
+
checksum = "e39a2ee1fbcd360805a771e1b300f78cc88fec7b8d3e2f71cd37bbf23e725c7d"
5104
+
dependencies = [
5105
+
"ansi-str",
5106
+
"ansitok",
5107
+
"papergrid",
5108
+
"testing_table",
5109
+
]
5110
+
5111
+
[[package]]
5112
+
name = "tagptr"
5113
+
version = "0.2.0"
5114
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5115
+
checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417"
5116
+
5117
+
[[package]]
5118
+
name = "tempfile"
5119
+
version = "3.23.0"
5120
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5121
+
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
5122
+
dependencies = [
5123
+
"fastrand",
5124
+
"getrandom 0.3.4",
5125
+
"once_cell",
5126
+
"rustix 1.1.2",
5127
+
"windows-sys 0.61.2",
5128
+
]
5129
+
5130
+
[[package]]
5131
+
name = "tendril"
5132
+
version = "0.4.3"
5133
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5134
+
checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
5135
+
dependencies = [
5136
+
"futf",
5137
+
"mac",
5138
+
"utf-8",
5139
+
]
5140
+
5141
+
[[package]]
5142
+
name = "terminal_size"
5143
+
version = "0.4.3"
5144
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5145
+
checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0"
5146
+
dependencies = [
5147
+
"rustix 1.1.2",
5148
+
"windows-sys 0.60.2",
5149
+
]
5150
+
5151
+
[[package]]
5152
+
name = "testing_table"
5153
+
version = "0.3.0"
5154
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5155
+
checksum = "0f8daae29995a24f65619e19d8d31dea5b389f3d853d8bf297bbf607cd0014cc"
5156
+
dependencies = [
5157
+
"ansitok",
5158
+
"unicode-width 0.2.2",
5159
+
]
5160
+
5161
+
[[package]]
5162
+
name = "textwrap"
5163
+
version = "0.16.2"
5164
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5165
+
checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057"
5166
+
dependencies = [
5167
+
"unicode-linebreak",
5168
+
"unicode-width 0.2.2",
5169
+
]
5170
+
5171
+
[[package]]
5172
+
name = "thiserror"
5173
+
version = "1.0.69"
5174
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5175
+
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
5176
+
dependencies = [
5177
+
"thiserror-impl 1.0.69",
5178
+
]
5179
+
5180
+
[[package]]
5181
+
name = "thiserror"
5182
+
version = "2.0.17"
5183
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5184
+
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
5185
+
dependencies = [
5186
+
"thiserror-impl 2.0.17",
5187
+
]
5188
+
5189
+
[[package]]
5190
+
name = "thiserror-impl"
5191
+
version = "1.0.69"
5192
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5193
+
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
5194
+
dependencies = [
5195
+
"proc-macro2",
5196
+
"quote",
5197
+
"syn 2.0.111",
5198
+
]
5199
+
5200
+
[[package]]
5201
+
name = "thiserror-impl"
5202
+
version = "2.0.17"
5203
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5204
+
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
5205
+
dependencies = [
5206
+
"proc-macro2",
5207
+
"quote",
5208
+
"syn 2.0.111",
5209
+
]
5210
+
5211
+
[[package]]
5212
+
name = "thread_local"
5213
+
version = "1.1.9"
5214
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5215
+
checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185"
5216
+
dependencies = [
5217
+
"cfg-if",
5218
+
]
5219
+
5220
+
[[package]]
5221
+
name = "time"
5222
+
version = "0.3.44"
5223
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5224
+
checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
5225
+
dependencies = [
5226
+
"deranged",
5227
+
"itoa",
5228
+
"libc",
5229
+
"num-conv",
5230
+
"num_threads",
5231
+
"powerfmt",
5232
+
"serde",
5233
+
"time-core",
5234
+
"time-macros",
5235
+
]
5236
+
5237
+
[[package]]
5238
+
name = "time-core"
5239
+
version = "0.1.6"
5240
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5241
+
checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
5242
+
5243
+
[[package]]
5244
+
name = "time-macros"
5245
+
version = "0.2.24"
5246
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5247
+
checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
5248
+
dependencies = [
5249
+
"num-conv",
5250
+
"time-core",
5251
+
]
5252
+
5253
+
[[package]]
5254
+
name = "tinystr"
5255
+
version = "0.8.2"
5256
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5257
+
checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
5258
+
dependencies = [
5259
+
"displaydoc",
5260
+
"serde_core",
5261
+
"zerovec",
5262
+
]
5263
+
5264
+
[[package]]
5265
+
name = "tinyvec"
5266
+
version = "1.10.0"
5267
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5268
+
checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa"
5269
+
dependencies = [
5270
+
"tinyvec_macros",
5271
+
]
5272
+
5273
+
[[package]]
5274
+
name = "tinyvec_macros"
5275
+
version = "0.1.1"
5276
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5277
+
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
5278
+
5279
+
[[package]]
5280
+
name = "titlecase"
5281
+
version = "3.6.0"
5282
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5283
+
checksum = "eb567088a91d59b492520c8149e2be5ce10d5deb2d9a383f3378df3259679d40"
5284
+
dependencies = [
5285
+
"regex",
5286
+
]
5287
+
5288
+
[[package]]
5289
+
name = "tokio"
5290
+
version = "1.48.0"
5291
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5292
+
checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
5293
+
dependencies = [
5294
+
"bytes",
5295
+
"libc",
5296
+
"mio",
5297
+
"pin-project-lite",
5298
+
"socket2",
5299
+
"tokio-macros",
5300
+
"windows-sys 0.61.2",
5301
+
]
5302
+
5303
+
[[package]]
5304
+
name = "tokio-macros"
5305
+
version = "2.6.0"
5306
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5307
+
checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
5308
+
dependencies = [
5309
+
"proc-macro2",
5310
+
"quote",
5311
+
"syn 2.0.111",
5312
+
]
5313
+
5314
+
[[package]]
5315
+
name = "tokio-rustls"
5316
+
version = "0.26.4"
5317
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5318
+
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
5319
+
dependencies = [
5320
+
"rustls",
5321
+
"tokio",
5322
+
]
5323
+
5324
+
[[package]]
5325
+
name = "tokio-util"
5326
+
version = "0.7.17"
5327
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5328
+
checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594"
5329
+
dependencies = [
5330
+
"bytes",
5331
+
"futures-core",
5332
+
"futures-sink",
5333
+
"futures-util",
5334
+
"pin-project-lite",
5335
+
"tokio",
5336
+
]
5337
+
5338
+
[[package]]
5339
+
name = "toml"
5340
+
version = "0.8.23"
5341
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5342
+
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
5343
+
dependencies = [
5344
+
"indexmap 2.12.1",
5345
+
"serde",
5346
+
"serde_spanned",
5347
+
"toml_datetime",
5348
+
"toml_edit",
5349
+
]
5350
+
5351
+
[[package]]
5352
+
name = "toml_datetime"
5353
+
version = "0.6.11"
5354
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5355
+
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
5356
+
dependencies = [
5357
+
"serde",
5358
+
]
5359
+
5360
+
[[package]]
5361
+
name = "toml_edit"
5362
+
version = "0.22.27"
5363
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5364
+
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
5365
+
dependencies = [
5366
+
"indexmap 2.12.1",
5367
+
"serde",
5368
+
"serde_spanned",
5369
+
"toml_datetime",
5370
+
"toml_write",
5371
+
"winnow",
5372
+
]
5373
+
5374
+
[[package]]
5375
+
name = "toml_write"
5376
+
version = "0.1.2"
5377
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5378
+
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
5379
+
5380
+
[[package]]
5381
+
name = "tower"
5382
+
version = "0.5.2"
5383
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5384
+
checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
5385
+
dependencies = [
5386
+
"futures-core",
5387
+
"futures-util",
5388
+
"pin-project-lite",
5389
+
"sync_wrapper",
5390
+
"tokio",
5391
+
"tower-layer",
5392
+
"tower-service",
5393
+
]
5394
+
5395
+
[[package]]
5396
+
name = "tower-http"
5397
+
version = "0.6.8"
5398
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5399
+
checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
5400
+
dependencies = [
5401
+
"async-compression",
5402
+
"bitflags",
5403
+
"bytes",
5404
+
"futures-core",
5405
+
"futures-util",
5406
+
"http",
5407
+
"http-body",
5408
+
"http-body-util",
5409
+
"iri-string",
5410
+
"pin-project-lite",
5411
+
"tokio",
5412
+
"tokio-util",
5413
+
"tower",
5414
+
"tower-layer",
5415
+
"tower-service",
5416
+
]
5417
+
5418
+
[[package]]
5419
+
name = "tower-layer"
5420
+
version = "0.3.3"
5421
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5422
+
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
5423
+
5424
+
[[package]]
5425
+
name = "tower-service"
5426
+
version = "0.3.3"
5427
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5428
+
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
5429
+
5430
+
[[package]]
5431
+
name = "tracing"
5432
+
version = "0.1.43"
5433
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5434
+
checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647"
5435
+
dependencies = [
5436
+
"pin-project-lite",
5437
+
"tracing-attributes",
5438
+
"tracing-core",
5439
+
]
5440
+
5441
+
[[package]]
5442
+
name = "tracing-attributes"
5443
+
version = "0.1.31"
5444
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5445
+
checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
5446
+
dependencies = [
5447
+
"proc-macro2",
5448
+
"quote",
5449
+
"syn 2.0.111",
5450
+
]
5451
+
5452
+
[[package]]
5453
+
name = "tracing-core"
5454
+
version = "0.1.35"
5455
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5456
+
checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c"
5457
+
dependencies = [
5458
+
"once_cell",
5459
+
"valuable",
5460
+
]
5461
+
5462
+
[[package]]
5463
+
name = "tracing-log"
5464
+
version = "0.2.0"
5465
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5466
+
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
5467
+
dependencies = [
5468
+
"log",
5469
+
"once_cell",
5470
+
"tracing-core",
5471
+
]
5472
+
5473
+
[[package]]
5474
+
name = "tracing-subscriber"
5475
+
version = "0.3.22"
5476
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5477
+
checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e"
5478
+
dependencies = [
5479
+
"matchers",
5480
+
"nu-ansi-term",
5481
+
"once_cell",
5482
+
"regex-automata",
5483
+
"sharded-slab",
5484
+
"smallvec",
5485
+
"thread_local",
5486
+
"tracing",
5487
+
"tracing-core",
5488
+
"tracing-log",
5489
+
]
5490
+
5491
+
[[package]]
5492
+
name = "trait-variant"
5493
+
version = "0.1.2"
5494
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5495
+
checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7"
5496
+
dependencies = [
5497
+
"proc-macro2",
5498
+
"quote",
5499
+
"syn 2.0.111",
5500
+
]
5501
+
5502
+
[[package]]
5503
+
name = "triomphe"
5504
+
version = "0.1.15"
5505
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5506
+
checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39"
5507
+
5508
+
[[package]]
5509
+
name = "try-lock"
5510
+
version = "0.2.5"
5511
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5512
+
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
5513
+
5514
+
[[package]]
5515
+
name = "type-map"
5516
+
version = "0.5.1"
5517
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5518
+
checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90"
5519
+
dependencies = [
5520
+
"rustc-hash",
5521
+
]
5522
+
5523
+
[[package]]
5524
+
name = "typeid"
5525
+
version = "1.0.3"
5526
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5527
+
checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
5528
+
5529
+
[[package]]
5530
+
name = "typenum"
5531
+
version = "1.19.0"
5532
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5533
+
checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
5534
+
5535
+
[[package]]
5536
+
name = "typetag"
5537
+
version = "0.2.21"
5538
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5539
+
checksum = "be2212c8a9b9bcfca32024de14998494cf9a5dfa59ea1b829de98bac374b86bf"
5540
+
dependencies = [
5541
+
"erased-serde",
5542
+
"inventory",
5543
+
"once_cell",
5544
+
"serde",
5545
+
"typetag-impl",
5546
+
]
5547
+
5548
+
[[package]]
5549
+
name = "typetag-impl"
5550
+
version = "0.2.21"
5551
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5552
+
checksum = "27a7a9b72ba121f6f1f6c3632b85604cac41aedb5ddc70accbebb6cac83de846"
5553
+
dependencies = [
5554
+
"proc-macro2",
5555
+
"quote",
5556
+
"syn 2.0.111",
5557
+
]
5558
+
5559
+
[[package]]
5560
+
name = "tz-rs"
5561
+
version = "0.7.1"
5562
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5563
+
checksum = "14eff19b8dc1ace5bf7e4d920b2628ae3837f422ff42210cb1567cbf68b5accf"
5564
+
5565
+
[[package]]
5566
+
name = "tzdb"
5567
+
version = "0.7.3"
5568
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5569
+
checksum = "56d4e985b6dda743ae7fd4140c28105316ffd75bc58258ee6cc12934e3eb7a0c"
5570
+
dependencies = [
5571
+
"iana-time-zone",
5572
+
"tz-rs",
5573
+
"tzdb_data",
5574
+
]
5575
+
5576
+
[[package]]
5577
+
name = "tzdb_data"
5578
+
version = "0.2.3"
5579
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5580
+
checksum = "42302a846dea7ab786f42dc5f519387069045acff793e1178d9368414168fe95"
5581
+
dependencies = [
5582
+
"tz-rs",
5583
+
]
5584
+
5585
+
[[package]]
5586
+
name = "ucd-trie"
5587
+
version = "0.1.7"
5588
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5589
+
checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
5590
+
5591
+
[[package]]
5592
+
name = "uds_windows"
5593
+
version = "1.1.0"
5594
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5595
+
checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9"
5596
+
dependencies = [
5597
+
"memoffset",
5598
+
"tempfile",
5599
+
"winapi",
5600
+
]
5601
+
5602
+
[[package]]
5603
+
name = "umask"
5604
+
version = "2.1.0"
5605
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5606
+
checksum = "ec9a46c2549e35c054e0ffe281a3a6ec0007793db4df106604d37ed3f4d73d1c"
5607
+
dependencies = [
5608
+
"thiserror 1.0.69",
5609
+
]
5610
+
5611
+
[[package]]
5612
+
name = "unic-langid"
5613
+
version = "0.9.6"
5614
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5615
+
checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05"
5616
+
dependencies = [
5617
+
"unic-langid-impl",
5618
+
]
5619
+
5620
+
[[package]]
5621
+
name = "unic-langid-impl"
5622
+
version = "0.9.6"
5623
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5624
+
checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658"
5625
+
dependencies = [
5626
+
"tinystr",
5627
+
]
5628
+
5629
+
[[package]]
5630
+
name = "unicase"
5631
+
version = "2.8.1"
5632
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5633
+
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
5634
+
5635
+
[[package]]
5636
+
name = "unicode-ident"
5637
+
version = "1.0.22"
5638
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5639
+
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
5640
+
5641
+
[[package]]
5642
+
name = "unicode-linebreak"
5643
+
version = "0.1.5"
5644
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5645
+
checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
5646
+
5647
+
[[package]]
5648
+
name = "unicode-segmentation"
5649
+
version = "1.12.0"
5650
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5651
+
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
5652
+
5653
+
[[package]]
5654
+
name = "unicode-width"
5655
+
version = "0.1.14"
5656
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5657
+
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
5658
+
5659
+
[[package]]
5660
+
name = "unicode-width"
5661
+
version = "0.2.2"
5662
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5663
+
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
5664
+
5665
+
[[package]]
5666
+
name = "unicode-xid"
5667
+
version = "0.2.6"
5668
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5669
+
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
5670
+
5671
+
[[package]]
5672
+
name = "unit-prefix"
5673
+
version = "0.5.2"
5674
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5675
+
checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3"
5676
+
5677
+
[[package]]
5678
+
name = "unsafe-libyaml"
5679
+
version = "0.2.11"
5680
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5681
+
checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
5682
+
5683
+
[[package]]
5684
+
name = "unsigned-varint"
5685
+
version = "0.7.2"
5686
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5687
+
checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105"
5688
+
5689
+
[[package]]
5690
+
name = "unsigned-varint"
5691
+
version = "0.8.0"
5692
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5693
+
checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06"
5694
+
5695
+
[[package]]
5696
+
name = "untrusted"
5697
+
version = "0.9.0"
5698
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5699
+
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
5700
+
5701
+
[[package]]
5702
+
name = "url"
5703
+
version = "2.5.7"
5704
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5705
+
checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
5706
+
dependencies = [
5707
+
"form_urlencoded",
5708
+
"idna",
5709
+
"percent-encoding",
5710
+
"serde",
5711
+
]
5712
+
5713
+
[[package]]
5714
+
name = "urlencoding"
5715
+
version = "2.1.3"
5716
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5717
+
checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
5718
+
5719
+
[[package]]
5720
+
name = "utf-8"
5721
+
version = "0.7.6"
5722
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5723
+
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
5724
+
5725
+
[[package]]
5726
+
name = "utf8_iter"
5727
+
version = "1.0.4"
5728
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5729
+
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
5730
+
5731
+
[[package]]
5732
+
name = "utf8parse"
5733
+
version = "0.2.2"
5734
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5735
+
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
5736
+
5737
+
[[package]]
5738
+
name = "uucore"
5739
+
version = "0.4.0"
5740
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5741
+
checksum = "2003164a38a7f39da1de103a70fa66b745f572f0045ec261481539516c0a8a0e"
5742
+
dependencies = [
5743
+
"bstr",
5744
+
"clap",
5745
+
"fluent",
5746
+
"fluent-bundle",
5747
+
"fluent-syntax",
5748
+
"libc",
5749
+
"nix",
5750
+
"number_prefix",
5751
+
"os_display",
5752
+
"phf 0.13.1",
5753
+
"procfs 0.18.0",
5754
+
"thiserror 2.0.17",
5755
+
"unic-langid",
5756
+
"uucore_procs",
5757
+
"wild",
5758
+
]
5759
+
5760
+
[[package]]
5761
+
name = "uucore_procs"
5762
+
version = "0.4.0"
5763
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5764
+
checksum = "c76f0308f7810d915246a39748e7f5d64e43e6bb9d6c8107224f9d741aefc375"
5765
+
dependencies = [
5766
+
"proc-macro2",
5767
+
"quote",
5768
+
]
5769
+
5770
+
[[package]]
5771
+
name = "v_htmlescape"
5772
+
version = "0.15.8"
5773
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5774
+
checksum = "4e8257fbc510f0a46eb602c10215901938b5c2a7d5e70fc11483b1d3c9b5b18c"
5775
+
5776
+
[[package]]
5777
+
name = "valuable"
5778
+
version = "0.1.1"
5779
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5780
+
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
5781
+
5782
+
[[package]]
5783
+
name = "version_check"
5784
+
version = "0.9.5"
5785
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5786
+
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
5787
+
5788
+
[[package]]
5789
+
name = "vfs"
5790
+
version = "0.12.1"
5791
+
source = "git+https://github.com/landaire/rust-vfs?branch=fix%2Fwasm#c4341e8e7c16a019c1a1415fc8a413bf883a08d5"
5792
+
dependencies = [
5793
+
"filetime",
5794
+
]
5795
+
5796
+
[[package]]
5797
+
name = "vte"
5798
+
version = "0.14.1"
5799
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5800
+
checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077"
5801
+
dependencies = [
5802
+
"arrayvec",
5803
+
"memchr",
5804
+
]
5805
+
5806
+
[[package]]
5807
+
name = "walkdir"
5808
+
version = "2.5.0"
5809
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5810
+
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
5811
+
dependencies = [
5812
+
"same-file",
5813
+
"winapi-util",
5814
+
]
5815
+
5816
+
[[package]]
5817
+
name = "want"
5818
+
version = "0.3.1"
5819
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5820
+
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
5821
+
dependencies = [
5822
+
"try-lock",
5823
+
]
5824
+
5825
+
[[package]]
5826
+
name = "wasi"
5827
+
version = "0.11.1+wasi-snapshot-preview1"
5828
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5829
+
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
5830
+
5831
+
[[package]]
5832
+
name = "wasip2"
5833
+
version = "1.0.1+wasi-0.2.4"
5834
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5835
+
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
5836
+
dependencies = [
5837
+
"wit-bindgen",
5838
+
]
5839
+
5840
+
[[package]]
5841
+
name = "wasm-bindgen"
5842
+
version = "0.2.104"
5843
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5844
+
checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d"
5845
+
dependencies = [
5846
+
"cfg-if",
5847
+
"once_cell",
5848
+
"rustversion",
5849
+
"wasm-bindgen-macro",
5850
+
"wasm-bindgen-shared",
5851
+
]
5852
+
5853
+
[[package]]
5854
+
name = "wasm-bindgen-backend"
5855
+
version = "0.2.104"
5856
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5857
+
checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19"
5858
+
dependencies = [
5859
+
"bumpalo",
5860
+
"log",
5861
+
"proc-macro2",
5862
+
"quote",
5863
+
"syn 2.0.111",
5864
+
"wasm-bindgen-shared",
5865
+
]
5866
+
5867
+
[[package]]
5868
+
name = "wasm-bindgen-futures"
5869
+
version = "0.4.54"
5870
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5871
+
checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c"
5872
+
dependencies = [
5873
+
"cfg-if",
5874
+
"js-sys",
5875
+
"once_cell",
5876
+
"wasm-bindgen",
5877
+
"web-sys",
5878
+
]
5879
+
5880
+
[[package]]
5881
+
name = "wasm-bindgen-macro"
5882
+
version = "0.2.104"
5883
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5884
+
checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119"
5885
+
dependencies = [
5886
+
"quote",
5887
+
"wasm-bindgen-macro-support",
5888
+
]
5889
+
5890
+
[[package]]
5891
+
name = "wasm-bindgen-macro-support"
5892
+
version = "0.2.104"
5893
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5894
+
checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7"
5895
+
dependencies = [
5896
+
"proc-macro2",
5897
+
"quote",
5898
+
"syn 2.0.111",
5899
+
"wasm-bindgen-backend",
5900
+
"wasm-bindgen-shared",
5901
+
]
5902
+
5903
+
[[package]]
5904
+
name = "wasm-bindgen-shared"
5905
+
version = "0.2.104"
5906
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5907
+
checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1"
5908
+
dependencies = [
5909
+
"unicode-ident",
5910
+
]
5911
+
5912
+
[[package]]
5913
+
name = "wax"
5914
+
version = "0.6.0"
5915
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5916
+
checksum = "8d12a78aa0bab22d2f26ed1a96df7ab58e8a93506a3e20adb47c51a93b4e1357"
5917
+
dependencies = [
5918
+
"const_format",
5919
+
"itertools 0.11.0",
5920
+
"nom",
5921
+
"pori",
5922
+
"regex",
5923
+
"thiserror 1.0.69",
5924
+
"walkdir",
5925
+
]
5926
+
5927
+
[[package]]
5928
+
name = "web-sys"
5929
+
version = "0.3.81"
5930
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5931
+
checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120"
5932
+
dependencies = [
5933
+
"js-sys",
5934
+
"wasm-bindgen",
5935
+
]
5936
+
5937
+
[[package]]
5938
+
name = "web-time"
5939
+
version = "1.1.0"
5940
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5941
+
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
5942
+
dependencies = [
5943
+
"js-sys",
5944
+
"wasm-bindgen",
5945
+
]
5946
+
5947
+
[[package]]
5948
+
name = "webpage"
5949
+
version = "2.0.1"
5950
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5951
+
checksum = "70862efc041d46e6bbaa82bb9c34ae0596d090e86cbd14bd9e93b36ee6802eac"
5952
+
dependencies = [
5953
+
"html5ever",
5954
+
"markup5ever_rcdom",
5955
+
"serde_json",
5956
+
"url",
5957
+
]
5958
+
5959
+
[[package]]
5960
+
name = "webpki-roots"
5961
+
version = "1.0.4"
5962
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5963
+
checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e"
5964
+
dependencies = [
5965
+
"rustls-pki-types",
5966
+
]
5967
+
5968
+
[[package]]
5969
+
name = "wild"
5970
+
version = "2.2.1"
5971
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5972
+
checksum = "a3131afc8c575281e1e80f36ed6a092aa502c08b18ed7524e86fbbb12bb410e1"
5973
+
dependencies = [
5974
+
"glob",
5975
+
]
5976
+
5977
+
[[package]]
5978
+
name = "winapi"
5979
+
version = "0.3.9"
5980
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5981
+
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
5982
+
dependencies = [
5983
+
"winapi-i686-pc-windows-gnu",
5984
+
"winapi-x86_64-pc-windows-gnu",
5985
+
]
5986
+
5987
+
[[package]]
5988
+
name = "winapi-i686-pc-windows-gnu"
5989
+
version = "0.4.0"
5990
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5991
+
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
5992
+
5993
+
[[package]]
5994
+
name = "winapi-util"
5995
+
version = "0.1.11"
5996
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5997
+
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
5998
+
dependencies = [
5999
+
"windows-sys 0.61.2",
6000
+
]
6001
+
6002
+
[[package]]
6003
+
name = "winapi-x86_64-pc-windows-gnu"
6004
+
version = "0.4.0"
6005
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6006
+
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
6007
+
6008
+
[[package]]
6009
+
name = "windows"
6010
+
version = "0.61.3"
6011
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6012
+
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
6013
+
dependencies = [
6014
+
"windows-collections 0.2.0",
6015
+
"windows-core 0.61.2",
6016
+
"windows-future 0.2.1",
6017
+
"windows-link 0.1.3",
6018
+
"windows-numerics 0.2.0",
6019
+
]
6020
+
6021
+
[[package]]
6022
+
name = "windows"
6023
+
version = "0.62.2"
6024
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6025
+
checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
6026
+
dependencies = [
6027
+
"windows-collections 0.3.2",
6028
+
"windows-core 0.62.2",
6029
+
"windows-future 0.3.2",
6030
+
"windows-numerics 0.3.1",
6031
+
]
6032
+
6033
+
[[package]]
6034
+
name = "windows-collections"
6035
+
version = "0.2.0"
6036
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6037
+
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
6038
+
dependencies = [
6039
+
"windows-core 0.61.2",
6040
+
]
6041
+
6042
+
[[package]]
6043
+
name = "windows-collections"
6044
+
version = "0.3.2"
6045
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6046
+
checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
6047
+
dependencies = [
6048
+
"windows-core 0.62.2",
6049
+
]
6050
+
6051
+
[[package]]
6052
+
name = "windows-core"
6053
+
version = "0.61.2"
6054
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6055
+
checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
6056
+
dependencies = [
6057
+
"windows-implement",
6058
+
"windows-interface",
6059
+
"windows-link 0.1.3",
6060
+
"windows-result 0.3.4",
6061
+
"windows-strings 0.4.2",
6062
+
]
6063
+
6064
+
[[package]]
6065
+
name = "windows-core"
6066
+
version = "0.62.2"
6067
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6068
+
checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
6069
+
dependencies = [
6070
+
"windows-implement",
6071
+
"windows-interface",
6072
+
"windows-link 0.2.1",
6073
+
"windows-result 0.4.1",
6074
+
"windows-strings 0.5.1",
6075
+
]
6076
+
6077
+
[[package]]
6078
+
name = "windows-future"
6079
+
version = "0.2.1"
6080
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6081
+
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
6082
+
dependencies = [
6083
+
"windows-core 0.61.2",
6084
+
"windows-link 0.1.3",
6085
+
"windows-threading 0.1.0",
6086
+
]
6087
+
6088
+
[[package]]
6089
+
name = "windows-future"
6090
+
version = "0.3.2"
6091
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6092
+
checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
6093
+
dependencies = [
6094
+
"windows-core 0.62.2",
6095
+
"windows-link 0.2.1",
6096
+
"windows-threading 0.2.1",
6097
+
]
6098
+
6099
+
[[package]]
6100
+
name = "windows-implement"
6101
+
version = "0.60.2"
6102
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6103
+
checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
6104
+
dependencies = [
6105
+
"proc-macro2",
6106
+
"quote",
6107
+
"syn 2.0.111",
6108
+
]
6109
+
6110
+
[[package]]
6111
+
name = "windows-interface"
6112
+
version = "0.59.3"
6113
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6114
+
checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
6115
+
dependencies = [
6116
+
"proc-macro2",
6117
+
"quote",
6118
+
"syn 2.0.111",
6119
+
]
6120
+
6121
+
[[package]]
6122
+
name = "windows-link"
6123
+
version = "0.1.3"
6124
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6125
+
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
6126
+
6127
+
[[package]]
6128
+
name = "windows-link"
6129
+
version = "0.2.1"
6130
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6131
+
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
6132
+
6133
+
[[package]]
6134
+
name = "windows-numerics"
6135
+
version = "0.2.0"
6136
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6137
+
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
6138
+
dependencies = [
6139
+
"windows-core 0.61.2",
6140
+
"windows-link 0.1.3",
6141
+
]
6142
+
6143
+
[[package]]
6144
+
name = "windows-numerics"
6145
+
version = "0.3.1"
6146
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6147
+
checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
6148
+
dependencies = [
6149
+
"windows-core 0.62.2",
6150
+
"windows-link 0.2.1",
6151
+
]
6152
+
6153
+
[[package]]
6154
+
name = "windows-registry"
6155
+
version = "0.6.1"
6156
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6157
+
checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
6158
+
dependencies = [
6159
+
"windows-link 0.2.1",
6160
+
"windows-result 0.4.1",
6161
+
"windows-strings 0.5.1",
6162
+
]
6163
+
6164
+
[[package]]
6165
+
name = "windows-result"
6166
+
version = "0.3.4"
6167
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6168
+
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
6169
+
dependencies = [
6170
+
"windows-link 0.1.3",
6171
+
]
6172
+
6173
+
[[package]]
6174
+
name = "windows-result"
6175
+
version = "0.4.1"
6176
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6177
+
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
6178
+
dependencies = [
6179
+
"windows-link 0.2.1",
6180
+
]
6181
+
6182
+
[[package]]
6183
+
name = "windows-strings"
6184
+
version = "0.4.2"
6185
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6186
+
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
6187
+
dependencies = [
6188
+
"windows-link 0.1.3",
6189
+
]
6190
+
6191
+
[[package]]
6192
+
name = "windows-strings"
6193
+
version = "0.5.1"
6194
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6195
+
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
6196
+
dependencies = [
6197
+
"windows-link 0.2.1",
6198
+
]
6199
+
6200
+
[[package]]
6201
+
name = "windows-sys"
6202
+
version = "0.48.0"
6203
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6204
+
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
6205
+
dependencies = [
6206
+
"windows-targets 0.48.5",
6207
+
]
6208
+
6209
+
[[package]]
6210
+
name = "windows-sys"
6211
+
version = "0.52.0"
6212
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6213
+
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
6214
+
dependencies = [
6215
+
"windows-targets 0.52.6",
6216
+
]
6217
+
6218
+
[[package]]
6219
+
name = "windows-sys"
6220
+
version = "0.59.0"
6221
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6222
+
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
6223
+
dependencies = [
6224
+
"windows-targets 0.52.6",
6225
+
]
6226
+
6227
+
[[package]]
6228
+
name = "windows-sys"
6229
+
version = "0.60.2"
6230
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6231
+
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
6232
+
dependencies = [
6233
+
"windows-targets 0.53.5",
6234
+
]
6235
+
6236
+
[[package]]
6237
+
name = "windows-sys"
6238
+
version = "0.61.2"
6239
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6240
+
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
6241
+
dependencies = [
6242
+
"windows-link 0.2.1",
6243
+
]
6244
+
6245
+
[[package]]
6246
+
name = "windows-targets"
6247
+
version = "0.48.5"
6248
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6249
+
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
6250
+
dependencies = [
6251
+
"windows_aarch64_gnullvm 0.48.5",
6252
+
"windows_aarch64_msvc 0.48.5",
6253
+
"windows_i686_gnu 0.48.5",
6254
+
"windows_i686_msvc 0.48.5",
6255
+
"windows_x86_64_gnu 0.48.5",
6256
+
"windows_x86_64_gnullvm 0.48.5",
6257
+
"windows_x86_64_msvc 0.48.5",
6258
+
]
6259
+
6260
+
[[package]]
6261
+
name = "windows-targets"
6262
+
version = "0.52.6"
6263
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6264
+
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
6265
+
dependencies = [
6266
+
"windows_aarch64_gnullvm 0.52.6",
6267
+
"windows_aarch64_msvc 0.52.6",
6268
+
"windows_i686_gnu 0.52.6",
6269
+
"windows_i686_gnullvm 0.52.6",
6270
+
"windows_i686_msvc 0.52.6",
6271
+
"windows_x86_64_gnu 0.52.6",
6272
+
"windows_x86_64_gnullvm 0.52.6",
6273
+
"windows_x86_64_msvc 0.52.6",
6274
+
]
6275
+
6276
+
[[package]]
6277
+
name = "windows-targets"
6278
+
version = "0.53.5"
6279
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6280
+
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
6281
+
dependencies = [
6282
+
"windows-link 0.2.1",
6283
+
"windows_aarch64_gnullvm 0.53.1",
6284
+
"windows_aarch64_msvc 0.53.1",
6285
+
"windows_i686_gnu 0.53.1",
6286
+
"windows_i686_gnullvm 0.53.1",
6287
+
"windows_i686_msvc 0.53.1",
6288
+
"windows_x86_64_gnu 0.53.1",
6289
+
"windows_x86_64_gnullvm 0.53.1",
6290
+
"windows_x86_64_msvc 0.53.1",
6291
+
]
6292
+
6293
+
[[package]]
6294
+
name = "windows-threading"
6295
+
version = "0.1.0"
6296
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6297
+
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
6298
+
dependencies = [
6299
+
"windows-link 0.1.3",
6300
+
]
6301
+
6302
+
[[package]]
6303
+
name = "windows-threading"
6304
+
version = "0.2.1"
6305
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6306
+
checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
6307
+
dependencies = [
6308
+
"windows-link 0.2.1",
6309
+
]
6310
+
6311
+
[[package]]
6312
+
name = "windows_aarch64_gnullvm"
6313
+
version = "0.48.5"
6314
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6315
+
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
6316
+
6317
+
[[package]]
6318
+
name = "windows_aarch64_gnullvm"
6319
+
version = "0.52.6"
6320
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6321
+
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
6322
+
6323
+
[[package]]
6324
+
name = "windows_aarch64_gnullvm"
6325
+
version = "0.53.1"
6326
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6327
+
checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
6328
+
6329
+
[[package]]
6330
+
name = "windows_aarch64_msvc"
6331
+
version = "0.48.5"
6332
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6333
+
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
6334
+
6335
+
[[package]]
6336
+
name = "windows_aarch64_msvc"
6337
+
version = "0.52.6"
6338
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6339
+
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
6340
+
6341
+
[[package]]
6342
+
name = "windows_aarch64_msvc"
6343
+
version = "0.53.1"
6344
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6345
+
checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
6346
+
6347
+
[[package]]
6348
+
name = "windows_i686_gnu"
6349
+
version = "0.48.5"
6350
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6351
+
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
6352
+
6353
+
[[package]]
6354
+
name = "windows_i686_gnu"
6355
+
version = "0.52.6"
6356
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6357
+
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
6358
+
6359
+
[[package]]
6360
+
name = "windows_i686_gnu"
6361
+
version = "0.53.1"
6362
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6363
+
checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
6364
+
6365
+
[[package]]
6366
+
name = "windows_i686_gnullvm"
6367
+
version = "0.52.6"
6368
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6369
+
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
6370
+
6371
+
[[package]]
6372
+
name = "windows_i686_gnullvm"
6373
+
version = "0.53.1"
6374
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6375
+
checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
6376
+
6377
+
[[package]]
6378
+
name = "windows_i686_msvc"
6379
+
version = "0.48.5"
6380
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6381
+
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
6382
+
6383
+
[[package]]
6384
+
name = "windows_i686_msvc"
6385
+
version = "0.52.6"
6386
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6387
+
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
6388
+
6389
+
[[package]]
6390
+
name = "windows_i686_msvc"
6391
+
version = "0.53.1"
6392
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6393
+
checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
6394
+
6395
+
[[package]]
6396
+
name = "windows_x86_64_gnu"
6397
+
version = "0.48.5"
6398
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6399
+
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
6400
+
6401
+
[[package]]
6402
+
name = "windows_x86_64_gnu"
6403
+
version = "0.52.6"
6404
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6405
+
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
6406
+
6407
+
[[package]]
6408
+
name = "windows_x86_64_gnu"
6409
+
version = "0.53.1"
6410
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6411
+
checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
6412
+
6413
+
[[package]]
6414
+
name = "windows_x86_64_gnullvm"
6415
+
version = "0.48.5"
6416
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6417
+
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
6418
+
6419
+
[[package]]
6420
+
name = "windows_x86_64_gnullvm"
6421
+
version = "0.52.6"
6422
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6423
+
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
6424
+
6425
+
[[package]]
6426
+
name = "windows_x86_64_gnullvm"
6427
+
version = "0.53.1"
6428
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6429
+
checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
6430
+
6431
+
[[package]]
6432
+
name = "windows_x86_64_msvc"
6433
+
version = "0.48.5"
6434
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6435
+
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
6436
+
6437
+
[[package]]
6438
+
name = "windows_x86_64_msvc"
6439
+
version = "0.52.6"
6440
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6441
+
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
6442
+
6443
+
[[package]]
6444
+
name = "windows_x86_64_msvc"
6445
+
version = "0.53.1"
6446
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6447
+
checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
6448
+
6449
+
[[package]]
6450
+
name = "winnow"
6451
+
version = "0.7.14"
6452
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6453
+
checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829"
6454
+
dependencies = [
6455
+
"memchr",
6456
+
]
6457
+
6458
+
[[package]]
6459
+
name = "winreg"
6460
+
version = "0.52.0"
6461
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6462
+
checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5"
6463
+
dependencies = [
6464
+
"cfg-if",
6465
+
"windows-sys 0.48.0",
6466
+
]
6467
+
6468
+
[[package]]
6469
+
name = "wit-bindgen"
6470
+
version = "0.46.0"
6471
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6472
+
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
6473
+
6474
+
[[package]]
6475
+
name = "writeable"
6476
+
version = "0.6.2"
6477
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6478
+
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
6479
+
6480
+
[[package]]
6481
+
name = "xml5ever"
6482
+
version = "0.18.1"
6483
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6484
+
checksum = "9bbb26405d8e919bc1547a5aa9abc95cbfa438f04844f5fdd9dc7596b748bf69"
6485
+
dependencies = [
6486
+
"log",
6487
+
"mac",
6488
+
"markup5ever",
6489
+
]
6490
+
6491
+
[[package]]
6492
+
name = "yansi"
6493
+
version = "1.0.1"
6494
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6495
+
checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049"
6496
+
6497
+
[[package]]
6498
+
name = "yoke"
6499
+
version = "0.8.1"
6500
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6501
+
checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
6502
+
dependencies = [
6503
+
"stable_deref_trait",
6504
+
"yoke-derive",
6505
+
"zerofrom",
6506
+
]
6507
+
6508
+
[[package]]
6509
+
name = "yoke-derive"
6510
+
version = "0.8.1"
6511
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6512
+
checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
6513
+
dependencies = [
6514
+
"proc-macro2",
6515
+
"quote",
6516
+
"syn 2.0.111",
6517
+
"synstructure",
6518
+
]
6519
+
6520
+
[[package]]
6521
+
name = "zerocopy"
6522
+
version = "0.7.35"
6523
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6524
+
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
6525
+
dependencies = [
6526
+
"byteorder",
6527
+
"zerocopy-derive 0.7.35",
6528
+
]
6529
+
6530
+
[[package]]
6531
+
name = "zerocopy"
6532
+
version = "0.8.31"
6533
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6534
+
checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3"
6535
+
dependencies = [
6536
+
"zerocopy-derive 0.8.31",
6537
+
]
6538
+
6539
+
[[package]]
6540
+
name = "zerocopy-derive"
6541
+
version = "0.7.35"
6542
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6543
+
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
6544
+
dependencies = [
6545
+
"proc-macro2",
6546
+
"quote",
6547
+
"syn 2.0.111",
6548
+
]
6549
+
6550
+
[[package]]
6551
+
name = "zerocopy-derive"
6552
+
version = "0.8.31"
6553
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6554
+
checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a"
6555
+
dependencies = [
6556
+
"proc-macro2",
6557
+
"quote",
6558
+
"syn 2.0.111",
6559
+
]
6560
+
6561
+
[[package]]
6562
+
name = "zerofrom"
6563
+
version = "0.1.6"
6564
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6565
+
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
6566
+
dependencies = [
6567
+
"zerofrom-derive",
6568
+
]
6569
+
6570
+
[[package]]
6571
+
name = "zerofrom-derive"
6572
+
version = "0.1.6"
6573
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6574
+
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
6575
+
dependencies = [
6576
+
"proc-macro2",
6577
+
"quote",
6578
+
"syn 2.0.111",
6579
+
"synstructure",
6580
+
]
6581
+
6582
+
[[package]]
6583
+
name = "zeroize"
6584
+
version = "1.8.2"
6585
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6586
+
checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
6587
+
dependencies = [
6588
+
"serde",
6589
+
]
6590
+
6591
+
[[package]]
6592
+
name = "zerotrie"
6593
+
version = "0.2.3"
6594
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6595
+
checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
6596
+
dependencies = [
6597
+
"displaydoc",
6598
+
"yoke",
6599
+
"zerofrom",
6600
+
]
6601
+
6602
+
[[package]]
6603
+
name = "zerovec"
6604
+
version = "0.11.5"
6605
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6606
+
checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
6607
+
dependencies = [
6608
+
"serde",
6609
+
"yoke",
6610
+
"zerofrom",
6611
+
"zerovec-derive",
6612
+
]
6613
+
6614
+
[[package]]
6615
+
name = "zerovec-derive"
6616
+
version = "0.11.2"
6617
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6618
+
checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
6619
+
dependencies = [
6620
+
"proc-macro2",
6621
+
"quote",
6622
+
"syn 2.0.111",
6623
+
]
6624
+
6625
+
[[package]]
6626
+
name = "zip"
6627
+
version = "4.6.1"
6628
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6629
+
checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1"
6630
+
dependencies = [
6631
+
"arbitrary",
6632
+
"crc32fast",
6633
+
"flate2",
6634
+
"indexmap 2.12.1",
6635
+
"memchr",
6636
+
"zopfli",
6637
+
]
6638
+
6639
+
[[package]]
6640
+
name = "zlib-rs"
6641
+
version = "0.5.4"
6642
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6643
+
checksum = "51f936044d677be1a1168fae1d03b583a285a5dd9d8cbf7b24c23aa1fc775235"
6644
+
6645
+
[[package]]
6646
+
name = "zopfli"
6647
+
version = "0.8.3"
6648
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6649
+
checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249"
6650
+
dependencies = [
6651
+
"bumpalo",
6652
+
"crc32fast",
6653
+
"log",
6654
+
"simd-adler32",
6655
+
]
+46
Cargo.toml
+46
Cargo.toml
···
1
+
[package]
2
+
name = "faunu"
3
+
version = "0.1.0"
4
+
edition = "2024"
5
+
6
+
[lib]
7
+
crate-type = ["cdylib"]
8
+
9
+
[dependencies]
10
+
wasm-bindgen = "=0.2.104"
11
+
wasm-bindgen-futures = "0.4"
12
+
getrandom = { version = "0.3", features = ["wasm_js"] }
13
+
web-sys = { version = "0.3", features = ["console", "Window"] }
14
+
vfs = { version = "0.12" }
15
+
nu-cmd-lang = { version = "0.109.1", default-features = false }
16
+
nu-command = { version = "0.109.1", default-features = false }
17
+
nu-engine = { version = "0.109.1", default-features = false }
18
+
nu-parser = { version = "0.109.1", default-features = false }
19
+
nu-protocol = { version = "0.109.1", default-features = false }
20
+
nu-cmd-extra = { version = "0.109.1", default-features = false }
21
+
serde = { version = "1.0", features = ["derive"] }
22
+
serde_json = "1"
23
+
miette = { version = "7.6", features = ["fancy"] }
24
+
ansi_term = "0.12.1"
25
+
26
+
anyhow = "1"
27
+
jacquard = { git = "https://tangled.sh/ptr.pet/jacquard", default-features = false, features = ["api", "cache"] }
28
+
jacquard-repo = { git = "https://tangled.sh/ptr.pet/jacquard" }
29
+
url = "2"
30
+
futures = "0.3.31"
31
+
js-sys = "=0.3.81"
32
+
serde_ipld_dagcbor = "0.6.4"
33
+
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] }
34
+
console_error_panic_hook = "0.1.7"
35
+
36
+
scc = "3"
37
+
rapidhash = { version = "4", features = ["unsafe"] }
38
+
39
+
[patch.crates-io]
40
+
vfs = { git = "https://github.com/landaire/rust-vfs", branch = "fix/wasm" }
41
+
42
+
[profile.release]
43
+
opt-level = 3
44
+
lto = true
45
+
codegen-units = 1
46
+
strip = true
+21
LICENSE
+21
LICENSE
···
1
+
MIT License
2
+
3
+
Copyright (c) 2020 Yusuf Bera Ertan
4
+
5
+
Permission is hereby granted, free of charge, to any person obtaining a copy
6
+
of this software and associated documentation files (the "Software"), to deal
7
+
in the Software without restriction, including without limitation the rights
8
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+
copies of the Software, and to permit persons to whom the Software is
10
+
furnished to do so, subject to the following conditions:
11
+
12
+
The above copyright notice and this permission notice shall be included in all
13
+
copies or substantial portions of the Software.
14
+
15
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+
SOFTWARE.
+3
README.md
+3
README.md
+783
deno.lock
+783
deno.lock
···
1
+
{
2
+
"version": "5",
3
+
"specifiers": {
4
+
"npm:@jsr/std__toml@*": "1.0.11",
5
+
"npm:@xterm/addon-canvas@0.7": "0.7.0_@xterm+xterm@5.5.0",
6
+
"npm:@xterm/addon-fit@0.10": "0.10.0_@xterm+xterm@5.5.0",
7
+
"npm:@xterm/addon-web-links@0.11": "0.11.0_@xterm+xterm@5.5.0",
8
+
"npm:@xterm/addon-webgl@0.18": "0.18.0_@xterm+xterm@5.5.0",
9
+
"npm:@xterm/xterm@^5.5.0": "5.5.0",
10
+
"npm:rolldown-vite@7.2.5": "7.2.5_picomatch@4.0.3",
11
+
"npm:typescript@~5.9.3": "5.9.3",
12
+
"npm:vite-plugin-top-level-await@^1.6.0": "1.6.0_vite@7.2.7__picomatch@4.0.3",
13
+
"npm:vite-plugin-wasm@^3.5.0": "3.5.0_vite@7.2.7__picomatch@4.0.3"
14
+
},
15
+
"npm": {
16
+
"@emnapi/core@1.7.1": {
17
+
"integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==",
18
+
"dependencies": [
19
+
"@emnapi/wasi-threads",
20
+
"tslib"
21
+
]
22
+
},
23
+
"@emnapi/runtime@1.7.1": {
24
+
"integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==",
25
+
"dependencies": [
26
+
"tslib"
27
+
]
28
+
},
29
+
"@emnapi/wasi-threads@1.1.0": {
30
+
"integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
31
+
"dependencies": [
32
+
"tslib"
33
+
]
34
+
},
35
+
"@esbuild/aix-ppc64@0.25.12": {
36
+
"integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
37
+
"os": ["aix"],
38
+
"cpu": ["ppc64"]
39
+
},
40
+
"@esbuild/android-arm64@0.25.12": {
41
+
"integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
42
+
"os": ["android"],
43
+
"cpu": ["arm64"]
44
+
},
45
+
"@esbuild/android-arm@0.25.12": {
46
+
"integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
47
+
"os": ["android"],
48
+
"cpu": ["arm"]
49
+
},
50
+
"@esbuild/android-x64@0.25.12": {
51
+
"integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
52
+
"os": ["android"],
53
+
"cpu": ["x64"]
54
+
},
55
+
"@esbuild/darwin-arm64@0.25.12": {
56
+
"integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
57
+
"os": ["darwin"],
58
+
"cpu": ["arm64"]
59
+
},
60
+
"@esbuild/darwin-x64@0.25.12": {
61
+
"integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
62
+
"os": ["darwin"],
63
+
"cpu": ["x64"]
64
+
},
65
+
"@esbuild/freebsd-arm64@0.25.12": {
66
+
"integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
67
+
"os": ["freebsd"],
68
+
"cpu": ["arm64"]
69
+
},
70
+
"@esbuild/freebsd-x64@0.25.12": {
71
+
"integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
72
+
"os": ["freebsd"],
73
+
"cpu": ["x64"]
74
+
},
75
+
"@esbuild/linux-arm64@0.25.12": {
76
+
"integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
77
+
"os": ["linux"],
78
+
"cpu": ["arm64"]
79
+
},
80
+
"@esbuild/linux-arm@0.25.12": {
81
+
"integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
82
+
"os": ["linux"],
83
+
"cpu": ["arm"]
84
+
},
85
+
"@esbuild/linux-ia32@0.25.12": {
86
+
"integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
87
+
"os": ["linux"],
88
+
"cpu": ["ia32"]
89
+
},
90
+
"@esbuild/linux-loong64@0.25.12": {
91
+
"integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
92
+
"os": ["linux"],
93
+
"cpu": ["loong64"]
94
+
},
95
+
"@esbuild/linux-mips64el@0.25.12": {
96
+
"integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
97
+
"os": ["linux"],
98
+
"cpu": ["mips64el"]
99
+
},
100
+
"@esbuild/linux-ppc64@0.25.12": {
101
+
"integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
102
+
"os": ["linux"],
103
+
"cpu": ["ppc64"]
104
+
},
105
+
"@esbuild/linux-riscv64@0.25.12": {
106
+
"integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
107
+
"os": ["linux"],
108
+
"cpu": ["riscv64"]
109
+
},
110
+
"@esbuild/linux-s390x@0.25.12": {
111
+
"integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
112
+
"os": ["linux"],
113
+
"cpu": ["s390x"]
114
+
},
115
+
"@esbuild/linux-x64@0.25.12": {
116
+
"integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
117
+
"os": ["linux"],
118
+
"cpu": ["x64"]
119
+
},
120
+
"@esbuild/netbsd-arm64@0.25.12": {
121
+
"integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
122
+
"os": ["netbsd"],
123
+
"cpu": ["arm64"]
124
+
},
125
+
"@esbuild/netbsd-x64@0.25.12": {
126
+
"integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
127
+
"os": ["netbsd"],
128
+
"cpu": ["x64"]
129
+
},
130
+
"@esbuild/openbsd-arm64@0.25.12": {
131
+
"integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
132
+
"os": ["openbsd"],
133
+
"cpu": ["arm64"]
134
+
},
135
+
"@esbuild/openbsd-x64@0.25.12": {
136
+
"integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
137
+
"os": ["openbsd"],
138
+
"cpu": ["x64"]
139
+
},
140
+
"@esbuild/openharmony-arm64@0.25.12": {
141
+
"integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
142
+
"os": ["openharmony"],
143
+
"cpu": ["arm64"]
144
+
},
145
+
"@esbuild/sunos-x64@0.25.12": {
146
+
"integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
147
+
"os": ["sunos"],
148
+
"cpu": ["x64"]
149
+
},
150
+
"@esbuild/win32-arm64@0.25.12": {
151
+
"integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
152
+
"os": ["win32"],
153
+
"cpu": ["arm64"]
154
+
},
155
+
"@esbuild/win32-ia32@0.25.12": {
156
+
"integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
157
+
"os": ["win32"],
158
+
"cpu": ["ia32"]
159
+
},
160
+
"@esbuild/win32-x64@0.25.12": {
161
+
"integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
162
+
"os": ["win32"],
163
+
"cpu": ["x64"]
164
+
},
165
+
"@jsr/std__collections@1.1.3": {
166
+
"integrity": "sha512-jGG6mv3IjOyxm6PyT1YVbLyAlZL+Gow6LOpBw+84qb1nkdJY0+t6bi7ICEqAwUz87cNjBS0P+yZQ5HHclJhsfw==",
167
+
"tarball": "https://npm.jsr.io/~/11/@jsr/std__collections/1.1.3.tgz"
168
+
},
169
+
"@jsr/std__toml@1.0.11": {
170
+
"integrity": "sha512-+LZAizoPAPwMDmRZr86/xPrbO8E0Oq0BJ70mr1fNMobJ/6X6v15Jk16ZClFGukWgzBMd8ggiMWnzp24+N3VNZg==",
171
+
"dependencies": [
172
+
"@jsr/std__collections"
173
+
],
174
+
"tarball": "https://npm.jsr.io/~/11/@jsr/std__toml/1.0.11.tgz"
175
+
},
176
+
"@napi-rs/wasm-runtime@1.1.0": {
177
+
"integrity": "sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==",
178
+
"dependencies": [
179
+
"@emnapi/core",
180
+
"@emnapi/runtime",
181
+
"@tybys/wasm-util"
182
+
]
183
+
},
184
+
"@oxc-project/runtime@0.97.0": {
185
+
"integrity": "sha512-yH0zw7z+jEws4dZ4IUKoix5Lh3yhqIJWF9Dc8PWvhpo7U7O+lJrv7ZZL4BeRO0la8LBQFwcCewtLBnVV7hPe/w=="
186
+
},
187
+
"@oxc-project/types@0.97.0": {
188
+
"integrity": "sha512-lxmZK4xFrdvU0yZiDwgVQTCvh2gHWBJCBk5ALsrtsBWhs0uDIi+FTOnXRQeQfs304imdvTdaakT/lqwQ8hkOXQ=="
189
+
},
190
+
"@rolldown/binding-android-arm64@1.0.0-beta.50": {
191
+
"integrity": "sha512-XlEkrOIHLyGT3avOgzfTFSjG+f+dZMw+/qd+Y3HLN86wlndrB/gSimrJCk4gOhr1XtRtEKfszpadI3Md4Z4/Ag==",
192
+
"os": ["android"],
193
+
"cpu": ["arm64"]
194
+
},
195
+
"@rolldown/binding-darwin-arm64@1.0.0-beta.50": {
196
+
"integrity": "sha512-+JRqKJhoFlt5r9q+DecAGPLZ5PxeLva+wCMtAuoFMWPoZzgcYrr599KQ+Ix0jwll4B4HGP43avu9My8KtSOR+w==",
197
+
"os": ["darwin"],
198
+
"cpu": ["arm64"]
199
+
},
200
+
"@rolldown/binding-darwin-x64@1.0.0-beta.50": {
201
+
"integrity": "sha512-fFXDjXnuX7/gQZQm/1FoivVtRcyAzdjSik7Eo+9iwPQ9EgtA5/nB2+jmbzaKtMGG3q+BnZbdKHCtOacmNrkIDA==",
202
+
"os": ["darwin"],
203
+
"cpu": ["x64"]
204
+
},
205
+
"@rolldown/binding-freebsd-x64@1.0.0-beta.50": {
206
+
"integrity": "sha512-F1b6vARy49tjmT/hbloplzgJS7GIvwWZqt+tAHEstCh0JIh9sa8FAMVqEmYxDviqKBaAI8iVvUREm/Kh/PD26Q==",
207
+
"os": ["freebsd"],
208
+
"cpu": ["x64"]
209
+
},
210
+
"@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.50": {
211
+
"integrity": "sha512-U6cR76N8T8M6lHj7EZrQ3xunLPxSvYYxA8vJsBKZiFZkT8YV4kjgCO3KwMJL0NOjQCPGKyiXO07U+KmJzdPGRw==",
212
+
"os": ["linux"],
213
+
"cpu": ["arm"]
214
+
},
215
+
"@rolldown/binding-linux-arm64-gnu@1.0.0-beta.50": {
216
+
"integrity": "sha512-ONgyjofCrrE3bnh5GZb8EINSFyR/hmwTzZ7oVuyUB170lboza1VMCnb8jgE6MsyyRgHYmN8Lb59i3NKGrxrYjw==",
217
+
"os": ["linux"],
218
+
"cpu": ["arm64"]
219
+
},
220
+
"@rolldown/binding-linux-arm64-musl@1.0.0-beta.50": {
221
+
"integrity": "sha512-L0zRdH2oDPkmB+wvuTl+dJbXCsx62SkqcEqdM+79LOcB+PxbAxxjzHU14BuZIQdXcAVDzfpMfaHWzZuwhhBTcw==",
222
+
"os": ["linux"],
223
+
"cpu": ["arm64"]
224
+
},
225
+
"@rolldown/binding-linux-x64-gnu@1.0.0-beta.50": {
226
+
"integrity": "sha512-gyoI8o/TGpQd3OzkJnh1M2kxy1Bisg8qJ5Gci0sXm9yLFzEXIFdtc4EAzepxGvrT2ri99ar5rdsmNG0zP0SbIg==",
227
+
"os": ["linux"],
228
+
"cpu": ["x64"]
229
+
},
230
+
"@rolldown/binding-linux-x64-musl@1.0.0-beta.50": {
231
+
"integrity": "sha512-zti8A7M+xFDpKlghpcCAzyOi+e5nfUl3QhU023ce5NCgUxRG5zGP2GR9LTydQ1rnIPwZUVBWd4o7NjZDaQxaXA==",
232
+
"os": ["linux"],
233
+
"cpu": ["x64"]
234
+
},
235
+
"@rolldown/binding-openharmony-arm64@1.0.0-beta.50": {
236
+
"integrity": "sha512-eZUssog7qljrrRU9Mi0eqYEPm3Ch0UwB+qlWPMKSUXHNqhm3TvDZarJQdTevGEfu3EHAXJvBIe0YFYr0TPVaMA==",
237
+
"os": ["openharmony"],
238
+
"cpu": ["arm64"]
239
+
},
240
+
"@rolldown/binding-wasm32-wasi@1.0.0-beta.50": {
241
+
"integrity": "sha512-nmCN0nIdeUnmgeDXiQ+2HU6FT162o+rxnF7WMkBm4M5Ds8qTU7Dzv2Wrf22bo4ftnlrb2hKK6FSwAJSAe2FWLg==",
242
+
"dependencies": [
243
+
"@napi-rs/wasm-runtime"
244
+
],
245
+
"cpu": ["wasm32"]
246
+
},
247
+
"@rolldown/binding-win32-arm64-msvc@1.0.0-beta.50": {
248
+
"integrity": "sha512-7kcNLi7Ua59JTTLvbe1dYb028QEPaJPJQHqkmSZ5q3tJueUeb6yjRtx8mw4uIqgWZcnQHAR3PrLN4XRJxvgIkA==",
249
+
"os": ["win32"],
250
+
"cpu": ["arm64"]
251
+
},
252
+
"@rolldown/binding-win32-ia32-msvc@1.0.0-beta.50": {
253
+
"integrity": "sha512-lL70VTNvSCdSZkDPPVMwWn/M2yQiYvSoXw9hTLgdIWdUfC3g72UaruezusR6ceRuwHCY1Ayu2LtKqXkBO5LIwg==",
254
+
"os": ["win32"],
255
+
"cpu": ["ia32"]
256
+
},
257
+
"@rolldown/binding-win32-x64-msvc@1.0.0-beta.50": {
258
+
"integrity": "sha512-4qU4x5DXWB4JPjyTne/wBNPqkbQU8J45bl21geERBKtEittleonioACBL1R0PsBu0Aq21SwMK5a9zdBkWSlQtQ==",
259
+
"os": ["win32"],
260
+
"cpu": ["x64"]
261
+
},
262
+
"@rolldown/pluginutils@1.0.0-beta.50": {
263
+
"integrity": "sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA=="
264
+
},
265
+
"@rollup/plugin-virtual@3.0.2": {
266
+
"integrity": "sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A=="
267
+
},
268
+
"@rollup/rollup-android-arm-eabi@4.53.3": {
269
+
"integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==",
270
+
"os": ["android"],
271
+
"cpu": ["arm"]
272
+
},
273
+
"@rollup/rollup-android-arm64@4.53.3": {
274
+
"integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==",
275
+
"os": ["android"],
276
+
"cpu": ["arm64"]
277
+
},
278
+
"@rollup/rollup-darwin-arm64@4.53.3": {
279
+
"integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==",
280
+
"os": ["darwin"],
281
+
"cpu": ["arm64"]
282
+
},
283
+
"@rollup/rollup-darwin-x64@4.53.3": {
284
+
"integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==",
285
+
"os": ["darwin"],
286
+
"cpu": ["x64"]
287
+
},
288
+
"@rollup/rollup-freebsd-arm64@4.53.3": {
289
+
"integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==",
290
+
"os": ["freebsd"],
291
+
"cpu": ["arm64"]
292
+
},
293
+
"@rollup/rollup-freebsd-x64@4.53.3": {
294
+
"integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==",
295
+
"os": ["freebsd"],
296
+
"cpu": ["x64"]
297
+
},
298
+
"@rollup/rollup-linux-arm-gnueabihf@4.53.3": {
299
+
"integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==",
300
+
"os": ["linux"],
301
+
"cpu": ["arm"]
302
+
},
303
+
"@rollup/rollup-linux-arm-musleabihf@4.53.3": {
304
+
"integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==",
305
+
"os": ["linux"],
306
+
"cpu": ["arm"]
307
+
},
308
+
"@rollup/rollup-linux-arm64-gnu@4.53.3": {
309
+
"integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==",
310
+
"os": ["linux"],
311
+
"cpu": ["arm64"]
312
+
},
313
+
"@rollup/rollup-linux-arm64-musl@4.53.3": {
314
+
"integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==",
315
+
"os": ["linux"],
316
+
"cpu": ["arm64"]
317
+
},
318
+
"@rollup/rollup-linux-loong64-gnu@4.53.3": {
319
+
"integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==",
320
+
"os": ["linux"],
321
+
"cpu": ["loong64"]
322
+
},
323
+
"@rollup/rollup-linux-ppc64-gnu@4.53.3": {
324
+
"integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==",
325
+
"os": ["linux"],
326
+
"cpu": ["ppc64"]
327
+
},
328
+
"@rollup/rollup-linux-riscv64-gnu@4.53.3": {
329
+
"integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==",
330
+
"os": ["linux"],
331
+
"cpu": ["riscv64"]
332
+
},
333
+
"@rollup/rollup-linux-riscv64-musl@4.53.3": {
334
+
"integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==",
335
+
"os": ["linux"],
336
+
"cpu": ["riscv64"]
337
+
},
338
+
"@rollup/rollup-linux-s390x-gnu@4.53.3": {
339
+
"integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==",
340
+
"os": ["linux"],
341
+
"cpu": ["s390x"]
342
+
},
343
+
"@rollup/rollup-linux-x64-gnu@4.53.3": {
344
+
"integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==",
345
+
"os": ["linux"],
346
+
"cpu": ["x64"]
347
+
},
348
+
"@rollup/rollup-linux-x64-musl@4.53.3": {
349
+
"integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==",
350
+
"os": ["linux"],
351
+
"cpu": ["x64"]
352
+
},
353
+
"@rollup/rollup-openharmony-arm64@4.53.3": {
354
+
"integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==",
355
+
"os": ["openharmony"],
356
+
"cpu": ["arm64"]
357
+
},
358
+
"@rollup/rollup-win32-arm64-msvc@4.53.3": {
359
+
"integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==",
360
+
"os": ["win32"],
361
+
"cpu": ["arm64"]
362
+
},
363
+
"@rollup/rollup-win32-ia32-msvc@4.53.3": {
364
+
"integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==",
365
+
"os": ["win32"],
366
+
"cpu": ["ia32"]
367
+
},
368
+
"@rollup/rollup-win32-x64-gnu@4.53.3": {
369
+
"integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==",
370
+
"os": ["win32"],
371
+
"cpu": ["x64"]
372
+
},
373
+
"@rollup/rollup-win32-x64-msvc@4.53.3": {
374
+
"integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==",
375
+
"os": ["win32"],
376
+
"cpu": ["x64"]
377
+
},
378
+
"@swc/core-darwin-arm64@1.15.3": {
379
+
"integrity": "sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==",
380
+
"os": ["darwin"],
381
+
"cpu": ["arm64"]
382
+
},
383
+
"@swc/core-darwin-x64@1.15.3": {
384
+
"integrity": "sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==",
385
+
"os": ["darwin"],
386
+
"cpu": ["x64"]
387
+
},
388
+
"@swc/core-linux-arm-gnueabihf@1.15.3": {
389
+
"integrity": "sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==",
390
+
"os": ["linux"],
391
+
"cpu": ["arm"]
392
+
},
393
+
"@swc/core-linux-arm64-gnu@1.15.3": {
394
+
"integrity": "sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==",
395
+
"os": ["linux"],
396
+
"cpu": ["arm64"]
397
+
},
398
+
"@swc/core-linux-arm64-musl@1.15.3": {
399
+
"integrity": "sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==",
400
+
"os": ["linux"],
401
+
"cpu": ["arm64"]
402
+
},
403
+
"@swc/core-linux-x64-gnu@1.15.3": {
404
+
"integrity": "sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==",
405
+
"os": ["linux"],
406
+
"cpu": ["x64"]
407
+
},
408
+
"@swc/core-linux-x64-musl@1.15.3": {
409
+
"integrity": "sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==",
410
+
"os": ["linux"],
411
+
"cpu": ["x64"]
412
+
},
413
+
"@swc/core-win32-arm64-msvc@1.15.3": {
414
+
"integrity": "sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==",
415
+
"os": ["win32"],
416
+
"cpu": ["arm64"]
417
+
},
418
+
"@swc/core-win32-ia32-msvc@1.15.3": {
419
+
"integrity": "sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==",
420
+
"os": ["win32"],
421
+
"cpu": ["ia32"]
422
+
},
423
+
"@swc/core-win32-x64-msvc@1.15.3": {
424
+
"integrity": "sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==",
425
+
"os": ["win32"],
426
+
"cpu": ["x64"]
427
+
},
428
+
"@swc/core@1.15.3": {
429
+
"integrity": "sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==",
430
+
"dependencies": [
431
+
"@swc/counter",
432
+
"@swc/types"
433
+
],
434
+
"optionalDependencies": [
435
+
"@swc/core-darwin-arm64",
436
+
"@swc/core-darwin-x64",
437
+
"@swc/core-linux-arm-gnueabihf",
438
+
"@swc/core-linux-arm64-gnu",
439
+
"@swc/core-linux-arm64-musl",
440
+
"@swc/core-linux-x64-gnu",
441
+
"@swc/core-linux-x64-musl",
442
+
"@swc/core-win32-arm64-msvc",
443
+
"@swc/core-win32-ia32-msvc",
444
+
"@swc/core-win32-x64-msvc"
445
+
],
446
+
"scripts": true
447
+
},
448
+
"@swc/counter@0.1.3": {
449
+
"integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
450
+
},
451
+
"@swc/types@0.1.25": {
452
+
"integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==",
453
+
"dependencies": [
454
+
"@swc/counter"
455
+
]
456
+
},
457
+
"@swc/wasm@1.15.3": {
458
+
"integrity": "sha512-NrjGmAplk+v4wokIaLxp1oLoCMVqdQcWoBXopQg57QqyPRcJXLKe+kg5ehhW6z8XaU4Bu5cRkDxUTDY5P0Zy9Q=="
459
+
},
460
+
"@tybys/wasm-util@0.10.1": {
461
+
"integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
462
+
"dependencies": [
463
+
"tslib"
464
+
]
465
+
},
466
+
"@types/estree@1.0.8": {
467
+
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="
468
+
},
469
+
"@xterm/addon-canvas@0.7.0_@xterm+xterm@5.5.0": {
470
+
"integrity": "sha512-LF5LYcfvefJuJ7QotNRdRSPc9YASAVDeoT5uyXS/nZshZXjYplGXRECBGiznwvhNL2I8bq1Lf5MzRwstsYQ2Iw==",
471
+
"dependencies": [
472
+
"@xterm/xterm"
473
+
]
474
+
},
475
+
"@xterm/addon-fit@0.10.0_@xterm+xterm@5.5.0": {
476
+
"integrity": "sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==",
477
+
"dependencies": [
478
+
"@xterm/xterm"
479
+
]
480
+
},
481
+
"@xterm/addon-web-links@0.11.0_@xterm+xterm@5.5.0": {
482
+
"integrity": "sha512-nIHQ38pQI+a5kXnRaTgwqSHnX7KE6+4SVoceompgHL26unAxdfP6IPqUTSYPQgSwM56hsElfoNrrW5V7BUED/Q==",
483
+
"dependencies": [
484
+
"@xterm/xterm"
485
+
]
486
+
},
487
+
"@xterm/addon-webgl@0.18.0_@xterm+xterm@5.5.0": {
488
+
"integrity": "sha512-xCnfMBTI+/HKPdRnSOHaJDRqEpq2Ugy8LEj9GiY4J3zJObo3joylIFaMvzBwbYRg8zLtkO0KQaStCeSfoaI2/w==",
489
+
"dependencies": [
490
+
"@xterm/xterm"
491
+
]
492
+
},
493
+
"@xterm/xterm@5.5.0": {
494
+
"integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A=="
495
+
},
496
+
"detect-libc@2.1.2": {
497
+
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="
498
+
},
499
+
"esbuild@0.25.12": {
500
+
"integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
501
+
"optionalDependencies": [
502
+
"@esbuild/aix-ppc64",
503
+
"@esbuild/android-arm",
504
+
"@esbuild/android-arm64",
505
+
"@esbuild/android-x64",
506
+
"@esbuild/darwin-arm64",
507
+
"@esbuild/darwin-x64",
508
+
"@esbuild/freebsd-arm64",
509
+
"@esbuild/freebsd-x64",
510
+
"@esbuild/linux-arm",
511
+
"@esbuild/linux-arm64",
512
+
"@esbuild/linux-ia32",
513
+
"@esbuild/linux-loong64",
514
+
"@esbuild/linux-mips64el",
515
+
"@esbuild/linux-ppc64",
516
+
"@esbuild/linux-riscv64",
517
+
"@esbuild/linux-s390x",
518
+
"@esbuild/linux-x64",
519
+
"@esbuild/netbsd-arm64",
520
+
"@esbuild/netbsd-x64",
521
+
"@esbuild/openbsd-arm64",
522
+
"@esbuild/openbsd-x64",
523
+
"@esbuild/openharmony-arm64",
524
+
"@esbuild/sunos-x64",
525
+
"@esbuild/win32-arm64",
526
+
"@esbuild/win32-ia32",
527
+
"@esbuild/win32-x64"
528
+
],
529
+
"scripts": true,
530
+
"bin": true
531
+
},
532
+
"fdir@6.5.0_picomatch@4.0.3": {
533
+
"integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
534
+
"dependencies": [
535
+
"picomatch"
536
+
],
537
+
"optionalPeers": [
538
+
"picomatch"
539
+
]
540
+
},
541
+
"fsevents@2.3.3": {
542
+
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
543
+
"os": ["darwin"],
544
+
"scripts": true
545
+
},
546
+
"lightningcss-android-arm64@1.30.2": {
547
+
"integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==",
548
+
"os": ["android"],
549
+
"cpu": ["arm64"]
550
+
},
551
+
"lightningcss-darwin-arm64@1.30.2": {
552
+
"integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==",
553
+
"os": ["darwin"],
554
+
"cpu": ["arm64"]
555
+
},
556
+
"lightningcss-darwin-x64@1.30.2": {
557
+
"integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==",
558
+
"os": ["darwin"],
559
+
"cpu": ["x64"]
560
+
},
561
+
"lightningcss-freebsd-x64@1.30.2": {
562
+
"integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==",
563
+
"os": ["freebsd"],
564
+
"cpu": ["x64"]
565
+
},
566
+
"lightningcss-linux-arm-gnueabihf@1.30.2": {
567
+
"integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==",
568
+
"os": ["linux"],
569
+
"cpu": ["arm"]
570
+
},
571
+
"lightningcss-linux-arm64-gnu@1.30.2": {
572
+
"integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==",
573
+
"os": ["linux"],
574
+
"cpu": ["arm64"]
575
+
},
576
+
"lightningcss-linux-arm64-musl@1.30.2": {
577
+
"integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==",
578
+
"os": ["linux"],
579
+
"cpu": ["arm64"]
580
+
},
581
+
"lightningcss-linux-x64-gnu@1.30.2": {
582
+
"integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==",
583
+
"os": ["linux"],
584
+
"cpu": ["x64"]
585
+
},
586
+
"lightningcss-linux-x64-musl@1.30.2": {
587
+
"integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==",
588
+
"os": ["linux"],
589
+
"cpu": ["x64"]
590
+
},
591
+
"lightningcss-win32-arm64-msvc@1.30.2": {
592
+
"integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==",
593
+
"os": ["win32"],
594
+
"cpu": ["arm64"]
595
+
},
596
+
"lightningcss-win32-x64-msvc@1.30.2": {
597
+
"integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==",
598
+
"os": ["win32"],
599
+
"cpu": ["x64"]
600
+
},
601
+
"lightningcss@1.30.2": {
602
+
"integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==",
603
+
"dependencies": [
604
+
"detect-libc"
605
+
],
606
+
"optionalDependencies": [
607
+
"lightningcss-android-arm64",
608
+
"lightningcss-darwin-arm64",
609
+
"lightningcss-darwin-x64",
610
+
"lightningcss-freebsd-x64",
611
+
"lightningcss-linux-arm-gnueabihf",
612
+
"lightningcss-linux-arm64-gnu",
613
+
"lightningcss-linux-arm64-musl",
614
+
"lightningcss-linux-x64-gnu",
615
+
"lightningcss-linux-x64-musl",
616
+
"lightningcss-win32-arm64-msvc",
617
+
"lightningcss-win32-x64-msvc"
618
+
]
619
+
},
620
+
"nanoid@3.3.11": {
621
+
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
622
+
"bin": true
623
+
},
624
+
"picocolors@1.1.1": {
625
+
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
626
+
},
627
+
"picomatch@4.0.3": {
628
+
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="
629
+
},
630
+
"postcss@8.5.6": {
631
+
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
632
+
"dependencies": [
633
+
"nanoid",
634
+
"picocolors",
635
+
"source-map-js"
636
+
]
637
+
},
638
+
"rolldown-vite@7.2.5_picomatch@4.0.3": {
639
+
"integrity": "sha512-u09tdk/huMiN8xwoiBbig197jKdCamQTtOruSalOzbqGje3jdHiV0njQlAW0YvzoahkirFePNQ4RYlfnRQpXZA==",
640
+
"dependencies": [
641
+
"@oxc-project/runtime",
642
+
"fdir",
643
+
"lightningcss",
644
+
"picomatch",
645
+
"postcss",
646
+
"rolldown",
647
+
"tinyglobby"
648
+
],
649
+
"optionalDependencies": [
650
+
"fsevents"
651
+
],
652
+
"bin": true
653
+
},
654
+
"rolldown@1.0.0-beta.50": {
655
+
"integrity": "sha512-JFULvCNl/anKn99eKjOSEubi0lLmNqQDAjyEMME2T4CwezUDL0i6t1O9xZsu2OMehPnV2caNefWpGF+8TnzB6A==",
656
+
"dependencies": [
657
+
"@oxc-project/types",
658
+
"@rolldown/pluginutils"
659
+
],
660
+
"optionalDependencies": [
661
+
"@rolldown/binding-android-arm64",
662
+
"@rolldown/binding-darwin-arm64",
663
+
"@rolldown/binding-darwin-x64",
664
+
"@rolldown/binding-freebsd-x64",
665
+
"@rolldown/binding-linux-arm-gnueabihf",
666
+
"@rolldown/binding-linux-arm64-gnu",
667
+
"@rolldown/binding-linux-arm64-musl",
668
+
"@rolldown/binding-linux-x64-gnu",
669
+
"@rolldown/binding-linux-x64-musl",
670
+
"@rolldown/binding-openharmony-arm64",
671
+
"@rolldown/binding-wasm32-wasi",
672
+
"@rolldown/binding-win32-arm64-msvc",
673
+
"@rolldown/binding-win32-ia32-msvc",
674
+
"@rolldown/binding-win32-x64-msvc"
675
+
],
676
+
"bin": true
677
+
},
678
+
"rollup@4.53.3": {
679
+
"integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==",
680
+
"dependencies": [
681
+
"@types/estree"
682
+
],
683
+
"optionalDependencies": [
684
+
"@rollup/rollup-android-arm-eabi",
685
+
"@rollup/rollup-android-arm64",
686
+
"@rollup/rollup-darwin-arm64",
687
+
"@rollup/rollup-darwin-x64",
688
+
"@rollup/rollup-freebsd-arm64",
689
+
"@rollup/rollup-freebsd-x64",
690
+
"@rollup/rollup-linux-arm-gnueabihf",
691
+
"@rollup/rollup-linux-arm-musleabihf",
692
+
"@rollup/rollup-linux-arm64-gnu",
693
+
"@rollup/rollup-linux-arm64-musl",
694
+
"@rollup/rollup-linux-loong64-gnu",
695
+
"@rollup/rollup-linux-ppc64-gnu",
696
+
"@rollup/rollup-linux-riscv64-gnu",
697
+
"@rollup/rollup-linux-riscv64-musl",
698
+
"@rollup/rollup-linux-s390x-gnu",
699
+
"@rollup/rollup-linux-x64-gnu",
700
+
"@rollup/rollup-linux-x64-musl",
701
+
"@rollup/rollup-openharmony-arm64",
702
+
"@rollup/rollup-win32-arm64-msvc",
703
+
"@rollup/rollup-win32-ia32-msvc",
704
+
"@rollup/rollup-win32-x64-gnu",
705
+
"@rollup/rollup-win32-x64-msvc",
706
+
"fsevents"
707
+
],
708
+
"bin": true
709
+
},
710
+
"source-map-js@1.2.1": {
711
+
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
712
+
},
713
+
"tinyglobby@0.2.15_picomatch@4.0.3": {
714
+
"integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
715
+
"dependencies": [
716
+
"fdir",
717
+
"picomatch"
718
+
]
719
+
},
720
+
"tslib@2.8.1": {
721
+
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
722
+
},
723
+
"typescript@5.9.3": {
724
+
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
725
+
"bin": true
726
+
},
727
+
"uuid@10.0.0": {
728
+
"integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
729
+
"bin": true
730
+
},
731
+
"vite-plugin-top-level-await@1.6.0_vite@7.2.7__picomatch@4.0.3": {
732
+
"integrity": "sha512-bNhUreLamTIkoulCR9aDXbTbhLk6n1YE8NJUTTxl5RYskNRtzOR0ASzSjBVRtNdjIfngDXo11qOsybGLNsrdww==",
733
+
"dependencies": [
734
+
"@rollup/plugin-virtual",
735
+
"@swc/core",
736
+
"@swc/wasm",
737
+
"uuid",
738
+
"vite"
739
+
]
740
+
},
741
+
"vite-plugin-wasm@3.5.0_vite@7.2.7__picomatch@4.0.3": {
742
+
"integrity": "sha512-X5VWgCnqiQEGb+omhlBVsvTfxikKtoOgAzQ95+BZ8gQ+VfMHIjSHr0wyvXFQCa0eKQ0fKyaL0kWcEnYqBac4lQ==",
743
+
"dependencies": [
744
+
"vite"
745
+
]
746
+
},
747
+
"vite@7.2.7_picomatch@4.0.3": {
748
+
"integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==",
749
+
"dependencies": [
750
+
"esbuild",
751
+
"fdir",
752
+
"picomatch",
753
+
"postcss",
754
+
"rollup",
755
+
"tinyglobby"
756
+
],
757
+
"optionalDependencies": [
758
+
"fsevents"
759
+
],
760
+
"bin": true
761
+
}
762
+
},
763
+
"workspace": {
764
+
"members": {
765
+
"www": {
766
+
"packageJson": {
767
+
"dependencies": [
768
+
"npm:@jsr/std__toml@*",
769
+
"npm:@xterm/addon-canvas@0.7",
770
+
"npm:@xterm/addon-fit@0.10",
771
+
"npm:@xterm/addon-web-links@0.11",
772
+
"npm:@xterm/addon-webgl@0.18",
773
+
"npm:@xterm/xterm@^5.5.0",
774
+
"npm:rolldown-vite@7.2.5",
775
+
"npm:typescript@~5.9.3",
776
+
"npm:vite-plugin-top-level-await@^1.6.0",
777
+
"npm:vite-plugin-wasm@^3.5.0"
778
+
]
779
+
}
780
+
}
781
+
}
782
+
}
783
+
}
+308
flake.lock
+308
flake.lock
···
1
+
{
2
+
"nodes": {
3
+
"crane": {
4
+
"flake": false,
5
+
"locked": {
6
+
"lastModified": 1758758545,
7
+
"narHash": "sha256-NU5WaEdfwF6i8faJ2Yh+jcK9vVFrofLcwlD/mP65JrI=",
8
+
"owner": "ipetkov",
9
+
"repo": "crane",
10
+
"rev": "95d528a5f54eaba0d12102249ce42f4d01f4e364",
11
+
"type": "github"
12
+
},
13
+
"original": {
14
+
"owner": "ipetkov",
15
+
"ref": "v0.21.1",
16
+
"repo": "crane",
17
+
"type": "github"
18
+
}
19
+
},
20
+
"dream2nix": {
21
+
"inputs": {
22
+
"nixpkgs": [
23
+
"nci",
24
+
"nixpkgs"
25
+
],
26
+
"purescript-overlay": "purescript-overlay",
27
+
"pyproject-nix": "pyproject-nix"
28
+
},
29
+
"locked": {
30
+
"lastModified": 1765450682,
31
+
"narHash": "sha256-nZjNYEvNKZRF0+koTN2azGWbGlsvLNUTF6PcC0eqTa4=",
32
+
"owner": "nix-community",
33
+
"repo": "dream2nix",
34
+
"rev": "343053a4dfa53ce8abfc35e918cd4ab990abc58d",
35
+
"type": "github"
36
+
},
37
+
"original": {
38
+
"owner": "nix-community",
39
+
"repo": "dream2nix",
40
+
"type": "github"
41
+
}
42
+
},
43
+
"flake-compat": {
44
+
"flake": false,
45
+
"locked": {
46
+
"lastModified": 1696426674,
47
+
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
48
+
"owner": "edolstra",
49
+
"repo": "flake-compat",
50
+
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
51
+
"type": "github"
52
+
},
53
+
"original": {
54
+
"owner": "edolstra",
55
+
"repo": "flake-compat",
56
+
"type": "github"
57
+
}
58
+
},
59
+
"mk-naked-shell": {
60
+
"flake": false,
61
+
"locked": {
62
+
"lastModified": 1681286841,
63
+
"narHash": "sha256-3XlJrwlR0nBiREnuogoa5i1b4+w/XPe0z8bbrJASw0g=",
64
+
"owner": "90-008",
65
+
"repo": "mk-naked-shell",
66
+
"rev": "7612f828dd6f22b7fb332cc69440e839d7ffe6bd",
67
+
"type": "github"
68
+
},
69
+
"original": {
70
+
"owner": "90-008",
71
+
"repo": "mk-naked-shell",
72
+
"type": "github"
73
+
}
74
+
},
75
+
"naked-shell": {
76
+
"locked": {
77
+
"lastModified": 1681286841,
78
+
"narHash": "sha256-3XlJrwlR0nBiREnuogoa5i1b4+w/XPe0z8bbrJASw0g=",
79
+
"owner": "90-008",
80
+
"repo": "mk-naked-shell",
81
+
"rev": "7612f828dd6f22b7fb332cc69440e839d7ffe6bd",
82
+
"type": "github"
83
+
},
84
+
"original": {
85
+
"owner": "90-008",
86
+
"repo": "mk-naked-shell",
87
+
"type": "github"
88
+
}
89
+
},
90
+
"nci": {
91
+
"inputs": {
92
+
"crane": "crane",
93
+
"dream2nix": "dream2nix",
94
+
"mk-naked-shell": "mk-naked-shell",
95
+
"nixpkgs": [
96
+
"nixpkgs"
97
+
],
98
+
"parts": "parts",
99
+
"rust-overlay": "rust-overlay",
100
+
"treefmt": "treefmt"
101
+
},
102
+
"locked": {
103
+
"lastModified": 1765693183,
104
+
"narHash": "sha256-DQIYzLNbpynPaw7ktP3KZ09LzczHIROn39jRQDMK7Wg=",
105
+
"owner": "90-008",
106
+
"repo": "nix-cargo-integration",
107
+
"rev": "cc67b9cd2d85e1fccab800e2df26b351bea2d379",
108
+
"type": "github"
109
+
},
110
+
"original": {
111
+
"owner": "90-008",
112
+
"repo": "nix-cargo-integration",
113
+
"type": "github"
114
+
}
115
+
},
116
+
"nixpkgs": {
117
+
"locked": {
118
+
"lastModified": 1765644376,
119
+
"narHash": "sha256-yqHBL2wYGwjGL2GUF2w3tofWl8qO9tZEuI4wSqbCrtE=",
120
+
"owner": "nixos",
121
+
"repo": "nixpkgs",
122
+
"rev": "23735a82a828372c4ef92c660864e82fbe2f5fbe",
123
+
"type": "github"
124
+
},
125
+
"original": {
126
+
"owner": "nixos",
127
+
"ref": "nixpkgs-unstable",
128
+
"repo": "nixpkgs",
129
+
"type": "github"
130
+
}
131
+
},
132
+
"nixpkgs-lib": {
133
+
"locked": {
134
+
"lastModified": 1761765539,
135
+
"narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=",
136
+
"owner": "nix-community",
137
+
"repo": "nixpkgs.lib",
138
+
"rev": "719359f4562934ae99f5443f20aa06c2ffff91fc",
139
+
"type": "github"
140
+
},
141
+
"original": {
142
+
"owner": "nix-community",
143
+
"repo": "nixpkgs.lib",
144
+
"type": "github"
145
+
}
146
+
},
147
+
"parts": {
148
+
"inputs": {
149
+
"nixpkgs-lib": [
150
+
"nci",
151
+
"nixpkgs"
152
+
]
153
+
},
154
+
"locked": {
155
+
"lastModified": 1765495779,
156
+
"narHash": "sha256-MhA7wmo/7uogLxiewwRRmIax70g6q1U/YemqTGoFHlM=",
157
+
"owner": "hercules-ci",
158
+
"repo": "flake-parts",
159
+
"rev": "5635c32d666a59ec9a55cab87e898889869f7b71",
160
+
"type": "github"
161
+
},
162
+
"original": {
163
+
"owner": "hercules-ci",
164
+
"repo": "flake-parts",
165
+
"type": "github"
166
+
}
167
+
},
168
+
"parts_2": {
169
+
"inputs": {
170
+
"nixpkgs-lib": "nixpkgs-lib"
171
+
},
172
+
"locked": {
173
+
"lastModified": 1765495779,
174
+
"narHash": "sha256-MhA7wmo/7uogLxiewwRRmIax70g6q1U/YemqTGoFHlM=",
175
+
"owner": "hercules-ci",
176
+
"repo": "flake-parts",
177
+
"rev": "5635c32d666a59ec9a55cab87e898889869f7b71",
178
+
"type": "github"
179
+
},
180
+
"original": {
181
+
"owner": "hercules-ci",
182
+
"repo": "flake-parts",
183
+
"type": "github"
184
+
}
185
+
},
186
+
"purescript-overlay": {
187
+
"inputs": {
188
+
"flake-compat": "flake-compat",
189
+
"nixpkgs": [
190
+
"nci",
191
+
"dream2nix",
192
+
"nixpkgs"
193
+
],
194
+
"slimlock": "slimlock"
195
+
},
196
+
"locked": {
197
+
"lastModified": 1728546539,
198
+
"narHash": "sha256-Sws7w0tlnjD+Bjck1nv29NjC5DbL6nH5auL9Ex9Iz2A=",
199
+
"owner": "thomashoneyman",
200
+
"repo": "purescript-overlay",
201
+
"rev": "4ad4c15d07bd899d7346b331f377606631eb0ee4",
202
+
"type": "github"
203
+
},
204
+
"original": {
205
+
"owner": "thomashoneyman",
206
+
"repo": "purescript-overlay",
207
+
"type": "github"
208
+
}
209
+
},
210
+
"pyproject-nix": {
211
+
"inputs": {
212
+
"nixpkgs": [
213
+
"nci",
214
+
"dream2nix",
215
+
"nixpkgs"
216
+
]
217
+
},
218
+
"locked": {
219
+
"lastModified": 1763017646,
220
+
"narHash": "sha256-Z+R2lveIp6Skn1VPH3taQIuMhABg1IizJd8oVdmdHsQ=",
221
+
"owner": "pyproject-nix",
222
+
"repo": "pyproject.nix",
223
+
"rev": "47bd6f296502842643078d66128f7b5e5370790c",
224
+
"type": "github"
225
+
},
226
+
"original": {
227
+
"owner": "pyproject-nix",
228
+
"repo": "pyproject.nix",
229
+
"type": "github"
230
+
}
231
+
},
232
+
"root": {
233
+
"inputs": {
234
+
"naked-shell": "naked-shell",
235
+
"nci": "nci",
236
+
"nixpkgs": "nixpkgs",
237
+
"parts": "parts_2"
238
+
}
239
+
},
240
+
"rust-overlay": {
241
+
"inputs": {
242
+
"nixpkgs": [
243
+
"nci",
244
+
"nixpkgs"
245
+
]
246
+
},
247
+
"locked": {
248
+
"lastModified": 1765680428,
249
+
"narHash": "sha256-fyPmRof9SZeI14ChPk5rVPOm7ISiiGkwGCunkhM+eUg=",
250
+
"owner": "oxalica",
251
+
"repo": "rust-overlay",
252
+
"rev": "eb3898d8ef143d4bf0f7f2229105fc51c7731b2f",
253
+
"type": "github"
254
+
},
255
+
"original": {
256
+
"owner": "oxalica",
257
+
"repo": "rust-overlay",
258
+
"type": "github"
259
+
}
260
+
},
261
+
"slimlock": {
262
+
"inputs": {
263
+
"nixpkgs": [
264
+
"nci",
265
+
"dream2nix",
266
+
"purescript-overlay",
267
+
"nixpkgs"
268
+
]
269
+
},
270
+
"locked": {
271
+
"lastModified": 1688756706,
272
+
"narHash": "sha256-xzkkMv3neJJJ89zo3o2ojp7nFeaZc2G0fYwNXNJRFlo=",
273
+
"owner": "thomashoneyman",
274
+
"repo": "slimlock",
275
+
"rev": "cf72723f59e2340d24881fd7bf61cb113b4c407c",
276
+
"type": "github"
277
+
},
278
+
"original": {
279
+
"owner": "thomashoneyman",
280
+
"repo": "slimlock",
281
+
"type": "github"
282
+
}
283
+
},
284
+
"treefmt": {
285
+
"inputs": {
286
+
"nixpkgs": [
287
+
"nci",
288
+
"nixpkgs"
289
+
]
290
+
},
291
+
"locked": {
292
+
"lastModified": 1762938485,
293
+
"narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=",
294
+
"owner": "numtide",
295
+
"repo": "treefmt-nix",
296
+
"rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4",
297
+
"type": "github"
298
+
},
299
+
"original": {
300
+
"owner": "numtide",
301
+
"repo": "treefmt-nix",
302
+
"type": "github"
303
+
}
304
+
}
305
+
},
306
+
"root": "root",
307
+
"version": 7
308
+
}
+40
flake.nix
+40
flake.nix
···
1
+
{
2
+
inputs.parts.url = "github:hercules-ci/flake-parts";
3
+
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
4
+
inputs.naked-shell.url = "github:90-008/mk-naked-shell";
5
+
inputs.nci.url = "github:90-008/nix-cargo-integration";
6
+
inputs.nci.inputs.nixpkgs.follows = "nixpkgs";
7
+
8
+
outputs = inp:
9
+
inp.parts.lib.mkFlake {inputs = inp;} {
10
+
systems = ["x86_64-linux"];
11
+
imports = [
12
+
inp.naked-shell.flakeModule
13
+
# inp.nci.flakeModule
14
+
];
15
+
perSystem = {
16
+
config,
17
+
pkgs,
18
+
...
19
+
}: {
20
+
devShells.default = pkgs.mkShell {
21
+
name = "faunu-devshell";
22
+
packages = with pkgs; [
23
+
nodejs-slim_latest deno
24
+
nodePackages.svelte-language-server
25
+
nodePackages.typescript-language-server
26
+
rustc rust-analyzer cargo wasm-pack wasm-bindgen-cli lld rustfmt binaryen
27
+
];
28
+
shellHook = ''
29
+
export PATH="$PATH:$PWD/node_modules/.bin"
30
+
'';
31
+
};
32
+
packages.faunu-wasm = pkgs.callPackage ./nix/wasm.nix {};
33
+
packages.faunu-modules = pkgs.callPackage ./nix/modules.nix {};
34
+
packages.faunu = pkgs.callPackage ./nix {
35
+
inherit (config.packages) faunu-modules faunu-wasm;
36
+
};
37
+
packages.default = config.packages.faunu;
38
+
};
39
+
};
40
+
}
+55
nix/default.nix
+55
nix/default.nix
···
1
+
{
2
+
lib,
3
+
stdenv,
4
+
deno,
5
+
nodejs,
6
+
makeBinaryWrapper,
7
+
callPackage,
8
+
faunu-modules ? callPackage ./modules.nix {},
9
+
faunu-wasm ? callPackage ./wasm.nix {},
10
+
PUBLIC_BASE_URL ? "http://localhost:5173",
11
+
}:
12
+
stdenv.mkDerivation {
13
+
name = "faunu";
14
+
15
+
src = lib.fileset.toSource {
16
+
root = ../.;
17
+
fileset = lib.fileset.unions [
18
+
../.npmrc
19
+
../deno.lock
20
+
../deno.json
21
+
../www
22
+
];
23
+
};
24
+
25
+
nativeBuildInputs = [makeBinaryWrapper];
26
+
buildInputs = [deno];
27
+
28
+
inherit PUBLIC_BASE_URL;
29
+
30
+
dontCheck = true;
31
+
32
+
configurePhase = ''
33
+
runHook preConfigure
34
+
cp -R --no-preserve=ownership,mode ${faunu-modules} node_modules
35
+
find node_modules -type d -exec chmod 755 {} \;
36
+
find -L node_modules -type f -path '*/bin/*' -exec chmod +x {} \;
37
+
substituteInPlace node_modules/.bin/vite \
38
+
--replace-fail "/usr/bin/env node" "${nodejs}/bin/node"
39
+
ln -sf ${faunu-wasm} pkg
40
+
runHook postConfigure
41
+
'';
42
+
buildPhase = ''
43
+
runHook preBuild
44
+
HOME=$TMPDIR deno task --cwd www --frozen build
45
+
runHook postBuild
46
+
'';
47
+
installPhase = ''
48
+
runHook preInstall
49
+
50
+
mkdir -p $out
51
+
cp -R ./www/dist/* $out
52
+
53
+
runHook postInstall
54
+
'';
55
+
}
+40
nix/modules.nix
+40
nix/modules.nix
···
1
+
{
2
+
lib,
3
+
stdenv,
4
+
deno,
5
+
}:
6
+
stdenv.mkDerivation {
7
+
name = "faunu-modules";
8
+
9
+
src = lib.fileset.toSource {
10
+
root = ../.;
11
+
fileset = lib.fileset.unions [
12
+
../.npmrc
13
+
../deno.lock
14
+
../deno.json
15
+
../www
16
+
];
17
+
};
18
+
19
+
outputHash = "sha256-Vl0zc9YI7zNIqBB3Bj2B+lqxT4jWCRihGClyW0FHBmM=";
20
+
outputHashAlgo = "sha256";
21
+
outputHashMode = "recursive";
22
+
23
+
nativeBuildInputs = [deno];
24
+
25
+
dontConfigure = true;
26
+
dontCheck = true;
27
+
dontFixup = true;
28
+
dontPatchShebangs = true;
29
+
30
+
postUnpack = ''
31
+
32
+
'';
33
+
buildPhase = ''
34
+
HOME=$TMPDIR deno install --allow-scripts=npm:@swc/core --frozen --seed 8008135
35
+
'';
36
+
installPhase = ''
37
+
cp -R node_modules $out
38
+
ls -la $out
39
+
'';
40
+
}
+63
nix/wasm.nix
+63
nix/wasm.nix
···
1
+
{
2
+
rustPlatform,
3
+
lib,
4
+
wasm-pack,
5
+
binaryen,
6
+
wasm-bindgen-cli,
7
+
lld,
8
+
stdenv,
9
+
...
10
+
}:
11
+
let
12
+
# First derivation: wasm-pack build
13
+
wasmBuild = rustPlatform.buildRustPackage {
14
+
pname = "faunu-wasm-build";
15
+
version = "main";
16
+
17
+
src = lib.fileset.toSource {
18
+
root = ../.;
19
+
fileset = lib.fileset.unions [
20
+
../Cargo.toml
21
+
../Cargo.lock
22
+
../src
23
+
../.cargo
24
+
];
25
+
};
26
+
27
+
cargoLock = {
28
+
lockFile = ../Cargo.lock;
29
+
outputHashes = {
30
+
"vfs-0.12.1" = "sha256-d249sIYhICdqqb7uoTRyhXAZTCF5zgjfItM4DE7b/gQ=";
31
+
"jacquard-0.9.4" = "sha256-TEu4coueWzzkmFCkGb610Xrly7n8LUGMa5tdde/OElg=";
32
+
};
33
+
};
34
+
35
+
nativeBuildInputs = [wasm-pack wasm-bindgen-cli lld];
36
+
37
+
phases = ["unpackPhase" "buildPhase"];
38
+
39
+
buildPhase = ''
40
+
mkdir -p $out
41
+
HOME=$TMPDIR wasm-pack build --target web --release --no-opt -d $out
42
+
'';
43
+
};
44
+
45
+
# Second derivation: wasm-opt
46
+
wasmOpt = stdenv.mkDerivation {
47
+
pname = "faunu-wasm";
48
+
version = "main";
49
+
50
+
src = wasmBuild;
51
+
52
+
nativeBuildInputs = [binaryen];
53
+
54
+
phases = ["unpackPhase" "buildPhase"];
55
+
56
+
buildPhase = ''
57
+
mkdir -p $out
58
+
cp -r --no-preserve=ownership,mode ${wasmBuild}/* $out/
59
+
wasm-opt $out/faunu_bg.wasm -O4 -all -o $out/faunu_bg.wasm
60
+
'';
61
+
};
62
+
in
63
+
wasmOpt
+64
src/cmd/cd.rs
+64
src/cmd/cd.rs
···
1
+
use crate::globals::{get_pwd, get_vfs, set_pwd, to_shell_err};
2
+
use nu_engine::CallExt;
3
+
use nu_protocol::{
4
+
Category, PipelineData, ShellError, Signature, SyntaxShape,
5
+
engine::{Command, EngineState, Stack},
6
+
};
7
+
use std::sync::Arc;
8
+
use vfs::VfsFileType;
9
+
10
+
#[derive(Clone)]
11
+
pub struct Cd;
12
+
13
+
impl Command for Cd {
14
+
fn name(&self) -> &str {
15
+
"cd"
16
+
}
17
+
18
+
fn signature(&self) -> Signature {
19
+
Signature::build("cd")
20
+
.optional("path", SyntaxShape::String, "the path to change into")
21
+
.category(Category::FileSystem)
22
+
}
23
+
24
+
fn description(&self) -> &str {
25
+
"change the current directory in the virtual filesystem."
26
+
}
27
+
28
+
fn run(
29
+
&self,
30
+
engine_state: &EngineState,
31
+
_stack: &mut Stack,
32
+
call: &nu_protocol::engine::Call,
33
+
_input: PipelineData,
34
+
) -> Result<PipelineData, ShellError> {
35
+
let path_arg: Option<String> = call.opt(engine_state, _stack, 0)?;
36
+
let path = path_arg.unwrap_or_else(|| "/".to_string());
37
+
38
+
let base: Arc<vfs::VfsPath> = if path.starts_with('/') {
39
+
get_vfs()
40
+
} else {
41
+
get_pwd().clone()
42
+
};
43
+
44
+
let target = base
45
+
.join(path.trim_end_matches('/'))
46
+
.map_err(to_shell_err(call.head))?;
47
+
48
+
// Ensure target exists and is a directory
49
+
let metadata = target.metadata().map_err(to_shell_err(call.head))?;
50
+
match metadata.file_type {
51
+
VfsFileType::Directory => {
52
+
set_pwd(Arc::new(target));
53
+
Ok(PipelineData::Empty)
54
+
}
55
+
VfsFileType::File => Err(ShellError::GenericError {
56
+
error: "not a directory".to_string(),
57
+
msg: format!("'{}' is not a directory", path),
58
+
span: Some(call.head),
59
+
help: None,
60
+
inner: vec![],
61
+
}),
62
+
}
63
+
}
64
+
}
+338
src/cmd/fetch.rs
+338
src/cmd/fetch.rs
···
1
+
use crate::globals::{get_pwd, print_to_console, register_task, remove_task, to_shell_err};
2
+
use anyhow::{Result, anyhow};
3
+
use futures::future::{AbortHandle, Abortable};
4
+
use jacquard::types::aturi::AtUri;
5
+
use jacquard::types::ident::AtIdentifier;
6
+
use jacquard::types::string::Rkey;
7
+
use jacquard::{
8
+
api::com_atproto::{
9
+
repo::{get_record::GetRecord, list_records::ListRecords},
10
+
sync::get_repo::GetRepo,
11
+
},
12
+
client::{Agent, MemorySessionStore, credential_session::CredentialSession},
13
+
identity::{resolver::IdentityResolver, slingshot_resolver_default},
14
+
prelude::*,
15
+
types::{did::Did, nsid::Nsid},
16
+
};
17
+
use jacquard_repo::{
18
+
Repository,
19
+
car::parse_car_bytes,
20
+
storage::{BlockStore, MemoryBlockStore},
21
+
};
22
+
use nu_engine::CallExt;
23
+
use nu_protocol::IntoPipelineData;
24
+
use nu_protocol::{
25
+
Category, PipelineData, ShellError, Signature, SyntaxShape, Value,
26
+
engine::{Command, EngineState, Stack},
27
+
};
28
+
use std::io::Write;
29
+
use std::str::FromStr;
30
+
use std::sync::Arc;
31
+
use url::Url;
32
+
use wasm_bindgen_futures::spawn_local;
33
+
34
+
#[derive(Clone)]
35
+
pub struct Fetch;
36
+
37
+
impl Command for Fetch {
38
+
fn name(&self) -> &str {
39
+
"fetch"
40
+
}
41
+
42
+
fn signature(&self) -> Signature {
43
+
Signature::build(self.name())
44
+
.required(
45
+
"uri",
46
+
SyntaxShape::String,
47
+
"HTTP URI or AT URI (at://identifier[/collection[/rkey]])",
48
+
)
49
+
.named("output", SyntaxShape::Filepath, "output path", Some('o'))
50
+
.category(Category::Network)
51
+
}
52
+
53
+
fn description(&self) -> &str {
54
+
"fetch files using HTTP or fetch records from an AT Protocol repository.\nsupports full repo (CAR), collection, or a single record."
55
+
}
56
+
57
+
fn run(
58
+
&self,
59
+
engine_state: &EngineState,
60
+
stack: &mut Stack,
61
+
call: &nu_protocol::engine::Call,
62
+
_input: PipelineData,
63
+
) -> Result<PipelineData, ShellError> {
64
+
let uri_arg: String = call.req(engine_state, stack, 0)?;
65
+
let output_arg: Option<String> = call.get_flag(engine_state, stack, "output")?;
66
+
let output_span = call.get_flag_span(stack, "output");
67
+
68
+
let at_uri = uri_arg
69
+
.starts_with("at://")
70
+
.then(|| {
71
+
AtUri::from_str(&uri_arg).map_err(|err| ShellError::GenericError {
72
+
error: "invalid AT URI format".into(),
73
+
msg: err.to_string(),
74
+
span: Some(call.arguments_span()),
75
+
help: None,
76
+
inner: vec![],
77
+
})
78
+
})
79
+
.transpose()?;
80
+
let uri = at_uri
81
+
.is_none()
82
+
.then(|| {
83
+
Url::from_str(&uri_arg).map_err(|err| ShellError::GenericError {
84
+
error: "invalid URI format".into(),
85
+
msg: err.to_string(),
86
+
span: Some(call.arguments_span()),
87
+
help: None,
88
+
inner: vec![],
89
+
})
90
+
})
91
+
.transpose()?;
92
+
93
+
// Determine target directory
94
+
let pwd = get_pwd();
95
+
let base_dir = if let Some(out) = output_arg.as_ref() {
96
+
pwd.join(out.trim_end_matches('/'))
97
+
.map_err(to_shell_err(output_span.unwrap()))?
98
+
} else {
99
+
pwd.join("").unwrap()
100
+
};
101
+
102
+
let final_path = if let Some(at_uri) = at_uri.as_ref() {
103
+
match (at_uri.collection(), at_uri.rkey()) {
104
+
(None, _) => base_dir
105
+
.join(at_uri.authority())
106
+
.map_err(to_shell_err(call.span()))?,
107
+
(Some(collection), None) => base_dir
108
+
.join(collection)
109
+
.map_err(to_shell_err(call.span()))?,
110
+
// use rkey as file name
111
+
(Some(_), Some(rkey)) => output_arg
112
+
.is_some()
113
+
.then(|| Ok(base_dir.clone()))
114
+
.unwrap_or_else(|| base_dir.join(&rkey.0).map_err(to_shell_err(call.span())))?,
115
+
}
116
+
} else if let Some(uri) = uri.as_ref() {
117
+
// choose file name from uri
118
+
output_arg
119
+
.is_some()
120
+
.then(|| Ok(base_dir.clone()))
121
+
.unwrap_or_else(|| {
122
+
base_dir
123
+
.join(
124
+
uri.path()
125
+
.split('/')
126
+
.rfind(|a| !a.is_empty())
127
+
.unwrap_or("index"),
128
+
)
129
+
.map_err(to_shell_err(call.span()))
130
+
})?
131
+
} else {
132
+
// todo: make these into an enum so we dont need this
133
+
unreachable!("either of at_uri or uri should be set")
134
+
};
135
+
136
+
if !final_path.exists().map_err(to_shell_err(call.span()))? {
137
+
// if http uri or at uri with rkey, we create parent dir since we'll
138
+
// write just a single file, otherwise we create this path as directory
139
+
if at_uri.as_ref().map_or(true, |at| at.rkey().is_some()) {
140
+
final_path
141
+
.parent()
142
+
.create_dir_all()
143
+
.map_err(to_shell_err(call.span()))?;
144
+
} else {
145
+
final_path
146
+
.create_dir_all()
147
+
.map_err(to_shell_err(call.span()))?;
148
+
}
149
+
}
150
+
151
+
let (abort_handle, abort_registration) = AbortHandle::new_pair();
152
+
let task_desc = format!("{name} {uri_arg}", name = self.name());
153
+
let task_id = register_task(task_desc.clone(), abort_handle);
154
+
155
+
spawn_local(async move {
156
+
let task_future = async {
157
+
if let Some(at_uri) = at_uri {
158
+
let identifier = at_uri.authority().clone();
159
+
match (at_uri.collection(), at_uri.rkey()) {
160
+
(Some(coll), Some(key)) => {
161
+
fetch_record(identifier, coll.clone(), key.0.clone(), final_path).await
162
+
}
163
+
(Some(coll), None) => {
164
+
fetch_collection(identifier, coll.clone(), final_path).await
165
+
}
166
+
_ => fetch_repo(identifier, final_path).await,
167
+
}
168
+
} else if let Some(uri) = uri {
169
+
fetch_file(uri, final_path).await
170
+
} else {
171
+
Ok(())
172
+
}
173
+
};
174
+
175
+
let abortable = Abortable::new(task_future, abort_registration);
176
+
177
+
match abortable.await {
178
+
Ok(result) => {
179
+
remove_task(task_id);
180
+
match result {
181
+
Ok(_) => {}
182
+
Err(e) => {
183
+
print_to_console(
184
+
&format!("\x1b[31m✖\x1b[0m ({task_desc}) error: {e}"),
185
+
false,
186
+
);
187
+
}
188
+
}
189
+
}
190
+
Err(_) => {
191
+
remove_task(task_id);
192
+
}
193
+
}
194
+
});
195
+
196
+
Ok(Value::nothing(call.head).into_pipeline_data())
197
+
}
198
+
}
199
+
200
+
async fn fetch_file(uri: Url, target_path: vfs::VfsPath) -> Result<()> {
201
+
let response = reqwest::get(uri).await?;
202
+
let content = response.bytes().await?;
203
+
target_path.create_file()?.write_all(&content)?;
204
+
Ok(())
205
+
}
206
+
207
+
async fn resolve_did(identifier: AtIdentifier<'_>) -> Result<Did<'_>> {
208
+
match identifier {
209
+
AtIdentifier::Did(did) => Ok(did),
210
+
AtIdentifier::Handle(handle) => {
211
+
let did = slingshot_resolver_default().resolve_handle(&handle).await?;
212
+
Ok(did)
213
+
}
214
+
}
215
+
}
216
+
217
+
async fn resolve_pds(did: &Did<'_>) -> Result<Url> {
218
+
slingshot_resolver_default()
219
+
.resolve_did_doc(did)
220
+
.await?
221
+
.parse()?
222
+
.pds_endpoint()
223
+
.ok_or_else(|| anyhow!("no pds endpoint in did doc"))
224
+
}
225
+
226
+
async fn create_agent(pds: Url) -> BasicClient {
227
+
let store = MemorySessionStore::default();
228
+
let session = CredentialSession::new(Arc::new(store), Arc::new(slingshot_resolver_default()));
229
+
session.set_endpoint(pds).await;
230
+
Agent::new(session)
231
+
}
232
+
233
+
async fn fetch_record(
234
+
identifier: AtIdentifier<'_>,
235
+
collection: Nsid<'_>,
236
+
rkey: Rkey<'_>,
237
+
target_path: vfs::VfsPath,
238
+
) -> anyhow::Result<()> {
239
+
let did = resolve_did(identifier).await?;
240
+
let pds = resolve_pds(&did).await?;
241
+
let client = create_agent(pds).await;
242
+
243
+
let nsid = Nsid::new(&collection)?;
244
+
245
+
let request = GetRecord::new()
246
+
.repo(did)
247
+
.collection(nsid)
248
+
.rkey(rkey.clone());
249
+
250
+
let output = client.send(request.build()).await?.into_output()?;
251
+
let file = target_path.create_file()?;
252
+
serde_json::to_writer_pretty(file, &output.value)?;
253
+
254
+
Ok(())
255
+
}
256
+
257
+
async fn fetch_collection(
258
+
identifier: AtIdentifier<'_>,
259
+
collection: Nsid<'_>,
260
+
target_path: vfs::VfsPath,
261
+
) -> anyhow::Result<()> {
262
+
let did = resolve_did(identifier).await?;
263
+
let pds = resolve_pds(&did).await?;
264
+
let client = create_agent(pds).await;
265
+
266
+
let mut cursor: Option<String> = None;
267
+
268
+
loop {
269
+
let request = ListRecords::new()
270
+
.repo(did.clone())
271
+
.collection(collection.clone())
272
+
.limit(100)
273
+
.cursor(cursor.map(Into::into));
274
+
275
+
let response = client.send(request.build()).await?;
276
+
277
+
let output = response.into_output()?;
278
+
279
+
for rec in output.records {
280
+
if let Some(rkey) = rec.uri.rkey() {
281
+
let file = target_path.join(&rkey.0)?.create_file()?;
282
+
serde_json::to_writer_pretty(file, &rec.value)?;
283
+
}
284
+
}
285
+
286
+
if let Some(c) = output.cursor {
287
+
cursor = Some(c.into());
288
+
} else {
289
+
break;
290
+
}
291
+
}
292
+
293
+
Ok(())
294
+
}
295
+
296
+
async fn fetch_repo(identifier: AtIdentifier<'_>, target_path: vfs::VfsPath) -> Result<()> {
297
+
let did = resolve_did(identifier).await?;
298
+
let pds = resolve_pds(&did).await?;
299
+
let client = create_agent(pds).await;
300
+
301
+
let response = client.send(GetRepo::new().did(did).build()).await?;
302
+
303
+
// parse the car and create the repo
304
+
let car_bytes = response.into_output()?.body;
305
+
let parsed = parse_car_bytes(&car_bytes).await?;
306
+
let storage = Arc::new(MemoryBlockStore::new_from_blocks(parsed.blocks));
307
+
let repo = Repository::from_commit(storage, &parsed.root).await?;
308
+
309
+
// Iterate over all leaves in the MST
310
+
// repo.mst() gives us the Mst<S>
311
+
// mst.leaves() returns Vec<(SmolStr, IpldCid)>
312
+
let leaves = repo.mst().leaves_sequential().await?;
313
+
314
+
for (key, cid) in leaves {
315
+
// key format: collection/rkey
316
+
let key_str = key.as_str();
317
+
318
+
if let Some((collection, rkey)) = key_str.split_once('/') {
319
+
// Get the record block from storage
320
+
// The record data is just a CBOR block. We need to convert it to JSON for readability.
321
+
if let Some(block_bytes) = repo.storage().get(&cid).await? {
322
+
// Deserialize DAG-CBOR to generic JSON Value
323
+
let json_val: jacquard::RawData = serde_ipld_dagcbor::from_slice(&block_bytes)
324
+
.map_err(|e| anyhow!("failed to deserialize record {}: {}", key, e))?;
325
+
326
+
let coll_dir = target_path.join(collection)?;
327
+
if !coll_dir.exists()? {
328
+
coll_dir.create_dir_all()?;
329
+
}
330
+
let file = coll_dir.join(rkey)?.create_file()?;
331
+
332
+
serde_json::to_writer_pretty(file, &json_val)?;
333
+
}
334
+
}
335
+
}
336
+
337
+
Ok(())
338
+
}
+39
src/cmd/job.rs
+39
src/cmd/job.rs
···
1
+
use nu_engine::{command_prelude::*, get_full_help};
2
+
use nu_protocol::{
3
+
Category, IntoPipelineData, PipelineData, ShellError, Signature, Value,
4
+
engine::{Command, EngineState, Stack},
5
+
};
6
+
7
+
#[derive(Clone)]
8
+
pub struct Job;
9
+
10
+
// Top-level `job` command that just prints help (like nu stdlib style)
11
+
impl Command for Job {
12
+
fn name(&self) -> &str {
13
+
"job"
14
+
}
15
+
16
+
fn signature(&self) -> Signature {
17
+
Signature::build("job")
18
+
.category(Category::System)
19
+
.input_output_types(vec![(Type::Nothing, Type::String)])
20
+
}
21
+
22
+
fn description(&self) -> &str {
23
+
"Various commands for working with background jobs."
24
+
}
25
+
26
+
fn extra_description(&self) -> &str {
27
+
"You must use one of the following subcommands. Using this command as-is will only produce this help message."
28
+
}
29
+
30
+
fn run(
31
+
&self,
32
+
engine_state: &EngineState,
33
+
stack: &mut Stack,
34
+
call: &Call,
35
+
_input: PipelineData,
36
+
) -> Result<PipelineData, ShellError> {
37
+
Ok(Value::string(get_full_help(self, engine_state, stack), call.head).into_pipeline_data())
38
+
}
39
+
}
+49
src/cmd/job_kill.rs
+49
src/cmd/job_kill.rs
···
1
+
use crate::globals::kill_task_by_id;
2
+
use nu_engine::CallExt;
3
+
use nu_protocol::{
4
+
Category, IntoPipelineData, PipelineData, ShellError, Signature, SyntaxShape, Value,
5
+
engine::{Call, Command, EngineState, Stack},
6
+
};
7
+
8
+
#[derive(Clone)]
9
+
pub struct JobKill;
10
+
11
+
impl Command for JobKill {
12
+
fn name(&self) -> &str {
13
+
"job kill"
14
+
}
15
+
16
+
fn signature(&self) -> Signature {
17
+
Signature::build("job kill")
18
+
.required("id", SyntaxShape::Int, "id of job to kill")
19
+
.category(Category::System)
20
+
}
21
+
22
+
fn description(&self) -> &str {
23
+
"Kill a background job by ID."
24
+
}
25
+
26
+
fn run(
27
+
&self,
28
+
engine_state: &EngineState,
29
+
stack: &mut Stack,
30
+
call: &Call,
31
+
_input: PipelineData,
32
+
) -> Result<PipelineData, ShellError> {
33
+
let id: i64 = call.req(engine_state, stack, 0)?;
34
+
if id < 0 {
35
+
return Err(ShellError::GenericError {
36
+
error: "invalid id".to_string(),
37
+
msg: format!("task id must be non-negative, got {}", id),
38
+
span: Some(call.head),
39
+
help: None,
40
+
inner: vec![],
41
+
});
42
+
}
43
+
44
+
let killed = kill_task_by_id(id as usize);
45
+
46
+
// Return a boolean indicating whether a task was found & killed.
47
+
Ok(Value::bool(killed, call.head).into_pipeline_data())
48
+
}
49
+
}
+43
src/cmd/job_list.rs
+43
src/cmd/job_list.rs
···
1
+
use crate::globals::get_all_tasks;
2
+
use nu_protocol::{
3
+
Category, ListStream, PipelineData, Record, ShellError, Signature, Value,
4
+
engine::{Call, Command, EngineState, Stack},
5
+
};
6
+
7
+
#[derive(Clone)]
8
+
pub struct JobList;
9
+
10
+
impl Command for JobList {
11
+
fn name(&self) -> &str {
12
+
"job list"
13
+
}
14
+
15
+
fn signature(&self) -> Signature {
16
+
Signature::build("job list").category(Category::System)
17
+
}
18
+
19
+
fn description(&self) -> &str {
20
+
"List background jobs."
21
+
}
22
+
23
+
fn run(
24
+
&self,
25
+
engine_state: &EngineState,
26
+
_stack: &mut Stack,
27
+
call: &Call,
28
+
_input: PipelineData,
29
+
) -> Result<PipelineData, ShellError> {
30
+
let tasks = get_all_tasks();
31
+
let span = call.head;
32
+
let iter = tasks.into_iter().map(move |(id, desc)| {
33
+
let mut rec = Record::new();
34
+
rec.push("id", Value::int(id as i64, span));
35
+
rec.push("description", Value::string(desc, span));
36
+
Value::record(rec, span)
37
+
});
38
+
Ok(PipelineData::list_stream(
39
+
ListStream::new(iter, span, engine_state.signals().clone()),
40
+
None,
41
+
))
42
+
}
43
+
}
+139
src/cmd/ls.rs
+139
src/cmd/ls.rs
···
1
+
use std::{
2
+
sync::Arc,
3
+
time::{SystemTime, UNIX_EPOCH},
4
+
};
5
+
6
+
use crate::globals::{get_pwd, to_shell_err};
7
+
use jacquard::chrono;
8
+
use nu_engine::CallExt;
9
+
use nu_protocol::{
10
+
Category, ListStream, PipelineData, Record, ShellError, Signature, SyntaxShape, Value,
11
+
engine::{Command, EngineState, Stack},
12
+
};
13
+
14
+
#[derive(Clone)]
15
+
pub struct Ls;
16
+
17
+
impl Command for Ls {
18
+
fn name(&self) -> &str {
19
+
"ls"
20
+
}
21
+
22
+
fn signature(&self) -> Signature {
23
+
Signature::build("ls")
24
+
.optional("path", SyntaxShape::String, "the path to list")
25
+
.switch(
26
+
"all",
27
+
"include hidden paths (that start with a dot)",
28
+
Some('a'),
29
+
)
30
+
.switch(
31
+
"long",
32
+
"show detailed information about each file",
33
+
Some('l'),
34
+
)
35
+
.category(Category::FileSystem)
36
+
}
37
+
38
+
fn description(&self) -> &str {
39
+
"list the files in the virtual filesystem."
40
+
}
41
+
42
+
fn run(
43
+
&self,
44
+
engine_state: &EngineState,
45
+
stack: &mut Stack,
46
+
call: &nu_protocol::engine::Call,
47
+
_input: PipelineData,
48
+
) -> Result<PipelineData, ShellError> {
49
+
let path_arg: Option<String> = call.opt(engine_state, stack, 0)?;
50
+
let all = call.has_flag(engine_state, stack, "all")?;
51
+
let long = call.has_flag(engine_state, stack, "long")?;
52
+
53
+
let mut target_dir = get_pwd();
54
+
if let Some(path) = path_arg {
55
+
target_dir = Arc::new(
56
+
target_dir
57
+
.join(path.trim_end_matches('/'))
58
+
.map_err(to_shell_err(call.arguments_span()))?,
59
+
);
60
+
}
61
+
62
+
let span = call.head;
63
+
let entries = target_dir.read_dir().map_err(to_shell_err(span))?;
64
+
65
+
let make_record = move |name: &str, metadata: &vfs::VfsMetadata| {
66
+
let type_str = match metadata.file_type {
67
+
vfs::VfsFileType::Directory => "dir",
68
+
vfs::VfsFileType::File => "file",
69
+
};
70
+
71
+
let mut record = Record::new();
72
+
record.push("name", Value::string(name, span));
73
+
record.push("type", Value::string(type_str, span));
74
+
record.push("size", Value::filesize(metadata.len as i64, span));
75
+
let mut add_timestamp = |field: &str, timestamp: Option<SystemTime>| {
76
+
if let Some(dur) = timestamp.and_then(|s| s.duration_since(UNIX_EPOCH).ok()) {
77
+
record.push(
78
+
field,
79
+
Value::date(
80
+
chrono::DateTime::from_timestamp_nanos(dur.as_nanos() as i64)
81
+
.fixed_offset(),
82
+
span,
83
+
),
84
+
);
85
+
} else {
86
+
record.push(field, Value::nothing(span));
87
+
}
88
+
};
89
+
add_timestamp("modified", metadata.modified);
90
+
if long {
91
+
add_timestamp("created", metadata.created);
92
+
add_timestamp("accessed", metadata.accessed);
93
+
}
94
+
Value::record(record, span)
95
+
};
96
+
const DIR_METADATA: vfs::VfsMetadata = vfs::VfsMetadata {
97
+
file_type: vfs::VfsFileType::Directory,
98
+
len: 0,
99
+
modified: None,
100
+
created: None,
101
+
accessed: None,
102
+
};
103
+
104
+
let dots = if all {
105
+
vec![
106
+
make_record(".", &DIR_METADATA),
107
+
make_record("..", &DIR_METADATA),
108
+
]
109
+
} else {
110
+
Vec::new()
111
+
};
112
+
let entries = dots
113
+
.into_iter()
114
+
.chain(entries.into_iter().flat_map(move |entry| {
115
+
let do_map = move || {
116
+
let name = entry.filename();
117
+
if name.starts_with('.') && !all {
118
+
return Ok(None);
119
+
}
120
+
let metadata = entry.metadata().map_err(to_shell_err(span))?;
121
+
122
+
Ok(Some(make_record(&name, &metadata)))
123
+
};
124
+
do_map()
125
+
.transpose()
126
+
.map(|res| res.unwrap_or_else(|err| Value::error(err, span)))
127
+
}));
128
+
129
+
let signals = engine_state.signals().clone();
130
+
Ok(PipelineData::list_stream(
131
+
ListStream::new(entries, span, signals.clone()),
132
+
Some(nu_protocol::PipelineMetadata {
133
+
data_source: nu_protocol::DataSource::Ls,
134
+
content_type: None,
135
+
custom: Record::new(),
136
+
}),
137
+
))
138
+
}
139
+
}
+46
src/cmd/mkdir.rs
+46
src/cmd/mkdir.rs
···
1
+
use crate::globals::{get_pwd, to_shell_err};
2
+
use nu_engine::CallExt;
3
+
use nu_protocol::{
4
+
Category, PipelineData, ShellError, Signature, SyntaxShape,
5
+
engine::{Command, EngineState, Stack},
6
+
};
7
+
8
+
#[derive(Clone)]
9
+
pub struct Mkdir;
10
+
11
+
impl Command for Mkdir {
12
+
fn name(&self) -> &str {
13
+
"mkdir"
14
+
}
15
+
16
+
fn signature(&self) -> Signature {
17
+
Signature::build("mkdir")
18
+
.required(
19
+
"path",
20
+
SyntaxShape::String,
21
+
"path of the directory(s) to create",
22
+
)
23
+
.category(Category::FileSystem)
24
+
}
25
+
26
+
fn description(&self) -> &str {
27
+
"create a directory in the virtual filesystem."
28
+
}
29
+
30
+
fn run(
31
+
&self,
32
+
engine_state: &EngineState,
33
+
stack: &mut Stack,
34
+
call: &nu_protocol::engine::Call,
35
+
_: PipelineData,
36
+
) -> Result<PipelineData, ShellError> {
37
+
let path: String = call.req(engine_state, stack, 0)?;
38
+
let new_dir = get_pwd()
39
+
.join(path.trim_end_matches('/'))
40
+
.map_err(to_shell_err(call.head))?;
41
+
new_dir
42
+
.create_dir_all()
43
+
.map_err(to_shell_err(call.head))
44
+
.map(|_| PipelineData::Empty)
45
+
}
46
+
}
+31
src/cmd/mod.rs
+31
src/cmd/mod.rs
···
1
+
pub mod cd;
2
+
pub mod fetch;
3
+
pub mod job;
4
+
pub mod job_kill;
5
+
pub mod job_list;
6
+
pub mod ls;
7
+
pub mod mkdir;
8
+
pub mod open;
9
+
pub mod pwd;
10
+
pub mod random;
11
+
pub mod rm;
12
+
pub mod save;
13
+
pub mod source;
14
+
pub mod sys;
15
+
pub mod version;
16
+
17
+
pub use cd::Cd;
18
+
pub use fetch::Fetch;
19
+
pub use job::Job;
20
+
pub use job_kill::JobKill;
21
+
pub use job_list::JobList;
22
+
pub use ls::Ls;
23
+
pub use mkdir::Mkdir;
24
+
pub use open::Open;
25
+
pub use pwd::Pwd;
26
+
pub use random::Random;
27
+
pub use rm::Rm;
28
+
pub use save::Save;
29
+
pub use source::Source;
30
+
pub use sys::Sys;
31
+
pub use version::Version;
+88
src/cmd/open.rs
+88
src/cmd/open.rs
···
1
+
use std::ops::Not;
2
+
3
+
use crate::globals::{get_pwd, to_shell_err};
4
+
use nu_command::{FromCsv, FromJson, FromOds, FromToml, FromTsv, FromXlsx, FromXml, FromYaml};
5
+
use nu_engine::CallExt;
6
+
use nu_protocol::{
7
+
ByteStream, Category, PipelineData, ShellError, Signature, SyntaxShape,
8
+
engine::{Command, EngineState, Stack},
9
+
};
10
+
11
+
#[derive(Clone)]
12
+
pub struct Open;
13
+
14
+
impl Command for Open {
15
+
fn name(&self) -> &str {
16
+
"open"
17
+
}
18
+
19
+
fn signature(&self) -> Signature {
20
+
Signature::build("open")
21
+
.required("path", SyntaxShape::String, "path to the file")
22
+
.switch(
23
+
"raw",
24
+
"output content as raw string/binary without parsing",
25
+
Some('r'),
26
+
)
27
+
.category(Category::FileSystem)
28
+
}
29
+
30
+
fn description(&self) -> &str {
31
+
"open a file from the virtual filesystem."
32
+
}
33
+
34
+
fn run(
35
+
&self,
36
+
engine_state: &EngineState,
37
+
stack: &mut Stack,
38
+
call: &nu_protocol::engine::Call,
39
+
_input: PipelineData,
40
+
) -> Result<PipelineData, ShellError> {
41
+
let path: String = call.req(engine_state, stack, 0)?;
42
+
let raw_flag = call.has_flag(engine_state, stack, "raw")?;
43
+
44
+
let target_file = get_pwd().join(&path).map_err(to_shell_err(call.head))?;
45
+
46
+
let parse_cmd = raw_flag
47
+
.not()
48
+
.then(|| {
49
+
target_file
50
+
.extension()
51
+
.and_then(|ext| get_cmd_for_ext(&ext))
52
+
})
53
+
.flatten();
54
+
55
+
target_file
56
+
.open_file()
57
+
.map_err(to_shell_err(call.head))
58
+
.and_then(|f| {
59
+
let data = PipelineData::ByteStream(
60
+
ByteStream::read(
61
+
f,
62
+
call.head,
63
+
engine_state.signals().clone(),
64
+
nu_protocol::ByteStreamType::String,
65
+
),
66
+
None,
67
+
);
68
+
if let Some(cmd) = parse_cmd {
69
+
return cmd.run(engine_state, stack, call, data);
70
+
}
71
+
Ok(data)
72
+
})
73
+
}
74
+
}
75
+
76
+
fn get_cmd_for_ext(ext: &str) -> Option<Box<dyn Command>> {
77
+
Some(match ext {
78
+
"json" => Box::new(FromJson),
79
+
"yaml" | "yml" => Box::new(FromYaml),
80
+
"toml" => Box::new(FromToml),
81
+
"csv" => Box::new(FromCsv),
82
+
"ods" => Box::new(FromOds),
83
+
"tsv" => Box::new(FromTsv),
84
+
"xml" => Box::new(FromXml),
85
+
"xlsx" => Box::new(FromXlsx),
86
+
_ => return None,
87
+
})
88
+
}
+37
src/cmd/pwd.rs
+37
src/cmd/pwd.rs
···
1
+
use crate::globals::get_pwd;
2
+
use nu_protocol::engine::Call;
3
+
use nu_protocol::{
4
+
Category, IntoPipelineData, PipelineData, ShellError, Signature, Value,
5
+
engine::{Command, EngineState, Stack},
6
+
};
7
+
8
+
#[derive(Clone)]
9
+
pub struct Pwd;
10
+
11
+
impl Command for Pwd {
12
+
fn name(&self) -> &str {
13
+
"pwd"
14
+
}
15
+
16
+
fn signature(&self) -> Signature {
17
+
Signature::build("pwd").category(Category::FileSystem)
18
+
}
19
+
20
+
fn description(&self) -> &str {
21
+
"print the current working directory in the virtual filesystem."
22
+
}
23
+
24
+
fn run(
25
+
&self,
26
+
_engine_state: &EngineState,
27
+
_stack: &mut Stack,
28
+
call: &Call,
29
+
_input: PipelineData,
30
+
) -> Result<PipelineData, ShellError> {
31
+
let mut pwd = get_pwd().as_str().to_string();
32
+
if pwd.is_empty() {
33
+
pwd.push('/');
34
+
}
35
+
Ok(Value::string(pwd, call.head).into_pipeline_data())
36
+
}
37
+
}
+37
src/cmd/random.rs
+37
src/cmd/random.rs
···
1
+
use js_sys::Math;
2
+
use nu_protocol::Type;
3
+
use nu_protocol::engine::Call;
4
+
use nu_protocol::{
5
+
Category, IntoPipelineData, PipelineData, ShellError, Signature, Value,
6
+
engine::{Command, EngineState, Stack},
7
+
};
8
+
9
+
#[derive(Clone)]
10
+
pub struct Random;
11
+
12
+
impl Command for Random {
13
+
fn name(&self) -> &str {
14
+
"random"
15
+
}
16
+
17
+
fn signature(&self) -> Signature {
18
+
Signature::build("random")
19
+
.category(Category::Math)
20
+
.input_output_type(Type::Nothing, Type::Float)
21
+
}
22
+
23
+
fn description(&self) -> &str {
24
+
"returns a random float between 0 and 1."
25
+
}
26
+
27
+
fn run(
28
+
&self,
29
+
_engine_state: &EngineState,
30
+
_stack: &mut Stack,
31
+
call: &Call,
32
+
_input: PipelineData,
33
+
) -> Result<PipelineData, ShellError> {
34
+
let v: f64 = Math::random();
35
+
Ok(Value::float(v, call.head).into_pipeline_data())
36
+
}
37
+
}
+80
src/cmd/rm.rs
+80
src/cmd/rm.rs
···
1
+
use crate::globals::{get_pwd, to_shell_err};
2
+
use nu_engine::CallExt;
3
+
use nu_protocol::{
4
+
Category, PipelineData, ShellError, Signature, SyntaxShape,
5
+
engine::{Command, EngineState, Stack},
6
+
};
7
+
use vfs::VfsFileType;
8
+
9
+
#[derive(Clone)]
10
+
pub struct Rm;
11
+
12
+
impl Command for Rm {
13
+
fn name(&self) -> &str {
14
+
"rm"
15
+
}
16
+
17
+
fn signature(&self) -> Signature {
18
+
Signature::build("rm")
19
+
.required(
20
+
"path",
21
+
SyntaxShape::String,
22
+
"path to file or directory to remove",
23
+
)
24
+
.switch(
25
+
"recursive",
26
+
"remove directories and their contents recursively",
27
+
Some('r'),
28
+
)
29
+
.category(Category::FileSystem)
30
+
}
31
+
32
+
fn description(&self) -> &str {
33
+
"remove a file or directory from the virtual filesystem."
34
+
}
35
+
36
+
fn run(
37
+
&self,
38
+
engine_state: &EngineState,
39
+
stack: &mut Stack,
40
+
call: &nu_protocol::engine::Call,
41
+
_input: PipelineData,
42
+
) -> Result<PipelineData, ShellError> {
43
+
let path: String = call.req(engine_state, stack, 0)?;
44
+
let recursive = call.has_flag(engine_state, stack, "recursive")?;
45
+
46
+
// Prevent removing root
47
+
if path == "/" {
48
+
return Err(ShellError::GenericError {
49
+
error: "cannot remove root".to_string(),
50
+
msg: "refusing to remove root directory".to_string(),
51
+
span: Some(call.head),
52
+
help: None,
53
+
inner: vec![],
54
+
});
55
+
}
56
+
57
+
// Resolve target relative to PWD (or absolute if path starts with '/')
58
+
let target = get_pwd()
59
+
.join(path.trim_end_matches('/'))
60
+
.map_err(to_shell_err(call.head))?;
61
+
62
+
let meta = target.metadata().map_err(to_shell_err(call.head))?;
63
+
match meta.file_type {
64
+
VfsFileType::File => {
65
+
target.remove_file().map_err(to_shell_err(call.head))?;
66
+
Ok(PipelineData::Empty)
67
+
}
68
+
VfsFileType::Directory => {
69
+
(if recursive {
70
+
target.remove_dir_all()
71
+
} else {
72
+
// non-recursive: attempt to remove directory (will fail if not empty)
73
+
target.remove_dir()
74
+
})
75
+
.map_err(to_shell_err(call.head))
76
+
.map(|_| PipelineData::Empty)
77
+
}
78
+
}
79
+
}
80
+
}
+67
src/cmd/save.rs
+67
src/cmd/save.rs
···
1
+
use crate::globals::{get_pwd, to_shell_err};
2
+
use nu_engine::CallExt;
3
+
use nu_protocol::{
4
+
Category, PipelineData, ShellError, Signature, SyntaxShape, Type, Value,
5
+
engine::{Command, EngineState, Stack},
6
+
};
7
+
use vfs::VfsError;
8
+
9
+
#[derive(Clone)]
10
+
pub struct Save;
11
+
12
+
impl Command for Save {
13
+
fn name(&self) -> &str {
14
+
"save"
15
+
}
16
+
17
+
fn signature(&self) -> Signature {
18
+
Signature::build("save")
19
+
.required("path", SyntaxShape::String, "path to write the data to")
20
+
.input_output_types(vec![(Type::Any, Type::Nothing)])
21
+
.category(Category::FileSystem)
22
+
}
23
+
24
+
fn description(&self) -> &str {
25
+
"save content to a file in the virtual filesystem."
26
+
}
27
+
28
+
fn run(
29
+
&self,
30
+
engine_state: &EngineState,
31
+
stack: &mut Stack,
32
+
call: &nu_protocol::engine::Call,
33
+
input: PipelineData,
34
+
) -> Result<PipelineData, ShellError> {
35
+
let path: String = call.req(engine_state, stack, 0)?;
36
+
37
+
let value = input.into_value(call.head)?;
38
+
let contents = match value {
39
+
Value::String { val, .. } => val.into_bytes(),
40
+
Value::Binary { val, .. } => val,
41
+
Value::Bool { val, .. } => val.to_string().into_bytes(),
42
+
Value::Float { val, .. } => val.to_string().into_bytes(),
43
+
Value::Int { val, .. } => val.to_string().into_bytes(),
44
+
Value::Date { val, .. } => val.to_string().into_bytes(),
45
+
_ => {
46
+
return Err(ShellError::CantConvert {
47
+
to_type: "string".to_string(),
48
+
from_type: value.get_type().to_string(),
49
+
span: value.span(),
50
+
help: None,
51
+
});
52
+
}
53
+
};
54
+
55
+
let target_file = get_pwd().join(&path).map_err(to_shell_err(call.head))?;
56
+
57
+
target_file
58
+
.create_file()
59
+
.map_err(to_shell_err(call.head))
60
+
.and_then(|mut f| {
61
+
f.write_all(&contents)
62
+
.map_err(VfsError::from)
63
+
.map_err(to_shell_err(call.head))
64
+
})
65
+
.map(|_| PipelineData::Empty)
66
+
}
67
+
}
+89
src/cmd/source.rs
+89
src/cmd/source.rs
···
1
+
use crate::globals::{get_pwd, queue_delta, to_shell_err};
2
+
use nu_engine::{CallExt, command_prelude::IoError, eval_block};
3
+
use nu_parser::parse;
4
+
use nu_protocol::{
5
+
Category, PipelineData, ShellError, Signature, SyntaxShape,
6
+
debugger::WithoutDebug,
7
+
engine::{Command, EngineState, Stack, StateWorkingSet},
8
+
};
9
+
use std::{io::Read, path::PathBuf, str::FromStr};
10
+
11
+
#[derive(Clone)]
12
+
pub struct Source;
13
+
14
+
impl Command for Source {
15
+
fn name(&self) -> &str {
16
+
"source"
17
+
}
18
+
19
+
fn signature(&self) -> Signature {
20
+
Signature::build(self.name())
21
+
.required("filename", SyntaxShape::String, "the file to source")
22
+
.category(Category::Core)
23
+
}
24
+
25
+
fn description(&self) -> &str {
26
+
"source a file from the virtual filesystem."
27
+
}
28
+
29
+
fn run(
30
+
&self,
31
+
engine_state: &EngineState,
32
+
stack: &mut Stack,
33
+
call: &nu_protocol::engine::Call,
34
+
input: PipelineData,
35
+
) -> Result<PipelineData, ShellError> {
36
+
let filename: String = call.req(engine_state, stack, 0)?;
37
+
38
+
// 1. Read file from VFS
39
+
let path = get_pwd().join(&filename).map_err(to_shell_err(call.head))?;
40
+
let mut file = path.open_file().map_err(to_shell_err(call.head))?;
41
+
let mut contents = String::new();
42
+
file.read_to_string(&mut contents).map_err(|e| {
43
+
ShellError::Io(IoError::new(
44
+
e,
45
+
call.head,
46
+
PathBuf::from_str(path.as_str()).unwrap(),
47
+
))
48
+
})?;
49
+
50
+
// 2. Parse the content
51
+
// We create a new working set based on the CURRENT engine state.
52
+
let mut working_set = StateWorkingSet::new(engine_state);
53
+
54
+
// We must add the file to the working set so the parser can track spans correctly
55
+
let _file_id = working_set.add_file(filename.clone(), contents.as_bytes());
56
+
57
+
// Parse the block
58
+
let block = parse(
59
+
&mut working_set,
60
+
Some(&filename),
61
+
contents.as_bytes(),
62
+
false,
63
+
);
64
+
65
+
if let Some(err) = working_set.parse_errors.first() {
66
+
return Err(ShellError::GenericError {
67
+
error: "Parse error".into(),
68
+
msg: err.to_string(),
69
+
span: Some(call.head),
70
+
help: None,
71
+
inner: vec![],
72
+
});
73
+
}
74
+
75
+
// 3. Prepare execution context
76
+
// We clone the engine state to merge the new definitions (delta) locally.
77
+
// This ensures the script can call its own defined functions immediately.
78
+
let mut local_state = engine_state.clone();
79
+
local_state.merge_delta(working_set.delta.clone())?;
80
+
81
+
// 4. Queue the delta for the global engine state
82
+
// This allows definitions to be available in the next command execution cycle (REPL behavior).
83
+
queue_delta(working_set.delta);
84
+
85
+
// 5. Evaluate the block
86
+
// We pass the MUTABLE stack, so environment variable changes (PWD, load-env) WILL persist.
87
+
eval_block::<WithoutDebug>(&local_state, stack, &block, input).map(|data| data.body)
88
+
}
89
+
}
+182
src/cmd/sys.rs
+182
src/cmd/sys.rs
···
1
+
use js_sys::Reflect;
2
+
use js_sys::global;
3
+
use nu_protocol::{
4
+
Category, IntoPipelineData, PipelineData, Record, ShellError, Signature, Value,
5
+
engine::{Command, EngineState, Stack},
6
+
};
7
+
use wasm_bindgen::JsValue;
8
+
9
+
#[derive(Clone)]
10
+
pub struct Sys;
11
+
12
+
impl Command for Sys {
13
+
fn name(&self) -> &str {
14
+
"sys"
15
+
}
16
+
17
+
fn signature(&self) -> Signature {
18
+
Signature::build("sys").category(Category::System)
19
+
}
20
+
21
+
fn description(&self) -> &str {
22
+
"return information about the browser environment (when running in wasm)"
23
+
}
24
+
25
+
fn run(
26
+
&self,
27
+
_engine_state: &EngineState,
28
+
_stack: &mut Stack,
29
+
call: &nu_protocol::engine::Call,
30
+
_input: PipelineData,
31
+
) -> Result<PipelineData, ShellError> {
32
+
let head = call.head;
33
+
let mut rec = Record::new();
34
+
35
+
let g = global();
36
+
37
+
// navigator-derived fields
38
+
if let Ok(nav) = Reflect::get(&g, &JsValue::from_str("navigator")) {
39
+
if !nav.is_undefined() && !nav.is_null() {
40
+
let ua = Reflect::get(&nav, &JsValue::from_str("userAgent"))
41
+
.ok()
42
+
.and_then(|v| v.as_string())
43
+
.unwrap_or_default();
44
+
rec.push("user_agent", Value::string(ua, head));
45
+
46
+
let platform = Reflect::get(&nav, &JsValue::from_str("platform"))
47
+
.ok()
48
+
.and_then(|v| v.as_string())
49
+
.unwrap_or_default();
50
+
rec.push("platform", Value::string(platform, head));
51
+
52
+
let vendor = Reflect::get(&nav, &JsValue::from_str("vendor"))
53
+
.ok()
54
+
.and_then(|v| v.as_string())
55
+
.unwrap_or_default();
56
+
rec.push("vendor", Value::string(vendor, head));
57
+
58
+
let product = Reflect::get(&nav, &JsValue::from_str("product"))
59
+
.ok()
60
+
.and_then(|v| v.as_string())
61
+
.unwrap_or_default();
62
+
rec.push("product", Value::string(product, head));
63
+
64
+
let app_name = Reflect::get(&nav, &JsValue::from_str("appName"))
65
+
.ok()
66
+
.and_then(|v| v.as_string())
67
+
.unwrap_or_default();
68
+
rec.push("app_name", Value::string(app_name, head));
69
+
70
+
let language = Reflect::get(&nav, &JsValue::from_str("language"))
71
+
.ok()
72
+
.and_then(|v| v.as_string())
73
+
.unwrap_or_default();
74
+
rec.push("language", Value::string(language, head));
75
+
76
+
// booleans now use Value::bool
77
+
let online = Reflect::get(&nav, &JsValue::from_str("onLine"))
78
+
.ok()
79
+
.and_then(|v| v.as_bool())
80
+
.unwrap_or(false);
81
+
rec.push("online", Value::bool(online, head));
82
+
83
+
let cookie_enabled = Reflect::get(&nav, &JsValue::from_str("cookieEnabled"))
84
+
.ok()
85
+
.and_then(|v| v.as_bool())
86
+
.unwrap_or(false);
87
+
rec.push("cookie_enabled", Value::bool(cookie_enabled, head));
88
+
89
+
// numeric-ish fields
90
+
let hardware_concurrency =
91
+
Reflect::get(&nav, &JsValue::from_str("hardwareConcurrency"))
92
+
.ok()
93
+
.and_then(|v| v.as_f64())
94
+
.map(|f| f as i64);
95
+
if let Some(hc) = hardware_concurrency {
96
+
rec.push("hardware_concurrency", Value::int(hc, head));
97
+
}
98
+
99
+
let device_memory = Reflect::get(&nav, &JsValue::from_str("deviceMemory"))
100
+
.ok()
101
+
.and_then(|v| v.as_f64())
102
+
.map(|f| f as i64);
103
+
if let Some(dm) = device_memory {
104
+
rec.push("device_memory_gb", Value::int(dm, head));
105
+
}
106
+
107
+
let max_touch_points = Reflect::get(&nav, &JsValue::from_str("maxTouchPoints"))
108
+
.ok()
109
+
.and_then(|v| v.as_f64())
110
+
.map(|f| f as i64);
111
+
if let Some(tp) = max_touch_points {
112
+
rec.push("max_touch_points", Value::int(tp, head));
113
+
}
114
+
115
+
let dnt = Reflect::get(&nav, &JsValue::from_str("doNotTrack"))
116
+
.ok()
117
+
.and_then(|v| v.as_string())
118
+
.unwrap_or_default();
119
+
if !dnt.is_empty() {
120
+
rec.push("do_not_track", Value::string(dnt, head));
121
+
}
122
+
}
123
+
}
124
+
125
+
// screen dimensions (if available)
126
+
if let Ok(screen) = Reflect::get(&g, &JsValue::from_str("screen")) {
127
+
if !screen.is_undefined() && !screen.is_null() {
128
+
let width = Reflect::get(&screen, &JsValue::from_str("width"))
129
+
.ok()
130
+
.and_then(|v| v.as_f64())
131
+
.map(|f| f as i64);
132
+
let height = Reflect::get(&screen, &JsValue::from_str("height"))
133
+
.ok()
134
+
.and_then(|v| v.as_f64())
135
+
.map(|f| f as i64);
136
+
if let Some(w) = width {
137
+
rec.push("screen_width", Value::int(w, head));
138
+
}
139
+
if let Some(h) = height {
140
+
rec.push("screen_height", Value::int(h, head));
141
+
}
142
+
}
143
+
}
144
+
145
+
// performance.memory (optional)
146
+
if let Ok(perf) = Reflect::get(&g, &JsValue::from_str("performance")) {
147
+
if !perf.is_undefined() && !perf.is_null() {
148
+
if let Ok(mem) = Reflect::get(&perf, &JsValue::from_str("memory")) {
149
+
if !mem.is_undefined() && !mem.is_null() {
150
+
let used = Reflect::get(&mem, &JsValue::from_str("usedJSHeapSize"))
151
+
.ok()
152
+
.and_then(|v| v.as_f64())
153
+
.map(|f| f as i64);
154
+
let limit = Reflect::get(&mem, &JsValue::from_str("jsHeapSizeLimit"))
155
+
.ok()
156
+
.and_then(|v| v.as_f64())
157
+
.map(|f| f as i64);
158
+
let mut mrec = Record::new();
159
+
if let Some(u) = used {
160
+
mrec.push("used_js_heap_size", Value::filesize(u, head));
161
+
}
162
+
if let Some(l) = limit {
163
+
mrec.push("js_heap_size_limit", Value::filesize(l, head));
164
+
}
165
+
if !mrec.is_empty() {
166
+
rec.push("performance_memory", Value::record(mrec, head));
167
+
}
168
+
}
169
+
}
170
+
}
171
+
}
172
+
173
+
if rec.is_empty() {
174
+
rec.push(
175
+
"error",
176
+
Value::string("not running in a browser environment", head),
177
+
);
178
+
}
179
+
180
+
Ok(Value::record(rec, head).into_pipeline_data())
181
+
}
182
+
}
+32
src/cmd/version.rs
+32
src/cmd/version.rs
···
1
+
use nu_protocol::engine::Call;
2
+
use nu_protocol::{
3
+
Category, IntoPipelineData, PipelineData, ShellError, Signature, Value,
4
+
engine::{Command, EngineState, Stack},
5
+
};
6
+
7
+
#[derive(Clone)]
8
+
pub struct Version;
9
+
10
+
impl Command for Version {
11
+
fn name(&self) -> &str {
12
+
"version"
13
+
}
14
+
15
+
fn signature(&self) -> Signature {
16
+
Signature::build(self.name()).category(Category::System)
17
+
}
18
+
19
+
fn description(&self) -> &str {
20
+
"print the version of dysnomia."
21
+
}
22
+
23
+
fn run(
24
+
&self,
25
+
_engine_state: &EngineState,
26
+
_stack: &mut Stack,
27
+
call: &Call,
28
+
_input: PipelineData,
29
+
) -> Result<PipelineData, ShellError> {
30
+
Ok(Value::string("dysnomia.v099.t1765660500", call.head).into_pipeline_data())
31
+
}
32
+
}
+213
src/completion.rs
+213
src/completion.rs
···
1
+
use super::*;
2
+
3
+
#[derive(Debug, Serialize)]
4
+
struct Suggestion {
5
+
name: String,
6
+
description: Option<String>,
7
+
is_command: bool,
8
+
rendered: String,
9
+
span_start: usize, // char index (not byte)
10
+
span_end: usize, // char index (not byte)
11
+
}
12
+
13
+
impl PartialEq for Suggestion {
14
+
fn eq(&self, other: &Self) -> bool {
15
+
self.name == other.name
16
+
}
17
+
}
18
+
impl Eq for Suggestion {}
19
+
impl PartialOrd for Suggestion {
20
+
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
21
+
self.name.partial_cmp(&other.name)
22
+
}
23
+
}
24
+
impl Ord for Suggestion {
25
+
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
26
+
self.name.cmp(&other.name)
27
+
}
28
+
}
29
+
30
+
#[wasm_bindgen]
31
+
pub fn completion(input: &str, js_cursor_pos: usize) -> String {
32
+
let engine_guard = ENGINE_STATE
33
+
.get()
34
+
.unwrap()
35
+
.lock()
36
+
.expect("engine state initialized");
37
+
let root = get_pwd();
38
+
39
+
// Map UTF-16 cursor position (from JS) to Byte index (for Rust)
40
+
let byte_pos = input
41
+
.char_indices()
42
+
.map(|(i, _)| i)
43
+
.nth(js_cursor_pos)
44
+
.unwrap_or(input.len());
45
+
46
+
// 1. Parse & Flatten
47
+
let mut working_set = StateWorkingSet::new(&engine_guard);
48
+
// CRITICAL: Capture the start offset so we can normalize spans later
49
+
let global_offset = working_set.next_span_start();
50
+
let block = parse(&mut working_set, None, input.as_bytes(), false);
51
+
let shapes = flatten_block(&working_set, &block);
52
+
53
+
// 2. Identify context
54
+
let mut is_command_pos = false;
55
+
let mut current_span = Span::new(byte_pos, byte_pos);
56
+
let mut prefix = "".to_string();
57
+
let mut found_shape = false;
58
+
59
+
// Check if cursor is inside or touching a shape
60
+
for (span, shape) in &shapes {
61
+
// Convert global span to local indices
62
+
let local_start = span.start.saturating_sub(global_offset);
63
+
let local_end = span.end.saturating_sub(global_offset);
64
+
let local_span = Span::new(local_start, local_end);
65
+
66
+
if local_span.contains(byte_pos) || local_span.end == byte_pos {
67
+
current_span = local_span;
68
+
found_shape = true;
69
+
let safe_end = std::cmp::min(local_span.end, byte_pos);
70
+
if local_span.start < input.len() {
71
+
prefix = input[local_span.start..safe_end].to_string();
72
+
}
73
+
74
+
match shape {
75
+
FlatShape::External(_) | FlatShape::InternalCall(_) | FlatShape::Keyword => {
76
+
is_command_pos = true;
77
+
}
78
+
FlatShape::Garbage => {
79
+
// Check if it looks like a flag
80
+
if prefix.starts_with('-') {
81
+
is_command_pos = false;
82
+
} else {
83
+
// Assume command if it's garbage but not a flag (e.g. typing a new command)
84
+
is_command_pos = true;
85
+
}
86
+
}
87
+
_ => {
88
+
is_command_pos = false;
89
+
}
90
+
}
91
+
break;
92
+
}
93
+
}
94
+
95
+
// Fallback to Lexer if in whitespace
96
+
if !found_shape {
97
+
let (tokens, _err) = lex(input.as_bytes(), 0, &[], &[], true);
98
+
let last_token = tokens.iter().filter(|t| t.span.end <= byte_pos).last();
99
+
100
+
if let Some(token) = last_token {
101
+
match token.contents {
102
+
TokenContents::Pipe
103
+
| TokenContents::PipePipe
104
+
| TokenContents::Semicolon
105
+
| TokenContents::Eol => {
106
+
is_command_pos = true;
107
+
}
108
+
_ => {
109
+
let text = &input[token.span.start..token.span.end];
110
+
if text == "{" || text == "(" || text == ";" || text == "&&" || text == "||" {
111
+
is_command_pos = true;
112
+
} else {
113
+
is_command_pos = false;
114
+
}
115
+
}
116
+
}
117
+
} else {
118
+
is_command_pos = true; // Start of input
119
+
}
120
+
}
121
+
122
+
let mut suggestions: Vec<Suggestion> = Vec::new();
123
+
124
+
// Convert byte-spans back to char-spans for JS
125
+
let to_char_span = |start: usize, end: usize| -> (usize, usize) {
126
+
let char_start = input[..start].chars().count();
127
+
let char_end = input[..end].chars().count();
128
+
(char_start, char_end)
129
+
};
130
+
131
+
let (span_start, span_end) = to_char_span(current_span.start, current_span.end);
132
+
133
+
let mut add_cmd_suggestion = |name: Vec<u8>, desc: Option<String>| {
134
+
let name = String::from_utf8_lossy(&name).to_string();
135
+
suggestions.push(Suggestion {
136
+
rendered: {
137
+
let name = ansi_term::Color::Green.bold().paint(&name);
138
+
let desc = desc.as_deref().unwrap_or("<no description>");
139
+
format!("{name} {desc}")
140
+
},
141
+
name: name.clone(), // Replacement text is just the name
142
+
description: desc,
143
+
is_command: true,
144
+
span_start,
145
+
span_end,
146
+
});
147
+
};
148
+
149
+
let working_set = StateWorkingSet::new(&engine_guard);
150
+
151
+
if is_command_pos {
152
+
for (_, name, desc, _) in working_set
153
+
.find_commands_by_predicate(|value| value.starts_with(prefix.as_bytes()), true)
154
+
{
155
+
add_cmd_suggestion(name, desc);
156
+
}
157
+
} else {
158
+
// File completion
159
+
// Split prefix into directory and file part
160
+
let (dir, file_prefix) = if let Some(idx) = prefix.rfind('/') {
161
+
(&prefix[..idx + 1], &prefix[idx + 1..])
162
+
} else {
163
+
("", prefix.as_str())
164
+
};
165
+
166
+
// Fix: Clean up the directory path before joining.
167
+
// VFS often fails if 'join' is called with a trailing slash (e.g. "a/") because it interprets it as "a" + ""
168
+
let dir_to_join = if dir.len() > 1 && dir.ends_with('/') {
169
+
&dir[..dir.len() - 1]
170
+
} else {
171
+
dir
172
+
};
173
+
174
+
let target_dir = if !dir.is_empty() {
175
+
match root.join(dir_to_join) {
176
+
Ok(d) => {
177
+
if let Ok(true) = d.is_dir() {
178
+
Some(d)
179
+
} else {
180
+
None
181
+
}
182
+
}
183
+
Err(_) => None,
184
+
}
185
+
} else {
186
+
// If prefix is empty, list current directory
187
+
Some(root.join("").unwrap())
188
+
};
189
+
190
+
if let Some(d) = target_dir {
191
+
if let Ok(iterator) = d.read_dir() {
192
+
for entry in iterator {
193
+
let name = entry.filename();
194
+
if name.starts_with(file_prefix) {
195
+
let full_completion = format!("{}{}", dir, name);
196
+
suggestions.push(Suggestion {
197
+
name: full_completion.clone(),
198
+
description: None,
199
+
is_command: false,
200
+
rendered: full_completion,
201
+
span_start,
202
+
span_end,
203
+
})
204
+
}
205
+
}
206
+
}
207
+
}
208
+
}
209
+
210
+
suggestions.sort();
211
+
212
+
serde_json::to_string(&suggestions).unwrap_or_else(|_| "[]".to_string())
213
+
}
+370
src/default_context.rs
+370
src/default_context.rs
···
1
+
use nu_command::*;
2
+
use nu_protocol::engine::{EngineState, StateWorkingSet};
3
+
4
+
pub fn add_shell_command_context(mut engine_state: EngineState) -> EngineState {
5
+
let delta = {
6
+
let mut working_set = StateWorkingSet::new(&engine_state);
7
+
8
+
macro_rules! bind_command {
9
+
( $( $command:expr ),* $(,)? ) => {
10
+
$( working_set.add_decl(Box::new($command)); )*
11
+
};
12
+
}
13
+
14
+
// If there are commands that have the same name as default declarations,
15
+
// they have to be registered before the main declarations. This helps to make
16
+
// them only accessible if the correct input value category is used with the
17
+
// declaration
18
+
19
+
// Database-related
20
+
// Adds all related commands to query databases
21
+
// add_database_decls(&mut working_set);
22
+
23
+
// Charts
24
+
bind_command! {
25
+
Histogram
26
+
}
27
+
28
+
// Filters
29
+
bind_command! {
30
+
All,
31
+
Any,
32
+
Append,
33
+
Chunks,
34
+
Columns,
35
+
Compact,
36
+
Default,
37
+
Drop,
38
+
DropColumn,
39
+
DropNth,
40
+
Each,
41
+
Enumerate,
42
+
Every,
43
+
Filter,
44
+
Find,
45
+
First,
46
+
Flatten,
47
+
Get,
48
+
GroupBy,
49
+
Headers,
50
+
Insert,
51
+
IsEmpty,
52
+
IsNotEmpty,
53
+
Interleave,
54
+
Items,
55
+
Join,
56
+
Take,
57
+
Merge,
58
+
MergeDeep,
59
+
Move,
60
+
TakeWhile,
61
+
TakeUntil,
62
+
Last,
63
+
Length,
64
+
Lines,
65
+
ParEach,
66
+
ChunkBy,
67
+
Prepend,
68
+
Reduce,
69
+
Reject,
70
+
Rename,
71
+
Reverse,
72
+
Select,
73
+
Skip,
74
+
SkipUntil,
75
+
SkipWhile,
76
+
Slice,
77
+
Sort,
78
+
SortBy,
79
+
SplitList,
80
+
Tee,
81
+
Transpose,
82
+
Uniq,
83
+
UniqBy,
84
+
Upsert,
85
+
Update,
86
+
Values,
87
+
Where,
88
+
Window,
89
+
Wrap,
90
+
Zip,
91
+
};
92
+
93
+
// Misc
94
+
bind_command! {
95
+
Panic,
96
+
};
97
+
98
+
// Path
99
+
bind_command! {
100
+
Path,
101
+
PathBasename,
102
+
PathSelf,
103
+
PathDirname,
104
+
PathExists,
105
+
PathExpand,
106
+
PathJoin,
107
+
PathParse,
108
+
PathRelativeTo,
109
+
PathSplit,
110
+
PathType,
111
+
};
112
+
113
+
// Help
114
+
bind_command! {
115
+
Help,
116
+
HelpAliases,
117
+
HelpExterns,
118
+
HelpCommands,
119
+
HelpModules,
120
+
HelpOperators,
121
+
HelpPipeAndRedirect,
122
+
HelpEscapes,
123
+
};
124
+
125
+
// Debug
126
+
bind_command! {
127
+
Ast,
128
+
Debug,
129
+
DebugEnv,
130
+
DebugExperimentalOptions,
131
+
DebugInfo,
132
+
DebugProfile,
133
+
Explain,
134
+
Inspect,
135
+
Metadata,
136
+
MetadataAccess,
137
+
MetadataSet,
138
+
TimeIt,
139
+
View,
140
+
ViewBlocks,
141
+
ViewFiles,
142
+
ViewIr,
143
+
ViewSource,
144
+
ViewSpan,
145
+
};
146
+
147
+
// Strings
148
+
bind_command! {
149
+
Ansi,
150
+
AnsiLink,
151
+
AnsiStrip,
152
+
Char,
153
+
Decode,
154
+
Encode,
155
+
DecodeHex,
156
+
EncodeHex,
157
+
DecodeBase32,
158
+
EncodeBase32,
159
+
DecodeBase32Hex,
160
+
EncodeBase32Hex,
161
+
DecodeBase64,
162
+
EncodeBase64,
163
+
Detect,
164
+
DetectColumns,
165
+
DetectType,
166
+
Parse,
167
+
Split,
168
+
SplitChars,
169
+
SplitColumn,
170
+
SplitRow,
171
+
SplitWords,
172
+
Str,
173
+
StrCapitalize,
174
+
StrContains,
175
+
StrDistance,
176
+
StrDowncase,
177
+
StrEndswith,
178
+
StrExpand,
179
+
StrJoin,
180
+
StrReplace,
181
+
StrIndexOf,
182
+
StrLength,
183
+
StrReverse,
184
+
StrStats,
185
+
StrStartsWith,
186
+
StrSubstring,
187
+
StrTrim,
188
+
StrUpcase,
189
+
Format,
190
+
FormatDate,
191
+
FormatDuration,
192
+
FormatFilesize,
193
+
};
194
+
195
+
// Date
196
+
bind_command! {
197
+
Date,
198
+
DateFromHuman,
199
+
DateHumanize,
200
+
DateListTimezones,
201
+
DateNow,
202
+
DateToTimezone,
203
+
};
204
+
205
+
// Formats
206
+
bind_command! {
207
+
From,
208
+
FromCsv,
209
+
FromJson,
210
+
FromMsgpack,
211
+
FromMsgpackz,
212
+
FromNuon,
213
+
FromOds,
214
+
FromSsv,
215
+
FromToml,
216
+
FromTsv,
217
+
FromXlsx,
218
+
FromXml,
219
+
FromYaml,
220
+
FromYml,
221
+
To,
222
+
ToCsv,
223
+
ToJson,
224
+
ToMd,
225
+
ToMsgpack,
226
+
ToMsgpackz,
227
+
ToNuon,
228
+
ToText,
229
+
ToToml,
230
+
ToTsv,
231
+
Upsert,
232
+
Where,
233
+
ToXml,
234
+
ToYaml,
235
+
ToYml,
236
+
};
237
+
238
+
// Viewers
239
+
bind_command! {
240
+
Griddle,
241
+
Table,
242
+
};
243
+
244
+
// Conversions
245
+
bind_command! {
246
+
Fill,
247
+
Into,
248
+
IntoBool,
249
+
IntoBinary,
250
+
IntoCellPath,
251
+
IntoDatetime,
252
+
IntoDuration,
253
+
IntoFloat,
254
+
IntoFilesize,
255
+
IntoInt,
256
+
IntoRecord,
257
+
IntoString,
258
+
IntoGlob,
259
+
IntoValue,
260
+
SplitCellPath,
261
+
};
262
+
263
+
// Env
264
+
bind_command! {
265
+
ExportEnv,
266
+
LoadEnv,
267
+
SourceEnv,
268
+
WithEnv,
269
+
ConfigNu,
270
+
ConfigEnv,
271
+
ConfigFlatten,
272
+
ConfigMeta,
273
+
ConfigReset,
274
+
ConfigUseColors,
275
+
};
276
+
277
+
// Math
278
+
bind_command! {
279
+
Math,
280
+
MathAbs,
281
+
MathAvg,
282
+
MathCeil,
283
+
MathFloor,
284
+
MathMax,
285
+
MathMedian,
286
+
MathMin,
287
+
MathMode,
288
+
MathProduct,
289
+
MathRound,
290
+
MathSqrt,
291
+
MathStddev,
292
+
MathSum,
293
+
MathVariance,
294
+
MathLog,
295
+
};
296
+
297
+
// Bytes
298
+
bind_command! {
299
+
Bytes,
300
+
BytesLen,
301
+
BytesSplit,
302
+
BytesStartsWith,
303
+
BytesEndsWith,
304
+
BytesReverse,
305
+
BytesReplace,
306
+
BytesAdd,
307
+
BytesAt,
308
+
BytesIndexOf,
309
+
BytesCollect,
310
+
BytesRemove,
311
+
BytesBuild
312
+
}
313
+
314
+
bind_command! {
315
+
Url,
316
+
UrlBuildQuery,
317
+
UrlSplitQuery,
318
+
UrlDecode,
319
+
UrlEncode,
320
+
UrlJoin,
321
+
UrlParse,
322
+
}
323
+
324
+
// Generators
325
+
bind_command! {
326
+
Cal,
327
+
Seq,
328
+
SeqDate,
329
+
SeqChar,
330
+
Generate,
331
+
};
332
+
333
+
// Hash
334
+
bind_command! {
335
+
Hash,
336
+
HashMd5::default(),
337
+
HashSha256::default(),
338
+
};
339
+
340
+
// Removed
341
+
bind_command! {
342
+
LetEnv,
343
+
DateFormat,
344
+
};
345
+
346
+
// bind_command! {
347
+
// Stor,
348
+
// StorCreate,
349
+
// StorDelete,
350
+
// StorExport,
351
+
// StorImport,
352
+
// StorInsert,
353
+
// StorOpen,
354
+
// StorReset,
355
+
// StorUpdate,
356
+
// };
357
+
358
+
working_set.render()
359
+
};
360
+
361
+
if let Err(err) = engine_state.merge_delta(delta) {
362
+
eprintln!("Error creating default context: {err:?}");
363
+
}
364
+
365
+
// Cache the table decl id so we don't have to look it up later
366
+
let table_decl_id = engine_state.find_decl("table".as_bytes(), &[]);
367
+
engine_state.table_decl_id = table_decl_id;
368
+
369
+
engine_state
370
+
}
+78
src/error.rs
+78
src/error.rs
···
1
+
use miette::{GraphicalReportHandler, Report, SourceCode, SourceSpan, SpanContents};
2
+
3
+
pub struct CommandError {
4
+
pub error: Report,
5
+
pub start_offset: usize,
6
+
}
7
+
8
+
pub struct OffsetSource {
9
+
pub source: String,
10
+
pub start_offset: usize,
11
+
}
12
+
13
+
pub struct OffsetSpanContents<'a> {
14
+
inner: Box<dyn SpanContents<'a> + 'a>,
15
+
global_span: SourceSpan,
16
+
}
17
+
18
+
impl<'a> SpanContents<'a> for OffsetSpanContents<'a> {
19
+
fn data(&self) -> &'a [u8] {
20
+
self.inner.data()
21
+
}
22
+
fn span(&self) -> &SourceSpan {
23
+
&self.global_span
24
+
}
25
+
fn line(&self) -> usize {
26
+
self.inner.line()
27
+
}
28
+
fn column(&self) -> usize {
29
+
self.inner.column()
30
+
}
31
+
fn line_count(&self) -> usize {
32
+
self.inner.line_count()
33
+
}
34
+
}
35
+
36
+
impl SourceCode for OffsetSource {
37
+
fn read_span<'b>(
38
+
&'b self,
39
+
span: &SourceSpan,
40
+
context_lines_before: usize,
41
+
context_lines_after: usize,
42
+
) -> Result<Box<dyn miette::SpanContents<'b> + 'b>, miette::MietteError> {
43
+
let local_start = span.offset().saturating_sub(self.start_offset);
44
+
let local_len = std::cmp::min(span.len(), self.source.len().saturating_sub(local_start));
45
+
let local_span = SourceSpan::new(local_start.into(), local_len);
46
+
47
+
let local_contents =
48
+
self.source
49
+
.read_span(&local_span, context_lines_before, context_lines_after)?;
50
+
51
+
let content_local_span = local_contents.span();
52
+
let global_start = content_local_span.offset() + self.start_offset;
53
+
let global_span = SourceSpan::new(global_start.into(), content_local_span.len());
54
+
55
+
Ok(Box::new(OffsetSpanContents {
56
+
inner: local_contents,
57
+
global_span,
58
+
}))
59
+
}
60
+
}
61
+
62
+
pub fn format_error(error: Report, input: String, start_offset: usize) -> String {
63
+
let handler = GraphicalReportHandler::new()
64
+
.with_theme(miette::GraphicalTheme::unicode())
65
+
.with_cause_chain();
66
+
67
+
let source = OffsetSource {
68
+
source: input,
69
+
start_offset,
70
+
};
71
+
72
+
let report_with_source = error.with_source_code(source);
73
+
let mut output = String::new();
74
+
handler
75
+
.render_report(&mut output, report_with_source.as_ref())
76
+
.unwrap();
77
+
output
78
+
}
+189
src/globals.rs
+189
src/globals.rs
···
1
+
use futures::stream::AbortHandle;
2
+
use nu_protocol::{
3
+
ShellError, Span,
4
+
engine::{EngineState, StateDelta},
5
+
};
6
+
use std::{
7
+
collections::HashMap,
8
+
sync::{
9
+
Arc, Mutex, OnceLock, RwLock,
10
+
atomic::{AtomicUsize, Ordering},
11
+
},
12
+
time::{Duration, SystemTime, UNIX_EPOCH},
13
+
};
14
+
use vfs::{VfsError, VfsPath, error::VfsErrorKind};
15
+
use wasm_bindgen::prelude::*;
16
+
17
+
use crate::memory_fs::MemoryFS;
18
+
19
+
static ROOT: OnceLock<Arc<VfsPath>> = OnceLock::new();
20
+
21
+
pub fn get_vfs() -> Arc<VfsPath> {
22
+
ROOT.get_or_init(|| Arc::new(VfsPath::new(MemoryFS::new())))
23
+
.clone()
24
+
}
25
+
26
+
static PWD: OnceLock<RwLock<Arc<VfsPath>>> = OnceLock::new();
27
+
28
+
pub fn get_pwd() -> Arc<VfsPath> {
29
+
PWD.get_or_init(|| RwLock::new(get_vfs()))
30
+
.read()
31
+
.unwrap()
32
+
.clone()
33
+
}
34
+
35
+
pub fn set_pwd(path: Arc<VfsPath>) {
36
+
*PWD.get_or_init(|| RwLock::new(get_vfs())).write().unwrap() = path;
37
+
}
38
+
39
+
pub fn to_shell_err(span: Span) -> impl Fn(VfsError) -> ShellError {
40
+
move |vfs_error: VfsError| ShellError::GenericError {
41
+
error: (match vfs_error.kind() {
42
+
VfsErrorKind::DirectoryExists
43
+
| VfsErrorKind::FileExists
44
+
| VfsErrorKind::FileNotFound
45
+
| VfsErrorKind::InvalidPath => "path error",
46
+
_ => "io error",
47
+
})
48
+
.to_string(),
49
+
msg: vfs_error.to_string(),
50
+
span: Some(span),
51
+
help: None,
52
+
inner: vec![],
53
+
}
54
+
}
55
+
56
+
pub struct TaskInfo {
57
+
pub id: usize,
58
+
pub description: String,
59
+
pub handle: AbortHandle,
60
+
}
61
+
62
+
pub struct CallbackWrapper(js_sys::Function);
63
+
unsafe impl Send for CallbackWrapper {}
64
+
unsafe impl Sync for CallbackWrapper {}
65
+
66
+
static NEXT_TASK_ID: AtomicUsize = AtomicUsize::new(1);
67
+
static TASK_REGISTRY: OnceLock<Mutex<HashMap<usize, TaskInfo>>> = OnceLock::new();
68
+
static TASK_CALLBACK: OnceLock<Mutex<Option<CallbackWrapper>>> = OnceLock::new();
69
+
70
+
pub fn get_registry() -> &'static Mutex<HashMap<usize, TaskInfo>> {
71
+
TASK_REGISTRY.get_or_init(|| Mutex::new(HashMap::new()))
72
+
}
73
+
74
+
#[wasm_bindgen]
75
+
pub fn register_task_count_callback(f: js_sys::Function) {
76
+
let _ = TASK_CALLBACK.get_or_init(|| Mutex::new(None));
77
+
if let Ok(mut guard) = TASK_CALLBACK.get().unwrap().lock() {
78
+
*guard = Some(CallbackWrapper(f));
79
+
}
80
+
}
81
+
82
+
pub fn notify_task_count() {
83
+
if let Some(mutex) = TASK_CALLBACK.get() {
84
+
if let Ok(guard) = mutex.lock() {
85
+
if let Some(cb) = guard.as_ref() {
86
+
let count = if let Ok(reg) = get_registry().lock() {
87
+
reg.len()
88
+
} else {
89
+
0
90
+
};
91
+
let this = JsValue::NULL;
92
+
let arg = JsValue::from(count as u32);
93
+
let _ = cb.0.call1(&this, &arg);
94
+
}
95
+
}
96
+
}
97
+
}
98
+
99
+
pub fn register_task(description: String, handle: AbortHandle) -> usize {
100
+
let id = NEXT_TASK_ID.fetch_add(1, Ordering::Relaxed);
101
+
if let Ok(mut reg) = get_registry().lock() {
102
+
reg.insert(
103
+
id,
104
+
TaskInfo {
105
+
id,
106
+
description,
107
+
handle,
108
+
},
109
+
);
110
+
}
111
+
notify_task_count();
112
+
id
113
+
}
114
+
115
+
pub fn remove_task(id: usize) {
116
+
if let Ok(mut reg) = get_registry().lock() {
117
+
reg.remove(&id);
118
+
}
119
+
notify_task_count();
120
+
}
121
+
122
+
pub fn get_all_tasks() -> Vec<(usize, String)> {
123
+
if let Ok(reg) = get_registry().lock() {
124
+
reg.values()
125
+
.map(|t| (t.id, t.description.clone()))
126
+
.collect()
127
+
} else {
128
+
vec![]
129
+
}
130
+
}
131
+
132
+
pub fn kill_task_by_id(id: usize) -> bool {
133
+
if let Ok(mut reg) = get_registry().lock() {
134
+
if let Some(task) = reg.remove(&id) {
135
+
task.handle.abort();
136
+
drop(reg);
137
+
notify_task_count();
138
+
return true;
139
+
}
140
+
}
141
+
false
142
+
}
143
+
144
+
static PENDING_DELTAS: OnceLock<Mutex<Vec<StateDelta>>> = OnceLock::new();
145
+
146
+
pub fn queue_delta(delta: StateDelta) {
147
+
let _ = PENDING_DELTAS.get_or_init(|| Mutex::new(Vec::new()));
148
+
if let Ok(mut guard) = PENDING_DELTAS.get().unwrap().lock() {
149
+
guard.push(delta);
150
+
}
151
+
}
152
+
153
+
pub fn apply_pending_deltas(engine_state: &mut EngineState) -> Result<(), ShellError> {
154
+
if let Some(mutex) = PENDING_DELTAS.get() {
155
+
if let Ok(mut guard) = mutex.lock() {
156
+
for delta in guard.drain(..) {
157
+
engine_state.merge_delta(delta)?;
158
+
}
159
+
}
160
+
}
161
+
Ok(())
162
+
}
163
+
164
+
pub static CONSOLE_CALLBACK: OnceLock<Mutex<Option<CallbackWrapper>>> = OnceLock::new();
165
+
166
+
#[wasm_bindgen]
167
+
pub fn register_console_callback(f: js_sys::Function) {
168
+
let _ = CONSOLE_CALLBACK.get_or_init(|| Mutex::new(None));
169
+
if let Ok(mut guard) = CONSOLE_CALLBACK.get().unwrap().lock() {
170
+
*guard = Some(CallbackWrapper(f));
171
+
}
172
+
}
173
+
174
+
pub fn print_to_console(msg: &str, is_cmd: bool) {
175
+
if let Some(mutex) = CONSOLE_CALLBACK.get() {
176
+
if let Ok(guard) = mutex.lock() {
177
+
if let Some(cb) = guard.as_ref() {
178
+
let this = JsValue::NULL;
179
+
let arg = JsValue::from_str(msg);
180
+
let arg2 = JsValue::from_bool(is_cmd);
181
+
let _ = cb.0.call2(&this, &arg, &arg2);
182
+
}
183
+
}
184
+
}
185
+
}
186
+
187
+
pub fn current_time() -> Option<SystemTime> {
188
+
UNIX_EPOCH.checked_add(Duration::from_millis(js_sys::Date::now() as u64))
189
+
}
+72
src/highlight.rs
+72
src/highlight.rs
···
1
+
use super::*;
2
+
3
+
#[wasm_bindgen]
4
+
pub fn highlight(input: &str) -> String {
5
+
let engine_guard = ENGINE_STATE
6
+
.get()
7
+
.unwrap()
8
+
.lock()
9
+
.expect("engine state initialized");
10
+
let mut working_set = StateWorkingSet::new(&engine_guard);
11
+
12
+
// Capture the global offset before parsing, as parse will generate spans relative to this
13
+
let global_offset = working_set.next_span_start();
14
+
15
+
// Parse the input block using Nushell's full parser
16
+
let block = parse(&mut working_set, None, input.as_bytes(), false);
17
+
18
+
// Flatten the block to get shapes (semantic tokens)
19
+
let shapes = flatten_block(&working_set, &block);
20
+
21
+
let mut output = String::new();
22
+
let mut last_end = 0;
23
+
24
+
for (span, shape) in shapes {
25
+
// Adjust global span to local byte indices
26
+
let local_start = span.start.saturating_sub(global_offset);
27
+
let local_end = span.end.saturating_sub(global_offset);
28
+
29
+
if local_start >= input.len() {
30
+
continue;
31
+
}
32
+
let safe_end = std::cmp::min(local_end, input.len());
33
+
34
+
if local_start > last_end {
35
+
output.push_str(&input[last_end..local_start]);
36
+
}
37
+
38
+
let start_index = std::cmp::max(local_start, last_end);
39
+
if start_index >= safe_end {
40
+
continue;
41
+
}
42
+
43
+
// Colors corresponding to standard Nushell/Ansi map
44
+
let color = match shape {
45
+
FlatShape::Pipe | FlatShape::Redirection => "\x1b[35m", // Magenta
46
+
FlatShape::Bool | FlatShape::Int | FlatShape::Float => "\x1b[35;1m", // Light Magenta (Numbers/Bool)
47
+
FlatShape::External(_) | FlatShape::InternalCall(_) | FlatShape::Keyword => {
48
+
"\x1b[32;1m"
49
+
} // Green Bold
50
+
FlatShape::String | FlatShape::StringInterpolation | FlatShape::RawString => "\x1b[36m", // Cyan
51
+
FlatShape::Variable(_) | FlatShape::Flag => "\x1b[34m", // Blue
52
+
FlatShape::Garbage => "\x1b[31;1m\x1b[47m", // Red on White
53
+
FlatShape::Signature => "\x1b[33;1m", // Yellow Bold
54
+
// Closures, blocks, punctuation often fall here
55
+
FlatShape::Block => "\x1b[37m", // White
56
+
FlatShape::Closure => "\x1b[36;1m", // Light Cyan
57
+
_ => "\x1b[0m",
58
+
};
59
+
60
+
output.push_str(color);
61
+
output.push_str(&input[start_index..safe_end]);
62
+
output.push_str("\x1b[0m");
63
+
64
+
last_end = safe_end;
65
+
}
66
+
67
+
if last_end < input.len() {
68
+
output.push_str(&input[last_end..]);
69
+
}
70
+
71
+
output
72
+
}
+249
src/lib.rs
+249
src/lib.rs
···
1
+
use jacquard::chrono;
2
+
use miette::Report;
3
+
use nu_cmd_extra::add_extra_command_context;
4
+
use nu_cmd_lang::create_default_context;
5
+
use nu_engine::{command_prelude::*, eval_block};
6
+
use nu_parser::{FlatShape, TokenContents, flatten_block, lex, parse};
7
+
use nu_protocol::{
8
+
Config, PipelineData, Span,
9
+
engine::{Call, EngineState, Stack, StateWorkingSet},
10
+
};
11
+
use serde::Serialize;
12
+
use std::{
13
+
sync::{Arc, Mutex, OnceLock},
14
+
time::UNIX_EPOCH,
15
+
};
16
+
use vfs::VfsError;
17
+
use wasm_bindgen::prelude::*;
18
+
19
+
pub mod cmd;
20
+
pub mod completion;
21
+
pub mod default_context;
22
+
pub mod error;
23
+
pub mod globals;
24
+
pub mod highlight;
25
+
pub mod memory_fs;
26
+
27
+
use crate::{
28
+
cmd::{
29
+
Cd, Fetch, Job, JobKill, JobList, Ls, Mkdir, Open, Pwd, Random, Rm, Save, Source, Sys,
30
+
Version,
31
+
},
32
+
default_context::add_shell_command_context,
33
+
error::format_error,
34
+
globals::{apply_pending_deltas, current_time, get_pwd, print_to_console},
35
+
};
36
+
use error::CommandError;
37
+
use globals::get_vfs;
38
+
39
+
static ENGINE_STATE: OnceLock<Mutex<EngineState>> = OnceLock::new();
40
+
static STACK: OnceLock<Mutex<Stack>> = OnceLock::new();
41
+
42
+
fn init_engine_internal() -> Result<(), Report> {
43
+
let mut engine_state = create_default_context();
44
+
engine_state = add_shell_command_context(engine_state);
45
+
engine_state = add_extra_command_context(engine_state);
46
+
47
+
let write_file = |name: &str, contents: &str| {
48
+
get_vfs()
49
+
.join(name)
50
+
.and_then(|p| p.create_file())
51
+
.and_then(|mut f| f.write_all(contents.as_bytes()).map_err(VfsError::from))
52
+
.map_err(|e| miette::miette!(e.to_string()))
53
+
};
54
+
55
+
let access_log = format!(
56
+
r#"/dysnomia.v000 /user: 90008/ /ip: [REDACTED]/ /time: [REDACTED]//
57
+
/dysnomia.v002 /user: 90008/ /ip: [REDACTED]/ /time: [REDACTED]//
58
+
/dysnomia.v011 /user: 90008/ /ip: [REDACTED]/ /time: [REDACTED]//
59
+
[...ENTRIES TRUNCATED...]
60
+
/dysnomia.v099 /user: anonymous/ /ip: [REDACTED]/ /time: {time}//"#,
61
+
time = current_time()
62
+
.and_then(|t| t.duration_since(UNIX_EPOCH).ok())
63
+
.map_or_else(
64
+
|| "unknown".to_string(),
65
+
|time| chrono::DateTime::from_timestamp_nanos(time.as_nanos() as i64)
66
+
.format("%Y-%m-%dT%H:%M:%SZ")
67
+
.to_string()
68
+
)
69
+
);
70
+
write_file(".access.log", &access_log)?;
71
+
72
+
let welcome_txt = r#"welcome anonymous !
73
+
74
+
75
+
you are interfacing with dysnomia.v099
76
+
using the nu shell.
77
+
78
+
79
+
a few commands you can try:
80
+
81
+
"hello, user!" | save message.txt
82
+
fetch at://ptr.pet
83
+
ls --help"#;
84
+
write_file("welcome.txt", &welcome_txt)?;
85
+
86
+
let mut working_set = StateWorkingSet::new(&engine_state);
87
+
let decls: [Box<dyn Command>; 15] = [
88
+
Box::new(Ls),
89
+
Box::new(Open),
90
+
Box::new(Save),
91
+
Box::new(Mkdir),
92
+
Box::new(Pwd),
93
+
Box::new(Cd),
94
+
Box::new(Rm),
95
+
Box::new(Fetch),
96
+
Box::new(Source),
97
+
Box::new(Job),
98
+
Box::new(JobList),
99
+
Box::new(JobKill),
100
+
Box::new(Sys),
101
+
Box::new(Random),
102
+
Box::new(Version),
103
+
];
104
+
for decl in decls {
105
+
working_set.add_decl(decl);
106
+
}
107
+
engine_state.merge_delta(working_set.delta)?;
108
+
109
+
let mut config = Config::default();
110
+
config.use_ansi_coloring = true.into();
111
+
config.show_banner = nu_protocol::BannerKind::Full;
112
+
engine_state.config = Arc::new(config);
113
+
114
+
ENGINE_STATE
115
+
.set(Mutex::new(engine_state))
116
+
.map_err(|_| miette::miette!("ENGINE_STATE was already set!?"))?;
117
+
STACK
118
+
.set(Mutex::new(Stack::new()))
119
+
.map_err(|_| miette::miette!("STACK was already set!?"))?;
120
+
121
+
// web_sys::console::log_1(&"Hello, World!".into());
122
+
123
+
Ok(())
124
+
}
125
+
126
+
#[wasm_bindgen]
127
+
pub fn init_engine() -> String {
128
+
console_error_panic_hook::set_once();
129
+
init_engine_internal().map_or_else(|err| format!("error: {err}"), |_| String::new())
130
+
}
131
+
132
+
fn run_command_internal(
133
+
engine_state: &mut EngineState,
134
+
stack: &mut Stack,
135
+
input: &str,
136
+
) -> Result<(), CommandError> {
137
+
// apply any pending deltas from previous commands (like `source`)
138
+
apply_pending_deltas(engine_state).map_err(|e| CommandError {
139
+
error: Report::new(e),
140
+
start_offset: 0,
141
+
})?;
142
+
// set PWD
143
+
engine_state.add_env_var(
144
+
"PWD".to_string(),
145
+
get_pwd_string().into_value(Span::unknown()),
146
+
);
147
+
148
+
let mut working_set = StateWorkingSet::new(engine_state);
149
+
150
+
// Capture the start offset *before* adding the file, as this is the global offset
151
+
// where our file begins.
152
+
let start_offset = working_set.next_span_start();
153
+
let block = parse(&mut working_set, Some("entry"), input.as_bytes(), false);
154
+
155
+
let cmd_err = |err: ShellError| CommandError {
156
+
error: Report::new(err),
157
+
start_offset,
158
+
};
159
+
160
+
if let Some(err) = working_set.parse_errors.into_iter().next() {
161
+
return Err(CommandError {
162
+
error: Report::new(err),
163
+
start_offset,
164
+
});
165
+
}
166
+
if let Some(err) = working_set.compile_errors.into_iter().next() {
167
+
return Err(CommandError {
168
+
error: Report::new(err),
169
+
start_offset,
170
+
});
171
+
}
172
+
173
+
engine_state
174
+
.merge_delta(working_set.delta)
175
+
.map_err(cmd_err)?;
176
+
let result = eval_block::<nu_protocol::debugger::WithoutDebug>(
177
+
engine_state,
178
+
stack,
179
+
&block,
180
+
PipelineData::Empty,
181
+
);
182
+
183
+
let pipeline_data = result.map_err(cmd_err)?;
184
+
let table_command = nu_command::Table;
185
+
let call = Call::new(pipeline_data.span().unwrap_or_else(Span::unknown));
186
+
187
+
let res = table_command
188
+
.run(engine_state, stack, &call, pipeline_data.body)
189
+
.map_err(cmd_err)?;
190
+
191
+
match res {
192
+
PipelineData::Empty => {}
193
+
PipelineData::Value(v, _) => {
194
+
print_to_console(&v.to_expanded_string("\n", &engine_state.config), true)
195
+
}
196
+
PipelineData::ByteStream(s, _) => {
197
+
for line in s.lines().into_iter().flatten() {
198
+
let out = line.map_err(|e| CommandError {
199
+
error: Report::new(e),
200
+
start_offset,
201
+
})?;
202
+
print_to_console(&out, true);
203
+
}
204
+
}
205
+
PipelineData::ListStream(s, _) => {
206
+
for item in s.into_iter() {
207
+
let out = item.to_expanded_string("\n", &engine_state.config);
208
+
print_to_console(&out, true);
209
+
}
210
+
}
211
+
}
212
+
213
+
Ok(())
214
+
}
215
+
216
+
#[wasm_bindgen]
217
+
pub fn run_command(input: &str) -> Option<String> {
218
+
let (mut engine_guard, mut stack_guard) = (
219
+
ENGINE_STATE
220
+
.get()
221
+
.unwrap()
222
+
.lock()
223
+
.expect("engine state initialized"),
224
+
STACK.get().unwrap().lock().expect("stack initialized"),
225
+
);
226
+
227
+
let result = std::panic::catch_unwind(move || {
228
+
match run_command_internal(&mut engine_guard, &mut stack_guard, input) {
229
+
Ok(_) => None,
230
+
Err(cmd_err) => Some(format_error(
231
+
cmd_err.error,
232
+
input.to_owned(),
233
+
cmd_err.start_offset,
234
+
)),
235
+
}
236
+
});
237
+
result.unwrap_or_else(|err| Some(format!("panicked: {err:?}")))
238
+
}
239
+
240
+
#[wasm_bindgen]
241
+
pub fn get_pwd_string() -> String {
242
+
// web_sys::console::log_1(&"before pwd".into());
243
+
let pwd = get_pwd();
244
+
// web_sys::console::log_1(&"after pwd".into());
245
+
if pwd.is_root() {
246
+
return "/".to_string();
247
+
}
248
+
pwd.as_str().to_string()
249
+
}
+390
src/memory_fs.rs
+390
src/memory_fs.rs
···
1
+
//! An ephemeral in-memory file system, intended mainly for unit tests
2
+
3
+
use core::cmp;
4
+
use std::fmt;
5
+
use std::fmt::{Debug, Formatter};
6
+
use std::io::{Cursor, Read, Seek, SeekFrom, Write};
7
+
use std::mem::swap;
8
+
use std::sync::Arc;
9
+
use std::time::SystemTime;
10
+
use vfs::error::VfsErrorKind;
11
+
use vfs::{FileSystem, VfsFileType};
12
+
use vfs::{SeekAndRead, VfsMetadata};
13
+
use vfs::{SeekAndWrite, VfsResult};
14
+
15
+
use crate::globals::current_time;
16
+
17
+
type MemoryFsHandle = Arc<MemoryFsImpl>;
18
+
19
+
/// An ephemeral in-memory file system, intended mainly for unit tests
20
+
pub struct MemoryFS {
21
+
handle: MemoryFsHandle,
22
+
}
23
+
24
+
impl Debug for MemoryFS {
25
+
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
26
+
f.write_str("In Memory File System")
27
+
}
28
+
}
29
+
30
+
impl MemoryFS {
31
+
/// Create a new in-memory filesystem
32
+
pub fn new() -> Self {
33
+
MemoryFS {
34
+
handle: Arc::new(MemoryFsImpl::new()),
35
+
}
36
+
}
37
+
38
+
fn ensure_has_parent(&self, path: &str) -> VfsResult<()> {
39
+
let separator = path.rfind('/');
40
+
if let Some(index) = separator {
41
+
if self.exists(&path[..index])? {
42
+
return Ok(());
43
+
}
44
+
}
45
+
Err(VfsErrorKind::Other("Parent path does not exist".into()).into())
46
+
}
47
+
}
48
+
49
+
impl Default for MemoryFS {
50
+
fn default() -> Self {
51
+
Self::new()
52
+
}
53
+
}
54
+
55
+
struct WritableFile {
56
+
content: Cursor<Vec<u8>>,
57
+
destination: String,
58
+
fs: MemoryFsHandle,
59
+
}
60
+
61
+
impl Seek for WritableFile {
62
+
fn seek(&mut self, pos: SeekFrom) -> std::io::Result<u64> {
63
+
self.content.seek(pos)
64
+
}
65
+
}
66
+
67
+
impl Write for WritableFile {
68
+
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
69
+
self.content.write(buf)
70
+
}
71
+
72
+
fn flush(&mut self) -> std::io::Result<()> {
73
+
self.content.flush()?;
74
+
let mut content = self.content.get_ref().clone();
75
+
swap(&mut content, self.content.get_mut());
76
+
let content = Arc::new(content);
77
+
78
+
let new_file = self
79
+
.fs
80
+
.files
81
+
.peek_with(&self.destination, |_, previous_file| MemoryFile {
82
+
file_type: VfsFileType::File,
83
+
content: content.clone(),
84
+
created: previous_file.created,
85
+
modified: current_time(),
86
+
accessed: previous_file.accessed,
87
+
})
88
+
.unwrap_or_else(|| {
89
+
let time = current_time();
90
+
MemoryFile {
91
+
file_type: VfsFileType::File,
92
+
content,
93
+
created: time,
94
+
modified: time,
95
+
accessed: None,
96
+
}
97
+
});
98
+
99
+
// Remove old entry if it exists, then insert new one
100
+
self.fs.files.remove_sync(&self.destination);
101
+
let _ = self
102
+
.fs
103
+
.files
104
+
.insert_sync(self.destination.clone(), new_file);
105
+
Ok(())
106
+
}
107
+
}
108
+
109
+
impl Drop for WritableFile {
110
+
fn drop(&mut self) {
111
+
self.flush()
112
+
.expect("Flush failed while dropping in-memory file");
113
+
}
114
+
}
115
+
116
+
struct ReadableFile {
117
+
#[allow(clippy::rc_buffer)] // to allow accessing the same object as writable
118
+
content: Arc<Vec<u8>>,
119
+
position: u64,
120
+
}
121
+
122
+
impl ReadableFile {
123
+
fn len(&self) -> u64 {
124
+
self.content.len() as u64 - self.position
125
+
}
126
+
}
127
+
128
+
impl Read for ReadableFile {
129
+
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
130
+
let amt = cmp::min(buf.len(), self.len() as usize);
131
+
132
+
if amt == 1 {
133
+
buf[0] = self.content[self.position as usize];
134
+
} else {
135
+
buf[..amt].copy_from_slice(
136
+
&self.content.as_slice()[self.position as usize..self.position as usize + amt],
137
+
);
138
+
}
139
+
self.position += amt as u64;
140
+
Ok(amt)
141
+
}
142
+
}
143
+
144
+
impl Seek for ReadableFile {
145
+
fn seek(&mut self, pos: SeekFrom) -> std::io::Result<u64> {
146
+
match pos {
147
+
SeekFrom::Start(offset) => self.position = offset,
148
+
SeekFrom::Current(offset) => self.position = (self.position as i64 + offset) as u64,
149
+
SeekFrom::End(offset) => self.position = (self.content.len() as i64 + offset) as u64,
150
+
}
151
+
Ok(self.position)
152
+
}
153
+
}
154
+
155
+
impl FileSystem for MemoryFS {
156
+
fn read_dir(&self, path: &str) -> VfsResult<Box<dyn Iterator<Item = String> + Send>> {
157
+
let prefix = format!("{}/", path);
158
+
159
+
// Ensure the directory exists
160
+
if !self.handle.files.contains(path) {
161
+
return Err(VfsErrorKind::FileNotFound.into());
162
+
}
163
+
164
+
let guard = scc::Guard::new();
165
+
let mut entries = Vec::new();
166
+
167
+
let range_start = prefix.clone();
168
+
for (candidate_path, _) in self.handle.files.range(range_start.., &guard) {
169
+
if candidate_path.starts_with(&prefix) {
170
+
let rest = &candidate_path[prefix.len()..];
171
+
if !rest.contains('/') {
172
+
entries.push(rest.to_string());
173
+
}
174
+
} else {
175
+
// we are in a different directory if the prefix doesnt match
176
+
break;
177
+
}
178
+
}
179
+
180
+
Ok(Box::new(entries.into_iter()))
181
+
}
182
+
183
+
fn create_dir(&self, path: &str) -> VfsResult<()> {
184
+
self.ensure_has_parent(path)?;
185
+
186
+
// Check if path already exists and return appropriate error
187
+
if let Some(result) = self
188
+
.handle
189
+
.files
190
+
.peek_with(path, |_, file| match file.file_type {
191
+
VfsFileType::File => Err(VfsErrorKind::FileExists.into()),
192
+
VfsFileType::Directory => Err(VfsErrorKind::DirectoryExists.into()),
193
+
})
194
+
{
195
+
return result;
196
+
}
197
+
198
+
let new_dir = MemoryFile {
199
+
file_type: VfsFileType::Directory,
200
+
content: Default::default(),
201
+
created: current_time(),
202
+
modified: current_time(),
203
+
accessed: current_time(),
204
+
};
205
+
206
+
self.handle
207
+
.files
208
+
.insert_sync(path.to_string(), new_dir)
209
+
.map_err(|_| VfsErrorKind::DirectoryExists.into())
210
+
}
211
+
212
+
fn open_file(&self, path: &str) -> VfsResult<Box<dyn SeekAndRead + Send>> {
213
+
if let Some(time) = current_time() {
214
+
let _ = self.set_access_time(path, time);
215
+
}
216
+
217
+
let content = self
218
+
.handle
219
+
.files
220
+
.peek_with(path, |_, file| {
221
+
ensure_file(file)?;
222
+
VfsResult::Ok(file.content.clone())
223
+
})
224
+
.ok_or(VfsErrorKind::FileNotFound)??;
225
+
226
+
Ok(Box::new(ReadableFile {
227
+
content,
228
+
position: 0,
229
+
}))
230
+
}
231
+
232
+
fn create_file(&self, path: &str) -> VfsResult<Box<dyn SeekAndWrite + Send>> {
233
+
self.ensure_has_parent(path)?;
234
+
let content = Arc::new(Vec::<u8>::new());
235
+
let new_file = MemoryFile {
236
+
file_type: VfsFileType::File,
237
+
content,
238
+
created: current_time(),
239
+
modified: current_time(),
240
+
accessed: current_time(),
241
+
};
242
+
243
+
// Remove old entry if it exists, then insert new one
244
+
self.handle.files.remove_sync(path);
245
+
let _ = self.handle.files.insert_sync(path.to_string(), new_file);
246
+
247
+
let writer = WritableFile {
248
+
content: Cursor::new(vec![]),
249
+
destination: path.to_string(),
250
+
fs: self.handle.clone(),
251
+
};
252
+
Ok(Box::new(writer))
253
+
}
254
+
255
+
fn append_file(&self, path: &str) -> VfsResult<Box<dyn SeekAndWrite + Send>> {
256
+
let content = self
257
+
.handle
258
+
.files
259
+
.peek_with(path, |_, file| file.content.clone())
260
+
.ok_or(VfsErrorKind::FileNotFound)?;
261
+
let mut content = Cursor::new(content.as_slice().to_vec());
262
+
content.seek(SeekFrom::End(0))?;
263
+
let writer = WritableFile {
264
+
content,
265
+
destination: path.to_string(),
266
+
fs: self.handle.clone(),
267
+
};
268
+
Ok(Box::new(writer))
269
+
}
270
+
271
+
fn metadata(&self, path: &str) -> VfsResult<VfsMetadata> {
272
+
self.handle
273
+
.files
274
+
.peek_with(path, |_, file| VfsMetadata {
275
+
file_type: file.file_type,
276
+
len: file.content.len() as u64,
277
+
modified: file.modified,
278
+
created: file.created,
279
+
accessed: file.accessed,
280
+
})
281
+
.ok_or(VfsErrorKind::FileNotFound.into())
282
+
}
283
+
284
+
fn set_creation_time(&self, path: &str, time: SystemTime) -> VfsResult<()> {
285
+
let updated = self
286
+
.handle
287
+
.files
288
+
.peek_with(path, |_, file| MemoryFile {
289
+
created: Some(time),
290
+
..file.clone()
291
+
})
292
+
.ok_or(VfsErrorKind::FileNotFound)?;
293
+
294
+
self.handle.files.remove_sync(path);
295
+
let _ = self.handle.files.insert_sync(path.to_string(), updated);
296
+
Ok(())
297
+
}
298
+
299
+
fn set_modification_time(&self, path: &str, time: SystemTime) -> VfsResult<()> {
300
+
let updated = self
301
+
.handle
302
+
.files
303
+
.peek_with(path, |_, file| MemoryFile {
304
+
modified: Some(time),
305
+
..file.clone()
306
+
})
307
+
.ok_or(VfsErrorKind::FileNotFound)?;
308
+
309
+
self.handle.files.remove_sync(path);
310
+
let _ = self.handle.files.insert_sync(path.to_string(), updated);
311
+
Ok(())
312
+
}
313
+
314
+
fn set_access_time(&self, path: &str, time: SystemTime) -> VfsResult<()> {
315
+
let updated = self
316
+
.handle
317
+
.files
318
+
.peek_with(path, |_, file| MemoryFile {
319
+
accessed: Some(time),
320
+
..file.clone()
321
+
})
322
+
.ok_or(VfsErrorKind::FileNotFound)?;
323
+
324
+
self.handle.files.remove_sync(path);
325
+
let _ = self.handle.files.insert_sync(path.to_string(), updated);
326
+
Ok(())
327
+
}
328
+
329
+
fn exists(&self, path: &str) -> VfsResult<bool> {
330
+
Ok(self.handle.files.contains(path))
331
+
}
332
+
333
+
fn remove_file(&self, path: &str) -> VfsResult<()> {
334
+
self.handle
335
+
.files
336
+
.remove_sync(path)
337
+
.then_some(Ok(()))
338
+
.unwrap_or_else(|| Err(VfsErrorKind::FileNotFound.into()))
339
+
}
340
+
341
+
fn remove_dir(&self, path: &str) -> VfsResult<()> {
342
+
if self.read_dir(path)?.next().is_some() {
343
+
return Err(VfsErrorKind::Other("Directory to remove is not empty".into()).into());
344
+
}
345
+
self.handle
346
+
.files
347
+
.remove_sync(path)
348
+
.then_some(Ok(()))
349
+
.unwrap_or_else(|| Err(VfsErrorKind::FileNotFound.into()))
350
+
}
351
+
}
352
+
353
+
struct MemoryFsImpl {
354
+
files: scc::TreeIndex<String, MemoryFile>,
355
+
}
356
+
357
+
impl MemoryFsImpl {
358
+
pub fn new() -> Self {
359
+
let files = scc::TreeIndex::new();
360
+
// Add root directory
361
+
let _ = files.insert_sync(
362
+
"".to_string(),
363
+
MemoryFile {
364
+
file_type: VfsFileType::Directory,
365
+
content: Arc::new(vec![]),
366
+
created: current_time(),
367
+
modified: None,
368
+
accessed: None,
369
+
},
370
+
);
371
+
Self { files }
372
+
}
373
+
}
374
+
375
+
#[derive(Clone)]
376
+
struct MemoryFile {
377
+
file_type: VfsFileType,
378
+
content: Arc<Vec<u8>>,
379
+
380
+
created: Option<SystemTime>,
381
+
modified: Option<SystemTime>,
382
+
accessed: Option<SystemTime>,
383
+
}
384
+
385
+
fn ensure_file(file: &MemoryFile) -> VfsResult<()> {
386
+
if file.file_type != VfsFileType::File {
387
+
return Err(VfsErrorKind::Other("Not a file".into()).into());
388
+
}
389
+
Ok(())
390
+
}
+24
www/.gitignore
+24
www/.gitignore
···
1
+
# Logs
2
+
logs
3
+
*.log
4
+
npm-debug.log*
5
+
yarn-debug.log*
6
+
yarn-error.log*
7
+
pnpm-debug.log*
8
+
lerna-debug.log*
9
+
10
+
node_modules
11
+
dist
12
+
dist-ssr
13
+
*.local
14
+
15
+
# Editor directories and files
16
+
.vscode/*
17
+
!.vscode/extensions.json
18
+
.idea
19
+
.DS_Store
20
+
*.suo
21
+
*.ntvs*
22
+
*.njsproj
23
+
*.sln
24
+
*.sw?
+13
www/index.html
+13
www/index.html
···
1
+
<!doctype html>
2
+
<html lang="en">
3
+
<head>
4
+
<meta charset="UTF-8" />
5
+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+
<title>dysnomia</title>
8
+
</head>
9
+
<body>
10
+
<div id="app"></div>
11
+
<script type="module" src="/src/main.ts"></script>
12
+
</body>
13
+
</html>
+25
www/package.json
+25
www/package.json
···
1
+
{
2
+
"name": "dysnomia",
3
+
"private": true,
4
+
"version": "0.0.0",
5
+
"type": "module",
6
+
"scripts": {
7
+
"dev": "vite",
8
+
"build": "tsc && vite build",
9
+
"preview": "vite preview"
10
+
},
11
+
"devDependencies": {
12
+
"typescript": "~5.9.3",
13
+
"vite": "npm:rolldown-vite@7.2.5",
14
+
"vite-plugin-top-level-await": "^1.6.0",
15
+
"vite-plugin-wasm": "^3.5.0"
16
+
},
17
+
"dependencies": {
18
+
"@std/toml": "npm:@jsr/std__toml",
19
+
"@xterm/addon-canvas": "^0.7.0",
20
+
"@xterm/addon-fit": "^0.10.0",
21
+
"@xterm/addon-web-links": "^0.11.0",
22
+
"@xterm/addon-webgl": "^0.18.0",
23
+
"@xterm/xterm": "^5.5.0"
24
+
}
25
+
}
+1
www/public/vite.svg
+1
www/public/vite.svg
···
1
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
+659
www/src/main.ts
+659
www/src/main.ts
···
1
+
import { Terminal } from "@xterm/xterm";
2
+
import { FitAddon } from "@xterm/addon-fit";
3
+
import { WebLinksAddon } from "@xterm/addon-web-links";
4
+
import { CanvasAddon } from "@xterm/addon-canvas";
5
+
import { WebglAddon } from "@xterm/addon-webgl";
6
+
7
+
// Import the worker using Vite's explicit worker suffix
8
+
// This fixes the "disallowed MIME type" error by ensuring Vite bundles it correctly
9
+
import DysnomiaWorker from "./worker?worker";
10
+
11
+
import "./style.css";
12
+
import "@xterm/xterm/css/xterm.css";
13
+
14
+
type Candidate = {
15
+
name: string;
16
+
description: string;
17
+
is_command: boolean;
18
+
rendered: string;
19
+
span_start: number;
20
+
span_end: number;
21
+
};
22
+
23
+
type SearchState = "history" | "completion" | "none";
24
+
25
+
async function bootstrap() {
26
+
// Instantiate the worker using the imported class
27
+
const worker = new DysnomiaWorker();
28
+
29
+
// Communication Helpers
30
+
let msgId = 0;
31
+
const pending = new Map<
32
+
number,
33
+
{ resolve: (value: any) => void; reject: (reason: any) => void }
34
+
>();
35
+
36
+
// State to track if WASM is fully loaded
37
+
let isWorkerReady = false;
38
+
39
+
const callWorker = (type: string, payload?: any): Promise<any> => {
40
+
return new Promise((resolve, reject) => {
41
+
const id = ++msgId;
42
+
pending.set(id, { resolve, reject });
43
+
worker.postMessage({ id, type, payload });
44
+
});
45
+
};
46
+
47
+
const term = new Terminal({
48
+
cursorBlink: true,
49
+
cursorStyle: "bar",
50
+
cursorInactiveStyle: "block",
51
+
fontFamily: '"Comic Mono", monospace',
52
+
fontSize: 15,
53
+
scrollback: 100000,
54
+
theme: {
55
+
background: "#000000",
56
+
foreground: "#ffffff",
57
+
},
58
+
});
59
+
60
+
const fitAddon = new FitAddon();
61
+
term.loadAddon(fitAddon);
62
+
term.loadAddon(new WebLinksAddon());
63
+
64
+
document.querySelector<HTMLDivElement>("#app")!.innerHTML =
65
+
`<div id="terminal"></div>`;
66
+
term.open(document.getElementById("terminal")!);
67
+
try {
68
+
term.loadAddon(new WebglAddon());
69
+
} catch (err) {
70
+
console.error("WebGL addon failed to load:", err);
71
+
console.warn("falling back to canvas!");
72
+
term.loadAddon(new CanvasAddon());
73
+
}
74
+
fitAddon.fit();
75
+
76
+
let activeTasks = 0;
77
+
let currentLine = "";
78
+
let completionBaseLine = "";
79
+
let cursorPos = 0;
80
+
let isRunningCommand = false;
81
+
82
+
let searchState: SearchState = "none";
83
+
let completionCandidates: Candidate[] = [];
84
+
let completionIndex = -1;
85
+
const history: string[] = [];
86
+
let historyIndex = 0;
87
+
88
+
// Cache PWD to avoid flickering/excessive async calls
89
+
let cachedPwd = "/";
90
+
91
+
let readyPromiseResolve: () => void;
92
+
const readyPromise = new Promise<void>((resolve) => {
93
+
readyPromiseResolve = resolve;
94
+
});
95
+
96
+
worker.onmessage = (e) => {
97
+
const { id, type, payload } = e.data;
98
+
99
+
// console.log("Received message:", id, type, payload);
100
+
101
+
if (type === "initialized") {
102
+
isWorkerReady = true;
103
+
readyPromiseResolve();
104
+
}
105
+
106
+
if (type === "console") {
107
+
const safeMsg = payload.msg.replace(/\n/g, "\r\n");
108
+
109
+
if (!payload.isCmd) {
110
+
// If we are sitting at a prompt, clear it to show the message
111
+
term.write("\r\x1b[2K"); // Clear line
112
+
term.write(safeMsg + "\r\n");
113
+
refreshPrompt();
114
+
} else {
115
+
term.write(safeMsg + "\r\n");
116
+
}
117
+
return;
118
+
}
119
+
120
+
if (type === "task_count") {
121
+
activeTasks = payload;
122
+
if (!isRunningCommand) {
123
+
refreshPrompt();
124
+
}
125
+
return;
126
+
}
127
+
128
+
if (pending.has(id)) {
129
+
const resolver = pending.get(id)!;
130
+
pending.delete(id);
131
+
if (type === "error") {
132
+
resolver.reject(payload);
133
+
} else {
134
+
resolver.resolve(payload);
135
+
}
136
+
}
137
+
};
138
+
139
+
const getPrompt = () => {
140
+
const indicator =
141
+
activeTasks > 0 ? `\x1b[33m(${activeTasks} bg)\x1b[0m ` : "";
142
+
143
+
let modeIndicator = "";
144
+
if (searchState === "history") {
145
+
modeIndicator = "\x1b[7m\x1b[34m(h-search)\x1b[0m ";
146
+
} else if (searchState === "completion") {
147
+
modeIndicator = "\x1b[7m\x1b[35m(c-search)\x1b[0m ";
148
+
}
149
+
150
+
const pathColor = isWorkerReady ? "\x1b[33m" : "\x1b[30;1m"; // Yellow (ready) vs Dark Gray (loading)
151
+
return `${indicator}${pathColor}${cachedPwd}\x1b[32m/\x1b[0m ${modeIndicator}`;
152
+
};
153
+
154
+
// Async Refresh Prompt
155
+
const refreshPrompt = async () => {
156
+
// If we are running a command (blocking), don't redraw prompt
157
+
if (isRunningCommand) return;
158
+
159
+
let output = "";
160
+
output += "\r";
161
+
output += "\x1b[2K"; // Clear current line
162
+
output += "\x1b[J"; // Clear everything below
163
+
164
+
output += getPrompt();
165
+
166
+
try {
167
+
if (currentLine.length > 0 && isWorkerReady) {
168
+
const highlighted = await callWorker("highlight", currentLine);
169
+
output += highlighted;
170
+
} else {
171
+
output += currentLine;
172
+
}
173
+
} catch (e) {
174
+
output += currentLine;
175
+
}
176
+
177
+
if (completionCandidates.length > 0) {
178
+
output += "\x1b7"; // Save cursor position
179
+
output += "\r\n";
180
+
181
+
const MAX_VISIBLE = 10;
182
+
const total = completionCandidates.length;
183
+
let start = 0;
184
+
let end = total;
185
+
186
+
if (total > MAX_VISIBLE) {
187
+
const half = Math.floor(MAX_VISIBLE / 2);
188
+
if (completionIndex < half) {
189
+
start = 0;
190
+
end = MAX_VISIBLE;
191
+
} else if (completionIndex >= total - half) {
192
+
start = total - MAX_VISIBLE;
193
+
end = total;
194
+
} else {
195
+
start = completionIndex - half;
196
+
end = start + MAX_VISIBLE;
197
+
}
198
+
}
199
+
200
+
if (start > 0) {
201
+
output += `\x1b[2m... ${start} more\x1b[0m\x1b[K\r\n`;
202
+
}
203
+
204
+
for (let i = start; i < end; i++) {
205
+
const cand = completionCandidates[i];
206
+
const isSelected = i === completionIndex;
207
+
let rendered = cand.rendered;
208
+
209
+
if (isSelected) {
210
+
rendered = rendered.replace(/\x1b\[0m/g, "\x1b[0m\x1b[7m");
211
+
output += `\x1b[7m${rendered}\x1b[K\x1b[0m\r\n`;
212
+
} else {
213
+
output += `${rendered}\x1b[K\r\n`;
214
+
}
215
+
}
216
+
217
+
if (end < total) {
218
+
output += `\x1b[2m... ${total - end} more\x1b[0m\x1b[K\r\n`;
219
+
}
220
+
221
+
output += "\x1b8"; // Restore cursor position
222
+
}
223
+
224
+
// Move cursor back to correct position
225
+
const distance = currentLine.length - cursorPos;
226
+
if (distance > 0) {
227
+
output += `\x1b[${distance}D`;
228
+
}
229
+
230
+
// We write the whole block at once to minimize flicker
231
+
term.write(output);
232
+
};
233
+
234
+
const getLineWithCompletion = (baseLine: string, candidate: Candidate) => {
235
+
const before = baseLine.slice(0, candidate.span_start);
236
+
const after = baseLine.slice(candidate.span_end);
237
+
return before + candidate.name + after;
238
+
};
239
+
240
+
const applyCompletion = (candidate: Candidate) => {
241
+
currentLine = getLineWithCompletion(currentLine, candidate);
242
+
const before = currentLine.slice(0, candidate.span_start);
243
+
cursorPos = (before + candidate.name).length;
244
+
};
245
+
246
+
const updateCompletionCandidates = async () => {
247
+
// Don't try to get completion if worker isn't loaded
248
+
if (!isWorkerReady) return;
249
+
250
+
try {
251
+
const json = await callWorker("completion", {
252
+
line: currentLine,
253
+
cursor: cursorPos,
254
+
});
255
+
const candidates: Candidate[] = JSON.parse(json);
256
+
completionCandidates = candidates;
257
+
completionBaseLine = currentLine;
258
+
259
+
if (completionCandidates.length > 0) {
260
+
if (completionIndex >= completionCandidates.length) {
261
+
completionIndex = 0;
262
+
}
263
+
if (completionIndex < 0) {
264
+
completionIndex = 0;
265
+
}
266
+
} else {
267
+
completionIndex = -1;
268
+
}
269
+
} catch (err) {
270
+
completionCandidates = [];
271
+
completionIndex = -1;
272
+
}
273
+
};
274
+
275
+
const updateHistoryCandidates = () => {
276
+
const query = currentLine.toLowerCase();
277
+
const matches = history.filter((cmd) => {
278
+
let i = 0,
279
+
j = 0;
280
+
const cmdLower = cmd.toLowerCase();
281
+
while (i < query.length && j < cmdLower.length) {
282
+
if (query[i] === cmdLower[j]) i++;
283
+
j++;
284
+
}
285
+
return i === query.length;
286
+
});
287
+
288
+
matches.reverse();
289
+
290
+
completionCandidates = matches.map((cmd) => ({
291
+
name: cmd,
292
+
description: "",
293
+
is_command: true,
294
+
rendered: cmd,
295
+
span_start: 0,
296
+
span_end: currentLine.length,
297
+
}));
298
+
299
+
completionBaseLine = currentLine;
300
+
301
+
if (completionCandidates.length > 0) {
302
+
completionIndex = 0;
303
+
} else {
304
+
completionIndex = -1;
305
+
}
306
+
};
307
+
308
+
// 1. Setup Input Handler immediately so terminal isn't blocked
309
+
term.onData(async (e) => {
310
+
// SEARCH MODE INPUT
311
+
if (searchState !== "none" && e >= " " && e <= "~") {
312
+
if (cursorPos === currentLine.length) {
313
+
currentLine += e;
314
+
cursorPos++;
315
+
} else {
316
+
currentLine =
317
+
currentLine.slice(0, cursorPos) + e + currentLine.slice(cursorPos);
318
+
cursorPos++;
319
+
}
320
+
term.write(e);
321
+
322
+
if (searchState === "history") updateHistoryCandidates();
323
+
if (searchState === "completion") await updateCompletionCandidates();
324
+
325
+
await refreshPrompt();
326
+
return;
327
+
}
328
+
329
+
// SEARCH MODE BACKSPACE
330
+
if (searchState !== "none" && e === "\u007F") {
331
+
if (cursorPos > 0) {
332
+
currentLine =
333
+
currentLine.slice(0, cursorPos - 1) + currentLine.slice(cursorPos);
334
+
cursorPos--;
335
+
336
+
if (searchState === "history") updateHistoryCandidates();
337
+
if (searchState === "completion") await updateCompletionCandidates();
338
+
339
+
await refreshPrompt();
340
+
}
341
+
return;
342
+
}
343
+
344
+
// EXIT SEARCH MODE (on non-nav keys)
345
+
const isTab = e === "\t" || e === "\x1b[Z";
346
+
const isArrow = e === "\x1b[A" || e === "\x1b[B";
347
+
348
+
if (
349
+
!isTab &&
350
+
!isArrow &&
351
+
(completionCandidates.length > 0 || searchState !== "none")
352
+
) {
353
+
if (e !== "\r") {
354
+
completionCandidates = [];
355
+
completionIndex = -1;
356
+
searchState = "none";
357
+
await refreshPrompt();
358
+
}
359
+
}
360
+
361
+
switch (e) {
362
+
case "\r": {
363
+
// ENTER
364
+
365
+
// 1. Accept Completion/Search Selection
366
+
if (completionCandidates.length > 0) {
367
+
const cand = completionCandidates[completionIndex];
368
+
if (cand) {
369
+
currentLine = getLineWithCompletion(completionBaseLine, cand);
370
+
cursorPos = currentLine.length;
371
+
}
372
+
}
373
+
374
+
const wasInMode =
375
+
searchState != "none" || completionCandidates.length > 0;
376
+
377
+
completionCandidates = [];
378
+
searchState = "none";
379
+
380
+
if (wasInMode) {
381
+
await refreshPrompt();
382
+
break;
383
+
}
384
+
385
+
// 2. Execute Command
386
+
await refreshPrompt(); // Ensure clean line
387
+
term.write("\r\n");
388
+
const trimmed = currentLine.trim();
389
+
390
+
if (trimmed.length > 0) {
391
+
currentLine = "";
392
+
isRunningCommand = true;
393
+
try {
394
+
// Check readiness before executing
395
+
if (!isWorkerReady) {
396
+
term.write(
397
+
"\x1b[33mengine is still loading, please wait (_ _ )zZ...\x1b[0m\r\n",
398
+
);
399
+
} else {
400
+
// ASYNC execution
401
+
const output: string | undefined = await callWorker(
402
+
"run",
403
+
trimmed,
404
+
);
405
+
if (output) {
406
+
term.write(output.replace(/\n/g, "\r\n"));
407
+
if (output && !output.endsWith("\n")) {
408
+
term.write("\r\n");
409
+
}
410
+
}
411
+
412
+
// Update cached PWD after command execution (cd, etc)
413
+
cachedPwd = await callWorker("get_pwd");
414
+
415
+
// Update History
416
+
const idx = history.indexOf(trimmed);
417
+
if (idx >= 0) history.splice(idx, 1);
418
+
history.push(trimmed);
419
+
historyIndex = history.length;
420
+
}
421
+
} catch (err) {
422
+
term.write(`\x1b[31mfatal: ${err}\x1b[0m\r\n`);
423
+
} finally {
424
+
isRunningCommand = false;
425
+
}
426
+
}
427
+
428
+
term.write(getPrompt());
429
+
cursorPos = 0;
430
+
break;
431
+
}
432
+
433
+
case "\u007F": // Backspace
434
+
if (cursorPos > 0) {
435
+
currentLine =
436
+
currentLine.slice(0, cursorPos - 1) + currentLine.slice(cursorPos);
437
+
cursorPos--;
438
+
await refreshPrompt();
439
+
}
440
+
break;
441
+
442
+
case "\x1b[3~": // Delete
443
+
if (cursorPos < currentLine.length) {
444
+
currentLine =
445
+
currentLine.slice(0, cursorPos) + currentLine.slice(cursorPos + 1);
446
+
await refreshPrompt();
447
+
}
448
+
break;
449
+
450
+
case "\u0003": // Ctrl+C
451
+
currentLine = "";
452
+
cursorPos = 0;
453
+
completionCandidates = [];
454
+
searchState = "none";
455
+
term.write("^C\r\n" + getPrompt());
456
+
break;
457
+
458
+
case "\u000C": // Ctrl+L
459
+
term.clear();
460
+
break;
461
+
462
+
case "\u0012": // Ctrl+R
463
+
searchState = "history";
464
+
updateHistoryCandidates();
465
+
await refreshPrompt();
466
+
break;
467
+
468
+
// NAVIGATION
469
+
470
+
case "\x1b[D": // Left Arrow
471
+
if (cursorPos > 0) {
472
+
cursorPos--;
473
+
term.write(e); // Local echo is fine for navigation
474
+
}
475
+
break;
476
+
477
+
case "\x1b[C": // Right Arrow
478
+
if (cursorPos < currentLine.length) {
479
+
cursorPos++;
480
+
term.write(e);
481
+
}
482
+
break;
483
+
484
+
case "\x1b[1;5D": // Ctrl+Left
485
+
case "\x1b\x1b[D": // Alt+Left
486
+
{
487
+
let p = cursorPos;
488
+
while (p > 0 && currentLine[p - 1] === " ") p--;
489
+
while (p > 0 && currentLine[p - 1] !== " ") p--;
490
+
cursorPos = p;
491
+
await refreshPrompt();
492
+
}
493
+
break;
494
+
495
+
case "\x1b[1;5C": // Ctrl+Right
496
+
case "\x1b\x1b[C": // Alt+Right
497
+
{
498
+
let p = cursorPos;
499
+
while (p < currentLine.length && currentLine[p] !== " ") p++;
500
+
while (p < currentLine.length && currentLine[p] === " ") p++;
501
+
cursorPos = p;
502
+
await refreshPrompt();
503
+
}
504
+
break;
505
+
506
+
case "\x1b[A": // Up Arrow
507
+
case "\x1b[1;5A": // Ctrl+Up
508
+
// Cycle Completion
509
+
if (completionCandidates.length > 0 && e === "\x1b[A") {
510
+
completionIndex =
511
+
(completionIndex - 1 + completionCandidates.length) %
512
+
completionCandidates.length;
513
+
const candidate = completionCandidates[completionIndex];
514
+
currentLine = getLineWithCompletion(completionBaseLine, candidate);
515
+
cursorPos = currentLine.length;
516
+
await refreshPrompt();
517
+
break;
518
+
}
519
+
520
+
// History
521
+
if (e === "\x1b[A" || currentLine.length === 0) {
522
+
if (historyIndex > 0) {
523
+
historyIndex--;
524
+
currentLine = history[historyIndex];
525
+
cursorPos = currentLine.length;
526
+
await refreshPrompt();
527
+
}
528
+
} else {
529
+
cursorPos = 0;
530
+
await refreshPrompt();
531
+
}
532
+
break;
533
+
534
+
case "\x1b[H": // Home
535
+
cursorPos = 0;
536
+
await refreshPrompt();
537
+
break;
538
+
539
+
case "\x1b[B": // Down Arrow
540
+
case "\x1b[1;5B": // Ctrl+Down
541
+
// Cycle Completion
542
+
if (completionCandidates.length > 0 && e === "\x1b[B") {
543
+
completionIndex = (completionIndex + 1) % completionCandidates.length;
544
+
const candidate = completionCandidates[completionIndex];
545
+
currentLine = getLineWithCompletion(completionBaseLine, candidate);
546
+
cursorPos = currentLine.length;
547
+
await refreshPrompt();
548
+
break;
549
+
}
550
+
551
+
// History
552
+
if (e === "\x1b[B" || currentLine.length === 0) {
553
+
if (historyIndex < history.length) {
554
+
historyIndex++;
555
+
if (historyIndex === history.length) {
556
+
currentLine = "";
557
+
} else {
558
+
currentLine = history[historyIndex];
559
+
}
560
+
cursorPos = currentLine.length;
561
+
await refreshPrompt();
562
+
}
563
+
} else {
564
+
cursorPos = currentLine.length;
565
+
await refreshPrompt();
566
+
}
567
+
break;
568
+
569
+
case "\x1b[F": // End
570
+
cursorPos = currentLine.length;
571
+
await refreshPrompt();
572
+
break;
573
+
574
+
case "\t": // Tab
575
+
try {
576
+
if (completionCandidates.length > 0) {
577
+
completionIndex =
578
+
(completionIndex + 1) % completionCandidates.length;
579
+
580
+
const candidate = completionCandidates[completionIndex];
581
+
currentLine = getLineWithCompletion(completionBaseLine, candidate);
582
+
await refreshPrompt();
583
+
} else {
584
+
// Guard: ensure worker is ready
585
+
if (!isWorkerReady) return;
586
+
587
+
const json = await callWorker("completion", {
588
+
line: currentLine,
589
+
cursor: cursorPos,
590
+
});
591
+
const candidates: Candidate[] = JSON.parse(json);
592
+
593
+
if (candidates.length === 1) {
594
+
const candidate = candidates[0];
595
+
applyCompletion(candidate);
596
+
await refreshPrompt();
597
+
} else if (candidates.length > 1) {
598
+
completionCandidates = candidates;
599
+
completionIndex = 0;
600
+
searchState = "completion";
601
+
completionBaseLine = currentLine;
602
+
await refreshPrompt();
603
+
}
604
+
}
605
+
} catch (err) {
606
+
// ignore
607
+
}
608
+
break;
609
+
610
+
case "\x1b[Z": // Shift+Tab
611
+
if (completionCandidates.length > 0) {
612
+
completionIndex =
613
+
(completionIndex - 1 + completionCandidates.length) %
614
+
completionCandidates.length;
615
+
const candidate = completionCandidates[completionIndex];
616
+
currentLine = getLineWithCompletion(completionBaseLine, candidate);
617
+
cursorPos = currentLine.length;
618
+
await refreshPrompt();
619
+
}
620
+
break;
621
+
622
+
default:
623
+
// Typing
624
+
if (e >= " " && e <= "~") {
625
+
if (cursorPos === currentLine.length) {
626
+
currentLine += e;
627
+
cursorPos++;
628
+
} else {
629
+
currentLine =
630
+
currentLine.slice(0, cursorPos) +
631
+
e +
632
+
currentLine.slice(cursorPos);
633
+
cursorPos++;
634
+
}
635
+
await refreshPrompt();
636
+
}
637
+
}
638
+
});
639
+
640
+
window.addEventListener("resize", () => fitAddon.fit());
641
+
642
+
await readyPromise;
643
+
644
+
await callWorker("run", "open welcome.txt");
645
+
646
+
term.write(getPrompt());
647
+
648
+
callWorker("get_pwd")
649
+
.then((pwd) => {
650
+
cachedPwd = pwd;
651
+
// Re-render prompt to show "ready" state (yellow path) and enable highlighting
652
+
refreshPrompt();
653
+
})
654
+
.catch((e) => {
655
+
term.write(`\r\n\x1b[31mfatal: failed to load engine: ${e}\x1b[0m\r\n`);
656
+
});
657
+
}
658
+
659
+
bootstrap().catch(console.error);
+13
www/src/style.css
+13
www/src/style.css
+54
www/src/worker.ts
+54
www/src/worker.ts
···
1
+
import init, {
2
+
init_engine,
3
+
run_command,
4
+
completion,
5
+
highlight,
6
+
get_pwd_string,
7
+
register_console_callback,
8
+
register_task_count_callback,
9
+
} from "../../pkg";
10
+
11
+
// Initialize WASM
12
+
await init();
13
+
init_engine();
14
+
15
+
// Setup Callbacks to proxy messages back to Main Thread
16
+
register_console_callback((msg: string, isCmd: boolean) => {
17
+
self.postMessage({ type: "console", payload: { msg, isCmd } });
18
+
});
19
+
20
+
register_task_count_callback((count: number) => {
21
+
self.postMessage({ type: "task_count", payload: count });
22
+
});
23
+
24
+
// Handle messages from Main Thread
25
+
self.onmessage = (e) => {
26
+
const { id, type, payload } = e.data;
27
+
28
+
// console.log("Received message:", id, type, payload);
29
+
30
+
try {
31
+
let result;
32
+
switch (type) {
33
+
case "run":
34
+
result = run_command(payload);
35
+
break;
36
+
case "completion":
37
+
result = completion(payload.line, payload.cursor);
38
+
break;
39
+
case "highlight":
40
+
result = highlight(payload);
41
+
break;
42
+
case "get_pwd":
43
+
result = get_pwd_string();
44
+
break;
45
+
default:
46
+
throw new Error(`Unknown message type: ${type}`);
47
+
}
48
+
self.postMessage({ id, type: `${type}_result`, payload: result });
49
+
} catch (err) {
50
+
self.postMessage({ id, type: "error", payload: String(err) });
51
+
}
52
+
};
53
+
54
+
self.postMessage({ type: "initialized", payload: true });
+26
www/tsconfig.json
+26
www/tsconfig.json
···
1
+
{
2
+
"compilerOptions": {
3
+
"target": "ES2022",
4
+
"useDefineForClassFields": true,
5
+
"module": "ESNext",
6
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
7
+
"types": ["vite/client"],
8
+
"skipLibCheck": true,
9
+
10
+
/* Bundler mode */
11
+
"moduleResolution": "bundler",
12
+
"allowImportingTsExtensions": true,
13
+
"verbatimModuleSyntax": true,
14
+
"moduleDetection": "force",
15
+
"noEmit": true,
16
+
17
+
/* Linting */
18
+
"strict": true,
19
+
"noUnusedLocals": true,
20
+
"noUnusedParameters": true,
21
+
"erasableSyntaxOnly": true,
22
+
"noFallthroughCasesInSwitch": true,
23
+
"noUncheckedSideEffectImports": true
24
+
},
25
+
"include": ["src"]
26
+
}
+16
www/vite.config.ts
+16
www/vite.config.ts
···
1
+
import { defineConfig } from "vite";
2
+
import wasm from "vite-plugin-wasm";
3
+
import topLevelAwait from "vite-plugin-top-level-await";
4
+
5
+
export default defineConfig({
6
+
plugins: [wasm(), topLevelAwait()],
7
+
worker: {
8
+
format: "es",
9
+
plugins: () => [wasm(), topLevelAwait()],
10
+
},
11
+
server: {
12
+
fs: {
13
+
allow: [".."],
14
+
},
15
+
},
16
+
});