key-value-compress
Version:
Key-Value interface to deflate, split, concatenate and inflate storage.
56 lines (55 loc) • 1.73 kB
JavaScript
;
/**
* _transform.ts
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.stringifyKVS = exports.encodeKVS = exports.keyFilterKVS = exports.namespaceKVS = void 0;
/**
* wrap key-value storage to prepend a prefix string for storage keys
*/
function namespaceKVS(storage, prefix) {
if (!prefix)
return storage;
return keyFilterKVS(storage, key => prefix + key);
}
exports.namespaceKVS = namespaceKVS;
function keyFilterKVS(storage, filter) {
const out = {};
out.get = (key) => storage.get(filter(key));
out.set = (key, value) => storage.set(filter(key), value);
if (storage.delete)
out.delete = (key) => storage.delete(filter(key));
if (storage.has)
out.has = (key) => storage.has(filter(key));
return out;
}
exports.keyFilterKVS = keyFilterKVS;
/**
* transform key-value storage to apply encode() and decode() methods
*/
function encodeKVS(storage, filter) {
const out = {};
out.get = async (key) => {
const value = await storage.get(key);
if ("undefined" === typeof value)
return;
return filter.decode(value);
};
out.set = async (key, value) => storage.set(key, filter.encode(value));
if (storage.delete)
out.delete = async (key) => storage.delete(key);
if (storage.has)
out.has = async (key) => storage.has(key);
return out;
}
exports.encodeKVS = encodeKVS;
/**
* transform key-value storage to apply stringify() and parse() methods
*/
function stringifyKVS(storage, filter) {
return encodeKVS(storage, {
encode: value => filter.stringify(value),
decode: value => filter.parse(value),
});
}
exports.stringifyKVS = stringifyKVS;