@fajarnugraha37/error
Version:
Runtime-agnostic error handling library with structured errors, adapters, and validation support for Bun, Node.js, and browsers
2 lines (1 loc) • 1.25 kB
JavaScript
var S=Object.defineProperty;var f=(n,t)=>S(n,"name",{value:t,configurable:!0});var _=[/pass(word)?/i,/token/i,/secret/i,/authorization/i,/api[_-]?key/i,/private[_-]?key/i];function R(n){let t=n[n.length-1];return t?_.some(e=>e.test(String(t))):!1}f(R,"defaultRedactionPredicate");function u(n,t=R){return a(n,t,[],new WeakSet,0)}f(u,"redact");function a(n,t,e,r,c){if(c>10)return"[MAX_DEPTH_EXCEEDED]";if(n==null)return n;if(typeof n!="object")return t(e)?"[REDACTED]":n;if(r.has(n))return"[CIRCULAR]";if(r.add(n),Array.isArray(n))return n.length>1e3?n.slice(0,1e3).map((o,i)=>a(o,t,[...e,String(i)],r,c+1)).concat("[TRUNCATED]"):n.map((o,i)=>a(o,t,[...e,String(i)],r,c+1));if(n instanceof Date)return n.toISOString();if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};let s={},E=Object.entries(n);if(E.length>1e3){let o=E.slice(0,1e3);for(let[i,g]of o)s[i]=a(g,t,[...e,i],r,c+1);return s.__truncated__=!0,s}for(let[o,i]of E)s[o]=a(i,t,[...e,o],r,c+1);return s}f(a,"redactRecursive");function A(n,t,e){try{let r=t?u(n,t):u(n);return JSON.stringify(r,null,e)}catch(r){return`[STRINGIFY_ERROR: ${r instanceof Error?r.message:String(r)}]`}}f(A,"safeStringify");export{R as defaultRedactionPredicate,u as redact,A as safeStringify};