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