Monorepo for wisp.place. A static site hosting service built on top of the AT Protocol.
at main 53 lines 1.3 kB view raw
1import { spinner } from '@clack/prompts'; 2import pc from 'picocolors'; 3 4export { pc }; 5 6export function formatBytes(bytes: number): string { 7 if (bytes === 0) return '0 B'; 8 const k = 1024; 9 const sizes = ['B', 'KB', 'MB', 'GB']; 10 const i = Math.floor(Math.log(bytes) / Math.log(k)); 11 return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i] ?? 'TB'}`; 12} 13 14// Adapter to provide ora-like interface using clack spinner 15export interface SpinnerLike { 16 text: string; 17 start(): SpinnerLike; 18 succeed(text?: string): SpinnerLike; 19 fail(text?: string): SpinnerLike; 20} 21 22export function createSpinner(text: string): SpinnerLike { 23 const s = spinner(); 24 let currentText = text; 25 let started = false; 26 27 return { 28 get text() { 29 return currentText; 30 }, 31 set text(newText: string) { 32 currentText = newText; 33 if (started) { 34 s.message(newText); 35 } 36 }, 37 start() { 38 started = true; 39 s.start(currentText); 40 return this; 41 }, 42 succeed(message?: string) { 43 s.stop(pc.green('✓ ') + (message ?? currentText)); 44 started = false; 45 return this; 46 }, 47 fail(message?: string) { 48 s.stop(pc.red('✗ ') + (message ?? currentText)); 49 started = false; 50 return this; 51 } 52 }; 53}