UNPKG

@rocksky/cli

Version:

Command-line interface for Rocksky – scrobble tracks, view stats, and manage your listening history

89 lines (76 loc) 2.22 kB
import { RockskyClient } from "client"; export async function search( query: string, { limit = 20, albums = false, artists = false, tracks = false, users = false } ): Promise<string> { const client = new RockskyClient(); const results = await client.search(query, { size: limit }); if (results.records.length === 0) { return `No results found for ${query}.`; } // merge all results into one array with type and sort by xata_scrore let mergedResults = results.records.map((record) => ({ ...record, type: record.table, })); if (albums) { mergedResults = mergedResults.filter((record) => record.table === "albums"); } if (artists) { mergedResults = mergedResults.filter( (record) => record.table === "artists" ); } if (tracks) { mergedResults = mergedResults.filter(({ table }) => table === "tracks"); } if (users) { mergedResults = mergedResults.filter(({ table }) => table === "users"); } mergedResults.sort((a, b) => b.xata_score - a.xata_score); const responses = []; for (const { table, record } of mergedResults) { if (table === "users") { responses.push({ handle: record.handle, display_name: record.display_name, did: record.did, link: `https://rocksky.app/profile/${record.did}`, type: "account", }); } if (table === "albums") { const link = record.uri ? `https://rocksky.app/${record.uri?.split("at://")[1]}` : ""; responses.push({ title: record.title, artist: record.artist, link: link, type: "album", }); } if (table === "tracks") { const link = record.uri ? `https://rocksky.app/${record.uri?.split("at://")[1]}` : ""; responses.push({ title: record.title, artist: record.artist, link: link, type: "track", }); } if (table === "artists") { const link = record.uri ? `https://rocksky.app/${record.uri?.split("at://")[1]}` : ""; responses.push({ name: record.name, link: link, type: "artist", }); } } return JSON.stringify(responses, null, 2); }