Shows how to get repo export and walk it in TypeScript walktherepo.wisp.place

I'm a goober and had the wrong thing installed

Changed files
+44 -12
src
+1 -2
package.json
··· 21 21 }, 22 22 "dependencies": { 23 23 "@atcute/atproto": "^3.1.10", 24 - "@atcute/car": "^5.0.0", 25 - "@atcute/cbor": "^2.2.8", 26 24 "@atcute/client": "^4.2.1", 27 25 "@atcute/identity": "^1.1.3", 28 26 "@atcute/identity-resolver": "^1.2.2", 29 27 "@atcute/lexicons": "^1.2.6", 28 + "@atcute/repo": "^0.1.1", 30 29 "@eslint/compat": "^2.0.0", 31 30 "@eslint/js": "^9.39.2", 32 31 "eslint": "^9.39.2",
+39
pnpm-lock.yaml
··· 29 29 '@atcute/lexicons': 30 30 specifier: ^1.2.6 31 31 version: 1.2.6 32 + '@atcute/repo': 33 + specifier: ^0.1.1 34 + version: 0.1.1 32 35 '@eslint/compat': 33 36 specifier: ^2.0.0 34 37 version: 2.0.0(eslint@9.39.2) ··· 87 90 '@atcute/client@4.2.1': 88 91 resolution: {integrity: sha512-ZBFM2pW075JtgGFu5g7HHZBecrClhlcNH8GVP9Zz1aViWR+cjjBsTpeE63rJs+FCOHFYlirUyo5L8SGZ4kMINw==} 89 92 93 + '@atcute/crypto@2.3.0': 94 + resolution: {integrity: sha512-w5pkJKCjbNMQu+F4JRHbR3ROQyhi1wbn+GSC6WDQamcYHkZmEZk1/eoI354bIQOOfkEM6aFLv718iskrkon4GQ==} 95 + 90 96 '@atcute/identity-resolver@1.2.2': 91 97 resolution: {integrity: sha512-eUh/UH4bFvuXS0X7epYCeJC/kj4rbBXfSRumLEH4smMVwNOgTo7cL/0Srty+P/qVPoZEyXdfEbS0PHJyzoXmHw==} 92 98 peerDependencies: ··· 98 104 '@atcute/lexicons@1.2.6': 99 105 resolution: {integrity: sha512-s76UQd8D+XmHIzrjD9CJ9SOOeeLPHc+sMmcj7UFakAW/dDFXc579fcRdRfuUKvXBL5v1Gs2VgDdlh/IvvQZAwA==} 100 106 107 + '@atcute/mst@0.1.1': 108 + resolution: {integrity: sha512-NZ/lZ68GOjmAgBSeGf6WHyKM5wo1Hhc7PNt9uwsViswGPMNEEKNj9cw+0YGziXee/Qbnvc+CKqbRSPwruhXFQg==} 109 + 101 110 '@atcute/multibase@1.1.6': 102 111 resolution: {integrity: sha512-HBxuCgYLKPPxETV0Rot4VP9e24vKl8JdzGCZOVsDaOXJgbRZoRIF67Lp0H/OgnJeH/Xpva8Z5ReoTNJE5dn3kg==} 112 + 113 + '@atcute/repo@0.1.1': 114 + resolution: {integrity: sha512-P5aWjt3bvcquUkUmGPslF0naAfLGRHse5Qdz9/RJYrFuoH0iiEMyRnW6M+3ksOe20GPsMnbq71WbzzFkRFPBtg==} 103 115 104 116 '@atcute/uint8array@1.0.6': 105 117 resolution: {integrity: sha512-ucfRBQc7BFT8n9eCyGOzDHEMKF/nZwhS2pPao4Xtab1ML3HdFYcX2DM1tadCzas85QTGxHe5urnUAAcNKGRi9A==} ··· 355 367 356 368 '@jridgewell/trace-mapping@0.3.31': 357 369 resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 370 + 371 + '@noble/secp256k1@3.0.0': 372 + resolution: {integrity: sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg==} 358 373 359 374 '@rollup/rollup-android-arm-eabi@4.55.1': 360 375 resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} ··· 1155 1170 '@atcute/identity': 1.1.3 1156 1171 '@atcute/lexicons': 1.2.6 1157 1172 1173 + '@atcute/crypto@2.3.0': 1174 + dependencies: 1175 + '@atcute/multibase': 1.1.6 1176 + '@atcute/uint8array': 1.0.6 1177 + '@noble/secp256k1': 3.0.0 1178 + 1158 1179 '@atcute/identity-resolver@1.2.2(@atcute/identity@1.1.3)': 1159 1180 dependencies: 1160 1181 '@atcute/identity': 1.1.3 ··· 1174 1195 '@standard-schema/spec': 1.1.0 1175 1196 esm-env: 1.2.2 1176 1197 1198 + '@atcute/mst@0.1.1': 1199 + dependencies: 1200 + '@atcute/cbor': 2.2.8 1201 + '@atcute/cid': 2.3.0 1202 + '@atcute/uint8array': 1.0.6 1203 + 1177 1204 '@atcute/multibase@1.1.6': 1178 1205 dependencies: 1206 + '@atcute/uint8array': 1.0.6 1207 + 1208 + '@atcute/repo@0.1.1': 1209 + dependencies: 1210 + '@atcute/car': 5.0.0 1211 + '@atcute/cbor': 2.2.8 1212 + '@atcute/cid': 2.3.0 1213 + '@atcute/crypto': 2.3.0 1214 + '@atcute/lexicons': 1.2.6 1215 + '@atcute/mst': 0.1.1 1179 1216 '@atcute/uint8array': 1.0.6 1180 1217 1181 1218 '@atcute/uint8array@1.0.6': {} ··· 1355 1392 dependencies: 1356 1393 '@jridgewell/resolve-uri': 3.1.2 1357 1394 '@jridgewell/sourcemap-codec': 1.5.5 1395 + 1396 + '@noble/secp256k1@3.0.0': {} 1358 1397 1359 1398 '@rollup/rollup-android-arm-eabi@4.55.1': 1360 1399 optional: true
+4 -10
src/lib/RepoStats.svelte
··· 1 1 <script lang="ts"> 2 - import { fromStream } from '@atcute/car'; 3 - import * as CBOR from '@atcute/cbor'; 2 + import { fromStream } from '@atcute/repo'; 4 3 import { onMount } from 'svelte'; 5 4 import { Client, simpleFetchHandler } from '@atcute/client'; 6 5 import type {} from '@atcute/atproto'; ··· 72 71 73 72 try { 74 73 for await (const entry of car) { 75 - const record = CBOR.decode(entry.bytes); 76 - if (!record.$type) { 77 - //Is not a record 78 - continue; 79 - } 80 74 81 - let checkForCollection = collections.find(c => c.collection === record.$type); 75 + let checkForCollection = collections.find(c => c.collection === entry.collection); 82 76 if (!checkForCollection) { 83 - collections.push({ collection: record.$type, count: 1 }); 77 + collections.push({ collection: entry.collection, count: 1 }); 84 78 } else { 85 79 checkForCollection.count++; 86 80 } 87 - downloadedBytes = entry.entryEnd; 81 + downloadedBytes = entry.carEntry.entryEnd; 88 82 totalRecords++; 89 83 } 90 84 } finally {