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