UNPKG

nsole

Version:

A drop-in isomorphic console.* replacement that's pretty, small, fast, and flexible

50 lines (49 loc) 1.87 kB
// src/slim.ts var slim = (id, level, definitions, _pluginFn, _colorSpace, i = "_id", s = "_def", l = "_lvl", dstyle = definitions ?? {}, check = [3, "?", "#D6D"], _defs = { check, debug: [5, ">", "#89A"], log: [4, ">", "#2AE"], info: [4, "i", "#1AA"], warn: [2, "!", "#F77"], error: [1, "X", "#F36"], _fg: dstyle._fg ?? "#000", _dl: dstyle._dl ?? ["", ":", ":"], _css: dstyle._css ?? [ " ", " ", " ", " ", "color:^;" ] }, setStyle = (value, dvalue = _defs) => ({ ...dvalue, ...value ?? _defs }), lnoop = () => {}, gconsole = console) => new Proxy({ [i]: id ?? "{}", [s]: setStyle(), [l]: level ?? 5 }, { get: (target, prop) => { let defs = target[s] ?? _defs; let idef = defs[prop]; let ilvl = ~~target[l]; let rtn = prop == l || prop == i || prop == s ? target[prop] : ilvl && (ilvl == -1 || !idef && (prop in gconsole)) ? gconsole[prop] ?? gconsole.log : !ilvl || idef?.[0] > ilvl ? lnoop : null; if (!rtn && (target[prop] ?? lnoop) === lnoop) { target[s] = idef ? defs : setStyle({ [prop]: check }, defs); let nc = defs._fg == ""; let [_l, tag, bg, fg, cm] = target[s][prop]; let [ds, dm, de] = defs._dl.map((v) => nc ? v : `%c${v}%c`); target[prop] = (gconsole[cm ?? prop] ?? gconsole.log).bind(gconsole, ds + tag + dm + target[i]?.replace("{}", prop) + de, ...nc ? [] : defs._css.concat("").map((v) => v ? ((defs._css[4] ?? "") + v).replace(/\^+/g, (match) => match == "^" ? fg ?? bg : match == "^^" ? fg ?? defs._fg : bg) : v)); } return rtn || target[prop]; }, set: (target, prop, value) => { target[prop] = prop == l ? value ?? level : prop == i ? value ?? id : setStyle(value, target[s]); for (let k in target[s]) { target[k] = lnoop; } return true; } }); var slim_default = slim; export { slim, slim_default as default };