[{"data":1,"prerenderedAt":4109},["ShallowReactive",2],{"navigation_docs":3,"-server-error-handling":195,"-server-error-handling-surround":4104},[4,27,61,75,100,126,147,177],{"title":5,"icon":6,"redirect":7,"path":8,"stem":9,"children":10,"page":26},"Introduction","icon-park-outline:home","\u002Fintroduction\u002Fabout-mion","\u002Fintroduction","1.introduction",[11,14,18,22],{"title":12,"path":7,"stem":13},"About mion","1.introduction\u002F1.about-mion",{"title":15,"path":16,"stem":17},"Quick Start","\u002Fintroduction\u002Fquick-start","1.introduction\u002F2.quick-start",{"title":19,"path":20,"stem":21},"Manual Install","\u002Fintroduction\u002Fmanual-install","1.introduction\u002F3.manual-install",{"title":23,"path":24,"stem":25},"What's Next","\u002Fintroduction\u002Fwhat-is-next","1.introduction\u002F4.what-is-next",false,{"title":28,"icon":29,"path":30,"stem":31,"children":32,"page":26},"Server","icon-park-outline:server","\u002Fserver","20.server",[33,37,41,45,49,53,57],{"title":34,"path":35,"stem":36},"Router Overview","\u002Fserver\u002Foverview","20.server\u002F0.overview",{"title":38,"path":39,"stem":40},"Routes","\u002Fserver\u002Froutes","20.server\u002F1.routes",{"title":42,"path":43,"stem":44},"Middleware","\u002Fserver\u002Fmiddle-fns","20.server\u002F2.middle-fns",{"title":46,"path":47,"stem":48},"Request & Response","\u002Fserver\u002Frequest-and-response","20.server\u002F5.request-and-response",{"title":50,"path":51,"stem":52},"Error Handling","\u002Fserver\u002Ferror-handling","20.server\u002F6.error-handling",{"title":54,"path":55,"stem":56},"Validation","\u002Fserver\u002Fvalidation","20.server\u002F7.validation",{"title":58,"path":59,"stem":60},"Serialization","\u002Fserver\u002Fserialization","20.server\u002F8.serialization",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":26},"Drizzle ORM","i-lineicons-drizzle","\u002Fdrizzle-orm","21.drizzle-orm",[67,71],{"title":68,"path":69,"stem":70},"Drizzle Overview","\u002Fdrizzle-orm\u002Fdrizzle-overview","21.drizzle-orm\u002F0.drizzle-overview",{"title":72,"path":73,"stem":74},"Column Mapping","\u002Fdrizzle-orm\u002Fcolumn-mapping","21.drizzle-orm\u002F1.column-mapping",{"title":76,"icon":77,"path":78,"stem":79,"children":80,"page":26},"Client","icon-park-outline:computer","\u002Fclient","3.client",[81,85,88,92,96],{"title":82,"path":83,"stem":84},"Client Overview","\u002Fclient\u002Fclient-overview","3.client\u002F0.client-overview",{"title":50,"path":86,"stem":87},"\u002Fclient\u002Ferror-handling","3.client\u002F1.error-handling",{"title":89,"path":90,"stem":91},"Validation Errors","\u002Fclient\u002Fvalidation-errors","3.client\u002F2.validation-errors",{"title":93,"path":94,"stem":95},"Routes Flow","\u002Fclient\u002Fclient-flow","3.client\u002F3.client-flow",{"title":97,"path":98,"stem":99},"Cancellation & Timeouts","\u002Fclient\u002Fcancellation-timeouts","3.client\u002F4.cancellation-timeouts",{"title":101,"icon":102,"redirect":103,"path":104,"stem":105,"children":106,"page":26},"RunTypes","i-lucide-scan-text","\u002Frun-types\u002Foverview","\u002Frun-types","4.run-types",[107,110,114,118,122],{"title":108,"path":103,"stem":109},"RunTypes Overview","4.run-types\u002F0.overview",{"title":111,"path":112,"stem":113},"Supported Types","\u002Frun-types\u002Ffeatures","4.run-types\u002F1.features",{"title":115,"path":116,"stem":117},"Type Formats","\u002Frun-types\u002Ftype-formats","4.run-types\u002F2.type-formats",{"title":119,"path":120,"stem":121},"Built-in Formats","\u002Frun-types\u002Fbuilt-in-formats","4.run-types\u002F3.built-in-formats",{"title":123,"path":124,"stem":125},"Caveats","\u002Frun-types\u002Fcaveats","4.run-types\u002F4.caveats",{"title":127,"path":128,"stem":129,"children":130,"page":26},"Devtools","\u002Fdevtools","5.devtools",[131,135,139,143],{"title":132,"path":133,"stem":134},"AOT Compilation","\u002Fdevtools\u002Faot-compilation","5.devtools\u002F0.aot-compilation",{"title":136,"path":137,"stem":138},"Pure Functions","\u002Fdevtools\u002Fpure-functions","5.devtools\u002F1.pure-functions",{"title":140,"path":141,"stem":142},"ESLint Rules","\u002Fdevtools\u002Feslint-rules","5.devtools\u002F2.eslint-rules",{"title":144,"path":145,"stem":146},"Vite Configuration","\u002Fdevtools\u002Fvite-config","5.devtools\u002F3.vite-config",{"title":148,"redirect":149,"icon":150,"path":151,"stem":152,"children":153,"page":26},"Platforms","\u002Fplatforms\u002Fnode-js","icon-park-outline:play","\u002Fplatforms","6.platforms",[154,157,161,165,169,173],{"title":155,"path":149,"stem":156},"Node.js","6.platforms\u002F1.node-js",{"title":158,"path":159,"stem":160},"Bun","\u002Fplatforms\u002Fbun","6.platforms\u002F2.bun",{"title":162,"path":163,"stem":164},"AWS Lambda","\u002Fplatforms\u002Faws-lambda","6.platforms\u002F3.aws-lambda",{"title":166,"path":167,"stem":168},"Google Cloud Functions","\u002Fplatforms\u002Fgoogle-cloud-functions","6.platforms\u002F4.google-cloud-functions",{"title":170,"path":171,"stem":172},"Cloudflare Workers","\u002Fplatforms\u002Fcloudflare","6.platforms\u002F5.cloudflare",{"title":174,"path":175,"stem":176},"Vercel","\u002Fplatforms\u002Fvercel","6.platforms\u002F6.vercel",{"title":178,"icon":179,"redirect":180,"path":181,"stem":182,"children":183,"page":26},"Benchmarks","icon-park-outline:chart-line","\u002Fbenchmarks\u002Fhello-world","\u002Fbenchmarks","7.benchmarks",[184,187,191],{"title":185,"path":180,"stem":186},"Hello World","7.benchmarks\u002F1.hello-world",{"title":188,"path":189,"stem":190},"Light Validation","\u002Fbenchmarks\u002Flight-validation","7.benchmarks\u002F2.light-validation",{"title":192,"path":193,"stem":194},"Heavy Validation","\u002Fbenchmarks\u002Fheavy-validation","7.benchmarks\u002F3.heavy-validation",{"id":196,"title":50,"body":197,"description":4098,"extension":4099,"links":4100,"meta":4101,"navigation":351,"path":51,"seo":4102,"stem":52,"__hash__":4103},"docs\u002F20.server\u002F6.error-handling.md",{"type":198,"value":199},"minimark",[200,214,219,225,851,854,1126,1134,1144,1150,1993,1997,2003,2009,2489,2493,2496,2516,2693,2706,2710,2713,3193,3197,3204,3525,3528,3532,3536,4094],[201,202,203,204,208,209,213],"p",{},"mion uses ",[205,206,207],"code",{},"RpcError"," to handle all errors in routes and middleFns. The key principle is: ",[210,211,212],"strong",{},"return errors instead of throwing them"," to maintain full type safety on the client.",[215,216,218],"h2",{"id":217},"return-errors-recommended","Return Errors (Recommended)",[201,220,221,224],{},[210,222,223],{},"Always return errors instead of throwing them."," Returned errors are part of the function signature, giving the client full type information about possible error types and their data:",[226,227,232],"pre",{"className":228,"code":229,"language":230,"meta":231,"style":231},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {RpcError} from '@mionjs\u002Fcore';\nimport {Route, route} from '@mionjs\u002Frouter';\nimport type {Pet} from '.\u002Ffull-example.app.ts';\nimport {myApp} from '.\u002Ffull-example.app.ts';\n\nexport const getPet = route(async (ctx, id: string): Promise\u003CPet | RpcError\u003C'pet-not-found'>> => {\n    try {\n        const pet = await myApp.db.getPet(id);\n        if (!pet) {\n            const publicMessage = `Pet with id ${id} can't be found`;\n            \u002F\u002F application errors should be returned and strongly typed,\n            \u002F\u002F so can be correctly managed by client\n            return new RpcError({publicMessage, type: 'pet-not-found'});\n        }\n        return pet;\n    } catch (dbError) {\n        const publicMessage = `Cant fetch data.`;\n        const message = (dbError as Error).message;\n        \u002F*\n         * Thrown or Unexpected error are not strongly typed\n         *\n         * Full RpcError containing dbError message and stacktrace will be added\n         * to ctx.request.unexpectedErrors, so it can be logged or managed after\n         *\n         * only publicMessage will be returned in the response\n         *\u002F\n        throw new RpcError({publicMessage, message, originalError: dbError as Error, type: 'db-error'});\n    }\n}) satisfies Route;\n\nexport const alwaysError = route((): void => {\n    throw new Error('will generate a 500 error with an \"Unknown Error\" message');\n}) satisfies Route;\n","ts","",[205,233,234,269,298,324,346,353,432,440,480,500,532,539,545,582,588,598,616,634,663,669,675,681,687,693,698,704,710,763,769,784,789,815,838],{"__ignoreMap":231},[235,236,239,243,247,250,253,256,259,263,266],"span",{"class":237,"line":238},"line",1,[235,240,242],{"class":241},"s7zQu","import",[235,244,246],{"class":245},"sMK4o"," {",[235,248,207],{"class":249},"sTEyZ",[235,251,252],{"class":245},"}",[235,254,255],{"class":241}," from",[235,257,258],{"class":245}," '",[235,260,262],{"class":261},"sfazB","@mionjs\u002Fcore",[235,264,265],{"class":245},"'",[235,267,268],{"class":245},";\n",[235,270,272,274,276,279,282,285,287,289,291,294,296],{"class":237,"line":271},2,[235,273,242],{"class":241},[235,275,246],{"class":245},[235,277,278],{"class":249},"Route",[235,280,281],{"class":245},",",[235,283,284],{"class":249}," route",[235,286,252],{"class":245},[235,288,255],{"class":241},[235,290,258],{"class":245},[235,292,293],{"class":261},"@mionjs\u002Frouter",[235,295,265],{"class":245},[235,297,268],{"class":245},[235,299,301,303,306,308,311,313,315,317,320,322],{"class":237,"line":300},3,[235,302,242],{"class":241},[235,304,305],{"class":241}," type",[235,307,246],{"class":245},[235,309,310],{"class":249},"Pet",[235,312,252],{"class":245},[235,314,255],{"class":241},[235,316,258],{"class":245},[235,318,319],{"class":261},".\u002Ffull-example.app.ts",[235,321,265],{"class":245},[235,323,268],{"class":245},[235,325,327,329,331,334,336,338,340,342,344],{"class":237,"line":326},4,[235,328,242],{"class":241},[235,330,246],{"class":245},[235,332,333],{"class":249},"myApp",[235,335,252],{"class":245},[235,337,255],{"class":241},[235,339,258],{"class":245},[235,341,319],{"class":261},[235,343,265],{"class":245},[235,345,268],{"class":245},[235,347,349],{"class":237,"line":348},5,[235,350,352],{"emptyLinePlaceholder":351},true,"\n",[235,354,356,359,363,366,369,372,375,378,381,385,387,390,393,397,400,403,406,408,411,414,416,418,421,423,426,429],{"class":237,"line":355},6,[235,357,358],{"class":241},"export",[235,360,362],{"class":361},"spNyl"," const",[235,364,365],{"class":249}," getPet ",[235,367,368],{"class":245},"=",[235,370,284],{"class":371},"s2Zo4",[235,373,374],{"class":249},"(",[235,376,377],{"class":361},"async",[235,379,380],{"class":245}," (",[235,382,384],{"class":383},"sHdIc","ctx",[235,386,281],{"class":245},[235,388,389],{"class":383}," id",[235,391,392],{"class":245},":",[235,394,396],{"class":395},"sBMFI"," string",[235,398,399],{"class":245},"):",[235,401,402],{"class":395}," Promise",[235,404,405],{"class":245},"\u003C",[235,407,310],{"class":395},[235,409,410],{"class":245}," |",[235,412,413],{"class":395}," RpcError",[235,415,405],{"class":245},[235,417,265],{"class":245},[235,419,420],{"class":261},"pet-not-found",[235,422,265],{"class":245},[235,424,425],{"class":245},">>",[235,427,428],{"class":361}," =>",[235,430,431],{"class":245}," {\n",[235,433,435,438],{"class":237,"line":434},7,[235,436,437],{"class":241},"    try",[235,439,431],{"class":245},[235,441,443,446,449,452,455,458,461,464,466,469,472,475,478],{"class":237,"line":442},8,[235,444,445],{"class":361},"        const",[235,447,448],{"class":249}," pet",[235,450,451],{"class":245}," =",[235,453,454],{"class":241}," await",[235,456,457],{"class":249}," myApp",[235,459,460],{"class":245},".",[235,462,463],{"class":249},"db",[235,465,460],{"class":245},[235,467,468],{"class":371},"getPet",[235,470,374],{"class":471},"swJcz",[235,473,474],{"class":249},"id",[235,476,477],{"class":471},")",[235,479,268],{"class":245},[235,481,483,486,488,491,494,497],{"class":237,"line":482},9,[235,484,485],{"class":241},"        if",[235,487,380],{"class":471},[235,489,490],{"class":245},"!",[235,492,493],{"class":249},"pet",[235,495,496],{"class":471},") ",[235,498,499],{"class":245},"{\n",[235,501,503,506,509,511,514,517,520,522,524,527,530],{"class":237,"line":502},10,[235,504,505],{"class":361},"            const",[235,507,508],{"class":249}," publicMessage",[235,510,451],{"class":245},[235,512,513],{"class":245}," `",[235,515,516],{"class":261},"Pet with id ",[235,518,519],{"class":245},"${",[235,521,474],{"class":249},[235,523,252],{"class":245},[235,525,526],{"class":261}," can't be found",[235,528,529],{"class":245},"`",[235,531,268],{"class":245},[235,533,535],{"class":237,"line":534},11,[235,536,538],{"class":537},"sHwdD","            \u002F\u002F application errors should be returned and strongly typed,\n",[235,540,542],{"class":237,"line":541},12,[235,543,544],{"class":537},"            \u002F\u002F so can be correctly managed by client\n",[235,546,548,551,554,556,558,561,564,566,568,570,572,574,576,578,580],{"class":237,"line":547},13,[235,549,550],{"class":241},"            return",[235,552,553],{"class":245}," new",[235,555,413],{"class":371},[235,557,374],{"class":471},[235,559,560],{"class":245},"{",[235,562,563],{"class":249},"publicMessage",[235,565,281],{"class":245},[235,567,305],{"class":471},[235,569,392],{"class":245},[235,571,258],{"class":245},[235,573,420],{"class":261},[235,575,265],{"class":245},[235,577,252],{"class":245},[235,579,477],{"class":471},[235,581,268],{"class":245},[235,583,585],{"class":237,"line":584},14,[235,586,587],{"class":245},"        }\n",[235,589,591,594,596],{"class":237,"line":590},15,[235,592,593],{"class":241},"        return",[235,595,448],{"class":249},[235,597,268],{"class":245},[235,599,601,604,607,609,612,614],{"class":237,"line":600},16,[235,602,603],{"class":245},"    }",[235,605,606],{"class":241}," catch",[235,608,380],{"class":471},[235,610,611],{"class":249},"dbError",[235,613,496],{"class":471},[235,615,499],{"class":245},[235,617,619,621,623,625,627,630,632],{"class":237,"line":618},17,[235,620,445],{"class":361},[235,622,508],{"class":249},[235,624,451],{"class":245},[235,626,513],{"class":245},[235,628,629],{"class":261},"Cant fetch data.",[235,631,529],{"class":245},[235,633,268],{"class":245},[235,635,637,639,642,644,646,648,651,654,656,658,661],{"class":237,"line":636},18,[235,638,445],{"class":361},[235,640,641],{"class":249}," message",[235,643,451],{"class":245},[235,645,380],{"class":471},[235,647,611],{"class":249},[235,649,650],{"class":241}," as",[235,652,653],{"class":395}," Error",[235,655,477],{"class":471},[235,657,460],{"class":245},[235,659,660],{"class":249},"message",[235,662,268],{"class":245},[235,664,666],{"class":237,"line":665},19,[235,667,668],{"class":537},"        \u002F*\n",[235,670,672],{"class":237,"line":671},20,[235,673,674],{"class":537},"         * Thrown or Unexpected error are not strongly typed\n",[235,676,678],{"class":237,"line":677},21,[235,679,680],{"class":537},"         *\n",[235,682,684],{"class":237,"line":683},22,[235,685,686],{"class":537},"         * Full RpcError containing dbError message and stacktrace will be added\n",[235,688,690],{"class":237,"line":689},23,[235,691,692],{"class":537},"         * to ctx.request.unexpectedErrors, so it can be logged or managed after\n",[235,694,696],{"class":237,"line":695},24,[235,697,680],{"class":537},[235,699,701],{"class":237,"line":700},25,[235,702,703],{"class":537},"         * only publicMessage will be returned in the response\n",[235,705,707],{"class":237,"line":706},26,[235,708,709],{"class":537},"         *\u002F\n",[235,711,713,716,718,720,722,724,726,728,730,732,735,737,740,742,744,746,748,750,752,755,757,759,761],{"class":237,"line":712},27,[235,714,715],{"class":241},"        throw",[235,717,553],{"class":245},[235,719,413],{"class":371},[235,721,374],{"class":471},[235,723,560],{"class":245},[235,725,563],{"class":249},[235,727,281],{"class":245},[235,729,641],{"class":249},[235,731,281],{"class":245},[235,733,734],{"class":471}," originalError",[235,736,392],{"class":245},[235,738,739],{"class":249}," dbError",[235,741,650],{"class":241},[235,743,653],{"class":395},[235,745,281],{"class":245},[235,747,305],{"class":471},[235,749,392],{"class":245},[235,751,258],{"class":245},[235,753,754],{"class":261},"db-error",[235,756,265],{"class":245},[235,758,252],{"class":245},[235,760,477],{"class":471},[235,762,268],{"class":245},[235,764,766],{"class":237,"line":765},28,[235,767,768],{"class":245},"    }\n",[235,770,772,774,776,779,782],{"class":237,"line":771},29,[235,773,252],{"class":245},[235,775,496],{"class":249},[235,777,778],{"class":241},"satisfies",[235,780,781],{"class":395}," Route",[235,783,268],{"class":245},[235,785,787],{"class":237,"line":786},30,[235,788,352],{"emptyLinePlaceholder":351},[235,790,792,794,796,799,801,803,805,808,811,813],{"class":237,"line":791},31,[235,793,358],{"class":241},[235,795,362],{"class":361},[235,797,798],{"class":249}," alwaysError ",[235,800,368],{"class":245},[235,802,284],{"class":371},[235,804,374],{"class":249},[235,806,807],{"class":245},"():",[235,809,810],{"class":395}," void",[235,812,428],{"class":361},[235,814,431],{"class":245},[235,816,818,821,823,825,827,829,832,834,836],{"class":237,"line":817},32,[235,819,820],{"class":241},"    throw",[235,822,553],{"class":245},[235,824,653],{"class":371},[235,826,374],{"class":471},[235,828,265],{"class":245},[235,830,831],{"class":261},"will generate a 500 error with an \"Unknown Error\" message",[235,833,265],{"class":245},[235,835,477],{"class":471},[235,837,268],{"class":245},[235,839,841,843,845,847,849],{"class":237,"line":840},33,[235,842,252],{"class":245},[235,844,496],{"class":249},[235,846,778],{"class":241},[235,848,781],{"class":395},[235,850,268],{"class":245},[201,852,853],{},"The client can now handle errors with full type safety:",[226,855,857],{"className":228,"code":856,"language":230,"meta":231,"style":231},"import {initClient} from '@mionjs\u002Fclient';\nimport type {MyApi} from '.\u002Fserver.routes.ts';\n\nconst {routes, middleFns} = initClient\u003CMyApi>({baseURL: 'http:\u002F\u002Flocalhost:3000'});\n\n\u002F\u002F call() returns 4-tuple - never throws\nconst [user, error] = await routes.users.getById('123').call();\n\nif (error) {\n    \u002F\u002F Handle error - TypeScript knows the error type\n    console.log('Error:', error.publicMessage);\n} else {\n    \u002F\u002F Handle success\n    console.log('User:', user?.name);\n}\n",[205,858,859,881,905,909,960,964,969,1025,1029,1039,1044,1075,1084,1089,1121],{"__ignoreMap":231},[235,860,861,863,865,868,870,872,874,877,879],{"class":237,"line":238},[235,862,242],{"class":241},[235,864,246],{"class":245},[235,866,867],{"class":249},"initClient",[235,869,252],{"class":245},[235,871,255],{"class":241},[235,873,258],{"class":245},[235,875,876],{"class":261},"@mionjs\u002Fclient",[235,878,265],{"class":245},[235,880,268],{"class":245},[235,882,883,885,887,889,892,894,896,898,901,903],{"class":237,"line":271},[235,884,242],{"class":241},[235,886,305],{"class":241},[235,888,246],{"class":245},[235,890,891],{"class":249},"MyApi",[235,893,252],{"class":245},[235,895,255],{"class":241},[235,897,258],{"class":245},[235,899,900],{"class":261},".\u002Fserver.routes.ts",[235,902,265],{"class":245},[235,904,268],{"class":245},[235,906,907],{"class":237,"line":300},[235,908,352],{"emptyLinePlaceholder":351},[235,910,911,914,916,919,921,924,926,928,931,933,935,938,940,942,945,947,949,952,954,956,958],{"class":237,"line":326},[235,912,913],{"class":361},"const",[235,915,246],{"class":245},[235,917,918],{"class":249},"routes",[235,920,281],{"class":245},[235,922,923],{"class":249}," middleFns",[235,925,252],{"class":245},[235,927,451],{"class":245},[235,929,930],{"class":371}," initClient",[235,932,405],{"class":245},[235,934,891],{"class":395},[235,936,937],{"class":245},">",[235,939,374],{"class":249},[235,941,560],{"class":245},[235,943,944],{"class":471},"baseURL",[235,946,392],{"class":245},[235,948,258],{"class":245},[235,950,951],{"class":261},"http:\u002F\u002Flocalhost:3000",[235,953,265],{"class":245},[235,955,252],{"class":245},[235,957,477],{"class":249},[235,959,268],{"class":245},[235,961,962],{"class":237,"line":348},[235,963,352],{"emptyLinePlaceholder":351},[235,965,966],{"class":237,"line":355},[235,967,968],{"class":537},"\u002F\u002F call() returns 4-tuple - never throws\n",[235,970,971,973,976,979,981,984,987,989,991,994,996,999,1001,1004,1006,1008,1011,1013,1015,1017,1020,1023],{"class":237,"line":434},[235,972,913],{"class":361},[235,974,975],{"class":245}," [",[235,977,978],{"class":249},"user",[235,980,281],{"class":245},[235,982,983],{"class":249}," error",[235,985,986],{"class":245},"]",[235,988,451],{"class":245},[235,990,454],{"class":241},[235,992,993],{"class":249}," routes",[235,995,460],{"class":245},[235,997,998],{"class":249},"users",[235,1000,460],{"class":245},[235,1002,1003],{"class":371},"getById",[235,1005,374],{"class":249},[235,1007,265],{"class":245},[235,1009,1010],{"class":261},"123",[235,1012,265],{"class":245},[235,1014,477],{"class":249},[235,1016,460],{"class":245},[235,1018,1019],{"class":371},"call",[235,1021,1022],{"class":249},"()",[235,1024,268],{"class":245},[235,1026,1027],{"class":237,"line":442},[235,1028,352],{"emptyLinePlaceholder":351},[235,1030,1031,1034,1037],{"class":237,"line":482},[235,1032,1033],{"class":241},"if",[235,1035,1036],{"class":249}," (error) ",[235,1038,499],{"class":245},[235,1040,1041],{"class":237,"line":502},[235,1042,1043],{"class":537},"    \u002F\u002F Handle error - TypeScript knows the error type\n",[235,1045,1046,1049,1051,1054,1056,1058,1061,1063,1065,1067,1069,1071,1073],{"class":237,"line":534},[235,1047,1048],{"class":249},"    console",[235,1050,460],{"class":245},[235,1052,1053],{"class":371},"log",[235,1055,374],{"class":471},[235,1057,265],{"class":245},[235,1059,1060],{"class":261},"Error:",[235,1062,265],{"class":245},[235,1064,281],{"class":245},[235,1066,983],{"class":249},[235,1068,460],{"class":245},[235,1070,563],{"class":249},[235,1072,477],{"class":471},[235,1074,268],{"class":245},[235,1076,1077,1079,1082],{"class":237,"line":541},[235,1078,252],{"class":245},[235,1080,1081],{"class":241}," else",[235,1083,431],{"class":245},[235,1085,1086],{"class":237,"line":547},[235,1087,1088],{"class":537},"    \u002F\u002F Handle success\n",[235,1090,1091,1093,1095,1097,1099,1101,1104,1106,1108,1111,1114,1117,1119],{"class":237,"line":584},[235,1092,1048],{"class":249},[235,1094,460],{"class":245},[235,1096,1053],{"class":371},[235,1098,374],{"class":471},[235,1100,265],{"class":245},[235,1102,1103],{"class":261},"User:",[235,1105,265],{"class":245},[235,1107,281],{"class":245},[235,1109,1110],{"class":249}," user",[235,1112,1113],{"class":245},"?.",[235,1115,1116],{"class":249},"name",[235,1118,477],{"class":471},[235,1120,268],{"class":245},[235,1122,1123],{"class":237,"line":590},[235,1124,1125],{"class":245},"}\n",[215,1127,1129,1130,1133],{"id":1128},"use-errortype-to-identify-errors","Use ",[205,1131,1132],{},"error.type"," to Identify Errors",[1135,1136,1137,1140,1141,1143],"warning",{},[210,1138,1139],{},"HTTP status codes are irrelevant in mion's RPC architecture."," Always use ",[205,1142,1132],{}," to identify and handle errors.",[201,1145,1146,1147,1149],{},"In RPC-style APIs, the HTTP status code is just a transport detail. The ",[205,1148,1132],{}," property is the discriminator that identifies the error:",[226,1151,1153],{"className":228,"code":1152,"language":230,"meta":231,"style":231},"import {initClient} from '@mionjs\u002Fclient';\n\n\u002F\u002F importing type only from server\nimport type {MyApi} from '.\u002Fserver.routes.ts';\nimport {isRpcError} from '@mionjs\u002Fcore';\n\nconst {routes, middleFns} = initClient\u003CMyApi>({baseURL: 'http:\u002F\u002Flocalhost:3000'});\n\n\u002F\u002F ========== Result pattern (never throws) ==========\n\u002F\u002F call() always returns a 4-tuple, never throws\n\u002F\u002F [routeResult, routeError, middleFnsResults, middleFnsErrors]\n\n\u002F\u002F calls sayHello route in the server\nconst [sayHello, error] = await routes.users.sayHello({id: '123', name: 'John', surname: 'Doe'}).call();\n\nif (error) {\n    \u002F\u002F in this case the request has failed because the authorization middleFn is missing\n    console.log(error); \u002F\u002F { type: 'validation-error', message: `Invalid params for Route or MiddleFn 'auth'.`}\n\n    if (isRpcError(error)) {\n        \u002F\u002F ... handle the error as required\n    }\n} else {\n    console.log(sayHello); \u002F\u002F Hello John Doe\n}\n\n\u002F\u002F ========== Full 4-tuple with middleFns ==========\n\u002F\u002F call({middleFns: {...}}) returns [routeResult, routeError, middleFnsResults, middleFnsErrors]\nconst [greeting, routeError, middleFnResults, middleFnErrors] = await routes.users\n    .sayHello({id: '123', name: 'John', surname: 'Doe'})\n    .call({\n        middleFns: {\n            auth: middleFns.auth({headers: {Authorization: 'Bearer token'}}),\n        },\n    });\n\nif (routeError) {\n    console.log('Route failed:', routeError.type);\n} else {\n    console.log(greeting); \u002F\u002F Hello John Doe\n}\n\n\u002F\u002F Check middleFn errors\nif (middleFnErrors?.auth) {\n    console.log('Auth middleFn failed:', middleFnErrors.auth.type);\n}\n\n\u002F\u002F Access middleFn results\nconsole.log('MiddleFn results:', middleFnResults);\n\n\u002F\u002F ========== Validation throws errors ==========\n\u002F\u002F Note: typeErrors() is the only method that can throw\n\ntry {\n    \u002F\u002F Validation throws an error when validation fails\n    const errors = await routes.users.sayHello(null as any).typeErrors();\n    console.log(errors); \u002F\u002F [] (empty array if no errors)\n} catch (validationError: any) {\n    console.log(validationError); \u002F\u002F { type: 'validation-error', message: `Invalid params ...`, errorData : {...}}\n}\n",[205,1154,1155,1175,1179,1184,1206,1227,1231,1275,1279,1284,1289,1294,1298,1303,1386,1390,1398,1403,1424,1428,1446,1451,1455,1463,1482,1486,1490,1495,1500,1537,1587,1597,1606,1651,1657,1666,1671,1681,1712,1721,1740,1745,1750,1756,1771,1805,1810,1815,1821,1847,1852,1858,1864,1869,1877,1883,1927,1948,1968,1988],{"__ignoreMap":231},[235,1156,1157,1159,1161,1163,1165,1167,1169,1171,1173],{"class":237,"line":238},[235,1158,242],{"class":241},[235,1160,246],{"class":245},[235,1162,867],{"class":249},[235,1164,252],{"class":245},[235,1166,255],{"class":241},[235,1168,258],{"class":245},[235,1170,876],{"class":261},[235,1172,265],{"class":245},[235,1174,268],{"class":245},[235,1176,1177],{"class":237,"line":271},[235,1178,352],{"emptyLinePlaceholder":351},[235,1180,1181],{"class":237,"line":300},[235,1182,1183],{"class":537},"\u002F\u002F importing type only from server\n",[235,1185,1186,1188,1190,1192,1194,1196,1198,1200,1202,1204],{"class":237,"line":326},[235,1187,242],{"class":241},[235,1189,305],{"class":241},[235,1191,246],{"class":245},[235,1193,891],{"class":249},[235,1195,252],{"class":245},[235,1197,255],{"class":241},[235,1199,258],{"class":245},[235,1201,900],{"class":261},[235,1203,265],{"class":245},[235,1205,268],{"class":245},[235,1207,1208,1210,1212,1215,1217,1219,1221,1223,1225],{"class":237,"line":348},[235,1209,242],{"class":241},[235,1211,246],{"class":245},[235,1213,1214],{"class":249},"isRpcError",[235,1216,252],{"class":245},[235,1218,255],{"class":241},[235,1220,258],{"class":245},[235,1222,262],{"class":261},[235,1224,265],{"class":245},[235,1226,268],{"class":245},[235,1228,1229],{"class":237,"line":355},[235,1230,352],{"emptyLinePlaceholder":351},[235,1232,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273],{"class":237,"line":434},[235,1234,913],{"class":361},[235,1236,246],{"class":245},[235,1238,918],{"class":249},[235,1240,281],{"class":245},[235,1242,923],{"class":249},[235,1244,252],{"class":245},[235,1246,451],{"class":245},[235,1248,930],{"class":371},[235,1250,405],{"class":245},[235,1252,891],{"class":395},[235,1254,937],{"class":245},[235,1256,374],{"class":249},[235,1258,560],{"class":245},[235,1260,944],{"class":471},[235,1262,392],{"class":245},[235,1264,258],{"class":245},[235,1266,951],{"class":261},[235,1268,265],{"class":245},[235,1270,252],{"class":245},[235,1272,477],{"class":249},[235,1274,268],{"class":245},[235,1276,1277],{"class":237,"line":442},[235,1278,352],{"emptyLinePlaceholder":351},[235,1280,1281],{"class":237,"line":482},[235,1282,1283],{"class":537},"\u002F\u002F ========== Result pattern (never throws) ==========\n",[235,1285,1286],{"class":237,"line":502},[235,1287,1288],{"class":537},"\u002F\u002F call() always returns a 4-tuple, never throws\n",[235,1290,1291],{"class":237,"line":534},[235,1292,1293],{"class":537},"\u002F\u002F [routeResult, routeError, middleFnsResults, middleFnsErrors]\n",[235,1295,1296],{"class":237,"line":541},[235,1297,352],{"emptyLinePlaceholder":351},[235,1299,1300],{"class":237,"line":547},[235,1301,1302],{"class":537},"\u002F\u002F calls sayHello route in the server\n",[235,1304,1305,1307,1309,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1351,1353,1355,1358,1360,1362,1365,1367,1369,1372,1374,1376,1378,1380,1382,1384],{"class":237,"line":584},[235,1306,913],{"class":361},[235,1308,975],{"class":245},[235,1310,1311],{"class":249},"sayHello",[235,1313,281],{"class":245},[235,1315,983],{"class":249},[235,1317,986],{"class":245},[235,1319,451],{"class":245},[235,1321,454],{"class":241},[235,1323,993],{"class":249},[235,1325,460],{"class":245},[235,1327,998],{"class":249},[235,1329,460],{"class":245},[235,1331,1311],{"class":371},[235,1333,374],{"class":249},[235,1335,560],{"class":245},[235,1337,474],{"class":471},[235,1339,392],{"class":245},[235,1341,258],{"class":245},[235,1343,1010],{"class":261},[235,1345,265],{"class":245},[235,1347,281],{"class":245},[235,1349,1350],{"class":471}," name",[235,1352,392],{"class":245},[235,1354,258],{"class":245},[235,1356,1357],{"class":261},"John",[235,1359,265],{"class":245},[235,1361,281],{"class":245},[235,1363,1364],{"class":471}," surname",[235,1366,392],{"class":245},[235,1368,258],{"class":245},[235,1370,1371],{"class":261},"Doe",[235,1373,265],{"class":245},[235,1375,252],{"class":245},[235,1377,477],{"class":249},[235,1379,460],{"class":245},[235,1381,1019],{"class":371},[235,1383,1022],{"class":249},[235,1385,268],{"class":245},[235,1387,1388],{"class":237,"line":590},[235,1389,352],{"emptyLinePlaceholder":351},[235,1391,1392,1394,1396],{"class":237,"line":600},[235,1393,1033],{"class":241},[235,1395,1036],{"class":249},[235,1397,499],{"class":245},[235,1399,1400],{"class":237,"line":618},[235,1401,1402],{"class":537},"    \u002F\u002F in this case the request has failed because the authorization middleFn is missing\n",[235,1404,1405,1407,1409,1411,1413,1416,1418,1421],{"class":237,"line":636},[235,1406,1048],{"class":249},[235,1408,460],{"class":245},[235,1410,1053],{"class":371},[235,1412,374],{"class":471},[235,1414,1415],{"class":249},"error",[235,1417,477],{"class":471},[235,1419,1420],{"class":245},";",[235,1422,1423],{"class":537}," \u002F\u002F { type: 'validation-error', message: `Invalid params for Route or MiddleFn 'auth'.`}\n",[235,1425,1426],{"class":237,"line":665},[235,1427,352],{"emptyLinePlaceholder":351},[235,1429,1430,1433,1435,1437,1439,1441,1444],{"class":237,"line":671},[235,1431,1432],{"class":241},"    if",[235,1434,380],{"class":471},[235,1436,1214],{"class":371},[235,1438,374],{"class":471},[235,1440,1415],{"class":249},[235,1442,1443],{"class":471},")) ",[235,1445,499],{"class":245},[235,1447,1448],{"class":237,"line":677},[235,1449,1450],{"class":537},"        \u002F\u002F ... handle the error as required\n",[235,1452,1453],{"class":237,"line":683},[235,1454,768],{"class":245},[235,1456,1457,1459,1461],{"class":237,"line":689},[235,1458,252],{"class":245},[235,1460,1081],{"class":241},[235,1462,431],{"class":245},[235,1464,1465,1467,1469,1471,1473,1475,1477,1479],{"class":237,"line":695},[235,1466,1048],{"class":249},[235,1468,460],{"class":245},[235,1470,1053],{"class":371},[235,1472,374],{"class":471},[235,1474,1311],{"class":249},[235,1476,477],{"class":471},[235,1478,1420],{"class":245},[235,1480,1481],{"class":537}," \u002F\u002F Hello John Doe\n",[235,1483,1484],{"class":237,"line":700},[235,1485,1125],{"class":245},[235,1487,1488],{"class":237,"line":706},[235,1489,352],{"emptyLinePlaceholder":351},[235,1491,1492],{"class":237,"line":712},[235,1493,1494],{"class":537},"\u002F\u002F ========== Full 4-tuple with middleFns ==========\n",[235,1496,1497],{"class":237,"line":765},[235,1498,1499],{"class":537},"\u002F\u002F call({middleFns: {...}}) returns [routeResult, routeError, middleFnsResults, middleFnsErrors]\n",[235,1501,1502,1504,1506,1509,1511,1514,1516,1519,1521,1524,1526,1528,1530,1532,1534],{"class":237,"line":771},[235,1503,913],{"class":361},[235,1505,975],{"class":245},[235,1507,1508],{"class":249},"greeting",[235,1510,281],{"class":245},[235,1512,1513],{"class":249}," routeError",[235,1515,281],{"class":245},[235,1517,1518],{"class":249}," middleFnResults",[235,1520,281],{"class":245},[235,1522,1523],{"class":249}," middleFnErrors",[235,1525,986],{"class":245},[235,1527,451],{"class":245},[235,1529,454],{"class":241},[235,1531,993],{"class":249},[235,1533,460],{"class":245},[235,1535,1536],{"class":249},"users\n",[235,1538,1539,1542,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568,1570,1572,1574,1576,1578,1580,1582,1584],{"class":237,"line":786},[235,1540,1541],{"class":245},"    .",[235,1543,1311],{"class":371},[235,1545,374],{"class":249},[235,1547,560],{"class":245},[235,1549,474],{"class":471},[235,1551,392],{"class":245},[235,1553,258],{"class":245},[235,1555,1010],{"class":261},[235,1557,265],{"class":245},[235,1559,281],{"class":245},[235,1561,1350],{"class":471},[235,1563,392],{"class":245},[235,1565,258],{"class":245},[235,1567,1357],{"class":261},[235,1569,265],{"class":245},[235,1571,281],{"class":245},[235,1573,1364],{"class":471},[235,1575,392],{"class":245},[235,1577,258],{"class":245},[235,1579,1371],{"class":261},[235,1581,265],{"class":245},[235,1583,252],{"class":245},[235,1585,1586],{"class":249},")\n",[235,1588,1589,1591,1593,1595],{"class":237,"line":791},[235,1590,1541],{"class":245},[235,1592,1019],{"class":371},[235,1594,374],{"class":249},[235,1596,499],{"class":245},[235,1598,1599,1602,1604],{"class":237,"line":817},[235,1600,1601],{"class":471},"        middleFns",[235,1603,392],{"class":245},[235,1605,431],{"class":245},[235,1607,1608,1611,1613,1615,1617,1620,1622,1624,1627,1629,1631,1634,1636,1638,1641,1643,1646,1648],{"class":237,"line":840},[235,1609,1610],{"class":471},"            auth",[235,1612,392],{"class":245},[235,1614,923],{"class":249},[235,1616,460],{"class":245},[235,1618,1619],{"class":371},"auth",[235,1621,374],{"class":249},[235,1623,560],{"class":245},[235,1625,1626],{"class":471},"headers",[235,1628,392],{"class":245},[235,1630,246],{"class":245},[235,1632,1633],{"class":471},"Authorization",[235,1635,392],{"class":245},[235,1637,258],{"class":245},[235,1639,1640],{"class":261},"Bearer token",[235,1642,265],{"class":245},[235,1644,1645],{"class":245},"}}",[235,1647,477],{"class":249},[235,1649,1650],{"class":245},",\n",[235,1652,1654],{"class":237,"line":1653},34,[235,1655,1656],{"class":245},"        },\n",[235,1658,1660,1662,1664],{"class":237,"line":1659},35,[235,1661,603],{"class":245},[235,1663,477],{"class":249},[235,1665,268],{"class":245},[235,1667,1669],{"class":237,"line":1668},36,[235,1670,352],{"emptyLinePlaceholder":351},[235,1672,1674,1676,1679],{"class":237,"line":1673},37,[235,1675,1033],{"class":241},[235,1677,1678],{"class":249}," (routeError) ",[235,1680,499],{"class":245},[235,1682,1684,1686,1688,1690,1692,1694,1697,1699,1701,1703,1705,1708,1710],{"class":237,"line":1683},38,[235,1685,1048],{"class":249},[235,1687,460],{"class":245},[235,1689,1053],{"class":371},[235,1691,374],{"class":471},[235,1693,265],{"class":245},[235,1695,1696],{"class":261},"Route failed:",[235,1698,265],{"class":245},[235,1700,281],{"class":245},[235,1702,1513],{"class":249},[235,1704,460],{"class":245},[235,1706,1707],{"class":249},"type",[235,1709,477],{"class":471},[235,1711,268],{"class":245},[235,1713,1715,1717,1719],{"class":237,"line":1714},39,[235,1716,252],{"class":245},[235,1718,1081],{"class":241},[235,1720,431],{"class":245},[235,1722,1724,1726,1728,1730,1732,1734,1736,1738],{"class":237,"line":1723},40,[235,1725,1048],{"class":249},[235,1727,460],{"class":245},[235,1729,1053],{"class":371},[235,1731,374],{"class":471},[235,1733,1508],{"class":249},[235,1735,477],{"class":471},[235,1737,1420],{"class":245},[235,1739,1481],{"class":537},[235,1741,1743],{"class":237,"line":1742},41,[235,1744,1125],{"class":245},[235,1746,1748],{"class":237,"line":1747},42,[235,1749,352],{"emptyLinePlaceholder":351},[235,1751,1753],{"class":237,"line":1752},43,[235,1754,1755],{"class":537},"\u002F\u002F Check middleFn errors\n",[235,1757,1759,1761,1764,1766,1769],{"class":237,"line":1758},44,[235,1760,1033],{"class":241},[235,1762,1763],{"class":249}," (middleFnErrors",[235,1765,1113],{"class":245},[235,1767,1768],{"class":249},"auth) ",[235,1770,499],{"class":245},[235,1772,1774,1776,1778,1780,1782,1784,1787,1789,1791,1793,1795,1797,1799,1801,1803],{"class":237,"line":1773},45,[235,1775,1048],{"class":249},[235,1777,460],{"class":245},[235,1779,1053],{"class":371},[235,1781,374],{"class":471},[235,1783,265],{"class":245},[235,1785,1786],{"class":261},"Auth middleFn failed:",[235,1788,265],{"class":245},[235,1790,281],{"class":245},[235,1792,1523],{"class":249},[235,1794,460],{"class":245},[235,1796,1619],{"class":249},[235,1798,460],{"class":245},[235,1800,1707],{"class":249},[235,1802,477],{"class":471},[235,1804,268],{"class":245},[235,1806,1808],{"class":237,"line":1807},46,[235,1809,1125],{"class":245},[235,1811,1813],{"class":237,"line":1812},47,[235,1814,352],{"emptyLinePlaceholder":351},[235,1816,1818],{"class":237,"line":1817},48,[235,1819,1820],{"class":537},"\u002F\u002F Access middleFn results\n",[235,1822,1824,1827,1829,1831,1833,1835,1838,1840,1842,1845],{"class":237,"line":1823},49,[235,1825,1826],{"class":249},"console",[235,1828,460],{"class":245},[235,1830,1053],{"class":371},[235,1832,374],{"class":249},[235,1834,265],{"class":245},[235,1836,1837],{"class":261},"MiddleFn results:",[235,1839,265],{"class":245},[235,1841,281],{"class":245},[235,1843,1844],{"class":249}," middleFnResults)",[235,1846,268],{"class":245},[235,1848,1850],{"class":237,"line":1849},50,[235,1851,352],{"emptyLinePlaceholder":351},[235,1853,1855],{"class":237,"line":1854},51,[235,1856,1857],{"class":537},"\u002F\u002F ========== Validation throws errors ==========\n",[235,1859,1861],{"class":237,"line":1860},52,[235,1862,1863],{"class":537},"\u002F\u002F Note: typeErrors() is the only method that can throw\n",[235,1865,1867],{"class":237,"line":1866},53,[235,1868,352],{"emptyLinePlaceholder":351},[235,1870,1872,1875],{"class":237,"line":1871},54,[235,1873,1874],{"class":241},"try",[235,1876,431],{"class":245},[235,1878,1880],{"class":237,"line":1879},55,[235,1881,1882],{"class":537},"    \u002F\u002F Validation throws an error when validation fails\n",[235,1884,1886,1889,1892,1894,1896,1898,1900,1902,1904,1906,1908,1911,1913,1916,1918,1920,1923,1925],{"class":237,"line":1885},56,[235,1887,1888],{"class":361},"    const",[235,1890,1891],{"class":249}," errors",[235,1893,451],{"class":245},[235,1895,454],{"class":241},[235,1897,993],{"class":249},[235,1899,460],{"class":245},[235,1901,998],{"class":249},[235,1903,460],{"class":245},[235,1905,1311],{"class":371},[235,1907,374],{"class":471},[235,1909,1910],{"class":245},"null",[235,1912,650],{"class":241},[235,1914,1915],{"class":395}," any",[235,1917,477],{"class":471},[235,1919,460],{"class":245},[235,1921,1922],{"class":371},"typeErrors",[235,1924,1022],{"class":471},[235,1926,268],{"class":245},[235,1928,1930,1932,1934,1936,1938,1941,1943,1945],{"class":237,"line":1929},57,[235,1931,1048],{"class":249},[235,1933,460],{"class":245},[235,1935,1053],{"class":371},[235,1937,374],{"class":471},[235,1939,1940],{"class":249},"errors",[235,1942,477],{"class":471},[235,1944,1420],{"class":245},[235,1946,1947],{"class":537}," \u002F\u002F [] (empty array if no errors)\n",[235,1949,1951,1953,1955,1957,1960,1962,1964,1966],{"class":237,"line":1950},58,[235,1952,252],{"class":245},[235,1954,606],{"class":241},[235,1956,380],{"class":245},[235,1958,1959],{"class":383},"validationError",[235,1961,392],{"class":245},[235,1963,1915],{"class":395},[235,1965,477],{"class":245},[235,1967,431],{"class":245},[235,1969,1971,1973,1975,1977,1979,1981,1983,1985],{"class":237,"line":1970},59,[235,1972,1048],{"class":249},[235,1974,460],{"class":245},[235,1976,1053],{"class":371},[235,1978,374],{"class":471},[235,1980,1959],{"class":249},[235,1982,477],{"class":471},[235,1984,1420],{"class":245},[235,1986,1987],{"class":537}," \u002F\u002F { type: 'validation-error', message: `Invalid params ...`, errorData : {...}}\n",[235,1989,1991],{"class":237,"line":1990},60,[235,1992,1125],{"class":245},[215,1994,1996],{"id":1995},"throwing-errors-discouraged","Throwing Errors (Discouraged)",[1135,1998,1999,2002],{},[210,2000,2001],{},"Thrown errors lose type information."," Only throw errors for truly unexpected situations (bugs, infrastructure failures).",[201,2004,2005,2006,2008],{},"Thrown errors are treated as unexpected errors and only expose ",[205,2007,563],{}," to the client. The error type is not part of the function signature:",[226,2010,2011],{"className":228,"code":229,"language":230,"meta":231,"style":231},[205,2012,2013,2033,2057,2079,2099,2103,2157,2163,2191,2205,2229,2233,2237,2269,2273,2281,2295,2311,2335,2339,2343,2347,2351,2355,2359,2363,2367,2415,2419,2431,2435,2457,2477],{"__ignoreMap":231},[235,2014,2015,2017,2019,2021,2023,2025,2027,2029,2031],{"class":237,"line":238},[235,2016,242],{"class":241},[235,2018,246],{"class":245},[235,2020,207],{"class":249},[235,2022,252],{"class":245},[235,2024,255],{"class":241},[235,2026,258],{"class":245},[235,2028,262],{"class":261},[235,2030,265],{"class":245},[235,2032,268],{"class":245},[235,2034,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055],{"class":237,"line":271},[235,2036,242],{"class":241},[235,2038,246],{"class":245},[235,2040,278],{"class":249},[235,2042,281],{"class":245},[235,2044,284],{"class":249},[235,2046,252],{"class":245},[235,2048,255],{"class":241},[235,2050,258],{"class":245},[235,2052,293],{"class":261},[235,2054,265],{"class":245},[235,2056,268],{"class":245},[235,2058,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077],{"class":237,"line":300},[235,2060,242],{"class":241},[235,2062,305],{"class":241},[235,2064,246],{"class":245},[235,2066,310],{"class":249},[235,2068,252],{"class":245},[235,2070,255],{"class":241},[235,2072,258],{"class":245},[235,2074,319],{"class":261},[235,2076,265],{"class":245},[235,2078,268],{"class":245},[235,2080,2081,2083,2085,2087,2089,2091,2093,2095,2097],{"class":237,"line":326},[235,2082,242],{"class":241},[235,2084,246],{"class":245},[235,2086,333],{"class":249},[235,2088,252],{"class":245},[235,2090,255],{"class":241},[235,2092,258],{"class":245},[235,2094,319],{"class":261},[235,2096,265],{"class":245},[235,2098,268],{"class":245},[235,2100,2101],{"class":237,"line":348},[235,2102,352],{"emptyLinePlaceholder":351},[235,2104,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155],{"class":237,"line":355},[235,2106,358],{"class":241},[235,2108,362],{"class":361},[235,2110,365],{"class":249},[235,2112,368],{"class":245},[235,2114,284],{"class":371},[235,2116,374],{"class":249},[235,2118,377],{"class":361},[235,2120,380],{"class":245},[235,2122,384],{"class":383},[235,2124,281],{"class":245},[235,2126,389],{"class":383},[235,2128,392],{"class":245},[235,2130,396],{"class":395},[235,2132,399],{"class":245},[235,2134,402],{"class":395},[235,2136,405],{"class":245},[235,2138,310],{"class":395},[235,2140,410],{"class":245},[235,2142,413],{"class":395},[235,2144,405],{"class":245},[235,2146,265],{"class":245},[235,2148,420],{"class":261},[235,2150,265],{"class":245},[235,2152,425],{"class":245},[235,2154,428],{"class":361},[235,2156,431],{"class":245},[235,2158,2159,2161],{"class":237,"line":434},[235,2160,437],{"class":241},[235,2162,431],{"class":245},[235,2164,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183,2185,2187,2189],{"class":237,"line":442},[235,2166,445],{"class":361},[235,2168,448],{"class":249},[235,2170,451],{"class":245},[235,2172,454],{"class":241},[235,2174,457],{"class":249},[235,2176,460],{"class":245},[235,2178,463],{"class":249},[235,2180,460],{"class":245},[235,2182,468],{"class":371},[235,2184,374],{"class":471},[235,2186,474],{"class":249},[235,2188,477],{"class":471},[235,2190,268],{"class":245},[235,2192,2193,2195,2197,2199,2201,2203],{"class":237,"line":482},[235,2194,485],{"class":241},[235,2196,380],{"class":471},[235,2198,490],{"class":245},[235,2200,493],{"class":249},[235,2202,496],{"class":471},[235,2204,499],{"class":245},[235,2206,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225,2227],{"class":237,"line":502},[235,2208,505],{"class":361},[235,2210,508],{"class":249},[235,2212,451],{"class":245},[235,2214,513],{"class":245},[235,2216,516],{"class":261},[235,2218,519],{"class":245},[235,2220,474],{"class":249},[235,2222,252],{"class":245},[235,2224,526],{"class":261},[235,2226,529],{"class":245},[235,2228,268],{"class":245},[235,2230,2231],{"class":237,"line":534},[235,2232,538],{"class":537},[235,2234,2235],{"class":237,"line":541},[235,2236,544],{"class":537},[235,2238,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267],{"class":237,"line":547},[235,2240,550],{"class":241},[235,2242,553],{"class":245},[235,2244,413],{"class":371},[235,2246,374],{"class":471},[235,2248,560],{"class":245},[235,2250,563],{"class":249},[235,2252,281],{"class":245},[235,2254,305],{"class":471},[235,2256,392],{"class":245},[235,2258,258],{"class":245},[235,2260,420],{"class":261},[235,2262,265],{"class":245},[235,2264,252],{"class":245},[235,2266,477],{"class":471},[235,2268,268],{"class":245},[235,2270,2271],{"class":237,"line":584},[235,2272,587],{"class":245},[235,2274,2275,2277,2279],{"class":237,"line":590},[235,2276,593],{"class":241},[235,2278,448],{"class":249},[235,2280,268],{"class":245},[235,2282,2283,2285,2287,2289,2291,2293],{"class":237,"line":600},[235,2284,603],{"class":245},[235,2286,606],{"class":241},[235,2288,380],{"class":471},[235,2290,611],{"class":249},[235,2292,496],{"class":471},[235,2294,499],{"class":245},[235,2296,2297,2299,2301,2303,2305,2307,2309],{"class":237,"line":618},[235,2298,445],{"class":361},[235,2300,508],{"class":249},[235,2302,451],{"class":245},[235,2304,513],{"class":245},[235,2306,629],{"class":261},[235,2308,529],{"class":245},[235,2310,268],{"class":245},[235,2312,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333],{"class":237,"line":636},[235,2314,445],{"class":361},[235,2316,641],{"class":249},[235,2318,451],{"class":245},[235,2320,380],{"class":471},[235,2322,611],{"class":249},[235,2324,650],{"class":241},[235,2326,653],{"class":395},[235,2328,477],{"class":471},[235,2330,460],{"class":245},[235,2332,660],{"class":249},[235,2334,268],{"class":245},[235,2336,2337],{"class":237,"line":665},[235,2338,668],{"class":537},[235,2340,2341],{"class":237,"line":671},[235,2342,674],{"class":537},[235,2344,2345],{"class":237,"line":677},[235,2346,680],{"class":537},[235,2348,2349],{"class":237,"line":683},[235,2350,686],{"class":537},[235,2352,2353],{"class":237,"line":689},[235,2354,692],{"class":537},[235,2356,2357],{"class":237,"line":695},[235,2358,680],{"class":537},[235,2360,2361],{"class":237,"line":700},[235,2362,703],{"class":537},[235,2364,2365],{"class":237,"line":706},[235,2366,709],{"class":537},[235,2368,2369,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2413],{"class":237,"line":712},[235,2370,715],{"class":241},[235,2372,553],{"class":245},[235,2374,413],{"class":371},[235,2376,374],{"class":471},[235,2378,560],{"class":245},[235,2380,563],{"class":249},[235,2382,281],{"class":245},[235,2384,641],{"class":249},[235,2386,281],{"class":245},[235,2388,734],{"class":471},[235,2390,392],{"class":245},[235,2392,739],{"class":249},[235,2394,650],{"class":241},[235,2396,653],{"class":395},[235,2398,281],{"class":245},[235,2400,305],{"class":471},[235,2402,392],{"class":245},[235,2404,258],{"class":245},[235,2406,754],{"class":261},[235,2408,265],{"class":245},[235,2410,252],{"class":245},[235,2412,477],{"class":471},[235,2414,268],{"class":245},[235,2416,2417],{"class":237,"line":765},[235,2418,768],{"class":245},[235,2420,2421,2423,2425,2427,2429],{"class":237,"line":771},[235,2422,252],{"class":245},[235,2424,496],{"class":249},[235,2426,778],{"class":241},[235,2428,781],{"class":395},[235,2430,268],{"class":245},[235,2432,2433],{"class":237,"line":786},[235,2434,352],{"emptyLinePlaceholder":351},[235,2436,2437,2439,2441,2443,2445,2447,2449,2451,2453,2455],{"class":237,"line":791},[235,2438,358],{"class":241},[235,2440,362],{"class":361},[235,2442,798],{"class":249},[235,2444,368],{"class":245},[235,2446,284],{"class":371},[235,2448,374],{"class":249},[235,2450,807],{"class":245},[235,2452,810],{"class":395},[235,2454,428],{"class":361},[235,2456,431],{"class":245},[235,2458,2459,2461,2463,2465,2467,2469,2471,2473,2475],{"class":237,"line":817},[235,2460,820],{"class":241},[235,2462,553],{"class":245},[235,2464,653],{"class":371},[235,2466,374],{"class":471},[235,2468,265],{"class":245},[235,2470,831],{"class":261},[235,2472,265],{"class":245},[235,2474,477],{"class":471},[235,2476,268],{"class":245},[235,2478,2479,2481,2483,2485,2487],{"class":237,"line":840},[235,2480,252],{"class":245},[235,2482,496],{"class":249},[235,2484,778],{"class":241},[235,2486,781],{"class":395},[235,2488,268],{"class":245},[215,2490,2492],{"id":2491},"error-response-format","Error Response Format",[201,2494,2495],{},"Returned and thrown errors are serialized differently in the response body:",[2497,2498,2499,2506],"ul",{},[2500,2501,2502,2505],"li",{},[210,2503,2504],{},"Returned errors"," (strongly typed): Appear under the route id, preserving type information",[2500,2507,2508,2511,2512,2515],{},[210,2509,2510],{},"Thrown errors"," (untyped): Collected in the ",[205,2513,2514],{},"@thrownErrors"," field",[226,2517,2521],{"className":2518,"code":2519,"language":2520,"meta":231,"style":231},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n    \"getUser\": {\n        \"type\": \"user-not-found\",\n        \"publicMessage\": \"User not found\",\n        \"errorData\": {\"userId\": \"123\"}\n    },\n    \"@thrownErrors\": {\n        \"someMiddleFn\": {\n            \"type\": \"unknown-error\",\n            \"publicMessage\": \"Unexpected error\"\n        }\n    }\n}\n","json",[205,2522,2523,2527,2542,2563,2582,2613,2618,2630,2643,2663,2681,2685,2689],{"__ignoreMap":231},[235,2524,2525],{"class":237,"line":238},[235,2526,499],{"class":245},[235,2528,2529,2532,2535,2538,2540],{"class":237,"line":271},[235,2530,2531],{"class":245},"    \"",[235,2533,2534],{"class":361},"getUser",[235,2536,2537],{"class":245},"\"",[235,2539,392],{"class":245},[235,2541,431],{"class":245},[235,2543,2544,2547,2549,2551,2553,2556,2559,2561],{"class":237,"line":300},[235,2545,2546],{"class":245},"        \"",[235,2548,1707],{"class":395},[235,2550,2537],{"class":245},[235,2552,392],{"class":245},[235,2554,2555],{"class":245}," \"",[235,2557,2558],{"class":261},"user-not-found",[235,2560,2537],{"class":245},[235,2562,1650],{"class":245},[235,2564,2565,2567,2569,2571,2573,2575,2578,2580],{"class":237,"line":326},[235,2566,2546],{"class":245},[235,2568,563],{"class":395},[235,2570,2537],{"class":245},[235,2572,392],{"class":245},[235,2574,2555],{"class":245},[235,2576,2577],{"class":261},"User not found",[235,2579,2537],{"class":245},[235,2581,1650],{"class":245},[235,2583,2584,2586,2589,2591,2593,2595,2597,2601,2603,2605,2607,2609,2611],{"class":237,"line":348},[235,2585,2546],{"class":245},[235,2587,2588],{"class":395},"errorData",[235,2590,2537],{"class":245},[235,2592,392],{"class":245},[235,2594,246],{"class":245},[235,2596,2537],{"class":245},[235,2598,2600],{"class":2599},"sbssI","userId",[235,2602,2537],{"class":245},[235,2604,392],{"class":245},[235,2606,2555],{"class":245},[235,2608,1010],{"class":261},[235,2610,2537],{"class":245},[235,2612,1125],{"class":245},[235,2614,2615],{"class":237,"line":355},[235,2616,2617],{"class":245},"    },\n",[235,2619,2620,2622,2624,2626,2628],{"class":237,"line":434},[235,2621,2531],{"class":245},[235,2623,2514],{"class":361},[235,2625,2537],{"class":245},[235,2627,392],{"class":245},[235,2629,431],{"class":245},[235,2631,2632,2634,2637,2639,2641],{"class":237,"line":442},[235,2633,2546],{"class":245},[235,2635,2636],{"class":395},"someMiddleFn",[235,2638,2537],{"class":245},[235,2640,392],{"class":245},[235,2642,431],{"class":245},[235,2644,2645,2648,2650,2652,2654,2656,2659,2661],{"class":237,"line":482},[235,2646,2647],{"class":245},"            \"",[235,2649,1707],{"class":2599},[235,2651,2537],{"class":245},[235,2653,392],{"class":245},[235,2655,2555],{"class":245},[235,2657,2658],{"class":261},"unknown-error",[235,2660,2537],{"class":245},[235,2662,1650],{"class":245},[235,2664,2665,2667,2669,2671,2673,2675,2678],{"class":237,"line":502},[235,2666,2647],{"class":245},[235,2668,563],{"class":2599},[235,2670,2537],{"class":245},[235,2672,392],{"class":245},[235,2674,2555],{"class":245},[235,2676,2677],{"class":261},"Unexpected error",[235,2679,2680],{"class":245},"\"\n",[235,2682,2683],{"class":237,"line":534},[235,2684,587],{"class":245},[235,2686,2687],{"class":237,"line":541},[235,2688,768],{"class":245},[235,2690,2691],{"class":237,"line":547},[235,2692,1125],{"class":245},[2694,2695,2696,2697,2699,2700,2702,2703,2705],"note",{},"The mion client abstracts this away — you simply access ",[205,2698,1415],{}," or ",[205,2701,1940],{}," from the result object. The internal ",[205,2704,660],{}," property is never sent to the client.",[215,2707,2709],{"id":2708},"multiple-error-types","Multiple Error Types",[201,2711,2712],{},"Routes and middleFns can return multiple error types. The client receives a discriminated union of all possible errors:",[226,2714,2715],{"className":228,"code":229,"language":230,"meta":231,"style":231},[205,2716,2717,2737,2761,2783,2803,2807,2861,2867,2895,2909,2933,2937,2941,2973,2977,2985,2999,3015,3039,3043,3047,3051,3055,3059,3063,3067,3071,3119,3123,3135,3139,3161,3181],{"__ignoreMap":231},[235,2718,2719,2721,2723,2725,2727,2729,2731,2733,2735],{"class":237,"line":238},[235,2720,242],{"class":241},[235,2722,246],{"class":245},[235,2724,207],{"class":249},[235,2726,252],{"class":245},[235,2728,255],{"class":241},[235,2730,258],{"class":245},[235,2732,262],{"class":261},[235,2734,265],{"class":245},[235,2736,268],{"class":245},[235,2738,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759],{"class":237,"line":271},[235,2740,242],{"class":241},[235,2742,246],{"class":245},[235,2744,278],{"class":249},[235,2746,281],{"class":245},[235,2748,284],{"class":249},[235,2750,252],{"class":245},[235,2752,255],{"class":241},[235,2754,258],{"class":245},[235,2756,293],{"class":261},[235,2758,265],{"class":245},[235,2760,268],{"class":245},[235,2762,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781],{"class":237,"line":300},[235,2764,242],{"class":241},[235,2766,305],{"class":241},[235,2768,246],{"class":245},[235,2770,310],{"class":249},[235,2772,252],{"class":245},[235,2774,255],{"class":241},[235,2776,258],{"class":245},[235,2778,319],{"class":261},[235,2780,265],{"class":245},[235,2782,268],{"class":245},[235,2784,2785,2787,2789,2791,2793,2795,2797,2799,2801],{"class":237,"line":326},[235,2786,242],{"class":241},[235,2788,246],{"class":245},[235,2790,333],{"class":249},[235,2792,252],{"class":245},[235,2794,255],{"class":241},[235,2796,258],{"class":245},[235,2798,319],{"class":261},[235,2800,265],{"class":245},[235,2802,268],{"class":245},[235,2804,2805],{"class":237,"line":348},[235,2806,352],{"emptyLinePlaceholder":351},[235,2808,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855,2857,2859],{"class":237,"line":355},[235,2810,358],{"class":241},[235,2812,362],{"class":361},[235,2814,365],{"class":249},[235,2816,368],{"class":245},[235,2818,284],{"class":371},[235,2820,374],{"class":249},[235,2822,377],{"class":361},[235,2824,380],{"class":245},[235,2826,384],{"class":383},[235,2828,281],{"class":245},[235,2830,389],{"class":383},[235,2832,392],{"class":245},[235,2834,396],{"class":395},[235,2836,399],{"class":245},[235,2838,402],{"class":395},[235,2840,405],{"class":245},[235,2842,310],{"class":395},[235,2844,410],{"class":245},[235,2846,413],{"class":395},[235,2848,405],{"class":245},[235,2850,265],{"class":245},[235,2852,420],{"class":261},[235,2854,265],{"class":245},[235,2856,425],{"class":245},[235,2858,428],{"class":361},[235,2860,431],{"class":245},[235,2862,2863,2865],{"class":237,"line":434},[235,2864,437],{"class":241},[235,2866,431],{"class":245},[235,2868,2869,2871,2873,2875,2877,2879,2881,2883,2885,2887,2889,2891,2893],{"class":237,"line":442},[235,2870,445],{"class":361},[235,2872,448],{"class":249},[235,2874,451],{"class":245},[235,2876,454],{"class":241},[235,2878,457],{"class":249},[235,2880,460],{"class":245},[235,2882,463],{"class":249},[235,2884,460],{"class":245},[235,2886,468],{"class":371},[235,2888,374],{"class":471},[235,2890,474],{"class":249},[235,2892,477],{"class":471},[235,2894,268],{"class":245},[235,2896,2897,2899,2901,2903,2905,2907],{"class":237,"line":482},[235,2898,485],{"class":241},[235,2900,380],{"class":471},[235,2902,490],{"class":245},[235,2904,493],{"class":249},[235,2906,496],{"class":471},[235,2908,499],{"class":245},[235,2910,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931],{"class":237,"line":502},[235,2912,505],{"class":361},[235,2914,508],{"class":249},[235,2916,451],{"class":245},[235,2918,513],{"class":245},[235,2920,516],{"class":261},[235,2922,519],{"class":245},[235,2924,474],{"class":249},[235,2926,252],{"class":245},[235,2928,526],{"class":261},[235,2930,529],{"class":245},[235,2932,268],{"class":245},[235,2934,2935],{"class":237,"line":534},[235,2936,538],{"class":537},[235,2938,2939],{"class":237,"line":541},[235,2940,544],{"class":537},[235,2942,2943,2945,2947,2949,2951,2953,2955,2957,2959,2961,2963,2965,2967,2969,2971],{"class":237,"line":547},[235,2944,550],{"class":241},[235,2946,553],{"class":245},[235,2948,413],{"class":371},[235,2950,374],{"class":471},[235,2952,560],{"class":245},[235,2954,563],{"class":249},[235,2956,281],{"class":245},[235,2958,305],{"class":471},[235,2960,392],{"class":245},[235,2962,258],{"class":245},[235,2964,420],{"class":261},[235,2966,265],{"class":245},[235,2968,252],{"class":245},[235,2970,477],{"class":471},[235,2972,268],{"class":245},[235,2974,2975],{"class":237,"line":584},[235,2976,587],{"class":245},[235,2978,2979,2981,2983],{"class":237,"line":590},[235,2980,593],{"class":241},[235,2982,448],{"class":249},[235,2984,268],{"class":245},[235,2986,2987,2989,2991,2993,2995,2997],{"class":237,"line":600},[235,2988,603],{"class":245},[235,2990,606],{"class":241},[235,2992,380],{"class":471},[235,2994,611],{"class":249},[235,2996,496],{"class":471},[235,2998,499],{"class":245},[235,3000,3001,3003,3005,3007,3009,3011,3013],{"class":237,"line":618},[235,3002,445],{"class":361},[235,3004,508],{"class":249},[235,3006,451],{"class":245},[235,3008,513],{"class":245},[235,3010,629],{"class":261},[235,3012,529],{"class":245},[235,3014,268],{"class":245},[235,3016,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037],{"class":237,"line":636},[235,3018,445],{"class":361},[235,3020,641],{"class":249},[235,3022,451],{"class":245},[235,3024,380],{"class":471},[235,3026,611],{"class":249},[235,3028,650],{"class":241},[235,3030,653],{"class":395},[235,3032,477],{"class":471},[235,3034,460],{"class":245},[235,3036,660],{"class":249},[235,3038,268],{"class":245},[235,3040,3041],{"class":237,"line":665},[235,3042,668],{"class":537},[235,3044,3045],{"class":237,"line":671},[235,3046,674],{"class":537},[235,3048,3049],{"class":237,"line":677},[235,3050,680],{"class":537},[235,3052,3053],{"class":237,"line":683},[235,3054,686],{"class":537},[235,3056,3057],{"class":237,"line":689},[235,3058,692],{"class":537},[235,3060,3061],{"class":237,"line":695},[235,3062,680],{"class":537},[235,3064,3065],{"class":237,"line":700},[235,3066,703],{"class":537},[235,3068,3069],{"class":237,"line":706},[235,3070,709],{"class":537},[235,3072,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117],{"class":237,"line":712},[235,3074,715],{"class":241},[235,3076,553],{"class":245},[235,3078,413],{"class":371},[235,3080,374],{"class":471},[235,3082,560],{"class":245},[235,3084,563],{"class":249},[235,3086,281],{"class":245},[235,3088,641],{"class":249},[235,3090,281],{"class":245},[235,3092,734],{"class":471},[235,3094,392],{"class":245},[235,3096,739],{"class":249},[235,3098,650],{"class":241},[235,3100,653],{"class":395},[235,3102,281],{"class":245},[235,3104,305],{"class":471},[235,3106,392],{"class":245},[235,3108,258],{"class":245},[235,3110,754],{"class":261},[235,3112,265],{"class":245},[235,3114,252],{"class":245},[235,3116,477],{"class":471},[235,3118,268],{"class":245},[235,3120,3121],{"class":237,"line":765},[235,3122,768],{"class":245},[235,3124,3125,3127,3129,3131,3133],{"class":237,"line":771},[235,3126,252],{"class":245},[235,3128,496],{"class":249},[235,3130,778],{"class":241},[235,3132,781],{"class":395},[235,3134,268],{"class":245},[235,3136,3137],{"class":237,"line":786},[235,3138,352],{"emptyLinePlaceholder":351},[235,3140,3141,3143,3145,3147,3149,3151,3153,3155,3157,3159],{"class":237,"line":791},[235,3142,358],{"class":241},[235,3144,362],{"class":361},[235,3146,798],{"class":249},[235,3148,368],{"class":245},[235,3150,284],{"class":371},[235,3152,374],{"class":249},[235,3154,807],{"class":245},[235,3156,810],{"class":395},[235,3158,428],{"class":361},[235,3160,431],{"class":245},[235,3162,3163,3165,3167,3169,3171,3173,3175,3177,3179],{"class":237,"line":817},[235,3164,820],{"class":241},[235,3166,553],{"class":245},[235,3168,653],{"class":371},[235,3170,374],{"class":471},[235,3172,265],{"class":245},[235,3174,831],{"class":261},[235,3176,265],{"class":245},[235,3178,477],{"class":471},[235,3180,268],{"class":245},[235,3182,3183,3185,3187,3189,3191],{"class":237,"line":840},[235,3184,252],{"class":245},[235,3186,496],{"class":249},[235,3188,778],{"class":241},[235,3190,781],{"class":395},[235,3192,268],{"class":245},[215,3194,3196],{"id":3195},"run-on-error-middlefns","Run On Error MiddleFns",[201,3198,3199,3200,3203],{},"MiddleFns with ",[205,3201,3202],{},"runOnError: true"," execute even when previous middleFns or routes return\u002Fthrow errors. Useful for logging or cleanup:",[226,3205,3207],{"className":228,"code":3206,"language":230,"meta":231,"style":231},"import {CallContext, middleFn, Routes} from '@mionjs\u002Frouter';\nimport {myApp} from '.\u002Ffull-example.app.ts';\n\nconst routes = {\n    \u002F\u002F using the middleFn function to define a middleFn\n    logger: middleFn(\n        async (ctx: CallContext): Promise\u003Cvoid> => {\n            const hasErrors = ctx.request.thrownErrors && Object.keys(ctx.request.thrownErrors).length > 0;\n            if (hasErrors) await myApp.cloudLogs.error(ctx.path, ctx.request.thrownErrors);\n            else myApp.cloudLogs.log(ctx.path, ctx.shared.me.name);\n        },\n        \u002F\u002F ensures logger is executed even if there are errors in the route or other middleFns\n        {runOnError: true}\n    ),\n    \u002F\u002F ... other routes and middleFns\n} satisfies Routes;\n",[205,3208,3209,3240,3260,3264,3275,3280,3292,3321,3381,3432,3477,3481,3486,3502,3509,3514],{"__ignoreMap":231},[235,3210,3211,3213,3215,3218,3220,3223,3225,3228,3230,3232,3234,3236,3238],{"class":237,"line":238},[235,3212,242],{"class":241},[235,3214,246],{"class":245},[235,3216,3217],{"class":249},"CallContext",[235,3219,281],{"class":245},[235,3221,3222],{"class":249}," middleFn",[235,3224,281],{"class":245},[235,3226,3227],{"class":249}," Routes",[235,3229,252],{"class":245},[235,3231,255],{"class":241},[235,3233,258],{"class":245},[235,3235,293],{"class":261},[235,3237,265],{"class":245},[235,3239,268],{"class":245},[235,3241,3242,3244,3246,3248,3250,3252,3254,3256,3258],{"class":237,"line":271},[235,3243,242],{"class":241},[235,3245,246],{"class":245},[235,3247,333],{"class":249},[235,3249,252],{"class":245},[235,3251,255],{"class":241},[235,3253,258],{"class":245},[235,3255,319],{"class":261},[235,3257,265],{"class":245},[235,3259,268],{"class":245},[235,3261,3262],{"class":237,"line":300},[235,3263,352],{"emptyLinePlaceholder":351},[235,3265,3266,3268,3271,3273],{"class":237,"line":326},[235,3267,913],{"class":361},[235,3269,3270],{"class":249}," routes ",[235,3272,368],{"class":245},[235,3274,431],{"class":245},[235,3276,3277],{"class":237,"line":348},[235,3278,3279],{"class":537},"    \u002F\u002F using the middleFn function to define a middleFn\n",[235,3281,3282,3285,3287,3289],{"class":237,"line":355},[235,3283,3284],{"class":471},"    logger",[235,3286,392],{"class":245},[235,3288,3222],{"class":371},[235,3290,3291],{"class":249},"(\n",[235,3293,3294,3297,3299,3301,3303,3306,3308,3310,3312,3315,3317,3319],{"class":237,"line":434},[235,3295,3296],{"class":361},"        async",[235,3298,380],{"class":245},[235,3300,384],{"class":383},[235,3302,392],{"class":245},[235,3304,3305],{"class":395}," CallContext",[235,3307,399],{"class":245},[235,3309,402],{"class":395},[235,3311,405],{"class":245},[235,3313,3314],{"class":395},"void",[235,3316,937],{"class":245},[235,3318,428],{"class":361},[235,3320,431],{"class":245},[235,3322,3323,3325,3328,3330,3333,3335,3338,3340,3343,3346,3349,3351,3354,3356,3358,3360,3362,3364,3366,3368,3370,3373,3376,3379],{"class":237,"line":442},[235,3324,505],{"class":361},[235,3326,3327],{"class":249}," hasErrors",[235,3329,451],{"class":245},[235,3331,3332],{"class":249}," ctx",[235,3334,460],{"class":245},[235,3336,3337],{"class":249},"request",[235,3339,460],{"class":245},[235,3341,3342],{"class":249},"thrownErrors",[235,3344,3345],{"class":245}," &&",[235,3347,3348],{"class":249}," Object",[235,3350,460],{"class":245},[235,3352,3353],{"class":371},"keys",[235,3355,374],{"class":471},[235,3357,384],{"class":249},[235,3359,460],{"class":245},[235,3361,3337],{"class":249},[235,3363,460],{"class":245},[235,3365,3342],{"class":249},[235,3367,477],{"class":471},[235,3369,460],{"class":245},[235,3371,3372],{"class":249},"length",[235,3374,3375],{"class":245}," >",[235,3377,3378],{"class":2599}," 0",[235,3380,268],{"class":245},[235,3382,3383,3386,3388,3391,3393,3396,3398,3400,3403,3405,3407,3409,3411,3413,3416,3418,3420,3422,3424,3426,3428,3430],{"class":237,"line":482},[235,3384,3385],{"class":241},"            if",[235,3387,380],{"class":471},[235,3389,3390],{"class":249},"hasErrors",[235,3392,496],{"class":471},[235,3394,3395],{"class":241},"await",[235,3397,457],{"class":249},[235,3399,460],{"class":245},[235,3401,3402],{"class":249},"cloudLogs",[235,3404,460],{"class":245},[235,3406,1415],{"class":371},[235,3408,374],{"class":471},[235,3410,384],{"class":249},[235,3412,460],{"class":245},[235,3414,3415],{"class":249},"path",[235,3417,281],{"class":245},[235,3419,3332],{"class":249},[235,3421,460],{"class":245},[235,3423,3337],{"class":249},[235,3425,460],{"class":245},[235,3427,3342],{"class":249},[235,3429,477],{"class":471},[235,3431,268],{"class":245},[235,3433,3434,3437,3439,3441,3443,3445,3447,3449,3451,3453,3455,3457,3459,3461,3464,3466,3469,3471,3473,3475],{"class":237,"line":502},[235,3435,3436],{"class":241},"            else",[235,3438,457],{"class":249},[235,3440,460],{"class":245},[235,3442,3402],{"class":249},[235,3444,460],{"class":245},[235,3446,1053],{"class":371},[235,3448,374],{"class":471},[235,3450,384],{"class":249},[235,3452,460],{"class":245},[235,3454,3415],{"class":249},[235,3456,281],{"class":245},[235,3458,3332],{"class":249},[235,3460,460],{"class":245},[235,3462,3463],{"class":249},"shared",[235,3465,460],{"class":245},[235,3467,3468],{"class":249},"me",[235,3470,460],{"class":245},[235,3472,1116],{"class":249},[235,3474,477],{"class":471},[235,3476,268],{"class":245},[235,3478,3479],{"class":237,"line":534},[235,3480,1656],{"class":245},[235,3482,3483],{"class":237,"line":541},[235,3484,3485],{"class":537},"        \u002F\u002F ensures logger is executed even if there are errors in the route or other middleFns\n",[235,3487,3488,3491,3494,3496,3500],{"class":237,"line":547},[235,3489,3490],{"class":245},"        {",[235,3492,3493],{"class":471},"runOnError",[235,3495,392],{"class":245},[235,3497,3499],{"class":3498},"sfNiH"," true",[235,3501,1125],{"class":245},[235,3503,3504,3507],{"class":237,"line":584},[235,3505,3506],{"class":249},"    )",[235,3508,1650],{"class":245},[235,3510,3511],{"class":237,"line":590},[235,3512,3513],{"class":537},"    \u002F\u002F ... other routes and middleFns\n",[235,3515,3516,3518,3521,3523],{"class":237,"line":600},[235,3517,252],{"class":245},[235,3519,3520],{"class":241}," satisfies",[235,3522,3227],{"class":395},[235,3524,268],{"class":245},[3526,3527],"spacer",{},[215,3529,3531],{"id":3530},"type-reference","Type Reference",[3533,3534,207],"h3",{"id":3535},"rpcerror",[226,3537,3539],{"className":228,"code":3538,"language":230,"meta":231,"style":231},"export class RpcError\u003CErrType extends string, ErrData = any>\n    extends TypedError\u003CErrType>\n    implements RpcErrorParams\u003CErrType, ErrData>\n{\n    \u002F\u002F Note: name is NOT declared as a property here\n    \u002F\u002F It is inherited from Error class and assigned in constructor\n    \u002F\u002F This prevents it from being included in type reflection for JIT validation\n    \u002F**\n     * id of the error, ideally each error should unique identifiable\n     * * if RouterOptions.autoGenerateErrorId is set to true and id with timestamp+uuid will be generated\n     * *\u002F\n    public readonly id?: number | string;\n    \u002F** the message that will be returned in the response *\u002F\n    public readonly publicMessage: string;\n    \u002F** options data related to the error, ie validation data, must be json serializable *\u002F\n    public readonly errorData?: Readonly\u003CErrData>;\n    \u002F** optional http status code *\u002F\n    statusCode?: number;\n\n    constructor({message, publicMessage, originalError, errorData, type, id, statusCode}: AnyErrorParams\u003CErrType, ErrData>) {\n        const originalMessage = message || originalError?.message || publicMessage || '';\n\n        \u002F\u002F Call parent TypedError constructor\n        super({\n            message: originalMessage,\n            originalError,\n            type,\n        });\n\n        const {autoGenerateErrorId} = options;\n        this.id = id ?? (autoGenerateErrorId ? randomUUID_V7() : undefined);\n        this.publicMessage = publicMessage || '';\n        this.errorData = errorData;\n        this.statusCode = statusCode;\n\n        \u002F\u002F Override name to be non-enumerable\n        Object.defineProperty(this, 'name', {\n            value: 'RpcError',\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        });\n\n        Object.setPrototypeOf(this, RpcError.prototype);\n    }\n}\n",[205,3540,3541,3572,3586,3604,3608,3613,3618,3623,3628,3633,3638,3643,3665,3670,3684,3689,3711,3716,3727,3731,3785,3816,3820,3825,3834,3845,3852,3859,3868,3872,3890,3926,3942,3954,3967,3971,3976,4001,4016,4027,4039,4050,4058,4062,4086,4090],{"__ignoreMap":231},[235,3542,3543,3545,3548,3550,3552,3555,3558,3560,3562,3565,3567,3569],{"class":237,"line":238},[235,3544,358],{"class":241},[235,3546,3547],{"class":361}," class",[235,3549,413],{"class":395},[235,3551,405],{"class":245},[235,3553,3554],{"class":395},"ErrType",[235,3556,3557],{"class":361}," extends",[235,3559,396],{"class":395},[235,3561,281],{"class":245},[235,3563,3564],{"class":395}," ErrData",[235,3566,451],{"class":245},[235,3568,1915],{"class":395},[235,3570,3571],{"class":245},">\n",[235,3573,3574,3577,3580,3582,3584],{"class":237,"line":271},[235,3575,3576],{"class":361},"    extends",[235,3578,3579],{"class":395}," TypedError",[235,3581,405],{"class":245},[235,3583,3554],{"class":395},[235,3585,3571],{"class":245},[235,3587,3588,3591,3594,3596,3598,3600,3602],{"class":237,"line":300},[235,3589,3590],{"class":361},"    implements",[235,3592,3593],{"class":395}," RpcErrorParams",[235,3595,405],{"class":245},[235,3597,3554],{"class":395},[235,3599,281],{"class":245},[235,3601,3564],{"class":395},[235,3603,3571],{"class":245},[235,3605,3606],{"class":237,"line":326},[235,3607,499],{"class":245},[235,3609,3610],{"class":237,"line":348},[235,3611,3612],{"class":537},"    \u002F\u002F Note: name is NOT declared as a property here\n",[235,3614,3615],{"class":237,"line":355},[235,3616,3617],{"class":537},"    \u002F\u002F It is inherited from Error class and assigned in constructor\n",[235,3619,3620],{"class":237,"line":434},[235,3621,3622],{"class":537},"    \u002F\u002F This prevents it from being included in type reflection for JIT validation\n",[235,3624,3625],{"class":237,"line":442},[235,3626,3627],{"class":537},"    \u002F**\n",[235,3629,3630],{"class":237,"line":482},[235,3631,3632],{"class":537},"     * id of the error, ideally each error should unique identifiable\n",[235,3634,3635],{"class":237,"line":502},[235,3636,3637],{"class":537},"     * * if RouterOptions.autoGenerateErrorId is set to true and id with timestamp+uuid will be generated\n",[235,3639,3640],{"class":237,"line":534},[235,3641,3642],{"class":537},"     * *\u002F\n",[235,3644,3645,3648,3651,3653,3656,3659,3661,3663],{"class":237,"line":541},[235,3646,3647],{"class":361},"    public",[235,3649,3650],{"class":361}," readonly",[235,3652,389],{"class":471},[235,3654,3655],{"class":245},"?:",[235,3657,3658],{"class":395}," number",[235,3660,410],{"class":245},[235,3662,396],{"class":395},[235,3664,268],{"class":245},[235,3666,3667],{"class":237,"line":547},[235,3668,3669],{"class":537},"    \u002F** the message that will be returned in the response *\u002F\n",[235,3671,3672,3674,3676,3678,3680,3682],{"class":237,"line":584},[235,3673,3647],{"class":361},[235,3675,3650],{"class":361},[235,3677,508],{"class":471},[235,3679,392],{"class":245},[235,3681,396],{"class":395},[235,3683,268],{"class":245},[235,3685,3686],{"class":237,"line":590},[235,3687,3688],{"class":537},"    \u002F** options data related to the error, ie validation data, must be json serializable *\u002F\n",[235,3690,3691,3693,3695,3698,3700,3703,3705,3708],{"class":237,"line":600},[235,3692,3647],{"class":361},[235,3694,3650],{"class":361},[235,3696,3697],{"class":471}," errorData",[235,3699,3655],{"class":245},[235,3701,3702],{"class":395}," Readonly",[235,3704,405],{"class":245},[235,3706,3707],{"class":395},"ErrData",[235,3709,3710],{"class":245},">;\n",[235,3712,3713],{"class":237,"line":618},[235,3714,3715],{"class":537},"    \u002F** optional http status code *\u002F\n",[235,3717,3718,3721,3723,3725],{"class":237,"line":636},[235,3719,3720],{"class":471},"    statusCode",[235,3722,3655],{"class":245},[235,3724,3658],{"class":395},[235,3726,268],{"class":245},[235,3728,3729],{"class":237,"line":665},[235,3730,352],{"emptyLinePlaceholder":351},[235,3732,3733,3736,3739,3741,3743,3745,3747,3749,3751,3753,3755,3757,3759,3761,3763,3766,3769,3772,3774,3776,3778,3780,3783],{"class":237,"line":671},[235,3734,3735],{"class":361},"    constructor",[235,3737,3738],{"class":245},"({",[235,3740,660],{"class":383},[235,3742,281],{"class":245},[235,3744,508],{"class":383},[235,3746,281],{"class":245},[235,3748,734],{"class":383},[235,3750,281],{"class":245},[235,3752,3697],{"class":383},[235,3754,281],{"class":245},[235,3756,305],{"class":383},[235,3758,281],{"class":245},[235,3760,389],{"class":383},[235,3762,281],{"class":245},[235,3764,3765],{"class":383}," statusCode",[235,3767,3768],{"class":245},"}:",[235,3770,3771],{"class":395}," AnyErrorParams",[235,3773,405],{"class":245},[235,3775,3554],{"class":395},[235,3777,281],{"class":245},[235,3779,3564],{"class":395},[235,3781,3782],{"class":245},">)",[235,3784,431],{"class":245},[235,3786,3787,3789,3792,3794,3796,3799,3801,3803,3805,3807,3809,3811,3814],{"class":237,"line":677},[235,3788,445],{"class":361},[235,3790,3791],{"class":249}," originalMessage",[235,3793,451],{"class":245},[235,3795,641],{"class":249},[235,3797,3798],{"class":245}," ||",[235,3800,734],{"class":249},[235,3802,1113],{"class":245},[235,3804,660],{"class":249},[235,3806,3798],{"class":245},[235,3808,508],{"class":249},[235,3810,3798],{"class":245},[235,3812,3813],{"class":245}," ''",[235,3815,268],{"class":245},[235,3817,3818],{"class":237,"line":683},[235,3819,352],{"emptyLinePlaceholder":351},[235,3821,3822],{"class":237,"line":689},[235,3823,3824],{"class":537},"        \u002F\u002F Call parent TypedError constructor\n",[235,3826,3827,3830,3832],{"class":237,"line":695},[235,3828,3829],{"class":249},"        super",[235,3831,374],{"class":471},[235,3833,499],{"class":245},[235,3835,3836,3839,3841,3843],{"class":237,"line":700},[235,3837,3838],{"class":471},"            message",[235,3840,392],{"class":245},[235,3842,3791],{"class":249},[235,3844,1650],{"class":245},[235,3846,3847,3850],{"class":237,"line":706},[235,3848,3849],{"class":249},"            originalError",[235,3851,1650],{"class":245},[235,3853,3854,3857],{"class":237,"line":712},[235,3855,3856],{"class":249},"            type",[235,3858,1650],{"class":245},[235,3860,3861,3864,3866],{"class":237,"line":765},[235,3862,3863],{"class":245},"        }",[235,3865,477],{"class":471},[235,3867,268],{"class":245},[235,3869,3870],{"class":237,"line":771},[235,3871,352],{"emptyLinePlaceholder":351},[235,3873,3874,3876,3878,3881,3883,3885,3888],{"class":237,"line":786},[235,3875,445],{"class":361},[235,3877,246],{"class":245},[235,3879,3880],{"class":249},"autoGenerateErrorId",[235,3882,252],{"class":245},[235,3884,451],{"class":245},[235,3886,3887],{"class":249}," options",[235,3889,268],{"class":245},[235,3891,3892,3895,3897,3899,3901,3904,3906,3908,3911,3914,3917,3919,3922,3924],{"class":237,"line":791},[235,3893,3894],{"class":245},"        this.",[235,3896,474],{"class":249},[235,3898,451],{"class":245},[235,3900,389],{"class":249},[235,3902,3903],{"class":245}," ??",[235,3905,380],{"class":471},[235,3907,3880],{"class":249},[235,3909,3910],{"class":245}," ?",[235,3912,3913],{"class":371}," randomUUID_V7",[235,3915,3916],{"class":471},"() ",[235,3918,392],{"class":245},[235,3920,3921],{"class":245}," undefined",[235,3923,477],{"class":471},[235,3925,268],{"class":245},[235,3927,3928,3930,3932,3934,3936,3938,3940],{"class":237,"line":817},[235,3929,3894],{"class":245},[235,3931,563],{"class":249},[235,3933,451],{"class":245},[235,3935,508],{"class":249},[235,3937,3798],{"class":245},[235,3939,3813],{"class":245},[235,3941,268],{"class":245},[235,3943,3944,3946,3948,3950,3952],{"class":237,"line":840},[235,3945,3894],{"class":245},[235,3947,2588],{"class":249},[235,3949,451],{"class":245},[235,3951,3697],{"class":249},[235,3953,268],{"class":245},[235,3955,3956,3958,3961,3963,3965],{"class":237,"line":1653},[235,3957,3894],{"class":245},[235,3959,3960],{"class":249},"statusCode",[235,3962,451],{"class":245},[235,3964,3765],{"class":249},[235,3966,268],{"class":245},[235,3968,3969],{"class":237,"line":1659},[235,3970,352],{"emptyLinePlaceholder":351},[235,3972,3973],{"class":237,"line":1668},[235,3974,3975],{"class":537},"        \u002F\u002F Override name to be non-enumerable\n",[235,3977,3978,3981,3983,3986,3988,3991,3993,3995,3997,3999],{"class":237,"line":1673},[235,3979,3980],{"class":249},"        Object",[235,3982,460],{"class":245},[235,3984,3985],{"class":371},"defineProperty",[235,3987,374],{"class":471},[235,3989,3990],{"class":245},"this,",[235,3992,258],{"class":245},[235,3994,1116],{"class":261},[235,3996,265],{"class":245},[235,3998,281],{"class":245},[235,4000,431],{"class":245},[235,4002,4003,4006,4008,4010,4012,4014],{"class":237,"line":1683},[235,4004,4005],{"class":471},"            value",[235,4007,392],{"class":245},[235,4009,258],{"class":245},[235,4011,207],{"class":261},[235,4013,265],{"class":245},[235,4015,1650],{"class":245},[235,4017,4018,4021,4023,4025],{"class":237,"line":1714},[235,4019,4020],{"class":471},"            writable",[235,4022,392],{"class":245},[235,4024,3499],{"class":3498},[235,4026,1650],{"class":245},[235,4028,4029,4032,4034,4037],{"class":237,"line":1723},[235,4030,4031],{"class":471},"            enumerable",[235,4033,392],{"class":245},[235,4035,4036],{"class":3498}," false",[235,4038,1650],{"class":245},[235,4040,4041,4044,4046,4048],{"class":237,"line":1742},[235,4042,4043],{"class":471},"            configurable",[235,4045,392],{"class":245},[235,4047,3499],{"class":3498},[235,4049,1650],{"class":245},[235,4051,4052,4054,4056],{"class":237,"line":1747},[235,4053,3863],{"class":245},[235,4055,477],{"class":471},[235,4057,268],{"class":245},[235,4059,4060],{"class":237,"line":1752},[235,4061,352],{"emptyLinePlaceholder":351},[235,4063,4064,4066,4068,4071,4073,4075,4077,4079,4082,4084],{"class":237,"line":1758},[235,4065,3980],{"class":249},[235,4067,460],{"class":245},[235,4069,4070],{"class":371},"setPrototypeOf",[235,4072,374],{"class":471},[235,4074,3990],{"class":245},[235,4076,413],{"class":395},[235,4078,460],{"class":245},[235,4080,4081],{"class":249},"prototype",[235,4083,477],{"class":471},[235,4085,268],{"class":245},[235,4087,4088],{"class":237,"line":1773},[235,4089,768],{"class":245},[235,4091,4092],{"class":237,"line":1807},[235,4093,1125],{"class":245},[4095,4096,4097],"style",{},"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 .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 pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}","Learn how to handle errors in mion APIs with strongly typed error returns.","md",null,{"toc":26},{"title":50,"description":4098},"pAtvCXfEZbM6nP6S4ALzw7TnrgDeY254G4uncOcva8M",[4105,4107],{"title":46,"path":47,"stem":48,"description":4106,"children":-1},"Understanding mion's request and response objects.",{"title":54,"path":55,"stem":56,"description":4108,"children":-1},"Automatic validation in mion using RunTypes.",1778674527206]