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