[{"data":1,"prerenderedAt":5701},["ShallowReactive",2],{"navigation_docs":3,"-learn-structured-errors":607,"-learn-structured-errors-surround":5696},[4,35,85,143,323,484,543,582],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Start","\u002Fstart","1.start",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",{"title":30,"path":31,"stem":32,"icon":33},"Choose your logger","\u002Fstart\u002Ftypescript-logging-library","1.start\u002F5.typescript-logging-library","i-lucide-file-code",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Learn","\u002Flearn","2.learn",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":66,"path":67,"stem":68,"icon":69},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":71,"path":72,"stem":73,"icon":74},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":76,"path":77,"stem":78,"icon":79},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":81,"path":82,"stem":83,"icon":84},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":86,"path":87,"stem":88,"children":89,"page":34},"CLI","\u002Fcli","3.cli",[90,93,98,103,108,113,118,123,128,133,138],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"logs","\u002Fcli\u002Flogs","3.cli\u002F10.logs","i-lucide-scroll-text",{"title":104,"path":105,"stem":106,"icon":107},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":109,"path":110,"stem":111,"icon":112},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":114,"path":115,"stem":116,"icon":117},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":119,"path":120,"stem":121,"icon":122},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":124,"path":125,"stem":126,"icon":127},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":129,"path":130,"stem":131,"icon":132},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":134,"path":135,"stem":136,"icon":137},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":139,"path":140,"stem":141,"icon":142},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":144,"path":145,"stem":146,"children":147,"page":34},"Integrate","\u002Fintegrate","4.integrate",[148,152,235],{"title":41,"path":149,"stem":150,"icon":151},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":153,"path":154,"stem":155,"children":156,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[157,160,190,215],{"title":41,"path":158,"stem":159,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":161,"path":162,"stem":163,"children":164,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[165,170,175,180,185],{"title":166,"path":167,"stem":168,"icon":169},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":171,"path":172,"stem":173,"icon":174},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":176,"path":177,"stem":178,"icon":179},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":181,"path":182,"stem":183,"icon":184},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":186,"path":187,"stem":188,"icon":189},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":191,"path":192,"stem":193,"children":194,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[195,200,205,210],{"title":196,"path":197,"stem":198,"icon":199},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":201,"path":202,"stem":203,"icon":204},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":206,"path":207,"stem":208,"icon":209},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":211,"path":212,"stem":213,"icon":214},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":216,"path":217,"stem":218,"children":219,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[220,225,230],{"title":221,"path":222,"stem":223,"icon":224},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":226,"path":227,"stem":228,"icon":229},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":231,"path":232,"stem":233,"icon":234},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":236,"path":237,"stem":238,"children":239,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[240,244,249,254,259,264,269,274,279,284,289,294,299,304,308,313,318],{"title":41,"path":241,"stem":242,"icon":243},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":245,"path":246,"stem":247,"icon":248},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":250,"path":251,"stem":252,"icon":253},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":255,"path":256,"stem":257,"icon":258},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":260,"path":261,"stem":262,"icon":263},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":265,"path":266,"stem":267,"icon":268},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":270,"path":271,"stem":272,"icon":273},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":275,"path":276,"stem":277,"icon":278},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":280,"path":281,"stem":282,"icon":283},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":285,"path":286,"stem":287,"icon":288},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":290,"path":291,"stem":292,"icon":293},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":295,"path":296,"stem":297,"icon":298},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":300,"path":301,"stem":302,"icon":303},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":305,"path":306,"stem":307,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":309,"path":310,"stem":311,"icon":312},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":314,"path":315,"stem":316,"icon":317},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":319,"path":320,"stem":321,"icon":322},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":324,"path":325,"stem":326,"children":327,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[328,331,336,364,391,423,444,449,454,458],{"title":41,"path":329,"stem":330,"icon":112},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":332,"path":333,"stem":334,"icon":335},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":337,"icon":338,"path":339,"stem":340,"children":341,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[342,345,350,355,360],{"title":41,"path":343,"stem":344,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":346,"path":347,"stem":348,"icon":349},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":351,"path":352,"stem":353,"icon":354},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":356,"path":357,"stem":358,"icon":359},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":361,"path":362,"stem":363,"icon":142},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":365,"icon":366,"path":367,"stem":368,"children":369,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[370,373,378,383,387],{"title":41,"path":371,"stem":372,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":374,"path":375,"stem":376,"icon":377},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":379,"path":380,"stem":381,"icon":382},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":384,"path":385,"stem":386,"icon":335},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":388,"path":389,"stem":390,"icon":117},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":392,"icon":393,"path":394,"stem":395,"children":396,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[397,400,405,410,415,419],{"title":41,"path":398,"stem":399,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":401,"path":402,"stem":403,"icon":404},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":406,"path":407,"stem":408,"icon":409},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":411,"path":412,"stem":413,"icon":414},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":416,"path":417,"stem":418,"icon":393},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":420,"path":421,"stem":422,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":361,"icon":117,"path":424,"stem":425,"children":426,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[427,430,435,440],{"title":41,"path":428,"stem":429,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":431,"path":432,"stem":433,"icon":434},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":436,"path":437,"stem":438,"icon":439},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":441,"path":442,"stem":443,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":445,"path":446,"stem":447,"icon":448},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":450,"path":451,"stem":452,"icon":453},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":455,"path":456,"stem":457,"icon":439},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":459,"icon":460,"path":461,"stem":462,"children":463,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[464,467,472,477,480],{"title":41,"path":465,"stem":466,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":468,"path":469,"stem":470,"icon":471},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":473,"path":474,"stem":475,"icon":476},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":441,"path":478,"stem":479,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":420,"path":481,"stem":482,"icon":483},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":485,"path":486,"stem":487,"children":488,"page":34},"Extend","\u002Fextend","6.extend",[489,493,498,503,507,512,516,520,524,528,533,538],{"title":41,"path":490,"stem":491,"icon":492},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":494,"path":495,"stem":496,"icon":497},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":499,"path":500,"stem":501,"icon":502},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":504,"path":505,"stem":506,"icon":497},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":508,"path":509,"stem":510,"icon":511},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":420,"path":513,"stem":514,"icon":515},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":517,"path":518,"stem":519,"icon":492},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":521,"path":522,"stem":523,"icon":448},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":525,"path":526,"stem":527,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":529,"path":530,"stem":531,"icon":532},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":534,"path":535,"stem":536,"icon":537},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":539,"path":540,"stem":541,"icon":542},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":441,"path":544,"stem":545,"children":546,"page":34},"\u002Freference","7.reference",[547,551,556,559,564,568,573,577],{"title":41,"path":548,"stem":549,"icon":550},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":552,"path":553,"stem":554,"icon":555},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":388,"path":557,"stem":558,"icon":117},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":560,"path":561,"stem":562,"icon":563},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":565,"path":566,"stem":567,"icon":393},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":569,"path":570,"stem":571,"icon":572},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":574,"path":575,"stem":576,"icon":448},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":578,"path":579,"stem":580,"icon":581},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":583,"path":584,"stem":585,"children":586,"page":34},"Compare","\u002Fcompare","8.compare",[587,591,595,599,603],{"title":588,"path":589,"stem":590,"icon":572},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":592,"path":593,"stem":594,"icon":209},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":596,"path":597,"stem":598,"icon":572},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":600,"path":601,"stem":602,"icon":572},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":604,"path":605,"stem":606,"icon":572},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":608,"title":56,"body":609,"description":5686,"extension":5687,"links":5688,"meta":5692,"navigation":5693,"path":57,"seo":5694,"stem":58,"__hash__":5695},"docs\u002F2.learn\u002F3.structured-errors.md",{"type":610,"value":611,"toc":5653},"minimark",[612,621,714,719,722,725,775,790,793,1100,1104,1233,1239,1251,1368,1383,1453,1470,1476,1490,1630,1677,1684,1688,1693,1808,1812,2070,2074,2077,2230,2234,2262,2570,2573,2577,2643,2667,2673,2681,2684,2925,2948,2957,2961,2966,3459,3463,3466,3796,3799,3803,4080,4084,4240,4244,4269,4274,4285,4912,4926,4997,5001,5011,5148,5169,5175,5181,5314,5318,5335,5576,5579,5604,5616,5623,5627,5649],[613,614,615,616,620],"p",{},"evlog provides a ",[617,618,619],"code",{},"createError()"," function that creates errors with rich, actionable context.",[622,623,626,629,705],"prompt",{":actions":624,"description":625,"icon":59},"[\"copy\",\"cursor\",\"claude\"]","Use structured errors in my app",[613,627,628],{},"Use structured errors with code \u002F why \u002F fix \u002F link fields throughout my app.",[630,631,632,640,654,672,679,686,689,696],"ul",{},[633,634,635,636,639],"li",{},"Replace plain ",[617,637,638],{},"throw new Error(...)"," calls with createError({ code, message, status, why, fix, link })",[633,641,642,643,645,646,649,650,653],{},"Use ",[617,644,617],{}," as a stable, machine-readable identifier (e.g. ",[617,647,648],{},"'PAYMENT_DECLINED'",", ",[617,651,652],{},"'auth\u002Finvalid-token'",") so clients and dashboards can branch on it",[633,655,642,656,659,660,663,664,667,668,671],{},[617,657,658],{},"message"," for what happened, ",[617,661,662],{},"why"," for the technical reason, ",[617,665,666],{},"fix"," for the actionable solution, and ",[617,669,670],{},"link"," for docs",[633,673,674,675,678],{},"Set the appropriate HTTP ",[617,676,677],{},"status"," for API routes (400 \u002F 401 \u002F 402 \u002F 403 \u002F 404 \u002F 422 \u002F 500)",[633,680,681,682,685],{},"For internal-only context, pass ",[617,683,684],{},"internal: { ... }"," (logged but never returned in HTTP responses)",[633,687,688],{},"On the client, use parseError(err) to extract { message, status, code, why, fix, link } from any thrown error",[633,690,691,692,695],{},"Branch on ",[617,693,694],{},"parseError(err).code === 'PAYMENT_DECLINED'"," rather than parsing user-facing messages",[633,697,698,699,701,702,704],{},"Render ",[617,700,662],{}," and ",[617,703,666],{}," in toasts\u002FUI so users get actionable feedback",[613,706,707,708],{},"Docs: ",[709,710,711],"a",{"href":711,"rel":712},"https:\u002F\u002Fwww.evlog.dev\u002Flearn\u002Fstructured-errors",[713],"nofollow",[715,716,718],"h2",{"id":717},"why-structured-errors","Why Structured Errors?",[720,721],"structured-error-context",{},[613,723,724],{},"Traditional errors are often unhelpful:",[726,727,733],"pre",{"className":728,"code":729,"filename":730,"language":731,"meta":732,"style":732},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Unhelpful error\nthrow new Error('Payment failed')\n","services\u002Fcheckout.ts","typescript","",[617,734,735,744],{"__ignoreMap":732},[736,737,740],"span",{"class":738,"line":739},"line",1,[736,741,743],{"class":742},"sHwdD","\u002F\u002F Unhelpful error\n",[736,745,747,751,755,759,763,766,770,772],{"class":738,"line":746},2,[736,748,750],{"class":749},"s7zQu","throw",[736,752,754],{"class":753},"sMK4o"," new",[736,756,758],{"class":757},"s2Zo4"," Error",[736,760,762],{"class":761},"sTEyZ","(",[736,764,765],{"class":753},"'",[736,767,769],{"class":768},"sfazB","Payment failed",[736,771,765],{"class":753},[736,773,774],{"class":761},")\n",[613,776,777,778,782,783,785,786,789],{},"This tells you ",[779,780,781],"em",{},"what"," happened, but not ",[779,784,662],{}," or ",[779,787,788],{},"how to fix it",".",[613,791,792],{},"Structured errors provide context:",[794,795,796,954],"code-group",{},[726,797,799],{"className":728,"code":798,"filename":730,"language":731,"meta":732,"style":732},"import { createError } from 'evlog'\n\nthrow createError({\n  code: 'PAYMENT_DECLINED',\n  message: 'Payment failed',\n  status: 402,\n  why: 'Card declined by issuer (insufficient funds)',\n  fix: 'Try a different payment method or contact your bank',\n  link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n})\n",[617,800,801,827,833,845,865,881,895,912,929,946],{"__ignoreMap":732},[736,802,803,806,809,812,815,818,821,824],{"class":738,"line":739},[736,804,805],{"class":749},"import",[736,807,808],{"class":753}," {",[736,810,811],{"class":761}," createError",[736,813,814],{"class":753}," }",[736,816,817],{"class":749}," from",[736,819,820],{"class":753}," '",[736,822,823],{"class":768},"evlog",[736,825,826],{"class":753},"'\n",[736,828,829],{"class":738,"line":746},[736,830,832],{"emptyLinePlaceholder":831},true,"\n",[736,834,836,838,840,842],{"class":738,"line":835},3,[736,837,750],{"class":749},[736,839,811],{"class":757},[736,841,762],{"class":761},[736,843,844],{"class":753},"{\n",[736,846,848,852,855,857,860,862],{"class":738,"line":847},4,[736,849,851],{"class":850},"swJcz","  code",[736,853,854],{"class":753},":",[736,856,820],{"class":753},[736,858,859],{"class":768},"PAYMENT_DECLINED",[736,861,765],{"class":753},[736,863,864],{"class":753},",\n",[736,866,868,871,873,875,877,879],{"class":738,"line":867},5,[736,869,870],{"class":850},"  message",[736,872,854],{"class":753},[736,874,820],{"class":753},[736,876,769],{"class":768},[736,878,765],{"class":753},[736,880,864],{"class":753},[736,882,884,887,889,893],{"class":738,"line":883},6,[736,885,886],{"class":850},"  status",[736,888,854],{"class":753},[736,890,892],{"class":891},"sbssI"," 402",[736,894,864],{"class":753},[736,896,898,901,903,905,908,910],{"class":738,"line":897},7,[736,899,900],{"class":850},"  why",[736,902,854],{"class":753},[736,904,820],{"class":753},[736,906,907],{"class":768},"Card declined by issuer (insufficient funds)",[736,909,765],{"class":753},[736,911,864],{"class":753},[736,913,915,918,920,922,925,927],{"class":738,"line":914},8,[736,916,917],{"class":850},"  fix",[736,919,854],{"class":753},[736,921,820],{"class":753},[736,923,924],{"class":768},"Try a different payment method or contact your bank",[736,926,765],{"class":753},[736,928,864],{"class":753},[736,930,932,935,937,939,942,944],{"class":738,"line":931},9,[736,933,934],{"class":850},"  link",[736,936,854],{"class":753},[736,938,820],{"class":753},[736,940,941],{"class":768},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[736,943,765],{"class":753},[736,945,864],{"class":753},[736,947,949,952],{"class":738,"line":948},10,[736,950,951],{"class":753},"}",[736,953,774],{"class":761},[726,955,960],{"className":956,"code":957,"filename":958,"language":959,"meta":732,"style":732},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"statusCode\": 402,\n  \"message\": \"Payment failed\",\n  \"data\": {\n    \"code\": \"PAYMENT_DECLINED\",\n    \"why\": \"Card declined by issuer (insufficient funds)\",\n    \"fix\": \"Try a different payment method or contact your bank\",\n    \"link\": \"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\"\n  }\n}\n","Response","json",[617,961,962,966,984,1003,1017,1037,1055,1073,1090,1095],{"__ignoreMap":732},[736,963,964],{"class":738,"line":739},[736,965,844],{"class":753},[736,967,968,971,975,978,980,982],{"class":738,"line":746},[736,969,970],{"class":753},"  \"",[736,972,974],{"class":973},"spNyl","statusCode",[736,976,977],{"class":753},"\"",[736,979,854],{"class":753},[736,981,892],{"class":891},[736,983,864],{"class":753},[736,985,986,988,990,992,994,997,999,1001],{"class":738,"line":835},[736,987,970],{"class":753},[736,989,658],{"class":973},[736,991,977],{"class":753},[736,993,854],{"class":753},[736,995,996],{"class":753}," \"",[736,998,769],{"class":768},[736,1000,977],{"class":753},[736,1002,864],{"class":753},[736,1004,1005,1007,1010,1012,1014],{"class":738,"line":847},[736,1006,970],{"class":753},[736,1008,1009],{"class":973},"data",[736,1011,977],{"class":753},[736,1013,854],{"class":753},[736,1015,1016],{"class":753}," {\n",[736,1018,1019,1022,1025,1027,1029,1031,1033,1035],{"class":738,"line":867},[736,1020,1021],{"class":753},"    \"",[736,1023,617],{"class":1024},"sBMFI",[736,1026,977],{"class":753},[736,1028,854],{"class":753},[736,1030,996],{"class":753},[736,1032,859],{"class":768},[736,1034,977],{"class":753},[736,1036,864],{"class":753},[736,1038,1039,1041,1043,1045,1047,1049,1051,1053],{"class":738,"line":883},[736,1040,1021],{"class":753},[736,1042,662],{"class":1024},[736,1044,977],{"class":753},[736,1046,854],{"class":753},[736,1048,996],{"class":753},[736,1050,907],{"class":768},[736,1052,977],{"class":753},[736,1054,864],{"class":753},[736,1056,1057,1059,1061,1063,1065,1067,1069,1071],{"class":738,"line":897},[736,1058,1021],{"class":753},[736,1060,666],{"class":1024},[736,1062,977],{"class":753},[736,1064,854],{"class":753},[736,1066,996],{"class":753},[736,1068,924],{"class":768},[736,1070,977],{"class":753},[736,1072,864],{"class":753},[736,1074,1075,1077,1079,1081,1083,1085,1087],{"class":738,"line":914},[736,1076,1021],{"class":753},[736,1078,670],{"class":1024},[736,1080,977],{"class":753},[736,1082,854],{"class":753},[736,1084,996],{"class":753},[736,1086,941],{"class":768},[736,1088,1089],{"class":753},"\"\n",[736,1091,1092],{"class":738,"line":931},[736,1093,1094],{"class":753},"  }\n",[736,1096,1097],{"class":738,"line":948},[736,1098,1099],{"class":753},"}\n",[715,1101,1103],{"id":1102},"say-why-it-broke-and-how-to-fix-it","Say why it broke and how to fix it",[1105,1106,1107,1123],"table",{},[1108,1109,1110],"thead",{},[1111,1112,1113,1117,1120],"tr",{},[1114,1115,1116],"th",{},"Field",[1114,1118,1119],{},"Required",[1114,1121,1122],{},"Description",[1124,1125,1126,1139,1154,1165,1176,1187,1198,1210,1221],"tbody",{},[1111,1127,1128,1133,1136],{},[1129,1130,1131],"td",{},[617,1132,658],{},[1129,1134,1135],{},"Yes",[1129,1137,1138],{},"What happened (shown to users)",[1111,1140,1141,1145,1148],{},[1129,1142,1143],{},[617,1144,617],{},[1129,1146,1147],{},"No",[1129,1149,1150,1151,1153],{},"Stable machine-readable identifier for client branching (e.g. ",[617,1152,648],{},")",[1111,1155,1156,1160,1162],{},[1129,1157,1158],{},[617,1159,677],{},[1129,1161,1147],{},[1129,1163,1164],{},"HTTP status code (default: 500)",[1111,1166,1167,1171,1173],{},[1129,1168,1169],{},[617,1170,662],{},[1129,1172,1147],{},[1129,1174,1175],{},"Technical reason (for debugging)",[1111,1177,1178,1182,1184],{},[1129,1179,1180],{},[617,1181,666],{},[1129,1183,1147],{},[1129,1185,1186],{},"Actionable solution",[1111,1188,1189,1193,1195],{},[1129,1190,1191],{},[617,1192,670],{},[1129,1194,1147],{},[1129,1196,1197],{},"Documentation URL",[1111,1199,1200,1205,1207],{},[1129,1201,1202],{},[617,1203,1204],{},"cause",[1129,1206,1147],{},[1129,1208,1209],{},"Original error (for error chaining)",[1111,1211,1212,1216,1218],{},[1129,1213,1214],{},[617,1215,1009],{},[1129,1217,1147],{},[1129,1219,1220],{},"Extra payload returned to the client (see below)",[1111,1222,1223,1228,1230],{},[1129,1224,1225],{},[617,1226,1227],{},"internal",[1129,1229,1147],{},[1129,1231,1232],{},"Backend-only context (see below)",[715,1234,1236,1237,1153],{"id":1235},"extra-payload-for-the-client-data","Extra payload for the client (",[617,1238,1009],{},[613,1240,1241,649,1243,1245,1246,1248,1249,854],{},[617,1242,662],{},[617,1244,666],{},", and ",[617,1247,670],{}," are strings a human reads. When the client needs values it branches on, an order id, a retry deadline, a list of invalid fields, pass them as ",[617,1250,1009],{},[726,1252,1254],{"className":728,"code":1253,"language":731,"meta":732,"style":732},"throw createError({\n  code: 'PAYMENT_DECLINED',\n  message: 'Payment could not be completed',\n  status: 402,\n  fix: 'Try another payment method',\n  data: {\n    orderId: 'ord_8x2k',\n    retryAfter: 30,\n  },\n})\n",[617,1255,1256,1266,1280,1295,1305,1320,1329,1345,1357,1362],{"__ignoreMap":732},[736,1257,1258,1260,1262,1264],{"class":738,"line":739},[736,1259,750],{"class":749},[736,1261,811],{"class":757},[736,1263,762],{"class":761},[736,1265,844],{"class":753},[736,1267,1268,1270,1272,1274,1276,1278],{"class":738,"line":746},[736,1269,851],{"class":850},[736,1271,854],{"class":753},[736,1273,820],{"class":753},[736,1275,859],{"class":768},[736,1277,765],{"class":753},[736,1279,864],{"class":753},[736,1281,1282,1284,1286,1288,1291,1293],{"class":738,"line":835},[736,1283,870],{"class":850},[736,1285,854],{"class":753},[736,1287,820],{"class":753},[736,1289,1290],{"class":768},"Payment could not be completed",[736,1292,765],{"class":753},[736,1294,864],{"class":753},[736,1296,1297,1299,1301,1303],{"class":738,"line":847},[736,1298,886],{"class":850},[736,1300,854],{"class":753},[736,1302,892],{"class":891},[736,1304,864],{"class":753},[736,1306,1307,1309,1311,1313,1316,1318],{"class":738,"line":867},[736,1308,917],{"class":850},[736,1310,854],{"class":753},[736,1312,820],{"class":753},[736,1314,1315],{"class":768},"Try another payment method",[736,1317,765],{"class":753},[736,1319,864],{"class":753},[736,1321,1322,1325,1327],{"class":738,"line":883},[736,1323,1324],{"class":850},"  data",[736,1326,854],{"class":753},[736,1328,1016],{"class":753},[736,1330,1331,1334,1336,1338,1341,1343],{"class":738,"line":897},[736,1332,1333],{"class":850},"    orderId",[736,1335,854],{"class":753},[736,1337,820],{"class":753},[736,1339,1340],{"class":768},"ord_8x2k",[736,1342,765],{"class":753},[736,1344,864],{"class":753},[736,1346,1347,1350,1352,1355],{"class":738,"line":914},[736,1348,1349],{"class":850},"    retryAfter",[736,1351,854],{"class":753},[736,1353,1354],{"class":891}," 30",[736,1356,864],{"class":753},[736,1358,1359],{"class":738,"line":931},[736,1360,1361],{"class":753},"  },\n",[736,1363,1364,1366],{"class":738,"line":948},[736,1365,951],{"class":753},[736,1367,774],{"class":761},[613,1369,1370,1371,1373,1374,649,1376,649,1378,1245,1380,1382],{},"The payload is merged into the response body's ",[617,1372,1009],{}," object next to ",[617,1375,617],{},[617,1377,662],{},[617,1379,666],{},[617,1381,670],{},", so the client reads it as one object:",[726,1384,1386],{"className":728,"code":1385,"language":731,"meta":732,"style":732},"const { data } = parseError(error)\nif (typeof data?.retryAfter === 'number') scheduleRetry(data.retryAfter)\n",[617,1387,1388,1409],{"__ignoreMap":732},[736,1389,1390,1393,1395,1398,1400,1403,1406],{"class":738,"line":739},[736,1391,1392],{"class":973},"const",[736,1394,808],{"class":753},[736,1396,1397],{"class":761}," data ",[736,1399,951],{"class":753},[736,1401,1402],{"class":753}," =",[736,1404,1405],{"class":757}," parseError",[736,1407,1408],{"class":761},"(error)\n",[736,1410,1411,1414,1417,1420,1423,1426,1429,1432,1434,1437,1439,1442,1445,1448,1450],{"class":738,"line":746},[736,1412,1413],{"class":749},"if",[736,1415,1416],{"class":761}," (",[736,1418,1419],{"class":753},"typeof",[736,1421,1422],{"class":761}," data",[736,1424,1425],{"class":753},"?.",[736,1427,1428],{"class":761},"retryAfter ",[736,1430,1431],{"class":753},"===",[736,1433,820],{"class":753},[736,1435,1436],{"class":768},"number",[736,1438,765],{"class":753},[736,1440,1441],{"class":761},") ",[736,1443,1444],{"class":757},"scheduleRetry",[736,1446,1447],{"class":761},"(data",[736,1449,789],{"class":753},[736,1451,1452],{"class":761},"retryAfter)\n",[613,1454,1455,1456,1459,1460,1462,1463,1466,1467,1469],{},"Those four guidance keys win on a collision, so ",[617,1457,1458],{},"data: { code: 'x' }"," never overwrites the ",[617,1461,617],{}," you passed. This is the same field h3's ",[617,1464,1465],{},"createError"," uses, and evlog's Nitro error handler forwards it for h3 errors too. Anything the client must never see goes in ",[617,1468,1227],{}," instead.",[715,1471,1473,1474,1153],{"id":1472},"backend-only-context-internal","Backend-only context (",[617,1475,1227],{},[613,1477,642,1478,1480,1481,1485,1486,1489],{},[617,1479,1227],{}," when you need extra fields for logs, drains, or support tools, but ",[1482,1483,1484],"strong",{},"must not"," expose them in API responses or to ",[617,1487,1488],{},"parseError()"," on the client.",[726,1491,1493],{"className":728,"code":1492,"language":731,"meta":732,"style":732},"throw createError({\n  message: 'Payment could not be completed',\n  status: 402,\n  why: 'Your card was declined',\n  fix: 'Try another payment method',\n  internal: {\n    correlationId: 'pay_8x2k',\n    processorCode: 'insufficient_funds',\n    rawIssuerResponse: '…', \u002F\u002F never sent to the client\n  },\n})\n",[617,1494,1495,1505,1519,1529,1544,1558,1567,1583,1599,1619,1623],{"__ignoreMap":732},[736,1496,1497,1499,1501,1503],{"class":738,"line":739},[736,1498,750],{"class":749},[736,1500,811],{"class":757},[736,1502,762],{"class":761},[736,1504,844],{"class":753},[736,1506,1507,1509,1511,1513,1515,1517],{"class":738,"line":746},[736,1508,870],{"class":850},[736,1510,854],{"class":753},[736,1512,820],{"class":753},[736,1514,1290],{"class":768},[736,1516,765],{"class":753},[736,1518,864],{"class":753},[736,1520,1521,1523,1525,1527],{"class":738,"line":835},[736,1522,886],{"class":850},[736,1524,854],{"class":753},[736,1526,892],{"class":891},[736,1528,864],{"class":753},[736,1530,1531,1533,1535,1537,1540,1542],{"class":738,"line":847},[736,1532,900],{"class":850},[736,1534,854],{"class":753},[736,1536,820],{"class":753},[736,1538,1539],{"class":768},"Your card was declined",[736,1541,765],{"class":753},[736,1543,864],{"class":753},[736,1545,1546,1548,1550,1552,1554,1556],{"class":738,"line":867},[736,1547,917],{"class":850},[736,1549,854],{"class":753},[736,1551,820],{"class":753},[736,1553,1315],{"class":768},[736,1555,765],{"class":753},[736,1557,864],{"class":753},[736,1559,1560,1563,1565],{"class":738,"line":883},[736,1561,1562],{"class":850},"  internal",[736,1564,854],{"class":753},[736,1566,1016],{"class":753},[736,1568,1569,1572,1574,1576,1579,1581],{"class":738,"line":897},[736,1570,1571],{"class":850},"    correlationId",[736,1573,854],{"class":753},[736,1575,820],{"class":753},[736,1577,1578],{"class":768},"pay_8x2k",[736,1580,765],{"class":753},[736,1582,864],{"class":753},[736,1584,1585,1588,1590,1592,1595,1597],{"class":738,"line":914},[736,1586,1587],{"class":850},"    processorCode",[736,1589,854],{"class":753},[736,1591,820],{"class":753},[736,1593,1594],{"class":768},"insufficient_funds",[736,1596,765],{"class":753},[736,1598,864],{"class":753},[736,1600,1601,1604,1606,1608,1611,1613,1616],{"class":738,"line":931},[736,1602,1603],{"class":850},"    rawIssuerResponse",[736,1605,854],{"class":753},[736,1607,820],{"class":753},[736,1609,1610],{"class":768},"…",[736,1612,765],{"class":753},[736,1614,1615],{"class":753},",",[736,1617,1618],{"class":742}," \u002F\u002F never sent to the client\n",[736,1620,1621],{"class":738,"line":948},[736,1622,1361],{"class":753},[736,1624,1626,1628],{"class":738,"line":1625},11,[736,1627,951],{"class":753},[736,1629,774],{"class":761},[630,1631,1632,1646,1660],{},[633,1633,1634,1637,1638,1643,1644,789],{},[1482,1635,1636],{},"HTTP responses"," (Nuxt\u002FNitro error handler, Next.js, SvelteKit, etc.) and ",[1482,1639,1640],{},[617,1641,1642],{},"toJSON()"," omit ",[617,1645,1227],{},[633,1647,1648,1652,1653,1655,1656,1659],{},[1482,1649,1650],{},[617,1651,1488],{}," does not surface ",[617,1654,1227],{}," for UI; the thrown error may still carry it server-side on ",[617,1657,1658],{},"raw"," when debugging.",[633,1661,1662,1665,1666,1669,1670,1673,1674,789],{},[1482,1663,1664],{},"Wide events",": when the framework records the error (e.g. ",[617,1667,1668],{},"log.error(err)"," or automatic capture on thrown ",[617,1671,1672],{},"EvlogError","), the emitted payload includes ",[617,1675,1676],{},"error.internal",[613,1678,1679,1680,789],{},"In debuggers, the payload may appear under a symbol key; in code, always use ",[1482,1681,1682],{},[617,1683,1676],{},[715,1685,1687],{"id":1686},"throw-an-error-that-explains-itself","Throw an error that explains itself",[1689,1690,1692],"h3",{"id":1691},"simple-error","Simple Error",[794,1694,1695,1765],{},[726,1696,1699],{"className":728,"code":1697,"filename":1698,"language":731,"meta":732,"style":732},"import { createError } from 'evlog'\n\nthrow createError({\n  message: 'User not found',\n  status: 404,\n})\n","server\u002Fapi\u002Fusers\u002F[id].get.ts",[617,1700,1701,1719,1723,1733,1748,1759],{"__ignoreMap":732},[736,1702,1703,1705,1707,1709,1711,1713,1715,1717],{"class":738,"line":739},[736,1704,805],{"class":749},[736,1706,808],{"class":753},[736,1708,811],{"class":761},[736,1710,814],{"class":753},[736,1712,817],{"class":749},[736,1714,820],{"class":753},[736,1716,823],{"class":768},[736,1718,826],{"class":753},[736,1720,1721],{"class":738,"line":746},[736,1722,832],{"emptyLinePlaceholder":831},[736,1724,1725,1727,1729,1731],{"class":738,"line":835},[736,1726,750],{"class":749},[736,1728,811],{"class":757},[736,1730,762],{"class":761},[736,1732,844],{"class":753},[736,1734,1735,1737,1739,1741,1744,1746],{"class":738,"line":847},[736,1736,870],{"class":850},[736,1738,854],{"class":753},[736,1740,820],{"class":753},[736,1742,1743],{"class":768},"User not found",[736,1745,765],{"class":753},[736,1747,864],{"class":753},[736,1749,1750,1752,1754,1757],{"class":738,"line":867},[736,1751,886],{"class":850},[736,1753,854],{"class":753},[736,1755,1756],{"class":891}," 404",[736,1758,864],{"class":753},[736,1760,1761,1763],{"class":738,"line":883},[736,1762,951],{"class":753},[736,1764,774],{"class":761},[726,1766,1768],{"className":956,"code":1767,"filename":958,"language":959,"meta":732,"style":732},"{\n  \"statusCode\": 404,\n  \"message\": \"User not found\"\n}\n",[617,1769,1770,1774,1788,1804],{"__ignoreMap":732},[736,1771,1772],{"class":738,"line":739},[736,1773,844],{"class":753},[736,1775,1776,1778,1780,1782,1784,1786],{"class":738,"line":746},[736,1777,970],{"class":753},[736,1779,974],{"class":973},[736,1781,977],{"class":753},[736,1783,854],{"class":753},[736,1785,1756],{"class":891},[736,1787,864],{"class":753},[736,1789,1790,1792,1794,1796,1798,1800,1802],{"class":738,"line":835},[736,1791,970],{"class":753},[736,1793,658],{"class":973},[736,1795,977],{"class":753},[736,1797,854],{"class":753},[736,1799,996],{"class":753},[736,1801,1743],{"class":768},[736,1803,1089],{"class":753},[736,1805,1806],{"class":738,"line":847},[736,1807,1099],{"class":753},[1689,1809,1811],{"id":1810},"error-with-full-context","Error with Full Context",[794,1813,1814,1939],{},[726,1815,1817],{"className":728,"code":1816,"filename":730,"language":731,"meta":732,"style":732},"import { createError } from 'evlog'\n\nthrow createError({\n  code: 'PAYMENT_DECLINED',\n  message: 'Payment failed',\n  status: 402,\n  why: 'Card declined by issuer',\n  fix: 'Try a different payment method',\n  link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n})\n",[617,1818,1819,1837,1841,1851,1865,1879,1889,1904,1919,1933],{"__ignoreMap":732},[736,1820,1821,1823,1825,1827,1829,1831,1833,1835],{"class":738,"line":739},[736,1822,805],{"class":749},[736,1824,808],{"class":753},[736,1826,811],{"class":761},[736,1828,814],{"class":753},[736,1830,817],{"class":749},[736,1832,820],{"class":753},[736,1834,823],{"class":768},[736,1836,826],{"class":753},[736,1838,1839],{"class":738,"line":746},[736,1840,832],{"emptyLinePlaceholder":831},[736,1842,1843,1845,1847,1849],{"class":738,"line":835},[736,1844,750],{"class":749},[736,1846,811],{"class":757},[736,1848,762],{"class":761},[736,1850,844],{"class":753},[736,1852,1853,1855,1857,1859,1861,1863],{"class":738,"line":847},[736,1854,851],{"class":850},[736,1856,854],{"class":753},[736,1858,820],{"class":753},[736,1860,859],{"class":768},[736,1862,765],{"class":753},[736,1864,864],{"class":753},[736,1866,1867,1869,1871,1873,1875,1877],{"class":738,"line":867},[736,1868,870],{"class":850},[736,1870,854],{"class":753},[736,1872,820],{"class":753},[736,1874,769],{"class":768},[736,1876,765],{"class":753},[736,1878,864],{"class":753},[736,1880,1881,1883,1885,1887],{"class":738,"line":883},[736,1882,886],{"class":850},[736,1884,854],{"class":753},[736,1886,892],{"class":891},[736,1888,864],{"class":753},[736,1890,1891,1893,1895,1897,1900,1902],{"class":738,"line":897},[736,1892,900],{"class":850},[736,1894,854],{"class":753},[736,1896,820],{"class":753},[736,1898,1899],{"class":768},"Card declined by issuer",[736,1901,765],{"class":753},[736,1903,864],{"class":753},[736,1905,1906,1908,1910,1912,1915,1917],{"class":738,"line":914},[736,1907,917],{"class":850},[736,1909,854],{"class":753},[736,1911,820],{"class":753},[736,1913,1914],{"class":768},"Try a different payment method",[736,1916,765],{"class":753},[736,1918,864],{"class":753},[736,1920,1921,1923,1925,1927,1929,1931],{"class":738,"line":931},[736,1922,934],{"class":850},[736,1924,854],{"class":753},[736,1926,820],{"class":753},[736,1928,941],{"class":768},[736,1930,765],{"class":753},[736,1932,864],{"class":753},[736,1934,1935,1937],{"class":738,"line":948},[736,1936,951],{"class":753},[736,1938,774],{"class":761},[726,1940,1942],{"className":956,"code":1941,"filename":958,"language":959,"meta":732,"style":732},"{\n  \"statusCode\": 402,\n  \"message\": \"Payment failed\",\n  \"data\": {\n    \"code\": \"PAYMENT_DECLINED\",\n    \"why\": \"Card declined by issuer\",\n    \"fix\": \"Try a different payment method\",\n    \"link\": \"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\"\n  }\n}\n",[617,1943,1944,1948,1962,1980,1992,2010,2028,2046,2062,2066],{"__ignoreMap":732},[736,1945,1946],{"class":738,"line":739},[736,1947,844],{"class":753},[736,1949,1950,1952,1954,1956,1958,1960],{"class":738,"line":746},[736,1951,970],{"class":753},[736,1953,974],{"class":973},[736,1955,977],{"class":753},[736,1957,854],{"class":753},[736,1959,892],{"class":891},[736,1961,864],{"class":753},[736,1963,1964,1966,1968,1970,1972,1974,1976,1978],{"class":738,"line":835},[736,1965,970],{"class":753},[736,1967,658],{"class":973},[736,1969,977],{"class":753},[736,1971,854],{"class":753},[736,1973,996],{"class":753},[736,1975,769],{"class":768},[736,1977,977],{"class":753},[736,1979,864],{"class":753},[736,1981,1982,1984,1986,1988,1990],{"class":738,"line":847},[736,1983,970],{"class":753},[736,1985,1009],{"class":973},[736,1987,977],{"class":753},[736,1989,854],{"class":753},[736,1991,1016],{"class":753},[736,1993,1994,1996,1998,2000,2002,2004,2006,2008],{"class":738,"line":867},[736,1995,1021],{"class":753},[736,1997,617],{"class":1024},[736,1999,977],{"class":753},[736,2001,854],{"class":753},[736,2003,996],{"class":753},[736,2005,859],{"class":768},[736,2007,977],{"class":753},[736,2009,864],{"class":753},[736,2011,2012,2014,2016,2018,2020,2022,2024,2026],{"class":738,"line":883},[736,2013,1021],{"class":753},[736,2015,662],{"class":1024},[736,2017,977],{"class":753},[736,2019,854],{"class":753},[736,2021,996],{"class":753},[736,2023,1899],{"class":768},[736,2025,977],{"class":753},[736,2027,864],{"class":753},[736,2029,2030,2032,2034,2036,2038,2040,2042,2044],{"class":738,"line":897},[736,2031,1021],{"class":753},[736,2033,666],{"class":1024},[736,2035,977],{"class":753},[736,2037,854],{"class":753},[736,2039,996],{"class":753},[736,2041,1914],{"class":768},[736,2043,977],{"class":753},[736,2045,864],{"class":753},[736,2047,2048,2050,2052,2054,2056,2058,2060],{"class":738,"line":914},[736,2049,1021],{"class":753},[736,2051,670],{"class":1024},[736,2053,977],{"class":753},[736,2055,854],{"class":753},[736,2057,996],{"class":753},[736,2059,941],{"class":768},[736,2061,1089],{"class":753},[736,2063,2064],{"class":738,"line":931},[736,2065,1094],{"class":753},[736,2067,2068],{"class":738,"line":948},[736,2069,1099],{"class":753},[1689,2071,2073],{"id":2072},"error-chaining","Error Chaining",[613,2075,2076],{},"Wrap underlying errors while preserving the original:",[726,2078,2080],{"className":728,"code":2079,"filename":730,"language":731,"meta":732,"style":732},"import { createError } from 'evlog'\n\ntry {\n  await stripe.charges.create(charge)\n} catch (err) {\n  throw createError({\n    message: 'Payment processing failed',\n    status: 500,\n    why: 'Stripe API returned an error',\n    cause: err, \u002F\u002F Original error preserved\n  })\n}\n",[617,2081,2082,2100,2104,2111,2136,2148,2159,2175,2187,2203,2218,2225],{"__ignoreMap":732},[736,2083,2084,2086,2088,2090,2092,2094,2096,2098],{"class":738,"line":739},[736,2085,805],{"class":749},[736,2087,808],{"class":753},[736,2089,811],{"class":761},[736,2091,814],{"class":753},[736,2093,817],{"class":749},[736,2095,820],{"class":753},[736,2097,823],{"class":768},[736,2099,826],{"class":753},[736,2101,2102],{"class":738,"line":746},[736,2103,832],{"emptyLinePlaceholder":831},[736,2105,2106,2109],{"class":738,"line":835},[736,2107,2108],{"class":749},"try",[736,2110,1016],{"class":753},[736,2112,2113,2116,2119,2121,2124,2126,2129,2131,2134],{"class":738,"line":847},[736,2114,2115],{"class":749},"  await",[736,2117,2118],{"class":761}," stripe",[736,2120,789],{"class":753},[736,2122,2123],{"class":761},"charges",[736,2125,789],{"class":753},[736,2127,2128],{"class":757},"create",[736,2130,762],{"class":850},[736,2132,2133],{"class":761},"charge",[736,2135,774],{"class":850},[736,2137,2138,2140,2143,2146],{"class":738,"line":867},[736,2139,951],{"class":753},[736,2141,2142],{"class":749}," catch",[736,2144,2145],{"class":761}," (err) ",[736,2147,844],{"class":753},[736,2149,2150,2153,2155,2157],{"class":738,"line":883},[736,2151,2152],{"class":749},"  throw",[736,2154,811],{"class":757},[736,2156,762],{"class":850},[736,2158,844],{"class":753},[736,2160,2161,2164,2166,2168,2171,2173],{"class":738,"line":897},[736,2162,2163],{"class":850},"    message",[736,2165,854],{"class":753},[736,2167,820],{"class":753},[736,2169,2170],{"class":768},"Payment processing failed",[736,2172,765],{"class":753},[736,2174,864],{"class":753},[736,2176,2177,2180,2182,2185],{"class":738,"line":914},[736,2178,2179],{"class":850},"    status",[736,2181,854],{"class":753},[736,2183,2184],{"class":891}," 500",[736,2186,864],{"class":753},[736,2188,2189,2192,2194,2196,2199,2201],{"class":738,"line":931},[736,2190,2191],{"class":850},"    why",[736,2193,854],{"class":753},[736,2195,820],{"class":753},[736,2197,2198],{"class":768},"Stripe API returned an error",[736,2200,765],{"class":753},[736,2202,864],{"class":753},[736,2204,2205,2208,2210,2213,2215],{"class":738,"line":948},[736,2206,2207],{"class":850},"    cause",[736,2209,854],{"class":753},[736,2211,2212],{"class":761}," err",[736,2214,1615],{"class":753},[736,2216,2217],{"class":742}," \u002F\u002F Original error preserved\n",[736,2219,2220,2223],{"class":738,"line":1625},[736,2221,2222],{"class":753},"  }",[736,2224,774],{"class":850},[736,2226,2228],{"class":738,"line":2227},12,[736,2229,1099],{"class":753},[715,2231,2233],{"id":2232},"development-terminal-output","Development terminal output",[613,2235,2236,2237,2240,2241,2247,2248,649,2251,2254,2255,649,2257,649,2259,2261],{},"In development with ",[617,2238,2239],{},"pretty: true"," (the default), evlog prints failed requests as a wide event in the terminal. The ",[1482,2242,2243,2246],{},[617,2244,2245],{},"error"," block comes first",", then request context (",[617,2249,2250],{},"user",[617,2252,2253],{},"cart",", …). Structured fields (",[617,2256,662],{},[617,2258,666],{},[617,2260,670],{},") appear under the error message with a source location and optional code snippet.",[794,2263,2264,2390],{},[726,2265,2267],{"className":728,"code":2266,"filename":730,"language":731,"meta":732,"style":732},"import { createError } from 'evlog'\n\nthrow createError({\n  code: 'PAYMENT_DECLINED',\n  message: 'Card declined',\n  status: 402,\n  why: 'Issuer declined the charge',\n  fix: 'Ask the customer to use another card',\n  link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n})\n",[617,2268,2269,2287,2291,2301,2315,2330,2340,2355,2370,2384],{"__ignoreMap":732},[736,2270,2271,2273,2275,2277,2279,2281,2283,2285],{"class":738,"line":739},[736,2272,805],{"class":749},[736,2274,808],{"class":753},[736,2276,811],{"class":761},[736,2278,814],{"class":753},[736,2280,817],{"class":749},[736,2282,820],{"class":753},[736,2284,823],{"class":768},[736,2286,826],{"class":753},[736,2288,2289],{"class":738,"line":746},[736,2290,832],{"emptyLinePlaceholder":831},[736,2292,2293,2295,2297,2299],{"class":738,"line":835},[736,2294,750],{"class":749},[736,2296,811],{"class":757},[736,2298,762],{"class":761},[736,2300,844],{"class":753},[736,2302,2303,2305,2307,2309,2311,2313],{"class":738,"line":847},[736,2304,851],{"class":850},[736,2306,854],{"class":753},[736,2308,820],{"class":753},[736,2310,859],{"class":768},[736,2312,765],{"class":753},[736,2314,864],{"class":753},[736,2316,2317,2319,2321,2323,2326,2328],{"class":738,"line":867},[736,2318,870],{"class":850},[736,2320,854],{"class":753},[736,2322,820],{"class":753},[736,2324,2325],{"class":768},"Card declined",[736,2327,765],{"class":753},[736,2329,864],{"class":753},[736,2331,2332,2334,2336,2338],{"class":738,"line":883},[736,2333,886],{"class":850},[736,2335,854],{"class":753},[736,2337,892],{"class":891},[736,2339,864],{"class":753},[736,2341,2342,2344,2346,2348,2351,2353],{"class":738,"line":897},[736,2343,900],{"class":850},[736,2345,854],{"class":753},[736,2347,820],{"class":753},[736,2349,2350],{"class":768},"Issuer declined the charge",[736,2352,765],{"class":753},[736,2354,864],{"class":753},[736,2356,2357,2359,2361,2363,2366,2368],{"class":738,"line":914},[736,2358,917],{"class":850},[736,2360,854],{"class":753},[736,2362,820],{"class":753},[736,2364,2365],{"class":768},"Ask the customer to use another card",[736,2367,765],{"class":753},[736,2369,864],{"class":753},[736,2371,2372,2374,2376,2378,2380,2382],{"class":738,"line":931},[736,2373,934],{"class":850},[736,2375,854],{"class":753},[736,2377,820],{"class":753},[736,2379,941],{"class":768},[736,2381,765],{"class":753},[736,2383,864],{"class":753},[736,2385,2386,2388],{"class":738,"line":948},[736,2387,951],{"class":753},[736,2389,774],{"class":761},[726,2391,2396],{"className":2392,"code":2393,"filename":2394,"language":2395,"meta":732,"style":732},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ERROR [checkout] POST \u002Fapi\u002Fcheckout 402 in 123ms\n  ├─ error: Card declined\n  │     at server\u002Fapi\u002Fcheckout.post.ts:42\n  │   ❯ 42 ┃ throw createError({ code: 'PAYMENT_DECLINED', ... })\n  │     Why: Issuer declined the charge\n  │     Fix: Ask the customer to use another card\n  │     More: https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\n  │     stack (3 frames hidden in node_modules)\n  ├─ user: id=1 plan=pro\n  └─ cart: items=3 total=9999\n","Terminal (pretty dev)","bash",[617,2397,2398,2406,2420,2431,2454,2473,2500,2510,2534,2550],{"__ignoreMap":732},[736,2399,2400,2403],{"class":738,"line":739},[736,2401,2402],{"class":1024},"ERROR",[736,2404,2405],{"class":761}," [checkout] POST \u002Fapi\u002Fcheckout 402 in 123ms\n",[736,2407,2408,2411,2414,2417],{"class":738,"line":746},[736,2409,2410],{"class":1024},"  ├─",[736,2412,2413],{"class":768}," error:",[736,2415,2416],{"class":768}," Card",[736,2418,2419],{"class":768}," declined\n",[736,2421,2422,2425,2428],{"class":738,"line":835},[736,2423,2424],{"class":1024},"  │",[736,2426,2427],{"class":768},"     at",[736,2429,2430],{"class":768}," server\u002Fapi\u002Fcheckout.post.ts:42\n",[736,2432,2433,2435,2438,2441,2444,2447,2449,2451],{"class":738,"line":847},[736,2434,2424],{"class":1024},[736,2436,2437],{"class":768},"   ❯",[736,2439,2440],{"class":891}," 42",[736,2442,2443],{"class":768}," ┃",[736,2445,2446],{"class":768}," throw",[736,2448,811],{"class":768},[736,2450,762],{"class":753},[736,2452,2453],{"class":761},"{ code: 'PAYMENT_DECLINED', ... })\n",[736,2455,2456,2458,2461,2464,2467,2470],{"class":738,"line":867},[736,2457,2424],{"class":1024},[736,2459,2460],{"class":768},"     Why:",[736,2462,2463],{"class":768}," Issuer",[736,2465,2466],{"class":768}," declined",[736,2468,2469],{"class":768}," the",[736,2471,2472],{"class":768}," charge\n",[736,2474,2475,2477,2480,2483,2485,2488,2491,2494,2497],{"class":738,"line":883},[736,2476,2424],{"class":1024},[736,2478,2479],{"class":768},"     Fix:",[736,2481,2482],{"class":768}," Ask",[736,2484,2469],{"class":768},[736,2486,2487],{"class":768}," customer",[736,2489,2490],{"class":768}," to",[736,2492,2493],{"class":768}," use",[736,2495,2496],{"class":768}," another",[736,2498,2499],{"class":768}," card\n",[736,2501,2502,2504,2507],{"class":738,"line":897},[736,2503,2424],{"class":1024},[736,2505,2506],{"class":768},"     More:",[736,2508,2509],{"class":768}," https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\n",[736,2511,2512,2514,2517,2520,2523,2526,2529,2532],{"class":738,"line":914},[736,2513,2424],{"class":1024},[736,2515,2516],{"class":768},"     stack",[736,2518,2519],{"class":761}," (3 ",[736,2521,2522],{"class":768},"frames",[736,2524,2525],{"class":768}," hidden",[736,2527,2528],{"class":768}," in",[736,2530,2531],{"class":768}," node_modules",[736,2533,774],{"class":753},[736,2535,2536,2538,2541,2544,2547],{"class":738,"line":931},[736,2537,2410],{"class":1024},[736,2539,2540],{"class":768}," user:",[736,2542,2543],{"class":768}," id=",[736,2545,2546],{"class":891},"1",[736,2548,2549],{"class":768}," plan=pro\n",[736,2551,2552,2555,2558,2561,2564,2567],{"class":738,"line":948},[736,2553,2554],{"class":1024},"  └─",[736,2556,2557],{"class":768}," cart:",[736,2559,2560],{"class":768}," items=",[736,2562,2563],{"class":891},"3",[736,2565,2566],{"class":768}," total=",[736,2568,2569],{"class":891},"9999\n",[613,2571,2572],{},"Colors and tree connectors render in the terminal; the example above omits ANSI for readability.",[1689,2574,2576],{"id":2575},"choosing-evlog-vs-nitro-console-output","Choosing evlog vs Nitro console output",[1105,2578,2579,2589],{},[1108,2580,2581],{},[1111,2582,2583,2586],{},[1114,2584,2585],{},"Goal",[1114,2587,2588],{},"Config",[1124,2590,2591,2606,2616,2630],{},[1111,2592,2593,2600],{},[1129,2594,2595,2596,2599],{},"One clean signal — wide event only, no Nitro ",[617,2597,2598],{},"[request error]"," overlay",[1129,2601,2602,2605],{},[617,2603,2604],{},"dev: 'evlog'"," (default in pretty dev)",[1111,2607,2608,2611],{},[1129,2609,2610],{},"Wide event context + Nitro's native Youch stack (evlog prints Why\u002FFix only)",[1129,2612,2613],{},[617,2614,2615],{},"dev: 'nitro'",[1111,2617,2618,2625],{},[1129,2619,2620,2621,2624],{},"Full evlog block ",[1482,2622,2623],{},"and"," Nitro overlay (debug)",[1129,2626,2627],{},[617,2628,2629],{},"dev: 'both'",[1111,2631,2632,2635],{},[1129,2633,2634],{},"No pretty tree (JSON logs) but still suppress Nitro overlay",[1129,2636,2637,649,2640],{},[617,2638,2639],{},"pretty: false",[617,2641,2642],{},"dev: { frameworkOverlay: false }",[613,2644,2645,2646,1416,2649,649,2652,649,2655,649,2658,2661,2662,701,2664,789],{},"Fine-grained control lives under ",[617,2647,2648],{},"dev.prettyError",[617,2650,2651],{},"snippet",[617,2653,2654],{},"stackDepth",[617,2656,2657],{},"compact",[617,2659,2660],{},"detail: 'full' | 'guidance'","). See ",[709,2663,552],{"href":553},[709,2665,2666],{"href":246},"Nuxt integration",[715,2668,2670,2671],{"id":2669},"branching-on-code","Branching on ",[617,2672,617],{},[613,2674,2675,2677,2678,2680],{},[617,2676,617],{}," is a stable, machine-readable identifier you control. Pair it with ",[617,2679,1488],{}," so the client can branch on logic without parsing user-facing messages or coupling to HTTP status codes.",[2682,2683],"structured-error-branching",{},[726,2685,2688],{"className":728,"code":2686,"filename":2687,"language":731,"meta":732,"style":732},"import { parseError } from 'evlog'\n\ntry {\n  await $fetch('\u002Fapi\u002Fcheckout', { method: 'POST', body: cart })\n} catch (err) {\n  const error = parseError(err)\n\n  switch (error.code) {\n    case 'PAYMENT_DECLINED':\n      return showRetryWithDifferentCard()\n    case 'CART_EXPIRED':\n      return rebuildCart()\n    default:\n      return toast.add({ title: error.message, color: 'error' })\n  }\n}\n","composables\u002FuseCheckout.ts",[617,2689,2690,2708,2712,2718,2764,2774,2793,2797,2814,2828,2839,2852,2861,2869,2915,2920],{"__ignoreMap":732},[736,2691,2692,2694,2696,2698,2700,2702,2704,2706],{"class":738,"line":739},[736,2693,805],{"class":749},[736,2695,808],{"class":753},[736,2697,1405],{"class":761},[736,2699,814],{"class":753},[736,2701,817],{"class":749},[736,2703,820],{"class":753},[736,2705,823],{"class":768},[736,2707,826],{"class":753},[736,2709,2710],{"class":738,"line":746},[736,2711,832],{"emptyLinePlaceholder":831},[736,2713,2714,2716],{"class":738,"line":835},[736,2715,2108],{"class":749},[736,2717,1016],{"class":753},[736,2719,2720,2722,2725,2727,2729,2732,2734,2736,2738,2741,2743,2745,2748,2750,2752,2755,2757,2760,2762],{"class":738,"line":847},[736,2721,2115],{"class":749},[736,2723,2724],{"class":757}," $fetch",[736,2726,762],{"class":850},[736,2728,765],{"class":753},[736,2730,2731],{"class":768},"\u002Fapi\u002Fcheckout",[736,2733,765],{"class":753},[736,2735,1615],{"class":753},[736,2737,808],{"class":753},[736,2739,2740],{"class":850}," method",[736,2742,854],{"class":753},[736,2744,820],{"class":753},[736,2746,2747],{"class":768},"POST",[736,2749,765],{"class":753},[736,2751,1615],{"class":753},[736,2753,2754],{"class":850}," body",[736,2756,854],{"class":753},[736,2758,2759],{"class":761}," cart",[736,2761,814],{"class":753},[736,2763,774],{"class":850},[736,2765,2766,2768,2770,2772],{"class":738,"line":867},[736,2767,951],{"class":753},[736,2769,2142],{"class":749},[736,2771,2145],{"class":761},[736,2773,844],{"class":753},[736,2775,2776,2779,2782,2784,2786,2788,2791],{"class":738,"line":883},[736,2777,2778],{"class":973},"  const",[736,2780,2781],{"class":761}," error",[736,2783,1402],{"class":753},[736,2785,1405],{"class":757},[736,2787,762],{"class":850},[736,2789,2790],{"class":761},"err",[736,2792,774],{"class":850},[736,2794,2795],{"class":738,"line":897},[736,2796,832],{"emptyLinePlaceholder":831},[736,2798,2799,2802,2804,2806,2808,2810,2812],{"class":738,"line":914},[736,2800,2801],{"class":749},"  switch",[736,2803,1416],{"class":850},[736,2805,2245],{"class":761},[736,2807,789],{"class":753},[736,2809,617],{"class":761},[736,2811,1441],{"class":850},[736,2813,844],{"class":753},[736,2815,2816,2819,2821,2823,2825],{"class":738,"line":931},[736,2817,2818],{"class":749},"    case",[736,2820,820],{"class":753},[736,2822,859],{"class":768},[736,2824,765],{"class":753},[736,2826,2827],{"class":753},":\n",[736,2829,2830,2833,2836],{"class":738,"line":948},[736,2831,2832],{"class":749},"      return",[736,2834,2835],{"class":757}," showRetryWithDifferentCard",[736,2837,2838],{"class":850},"()\n",[736,2840,2841,2843,2845,2848,2850],{"class":738,"line":1625},[736,2842,2818],{"class":749},[736,2844,820],{"class":753},[736,2846,2847],{"class":768},"CART_EXPIRED",[736,2849,765],{"class":753},[736,2851,2827],{"class":753},[736,2853,2854,2856,2859],{"class":738,"line":2227},[736,2855,2832],{"class":749},[736,2857,2858],{"class":757}," rebuildCart",[736,2860,2838],{"class":850},[736,2862,2864,2867],{"class":738,"line":2863},13,[736,2865,2866],{"class":749},"    default",[736,2868,2827],{"class":753},[736,2870,2872,2874,2877,2879,2882,2884,2887,2890,2892,2894,2896,2898,2900,2903,2905,2907,2909,2911,2913],{"class":738,"line":2871},14,[736,2873,2832],{"class":749},[736,2875,2876],{"class":761}," toast",[736,2878,789],{"class":753},[736,2880,2881],{"class":757},"add",[736,2883,762],{"class":850},[736,2885,2886],{"class":753},"{",[736,2888,2889],{"class":850}," title",[736,2891,854],{"class":753},[736,2893,2781],{"class":761},[736,2895,789],{"class":753},[736,2897,658],{"class":761},[736,2899,1615],{"class":753},[736,2901,2902],{"class":850}," color",[736,2904,854],{"class":753},[736,2906,820],{"class":753},[736,2908,2245],{"class":768},[736,2910,765],{"class":753},[736,2912,814],{"class":753},[736,2914,774],{"class":850},[736,2916,2918],{"class":738,"line":2917},15,[736,2919,1094],{"class":753},[736,2921,2923],{"class":738,"line":2922},16,[736,2924,1099],{"class":753},[613,2926,2927,2929,2930,2932,2933,649,2936,2939,2940,2943,2944,2947],{},[617,2928,1488],{}," also surfaces ",[617,2931,617],{}," from Node-style errors (e.g. ",[617,2934,2935],{},"'ENOENT'",[617,2937,2938],{},"'ECONNRESET'",") and any ",[617,2941,2942],{},"Error"," instance with a string ",[617,2945,2946],{},".code"," property, so existing system errors flow through the same branch.",[613,2949,2950,2952,2953,2956],{},[617,2951,617],{}," is also copied onto wide events under ",[617,2954,2955],{},"error.code",", so dashboards and drains can group, alert, and chart by code without parsing free-text messages.",[715,2958,2960],{"id":2959},"show-the-user-what-they-can-act-on","Show the user what they can act on",[613,2962,642,2963,2965],{},[617,2964,1488],{}," to extract all fields from caught errors:",[794,2967,2968,3186],{},[726,2969,2971],{"className":728,"code":2970,"filename":2687,"language":731,"meta":732,"style":732},"import { parseError } from 'evlog'\n\ntry {\n  await $fetch('\u002Fapi\u002Fcheckout', { method: 'POST', body: cart })\n} catch (err) {\n  const error = parseError(err)\n\n  console.log(error.message)  \u002F\u002F \"Payment failed\"\n  console.log(error.status)   \u002F\u002F 402\n  console.log(error.code)     \u002F\u002F \"PAYMENT_DECLINED\"\n  console.log(error.why)      \u002F\u002F \"Card declined\"\n  console.log(error.fix)      \u002F\u002F \"Try another card\"\n}\n",[617,2972,2973,2991,2995,3001,3041,3051,3067,3071,3095,3117,3139,3161,3182],{"__ignoreMap":732},[736,2974,2975,2977,2979,2981,2983,2985,2987,2989],{"class":738,"line":739},[736,2976,805],{"class":749},[736,2978,808],{"class":753},[736,2980,1405],{"class":761},[736,2982,814],{"class":753},[736,2984,817],{"class":749},[736,2986,820],{"class":753},[736,2988,823],{"class":768},[736,2990,826],{"class":753},[736,2992,2993],{"class":738,"line":746},[736,2994,832],{"emptyLinePlaceholder":831},[736,2996,2997,2999],{"class":738,"line":835},[736,2998,2108],{"class":749},[736,3000,1016],{"class":753},[736,3002,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039],{"class":738,"line":847},[736,3004,2115],{"class":749},[736,3006,2724],{"class":757},[736,3008,762],{"class":850},[736,3010,765],{"class":753},[736,3012,2731],{"class":768},[736,3014,765],{"class":753},[736,3016,1615],{"class":753},[736,3018,808],{"class":753},[736,3020,2740],{"class":850},[736,3022,854],{"class":753},[736,3024,820],{"class":753},[736,3026,2747],{"class":768},[736,3028,765],{"class":753},[736,3030,1615],{"class":753},[736,3032,2754],{"class":850},[736,3034,854],{"class":753},[736,3036,2759],{"class":761},[736,3038,814],{"class":753},[736,3040,774],{"class":850},[736,3042,3043,3045,3047,3049],{"class":738,"line":867},[736,3044,951],{"class":753},[736,3046,2142],{"class":749},[736,3048,2145],{"class":761},[736,3050,844],{"class":753},[736,3052,3053,3055,3057,3059,3061,3063,3065],{"class":738,"line":883},[736,3054,2778],{"class":973},[736,3056,2781],{"class":761},[736,3058,1402],{"class":753},[736,3060,1405],{"class":757},[736,3062,762],{"class":850},[736,3064,2790],{"class":761},[736,3066,774],{"class":850},[736,3068,3069],{"class":738,"line":897},[736,3070,832],{"emptyLinePlaceholder":831},[736,3072,3073,3076,3078,3081,3083,3085,3087,3089,3092],{"class":738,"line":914},[736,3074,3075],{"class":761},"  console",[736,3077,789],{"class":753},[736,3079,3080],{"class":757},"log",[736,3082,762],{"class":850},[736,3084,2245],{"class":761},[736,3086,789],{"class":753},[736,3088,658],{"class":761},[736,3090,3091],{"class":850},")  ",[736,3093,3094],{"class":742},"\u002F\u002F \"Payment failed\"\n",[736,3096,3097,3099,3101,3103,3105,3107,3109,3111,3114],{"class":738,"line":931},[736,3098,3075],{"class":761},[736,3100,789],{"class":753},[736,3102,3080],{"class":757},[736,3104,762],{"class":850},[736,3106,2245],{"class":761},[736,3108,789],{"class":753},[736,3110,677],{"class":761},[736,3112,3113],{"class":850},")   ",[736,3115,3116],{"class":742},"\u002F\u002F 402\n",[736,3118,3119,3121,3123,3125,3127,3129,3131,3133,3136],{"class":738,"line":948},[736,3120,3075],{"class":761},[736,3122,789],{"class":753},[736,3124,3080],{"class":757},[736,3126,762],{"class":850},[736,3128,2245],{"class":761},[736,3130,789],{"class":753},[736,3132,617],{"class":761},[736,3134,3135],{"class":850},")     ",[736,3137,3138],{"class":742},"\u002F\u002F \"PAYMENT_DECLINED\"\n",[736,3140,3141,3143,3145,3147,3149,3151,3153,3155,3158],{"class":738,"line":1625},[736,3142,3075],{"class":761},[736,3144,789],{"class":753},[736,3146,3080],{"class":757},[736,3148,762],{"class":850},[736,3150,2245],{"class":761},[736,3152,789],{"class":753},[736,3154,662],{"class":761},[736,3156,3157],{"class":850},")      ",[736,3159,3160],{"class":742},"\u002F\u002F \"Card declined\"\n",[736,3162,3163,3165,3167,3169,3171,3173,3175,3177,3179],{"class":738,"line":2227},[736,3164,3075],{"class":761},[736,3166,789],{"class":753},[736,3168,3080],{"class":757},[736,3170,762],{"class":850},[736,3172,2245],{"class":761},[736,3174,789],{"class":753},[736,3176,666],{"class":761},[736,3178,3157],{"class":850},[736,3180,3181],{"class":742},"\u002F\u002F \"Try another card\"\n",[736,3183,3184],{"class":738,"line":2863},[736,3185,1099],{"class":753},[726,3187,3190],{"className":728,"code":3188,"filename":3189,"language":731,"meta":732,"style":732},"import { parseError } from 'evlog'\n\nconst toast = useToast()\n\ntry {\n  await $fetch('\u002Fapi\u002Fcheckout', { method: 'POST', body: cart })\n} catch (err) {\n  const error = parseError(err)\n\n  toast.add({\n    title: error.message,\n    description: error.why,\n    color: 'error',\n    actions: error.link\n      ? [{ label: 'Learn more', onClick: () => window.open(error.link) }]\n      : undefined,\n  })\n}\n","composables\u002FuseCheckout.ts (Nuxt UI)",[617,3191,3192,3210,3214,3229,3233,3239,3279,3289,3305,3309,3322,3337,3352,3367,3381,3439,3447,3454],{"__ignoreMap":732},[736,3193,3194,3196,3198,3200,3202,3204,3206,3208],{"class":738,"line":739},[736,3195,805],{"class":749},[736,3197,808],{"class":753},[736,3199,1405],{"class":761},[736,3201,814],{"class":753},[736,3203,817],{"class":749},[736,3205,820],{"class":753},[736,3207,823],{"class":768},[736,3209,826],{"class":753},[736,3211,3212],{"class":738,"line":746},[736,3213,832],{"emptyLinePlaceholder":831},[736,3215,3216,3218,3221,3224,3227],{"class":738,"line":835},[736,3217,1392],{"class":973},[736,3219,3220],{"class":761}," toast ",[736,3222,3223],{"class":753},"=",[736,3225,3226],{"class":757}," useToast",[736,3228,2838],{"class":761},[736,3230,3231],{"class":738,"line":847},[736,3232,832],{"emptyLinePlaceholder":831},[736,3234,3235,3237],{"class":738,"line":867},[736,3236,2108],{"class":749},[736,3238,1016],{"class":753},[736,3240,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3275,3277],{"class":738,"line":883},[736,3242,2115],{"class":749},[736,3244,2724],{"class":757},[736,3246,762],{"class":850},[736,3248,765],{"class":753},[736,3250,2731],{"class":768},[736,3252,765],{"class":753},[736,3254,1615],{"class":753},[736,3256,808],{"class":753},[736,3258,2740],{"class":850},[736,3260,854],{"class":753},[736,3262,820],{"class":753},[736,3264,2747],{"class":768},[736,3266,765],{"class":753},[736,3268,1615],{"class":753},[736,3270,2754],{"class":850},[736,3272,854],{"class":753},[736,3274,2759],{"class":761},[736,3276,814],{"class":753},[736,3278,774],{"class":850},[736,3280,3281,3283,3285,3287],{"class":738,"line":897},[736,3282,951],{"class":753},[736,3284,2142],{"class":749},[736,3286,2145],{"class":761},[736,3288,844],{"class":753},[736,3290,3291,3293,3295,3297,3299,3301,3303],{"class":738,"line":914},[736,3292,2778],{"class":973},[736,3294,2781],{"class":761},[736,3296,1402],{"class":753},[736,3298,1405],{"class":757},[736,3300,762],{"class":850},[736,3302,2790],{"class":761},[736,3304,774],{"class":850},[736,3306,3307],{"class":738,"line":931},[736,3308,832],{"emptyLinePlaceholder":831},[736,3310,3311,3314,3316,3318,3320],{"class":738,"line":948},[736,3312,3313],{"class":761},"  toast",[736,3315,789],{"class":753},[736,3317,2881],{"class":757},[736,3319,762],{"class":850},[736,3321,844],{"class":753},[736,3323,3324,3327,3329,3331,3333,3335],{"class":738,"line":1625},[736,3325,3326],{"class":850},"    title",[736,3328,854],{"class":753},[736,3330,2781],{"class":761},[736,3332,789],{"class":753},[736,3334,658],{"class":761},[736,3336,864],{"class":753},[736,3338,3339,3342,3344,3346,3348,3350],{"class":738,"line":2227},[736,3340,3341],{"class":850},"    description",[736,3343,854],{"class":753},[736,3345,2781],{"class":761},[736,3347,789],{"class":753},[736,3349,662],{"class":761},[736,3351,864],{"class":753},[736,3353,3354,3357,3359,3361,3363,3365],{"class":738,"line":2863},[736,3355,3356],{"class":850},"    color",[736,3358,854],{"class":753},[736,3360,820],{"class":753},[736,3362,2245],{"class":768},[736,3364,765],{"class":753},[736,3366,864],{"class":753},[736,3368,3369,3372,3374,3376,3378],{"class":738,"line":2871},[736,3370,3371],{"class":850},"    actions",[736,3373,854],{"class":753},[736,3375,2781],{"class":761},[736,3377,789],{"class":753},[736,3379,3380],{"class":761},"link\n",[736,3382,3383,3386,3389,3391,3394,3396,3398,3401,3403,3405,3408,3410,3413,3416,3419,3421,3424,3426,3428,3430,3432,3434,3436],{"class":738,"line":2917},[736,3384,3385],{"class":753},"      ?",[736,3387,3388],{"class":850}," [",[736,3390,2886],{"class":753},[736,3392,3393],{"class":850}," label",[736,3395,854],{"class":753},[736,3397,820],{"class":753},[736,3399,3400],{"class":768},"Learn more",[736,3402,765],{"class":753},[736,3404,1615],{"class":753},[736,3406,3407],{"class":757}," onClick",[736,3409,854],{"class":753},[736,3411,3412],{"class":753}," ()",[736,3414,3415],{"class":973}," =>",[736,3417,3418],{"class":761}," window",[736,3420,789],{"class":753},[736,3422,3423],{"class":757},"open",[736,3425,762],{"class":850},[736,3427,2245],{"class":761},[736,3429,789],{"class":753},[736,3431,670],{"class":761},[736,3433,1441],{"class":850},[736,3435,951],{"class":753},[736,3437,3438],{"class":850},"]\n",[736,3440,3441,3444],{"class":738,"line":2922},[736,3442,3443],{"class":753},"      :",[736,3445,3446],{"class":753}," undefined,\n",[736,3448,3450,3452],{"class":738,"line":3449},17,[736,3451,2222],{"class":753},[736,3453,774],{"class":850},[736,3455,3457],{"class":738,"line":3456},18,[736,3458,1099],{"class":753},[1689,3460,3462],{"id":3461},"error-display-component","Error Display Component",[613,3464,3465],{},"Create a reusable error display:",[726,3467,3472],{"className":3468,"code":3469,"filename":3470,"language":3471,"meta":732,"style":732},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nimport { parseError } from 'evlog'\n\nconst { error } = defineProps\u003C{\n  error: unknown\n}>()\n\nconst parsed = computed(() => parseError(error))\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUAlert\n    :title=\"parsed.message\"\n    :description=\"parsed.why\"\n    color=\"error\"\n    icon=\"i-lucide-alert-circle\"\n  >\n    \u003Ctemplate v-if=\"parsed.fix\" #description>\n      \u003Cp>{{ parsed.why }}\u003C\u002Fp>\n      \u003Cp class=\"mt-2 font-medium\">{{ parsed.fix }}\u003C\u002Fp>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUAlert>\n\u003C\u002Ftemplate>\n","components\u002FErrorAlert.vue","vue",[617,3473,3474,3500,3518,3522,3541,3551,3558,3562,3586,3595,3599,3608,3616,3637,3656,3668,3682,3687,3716,3736,3766,3776,3787],{"__ignoreMap":732},[736,3475,3476,3479,3482,3485,3488,3490,3492,3495,3497],{"class":738,"line":739},[736,3477,3478],{"class":753},"\u003C",[736,3480,3481],{"class":850},"script",[736,3483,3484],{"class":973}," setup",[736,3486,3487],{"class":973}," lang",[736,3489,3223],{"class":753},[736,3491,977],{"class":753},[736,3493,3494],{"class":768},"ts",[736,3496,977],{"class":753},[736,3498,3499],{"class":753},">\n",[736,3501,3502,3504,3506,3508,3510,3512,3514,3516],{"class":738,"line":746},[736,3503,805],{"class":749},[736,3505,808],{"class":753},[736,3507,1405],{"class":761},[736,3509,814],{"class":753},[736,3511,817],{"class":749},[736,3513,820],{"class":753},[736,3515,823],{"class":768},[736,3517,826],{"class":753},[736,3519,3520],{"class":738,"line":835},[736,3521,832],{"emptyLinePlaceholder":831},[736,3523,3524,3526,3528,3531,3533,3535,3538],{"class":738,"line":847},[736,3525,1392],{"class":973},[736,3527,808],{"class":753},[736,3529,3530],{"class":761}," error ",[736,3532,951],{"class":753},[736,3534,1402],{"class":753},[736,3536,3537],{"class":757}," defineProps",[736,3539,3540],{"class":753},"\u003C{\n",[736,3542,3543,3546,3548],{"class":738,"line":867},[736,3544,3545],{"class":850},"  error",[736,3547,854],{"class":753},[736,3549,3550],{"class":1024}," unknown\n",[736,3552,3553,3556],{"class":738,"line":883},[736,3554,3555],{"class":753},"}>",[736,3557,2838],{"class":761},[736,3559,3560],{"class":738,"line":897},[736,3561,832],{"emptyLinePlaceholder":831},[736,3563,3564,3566,3569,3571,3574,3576,3579,3581,3583],{"class":738,"line":914},[736,3565,1392],{"class":973},[736,3567,3568],{"class":761}," parsed ",[736,3570,3223],{"class":753},[736,3572,3573],{"class":757}," computed",[736,3575,762],{"class":761},[736,3577,3578],{"class":753},"()",[736,3580,3415],{"class":973},[736,3582,1405],{"class":757},[736,3584,3585],{"class":761},"(error))\n",[736,3587,3588,3591,3593],{"class":738,"line":931},[736,3589,3590],{"class":753},"\u003C\u002F",[736,3592,3481],{"class":850},[736,3594,3499],{"class":753},[736,3596,3597],{"class":738,"line":948},[736,3598,832],{"emptyLinePlaceholder":831},[736,3600,3601,3603,3606],{"class":738,"line":1625},[736,3602,3478],{"class":753},[736,3604,3605],{"class":850},"template",[736,3607,3499],{"class":753},[736,3609,3610,3613],{"class":738,"line":2227},[736,3611,3612],{"class":753},"  \u003C",[736,3614,3615],{"class":850},"UAlert\n",[736,3617,3618,3621,3624,3626,3628,3631,3633,3635],{"class":738,"line":2863},[736,3619,3620],{"class":753},"    :",[736,3622,3623],{"class":973},"title",[736,3625,3223],{"class":753},[736,3627,977],{"class":753},[736,3629,3630],{"class":761},"parsed",[736,3632,789],{"class":753},[736,3634,658],{"class":761},[736,3636,1089],{"class":753},[736,3638,3639,3641,3644,3646,3648,3650,3652,3654],{"class":738,"line":2871},[736,3640,3620],{"class":753},[736,3642,3643],{"class":973},"description",[736,3645,3223],{"class":753},[736,3647,977],{"class":753},[736,3649,3630],{"class":761},[736,3651,789],{"class":753},[736,3653,662],{"class":761},[736,3655,1089],{"class":753},[736,3657,3658,3660,3662,3664,3666],{"class":738,"line":2917},[736,3659,3356],{"class":973},[736,3661,3223],{"class":753},[736,3663,977],{"class":753},[736,3665,2245],{"class":768},[736,3667,1089],{"class":753},[736,3669,3670,3673,3675,3677,3680],{"class":738,"line":2922},[736,3671,3672],{"class":973},"    icon",[736,3674,3223],{"class":753},[736,3676,977],{"class":753},[736,3678,3679],{"class":768},"i-lucide-alert-circle",[736,3681,1089],{"class":753},[736,3683,3684],{"class":738,"line":3449},[736,3685,3686],{"class":753},"  >\n",[736,3688,3689,3692,3694,3697,3699,3701,3703,3705,3707,3709,3712,3714],{"class":738,"line":3456},[736,3690,3691],{"class":753},"    \u003C",[736,3693,3605],{"class":850},[736,3695,3696],{"class":749}," v-if",[736,3698,3223],{"class":753},[736,3700,977],{"class":753},[736,3702,3630],{"class":761},[736,3704,789],{"class":753},[736,3706,666],{"class":761},[736,3708,977],{"class":753},[736,3710,3711],{"class":753}," #",[736,3713,3643],{"class":973},[736,3715,3499],{"class":753},[736,3717,3719,3722,3724,3727,3730,3732,3734],{"class":738,"line":3718},19,[736,3720,3721],{"class":753},"      \u003C",[736,3723,613],{"class":850},[736,3725,3726],{"class":753},">",[736,3728,3729],{"class":761},"{{ parsed.why }}",[736,3731,3590],{"class":753},[736,3733,613],{"class":850},[736,3735,3499],{"class":753},[736,3737,3739,3741,3743,3746,3748,3750,3753,3755,3757,3760,3762,3764],{"class":738,"line":3738},20,[736,3740,3721],{"class":753},[736,3742,613],{"class":850},[736,3744,3745],{"class":973}," class",[736,3747,3223],{"class":753},[736,3749,977],{"class":753},[736,3751,3752],{"class":768},"mt-2 font-medium",[736,3754,977],{"class":753},[736,3756,3726],{"class":753},[736,3758,3759],{"class":761},"{{ parsed.fix }}",[736,3761,3590],{"class":753},[736,3763,613],{"class":850},[736,3765,3499],{"class":753},[736,3767,3769,3772,3774],{"class":738,"line":3768},21,[736,3770,3771],{"class":753},"    \u003C\u002F",[736,3773,3605],{"class":850},[736,3775,3499],{"class":753},[736,3777,3779,3782,3785],{"class":738,"line":3778},22,[736,3780,3781],{"class":753},"  \u003C\u002F",[736,3783,3784],{"class":850},"UAlert",[736,3786,3499],{"class":753},[736,3788,3790,3792,3794],{"class":738,"line":3789},23,[736,3791,3590],{"class":753},[736,3793,3605],{"class":850},[736,3795,3499],{"class":753},[715,3797,565],{"id":3798},"best-practices",[1689,3800,3802],{"id":3801},"use-appropriate-status-codes","Use Appropriate Status Codes",[794,3804,3805,3873,3956,4008],{},[726,3806,3809],{"className":728,"code":3807,"filename":3808,"language":731,"meta":732,"style":732},"\u002F\u002F Client error - user can fix\nthrow createError({\n  message: 'Invalid email format',\n  status: 400,\n  fix: 'Please enter a valid email address',\n})\n","400 - Bad Request",[617,3810,3811,3816,3826,3841,3852,3867],{"__ignoreMap":732},[736,3812,3813],{"class":738,"line":739},[736,3814,3815],{"class":742},"\u002F\u002F Client error - user can fix\n",[736,3817,3818,3820,3822,3824],{"class":738,"line":746},[736,3819,750],{"class":749},[736,3821,811],{"class":757},[736,3823,762],{"class":761},[736,3825,844],{"class":753},[736,3827,3828,3830,3832,3834,3837,3839],{"class":738,"line":835},[736,3829,870],{"class":850},[736,3831,854],{"class":753},[736,3833,820],{"class":753},[736,3835,3836],{"class":768},"Invalid email format",[736,3838,765],{"class":753},[736,3840,864],{"class":753},[736,3842,3843,3845,3847,3850],{"class":738,"line":847},[736,3844,886],{"class":850},[736,3846,854],{"class":753},[736,3848,3849],{"class":891}," 400",[736,3851,864],{"class":753},[736,3853,3854,3856,3858,3860,3863,3865],{"class":738,"line":867},[736,3855,917],{"class":850},[736,3857,854],{"class":753},[736,3859,820],{"class":753},[736,3861,3862],{"class":768},"Please enter a valid email address",[736,3864,765],{"class":753},[736,3866,864],{"class":753},[736,3868,3869,3871],{"class":738,"line":883},[736,3870,951],{"class":753},[736,3872,774],{"class":761},[726,3874,3877],{"className":728,"code":3875,"filename":3876,"language":731,"meta":732,"style":732},"\u002F\u002F Authentication required\nthrow createError({\n  message: 'Please log in to continue',\n  status: 401,\n  fix: 'Sign in to your account',\n  link: '\u002Flogin',\n})\n","401 - Unauthorized",[617,3878,3879,3884,3894,3909,3920,3935,3950],{"__ignoreMap":732},[736,3880,3881],{"class":738,"line":739},[736,3882,3883],{"class":742},"\u002F\u002F Authentication required\n",[736,3885,3886,3888,3890,3892],{"class":738,"line":746},[736,3887,750],{"class":749},[736,3889,811],{"class":757},[736,3891,762],{"class":761},[736,3893,844],{"class":753},[736,3895,3896,3898,3900,3902,3905,3907],{"class":738,"line":835},[736,3897,870],{"class":850},[736,3899,854],{"class":753},[736,3901,820],{"class":753},[736,3903,3904],{"class":768},"Please log in to continue",[736,3906,765],{"class":753},[736,3908,864],{"class":753},[736,3910,3911,3913,3915,3918],{"class":738,"line":847},[736,3912,886],{"class":850},[736,3914,854],{"class":753},[736,3916,3917],{"class":891}," 401",[736,3919,864],{"class":753},[736,3921,3922,3924,3926,3928,3931,3933],{"class":738,"line":867},[736,3923,917],{"class":850},[736,3925,854],{"class":753},[736,3927,820],{"class":753},[736,3929,3930],{"class":768},"Sign in to your account",[736,3932,765],{"class":753},[736,3934,864],{"class":753},[736,3936,3937,3939,3941,3943,3946,3948],{"class":738,"line":883},[736,3938,934],{"class":850},[736,3940,854],{"class":753},[736,3942,820],{"class":753},[736,3944,3945],{"class":768},"\u002Flogin",[736,3947,765],{"class":753},[736,3949,864],{"class":753},[736,3951,3952,3954],{"class":738,"line":897},[736,3953,951],{"class":753},[736,3955,774],{"class":761},[726,3957,3960],{"className":728,"code":3958,"filename":3959,"language":731,"meta":732,"style":732},"\u002F\u002F Resource not found\nthrow createError({\n  message: 'Order not found',\n  status: 404,\n})\n","404 - Not Found",[617,3961,3962,3967,3977,3992,4002],{"__ignoreMap":732},[736,3963,3964],{"class":738,"line":739},[736,3965,3966],{"class":742},"\u002F\u002F Resource not found\n",[736,3968,3969,3971,3973,3975],{"class":738,"line":746},[736,3970,750],{"class":749},[736,3972,811],{"class":757},[736,3974,762],{"class":761},[736,3976,844],{"class":753},[736,3978,3979,3981,3983,3985,3988,3990],{"class":738,"line":835},[736,3980,870],{"class":850},[736,3982,854],{"class":753},[736,3984,820],{"class":753},[736,3986,3987],{"class":768},"Order not found",[736,3989,765],{"class":753},[736,3991,864],{"class":753},[736,3993,3994,3996,3998,4000],{"class":738,"line":847},[736,3995,886],{"class":850},[736,3997,854],{"class":753},[736,3999,1756],{"class":891},[736,4001,864],{"class":753},[736,4003,4004,4006],{"class":738,"line":867},[736,4005,951],{"class":753},[736,4007,774],{"class":761},[726,4009,4012],{"className":728,"code":4010,"filename":4011,"language":731,"meta":732,"style":732},"\u002F\u002F Server error - not user's fault\nthrow createError({\n  message: 'Something went wrong',\n  status: 500,\n  why: 'Database connection timeout',\n  \u002F\u002F No 'fix' - user can't fix server errors\n})\n","500 - Server Error",[617,4013,4014,4019,4029,4044,4054,4069,4074],{"__ignoreMap":732},[736,4015,4016],{"class":738,"line":739},[736,4017,4018],{"class":742},"\u002F\u002F Server error - not user's fault\n",[736,4020,4021,4023,4025,4027],{"class":738,"line":746},[736,4022,750],{"class":749},[736,4024,811],{"class":757},[736,4026,762],{"class":761},[736,4028,844],{"class":753},[736,4030,4031,4033,4035,4037,4040,4042],{"class":738,"line":835},[736,4032,870],{"class":850},[736,4034,854],{"class":753},[736,4036,820],{"class":753},[736,4038,4039],{"class":768},"Something went wrong",[736,4041,765],{"class":753},[736,4043,864],{"class":753},[736,4045,4046,4048,4050,4052],{"class":738,"line":847},[736,4047,886],{"class":850},[736,4049,854],{"class":753},[736,4051,2184],{"class":891},[736,4053,864],{"class":753},[736,4055,4056,4058,4060,4062,4065,4067],{"class":738,"line":867},[736,4057,900],{"class":850},[736,4059,854],{"class":753},[736,4061,820],{"class":753},[736,4063,4064],{"class":768},"Database connection timeout",[736,4066,765],{"class":753},[736,4068,864],{"class":753},[736,4070,4071],{"class":738,"line":883},[736,4072,4073],{"class":742},"  \u002F\u002F No 'fix' - user can't fix server errors\n",[736,4075,4076,4078],{"class":738,"line":897},[736,4077,951],{"class":753},[736,4079,774],{"class":761},[1689,4081,4083],{"id":4082},"provide-actionable-fixes","Provide Actionable Fixes",[794,4085,4086,4143],{},[726,4087,4090],{"className":728,"code":4088,"filename":4089,"language":731,"meta":732,"style":732},"\u002F\u002F Unhelpful fix\nthrow createError({\n  message: 'Upload failed',\n  fix: 'Try again',\n})\n","Bad",[617,4091,4092,4097,4107,4122,4137],{"__ignoreMap":732},[736,4093,4094],{"class":738,"line":739},[736,4095,4096],{"class":742},"\u002F\u002F Unhelpful fix\n",[736,4098,4099,4101,4103,4105],{"class":738,"line":746},[736,4100,750],{"class":749},[736,4102,811],{"class":757},[736,4104,762],{"class":761},[736,4106,844],{"class":753},[736,4108,4109,4111,4113,4115,4118,4120],{"class":738,"line":835},[736,4110,870],{"class":850},[736,4112,854],{"class":753},[736,4114,820],{"class":753},[736,4116,4117],{"class":768},"Upload failed",[736,4119,765],{"class":753},[736,4121,864],{"class":753},[736,4123,4124,4126,4128,4130,4133,4135],{"class":738,"line":847},[736,4125,917],{"class":850},[736,4127,854],{"class":753},[736,4129,820],{"class":753},[736,4131,4132],{"class":768},"Try again",[736,4134,765],{"class":753},[736,4136,864],{"class":753},[736,4138,4139,4141],{"class":738,"line":867},[736,4140,951],{"class":753},[736,4142,774],{"class":761},[726,4144,4147],{"className":728,"code":4145,"filename":4146,"language":731,"meta":732,"style":732},"\u002F\u002F Actionable fix\nthrow createError({\n  message: 'Upload failed',\n  status: 413,\n  why: 'File exceeds maximum size (10MB)',\n  fix: 'Reduce the file size or compress the image before uploading',\n  link: '\u002Fdocs\u002Fupload-limits',\n})\n","Good",[617,4148,4149,4154,4164,4178,4189,4204,4219,4234],{"__ignoreMap":732},[736,4150,4151],{"class":738,"line":739},[736,4152,4153],{"class":742},"\u002F\u002F Actionable fix\n",[736,4155,4156,4158,4160,4162],{"class":738,"line":746},[736,4157,750],{"class":749},[736,4159,811],{"class":757},[736,4161,762],{"class":761},[736,4163,844],{"class":753},[736,4165,4166,4168,4170,4172,4174,4176],{"class":738,"line":835},[736,4167,870],{"class":850},[736,4169,854],{"class":753},[736,4171,820],{"class":753},[736,4173,4117],{"class":768},[736,4175,765],{"class":753},[736,4177,864],{"class":753},[736,4179,4180,4182,4184,4187],{"class":738,"line":847},[736,4181,886],{"class":850},[736,4183,854],{"class":753},[736,4185,4186],{"class":891}," 413",[736,4188,864],{"class":753},[736,4190,4191,4193,4195,4197,4200,4202],{"class":738,"line":867},[736,4192,900],{"class":850},[736,4194,854],{"class":753},[736,4196,820],{"class":753},[736,4198,4199],{"class":768},"File exceeds maximum size (10MB)",[736,4201,765],{"class":753},[736,4203,864],{"class":753},[736,4205,4206,4208,4210,4212,4215,4217],{"class":738,"line":883},[736,4207,917],{"class":850},[736,4209,854],{"class":753},[736,4211,820],{"class":753},[736,4213,4214],{"class":768},"Reduce the file size or compress the image before uploading",[736,4216,765],{"class":753},[736,4218,864],{"class":753},[736,4220,4221,4223,4225,4227,4230,4232],{"class":738,"line":897},[736,4222,934],{"class":850},[736,4224,854],{"class":753},[736,4226,820],{"class":753},[736,4228,4229],{"class":768},"\u002Fdocs\u002Fupload-limits",[736,4231,765],{"class":753},[736,4233,864],{"class":753},[736,4235,4236,4238],{"class":738,"line":914},[736,4237,951],{"class":753},[736,4239,774],{"class":761},[715,4241,4243],{"id":4242},"error-catalogs","Error Catalogs",[613,4245,4246,4247,4250,4251,4254,4255,4258,4259,4261,4262,4265,4266,4268],{},"For anything beyond a handful of one-off errors, group them in a typed ",[1482,4248,4249],{},"catalog",". evlog ships two primitives for this: ",[617,4252,4253],{},"defineError"," (single factory) and ",[617,4256,4257],{},"defineErrorCatalog"," (bundle prefixed). The wire ",[617,4260,617],{}," is auto-derived as ",[617,4263,4264],{},"${prefix}.${KEY}"," and the ",[617,4267,1672],{}," instance is built with all defaults applied.",[1689,4270,4272],{"id":4271},"defineerrorcatalog",[617,4273,4257],{},[613,4275,4276,4277,4280,4281,4284],{},"Define a bundle of errors that share a prefix. Convention: ",[617,4278,4279],{},"UPPER_SNAKE_CASE"," keys, ",[617,4282,4283],{},"lower.dot.case"," prefix.",[794,4286,4287,4585],{},[726,4288,4291],{"className":728,"code":4289,"filename":4290,"language":731,"meta":732,"style":732},"import { defineErrorCatalog } from 'evlog'\n\nexport const billingErrors = defineErrorCatalog('billing', {\n  CART_EMPTY: {\n    status: 400,\n    message: 'Cart is empty',\n  },\n  PAYMENT_DECLINED: {\n    status: 402,\n    message: 'Card declined',\n    why: 'Issuer declined the charge',\n    fix: 'Try a different payment method',\n    link: 'https:\u002F\u002Fdocs.example.com\u002Ferrors\u002Fbilling.payment_declined',\n  },\n  INSUFFICIENT_FUNDS: {\n    status: 402,\n    message: ({ available, required }: { available: number, required: number }) =>\n      `Insufficient funds: $${available} available, $${required} required`,\n    fix: 'Add funds and retry',\n  },\n})\n","errors\u002Fbilling.ts",[617,4292,4293,4312,4316,4344,4353,4363,4378,4382,4391,4401,4415,4429,4444,4460,4464,4473,4483,4527,4560,4575,4579],{"__ignoreMap":732},[736,4294,4295,4297,4299,4302,4304,4306,4308,4310],{"class":738,"line":739},[736,4296,805],{"class":749},[736,4298,808],{"class":753},[736,4300,4301],{"class":761}," defineErrorCatalog",[736,4303,814],{"class":753},[736,4305,817],{"class":749},[736,4307,820],{"class":753},[736,4309,823],{"class":768},[736,4311,826],{"class":753},[736,4313,4314],{"class":738,"line":746},[736,4315,832],{"emptyLinePlaceholder":831},[736,4317,4318,4321,4324,4327,4329,4331,4333,4335,4338,4340,4342],{"class":738,"line":835},[736,4319,4320],{"class":749},"export",[736,4322,4323],{"class":973}," const",[736,4325,4326],{"class":761}," billingErrors ",[736,4328,3223],{"class":753},[736,4330,4301],{"class":757},[736,4332,762],{"class":761},[736,4334,765],{"class":753},[736,4336,4337],{"class":768},"billing",[736,4339,765],{"class":753},[736,4341,1615],{"class":753},[736,4343,1016],{"class":753},[736,4345,4346,4349,4351],{"class":738,"line":847},[736,4347,4348],{"class":850},"  CART_EMPTY",[736,4350,854],{"class":753},[736,4352,1016],{"class":753},[736,4354,4355,4357,4359,4361],{"class":738,"line":867},[736,4356,2179],{"class":850},[736,4358,854],{"class":753},[736,4360,3849],{"class":891},[736,4362,864],{"class":753},[736,4364,4365,4367,4369,4371,4374,4376],{"class":738,"line":883},[736,4366,2163],{"class":850},[736,4368,854],{"class":753},[736,4370,820],{"class":753},[736,4372,4373],{"class":768},"Cart is empty",[736,4375,765],{"class":753},[736,4377,864],{"class":753},[736,4379,4380],{"class":738,"line":897},[736,4381,1361],{"class":753},[736,4383,4384,4387,4389],{"class":738,"line":914},[736,4385,4386],{"class":850},"  PAYMENT_DECLINED",[736,4388,854],{"class":753},[736,4390,1016],{"class":753},[736,4392,4393,4395,4397,4399],{"class":738,"line":931},[736,4394,2179],{"class":850},[736,4396,854],{"class":753},[736,4398,892],{"class":891},[736,4400,864],{"class":753},[736,4402,4403,4405,4407,4409,4411,4413],{"class":738,"line":948},[736,4404,2163],{"class":850},[736,4406,854],{"class":753},[736,4408,820],{"class":753},[736,4410,2325],{"class":768},[736,4412,765],{"class":753},[736,4414,864],{"class":753},[736,4416,4417,4419,4421,4423,4425,4427],{"class":738,"line":1625},[736,4418,2191],{"class":850},[736,4420,854],{"class":753},[736,4422,820],{"class":753},[736,4424,2350],{"class":768},[736,4426,765],{"class":753},[736,4428,864],{"class":753},[736,4430,4431,4434,4436,4438,4440,4442],{"class":738,"line":2227},[736,4432,4433],{"class":850},"    fix",[736,4435,854],{"class":753},[736,4437,820],{"class":753},[736,4439,1914],{"class":768},[736,4441,765],{"class":753},[736,4443,864],{"class":753},[736,4445,4446,4449,4451,4453,4456,4458],{"class":738,"line":2863},[736,4447,4448],{"class":850},"    link",[736,4450,854],{"class":753},[736,4452,820],{"class":753},[736,4454,4455],{"class":768},"https:\u002F\u002Fdocs.example.com\u002Ferrors\u002Fbilling.payment_declined",[736,4457,765],{"class":753},[736,4459,864],{"class":753},[736,4461,4462],{"class":738,"line":2871},[736,4463,1361],{"class":753},[736,4465,4466,4469,4471],{"class":738,"line":2917},[736,4467,4468],{"class":850},"  INSUFFICIENT_FUNDS",[736,4470,854],{"class":753},[736,4472,1016],{"class":753},[736,4474,4475,4477,4479,4481],{"class":738,"line":2922},[736,4476,2179],{"class":850},[736,4478,854],{"class":753},[736,4480,892],{"class":891},[736,4482,864],{"class":753},[736,4484,4485,4487,4489,4492,4496,4498,4501,4504,4506,4508,4510,4513,4515,4517,4519,4521,4524],{"class":738,"line":3449},[736,4486,2163],{"class":757},[736,4488,854],{"class":753},[736,4490,4491],{"class":753}," ({",[736,4493,4495],{"class":4494},"sHdIc"," available",[736,4497,1615],{"class":753},[736,4499,4500],{"class":4494}," required",[736,4502,4503],{"class":753}," }:",[736,4505,808],{"class":753},[736,4507,4495],{"class":850},[736,4509,854],{"class":753},[736,4511,4512],{"class":1024}," number",[736,4514,1615],{"class":753},[736,4516,4500],{"class":850},[736,4518,854],{"class":753},[736,4520,4512],{"class":1024},[736,4522,4523],{"class":753}," })",[736,4525,4526],{"class":973}," =>\n",[736,4528,4529,4532,4535,4538,4541,4543,4546,4548,4551,4553,4555,4558],{"class":738,"line":3456},[736,4530,4531],{"class":753},"      `",[736,4533,4534],{"class":768},"Insufficient funds: $",[736,4536,4537],{"class":753},"${",[736,4539,4540],{"class":761},"available",[736,4542,951],{"class":753},[736,4544,4545],{"class":768}," available, $",[736,4547,4537],{"class":753},[736,4549,4550],{"class":761},"required",[736,4552,951],{"class":753},[736,4554,4500],{"class":768},[736,4556,4557],{"class":753},"`",[736,4559,864],{"class":753},[736,4561,4562,4564,4566,4568,4571,4573],{"class":738,"line":3718},[736,4563,4433],{"class":850},[736,4565,854],{"class":753},[736,4567,820],{"class":753},[736,4569,4570],{"class":768},"Add funds and retry",[736,4572,765],{"class":753},[736,4574,864],{"class":753},[736,4576,4577],{"class":738,"line":3738},[736,4578,1361],{"class":753},[736,4580,4581,4583],{"class":738,"line":3768},[736,4582,951],{"class":753},[736,4584,774],{"class":761},[726,4586,4589],{"className":728,"code":4587,"filename":4588,"language":731,"meta":732,"style":732},"import { billingErrors } from '~\u002Ferrors\u002Fbilling'\n\nexport default defineEventHandler(async (event) => {\n  const cart = await getCart(event)\n\n  if (!cart.items.length) throw billingErrors.CART_EMPTY()\n\n  try {\n    await stripe.charge(cart.total)\n  }\n  catch (e) {\n    if (e.code === 'card_declined') throw billingErrors.PAYMENT_DECLINED({ cause: e })\n    if (e.code === 'insufficient_funds') {\n      throw billingErrors.INSUFFICIENT_FUNDS({\n        available: e.balance,\n        required: cart.total,\n        cause: e,\n      })\n    }\n    throw e\n  }\n})\n","server\u002Fapi\u002Fcheckout.post.ts",[617,4590,4591,4611,4615,4641,4661,4665,4700,4704,4711,4733,4737,4751,4800,4824,4840,4856,4871,4882,4889,4894,4902,4906],{"__ignoreMap":732},[736,4592,4593,4595,4597,4600,4602,4604,4606,4609],{"class":738,"line":739},[736,4594,805],{"class":749},[736,4596,808],{"class":753},[736,4598,4599],{"class":761}," billingErrors",[736,4601,814],{"class":753},[736,4603,817],{"class":749},[736,4605,820],{"class":753},[736,4607,4608],{"class":768},"~\u002Ferrors\u002Fbilling",[736,4610,826],{"class":753},[736,4612,4613],{"class":738,"line":746},[736,4614,832],{"emptyLinePlaceholder":831},[736,4616,4617,4619,4622,4625,4627,4630,4632,4635,4637,4639],{"class":738,"line":835},[736,4618,4320],{"class":749},[736,4620,4621],{"class":749}," default",[736,4623,4624],{"class":757}," defineEventHandler",[736,4626,762],{"class":761},[736,4628,4629],{"class":973},"async",[736,4631,1416],{"class":753},[736,4633,4634],{"class":4494},"event",[736,4636,1153],{"class":753},[736,4638,3415],{"class":973},[736,4640,1016],{"class":753},[736,4642,4643,4645,4647,4649,4652,4655,4657,4659],{"class":738,"line":847},[736,4644,2778],{"class":973},[736,4646,2759],{"class":761},[736,4648,1402],{"class":753},[736,4650,4651],{"class":749}," await",[736,4653,4654],{"class":757}," getCart",[736,4656,762],{"class":850},[736,4658,4634],{"class":761},[736,4660,774],{"class":850},[736,4662,4663],{"class":738,"line":867},[736,4664,832],{"emptyLinePlaceholder":831},[736,4666,4667,4670,4672,4675,4677,4679,4682,4684,4687,4689,4691,4693,4695,4698],{"class":738,"line":883},[736,4668,4669],{"class":749},"  if",[736,4671,1416],{"class":850},[736,4673,4674],{"class":753},"!",[736,4676,2253],{"class":761},[736,4678,789],{"class":753},[736,4680,4681],{"class":761},"items",[736,4683,789],{"class":753},[736,4685,4686],{"class":761},"length",[736,4688,1441],{"class":850},[736,4690,750],{"class":749},[736,4692,4599],{"class":761},[736,4694,789],{"class":753},[736,4696,4697],{"class":757},"CART_EMPTY",[736,4699,2838],{"class":850},[736,4701,4702],{"class":738,"line":897},[736,4703,832],{"emptyLinePlaceholder":831},[736,4705,4706,4709],{"class":738,"line":914},[736,4707,4708],{"class":749},"  try",[736,4710,1016],{"class":753},[736,4712,4713,4716,4718,4720,4722,4724,4726,4728,4731],{"class":738,"line":931},[736,4714,4715],{"class":749},"    await",[736,4717,2118],{"class":761},[736,4719,789],{"class":753},[736,4721,2133],{"class":757},[736,4723,762],{"class":850},[736,4725,2253],{"class":761},[736,4727,789],{"class":753},[736,4729,4730],{"class":761},"total",[736,4732,774],{"class":850},[736,4734,4735],{"class":738,"line":948},[736,4736,1094],{"class":753},[736,4738,4739,4742,4744,4747,4749],{"class":738,"line":1625},[736,4740,4741],{"class":749},"  catch",[736,4743,1416],{"class":850},[736,4745,4746],{"class":761},"e",[736,4748,1441],{"class":850},[736,4750,844],{"class":753},[736,4752,4753,4756,4758,4760,4762,4764,4767,4769,4772,4774,4776,4778,4780,4782,4784,4786,4788,4791,4793,4796,4798],{"class":738,"line":2227},[736,4754,4755],{"class":749},"    if",[736,4757,1416],{"class":850},[736,4759,4746],{"class":761},[736,4761,789],{"class":753},[736,4763,617],{"class":761},[736,4765,4766],{"class":753}," ===",[736,4768,820],{"class":753},[736,4770,4771],{"class":768},"card_declined",[736,4773,765],{"class":753},[736,4775,1441],{"class":850},[736,4777,750],{"class":749},[736,4779,4599],{"class":761},[736,4781,789],{"class":753},[736,4783,859],{"class":757},[736,4785,762],{"class":850},[736,4787,2886],{"class":753},[736,4789,4790],{"class":850}," cause",[736,4792,854],{"class":753},[736,4794,4795],{"class":761}," e",[736,4797,814],{"class":753},[736,4799,774],{"class":850},[736,4801,4802,4804,4806,4808,4810,4812,4814,4816,4818,4820,4822],{"class":738,"line":2863},[736,4803,4755],{"class":749},[736,4805,1416],{"class":850},[736,4807,4746],{"class":761},[736,4809,789],{"class":753},[736,4811,617],{"class":761},[736,4813,4766],{"class":753},[736,4815,820],{"class":753},[736,4817,1594],{"class":768},[736,4819,765],{"class":753},[736,4821,1441],{"class":850},[736,4823,844],{"class":753},[736,4825,4826,4829,4831,4833,4836,4838],{"class":738,"line":2871},[736,4827,4828],{"class":749},"      throw",[736,4830,4599],{"class":761},[736,4832,789],{"class":753},[736,4834,4835],{"class":757},"INSUFFICIENT_FUNDS",[736,4837,762],{"class":850},[736,4839,844],{"class":753},[736,4841,4842,4845,4847,4849,4851,4854],{"class":738,"line":2917},[736,4843,4844],{"class":850},"        available",[736,4846,854],{"class":753},[736,4848,4795],{"class":761},[736,4850,789],{"class":753},[736,4852,4853],{"class":761},"balance",[736,4855,864],{"class":753},[736,4857,4858,4861,4863,4865,4867,4869],{"class":738,"line":2922},[736,4859,4860],{"class":850},"        required",[736,4862,854],{"class":753},[736,4864,2759],{"class":761},[736,4866,789],{"class":753},[736,4868,4730],{"class":761},[736,4870,864],{"class":753},[736,4872,4873,4876,4878,4880],{"class":738,"line":3449},[736,4874,4875],{"class":850},"        cause",[736,4877,854],{"class":753},[736,4879,4795],{"class":761},[736,4881,864],{"class":753},[736,4883,4884,4887],{"class":738,"line":3456},[736,4885,4886],{"class":753},"      }",[736,4888,774],{"class":850},[736,4890,4891],{"class":738,"line":3718},[736,4892,4893],{"class":753},"    }\n",[736,4895,4896,4899],{"class":738,"line":3738},[736,4897,4898],{"class":749},"    throw",[736,4900,4901],{"class":761}," e\n",[736,4903,4904],{"class":738,"line":3768},[736,4905,1094],{"class":753},[736,4907,4908,4910],{"class":738,"line":3778},[736,4909,951],{"class":753},[736,4911,774],{"class":761},[613,4913,4914,4915,701,4918,4921,4922,4925],{},"Each entry becomes a typed factory. Catalog metadata is exposed on ",[617,4916,4917],{},"_codes",[617,4919,4920],{},"_prefix"," for introspection (non-enumerable so ",[617,4923,4924],{},"Object.keys(billingErrors)"," still returns just the entry names).",[726,4927,4929],{"className":728,"code":4928,"language":731,"meta":732,"style":732},"billingErrors.PAYMENT_DECLINED.code   \u002F\u002F 'billing.PAYMENT_DECLINED'\nbillingErrors.PAYMENT_DECLINED.status \u002F\u002F 402\nbillingErrors._codes\n\u002F\u002F readonly [\n\u002F\u002F   'billing.CART_EMPTY',\n\u002F\u002F   'billing.PAYMENT_DECLINED',\n\u002F\u002F   'billing.INSUFFICIENT_FUNDS',\n\u002F\u002F ]\n",[617,4930,4931,4948,4963,4972,4977,4982,4987,4992],{"__ignoreMap":732},[736,4932,4933,4936,4938,4940,4942,4945],{"class":738,"line":739},[736,4934,4935],{"class":761},"billingErrors",[736,4937,789],{"class":753},[736,4939,859],{"class":761},[736,4941,789],{"class":753},[736,4943,4944],{"class":761},"code   ",[736,4946,4947],{"class":742},"\u002F\u002F 'billing.PAYMENT_DECLINED'\n",[736,4949,4950,4952,4954,4956,4958,4961],{"class":738,"line":746},[736,4951,4935],{"class":761},[736,4953,789],{"class":753},[736,4955,859],{"class":761},[736,4957,789],{"class":753},[736,4959,4960],{"class":761},"status ",[736,4962,3116],{"class":742},[736,4964,4965,4967,4969],{"class":738,"line":835},[736,4966,4935],{"class":761},[736,4968,789],{"class":753},[736,4970,4971],{"class":761},"_codes\n",[736,4973,4974],{"class":738,"line":847},[736,4975,4976],{"class":742},"\u002F\u002F readonly [\n",[736,4978,4979],{"class":738,"line":867},[736,4980,4981],{"class":742},"\u002F\u002F   'billing.CART_EMPTY',\n",[736,4983,4984],{"class":738,"line":883},[736,4985,4986],{"class":742},"\u002F\u002F   'billing.PAYMENT_DECLINED',\n",[736,4988,4989],{"class":738,"line":897},[736,4990,4991],{"class":742},"\u002F\u002F   'billing.INSUFFICIENT_FUNDS',\n",[736,4993,4994],{"class":738,"line":914},[736,4995,4996],{"class":742},"\u002F\u002F ]\n",[1689,4998,5000],{"id":4999},"templated-messages-with-typed-params","Templated messages with typed params",[613,5002,5003,5004,5006,5007,5010],{},"Set ",[617,5005,658],{}," to a function and the params become ",[1482,5008,5009],{},"required and typed"," at the call site.",[726,5012,5014],{"className":728,"code":5013,"language":731,"meta":732,"style":732},"const InvoiceOverdue = defineError('billing.INVOICE_OVERDUE', {\n  status: 402,\n  message: ({ daysOverdue }: { daysOverdue: number }) =>\n    `Invoice overdue by ${daysOverdue} day(s)`,\n  fix: 'Pay outstanding invoice to resume service',\n})\n\nthrow InvoiceOverdue({ daysOverdue: 7 }) \u002F\u002F params required and type-checked\n",[617,5015,5016,5041,5051,5076,5098,5113,5119,5123],{"__ignoreMap":732},[736,5017,5018,5020,5023,5025,5028,5030,5032,5035,5037,5039],{"class":738,"line":739},[736,5019,1392],{"class":973},[736,5021,5022],{"class":761}," InvoiceOverdue ",[736,5024,3223],{"class":753},[736,5026,5027],{"class":757}," defineError",[736,5029,762],{"class":761},[736,5031,765],{"class":753},[736,5033,5034],{"class":768},"billing.INVOICE_OVERDUE",[736,5036,765],{"class":753},[736,5038,1615],{"class":753},[736,5040,1016],{"class":753},[736,5042,5043,5045,5047,5049],{"class":738,"line":746},[736,5044,886],{"class":850},[736,5046,854],{"class":753},[736,5048,892],{"class":891},[736,5050,864],{"class":753},[736,5052,5053,5055,5057,5059,5062,5064,5066,5068,5070,5072,5074],{"class":738,"line":835},[736,5054,870],{"class":757},[736,5056,854],{"class":753},[736,5058,4491],{"class":753},[736,5060,5061],{"class":4494}," daysOverdue",[736,5063,4503],{"class":753},[736,5065,808],{"class":753},[736,5067,5061],{"class":850},[736,5069,854],{"class":753},[736,5071,4512],{"class":1024},[736,5073,4523],{"class":753},[736,5075,4526],{"class":973},[736,5077,5078,5081,5084,5086,5089,5091,5094,5096],{"class":738,"line":847},[736,5079,5080],{"class":753},"    `",[736,5082,5083],{"class":768},"Invoice overdue by ",[736,5085,4537],{"class":753},[736,5087,5088],{"class":761},"daysOverdue",[736,5090,951],{"class":753},[736,5092,5093],{"class":768}," day(s)",[736,5095,4557],{"class":753},[736,5097,864],{"class":753},[736,5099,5100,5102,5104,5106,5109,5111],{"class":738,"line":867},[736,5101,917],{"class":850},[736,5103,854],{"class":753},[736,5105,820],{"class":753},[736,5107,5108],{"class":768},"Pay outstanding invoice to resume service",[736,5110,765],{"class":753},[736,5112,864],{"class":753},[736,5114,5115,5117],{"class":738,"line":883},[736,5116,951],{"class":753},[736,5118,774],{"class":761},[736,5120,5121],{"class":738,"line":897},[736,5122,832],{"emptyLinePlaceholder":831},[736,5124,5125,5127,5130,5132,5134,5136,5138,5141,5143,5145],{"class":738,"line":914},[736,5126,750],{"class":749},[736,5128,5129],{"class":757}," InvoiceOverdue",[736,5131,762],{"class":761},[736,5133,2886],{"class":753},[736,5135,5061],{"class":850},[736,5137,854],{"class":753},[736,5139,5140],{"class":891}," 7",[736,5142,814],{"class":753},[736,5144,1441],{"class":761},[736,5146,5147],{"class":742},"\u002F\u002F params required and type-checked\n",[613,5149,5150,5151,649,5153,649,5155,649,5157,649,5159,649,5161,649,5163,5165,5166,5168],{},"You can still override any field at the call site (",[617,5152,658],{},[617,5154,677],{},[617,5156,662],{},[617,5158,666],{},[617,5160,670],{},[617,5162,1227],{},[617,5164,1204],{},"). Catalog defaults for ",[617,5167,1227],{}," are shallow-merged with call-site values (call-site wins on conflict).",[1689,5170,5172,5174],{"id":5171},"defineerror-standalone-factories",[617,5173,4253],{},": standalone factories",[613,5176,5177,5178,5180],{},"For one-off errors that don't fit a catalog (or for very large repos that prefer one file per error), use ",[617,5179,4253],{}," directly. Same factory shape as a catalog entry, no prefix derivation.",[726,5182,5184],{"className":728,"code":5183,"language":731,"meta":732,"style":732},"\u002F\u002F errors\u002FFraudDetected.ts\nimport { defineError } from 'evlog'\n\nexport const FraudDetected = defineError('billing.FRAUD_DETECTED', {\n  status: 403,\n  message: 'Transaction flagged for review',\n  why: 'ML fraud-score above threshold',\n  fix: 'Contact support to verify your identity',\n})\n\nthrow FraudDetected()\n",[617,5185,5186,5191,5209,5213,5239,5250,5265,5280,5295,5301,5305],{"__ignoreMap":732},[736,5187,5188],{"class":738,"line":739},[736,5189,5190],{"class":742},"\u002F\u002F errors\u002FFraudDetected.ts\n",[736,5192,5193,5195,5197,5199,5201,5203,5205,5207],{"class":738,"line":746},[736,5194,805],{"class":749},[736,5196,808],{"class":753},[736,5198,5027],{"class":761},[736,5200,814],{"class":753},[736,5202,817],{"class":749},[736,5204,820],{"class":753},[736,5206,823],{"class":768},[736,5208,826],{"class":753},[736,5210,5211],{"class":738,"line":835},[736,5212,832],{"emptyLinePlaceholder":831},[736,5214,5215,5217,5219,5222,5224,5226,5228,5230,5233,5235,5237],{"class":738,"line":847},[736,5216,4320],{"class":749},[736,5218,4323],{"class":973},[736,5220,5221],{"class":761}," FraudDetected ",[736,5223,3223],{"class":753},[736,5225,5027],{"class":757},[736,5227,762],{"class":761},[736,5229,765],{"class":753},[736,5231,5232],{"class":768},"billing.FRAUD_DETECTED",[736,5234,765],{"class":753},[736,5236,1615],{"class":753},[736,5238,1016],{"class":753},[736,5240,5241,5243,5245,5248],{"class":738,"line":867},[736,5242,886],{"class":850},[736,5244,854],{"class":753},[736,5246,5247],{"class":891}," 403",[736,5249,864],{"class":753},[736,5251,5252,5254,5256,5258,5261,5263],{"class":738,"line":883},[736,5253,870],{"class":850},[736,5255,854],{"class":753},[736,5257,820],{"class":753},[736,5259,5260],{"class":768},"Transaction flagged for review",[736,5262,765],{"class":753},[736,5264,864],{"class":753},[736,5266,5267,5269,5271,5273,5276,5278],{"class":738,"line":897},[736,5268,900],{"class":850},[736,5270,854],{"class":753},[736,5272,820],{"class":753},[736,5274,5275],{"class":768},"ML fraud-score above threshold",[736,5277,765],{"class":753},[736,5279,864],{"class":753},[736,5281,5282,5284,5286,5288,5291,5293],{"class":738,"line":914},[736,5283,917],{"class":850},[736,5285,854],{"class":753},[736,5287,820],{"class":753},[736,5289,5290],{"class":768},"Contact support to verify your identity",[736,5292,765],{"class":753},[736,5294,864],{"class":753},[736,5296,5297,5299],{"class":738,"line":931},[736,5298,951],{"class":753},[736,5300,774],{"class":761},[736,5302,5303],{"class":738,"line":948},[736,5304,832],{"emptyLinePlaceholder":831},[736,5306,5307,5309,5312],{"class":738,"line":1625},[736,5308,750],{"class":749},[736,5310,5311],{"class":757}," FraudDetected",[736,5313,2838],{"class":761},[1689,5315,5317],{"id":5316},"type-safe-codes-everywhere-opt-in","Type-safe codes everywhere (opt-in)",[613,5319,5320,5321,5324,5325,649,5328,5331,5332,5334],{},"Augment the ",[617,5322,5323],{},"RegisteredErrorCatalogs"," interface to make every registered code surface as autocomplete on ",[617,5326,5327],{},"createError({ code })",[617,5329,5330],{},"parseError(err).code",", and any other typed ",[617,5333,617],{}," field across the codebase.",[794,5336,5337,5452],{},[726,5338,5341],{"className":728,"code":5339,"filename":5340,"language":731,"meta":732,"style":732},"import type { billingErrors } from '.\u002Fbilling'\nimport type { authErrors }    from '.\u002Fauth'\n\ndeclare module 'evlog' {\n  interface RegisteredErrorCatalogs {\n    billing: typeof billingErrors\n    auth:    typeof authErrors\n  }\n}\n","errors\u002Ftypes.ts",[617,5342,5343,5365,5388,5392,5408,5418,5431,5444,5448],{"__ignoreMap":732},[736,5344,5345,5347,5350,5352,5354,5356,5358,5360,5363],{"class":738,"line":739},[736,5346,805],{"class":749},[736,5348,5349],{"class":749}," type",[736,5351,808],{"class":753},[736,5353,4599],{"class":761},[736,5355,814],{"class":753},[736,5357,817],{"class":749},[736,5359,820],{"class":753},[736,5361,5362],{"class":768},".\u002Fbilling",[736,5364,826],{"class":753},[736,5366,5367,5369,5371,5373,5376,5378,5381,5383,5386],{"class":738,"line":746},[736,5368,805],{"class":749},[736,5370,5349],{"class":749},[736,5372,808],{"class":753},[736,5374,5375],{"class":761}," authErrors",[736,5377,814],{"class":753},[736,5379,5380],{"class":749},"    from",[736,5382,820],{"class":753},[736,5384,5385],{"class":768},".\u002Fauth",[736,5387,826],{"class":753},[736,5389,5390],{"class":738,"line":835},[736,5391,832],{"emptyLinePlaceholder":831},[736,5393,5394,5397,5400,5402,5404,5406],{"class":738,"line":847},[736,5395,5396],{"class":973},"declare",[736,5398,5399],{"class":973}," module",[736,5401,820],{"class":753},[736,5403,823],{"class":768},[736,5405,765],{"class":753},[736,5407,1016],{"class":753},[736,5409,5410,5413,5416],{"class":738,"line":867},[736,5411,5412],{"class":973},"  interface",[736,5414,5415],{"class":1024}," RegisteredErrorCatalogs",[736,5417,1016],{"class":753},[736,5419,5420,5423,5425,5428],{"class":738,"line":883},[736,5421,5422],{"class":850},"    billing",[736,5424,854],{"class":753},[736,5426,5427],{"class":753}," typeof",[736,5429,5430],{"class":761}," billingErrors\n",[736,5432,5433,5436,5438,5441],{"class":738,"line":897},[736,5434,5435],{"class":850},"    auth",[736,5437,854],{"class":753},[736,5439,5440],{"class":753},"    typeof",[736,5442,5443],{"class":761}," authErrors\n",[736,5445,5446],{"class":738,"line":914},[736,5447,1094],{"class":753},[736,5449,5450],{"class":738,"line":931},[736,5451,1099],{"class":753},[726,5453,5456],{"className":728,"code":5454,"filename":5455,"language":731,"meta":732,"style":732},"\u002F\u002F createError autocompletes registered codes (and still accepts ad-hoc strings)\nthrow createError({\n  code: 'billing.PAYMENT_DECLINED', \u002F\u002F ← autocomplete, TS error if typo\n  message: 'Card declined',\n  status: 402,\n})\n\n\u002F\u002F parseError().code is typed as the union of all registered codes\nconst err = parseError(caught)\nif (err.code === 'billing.PAYMENT_DECLINED') retry()\n\u002F\u002F                ↑ autocomplete, refactor-safe\n","Anywhere in your codebase",[617,5457,5458,5463,5473,5491,5505,5515,5521,5525,5530,5544,5571],{"__ignoreMap":732},[736,5459,5460],{"class":738,"line":739},[736,5461,5462],{"class":742},"\u002F\u002F createError autocompletes registered codes (and still accepts ad-hoc strings)\n",[736,5464,5465,5467,5469,5471],{"class":738,"line":746},[736,5466,750],{"class":749},[736,5468,811],{"class":757},[736,5470,762],{"class":761},[736,5472,844],{"class":753},[736,5474,5475,5477,5479,5481,5484,5486,5488],{"class":738,"line":835},[736,5476,851],{"class":850},[736,5478,854],{"class":753},[736,5480,820],{"class":753},[736,5482,5483],{"class":768},"billing.PAYMENT_DECLINED",[736,5485,765],{"class":753},[736,5487,1615],{"class":753},[736,5489,5490],{"class":742}," \u002F\u002F ← autocomplete, TS error if typo\n",[736,5492,5493,5495,5497,5499,5501,5503],{"class":738,"line":847},[736,5494,870],{"class":850},[736,5496,854],{"class":753},[736,5498,820],{"class":753},[736,5500,2325],{"class":768},[736,5502,765],{"class":753},[736,5504,864],{"class":753},[736,5506,5507,5509,5511,5513],{"class":738,"line":867},[736,5508,886],{"class":850},[736,5510,854],{"class":753},[736,5512,892],{"class":891},[736,5514,864],{"class":753},[736,5516,5517,5519],{"class":738,"line":883},[736,5518,951],{"class":753},[736,5520,774],{"class":761},[736,5522,5523],{"class":738,"line":897},[736,5524,832],{"emptyLinePlaceholder":831},[736,5526,5527],{"class":738,"line":914},[736,5528,5529],{"class":742},"\u002F\u002F parseError().code is typed as the union of all registered codes\n",[736,5531,5532,5534,5537,5539,5541],{"class":738,"line":931},[736,5533,1392],{"class":973},[736,5535,5536],{"class":761}," err ",[736,5538,3223],{"class":753},[736,5540,1405],{"class":757},[736,5542,5543],{"class":761},"(caught)\n",[736,5545,5546,5548,5551,5553,5556,5558,5560,5562,5564,5566,5569],{"class":738,"line":948},[736,5547,1413],{"class":749},[736,5549,5550],{"class":761}," (err",[736,5552,789],{"class":753},[736,5554,5555],{"class":761},"code ",[736,5557,1431],{"class":753},[736,5559,820],{"class":753},[736,5561,5483],{"class":768},[736,5563,765],{"class":753},[736,5565,1441],{"class":761},[736,5567,5568],{"class":757},"retry",[736,5570,2838],{"class":761},[736,5572,5573],{"class":738,"line":1625},[736,5574,5575],{"class":742},"\u002F\u002F                ↑ autocomplete, refactor-safe\n",[613,5577,5578],{},"This is purely type-level: no runtime registration, no init step. Skip it entirely if you don't need it; the runtime API is identical either way.",[5580,5581,5584,5587,5588,5591,5592,5595,5596,5599,5600,5603],"callout",{"color":5582,"icon":5583},"neutral","i-lucide-package",[1482,5585,5586],{},"Packaging tip."," A catalog is regular TypeScript. Publish ",[617,5589,5590],{},"@acme\u002Ferrors-billing"," exporting your ",[617,5593,5594],{},"defineErrorCatalog(...)"," plus the ",[617,5597,5598],{},"declare module 'evlog'"," augmentation in its ",[617,5601,5602],{},"index.d.ts",", and the typing flows transitively to every consumer that depends on it. Each shared package owns its prefix, no conflicts possible.",[5580,5605,5608,5611,5612,5615],{"color":5606,"icon":5607,"to":82},"primary","i-lucide-arrow-right",[1482,5609,5610],{},"Going further."," The dedicated ",[709,5613,5614],{"href":82},"Catalogs page"," covers the scaling story (single file → folder → feature → npm package), the full npm packaging recipe, composition patterns, the type-augmentation deep dive, and common pitfalls.",[5580,5617,5618,5619,5622],{"color":5582,"icon":349},"See the ",[709,5620,5621],{"href":251},"Next.js guide"," for a working implementation.",[715,5624,5626],{"id":5625},"next-steps","Next Steps",[630,5628,5629,5634,5639,5644],{},[633,5630,5631,5633],{},[709,5632,51],{"href":52},": Accumulate context and emit comprehensive events",[633,5635,5636,5638],{},[709,5637,153],{"href":158},": Send errors and events to Axiom, Sentry, PostHog, and more",[633,5640,5641,5643],{},[709,5642,236],{"href":241},": Auto-managed request logging per framework",[633,5645,5646,5648],{},[709,5647,25],{"href":26},": See all evlog APIs in action",[5650,5651,5652],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":732,"searchDepth":746,"depth":746,"links":5654},[5655,5656,5657,5659,5661,5666,5669,5671,5674,5678,5685],{"id":717,"depth":746,"text":718},{"id":1102,"depth":746,"text":1103},{"id":1235,"depth":746,"text":5658},"Extra payload for the client (data)",{"id":1472,"depth":746,"text":5660},"Backend-only context (internal)",{"id":1686,"depth":746,"text":1687,"children":5662},[5663,5664,5665],{"id":1691,"depth":835,"text":1692},{"id":1810,"depth":835,"text":1811},{"id":2072,"depth":835,"text":2073},{"id":2232,"depth":746,"text":2233,"children":5667},[5668],{"id":2575,"depth":835,"text":2576},{"id":2669,"depth":746,"text":5670},"Branching on code",{"id":2959,"depth":746,"text":2960,"children":5672},[5673],{"id":3461,"depth":835,"text":3462},{"id":3798,"depth":746,"text":565,"children":5675},[5676,5677],{"id":3801,"depth":835,"text":3802},{"id":4082,"depth":835,"text":4083},{"id":4242,"depth":746,"text":4243,"children":5679},[5680,5681,5682,5684],{"id":4271,"depth":835,"text":4257},{"id":4999,"depth":835,"text":5000},{"id":5171,"depth":835,"text":5683},"defineError: standalone factories",{"id":5316,"depth":835,"text":5317},{"id":5625,"depth":746,"text":5626},"Create errors that explain why they occurred and how to fix them. Add actionable context with why, fix, and link fields for humans and AI agents.","md",[5689,5691],{"label":51,"icon":54,"to":52,"color":5582,"variant":5690},"subtle",{"label":565,"icon":393,"to":566,"color":5582,"variant":5690},{},{"icon":59},{"title":56,"description":5686},"-wEI8JN2Jf9A2rK4a1JrfUDBdjmPXSSxc6p1alAcISs",[5697,5699],{"title":51,"path":52,"stem":53,"description":5698,"icon":54,"children":-1},"Accumulate context over any unit of work and emit a single comprehensive event. Works for HTTP requests, scripts, background jobs, queue workers, and workflows.",{"title":61,"path":62,"stem":63,"description":5700,"icon":64,"children":-1},"An evlog event from creation to drain, across all three modes, through sampling, enrichment, and delivery.",1791114773133]