@neodx/log
Version:
A lightweight universal logging framework
1 lines • 4.32 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","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","stack","keys","getCircularKey","index","cycleRef","slice","key","length","push","thisIndex","indexOf","splice","Infinity","includes","tokens","join","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":"mKAIaA,IAAAA,EAAgB,CAACC,EAAgBC,IAC5CC,KAAKC,SAAS,CAACH,EAAOI,AAKxB,WACE,IAAMC,EAAmB,EAAE,CACrBC,EAAiB,EAAE,CAEnBC,EAAiB,AAACC,GAAkBC,EAASD,EAAQ,EAAIF,EAAKI,KAAK,CAAC,EAAGF,GAAS,EAAE,EAExF,OAAO,SAAiCG,CAAW,CAAEX,CAAc,EACjE,GAAIK,AAAiB,IAAjBA,EAAMO,MAAM,CAGd,OAFAP,EAAMQ,IAAI,CAACb,GAEJA,EAGT,IAAMc,EAAYT,EAAMU,OAAO,CAAC,IAAI,QAWpC,CAVoBD,GAAa,GAG/BT,EAAMW,MAAM,CAACF,EAAY,GACzBR,EAAKU,MAAM,CAACF,EAAWG,IAAUN,KAEjCN,EAAMQ,IAAI,CAAC,IAAI,EACfP,EAAKO,IAAI,CAACF,IAGRN,EAAMa,QAAQ,CAAClB,IACVO,EAAeF,EAAMU,OAAO,CAACf,IAG/BA,CACT,CACF,IAnC8CC,GAEjCQ,EAAW,CAACU,EAAmB,EAAE,GAC5C,CAAC,SAAS,EAAEA,EAAOP,MAAM,CAAG,EAAI,IAAMO,EAAOC,IAAI,CAAC,KAAO,GAAG,CAAC,CAAC,CCCzD,SAASC,EAAOC,CAAgB,CAAEC,CAAmB,EAC1D,IAAMC,EAAkBC,MAAMC,IAAI,CAACH,GAC7B,CAACI,EAAS,GAAGC,EAAM,CAAGN,EAASO,KAAK,CAAC,KAa3C,OAAOC,AAZQF,EAAMG,MAAM,CACzB,CAACC,EAAKC,KACJ,IAAMC,EAAYD,CAAI,CAAC,EAAE,CACnBE,EAASC,EAAOC,EAAiBH,GAAaG,CAAe,CAACH,EAAU,CAAG,KAIjF,OAFAF,EAAInB,IAAI,CAACsB,EAASA,EAAOX,EAAgBc,KAAK,IAAM,KACpDN,EAAInB,IAAI,CAACsB,EAASF,EAAKvB,KAAK,CAACwB,EAAUtB,MAAM,EAAIqB,GAC1CD,GAET,CAACL,EAAQ,EAGGP,IAAI,CAAC,GACrB,CAEA,IAAMiB,EAAkB,CACtBE,EAAG,AAACvC,GAAmBwC,OAAOxC,GAC9ByC,EAAG,AAACzC,GAAmB0C,KAAKC,KAAK,CAACC,OAAO5C,IACzC6C,EAAG,AAAC7C,GAAmB4C,OAAOE,QAAQ,CAACN,OAAOxC,GAAQ,IACtD+C,EAAG,AAAC/C,GAAmB4C,OAAOI,UAAU,CAACR,OAAOxC,IAChDiD,EAAGlD,EACHmD,EAAGnD,EACHoD,EAAGpD,CACL"}