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