{"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","stack","keys","getCircularKey","index","cycleRef","slice","key","length","push","thisIndex","indexOf","splice","Infinity","includes","tokens","join","tokenFormatters","s","String","d","Math","floor","Number","i","parseInt","f","parseFloat","o","O","j","template","replaces","currentReplaces","Array","from","leading","parts","split","result","reduce","acc","part","tokenName","format","hasOwn","shift"],"mappings":"0DAIaA,MAAAA,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,CCmB1DC,EAAkB,CACtBC,EAAG,AAACtB,GAAmBuB,OAAOvB,GAC9BwB,EAAG,AAACxB,GAAmByB,KAAKC,KAAK,CAACC,OAAO3B,IACzC4B,EAAG,AAAC5B,GAAmB2B,OAAOE,QAAQ,CAACN,OAAOvB,GAAQ,IACtD8B,EAAG,AAAC9B,GAAmB2B,OAAOI,UAAU,CAACR,OAAOvB,IAChDgC,EAAGjC,EACHkC,EAAGlC,EACHmC,EAAGnC,CACL,iHA1BO,SAAgBoC,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,EAAO5B,MAAAA,CAAAA,EAAiB0B,GAAa1B,CAAe,CAAC0B,EAAU,CAAG,KAIjF,OAFAF,EAAIhC,IAAI,CAACmC,EAASA,EAAOX,EAAgBa,KAAK,IAAM,KACpDL,EAAIhC,IAAI,CAACmC,EAASF,EAAKpC,KAAK,CAACqC,EAAUnC,MAAM,EAAIkC,GAC1CD,GAET,CAACL,EAAQ,EAGGpB,IAAI,CAAC,GACrB"}