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