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