@hazae41/glacier
Version:
Yet another React data (re)fetching library
1 lines • 4.7 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../src/mods/storages/serac/index.ts"],"sourcesContent":["import { Nullable } from \"@hazae41/option\"\nimport { Database, Upgrader } from \"@hazae41/serac\"\nimport { Awaitable } from \"libs/promises/promises.js\"\nimport { Bicoder, Encoder } from \"mods/coders/coder.js\"\nimport { RawState } from \"mods/types/state.js\"\nimport { useRef } from \"react\"\nimport { AwaitingQueryStorage } from \"../awaiting/index.js\"\n\nexport type Collector = (\n storage: SeracQueryStorage,\n key: IDBValidKey\n) => Awaitable<void>\n\nexport interface Collected {\n readonly key: IDBValidKey\n readonly value: unknown\n readonly state: RawState\n}\n\nexport interface KeyValueCoders {\n readonly key: Encoder<string, IDBValidKey>\n readonly value: Bicoder<RawState, unknown>\n}\n\nexport interface SeracQueryStorageParams {\n readonly name: string\n readonly version: number\n readonly upgrader: Upgrader\n readonly collector: Collector\n readonly encoders: KeyValueCoders\n}\n\nexport class SeracQueryStorage {\n\n constructor(\n readonly database: Database,\n readonly encoders: KeyValueCoders,\n ) { }\n\n static async openAndCollectOrThrow(params: SeracQueryStorageParams) {\n const { name, version, upgrader, collector, encoders } = params\n\n const database = await Database.openOrThrow(name, version, upgrader)\n const storage = new SeracQueryStorage(database, encoders)\n\n for await (const key of database.collectOrThrow())\n await collector(storage, key)\n\n return storage\n }\n\n async getStoredOrThrow(storageKey: IDBValidKey): Promise<RawState> {\n const storageValue = await this.database.getOrThrow(storageKey)\n\n if (storageValue == null)\n return\n\n return await Promise.resolve(this.encoders.value.decodeOrThrow(storageValue))\n }\n\n async setStoredOrThrow(storageKey: IDBValidKey, state: Nullable<RawState>) {\n if (state == null)\n return await this.database.deleteOrThrow(storageKey)\n\n const storageValue = await Promise.resolve(this.encoders.value.encodeOrThrow(state))\n\n await this.database.setOrThrow(storageKey, storageValue, state.expiration ?? undefined)\n }\n\n async getOrThrow(cacheKey: string): Promise<RawState> {\n return await this.getStoredOrThrow(await Promise.resolve(this.encoders.key.encodeOrThrow(cacheKey)))\n }\n\n async setOrThrow(cacheKey: string, state: Nullable<RawState>) {\n return await this.setStoredOrThrow(await Promise.resolve(this.encoders.key.encodeOrThrow(cacheKey)), state)\n }\n\n}\n\nexport function useSeracStorage(params: SeracQueryStorageParams) {\n const storage = useRef<AwaitingQueryStorage<SeracQueryStorage>>()\n\n if (storage.current == null)\n storage.current = new AwaitingQueryStorage(SeracQueryStorage.openAndCollectOrThrow(params))\n\n return storage.current\n}"],"names":[],"mappings":";;;;MAgCa,iBAAiB,CAAA;AAGjB,IAAA,QAAA,CAAA;AACA,IAAA,QAAA,CAAA;IAFX,WACW,CAAA,QAAkB,EAClB,QAAwB,EAAA;QADxB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;QAClB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAgB;KAC9B;AAEL,IAAA,aAAa,qBAAqB,CAAC,MAA+B,EAAA;AAChE,QAAA,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;AAE/D,QAAA,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QACpE,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAEzD,WAAW,MAAM,GAAG,IAAI,QAAQ,CAAC,cAAc,EAAE;AAC/C,YAAA,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AAE/B,QAAA,OAAO,OAAO,CAAA;KACf;IAED,MAAM,gBAAgB,CAAC,UAAuB,EAAA;QAC5C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAE/D,IAAI,YAAY,IAAI,IAAI;YACtB,OAAM;AAER,QAAA,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAA;KAC9E;AAED,IAAA,MAAM,gBAAgB,CAAC,UAAuB,EAAE,KAAyB,EAAA;QACvE,IAAI,KAAK,IAAI,IAAI;YACf,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;AAEtD,QAAA,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;AAEpF,QAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC,CAAA;KACxF;IAED,MAAM,UAAU,CAAC,QAAgB,EAAA;QAC/B,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;KACrG;AAED,IAAA,MAAM,UAAU,CAAC,QAAgB,EAAE,KAAyB,EAAA;QAC1D,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;KAC5G;AAEF,CAAA;AAEK,SAAU,eAAe,CAAC,MAA+B,EAAA;AAC7D,IAAA,MAAM,OAAO,GAAG,MAAM,EAA2C,CAAA;AAEjE,IAAA,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI;AACzB,QAAA,OAAO,CAAC,OAAO,GAAG,IAAI,oBAAoB,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAA;IAE7F,OAAO,OAAO,CAAC,OAAO,CAAA;AACxB;;;;"}