schreiben/src/lib/worldStorage.ts
Cat /dev/Nulo 077ea1af56
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
breadcrumbs con titulo
esta implementación es muy cursed
2023-08-29 21:47:02 -03:00

36 lines
1 KiB
TypeScript

import type { Readable, Subscriber } from "svelte/store";
import { getWorldY, type WorldIdentifier } from "./doc";
const localStorageKey = "schreiben-worlds";
let subs: Subscriber<WorldIdentifier[]>[] = [];
export function loadWorlds(): Promise<WorldIdentifier[]> {
let json = localStorage.getItem(localStorageKey);
if (!json) json = "[]";
const worlds = JSON.parse(json);
for (const world of worlds) {
// empezar a cargar el Ydoc
getWorldY(world);
}
return Promise.resolve(worlds);
}
export async function writeWorlds(
callback: (worlds: WorldIdentifier[]) => WorldIdentifier[],
): Promise<WorldIdentifier[]> {
const oldWorlds = await loadWorlds();
const newWorlds = callback(oldWorlds);
localStorage.setItem(localStorageKey, JSON.stringify(newWorlds));
for (const sub of subs) sub(newWorlds);
return newWorlds;
}
export const worldsStore: Readable<WorldIdentifier[]> = {
subscribe(run) {
subs.push(run);
loadWorlds().then(run);
return () => (subs = subs.filter((s) => s !== run));
},
};