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