@stryke/json
Version:
A package containing JSON parsing/stringify utilities used by Storm Software.
2 lines (1 loc) • 945 B
JavaScript
import{isNumber as c}from"@stryke/type-checks/is-number";import{isUndefined as o}from"@stryke/type-checks/is-undefined";export const invalidKeyChars=["@","/","#","$"," ",":",";",",",".","!","?","&","=","+","-","*","%","^","~","|","\\",'"',"'","`","{","}","[","]","(",")","<",">"],stringify=(r,e=2)=>{const n=c(e)?" ".repeat(e):e;switch(r){case null:return"null";case void 0:return'"undefined"';case!0:return"true";case!1:return"false";case Number.POSITIVE_INFINITY:return"infinity";case Number.NEGATIVE_INFINITY:return"-infinity"}if(Array.isArray(r))return`[${n}${r.map(s=>stringify(s,n)).join(`,${n}`)}${n}]`;if(r instanceof Uint8Array)return r.toString();switch(typeof r){case"number":return`${r}`;case"string":return JSON.stringify(r);case"object":{const s=Object.keys(r).filter(t=>!o(r[t]));return`{${n}${s.map(t=>`${invalidKeyChars.some(i=>t.includes(i))?`"${t}"`:t}: ${n}${stringify(r[t],n)}`).join(`,${n}`)}${n}}`}default:return"null"}};