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