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