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