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