UNPKG

quasar

Version:

Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time

148 lines (127 loc) 3.48 kB
import { noop } from '../../../utils/event/event.js' import { isDate, isRegexp } from '../../../utils/is/is.js' function encode (value) { if (isDate(value) === true) { return '__q_date|' + value.getTime() } if (isRegexp(value) === true) { return '__q_expr|' + value.source } if (typeof value === 'number') { return '__q_numb|' + value } if (typeof value === 'boolean') { return '__q_bool|' + (value ? '1' : '0') } if (typeof value === 'string') { return '__q_strn|' + value } if (typeof value === 'function') { return '__q_strn|' + value.toString() } if (value === Object(value)) { return '__q_objt|' + JSON.stringify(value) } // hmm, we don't know what to do with it, // so just return it as is return value } function decode (value) { const length = value.length if (length < 9) { // then it wasn't encoded by us return value } const type = value.substring(0, 8) const source = value.substring(9) switch (type) { case '__q_date': const number = Number(source) return new Date(Number.isNaN(number) === true ? source : number) case '__q_expr': return new RegExp(source) case '__q_numb': return Number(source) case '__q_bool': return Boolean(source === '1') case '__q_strn': return '' + source case '__q_objt': return JSON.parse(source) default: // hmm, we reached here, we don't know the type, // then it means it wasn't encoded by us, so just // return whatever value it is return value } } export function getEmptyStorage () { const getVal = () => null return { has: () => false, // alias for hasItem; TODO: remove in Qv3 hasItem: () => false, getLength: () => 0, getItem: getVal, getIndex: getVal, getKey: getVal, getAll: () => {}, getAllKeys: () => [], set: noop, // alias for setItem; TODO: remove in Qv3 setItem: noop, remove: noop, // alias for removeItem; TODO: remove in Qv3 removeItem: noop, clear: noop, isEmpty: () => true } } export function getStorage (type) { const webStorage = window[ type + 'Storage' ], get = key => { const item = webStorage.getItem(key) return item ? decode(item) : null } const hasItem = key => webStorage.getItem(key) !== null const setItem = (key, value) => { webStorage.setItem(key, encode(value)) } const removeItem = key => { webStorage.removeItem(key) } return { has: hasItem, // TODO: remove in Qv3 hasItem, getLength: () => webStorage.length, getItem: get, getIndex: index => { return index < webStorage.length ? get(webStorage.key(index)) : null }, getKey: index => { return index < webStorage.length ? webStorage.key(index) : null }, getAll: () => { let key const result = {}, len = webStorage.length for (let i = 0; i < len; i++) { key = webStorage.key(i) result[ key ] = get(key) } return result }, getAllKeys: () => { const result = [], len = webStorage.length for (let i = 0; i < len; i++) { result.push(webStorage.key(i)) } return result }, set: setItem, // TODO: remove in Qv3 setItem, remove: removeItem, // TODO: remove in Qv3 removeItem, clear: () => { webStorage.clear() }, isEmpty: () => webStorage.length === 0 } }