@hazae41/glacier
Version:
Yet another React data (re)fetching library
49 lines (46 loc) • 1.61 kB
JavaScript
import { core } from '../../core/core.mjs';
var Simple;
(function (Simple) {
function getCacheKey(key) {
if (typeof key === "string")
return key;
return JSON.stringify(key);
}
Simple.getCacheKey = getCacheKey;
async function fetchOrThrow(cacheKey, signal, settings) {
const fetched = await settings.fetcher(settings.key, { signal });
return await core.replaceOrThrow(cacheKey, fetched, settings);
}
Simple.fetchOrThrow = fetchOrThrow;
/**
* Optimistic update
* @param core
* @param key
* @param cacheKey
* @param fetcher
* @param updater
* @param settings
* @returns
*/
async function updateOrThrow(cacheKey, updater, signal, settings) {
const uuid = crypto.randomUUID();
try {
const generator = updater();
let next = await generator.next();
for (; !next.done; next = await generator.next())
await core.optimizeOrThrow(cacheKey, uuid, next.value, settings);
const fetcher = next.value ?? settings.fetcher;
const fetched = await fetcher(settings.key, { signal, cache: "reload" });
core.deoptimize(cacheKey, uuid);
return await core.replaceOrThrow(cacheKey, fetched, settings);
}
catch (e) {
core.deoptimize(cacheKey, uuid);
core.reoptimizeOrThrow(cacheKey, settings);
throw e;
}
}
Simple.updateOrThrow = updateOrThrow;
})(Simple || (Simple = {}));
export { Simple };
//# sourceMappingURL=helper.mjs.map