UNPKG

@waiting/log

Version:

Lightweight logging for browser

98 lines (89 loc) 2.63 kB
import { isLocalStorageKey, isLogLevelToPrune, isTimeToPrune, validateStoragePrefix } from './util' /** * Save message into LocalStorage * * @returns key of LocalStorage item, blank if 'silent' */ export function localSave(level, data, prefix, maxLen) { /* istanbul ignore else */ if (level === 'silent') { return '' } const time = new Date().toISOString() const key = `${prefix}-${level}-${time}` save(key, data, maxLen) return key } function save(key, data, maxLen) { let cont = data /* istanbul ignore else */ if (typeof data === 'string' && data.length > maxLen) { cont = data.slice(0, maxLen) + ' ...' } const content = JSON.stringify(cont) /* istanbul ignore else */ if (typeof localStorage === 'object') { try { localStorage.setItem(encodeURIComponent(key), content) } catch (ex) { console.error(ex) } } } /** * Remove expiry logs in LocalStorage. * If level omit prune all leves * * @param storagePrefix * @param pruneTime - delte logs in LocalStorage before this Time * @param logLevel */ export function pruneLogs(storagePrefix, pruneTime, pruneLogLevel) { /* istanbul ignore next */ if (typeof localStorage !== 'object') { return } validateStoragePrefix(storagePrefix) const count = localStorage.length /* istanbul ignore next */ if (!count) { return } const encodeKeys = new Array(count) // Caution: retrieve keys before delte!! // tslint:disable-next-line:prefer-for-of for (let i = 0; i < count; i++) { // format: <prefix>-<level>-<ISOString> // eg: logs-debug-2018-09-02T12:22:22.775Z const encodeKey = localStorage.key(i) /* istanbul ignore if */ if (!encodeKey) { continue } else { encodeKeys[i] = encodeKey } } // tslint:disable-next-line:prefer-for-of for (let i = 0; i < count; i++) { const encodeKey = encodeKeys[i] const key = decodeURIComponent(encodeKey) /* istanbul ignore else */ if (!isLocalStorageKey(key, storagePrefix)) { continue } const arr = key.split('-') const logLevel = arr[1] const time = arr.slice(2).join('-') /* istanbul ignore else */ if (!isLogLevelToPrune(logLevel, pruneLogLevel)) { continue } /* istanbul ignore else */ if (!isTimeToPrune(time, pruneTime)) { continue } localStorage.removeItem(encodeKey) } }