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