+4
.gitmodules
+4
.gitmodules
+41
.zed/settings.json
+41
.zed/settings.json
···
1
+
{
2
+
"lsp": {
3
+
"deno": {
4
+
"settings": {
5
+
"deno": {
6
+
"enable": true
7
+
}
8
+
}
9
+
},
10
+
"json-language-server": {
11
+
"settings": {
12
+
"json": {
13
+
"schemas": [
14
+
{
15
+
"fileMatch": ["deno.json"],
16
+
"url": "https://raw.githubusercontent.com/denoland/deno/refs/heads/main/cli/schemas/config-file.v1.json"
17
+
},
18
+
{
19
+
"fileMatch": ["package.json"],
20
+
"url": "http://json.schemastore.org/package"
21
+
}
22
+
]
23
+
}
24
+
}
25
+
}
26
+
},
27
+
"languages": {
28
+
"JavaScript": {
29
+
"language_servers": ["deno", "!typescript-language-server", "!vtsls", "!eslint"],
30
+
"formatter": "language_server"
31
+
},
32
+
"TypeScript": {
33
+
"language_servers": ["deno", "!typescript-language-server", "!vtsls", "!eslint"],
34
+
"formatter": "language_server"
35
+
},
36
+
"TSX": {
37
+
"language_servers": ["deno", "!typescript-language-server", "!vtsls", "!eslint"],
38
+
"formatter": "language_server"
39
+
}
40
+
}
41
+
}
+6
README.md
+6
README.md
+1
artifacts/artifacts.json
+1
artifacts/artifacts.json
···
1
+
{}
+1
artifacts/versions.json
+1
artifacts/versions.json
···
1
+
{}
+15
deno.jsonc
+15
deno.jsonc
···
1
+
{
2
+
"imports": {
3
+
"@atikayda/kjson": "jsr:@atikayda/kjson@^1.2.2",
4
+
"@std/fs": "jsr:@std/fs@^1.0.19",
5
+
"@std/path": "jsr:@std/path@^1.1.2",
6
+
"ipfs-car": "npm:ipfs-car@^3.1.0",
7
+
},
8
+
"tasks": {
9
+
"add-artifact": "deno run -A tasks/add-artifact.ts",
10
+
"build": "deno run add-artifact",
11
+
},
12
+
"compilerOptions": {
13
+
"checkJs": true,
14
+
},
15
+
}
+408
deno.lock
+408
deno.lock
···
1
+
{
2
+
"version": "5",
3
+
"specifiers": {
4
+
"jsr:@atikayda/kjson@^1.2.2": "1.2.2",
5
+
"jsr:@std/fs@^1.0.19": "1.0.19",
6
+
"jsr:@std/internal@^1.0.10": "1.0.12",
7
+
"jsr:@std/internal@^1.0.9": "1.0.12",
8
+
"jsr:@std/path@^1.1.1": "1.1.2",
9
+
"jsr:@std/path@^1.1.2": "1.1.2",
10
+
"npm:ipfs-car@^3.1.0": "3.1.0",
11
+
"npm:proposal-decimal@20250613.0.0": "20250613.0.0"
12
+
},
13
+
"jsr": {
14
+
"@atikayda/kjson@1.2.2": {
15
+
"integrity": "d291dd37f3359be9d743d9f30560a94e8266b4d87183c46274df36e072a75ed2",
16
+
"dependencies": [
17
+
"npm:proposal-decimal"
18
+
]
19
+
},
20
+
"@std/fs@1.0.19": {
21
+
"integrity": "051968c2b1eae4d2ea9f79a08a3845740ef6af10356aff43d3e2ef11ed09fb06",
22
+
"dependencies": [
23
+
"jsr:@std/internal@^1.0.9",
24
+
"jsr:@std/path@^1.1.1"
25
+
]
26
+
},
27
+
"@std/internal@1.0.12": {
28
+
"integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027"
29
+
},
30
+
"@std/path@1.1.2": {
31
+
"integrity": "c0b13b97dfe06546d5e16bf3966b1cadf92e1cc83e56ba5476ad8b498d9e3038",
32
+
"dependencies": [
33
+
"jsr:@std/internal@^1.0.10"
34
+
]
35
+
}
36
+
},
37
+
"npm": {
38
+
"@ipld/car@5.4.2": {
39
+
"integrity": "sha512-gfyrJvePyXnh2Fbj8mPg4JYvEZ3izhk8C9WgAle7xIYbrJNSXmNQ6BxAls8Gof97vvGbCROdxbTWRmHJtTCbcg==",
40
+
"dependencies": [
41
+
"@ipld/dag-cbor",
42
+
"cborg",
43
+
"multiformats",
44
+
"varint"
45
+
]
46
+
},
47
+
"@ipld/dag-cbor@9.2.5": {
48
+
"integrity": "sha512-84wSr4jv30biui7endhobYhXBQzQE4c/wdoWlFrKcfiwH+ofaPg8fwsM8okX9cOzkkrsAsNdDyH3ou+kiLquwQ==",
49
+
"dependencies": [
50
+
"cborg",
51
+
"multiformats"
52
+
]
53
+
},
54
+
"@ipld/dag-json@10.2.5": {
55
+
"integrity": "sha512-Q4Fr3IBDEN8gkpgNefynJ4U/ZO5Kwr7WSUMBDbZx0c37t0+IwQCTM9yJh8l5L4SRFjm31MuHwniZ/kM+P7GQ3Q==",
56
+
"dependencies": [
57
+
"cborg",
58
+
"multiformats"
59
+
]
60
+
},
61
+
"@ipld/dag-pb@4.1.5": {
62
+
"integrity": "sha512-w4PZ2yPqvNmlAir7/2hsCRMqny1EY5jj26iZcSgxREJexmbAc2FI21jp26MqiNdfgAxvkCnf2N/TJI18GaDNwA==",
63
+
"dependencies": [
64
+
"multiformats"
65
+
]
66
+
},
67
+
"@ipld/unixfs@3.0.0": {
68
+
"integrity": "sha512-Tj3/BPOlnemcZQ2ETIZAO8hqAs9KNzWyX5J9+JCL9jDwvYwjxeYjqJ3v+9DusNvTBmJhZnGVP6ijUHrsuOLp+g==",
69
+
"dependencies": [
70
+
"@ipld/dag-pb",
71
+
"@multiformats/murmur3",
72
+
"@perma/map",
73
+
"actor",
74
+
"multiformats",
75
+
"protobufjs",
76
+
"rabin-rs"
77
+
]
78
+
},
79
+
"@multiformats/blake2@2.0.2": {
80
+
"integrity": "sha512-AOWu6Tyuk5UoT5m4faB6ntVnPB8EmuD6rn18s4cCgHNEGgsamT8GdvjP9DYjzFHQVaP/0L3CaKqWQqJlXx9ecw==",
81
+
"dependencies": [
82
+
"blakejs",
83
+
"multiformats"
84
+
]
85
+
},
86
+
"@multiformats/murmur3@2.1.8": {
87
+
"integrity": "sha512-6vId1C46ra3R1sbJUOFCZnsUIveR9oF20yhPmAFxPm0JfrX3/ZRCgP3YDrBzlGoEppOXnA9czHeYc0T9mB6hbA==",
88
+
"dependencies": [
89
+
"multiformats",
90
+
"murmurhash3js-revisited"
91
+
]
92
+
},
93
+
"@multiformats/sha3@3.0.2": {
94
+
"integrity": "sha512-fBxODTXa1sOWYB9q6GSFe2HYSVwMEdnPa7c7FgNhr/rMFQ2HGtwmRppTm317HSpGSTUkoTvyKQDNcteJEGU+bg==",
95
+
"dependencies": [
96
+
"js-sha3",
97
+
"multiformats"
98
+
]
99
+
},
100
+
"@perma/map@1.0.3": {
101
+
"integrity": "sha512-Bf5njk0fnJGTFE2ETntq0N1oJ6YdCPIpTDn3R3KYZJQdeYSOCNL7mBrFlGnbqav8YQhJA/p81pvHINX9vAtHkQ==",
102
+
"dependencies": [
103
+
"@multiformats/murmur3",
104
+
"murmurhash3js-revisited"
105
+
]
106
+
},
107
+
"@protobufjs/aspromise@1.1.2": {
108
+
"integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
109
+
},
110
+
"@protobufjs/base64@1.1.2": {
111
+
"integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
112
+
},
113
+
"@protobufjs/codegen@2.0.4": {
114
+
"integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
115
+
},
116
+
"@protobufjs/eventemitter@1.1.0": {
117
+
"integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
118
+
},
119
+
"@protobufjs/fetch@1.1.0": {
120
+
"integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
121
+
"dependencies": [
122
+
"@protobufjs/aspromise",
123
+
"@protobufjs/inquire"
124
+
]
125
+
},
126
+
"@protobufjs/float@1.0.2": {
127
+
"integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
128
+
},
129
+
"@protobufjs/inquire@1.1.0": {
130
+
"integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
131
+
},
132
+
"@protobufjs/path@1.1.2": {
133
+
"integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
134
+
},
135
+
"@protobufjs/pool@1.1.0": {
136
+
"integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
137
+
},
138
+
"@protobufjs/utf8@1.1.0": {
139
+
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
140
+
},
141
+
"@types/node@24.10.1": {
142
+
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
143
+
"dependencies": [
144
+
"undici-types"
145
+
]
146
+
},
147
+
"@web3-storage/car-block-validator@1.2.2": {
148
+
"integrity": "sha512-lR9l+ZszhTid5HfZE8ohnGf2RJp2kaBOnoejmsACs3iTNiy+3K09dnPm8MhgBE9RCIgPBKM0CCWXO9l+I6jrKA==",
149
+
"dependencies": [
150
+
"@multiformats/blake2",
151
+
"@multiformats/murmur3",
152
+
"@multiformats/sha3",
153
+
"multiformats",
154
+
"uint8arrays"
155
+
]
156
+
},
157
+
"abort-error@1.0.1": {
158
+
"integrity": "sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg=="
159
+
},
160
+
"actor@2.3.1": {
161
+
"integrity": "sha512-ST/3wnvcP2tKDXnum7nLCLXm+/rsf8vPocXH2Fre6D8FQwNkGDd4JEitBlXj007VQJfiGYRQvXqwOBZVi+JtRg=="
162
+
},
163
+
"blakejs@1.2.1": {
164
+
"integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ=="
165
+
},
166
+
"cborg@4.3.0": {
167
+
"integrity": "sha512-vOXo1pB4mdeBw3LbpoynQlZNw/H3kZVHLtPYlp8kFMreL/2YfT54F70BM1s3iDoCtQ+3C9QmiRF4rfCSSTlhBw==",
168
+
"bin": true
169
+
},
170
+
"eventemitter3@5.0.1": {
171
+
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
172
+
},
173
+
"files-from-path@1.1.4": {
174
+
"integrity": "sha512-huzBO8vS15VrEC0ej62GtYCtPUNEsTdHIN3aFBjCUZyFQTr+bW4cpwvPMZssM/r+9/hOh4ikUiJ3L+9kZKBMag==",
175
+
"dependencies": [
176
+
"graceful-fs"
177
+
]
178
+
},
179
+
"graceful-fs@4.2.11": {
180
+
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
181
+
},
182
+
"hamt-sharding@3.0.6": {
183
+
"integrity": "sha512-nZeamxfymIWLpVcAN0CRrb7uVq3hCOGj9IcL6NMA6VVCVWqj+h9Jo/SmaWuS92AEDf1thmHsM5D5c70hM3j2Tg==",
184
+
"dependencies": [
185
+
"sparse-array",
186
+
"uint8arrays"
187
+
]
188
+
},
189
+
"interface-blockstore@5.3.2": {
190
+
"integrity": "sha512-oA9Pjkxun/JHAsZrYEyKX+EoPjLciTzidE7wipLc/3YoHDjzsnXRJzAzFJXNUvogtY4g7hIwxArx8+WKJs2RIg==",
191
+
"dependencies": [
192
+
"interface-store",
193
+
"multiformats"
194
+
]
195
+
},
196
+
"interface-store@6.0.3": {
197
+
"integrity": "sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA=="
198
+
},
199
+
"ipfs-car@3.1.0": {
200
+
"integrity": "sha512-0131+UNxk3+2baxK7qmlwJcl/SEI51v/Avx91LdP9WfSfh9s+/qkGS3ukwtmeG7YIyMLvTruRXPvHiYkz/ejVQ==",
201
+
"dependencies": [
202
+
"@ipld/car",
203
+
"@ipld/dag-cbor",
204
+
"@ipld/dag-json",
205
+
"@ipld/dag-pb",
206
+
"@ipld/unixfs",
207
+
"@web3-storage/car-block-validator",
208
+
"files-from-path",
209
+
"ipfs-unixfs-exporter",
210
+
"multiformats",
211
+
"sade",
212
+
"varint"
213
+
],
214
+
"bin": true
215
+
},
216
+
"ipfs-unixfs-exporter@13.7.3": {
217
+
"integrity": "sha512-sTFjAEnsPu5irh9rvT1j5mNf7nXnW78x5SJrCIrNZb1UqkXQtNX81RjAnTBShUtZ5ujSOc/yrC9Az8il8NVkKQ==",
218
+
"dependencies": [
219
+
"@ipld/dag-cbor",
220
+
"@ipld/dag-json",
221
+
"@ipld/dag-pb",
222
+
"@multiformats/murmur3",
223
+
"hamt-sharding",
224
+
"interface-blockstore",
225
+
"ipfs-unixfs",
226
+
"it-filter",
227
+
"it-last",
228
+
"it-map",
229
+
"it-parallel",
230
+
"it-pipe",
231
+
"it-pushable",
232
+
"multiformats",
233
+
"p-queue",
234
+
"progress-events"
235
+
]
236
+
},
237
+
"ipfs-unixfs@11.2.5": {
238
+
"integrity": "sha512-uasYJ0GLPbViaTFsOLnL9YPjX5VmhnqtWRriogAHOe4ApmIi9VAOFBzgDHsUW2ub4pEa/EysbtWk126g2vkU/g==",
239
+
"dependencies": [
240
+
"protons-runtime",
241
+
"uint8arraylist"
242
+
]
243
+
},
244
+
"it-filter@3.1.4": {
245
+
"integrity": "sha512-80kWEKgiFEa4fEYD3mwf2uygo1dTQ5Y5midKtL89iXyjinruA/sNXl6iFkTcdNedydjvIsFhWLiqRPQP4fAwWQ==",
246
+
"dependencies": [
247
+
"it-peekable"
248
+
]
249
+
},
250
+
"it-last@3.0.9": {
251
+
"integrity": "sha512-AtfUEnGDBHBEwa1LjrpGHsJMzJAWDipD6zilvhakzJcm+BCvNX8zlX2BsHClHJLLTrsY4lY9JUjc+TQV4W7m1w=="
252
+
},
253
+
"it-map@3.1.4": {
254
+
"integrity": "sha512-QB9PYQdE9fUfpVFYfSxBIyvKynUCgblb143c+ktTK6ZuKSKkp7iH58uYFzagqcJ5HcqIfn1xbfaralHWam+3fg==",
255
+
"dependencies": [
256
+
"it-peekable"
257
+
]
258
+
},
259
+
"it-merge@3.0.12": {
260
+
"integrity": "sha512-nnnFSUxKlkZVZD7c0jYw6rDxCcAQYcMsFj27thf7KkDhpj0EA0g9KHPxbFzHuDoc6US2EPS/MtplkNj8sbCx4Q==",
261
+
"dependencies": [
262
+
"it-queueless-pushable"
263
+
]
264
+
},
265
+
"it-parallel@3.0.13": {
266
+
"integrity": "sha512-85PPJ/O8q97Vj9wmDTSBBXEkattwfQGruXitIzrh0RLPso6RHfiVqkuTqBNufYYtB1x6PSkh0cwvjmMIkFEPHA==",
267
+
"dependencies": [
268
+
"p-defer"
269
+
]
270
+
},
271
+
"it-peekable@3.0.8": {
272
+
"integrity": "sha512-7IDBQKSp/dtBxXV3Fj0v3qM1jftJ9y9XrWLRIuU1X6RdKqWiN60syNwP0fiDxZD97b8SYM58dD3uklIk1TTQAw=="
273
+
},
274
+
"it-pipe@3.0.1": {
275
+
"integrity": "sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA==",
276
+
"dependencies": [
277
+
"it-merge",
278
+
"it-pushable",
279
+
"it-stream-types"
280
+
]
281
+
},
282
+
"it-pushable@3.2.3": {
283
+
"integrity": "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==",
284
+
"dependencies": [
285
+
"p-defer"
286
+
]
287
+
},
288
+
"it-queueless-pushable@2.0.2": {
289
+
"integrity": "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA==",
290
+
"dependencies": [
291
+
"abort-error",
292
+
"p-defer",
293
+
"race-signal"
294
+
]
295
+
},
296
+
"it-stream-types@2.0.2": {
297
+
"integrity": "sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww=="
298
+
},
299
+
"js-sha3@0.9.3": {
300
+
"integrity": "sha512-BcJPCQeLg6WjEx3FE591wVAevlli8lxsxm9/FzV4HXkV49TmBH38Yvrpce6fjbADGMKFrBMGTqrVz3qPIZ88Gg=="
301
+
},
302
+
"long@5.3.2": {
303
+
"integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="
304
+
},
305
+
"mri@1.2.0": {
306
+
"integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="
307
+
},
308
+
"multiformats@13.4.1": {
309
+
"integrity": "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q=="
310
+
},
311
+
"murmurhash3js-revisited@3.0.0": {
312
+
"integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g=="
313
+
},
314
+
"p-defer@4.0.1": {
315
+
"integrity": "sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A=="
316
+
},
317
+
"p-queue@8.1.1": {
318
+
"integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==",
319
+
"dependencies": [
320
+
"eventemitter3",
321
+
"p-timeout"
322
+
]
323
+
},
324
+
"p-timeout@6.1.4": {
325
+
"integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="
326
+
},
327
+
"progress-events@1.0.1": {
328
+
"integrity": "sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw=="
329
+
},
330
+
"proposal-decimal@20250613.0.0": {
331
+
"integrity": "sha512-cLO4I9fFHl4khF7x8F3/MUJzO/2eXvRVALzcHzNzc2pJKdNFcpk4EWW+W29V0qBQulZ6IkO58oMPU8BrsZIjag=="
332
+
},
333
+
"protobufjs@7.5.4": {
334
+
"integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==",
335
+
"dependencies": [
336
+
"@protobufjs/aspromise",
337
+
"@protobufjs/base64",
338
+
"@protobufjs/codegen",
339
+
"@protobufjs/eventemitter",
340
+
"@protobufjs/fetch",
341
+
"@protobufjs/float",
342
+
"@protobufjs/inquire",
343
+
"@protobufjs/path",
344
+
"@protobufjs/pool",
345
+
"@protobufjs/utf8",
346
+
"@types/node",
347
+
"long"
348
+
],
349
+
"scripts": true
350
+
},
351
+
"protons-runtime@5.6.0": {
352
+
"integrity": "sha512-/Kde+sB9DsMFrddJT/UZWe6XqvL7SL5dbag/DBCElFKhkwDj7XKt53S+mzLyaDP5OqS0wXjV5SA572uWDaT0Hg==",
353
+
"dependencies": [
354
+
"uint8-varint",
355
+
"uint8arraylist",
356
+
"uint8arrays"
357
+
]
358
+
},
359
+
"rabin-rs@2.1.0": {
360
+
"integrity": "sha512-5y72gAXPzIBsAMHcpxZP8eMDuDT98qMP1BqSDHRbHkJJXEgWIN1lA47LxUqzsK6jknOJtgfkQr9v+7qMlFDm6g=="
361
+
},
362
+
"race-signal@1.1.3": {
363
+
"integrity": "sha512-Mt2NznMgepLfORijhQMncE26IhkmjEphig+/1fKC0OtaKwys/gpvpmswSjoN01SS+VO951mj0L4VIDXdXsjnfA=="
364
+
},
365
+
"sade@1.8.1": {
366
+
"integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
367
+
"dependencies": [
368
+
"mri"
369
+
]
370
+
},
371
+
"sparse-array@1.3.2": {
372
+
"integrity": "sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg=="
373
+
},
374
+
"uint8-varint@2.0.4": {
375
+
"integrity": "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==",
376
+
"dependencies": [
377
+
"uint8arraylist",
378
+
"uint8arrays"
379
+
]
380
+
},
381
+
"uint8arraylist@2.4.8": {
382
+
"integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==",
383
+
"dependencies": [
384
+
"uint8arrays"
385
+
]
386
+
},
387
+
"uint8arrays@5.1.0": {
388
+
"integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==",
389
+
"dependencies": [
390
+
"multiformats"
391
+
]
392
+
},
393
+
"undici-types@7.16.0": {
394
+
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="
395
+
},
396
+
"varint@6.0.0": {
397
+
"integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg=="
398
+
}
399
+
},
400
+
"workspace": {
401
+
"dependencies": [
402
+
"jsr:@atikayda/kjson@^1.2.2",
403
+
"jsr:@std/fs@^1.0.19",
404
+
"jsr:@std/path@^1.1.2",
405
+
"npm:ipfs-car@^3.1.0"
406
+
]
407
+
}
408
+
}
+156
tasks/add-artifact.ts
+156
tasks/add-artifact.ts
···
1
+
import * as Fs from "@std/fs";
2
+
import * as Path from "@std/path";
3
+
import { kJSON } from "@atikayda/kjson";
4
+
5
+
import artifactsJson from "../artifacts/artifacts.json" with { type: "json" };
6
+
import versionsJson from "../artifacts/versions.json" with { type: "json" };
7
+
8
+
export type Artifact = { cid: string; version: string };
9
+
10
+
const artifacts: Record<string, Artifact> = artifactsJson as any;
11
+
const versions: Record<string, Artifact> = versionsJson as any;
12
+
13
+
////////////////////////////////////////////
14
+
// ESTABLISH VERSION
15
+
////////////////////////////////////////////
16
+
17
+
const version = kJSON.parse(
18
+
Deno.readTextFileSync(
19
+
Path.join("diffuse", "deno.jsonc"),
20
+
),
21
+
).version;
22
+
23
+
console.log("🎵 Diffuse version:", version);
24
+
25
+
////////////////////////////////////////////
26
+
// CHECK IF VERSION ALREADY EXISTS
27
+
////////////////////////////////////////////
28
+
29
+
if (versions[version]) {
30
+
console.log(
31
+
"✅️ Version already present as artifact:",
32
+
versions[version].cid,
33
+
);
34
+
Deno.exit();
35
+
}
36
+
37
+
////////////////////////////////////////////
38
+
// BUILD DIFFUSE
39
+
////////////////////////////////////////////
40
+
41
+
Deno.chdir("diffuse");
42
+
43
+
execSync("deno", "run", "build");
44
+
45
+
Deno.chdir("..");
46
+
47
+
const BUILD = Path.join("diffuse", "_site");
48
+
49
+
////////////////////////////////////////////
50
+
// TEMP DIR
51
+
////////////////////////////////////////////
52
+
53
+
const TMP_DIR = Deno.makeTempDirSync();
54
+
const TMP_CAR = Path.join(TMP_DIR, "diffuse.car");
55
+
56
+
////////////////////////////////////////////
57
+
// MAKE CAR
58
+
////////////////////////////////////////////
59
+
60
+
const carCmd = execSync(
61
+
"deno",
62
+
"run",
63
+
"-A",
64
+
"ipfs-car",
65
+
"pack",
66
+
BUILD,
67
+
"--no-wrap",
68
+
"--output",
69
+
TMP_CAR,
70
+
);
71
+
72
+
const cid = utf8String(carCmd.stdout);
73
+
74
+
Deno.removeSync(TMP_DIR, { recursive: true });
75
+
76
+
if (!cid) throw new Error("CID result missing");
77
+
console.log("💎 Artifact CID:", cid);
78
+
79
+
////////////////////////////////////////////
80
+
// CHECK IF ARTIFACT ALREADY EXISTS
81
+
////////////////////////////////////////////
82
+
83
+
if (artifacts[cid]) {
84
+
console.log(
85
+
"✅️ Artifact already present as version:",
86
+
artifacts[cid].version,
87
+
);
88
+
Deno.exit();
89
+
}
90
+
91
+
////////////////////////////////////////////
92
+
// ADD ARTIFACT
93
+
////////////////////////////////////////////
94
+
95
+
Fs.copySync(BUILD, Path.join("artifacts", cid), { overwrite: true });
96
+
97
+
////////////////////////////////////////////
98
+
// ADD TO INDEXES
99
+
////////////////////////////////////////////
100
+
101
+
const artifact: Artifact = {
102
+
cid,
103
+
version,
104
+
};
105
+
106
+
artifacts[cid] = artifact;
107
+
versions[version] = artifact;
108
+
109
+
Deno.writeTextFileSync(
110
+
"artifacts/artifacts.json",
111
+
JSON.stringify(artifacts, null, 2),
112
+
);
113
+
114
+
Deno.writeTextFileSync(
115
+
"artifacts/versions.json",
116
+
JSON.stringify(versions, null, 2),
117
+
);
118
+
119
+
////////////////////////////////////////////
120
+
// DE-DUPLICATE
121
+
////////////////////////////////////////////
122
+
123
+
const dedupGroupCmd = new Deno.Command("fclones", {
124
+
args: ["group", "artifacts"],
125
+
stderr: "piped",
126
+
stdout: "piped",
127
+
});
128
+
129
+
const dedupLinkCmd = new Deno.Command("fclones", {
130
+
args: ["link", "--dry-run", "--soft"],
131
+
stderr: "piped",
132
+
stdin: "piped",
133
+
stdout: "piped",
134
+
});
135
+
136
+
const linkProcess = dedupLinkCmd.spawn();
137
+
138
+
dedupGroupCmd.spawn().stdout.pipeTo(
139
+
linkProcess.stdin,
140
+
);
141
+
142
+
////////////////////////////////////////////
143
+
// 🛠️
144
+
////////////////////////////////////////////
145
+
146
+
function execSync(...args: string[]) {
147
+
const cmd = new Deno.Command(args[0], {
148
+
args: args.slice(1),
149
+
});
150
+
151
+
return cmd.outputSync();
152
+
}
153
+
154
+
function utf8String(bytes: Uint8Array) {
155
+
return new TextDecoder().decode(bytes);
156
+
}