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