UNPKG

@neodx/log

Version:

A lightweight universal logging framework

78 lines (77 loc) 2.69 kB
import { colors as e } from '@neodx/colors'; import { i as r } from '../_internal/read-arguments-CPC3VkQ4.mjs'; import { H as o, c as t, a as s, f as n, b as i, d as l } from '../_internal/index-DFam5V4O.mjs'; function a({ simple: r = 'development' === process.env.NODE_ENV, colors: n = e, logger: i = t(), getRequestId: l = s(), getMeta: a, getErrorMeta: d, getErrorMessage: p = r ? c : u, getRequestMeta: $, getRequestMessage: b = f, getResponseMeta: h, getResponseMessage: E = m, shouldLog: v = !0, shouldLogError: T = !0, shouldLogRequest: w = !1, shouldLogResponse: L = !0 } = {}) { return function (e, t, s) { if (!g(v, e, t)) return s?.(); e.id ??= l(e, t); let f = Date.now(), m = i.fork({ meta: { ...i.meta, ...a?.(e, t), ...(!r && { requestId: e.id, req: e }) } }), u = { req: e, res: t, logger: m, colors: n, responseTime: 0 }; (e.log ??= m), (t[o] = f); let c = e => ( t.removeListener('finish', c), t.removeListener('close', c), t.removeListener('error', c), (function (e) { let { error: o, logger: t, res: s, responseTime: n } = e, i = o || s.err || (s.statusCode >= 500 && Error('failed with status code ' + s.statusCode)); if (i) { if (!g(T, e)) return; let o = d?.(e) ?? { err: i, res: s, responseTime: n }; if (r) { t.error({ err: i }, p(e)), t.debug(o, 'Error details:'); return; } t.error(o, p(e)); return; } if (!g(L, e)) return; let l = h?.(e) ?? { res: s, responseTime: n }; if (r) { t.done(E(e)), t.debug(l, 'Response details:'); return; } t.done(l, E(e)); })({ ...u, error: e, responseTime: Date.now() - f }) ); t.on('error', c), t.on('close', c), t.on('finish', c), g(w, u) && (r ? (m.info(b(u)), $ && m.debug($(u), 'Request details:')) : m.info($?.(u) ?? {}, b(u))), s?.(); }; } let d = (e, { ignoreWritableEnded: r = !1, delimiter: o = e => ' ' } = {}) => t => { let s = n(t.req, t.colors, o(t)); return r || t.res.writableEnded ? e(s, t) : `(aborted) ${s}`; }, f = d(r, { ignoreWritableEnded: !0 }), m = d((e, r) => `${r.colors.greenBright(i(r.responseTime))} ${e}`), u = d((e, r) => `${r.colors.redBright(i(r.responseTime))} ${e}`), c = d((e, r) => `${r.colors.redBright(i(r.responseTime))} ${e}`, { delimiter: ({ colors: e, res: r }) => e.italic(` (${l(r)}) `) }), g = (e, ...r) => ('function' == typeof e ? e(...r) : e); export { a as createHttpLogger }; //# sourceMappingURL=index.mjs.map