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

timer im not sure it works while downloading

Changed files
+13 -2
src
+13 -2
src/lib/RepoStats.svelte
··· 16 16 let collections = $state(new Array<CountedCollection>()); 17 17 let collectionsOrdered: Array<CountedCollection> = $derived([...collections].sort((a, b) => b.count - a.count)) 18 18 let totalRecords = $state(0) 19 + let startTime = $state<number | null>(null) 20 + let endTime = $state<number | null>(null) 21 + let elapsedTime = $derived.by(() => { 22 + if (!startTime) return "0.00" 23 + const end = endTime ?? Date.now() 24 + return ((end - startTime) / 1000).toFixed(2) 25 + }) 19 26 20 27 const getRepoStats = async () => { 21 28 const endPoint = `${pdsUrl}/xrpc/com.atproto.sync.getRepo?did=${did}` 22 29 30 + startTime = Date.now() 31 + endTime = null 23 32 try { 24 33 const response = await fetch(endPoint) 25 34 if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`) ··· 46 55 await car.dispose() 47 56 } 48 57 58 + endTime = Date.now() 49 59 loading = false; 50 60 } catch (err) { 61 + endTime = Date.now() 51 62 console.error('Error fetching repo stats:', err) 52 63 error = err.message 53 64 loading = false ··· 65 76 <p style="color: red">{error}</p> 66 77 {/if} 67 78 {#if loading} 68 - Loading... ({downloadedMB} MB downloaded) 79 + Loading... ({downloadedMB} MB downloaded, {elapsedTime}s) 69 80 {:else} 70 - <span>Repo size {downloadedMB} MB</span> 81 + <span>Repo size {downloadedMB} MB (fetched in {elapsedTime}s)</span> 71 82 {/if} 72 83 {#if collectionsOrdered.length > 0} 73 84