From a34d020bc6b252e842f042d935c7a0e6444460cf Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sat, 17 May 2025 21:31:42 -0400 Subject: sync --- js/src/storage/storage.ts | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 js/src/storage/storage.ts (limited to 'js/src/storage') diff --git a/js/src/storage/storage.ts b/js/src/storage/storage.ts new file mode 100644 index 000000000..b84e089cc --- /dev/null +++ b/js/src/storage/storage.ts @@ -0,0 +1,39 @@ +import { FileStorage } from "@flystorage/file-storage"; +import { LocalStorageAdapter } from "@flystorage/local-fs"; +import fs from "fs/promises"; +import { Log } from "../util/log"; +import { App } from "../app"; +import { AppPath } from "../app/path"; + +export namespace Storage { + const log = Log.create({ service: "storage" }); + + function state() { + return App.service("storage", async () => { + const app = await App.use(); + const storageDir = AppPath.storage(app.root); + await fs.mkdir(storageDir, { recursive: true }); + const storage = new FileStorage(new LocalStorageAdapter(storageDir)); + await storage.write("test", "test"); + log.info("created", { path: storageDir }); + return { + storage, + }; + }); + } + + function expose(key: T) { + const fn = FileStorage.prototype[key]; + return async ( + ...args: Parameters + ): Promise> => { + const { storage } = await state(); + const match = storage[key]; + // @ts-ignore + return match.call(storage, ...args); + }; + } + + export const write = expose("write"); + export const read = expose("read"); +} -- cgit v1.2.3