astro
Version:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
48 lines (47 loc) • 1.05 kB
JavaScript
function createManifestMemo(derive) {
const cache = /* @__PURE__ */ new WeakMap();
return {
get(manifest) {
if (cache.has(manifest)) {
return cache.get(manifest);
}
const value = derive(manifest);
cache.set(manifest, value);
return value;
},
has(manifest) {
return cache.has(manifest);
},
set(manifest, value) {
cache.set(manifest, value);
},
invalidate(manifest) {
cache.delete(manifest);
}
};
}
function createAsyncManifestMemo(derive) {
const cache = /* @__PURE__ */ new WeakMap();
return {
get(manifest) {
let promise = cache.get(manifest);
if (!promise) {
promise = derive(manifest);
cache.set(manifest, promise);
promise.catch(() => {
if (cache.get(manifest) === promise) {
cache.delete(manifest);
}
});
}
return promise;
},
invalidate(manifest) {
cache.delete(manifest);
}
};
}
export {
createAsyncManifestMemo,
createManifestMemo
};