[{"data":1,"prerenderedAt":3089},["ShallowReactive",2],{"navigation_docs":3,"-logging-structured-errors":276,"-logging-structured-errors-surround":3084},[4,30,65,105,187,246,262],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Logging","\u002Flogging","2.logging",[35,40,45,50,55,60],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":61,"path":62,"stem":63,"icon":64},"AI SDK Integration","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk","i-simple-icons-vercel",{"title":66,"path":67,"stem":68,"children":69,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[70,75,80,85,90,95,100],{"title":71,"path":72,"stem":73,"icon":74},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":76,"path":77,"stem":78,"icon":79},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":81,"path":82,"stem":83,"icon":84},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":86,"path":87,"stem":88,"icon":89},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":91,"path":92,"stem":93,"icon":94},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices","i-lucide-shield-check",{"title":96,"path":97,"stem":98,"icon":99},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance","i-lucide-gauge",{"title":101,"path":102,"stem":103,"icon":104},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[110,114,119,124,129,134,139,144,149,154,159,164,168,173,177,182],{"title":36,"path":111,"stem":112,"icon":113},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":115,"path":116,"stem":117,"icon":118},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":120,"path":121,"stem":122,"icon":123},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":125,"path":126,"stem":127,"icon":128},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":130,"path":131,"stem":132,"icon":133},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":135,"path":136,"stem":137,"icon":138},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":140,"path":141,"stem":142,"icon":143},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":145,"path":146,"stem":147,"icon":148},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":150,"path":151,"stem":152,"icon":153},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":155,"path":156,"stem":157,"icon":158},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":160,"path":161,"stem":162,"icon":163},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":165,"path":166,"stem":167},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router",{"title":169,"path":170,"stem":171,"icon":172},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":174,"path":175,"stem":176,"icon":89},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":178,"path":179,"stem":180,"icon":181},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":183,"path":184,"stem":185,"icon":186},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":188,"path":189,"stem":190,"children":191,"page":29},"Adapters","\u002Fadapters","5.adapters",[192,196,201,206,211,216,221,226,231,236,241],{"title":36,"path":193,"stem":194,"icon":195},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":197,"path":198,"stem":199,"icon":200},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F10.pipeline","i-lucide-workflow",{"title":202,"path":203,"stem":204,"icon":205},"Browser","\u002Fadapters\u002Fbrowser","5.adapters\u002F11.browser","i-lucide-globe",{"title":207,"path":208,"stem":209,"icon":210},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":212,"path":213,"stem":214,"icon":215},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":217,"path":218,"stem":219,"icon":220},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":222,"path":223,"stem":224,"icon":225},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":227,"path":228,"stem":229,"icon":230},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":232,"path":233,"stem":234,"icon":235},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":237,"path":238,"stem":239,"icon":240},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F8.hyperdx","i-custom-hyperdx",{"title":242,"path":243,"stem":244,"icon":245},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F9.custom","i-lucide-code",{"title":247,"path":248,"stem":249,"children":250,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[251,254,258],{"title":36,"path":252,"stem":253,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":255,"path":256,"stem":257,"icon":186},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":259,"path":260,"stem":261,"icon":245},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":263,"path":264,"stem":265,"children":266,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[267,271],{"title":36,"path":268,"stem":269,"icon":270},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":272,"path":273,"stem":274,"icon":275},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":277,"title":51,"body":278,"description":3074,"extension":3075,"links":3076,"meta":3080,"navigation":3081,"path":52,"seo":3082,"stem":53,"__hash__":3083},"docs\u002F2.logging\u002F3.structured-errors.md",{"type":279,"value":280,"toc":3056},"minimark",[281,290,295,298,348,364,367,642,646,739,743,748,863,867,1093,1097,1100,1256,1260,1267,1760,1764,1767,2087,2090,2094,2371,2375,2531,2535,2538,3014,3024,3028,3052],[282,283,284,285,289],"p",{},"evlog provides a ",[286,287,288],"code",{},"createError()"," function that creates errors with rich, actionable context.",[291,292,294],"h2",{"id":293},"why-structured-errors","Why Structured Errors?",[282,296,297],{},"Traditional errors are often unhelpful:",[299,300,306],"pre",{"className":301,"code":302,"filename":303,"language":304,"meta":305,"style":305},"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","",[286,307,308,317],{"__ignoreMap":305},[309,310,313],"span",{"class":311,"line":312},"line",1,[309,314,316],{"class":315},"sHwdD","\u002F\u002F Unhelpful error\n",[309,318,320,324,328,332,336,339,343,345],{"class":311,"line":319},2,[309,321,323],{"class":322},"s7zQu","throw",[309,325,327],{"class":326},"sMK4o"," new",[309,329,331],{"class":330},"s2Zo4"," Error",[309,333,335],{"class":334},"sTEyZ","(",[309,337,338],{"class":326},"'",[309,340,342],{"class":341},"sfazB","Payment failed",[309,344,338],{"class":326},[309,346,347],{"class":334},")\n",[282,349,350,351,355,356,359,360,363],{},"This tells you ",[352,353,354],"em",{},"what"," happened, but not ",[352,357,358],{},"why"," or ",[352,361,362],{},"how to fix it",".",[282,365,366],{},"Structured errors provide context:",[368,369,370,511],"code-group",{},[299,371,373],{"className":301,"code":372,"filename":303,"language":304,"meta":305,"style":305},"import { createError } from 'evlog'\n\nthrow createError({\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",[286,374,375,401,407,419,438,452,469,486,503],{"__ignoreMap":305},[309,376,377,380,383,386,389,392,395,398],{"class":311,"line":312},[309,378,379],{"class":322},"import",[309,381,382],{"class":326}," {",[309,384,385],{"class":334}," createError",[309,387,388],{"class":326}," }",[309,390,391],{"class":322}," from",[309,393,394],{"class":326}," '",[309,396,397],{"class":341},"evlog",[309,399,400],{"class":326},"'\n",[309,402,403],{"class":311,"line":319},[309,404,406],{"emptyLinePlaceholder":405},true,"\n",[309,408,410,412,414,416],{"class":311,"line":409},3,[309,411,323],{"class":322},[309,413,385],{"class":330},[309,415,335],{"class":334},[309,417,418],{"class":326},"{\n",[309,420,422,426,429,431,433,435],{"class":311,"line":421},4,[309,423,425],{"class":424},"swJcz","  message",[309,427,428],{"class":326},":",[309,430,394],{"class":326},[309,432,342],{"class":341},[309,434,338],{"class":326},[309,436,437],{"class":326},",\n",[309,439,441,444,446,450],{"class":311,"line":440},5,[309,442,443],{"class":424},"  status",[309,445,428],{"class":326},[309,447,449],{"class":448},"sbssI"," 402",[309,451,437],{"class":326},[309,453,455,458,460,462,465,467],{"class":311,"line":454},6,[309,456,457],{"class":424},"  why",[309,459,428],{"class":326},[309,461,394],{"class":326},[309,463,464],{"class":341},"Card declined by issuer (insufficient funds)",[309,466,338],{"class":326},[309,468,437],{"class":326},[309,470,472,475,477,479,482,484],{"class":311,"line":471},7,[309,473,474],{"class":424},"  fix",[309,476,428],{"class":326},[309,478,394],{"class":326},[309,480,481],{"class":341},"Try a different payment method or contact your bank",[309,483,338],{"class":326},[309,485,437],{"class":326},[309,487,489,492,494,496,499,501],{"class":311,"line":488},8,[309,490,491],{"class":424},"  link",[309,493,428],{"class":326},[309,495,394],{"class":326},[309,497,498],{"class":341},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[309,500,338],{"class":326},[309,502,437],{"class":326},[309,504,506,509],{"class":311,"line":505},9,[309,507,508],{"class":326},"}",[309,510,347],{"class":334},[299,512,517],{"className":513,"code":514,"filename":515,"language":516,"meta":305,"style":305},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"statusCode\": 402,\n  \"message\": \"Payment failed\",\n  \"data\": {\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",[286,518,519,523,541,561,575,595,614,632,637],{"__ignoreMap":305},[309,520,521],{"class":311,"line":312},[309,522,418],{"class":326},[309,524,525,528,532,535,537,539],{"class":311,"line":319},[309,526,527],{"class":326},"  \"",[309,529,531],{"class":530},"spNyl","statusCode",[309,533,534],{"class":326},"\"",[309,536,428],{"class":326},[309,538,449],{"class":448},[309,540,437],{"class":326},[309,542,543,545,548,550,552,555,557,559],{"class":311,"line":409},[309,544,527],{"class":326},[309,546,547],{"class":530},"message",[309,549,534],{"class":326},[309,551,428],{"class":326},[309,553,554],{"class":326}," \"",[309,556,342],{"class":341},[309,558,534],{"class":326},[309,560,437],{"class":326},[309,562,563,565,568,570,572],{"class":311,"line":421},[309,564,527],{"class":326},[309,566,567],{"class":530},"data",[309,569,534],{"class":326},[309,571,428],{"class":326},[309,573,574],{"class":326}," {\n",[309,576,577,580,583,585,587,589,591,593],{"class":311,"line":440},[309,578,579],{"class":326},"    \"",[309,581,358],{"class":582},"sBMFI",[309,584,534],{"class":326},[309,586,428],{"class":326},[309,588,554],{"class":326},[309,590,464],{"class":341},[309,592,534],{"class":326},[309,594,437],{"class":326},[309,596,597,599,602,604,606,608,610,612],{"class":311,"line":454},[309,598,579],{"class":326},[309,600,601],{"class":582},"fix",[309,603,534],{"class":326},[309,605,428],{"class":326},[309,607,554],{"class":326},[309,609,481],{"class":341},[309,611,534],{"class":326},[309,613,437],{"class":326},[309,615,616,618,621,623,625,627,629],{"class":311,"line":471},[309,617,579],{"class":326},[309,619,620],{"class":582},"link",[309,622,534],{"class":326},[309,624,428],{"class":326},[309,626,554],{"class":326},[309,628,498],{"class":341},[309,630,631],{"class":326},"\"\n",[309,633,634],{"class":311,"line":488},[309,635,636],{"class":326},"  }\n",[309,638,639],{"class":311,"line":505},[309,640,641],{"class":326},"}\n",[291,643,645],{"id":644},"error-fields","Error Fields",[647,648,649,665],"table",{},[650,651,652],"thead",{},[653,654,655,659,662],"tr",{},[656,657,658],"th",{},"Field",[656,660,661],{},"Required",[656,663,664],{},"Description",[666,667,668,681,694,705,716,727],"tbody",{},[653,669,670,675,678],{},[671,672,673],"td",{},[286,674,547],{},[671,676,677],{},"Yes",[671,679,680],{},"What happened (shown to users)",[653,682,683,688,691],{},[671,684,685],{},[286,686,687],{},"status",[671,689,690],{},"No",[671,692,693],{},"HTTP status code (default: 500)",[653,695,696,700,702],{},[671,697,698],{},[286,699,358],{},[671,701,690],{},[671,703,704],{},"Technical reason (for debugging)",[653,706,707,711,713],{},[671,708,709],{},[286,710,601],{},[671,712,690],{},[671,714,715],{},"Actionable solution",[653,717,718,722,724],{},[671,719,720],{},[286,721,620],{},[671,723,690],{},[671,725,726],{},"Documentation URL",[653,728,729,734,736],{},[671,730,731],{},[286,732,733],{},"cause",[671,735,690],{},[671,737,738],{},"Original error (for error chaining)",[291,740,742],{"id":741},"basic-usage","Basic Usage",[744,745,747],"h3",{"id":746},"simple-error","Simple Error",[368,749,750,820],{},[299,751,754],{"className":301,"code":752,"filename":753,"language":304,"meta":305,"style":305},"import { createError } from 'evlog'\n\nthrow createError({\n  message: 'User not found',\n  status: 404,\n})\n","server\u002Fapi\u002Fusers\u002F[id].get.ts",[286,755,756,774,778,788,803,814],{"__ignoreMap":305},[309,757,758,760,762,764,766,768,770,772],{"class":311,"line":312},[309,759,379],{"class":322},[309,761,382],{"class":326},[309,763,385],{"class":334},[309,765,388],{"class":326},[309,767,391],{"class":322},[309,769,394],{"class":326},[309,771,397],{"class":341},[309,773,400],{"class":326},[309,775,776],{"class":311,"line":319},[309,777,406],{"emptyLinePlaceholder":405},[309,779,780,782,784,786],{"class":311,"line":409},[309,781,323],{"class":322},[309,783,385],{"class":330},[309,785,335],{"class":334},[309,787,418],{"class":326},[309,789,790,792,794,796,799,801],{"class":311,"line":421},[309,791,425],{"class":424},[309,793,428],{"class":326},[309,795,394],{"class":326},[309,797,798],{"class":341},"User not found",[309,800,338],{"class":326},[309,802,437],{"class":326},[309,804,805,807,809,812],{"class":311,"line":440},[309,806,443],{"class":424},[309,808,428],{"class":326},[309,810,811],{"class":448}," 404",[309,813,437],{"class":326},[309,815,816,818],{"class":311,"line":454},[309,817,508],{"class":326},[309,819,347],{"class":334},[299,821,823],{"className":513,"code":822,"filename":515,"language":516,"meta":305,"style":305},"{\n  \"statusCode\": 404,\n  \"message\": \"User not found\"\n}\n",[286,824,825,829,843,859],{"__ignoreMap":305},[309,826,827],{"class":311,"line":312},[309,828,418],{"class":326},[309,830,831,833,835,837,839,841],{"class":311,"line":319},[309,832,527],{"class":326},[309,834,531],{"class":530},[309,836,534],{"class":326},[309,838,428],{"class":326},[309,840,811],{"class":448},[309,842,437],{"class":326},[309,844,845,847,849,851,853,855,857],{"class":311,"line":409},[309,846,527],{"class":326},[309,848,547],{"class":530},[309,850,534],{"class":326},[309,852,428],{"class":326},[309,854,554],{"class":326},[309,856,798],{"class":341},[309,858,631],{"class":326},[309,860,861],{"class":311,"line":421},[309,862,641],{"class":326},[744,864,866],{"id":865},"error-with-full-context","Error with Full Context",[368,868,869,980],{},[299,870,872],{"className":301,"code":871,"filename":303,"language":304,"meta":305,"style":305},"import { createError } from 'evlog'\n\nthrow createError({\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",[286,873,874,892,896,906,920,930,945,960,974],{"__ignoreMap":305},[309,875,876,878,880,882,884,886,888,890],{"class":311,"line":312},[309,877,379],{"class":322},[309,879,382],{"class":326},[309,881,385],{"class":334},[309,883,388],{"class":326},[309,885,391],{"class":322},[309,887,394],{"class":326},[309,889,397],{"class":341},[309,891,400],{"class":326},[309,893,894],{"class":311,"line":319},[309,895,406],{"emptyLinePlaceholder":405},[309,897,898,900,902,904],{"class":311,"line":409},[309,899,323],{"class":322},[309,901,385],{"class":330},[309,903,335],{"class":334},[309,905,418],{"class":326},[309,907,908,910,912,914,916,918],{"class":311,"line":421},[309,909,425],{"class":424},[309,911,428],{"class":326},[309,913,394],{"class":326},[309,915,342],{"class":341},[309,917,338],{"class":326},[309,919,437],{"class":326},[309,921,922,924,926,928],{"class":311,"line":440},[309,923,443],{"class":424},[309,925,428],{"class":326},[309,927,449],{"class":448},[309,929,437],{"class":326},[309,931,932,934,936,938,941,943],{"class":311,"line":454},[309,933,457],{"class":424},[309,935,428],{"class":326},[309,937,394],{"class":326},[309,939,940],{"class":341},"Card declined by issuer",[309,942,338],{"class":326},[309,944,437],{"class":326},[309,946,947,949,951,953,956,958],{"class":311,"line":471},[309,948,474],{"class":424},[309,950,428],{"class":326},[309,952,394],{"class":326},[309,954,955],{"class":341},"Try a different payment method",[309,957,338],{"class":326},[309,959,437],{"class":326},[309,961,962,964,966,968,970,972],{"class":311,"line":488},[309,963,491],{"class":424},[309,965,428],{"class":326},[309,967,394],{"class":326},[309,969,498],{"class":341},[309,971,338],{"class":326},[309,973,437],{"class":326},[309,975,976,978],{"class":311,"line":505},[309,977,508],{"class":326},[309,979,347],{"class":334},[299,981,983],{"className":513,"code":982,"filename":515,"language":516,"meta":305,"style":305},"{\n  \"statusCode\": 402,\n  \"message\": \"Payment failed\",\n  \"data\": {\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",[286,984,985,989,1003,1021,1033,1051,1069,1085,1089],{"__ignoreMap":305},[309,986,987],{"class":311,"line":312},[309,988,418],{"class":326},[309,990,991,993,995,997,999,1001],{"class":311,"line":319},[309,992,527],{"class":326},[309,994,531],{"class":530},[309,996,534],{"class":326},[309,998,428],{"class":326},[309,1000,449],{"class":448},[309,1002,437],{"class":326},[309,1004,1005,1007,1009,1011,1013,1015,1017,1019],{"class":311,"line":409},[309,1006,527],{"class":326},[309,1008,547],{"class":530},[309,1010,534],{"class":326},[309,1012,428],{"class":326},[309,1014,554],{"class":326},[309,1016,342],{"class":341},[309,1018,534],{"class":326},[309,1020,437],{"class":326},[309,1022,1023,1025,1027,1029,1031],{"class":311,"line":421},[309,1024,527],{"class":326},[309,1026,567],{"class":530},[309,1028,534],{"class":326},[309,1030,428],{"class":326},[309,1032,574],{"class":326},[309,1034,1035,1037,1039,1041,1043,1045,1047,1049],{"class":311,"line":440},[309,1036,579],{"class":326},[309,1038,358],{"class":582},[309,1040,534],{"class":326},[309,1042,428],{"class":326},[309,1044,554],{"class":326},[309,1046,940],{"class":341},[309,1048,534],{"class":326},[309,1050,437],{"class":326},[309,1052,1053,1055,1057,1059,1061,1063,1065,1067],{"class":311,"line":454},[309,1054,579],{"class":326},[309,1056,601],{"class":582},[309,1058,534],{"class":326},[309,1060,428],{"class":326},[309,1062,554],{"class":326},[309,1064,955],{"class":341},[309,1066,534],{"class":326},[309,1068,437],{"class":326},[309,1070,1071,1073,1075,1077,1079,1081,1083],{"class":311,"line":471},[309,1072,579],{"class":326},[309,1074,620],{"class":582},[309,1076,534],{"class":326},[309,1078,428],{"class":326},[309,1080,554],{"class":326},[309,1082,498],{"class":341},[309,1084,631],{"class":326},[309,1086,1087],{"class":311,"line":488},[309,1088,636],{"class":326},[309,1090,1091],{"class":311,"line":505},[309,1092,641],{"class":326},[744,1094,1096],{"id":1095},"error-chaining","Error Chaining",[282,1098,1099],{},"Wrap underlying errors while preserving the original:",[299,1101,1103],{"className":301,"code":1102,"filename":303,"language":304,"meta":305,"style":305},"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",[286,1104,1105,1123,1127,1134,1159,1171,1182,1198,1210,1226,1243,1251],{"__ignoreMap":305},[309,1106,1107,1109,1111,1113,1115,1117,1119,1121],{"class":311,"line":312},[309,1108,379],{"class":322},[309,1110,382],{"class":326},[309,1112,385],{"class":334},[309,1114,388],{"class":326},[309,1116,391],{"class":322},[309,1118,394],{"class":326},[309,1120,397],{"class":341},[309,1122,400],{"class":326},[309,1124,1125],{"class":311,"line":319},[309,1126,406],{"emptyLinePlaceholder":405},[309,1128,1129,1132],{"class":311,"line":409},[309,1130,1131],{"class":322},"try",[309,1133,574],{"class":326},[309,1135,1136,1139,1142,1144,1147,1149,1152,1154,1157],{"class":311,"line":421},[309,1137,1138],{"class":322},"  await",[309,1140,1141],{"class":334}," stripe",[309,1143,363],{"class":326},[309,1145,1146],{"class":334},"charges",[309,1148,363],{"class":326},[309,1150,1151],{"class":330},"create",[309,1153,335],{"class":424},[309,1155,1156],{"class":334},"charge",[309,1158,347],{"class":424},[309,1160,1161,1163,1166,1169],{"class":311,"line":440},[309,1162,508],{"class":326},[309,1164,1165],{"class":322}," catch",[309,1167,1168],{"class":334}," (err) ",[309,1170,418],{"class":326},[309,1172,1173,1176,1178,1180],{"class":311,"line":454},[309,1174,1175],{"class":322},"  throw",[309,1177,385],{"class":330},[309,1179,335],{"class":424},[309,1181,418],{"class":326},[309,1183,1184,1187,1189,1191,1194,1196],{"class":311,"line":471},[309,1185,1186],{"class":424},"    message",[309,1188,428],{"class":326},[309,1190,394],{"class":326},[309,1192,1193],{"class":341},"Payment processing failed",[309,1195,338],{"class":326},[309,1197,437],{"class":326},[309,1199,1200,1203,1205,1208],{"class":311,"line":488},[309,1201,1202],{"class":424},"    status",[309,1204,428],{"class":326},[309,1206,1207],{"class":448}," 500",[309,1209,437],{"class":326},[309,1211,1212,1215,1217,1219,1222,1224],{"class":311,"line":505},[309,1213,1214],{"class":424},"    why",[309,1216,428],{"class":326},[309,1218,394],{"class":326},[309,1220,1221],{"class":341},"Stripe API returned an error",[309,1223,338],{"class":326},[309,1225,437],{"class":326},[309,1227,1229,1232,1234,1237,1240],{"class":311,"line":1228},10,[309,1230,1231],{"class":424},"    cause",[309,1233,428],{"class":326},[309,1235,1236],{"class":334}," err",[309,1238,1239],{"class":326},",",[309,1241,1242],{"class":315}," \u002F\u002F Original error preserved\n",[309,1244,1246,1249],{"class":311,"line":1245},11,[309,1247,1248],{"class":326},"  }",[309,1250,347],{"class":424},[309,1252,1254],{"class":311,"line":1253},12,[309,1255,641],{"class":326},[291,1257,1259],{"id":1258},"frontend-error-handling","Frontend Error Handling",[282,1261,1262,1263,1266],{},"Use ",[286,1264,1265],{},"parseError()"," to extract all fields from caught errors:",[368,1268,1269,1478],{},[299,1270,1273],{"className":301,"code":1271,"filename":1272,"language":304,"meta":305,"style":305},"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.why)      \u002F\u002F \"Card declined\"\n  console.log(error.fix)      \u002F\u002F \"Try another card\"\n}\n","composables\u002FuseCheckout.ts",[286,1274,1275,1294,1298,1304,1350,1360,1380,1384,1409,1431,1453,1474],{"__ignoreMap":305},[309,1276,1277,1279,1281,1284,1286,1288,1290,1292],{"class":311,"line":312},[309,1278,379],{"class":322},[309,1280,382],{"class":326},[309,1282,1283],{"class":334}," parseError",[309,1285,388],{"class":326},[309,1287,391],{"class":322},[309,1289,394],{"class":326},[309,1291,397],{"class":341},[309,1293,400],{"class":326},[309,1295,1296],{"class":311,"line":319},[309,1297,406],{"emptyLinePlaceholder":405},[309,1299,1300,1302],{"class":311,"line":409},[309,1301,1131],{"class":322},[309,1303,574],{"class":326},[309,1305,1306,1308,1311,1313,1315,1318,1320,1322,1324,1327,1329,1331,1334,1336,1338,1341,1343,1346,1348],{"class":311,"line":421},[309,1307,1138],{"class":322},[309,1309,1310],{"class":330}," $fetch",[309,1312,335],{"class":424},[309,1314,338],{"class":326},[309,1316,1317],{"class":341},"\u002Fapi\u002Fcheckout",[309,1319,338],{"class":326},[309,1321,1239],{"class":326},[309,1323,382],{"class":326},[309,1325,1326],{"class":424}," method",[309,1328,428],{"class":326},[309,1330,394],{"class":326},[309,1332,1333],{"class":341},"POST",[309,1335,338],{"class":326},[309,1337,1239],{"class":326},[309,1339,1340],{"class":424}," body",[309,1342,428],{"class":326},[309,1344,1345],{"class":334}," cart",[309,1347,388],{"class":326},[309,1349,347],{"class":424},[309,1351,1352,1354,1356,1358],{"class":311,"line":440},[309,1353,508],{"class":326},[309,1355,1165],{"class":322},[309,1357,1168],{"class":334},[309,1359,418],{"class":326},[309,1361,1362,1365,1368,1371,1373,1375,1378],{"class":311,"line":454},[309,1363,1364],{"class":530},"  const",[309,1366,1367],{"class":334}," error",[309,1369,1370],{"class":326}," =",[309,1372,1283],{"class":330},[309,1374,335],{"class":424},[309,1376,1377],{"class":334},"err",[309,1379,347],{"class":424},[309,1381,1382],{"class":311,"line":471},[309,1383,406],{"emptyLinePlaceholder":405},[309,1385,1386,1389,1391,1394,1396,1399,1401,1403,1406],{"class":311,"line":488},[309,1387,1388],{"class":334},"  console",[309,1390,363],{"class":326},[309,1392,1393],{"class":330},"log",[309,1395,335],{"class":424},[309,1397,1398],{"class":334},"error",[309,1400,363],{"class":326},[309,1402,547],{"class":334},[309,1404,1405],{"class":424},")  ",[309,1407,1408],{"class":315},"\u002F\u002F \"Payment failed\"\n",[309,1410,1411,1413,1415,1417,1419,1421,1423,1425,1428],{"class":311,"line":505},[309,1412,1388],{"class":334},[309,1414,363],{"class":326},[309,1416,1393],{"class":330},[309,1418,335],{"class":424},[309,1420,1398],{"class":334},[309,1422,363],{"class":326},[309,1424,687],{"class":334},[309,1426,1427],{"class":424},")   ",[309,1429,1430],{"class":315},"\u002F\u002F 402\n",[309,1432,1433,1435,1437,1439,1441,1443,1445,1447,1450],{"class":311,"line":1228},[309,1434,1388],{"class":334},[309,1436,363],{"class":326},[309,1438,1393],{"class":330},[309,1440,335],{"class":424},[309,1442,1398],{"class":334},[309,1444,363],{"class":326},[309,1446,358],{"class":334},[309,1448,1449],{"class":424},")      ",[309,1451,1452],{"class":315},"\u002F\u002F \"Card declined\"\n",[309,1454,1455,1457,1459,1461,1463,1465,1467,1469,1471],{"class":311,"line":1245},[309,1456,1388],{"class":334},[309,1458,363],{"class":326},[309,1460,1393],{"class":330},[309,1462,335],{"class":424},[309,1464,1398],{"class":334},[309,1466,363],{"class":326},[309,1468,601],{"class":334},[309,1470,1449],{"class":424},[309,1472,1473],{"class":315},"\u002F\u002F \"Try another card\"\n",[309,1475,1476],{"class":311,"line":1253},[309,1477,641],{"class":326},[299,1479,1482],{"className":301,"code":1480,"filename":1481,"language":304,"meta":305,"style":305},"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)",[286,1483,1484,1502,1506,1523,1527,1533,1573,1583,1599,1603,1617,1632,1647,1663,1678,1739,1748,1755],{"__ignoreMap":305},[309,1485,1486,1488,1490,1492,1494,1496,1498,1500],{"class":311,"line":312},[309,1487,379],{"class":322},[309,1489,382],{"class":326},[309,1491,1283],{"class":334},[309,1493,388],{"class":326},[309,1495,391],{"class":322},[309,1497,394],{"class":326},[309,1499,397],{"class":341},[309,1501,400],{"class":326},[309,1503,1504],{"class":311,"line":319},[309,1505,406],{"emptyLinePlaceholder":405},[309,1507,1508,1511,1514,1517,1520],{"class":311,"line":409},[309,1509,1510],{"class":530},"const",[309,1512,1513],{"class":334}," toast ",[309,1515,1516],{"class":326},"=",[309,1518,1519],{"class":330}," useToast",[309,1521,1522],{"class":334},"()\n",[309,1524,1525],{"class":311,"line":421},[309,1526,406],{"emptyLinePlaceholder":405},[309,1528,1529,1531],{"class":311,"line":440},[309,1530,1131],{"class":322},[309,1532,574],{"class":326},[309,1534,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569,1571],{"class":311,"line":454},[309,1536,1138],{"class":322},[309,1538,1310],{"class":330},[309,1540,335],{"class":424},[309,1542,338],{"class":326},[309,1544,1317],{"class":341},[309,1546,338],{"class":326},[309,1548,1239],{"class":326},[309,1550,382],{"class":326},[309,1552,1326],{"class":424},[309,1554,428],{"class":326},[309,1556,394],{"class":326},[309,1558,1333],{"class":341},[309,1560,338],{"class":326},[309,1562,1239],{"class":326},[309,1564,1340],{"class":424},[309,1566,428],{"class":326},[309,1568,1345],{"class":334},[309,1570,388],{"class":326},[309,1572,347],{"class":424},[309,1574,1575,1577,1579,1581],{"class":311,"line":471},[309,1576,508],{"class":326},[309,1578,1165],{"class":322},[309,1580,1168],{"class":334},[309,1582,418],{"class":326},[309,1584,1585,1587,1589,1591,1593,1595,1597],{"class":311,"line":488},[309,1586,1364],{"class":530},[309,1588,1367],{"class":334},[309,1590,1370],{"class":326},[309,1592,1283],{"class":330},[309,1594,335],{"class":424},[309,1596,1377],{"class":334},[309,1598,347],{"class":424},[309,1600,1601],{"class":311,"line":505},[309,1602,406],{"emptyLinePlaceholder":405},[309,1604,1605,1608,1610,1613,1615],{"class":311,"line":1228},[309,1606,1607],{"class":334},"  toast",[309,1609,363],{"class":326},[309,1611,1612],{"class":330},"add",[309,1614,335],{"class":424},[309,1616,418],{"class":326},[309,1618,1619,1622,1624,1626,1628,1630],{"class":311,"line":1245},[309,1620,1621],{"class":424},"    title",[309,1623,428],{"class":326},[309,1625,1367],{"class":334},[309,1627,363],{"class":326},[309,1629,547],{"class":334},[309,1631,437],{"class":326},[309,1633,1634,1637,1639,1641,1643,1645],{"class":311,"line":1253},[309,1635,1636],{"class":424},"    description",[309,1638,428],{"class":326},[309,1640,1367],{"class":334},[309,1642,363],{"class":326},[309,1644,358],{"class":334},[309,1646,437],{"class":326},[309,1648,1650,1653,1655,1657,1659,1661],{"class":311,"line":1649},13,[309,1651,1652],{"class":424},"    color",[309,1654,428],{"class":326},[309,1656,394],{"class":326},[309,1658,1398],{"class":341},[309,1660,338],{"class":326},[309,1662,437],{"class":326},[309,1664,1666,1669,1671,1673,1675],{"class":311,"line":1665},14,[309,1667,1668],{"class":424},"    actions",[309,1670,428],{"class":326},[309,1672,1367],{"class":334},[309,1674,363],{"class":326},[309,1676,1677],{"class":334},"link\n",[309,1679,1681,1684,1687,1690,1693,1695,1697,1700,1702,1704,1707,1709,1712,1715,1718,1720,1723,1725,1727,1729,1731,1734,1736],{"class":311,"line":1680},15,[309,1682,1683],{"class":326},"      ?",[309,1685,1686],{"class":424}," [",[309,1688,1689],{"class":326},"{",[309,1691,1692],{"class":424}," label",[309,1694,428],{"class":326},[309,1696,394],{"class":326},[309,1698,1699],{"class":341},"Learn more",[309,1701,338],{"class":326},[309,1703,1239],{"class":326},[309,1705,1706],{"class":330}," onClick",[309,1708,428],{"class":326},[309,1710,1711],{"class":326}," ()",[309,1713,1714],{"class":530}," =>",[309,1716,1717],{"class":334}," window",[309,1719,363],{"class":326},[309,1721,1722],{"class":330},"open",[309,1724,335],{"class":424},[309,1726,1398],{"class":334},[309,1728,363],{"class":326},[309,1730,620],{"class":334},[309,1732,1733],{"class":424},") ",[309,1735,508],{"class":326},[309,1737,1738],{"class":424},"]\n",[309,1740,1742,1745],{"class":311,"line":1741},16,[309,1743,1744],{"class":326},"      :",[309,1746,1747],{"class":326}," undefined,\n",[309,1749,1751,1753],{"class":311,"line":1750},17,[309,1752,1248],{"class":326},[309,1754,347],{"class":424},[309,1756,1758],{"class":311,"line":1757},18,[309,1759,641],{"class":326},[744,1761,1763],{"id":1762},"error-display-component","Error Display Component",[282,1765,1766],{},"Create a reusable error display:",[299,1768,1773],{"className":1769,"code":1770,"filename":1771,"language":1772,"meta":305,"style":305},"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",[286,1774,1775,1801,1819,1823,1842,1852,1859,1863,1887,1896,1900,1909,1917,1931,1945,1957,1971,1976,2007,2027,2057,2067,2078],{"__ignoreMap":305},[309,1776,1777,1780,1783,1786,1789,1791,1793,1796,1798],{"class":311,"line":312},[309,1778,1779],{"class":326},"\u003C",[309,1781,1782],{"class":424},"script",[309,1784,1785],{"class":530}," setup",[309,1787,1788],{"class":530}," lang",[309,1790,1516],{"class":326},[309,1792,534],{"class":326},[309,1794,1795],{"class":341},"ts",[309,1797,534],{"class":326},[309,1799,1800],{"class":326},">\n",[309,1802,1803,1805,1807,1809,1811,1813,1815,1817],{"class":311,"line":319},[309,1804,379],{"class":322},[309,1806,382],{"class":326},[309,1808,1283],{"class":334},[309,1810,388],{"class":326},[309,1812,391],{"class":322},[309,1814,394],{"class":326},[309,1816,397],{"class":341},[309,1818,400],{"class":326},[309,1820,1821],{"class":311,"line":409},[309,1822,406],{"emptyLinePlaceholder":405},[309,1824,1825,1827,1829,1832,1834,1836,1839],{"class":311,"line":421},[309,1826,1510],{"class":530},[309,1828,382],{"class":326},[309,1830,1831],{"class":334}," error ",[309,1833,508],{"class":326},[309,1835,1370],{"class":326},[309,1837,1838],{"class":330}," defineProps",[309,1840,1841],{"class":326},"\u003C{\n",[309,1843,1844,1847,1849],{"class":311,"line":440},[309,1845,1846],{"class":424},"  error",[309,1848,428],{"class":326},[309,1850,1851],{"class":582}," unknown\n",[309,1853,1854,1857],{"class":311,"line":454},[309,1855,1856],{"class":326},"}>",[309,1858,1522],{"class":334},[309,1860,1861],{"class":311,"line":471},[309,1862,406],{"emptyLinePlaceholder":405},[309,1864,1865,1867,1870,1872,1875,1877,1880,1882,1884],{"class":311,"line":488},[309,1866,1510],{"class":530},[309,1868,1869],{"class":334}," parsed ",[309,1871,1516],{"class":326},[309,1873,1874],{"class":330}," computed",[309,1876,335],{"class":334},[309,1878,1879],{"class":326},"()",[309,1881,1714],{"class":530},[309,1883,1283],{"class":330},[309,1885,1886],{"class":334},"(error))\n",[309,1888,1889,1892,1894],{"class":311,"line":505},[309,1890,1891],{"class":326},"\u003C\u002F",[309,1893,1782],{"class":424},[309,1895,1800],{"class":326},[309,1897,1898],{"class":311,"line":1228},[309,1899,406],{"emptyLinePlaceholder":405},[309,1901,1902,1904,1907],{"class":311,"line":1245},[309,1903,1779],{"class":326},[309,1905,1906],{"class":424},"template",[309,1908,1800],{"class":326},[309,1910,1911,1914],{"class":311,"line":1253},[309,1912,1913],{"class":326},"  \u003C",[309,1915,1916],{"class":424},"UAlert\n",[309,1918,1919,1922,1924,1926,1929],{"class":311,"line":1649},[309,1920,1921],{"class":530},"    :title",[309,1923,1516],{"class":326},[309,1925,534],{"class":326},[309,1927,1928],{"class":341},"parsed.message",[309,1930,631],{"class":326},[309,1932,1933,1936,1938,1940,1943],{"class":311,"line":1665},[309,1934,1935],{"class":530},"    :description",[309,1937,1516],{"class":326},[309,1939,534],{"class":326},[309,1941,1942],{"class":341},"parsed.why",[309,1944,631],{"class":326},[309,1946,1947,1949,1951,1953,1955],{"class":311,"line":1680},[309,1948,1652],{"class":530},[309,1950,1516],{"class":326},[309,1952,534],{"class":326},[309,1954,1398],{"class":341},[309,1956,631],{"class":326},[309,1958,1959,1962,1964,1966,1969],{"class":311,"line":1741},[309,1960,1961],{"class":530},"    icon",[309,1963,1516],{"class":326},[309,1965,534],{"class":326},[309,1967,1968],{"class":341},"i-lucide-alert-circle",[309,1970,631],{"class":326},[309,1972,1973],{"class":311,"line":1750},[309,1974,1975],{"class":326},"  >\n",[309,1977,1978,1981,1983,1986,1988,1990,1993,1995,1997,1999,2002,2005],{"class":311,"line":1757},[309,1979,1980],{"class":326},"    \u003C",[309,1982,1906],{"class":424},[309,1984,1985],{"class":322}," v-if",[309,1987,1516],{"class":326},[309,1989,534],{"class":326},[309,1991,1992],{"class":334},"parsed",[309,1994,363],{"class":326},[309,1996,601],{"class":334},[309,1998,534],{"class":326},[309,2000,2001],{"class":326}," #",[309,2003,2004],{"class":530},"description",[309,2006,1800],{"class":326},[309,2008,2010,2013,2015,2018,2021,2023,2025],{"class":311,"line":2009},19,[309,2011,2012],{"class":326},"      \u003C",[309,2014,282],{"class":424},[309,2016,2017],{"class":326},">",[309,2019,2020],{"class":334},"{{ parsed.why }}",[309,2022,1891],{"class":326},[309,2024,282],{"class":424},[309,2026,1800],{"class":326},[309,2028,2030,2032,2034,2037,2039,2041,2044,2046,2048,2051,2053,2055],{"class":311,"line":2029},20,[309,2031,2012],{"class":326},[309,2033,282],{"class":424},[309,2035,2036],{"class":530}," class",[309,2038,1516],{"class":326},[309,2040,534],{"class":326},[309,2042,2043],{"class":341},"mt-2 font-medium",[309,2045,534],{"class":326},[309,2047,2017],{"class":326},[309,2049,2050],{"class":334},"{{ parsed.fix }}",[309,2052,1891],{"class":326},[309,2054,282],{"class":424},[309,2056,1800],{"class":326},[309,2058,2060,2063,2065],{"class":311,"line":2059},21,[309,2061,2062],{"class":326},"    \u003C\u002F",[309,2064,1906],{"class":424},[309,2066,1800],{"class":326},[309,2068,2070,2073,2076],{"class":311,"line":2069},22,[309,2071,2072],{"class":326},"  \u003C\u002F",[309,2074,2075],{"class":424},"UAlert",[309,2077,1800],{"class":326},[309,2079,2081,2083,2085],{"class":311,"line":2080},23,[309,2082,1891],{"class":326},[309,2084,1906],{"class":424},[309,2086,1800],{"class":326},[291,2088,91],{"id":2089},"best-practices",[744,2091,2093],{"id":2092},"use-appropriate-status-codes","Use Appropriate Status Codes",[368,2095,2096,2164,2247,2299],{},[299,2097,2100],{"className":301,"code":2098,"filename":2099,"language":304,"meta":305,"style":305},"\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",[286,2101,2102,2107,2117,2132,2143,2158],{"__ignoreMap":305},[309,2103,2104],{"class":311,"line":312},[309,2105,2106],{"class":315},"\u002F\u002F Client error - user can fix\n",[309,2108,2109,2111,2113,2115],{"class":311,"line":319},[309,2110,323],{"class":322},[309,2112,385],{"class":330},[309,2114,335],{"class":334},[309,2116,418],{"class":326},[309,2118,2119,2121,2123,2125,2128,2130],{"class":311,"line":409},[309,2120,425],{"class":424},[309,2122,428],{"class":326},[309,2124,394],{"class":326},[309,2126,2127],{"class":341},"Invalid email format",[309,2129,338],{"class":326},[309,2131,437],{"class":326},[309,2133,2134,2136,2138,2141],{"class":311,"line":421},[309,2135,443],{"class":424},[309,2137,428],{"class":326},[309,2139,2140],{"class":448}," 400",[309,2142,437],{"class":326},[309,2144,2145,2147,2149,2151,2154,2156],{"class":311,"line":440},[309,2146,474],{"class":424},[309,2148,428],{"class":326},[309,2150,394],{"class":326},[309,2152,2153],{"class":341},"Please enter a valid email address",[309,2155,338],{"class":326},[309,2157,437],{"class":326},[309,2159,2160,2162],{"class":311,"line":454},[309,2161,508],{"class":326},[309,2163,347],{"class":334},[299,2165,2168],{"className":301,"code":2166,"filename":2167,"language":304,"meta":305,"style":305},"\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",[286,2169,2170,2175,2185,2200,2211,2226,2241],{"__ignoreMap":305},[309,2171,2172],{"class":311,"line":312},[309,2173,2174],{"class":315},"\u002F\u002F Authentication required\n",[309,2176,2177,2179,2181,2183],{"class":311,"line":319},[309,2178,323],{"class":322},[309,2180,385],{"class":330},[309,2182,335],{"class":334},[309,2184,418],{"class":326},[309,2186,2187,2189,2191,2193,2196,2198],{"class":311,"line":409},[309,2188,425],{"class":424},[309,2190,428],{"class":326},[309,2192,394],{"class":326},[309,2194,2195],{"class":341},"Please log in to continue",[309,2197,338],{"class":326},[309,2199,437],{"class":326},[309,2201,2202,2204,2206,2209],{"class":311,"line":421},[309,2203,443],{"class":424},[309,2205,428],{"class":326},[309,2207,2208],{"class":448}," 401",[309,2210,437],{"class":326},[309,2212,2213,2215,2217,2219,2222,2224],{"class":311,"line":440},[309,2214,474],{"class":424},[309,2216,428],{"class":326},[309,2218,394],{"class":326},[309,2220,2221],{"class":341},"Sign in to your account",[309,2223,338],{"class":326},[309,2225,437],{"class":326},[309,2227,2228,2230,2232,2234,2237,2239],{"class":311,"line":454},[309,2229,491],{"class":424},[309,2231,428],{"class":326},[309,2233,394],{"class":326},[309,2235,2236],{"class":341},"\u002Flogin",[309,2238,338],{"class":326},[309,2240,437],{"class":326},[309,2242,2243,2245],{"class":311,"line":471},[309,2244,508],{"class":326},[309,2246,347],{"class":334},[299,2248,2251],{"className":301,"code":2249,"filename":2250,"language":304,"meta":305,"style":305},"\u002F\u002F Resource not found\nthrow createError({\n  message: 'Order not found',\n  status: 404,\n})\n","404 - Not Found",[286,2252,2253,2258,2268,2283,2293],{"__ignoreMap":305},[309,2254,2255],{"class":311,"line":312},[309,2256,2257],{"class":315},"\u002F\u002F Resource not found\n",[309,2259,2260,2262,2264,2266],{"class":311,"line":319},[309,2261,323],{"class":322},[309,2263,385],{"class":330},[309,2265,335],{"class":334},[309,2267,418],{"class":326},[309,2269,2270,2272,2274,2276,2279,2281],{"class":311,"line":409},[309,2271,425],{"class":424},[309,2273,428],{"class":326},[309,2275,394],{"class":326},[309,2277,2278],{"class":341},"Order not found",[309,2280,338],{"class":326},[309,2282,437],{"class":326},[309,2284,2285,2287,2289,2291],{"class":311,"line":421},[309,2286,443],{"class":424},[309,2288,428],{"class":326},[309,2290,811],{"class":448},[309,2292,437],{"class":326},[309,2294,2295,2297],{"class":311,"line":440},[309,2296,508],{"class":326},[309,2298,347],{"class":334},[299,2300,2303],{"className":301,"code":2301,"filename":2302,"language":304,"meta":305,"style":305},"\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",[286,2304,2305,2310,2320,2335,2345,2360,2365],{"__ignoreMap":305},[309,2306,2307],{"class":311,"line":312},[309,2308,2309],{"class":315},"\u002F\u002F Server error - not user's fault\n",[309,2311,2312,2314,2316,2318],{"class":311,"line":319},[309,2313,323],{"class":322},[309,2315,385],{"class":330},[309,2317,335],{"class":334},[309,2319,418],{"class":326},[309,2321,2322,2324,2326,2328,2331,2333],{"class":311,"line":409},[309,2323,425],{"class":424},[309,2325,428],{"class":326},[309,2327,394],{"class":326},[309,2329,2330],{"class":341},"Something went wrong",[309,2332,338],{"class":326},[309,2334,437],{"class":326},[309,2336,2337,2339,2341,2343],{"class":311,"line":421},[309,2338,443],{"class":424},[309,2340,428],{"class":326},[309,2342,1207],{"class":448},[309,2344,437],{"class":326},[309,2346,2347,2349,2351,2353,2356,2358],{"class":311,"line":440},[309,2348,457],{"class":424},[309,2350,428],{"class":326},[309,2352,394],{"class":326},[309,2354,2355],{"class":341},"Database connection timeout",[309,2357,338],{"class":326},[309,2359,437],{"class":326},[309,2361,2362],{"class":311,"line":454},[309,2363,2364],{"class":315},"  \u002F\u002F No 'fix' - user can't fix server errors\n",[309,2366,2367,2369],{"class":311,"line":471},[309,2368,508],{"class":326},[309,2370,347],{"class":334},[744,2372,2374],{"id":2373},"provide-actionable-fixes","Provide Actionable Fixes",[368,2376,2377,2434],{},[299,2378,2381],{"className":301,"code":2379,"filename":2380,"language":304,"meta":305,"style":305},"\u002F\u002F Unhelpful fix\nthrow createError({\n  message: 'Upload failed',\n  fix: 'Try again',\n})\n","Bad",[286,2382,2383,2388,2398,2413,2428],{"__ignoreMap":305},[309,2384,2385],{"class":311,"line":312},[309,2386,2387],{"class":315},"\u002F\u002F Unhelpful fix\n",[309,2389,2390,2392,2394,2396],{"class":311,"line":319},[309,2391,323],{"class":322},[309,2393,385],{"class":330},[309,2395,335],{"class":334},[309,2397,418],{"class":326},[309,2399,2400,2402,2404,2406,2409,2411],{"class":311,"line":409},[309,2401,425],{"class":424},[309,2403,428],{"class":326},[309,2405,394],{"class":326},[309,2407,2408],{"class":341},"Upload failed",[309,2410,338],{"class":326},[309,2412,437],{"class":326},[309,2414,2415,2417,2419,2421,2424,2426],{"class":311,"line":421},[309,2416,474],{"class":424},[309,2418,428],{"class":326},[309,2420,394],{"class":326},[309,2422,2423],{"class":341},"Try again",[309,2425,338],{"class":326},[309,2427,437],{"class":326},[309,2429,2430,2432],{"class":311,"line":440},[309,2431,508],{"class":326},[309,2433,347],{"class":334},[299,2435,2438],{"className":301,"code":2436,"filename":2437,"language":304,"meta":305,"style":305},"\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",[286,2439,2440,2445,2455,2469,2480,2495,2510,2525],{"__ignoreMap":305},[309,2441,2442],{"class":311,"line":312},[309,2443,2444],{"class":315},"\u002F\u002F Actionable fix\n",[309,2446,2447,2449,2451,2453],{"class":311,"line":319},[309,2448,323],{"class":322},[309,2450,385],{"class":330},[309,2452,335],{"class":334},[309,2454,418],{"class":326},[309,2456,2457,2459,2461,2463,2465,2467],{"class":311,"line":409},[309,2458,425],{"class":424},[309,2460,428],{"class":326},[309,2462,394],{"class":326},[309,2464,2408],{"class":341},[309,2466,338],{"class":326},[309,2468,437],{"class":326},[309,2470,2471,2473,2475,2478],{"class":311,"line":421},[309,2472,443],{"class":424},[309,2474,428],{"class":326},[309,2476,2477],{"class":448}," 413",[309,2479,437],{"class":326},[309,2481,2482,2484,2486,2488,2491,2493],{"class":311,"line":440},[309,2483,457],{"class":424},[309,2485,428],{"class":326},[309,2487,394],{"class":326},[309,2489,2490],{"class":341},"File exceeds maximum size (10MB)",[309,2492,338],{"class":326},[309,2494,437],{"class":326},[309,2496,2497,2499,2501,2503,2506,2508],{"class":311,"line":454},[309,2498,474],{"class":424},[309,2500,428],{"class":326},[309,2502,394],{"class":326},[309,2504,2505],{"class":341},"Reduce the file size or compress the image before uploading",[309,2507,338],{"class":326},[309,2509,437],{"class":326},[309,2511,2512,2514,2516,2518,2521,2523],{"class":311,"line":471},[309,2513,491],{"class":424},[309,2515,428],{"class":326},[309,2517,394],{"class":326},[309,2519,2520],{"class":341},"\u002Fdocs\u002Fupload-limits",[309,2522,338],{"class":326},[309,2524,437],{"class":326},[309,2526,2527,2529],{"class":311,"line":488},[309,2528,508],{"class":326},[309,2530,347],{"class":334},[291,2532,2534],{"id":2533},"error-categories","Error Categories",[282,2536,2537],{},"Consider creating factory functions for common error types:",[368,2539,2540,2851],{},[299,2541,2544],{"className":301,"code":2542,"filename":2543,"language":304,"meta":305,"style":305},"\u002F\u002F server\u002Futils\u002Ferrors.ts\nimport { createError } from 'evlog'\n\nexport const errors = {\n  notFound: (resource: string) =>\n    createError({\n      message: `${resource} not found`,\n      status: 404,\n    }),\n\n  unauthorized: () =>\n    createError({\n      message: 'Please log in to continue',\n      status: 401,\n      fix: 'Sign in to your account',\n    }),\n\n  validation: (field: string, issue: string) =>\n    createError({\n      message: `Invalid ${field}`,\n      status: 400,\n      why: issue,\n      fix: `Please provide a valid ${field}`,\n    }),\n}\n","Definition",[286,2545,2546,2551,2569,2573,2588,2613,2622,2644,2655,2664,2668,2679,2687,2701,2711,2726,2734,2738,2767,2775,2797,2807,2818,2837,2846],{"__ignoreMap":305},[309,2547,2548],{"class":311,"line":312},[309,2549,2550],{"class":315},"\u002F\u002F server\u002Futils\u002Ferrors.ts\n",[309,2552,2553,2555,2557,2559,2561,2563,2565,2567],{"class":311,"line":319},[309,2554,379],{"class":322},[309,2556,382],{"class":326},[309,2558,385],{"class":334},[309,2560,388],{"class":326},[309,2562,391],{"class":322},[309,2564,394],{"class":326},[309,2566,397],{"class":341},[309,2568,400],{"class":326},[309,2570,2571],{"class":311,"line":409},[309,2572,406],{"emptyLinePlaceholder":405},[309,2574,2575,2578,2581,2584,2586],{"class":311,"line":421},[309,2576,2577],{"class":322},"export",[309,2579,2580],{"class":530}," const",[309,2582,2583],{"class":334}," errors ",[309,2585,1516],{"class":326},[309,2587,574],{"class":326},[309,2589,2590,2593,2595,2598,2602,2604,2607,2610],{"class":311,"line":440},[309,2591,2592],{"class":330},"  notFound",[309,2594,428],{"class":326},[309,2596,2597],{"class":326}," (",[309,2599,2601],{"class":2600},"sHdIc","resource",[309,2603,428],{"class":326},[309,2605,2606],{"class":582}," string",[309,2608,2609],{"class":326},")",[309,2611,2612],{"class":530}," =>\n",[309,2614,2615,2618,2620],{"class":311,"line":454},[309,2616,2617],{"class":330},"    createError",[309,2619,335],{"class":334},[309,2621,418],{"class":326},[309,2623,2624,2627,2629,2632,2634,2636,2639,2642],{"class":311,"line":471},[309,2625,2626],{"class":424},"      message",[309,2628,428],{"class":326},[309,2630,2631],{"class":326}," `${",[309,2633,2601],{"class":334},[309,2635,508],{"class":326},[309,2637,2638],{"class":341}," not found",[309,2640,2641],{"class":326},"`",[309,2643,437],{"class":326},[309,2645,2646,2649,2651,2653],{"class":311,"line":488},[309,2647,2648],{"class":424},"      status",[309,2650,428],{"class":326},[309,2652,811],{"class":448},[309,2654,437],{"class":326},[309,2656,2657,2660,2662],{"class":311,"line":505},[309,2658,2659],{"class":326},"    }",[309,2661,2609],{"class":334},[309,2663,437],{"class":326},[309,2665,2666],{"class":311,"line":1228},[309,2667,406],{"emptyLinePlaceholder":405},[309,2669,2670,2673,2675,2677],{"class":311,"line":1245},[309,2671,2672],{"class":330},"  unauthorized",[309,2674,428],{"class":326},[309,2676,1711],{"class":326},[309,2678,2612],{"class":530},[309,2680,2681,2683,2685],{"class":311,"line":1253},[309,2682,2617],{"class":330},[309,2684,335],{"class":334},[309,2686,418],{"class":326},[309,2688,2689,2691,2693,2695,2697,2699],{"class":311,"line":1649},[309,2690,2626],{"class":424},[309,2692,428],{"class":326},[309,2694,394],{"class":326},[309,2696,2195],{"class":341},[309,2698,338],{"class":326},[309,2700,437],{"class":326},[309,2702,2703,2705,2707,2709],{"class":311,"line":1665},[309,2704,2648],{"class":424},[309,2706,428],{"class":326},[309,2708,2208],{"class":448},[309,2710,437],{"class":326},[309,2712,2713,2716,2718,2720,2722,2724],{"class":311,"line":1680},[309,2714,2715],{"class":424},"      fix",[309,2717,428],{"class":326},[309,2719,394],{"class":326},[309,2721,2221],{"class":341},[309,2723,338],{"class":326},[309,2725,437],{"class":326},[309,2727,2728,2730,2732],{"class":311,"line":1741},[309,2729,2659],{"class":326},[309,2731,2609],{"class":334},[309,2733,437],{"class":326},[309,2735,2736],{"class":311,"line":1750},[309,2737,406],{"emptyLinePlaceholder":405},[309,2739,2740,2743,2745,2747,2750,2752,2754,2756,2759,2761,2763,2765],{"class":311,"line":1757},[309,2741,2742],{"class":330},"  validation",[309,2744,428],{"class":326},[309,2746,2597],{"class":326},[309,2748,2749],{"class":2600},"field",[309,2751,428],{"class":326},[309,2753,2606],{"class":582},[309,2755,1239],{"class":326},[309,2757,2758],{"class":2600}," issue",[309,2760,428],{"class":326},[309,2762,2606],{"class":582},[309,2764,2609],{"class":326},[309,2766,2612],{"class":530},[309,2768,2769,2771,2773],{"class":311,"line":2009},[309,2770,2617],{"class":330},[309,2772,335],{"class":334},[309,2774,418],{"class":326},[309,2776,2777,2779,2781,2784,2787,2790,2792,2795],{"class":311,"line":2029},[309,2778,2626],{"class":424},[309,2780,428],{"class":326},[309,2782,2783],{"class":326}," `",[309,2785,2786],{"class":341},"Invalid ",[309,2788,2789],{"class":326},"${",[309,2791,2749],{"class":334},[309,2793,2794],{"class":326},"}`",[309,2796,437],{"class":326},[309,2798,2799,2801,2803,2805],{"class":311,"line":2059},[309,2800,2648],{"class":424},[309,2802,428],{"class":326},[309,2804,2140],{"class":448},[309,2806,437],{"class":326},[309,2808,2809,2812,2814,2816],{"class":311,"line":2069},[309,2810,2811],{"class":424},"      why",[309,2813,428],{"class":326},[309,2815,2758],{"class":334},[309,2817,437],{"class":326},[309,2819,2820,2822,2824,2826,2829,2831,2833,2835],{"class":311,"line":2080},[309,2821,2715],{"class":424},[309,2823,428],{"class":326},[309,2825,2783],{"class":326},[309,2827,2828],{"class":341},"Please provide a valid ",[309,2830,2789],{"class":326},[309,2832,2749],{"class":334},[309,2834,2794],{"class":326},[309,2836,437],{"class":326},[309,2838,2840,2842,2844],{"class":311,"line":2839},24,[309,2841,2659],{"class":326},[309,2843,2609],{"class":334},[309,2845,437],{"class":326},[309,2847,2849],{"class":311,"line":2848},25,[309,2850,641],{"class":326},[299,2852,2855],{"className":301,"code":2853,"filename":2854,"language":304,"meta":305,"style":305},"\u002F\u002F server\u002Fapi\u002Forders\u002F[id].get.ts\nimport { errors } from '~\u002Fserver\u002Futils\u002Ferrors'\n\nexport default defineEventHandler(async (event) => {\n  const order = await getOrder(event.context.params.id)\n\n  if (!order) {\n    throw errors.notFound('Order')\n  }\n\n  return order\n})\n","Usage",[286,2856,2857,2862,2882,2886,2912,2948,2952,2969,2992,2996,3000,3008],{"__ignoreMap":305},[309,2858,2859],{"class":311,"line":312},[309,2860,2861],{"class":315},"\u002F\u002F server\u002Fapi\u002Forders\u002F[id].get.ts\n",[309,2863,2864,2866,2868,2871,2873,2875,2877,2880],{"class":311,"line":319},[309,2865,379],{"class":322},[309,2867,382],{"class":326},[309,2869,2870],{"class":334}," errors",[309,2872,388],{"class":326},[309,2874,391],{"class":322},[309,2876,394],{"class":326},[309,2878,2879],{"class":341},"~\u002Fserver\u002Futils\u002Ferrors",[309,2881,400],{"class":326},[309,2883,2884],{"class":311,"line":409},[309,2885,406],{"emptyLinePlaceholder":405},[309,2887,2888,2890,2893,2896,2898,2901,2903,2906,2908,2910],{"class":311,"line":421},[309,2889,2577],{"class":322},[309,2891,2892],{"class":322}," default",[309,2894,2895],{"class":330}," defineEventHandler",[309,2897,335],{"class":334},[309,2899,2900],{"class":530},"async",[309,2902,2597],{"class":326},[309,2904,2905],{"class":2600},"event",[309,2907,2609],{"class":326},[309,2909,1714],{"class":530},[309,2911,574],{"class":326},[309,2913,2914,2916,2919,2921,2924,2927,2929,2931,2933,2936,2938,2941,2943,2946],{"class":311,"line":440},[309,2915,1364],{"class":530},[309,2917,2918],{"class":334}," order",[309,2920,1370],{"class":326},[309,2922,2923],{"class":322}," await",[309,2925,2926],{"class":330}," getOrder",[309,2928,335],{"class":424},[309,2930,2905],{"class":334},[309,2932,363],{"class":326},[309,2934,2935],{"class":334},"context",[309,2937,363],{"class":326},[309,2939,2940],{"class":334},"params",[309,2942,363],{"class":326},[309,2944,2945],{"class":334},"id",[309,2947,347],{"class":424},[309,2949,2950],{"class":311,"line":454},[309,2951,406],{"emptyLinePlaceholder":405},[309,2953,2954,2957,2959,2962,2965,2967],{"class":311,"line":471},[309,2955,2956],{"class":322},"  if",[309,2958,2597],{"class":424},[309,2960,2961],{"class":326},"!",[309,2963,2964],{"class":334},"order",[309,2966,1733],{"class":424},[309,2968,418],{"class":326},[309,2970,2971,2974,2976,2978,2981,2983,2985,2988,2990],{"class":311,"line":488},[309,2972,2973],{"class":322},"    throw",[309,2975,2870],{"class":334},[309,2977,363],{"class":326},[309,2979,2980],{"class":330},"notFound",[309,2982,335],{"class":424},[309,2984,338],{"class":326},[309,2986,2987],{"class":341},"Order",[309,2989,338],{"class":326},[309,2991,347],{"class":424},[309,2993,2994],{"class":311,"line":505},[309,2995,636],{"class":326},[309,2997,2998],{"class":311,"line":1228},[309,2999,406],{"emptyLinePlaceholder":405},[309,3001,3002,3005],{"class":311,"line":1245},[309,3003,3004],{"class":322},"  return",[309,3006,3007],{"class":334}," order\n",[309,3009,3010,3012],{"class":311,"line":1253},[309,3011,508],{"class":326},[309,3013,347],{"class":334},[3015,3016,3018,3019,3023],"callout",{"color":3017,"icon":245},"neutral","See the ",[3020,3021,3022],"a",{"href":121},"Next.js guide"," for a working implementation.",[291,3025,3027],{"id":3026},"next-steps","Next Steps",[3029,3030,3031,3037,3042,3047],"ul",{},[3032,3033,3034,3036],"li",{},[3020,3035,46],{"href":47},": Accumulate context and emit comprehensive events",[3032,3038,3039,3041],{},[3020,3040,188],{"href":193},": Send errors and events to Axiom, Sentry, PostHog, and more",[3032,3043,3044,3046],{},[3020,3045,106],{"href":111},": Auto-managed request logging per framework",[3032,3048,3049,3051],{},[3020,3050,20],{"href":21},": See all evlog APIs in action",[3053,3054,3055],"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":305,"searchDepth":319,"depth":319,"links":3057},[3058,3059,3060,3065,3068,3072,3073],{"id":293,"depth":319,"text":294},{"id":644,"depth":319,"text":645},{"id":741,"depth":319,"text":742,"children":3061},[3062,3063,3064],{"id":746,"depth":409,"text":747},{"id":865,"depth":409,"text":866},{"id":1095,"depth":409,"text":1096},{"id":1258,"depth":319,"text":1259,"children":3066},[3067],{"id":1762,"depth":409,"text":1763},{"id":2089,"depth":319,"text":91,"children":3069},[3070,3071],{"id":2092,"depth":409,"text":2093},{"id":2373,"depth":409,"text":2374},{"id":2533,"depth":319,"text":2534},{"id":3026,"depth":319,"text":3027},"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",[3077,3079],{"label":46,"icon":49,"to":47,"color":3017,"variant":3078},"subtle",{"label":91,"icon":94,"to":92,"color":3017,"variant":3078},{},{"icon":54},{"title":51,"description":3074},"R3aEutCBSxrF_15-uZvT3MsS5UV5Ts4BOQMlrvYHOhQ",[3085,3087],{"title":46,"path":47,"stem":48,"description":3086,"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":3088,"icon":59,"children":-1},"Capture browser events with structured logging. Same API as the server, with automatic console styling, user identity context, and optional server transport.",1775288554403]