UNPKG

unstorage

Version:
69 lines (68 loc) 1.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); module.exports = void 0; var _utils = require("./utils/index.cjs"); const OVERLAY_REMOVED = "__OVERLAY_REMOVED__"; var _default = (0, _utils.defineDriver)(options => { return { name: "overlay", options, async hasItem(key) { for (const layer of options.layers) { if (await layer.hasItem(key)) { if (layer === options.layers[0]) { if ((await options.layers[0]?.getItem(key)) === OVERLAY_REMOVED) { return false; } } return true; } } return false; }, async getItem(key) { for (const layer of options.layers) { const value = await layer.getItem(key); if (value === OVERLAY_REMOVED) { return null; } if (value !== null) { return value; } } return null; }, // TODO: Support native meta // async getMeta (key) {}, async setItem(key, value) { await options.layers[0]?.setItem(key, value); }, async removeItem(key) { await options.layers[0]?.setItem(key, OVERLAY_REMOVED); }, async getKeys(base) { const allKeys = await Promise.all(options.layers.map(async layer => { const keys = await layer.getKeys(base); return keys.map(key => (0, _utils.normalizeKey)(key)); })); const uniqueKeys = Array.from(new Set(allKeys.flat())); const existingKeys = await Promise.all(uniqueKeys.map(async key => { if ((await options.layers[0]?.getItem(key)) === OVERLAY_REMOVED) { return false; } return key; })); return existingKeys.filter(Boolean); }, async dispose() { await Promise.all(options.layers.map(async layer => { if (layer.dispose) { await layer.dispose(); } })); } }; }); module.exports = _default;