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