UNPKG

@schukai/monster

Version:

Monster is a simple library for creating fast, robust and lightweight websites.

82 lines (78 loc) 2.11 kB
function createStorage() { let UNSET = Symbol(); let s = {}, noopCallback = () => { }, _itemInsertionCallback = noopCallback; Object.defineProperty(s, 'setItem', { get: () => { return (k, v = UNSET) => { if (v === UNSET) { throw new TypeError(`Failed to execute 'setItem' on 'Storage': 2 arguments required, but only 1 present.`); } k = k + ''; if (!s.hasOwnProperty(k)) { _itemInsertionCallback(s.length); } s[k] = v + ''; }; } }); Object.defineProperty(s, 'getItem', { get: () => { return k => { k = k + ''; if (s.hasOwnProperty(k)) { return s[k]; } else { return null; } }; } }); Object.defineProperty(s, 'removeItem', { get: () => { return k => { k = k + ''; if (s.hasOwnProperty(k)) { delete s[k]; } }; } }); Object.defineProperty(s, 'clear', { get: () => { return () => { for (let k in s) { if (s.hasOwnProperty(k)) { delete s[k]; } } }; } }); Object.defineProperty(s, 'length', { get: () => { return Object.keys(s).length; } }); Object.defineProperty(s, "key", { value: k => { let key = Object.keys(s)[k]; return (!key) ? null : key; }, }); Object.defineProperty(s, 'itemInsertionCallback', { get: () => { return _itemInsertionCallback; }, set: v => { if (!v || typeof v != 'function') { v = noopCallback; } _itemInsertionCallback = v; } }); return s; } export {createStorage};