UNPKG

summit-logger

Version:

A logger/debug tool for Summit University Dev Students. Creates "pretty-print" log messages, pleasant to the eye and easy to digest. (Summit University All Rights Reserved)

80 lines (68 loc) 2.4 kB
class SummitLogger { constructor(namespace) { this.namespace = namespace; this.enabled = this.isEnabled(); this.color = this.generateColor(); this._children = {}; } isEnabled() { const storedDebugValue = storage.getItem("debug"); if (!storedDebugValue) return false; const debugNamespaces = new Set( storedDebugValue.split(",").map((ns) => ns.trim()) ); return ( debugNamespaces.has("*") || debugNamespaces.has(this.namespace) || [...debugNamespaces].some((ns) => ns.startsWith(`${this.namespace}:`)) ); } generateColor() { let hash = 0; for (let i = 0; i < this.namespace.length; i++) { hash = this.namespace.charCodeAt(i) + ((hash << 5) - hash); } const hue = Math.abs(hash) % 360; return `color: hsl(${hue}, 70%, 60%); font-weight: bold;`; } log(message, ...args) { if (!this.enabled) return; console.groupCollapsed(`%c${this.namespace}: ${message}`, this.color); args.forEach((arg) => console.log(arg)); console.groupEnd(); } extend(subspace) { if (!this._children) this._children = {}; if (!this._children[subspace]) { this._children[subspace] = new SummitLogger(`${this.namespace}:${subspace}`); } return this._children[subspace]; } enable() { const debugNamespaces = new Set( (storage.getItem("debug") || "").split(",").map((ns) => ns.trim()) ); debugNamespaces.add(this.namespace); storage.setItem("debug", [...debugNamespaces].join(",")); this.enabled = true; } disable() { const debugNamespaces = new Set( (storage.getItem("debug") || "").split(",").map((ns) => ns.trim()) ); debugNamespaces.delete(this.namespace); storage.setItem("debug", [...debugNamespaces].join(",")); this.enabled = false; } } const storage = typeof localStorage !== "undefined" ? localStorage : { store: {}, getItem: (key) => storage.store[key] || null, setItem: (key, value) => (storage.store[key] = value), clear: () => (storage.store = {}), }; const _summitLogger = (namespace) => new SummitLogger(namespace); export default _summitLogger;