A decentralized music tracking and discovery platform built on AT Protocol 🎵

Replace console logs with consola

Add consola to apps/web dependencies and switch console.* calls to
consola.* across components and libs. Update bun.lock to include
consola and bump @rocksky/cli version to 0.3.4

+25 -14
+1
apps/web/package.json
··· 47 "@vitest/ui": "^3.0.4", 48 "axios": "^1.7.9", 49 "baseui": "15.0.0", 50 "copy-to-clipboard": "^3.3.3", 51 "date-fns": "^4.1.0", 52 "dayjs": "^1.11.13",
··· 47 "@vitest/ui": "^3.0.4", 48 "axios": "^1.7.9", 49 "baseui": "15.0.0", 50 + "consola": "^3.4.2", 51 "copy-to-clipboard": "^3.3.3", 52 "date-fns": "^4.1.0", 53 "dayjs": "^1.11.13",
+2 -1
apps/web/src/components/ContextMenu/ContextMenu.tsx
··· 2 import { EllipsisHorizontal } from "@styled-icons/ionicons-sharp"; 3 import { NestedMenus, StatefulMenu } from "baseui/menu"; 4 import { StatefulPopover } from "baseui/popover"; 5 6 export type ContextMenuProps = { 7 file: { ··· 65 }, 66 ]} 67 onItemSelect={({ item }) => { 68 - console.log(`Selected item: ${item.label}`); 69 close(); 70 }} 71 overrides={{
··· 2 import { EllipsisHorizontal } from "@styled-icons/ionicons-sharp"; 3 import { NestedMenus, StatefulMenu } from "baseui/menu"; 4 import { StatefulPopover } from "baseui/popover"; 5 + import consola from "consola"; 6 7 export type ContextMenuProps = { 8 file: { ··· 66 }, 67 ]} 68 onItemSelect={({ item }) => { 69 + consola.log(`Selected item: ${item.label}`); 70 close(); 71 }} 72 overrides={{
+3 -2
apps/web/src/components/StickyPlayer/StickyPlayerWithData.tsx
··· 8 import useLike from "../../hooks/useLike"; 9 import useSpotify from "../../hooks/useSpotify"; 10 import StickyPlayer from "./StrickyPlayer"; 11 12 function StickyPlayerWithData() { 13 const [liked, setLiked] = useState<Record<string, boolean>>({}); ··· 330 } 331 }; 332 333 - console.log(">> WebSocket connection opened"); 334 }; 335 336 return () => { ··· 340 } 341 ws.close(); 342 } 343 - console.log(">> WebSocket connection closed"); 344 }; 345 }, []); 346
··· 8 import useLike from "../../hooks/useLike"; 9 import useSpotify from "../../hooks/useSpotify"; 10 import StickyPlayer from "./StrickyPlayer"; 11 + import { consola } from "consola"; 12 13 function StickyPlayerWithData() { 14 const [liked, setLiked] = useState<Record<string, boolean>>({}); ··· 331 } 332 }; 333 334 + consola.info(">> WebSocket connection opened"); 335 }; 336 337 return () => { ··· 341 } 342 ws.close(); 343 } 344 + consola.log(">> WebSocket connection closed"); 345 }; 346 }, []); 347
+3 -2
apps/web/src/hooks/useProfile.tsx
··· 10 } from "../api/profile"; 11 import { profileAtom } from "../atoms/profile"; 12 import { API_URL } from "../consts"; 13 14 export const useProfileByDidQuery = (did: string) => 15 useQuery({ ··· 110 (error && localStorage.getItem("token")) 111 ) { 112 if (data === "Unauthorized") { 113 - console.log(">> Unauthorized"); 114 localStorage.removeItem("token"); 115 } 116 } ··· 125 (error && localStorage.getItem("token")) 126 ) { 127 if (data === "Unauthorized" && localStorage.getItem("token")) { 128 - console.log(">> error", error, ">> data", data); // localStorage.clear(); 129 window.location.href = "/"; 130 } 131 return {
··· 10 } from "../api/profile"; 11 import { profileAtom } from "../atoms/profile"; 12 import { API_URL } from "../consts"; 13 + import consola from "consola"; 14 15 export const useProfileByDidQuery = (did: string) => 16 useQuery({ ··· 111 (error && localStorage.getItem("token")) 112 ) { 113 if (data === "Unauthorized") { 114 + consola.log(">> Unauthorized"); 115 localStorage.removeItem("token"); 116 } 117 } ··· 126 (error && localStorage.getItem("token")) 127 ) { 128 if (data === "Unauthorized" && localStorage.getItem("token")) { 129 + consola.log(">> error", error, ">> data", data); // localStorage.clear(); 130 window.location.href = "/"; 131 } 132 return {
+2 -1
apps/web/src/layouts/Main.tsx
··· 17 import Search from "./Search"; 18 import SpotifyLogin from "./SpotifyLogin"; 19 import { IconEye, IconEyeOff, IconLock } from "@tabler/icons-react"; 20 21 const Container = styled.div` 22 display: flex; ··· 97 window.location.href = "/"; 98 } 99 } catch (e) { 100 - console.error(e); 101 } 102 }; 103 fetchToken();
··· 17 import Search from "./Search"; 18 import SpotifyLogin from "./SpotifyLogin"; 19 import { IconEye, IconEyeOff, IconLock } from "@tabler/icons-react"; 20 + import { consola } from "consola"; 21 22 const Container = styled.div` 23 display: flex; ··· 98 window.location.href = "/"; 99 } 100 } catch (e) { 101 + consola.error(e); 102 } 103 }; 104 fetchToken();
+2 -1
apps/web/src/lib/metadata.ts
··· 1 import init, { extract_audio_metadata } from "../pkg/raichu"; 2 3 export class Metadata { ··· 11 12 await init(); // Initialize WASM 13 this.metadata = extract_audio_metadata(uint8Array); 14 - console.log(">> Metadata Loaded Successfully"); 15 } 16 17 get_metadata() {
··· 1 + import consola from "consola"; 2 import init, { extract_audio_metadata } from "../pkg/raichu"; 3 4 export class Metadata { ··· 12 13 await init(); // Initialize WASM 14 this.metadata = extract_audio_metadata(uint8Array); 15 + consola.log(">> Metadata Loaded Successfully"); 16 } 17 18 get_metadata() {
+2 -1
apps/web/src/lib/player.ts
··· 1 import init, { AudioDecoder } from "../pkg/raichu"; 2 3 class AudioPlayer { 4 private audioContext: AudioContext | null = null; ··· 33 } 34 } 35 36 - console.log(">> Audio Loaded Successfully"); 37 } 38 39 play(offset = 0) {
··· 1 import init, { AudioDecoder } from "../pkg/raichu"; 2 + import consola from "consola"; 3 4 class AudioPlayer { 5 private audioContext: AudioContext | null = null; ··· 34 } 35 } 36 37 + consola.info(">> Audio Loaded Successfully"); 38 } 39 40 play(offset = 0) {
+4 -3
apps/web/src/pages/dropbox/Dropbox.tsx
··· 11 import Main from "../../layouts/Main"; 12 import { File } from "../../types/file"; 13 import { AudioFile, Directory } from "./styles"; 14 15 const columnHelper = createColumnHelper<File>(); 16 ··· 22 const { data, isLoading } = useFilesQuery(props.fileId); 23 24 const playFile = async (id: string) => { 25 - console.log(">> Playing file:", id); 26 /* 27 const { link } = await getTemporaryLink(id); 28 - console.log(">> Playing file:", link); 29 const m = new Metadata(); 30 await m.load(link); 31 - console.log(">> Metadata:", m.get_metadata()); 32 */ 33 }; 34
··· 11 import Main from "../../layouts/Main"; 12 import { File } from "../../types/file"; 13 import { AudioFile, Directory } from "./styles"; 14 + import consola from "consola"; 15 16 const columnHelper = createColumnHelper<File>(); 17 ··· 23 const { data, isLoading } = useFilesQuery(props.fileId); 24 25 const playFile = async (id: string) => { 26 + consola.log(">> Playing file:", id); 27 /* 28 const { link } = await getTemporaryLink(id); 29 + consola.log(">> Playing file:", link); 30 const m = new Metadata(); 31 await m.load(link); 32 + consola.log(">> Metadata:", m.get_metadata()); 33 */ 34 }; 35
+2 -1
apps/web/src/pages/home/feed/Feed.tsx
··· 21 useScrobbleInfiniteQuery, 22 } from "../../../hooks/useFeed"; 23 import FeedGenerators from "./FeedGenerators"; 24 25 dayjs.extend(relativeTime); 26 ··· 90 } 91 ws.close(); 92 } 93 - console.log(">> WebSocket connection closed"); 94 }; 95 }, [queryClient, feedUri]); 96
··· 21 useScrobbleInfiniteQuery, 22 } from "../../../hooks/useFeed"; 23 import FeedGenerators from "./FeedGenerators"; 24 + import { consola } from "consola"; 25 26 dayjs.extend(relativeTime); 27 ··· 91 } 92 ws.close(); 93 } 94 + consola.info(">> WebSocket connection closed"); 95 }; 96 }, [queryClient, feedUri]); 97
+2 -1
apps/web/src/pages/profile/library/Library.tsx
··· 7 import TopArtists from "../overview/topartists"; 8 import TopTracks from "../overview/toptracks"; 9 import Albums from "./albums"; 10 11 export type LibraryProps = { 12 activeKey?: string; ··· 17 _.get(props, "activeKey", "0"), 18 ); 19 const { tab } = useSearch({ strict: false }); 20 - console.log("tab", tab); 21 22 useEffect(() => { 23 if (!tab) {
··· 7 import TopArtists from "../overview/topartists"; 8 import TopTracks from "../overview/toptracks"; 9 import Albums from "./albums"; 10 + import consola from "consola"; 11 12 export type LibraryProps = { 13 activeKey?: string; ··· 18 _.get(props, "activeKey", "0"), 19 ); 20 const { tab } = useSearch({ strict: false }); 21 + consola.info("tab", tab); 22 23 useEffect(() => { 24 if (!tab) {
+2 -1
bun.lock
··· 103 }, 104 "apps/cli": { 105 "name": "@rocksky/cli", 106 - "version": "0.3.0", 107 "bin": { 108 "rocksky": "./dist/index.js", 109 }, ··· 227 "@vitest/ui": "^3.0.4", 228 "axios": "^1.7.9", 229 "baseui": "15.0.0", 230 "copy-to-clipboard": "^3.3.3", 231 "date-fns": "^4.1.0", 232 "dayjs": "^1.11.13",
··· 103 }, 104 "apps/cli": { 105 "name": "@rocksky/cli", 106 + "version": "0.3.4", 107 "bin": { 108 "rocksky": "./dist/index.js", 109 }, ··· 227 "@vitest/ui": "^3.0.4", 228 "axios": "^1.7.9", 229 "baseui": "15.0.0", 230 + "consola": "^3.4.2", 231 "copy-to-clipboard": "^3.3.3", 232 "date-fns": "^4.1.0", 233 "dayjs": "^1.11.13",