Experiment to rebuild Diffuse using web applets.
at main 41 lines 1.1 kB view raw
1import * as IDB from "idb-keyval"; 2 3import { expose, jsonDecode, jsonEncode, transfer } from "@scripts/common"; 4import type { Track } from "@applets/core/types"; 5import { IDB_PREFIX } from "./constants"; 6 7//////////////////////////////////////////// 8// ACTIONS 9//////////////////////////////////////////// 10const actions = expose({ 11 getTracks, 12 putTracks, 13}); 14 15export type Actions = typeof actions; 16 17// Actions 18 19async function getTracks() { 20 const encoded = await get({ name: "tracks.json" }); 21 if (!encoded) return []; 22 const tracks = jsonDecode<Track[]>(encoded); 23 return transfer(tracks); 24} 25 26async function putTracks(tracks: Track[]) { 27 const data = jsonEncode(tracks); 28 await put({ name: "tracks.json", data }); 29} 30 31//////////////////////////////////////////// 32// 🛠️ 33//////////////////////////////////////////// 34 35async function get({ name }: { name: string }) { 36 return await IDB.get(`${IDB_PREFIX}/${name}`); 37} 38 39async function put({ data, name }: { data: Uint8Array; name: string }) { 40 return await IDB.set(`${IDB_PREFIX}/${name}`, data); 41}