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