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