UNPKG

@hazae41/glacier

Version:

Yet another React data (re)fetching library

51 lines (47 loc) 1.98 kB
'use strict'; var serac = require('@hazae41/serac'); var react = require('react'); var index = require('../awaiting/index.cjs'); class SeracQueryStorage { database; encoders; constructor(database, encoders) { this.database = database; this.encoders = encoders; } static async openAndCollectOrThrow(params) { const { name, version, upgrader, collector, encoders } = params; const database = await serac.Database.openOrThrow(name, version, upgrader); const storage = new SeracQueryStorage(database, encoders); for await (const key of database.collectOrThrow()) await collector(storage, key); return storage; } async getStoredOrThrow(storageKey) { const storageValue = await this.database.getOrThrow(storageKey); if (storageValue == null) return; return await Promise.resolve(this.encoders.value.decodeOrThrow(storageValue)); } async setStoredOrThrow(storageKey, state) { if (state == null) return await this.database.deleteOrThrow(storageKey); const storageValue = await Promise.resolve(this.encoders.value.encodeOrThrow(state)); await this.database.setOrThrow(storageKey, storageValue, state.expiration ?? undefined); } async getOrThrow(cacheKey) { return await this.getStoredOrThrow(await Promise.resolve(this.encoders.key.encodeOrThrow(cacheKey))); } async setOrThrow(cacheKey, state) { return await this.setStoredOrThrow(await Promise.resolve(this.encoders.key.encodeOrThrow(cacheKey)), state); } } function useSeracStorage(params) { const storage = react.useRef(); if (storage.current == null) storage.current = new index.AwaitingQueryStorage(SeracQueryStorage.openAndCollectOrThrow(params)); return storage.current; } exports.SeracQueryStorage = SeracQueryStorage; exports.useSeracStorage = useSeracStorage; //# sourceMappingURL=index.cjs.map