UNPKG

@neodx/log

Version:

A lightweight universal logging framework

1 lines 5.54 kB
{"version":3,"file":"index.cjs","sources":["../../src/utils/serialize-json.ts","../../src/utils/printf.ts"],"sourcesContent":["/**\n * Safe version of JSON.stringify, prevents circular refs\n * @example serializeJSON({ record: { value: 1, name: 'age' }, valid: false })\n */\nexport const serializeJSON = (value: unknown, space?: string | number) =>\n JSON.stringify(value, createJSONReplacer(), space);\n\nexport const cycleRef = (tokens: string[] = []) =>\n `[Circular${tokens.length > 0 ? ' ' + tokens.join('.') : ''}]`;\n\nfunction createJSONReplacer() {\n const stack: unknown[] = [];\n const keys: string[] = [];\n\n const getCircularKey = (index: number) => cycleRef(index > 0 ? keys.slice(0, index) : []);\n\n return function replacer(this: unknown, key: string, value: unknown) {\n if (stack.length === 0) {\n stack.push(value);\n\n return value;\n }\n\n const thisIndex = stack.indexOf(this);\n const thisInStack = thisIndex >= 0;\n\n if (thisInStack) {\n stack.splice(thisIndex + 1);\n keys.splice(thisIndex, Infinity, key);\n } else {\n stack.push(this);\n keys.push(key);\n }\n\n if (stack.includes(value)) {\n return getCircularKey(stack.indexOf(value));\n }\n\n return value;\n };\n}\n","import { hasOwn } from '@neodx/std';\nimport { serializeJSON } from './serialize-json';\n\n/**\n * Tiny implementation of printf function.\n * Supports only \"%s\" (string) and \"%d\" (number).\n * @see https://github.com/floatdrop/pff\n * @example printf('%s in %ds.', ['Done', 12]) => \"Done on 12s.\"\n */\nexport function printf(template: string, replaces: unknown[]) {\n const currentReplaces = Array.from(replaces);\n const [leading, ...parts] = template.split('%');\n const result = parts.reduce(\n (acc, part) => {\n const tokenName = part[0]!;\n const format = hasOwn(tokenFormatters, tokenName) ? tokenFormatters[tokenName] : null;\n\n acc.push(format ? format(currentReplaces.shift()) : '%');\n acc.push(format ? part.slice(tokenName.length) : part);\n return acc;\n },\n [leading] as unknown[]\n );\n\n return result.join('');\n}\n\nconst tokenFormatters = {\n s: (value: unknown) => String(value),\n d: (value: unknown) => Math.floor(Number(value)),\n i: (value: unknown) => Number.parseInt(String(value), 10),\n f: (value: unknown) => Number.parseFloat(String(value)),\n o: serializeJSON,\n O: serializeJSON,\n j: serializeJSON\n};\n"],"names":["serializeJSON","value","space","JSON","stringify","createJSONReplacer","cycleRef","tokens","length","join","stack","keys","getCircularKey","index","slice","replacer","key","push","thisIndex","indexOf","thisInStack","splice","Infinity","includes","printf","template","replaces","currentReplaces","Array","from","leading","parts","split","result","reduce","acc","part","tokenName","format","hasOwn","tokenFormatters","shift","s","String","d","Math","floor","Number","i","parseInt","f","parseFloat","o","O","j"],"mappings":"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"}