[{"data":1,"prerenderedAt":3130},["ShallowReactive",2],{"navigation_docs":3,"-rpc-client-error-handling":399},[4,162,346],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":24},"RPC","icon-park-outline:lightning","\u002Frpc","01.rpc",[10,25,63,77,102,136],{"title":11,"icon":12,"redirect":7,"path":13,"stem":14,"children":15,"page":24},"Introduction","icon-park-outline:home","\u002Frpc\u002Fintroduction","01.rpc\u002F01.introduction",[16,20],{"title":17,"path":18,"stem":19},"Quick Start","\u002Frpc\u002Fintroduction\u002Fquick-start","01.rpc\u002F01.introduction\u002F02.quick-start",{"title":21,"path":22,"stem":23},"Manual Install","\u002Frpc\u002Fintroduction\u002Fmanual-install","01.rpc\u002F01.introduction\u002F03.manual-install",false,{"title":26,"icon":27,"path":28,"stem":29,"children":30,"page":24},"Server","icon-park-outline:server","\u002Frpc\u002Fserver","01.rpc\u002F02.server",[31,35,39,43,47,51,55,59],{"title":32,"path":33,"stem":34},"Routes","\u002Frpc\u002Fserver\u002Froutes","01.rpc\u002F02.server\u002F01.routes",{"title":36,"path":37,"stem":38},"Middleware","\u002Frpc\u002Fserver\u002Fmiddleware","01.rpc\u002F02.server\u002F02.middleware",{"title":40,"path":41,"stem":42},"Call Context","\u002Frpc\u002Fserver\u002Fcall-context","01.rpc\u002F02.server\u002F03.call-context",{"title":44,"path":45,"stem":46},"Headers","\u002Frpc\u002Fserver\u002Fheaders","01.rpc\u002F02.server\u002F04.headers",{"title":48,"path":49,"stem":50},"Error Handling","\u002Frpc\u002Fserver\u002Ferror-handling","01.rpc\u002F02.server\u002F05.error-handling",{"title":52,"path":53,"stem":54},"Validation","\u002Frpc\u002Fserver\u002Fvalidation","01.rpc\u002F02.server\u002F06.validation",{"title":56,"path":57,"stem":58},"JSON Round Trip","\u002Frpc\u002Fserver\u002Fjson-round-trip","01.rpc\u002F02.server\u002F07.json-round-trip",{"title":60,"path":61,"stem":62},"Drizzle Tables","\u002Frpc\u002Fserver\u002Fdrizzle-tables","01.rpc\u002F02.server\u002F08.drizzle-tables",{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":24},"Middlewares","icon-park-outline:link-one","\u002Frpc\u002Fmiddlewares","01.rpc\u002F03.middlewares",[69,73],{"title":70,"path":71,"stem":72},"fetchMetadata","\u002Frpc\u002Fmiddlewares\u002Ffetch-metadata","01.rpc\u002F03.middlewares\u002F01.fetch-metadata",{"title":74,"path":75,"stem":76},"syncRoutes","\u002Frpc\u002Fmiddlewares\u002Fsync-routes","01.rpc\u002F03.middlewares\u002F02.sync-routes",{"title":78,"icon":79,"path":80,"stem":81,"children":82,"page":24},"Client","icon-park-outline:computer","\u002Frpc\u002Fclient","01.rpc\u002F04.client",[83,87,91,94,98],{"title":84,"path":85,"stem":86},"Client Overview","\u002Frpc\u002Fclient\u002Fclient-overview","01.rpc\u002F04.client\u002F00.client-overview",{"title":88,"path":89,"stem":90},"Client Middleware","\u002Frpc\u002Fclient\u002Fclient-middleware","01.rpc\u002F04.client\u002F01.client-middleware",{"title":48,"path":92,"stem":93},"\u002Frpc\u002Fclient\u002Ferror-handling","01.rpc\u002F04.client\u002F02.error-handling",{"title":95,"path":96,"stem":97},"Batch Requests","\u002Frpc\u002Fclient\u002Fbatch","01.rpc\u002F04.client\u002F03.batch",{"title":99,"path":100,"stem":101},"Cancellation & Timeouts","\u002Frpc\u002Fclient\u002Fcancellation-timeouts","01.rpc\u002F04.client\u002F04.cancellation-timeouts",{"title":103,"redirect":104,"icon":105,"path":106,"stem":107,"children":108,"page":24},"Platforms","\u002Frpc\u002Fplatforms\u002Fnode-js","icon-park-outline:play","\u002Frpc\u002Fplatforms","01.rpc\u002F06.platforms",[109,112,116,120,124,128,132],{"title":110,"path":104,"stem":111},"Node.js","01.rpc\u002F06.platforms\u002F01.node-js",{"title":113,"path":114,"stem":115},"Bun","\u002Frpc\u002Fplatforms\u002Fbun","01.rpc\u002F06.platforms\u002F02.bun",{"title":117,"path":118,"stem":119},"AWS Lambda","\u002Frpc\u002Fplatforms\u002Faws-lambda","01.rpc\u002F06.platforms\u002F03.aws-lambda",{"title":121,"path":122,"stem":123},"Google Cloud Functions","\u002Frpc\u002Fplatforms\u002Fgoogle-cloud-functions","01.rpc\u002F06.platforms\u002F04.google-cloud-functions",{"title":125,"path":126,"stem":127},"Cloudflare Workers","\u002Frpc\u002Fplatforms\u002Fcloudflare","01.rpc\u002F06.platforms\u002F05.cloudflare",{"title":129,"path":130,"stem":131},"Vercel","\u002Frpc\u002Fplatforms\u002Fvercel","01.rpc\u002F06.platforms\u002F06.vercel",{"title":133,"path":134,"stem":135},"uWebSockets.js","\u002Frpc\u002Fplatforms\u002Fuwebsockets","01.rpc\u002F06.platforms\u002F07.uwebsockets",{"title":137,"icon":138,"path":139,"stem":140,"children":141,"page":24},"Devtools","icon-park-outline:tool","\u002Frpc\u002Fdevtools","01.rpc\u002F07.devtools",[142,146,150,154,158],{"title":143,"path":144,"stem":145},"Linter","\u002Frpc\u002Fdevtools\u002Flinter","01.rpc\u002F07.devtools\u002F01.linter",{"title":147,"path":148,"stem":149},"Vite","\u002Frpc\u002Fdevtools\u002Fvite","01.rpc\u002F07.devtools\u002F02.vite",{"title":151,"path":152,"stem":153},"Next.js","\u002Frpc\u002Fdevtools\u002Fnextjs","01.rpc\u002F07.devtools\u002F03.nextjs",{"title":155,"path":156,"stem":157},"CLI","\u002Frpc\u002Fdevtools\u002Fcli","01.rpc\u002F07.devtools\u002F04.cli",{"title":159,"path":160,"stem":161},"API Types","\u002Frpc\u002Fdevtools\u002Fapi-types","01.rpc\u002F07.devtools\u002F05.api-types",{"title":163,"icon":164,"path":165,"stem":166,"children":167,"page":24},"RunTypes","i-lucide-braces","\u002Fruntypes","02.runtypes",[168,184,224,254,268,290,332],{"title":11,"icon":169,"redirect":165,"path":170,"stem":171,"children":172,"page":24},"i-lucide-rocket","\u002Fruntypes\u002Fintroduction","02.runtypes\u002F01.introduction",[173,177,180],{"title":174,"path":175,"stem":176},"Built on typescript-go","\u002Fruntypes\u002Fintroduction\u002Fbuilt-on-typescript-go","02.runtypes\u002F01.introduction\u002F02.built-on-typescript-go",{"title":17,"path":178,"stem":179},"\u002Fruntypes\u002Fintroduction\u002Fquick-start","02.runtypes\u002F01.introduction\u002F03.quick-start",{"title":181,"path":182,"stem":183},"Configuration","\u002Fruntypes\u002Fintroduction\u002Fconfiguration","02.runtypes\u002F01.introduction\u002F04.configuration",{"title":185,"icon":186,"redirect":187,"path":188,"stem":189,"children":190,"page":24},"Guide","i-lucide-book-open","\u002Fruntypes\u002Fguide\u002Ftype-builders","\u002Fruntypes\u002Fguide","02.runtypes\u002F02.guide",[191,194,198,201,204,208,212,216,220],{"title":192,"path":187,"stem":193},"Types vs Type Builders","02.runtypes\u002F02.guide\u002F01.type-builders",{"title":195,"path":196,"stem":197},"Reflection","\u002Fruntypes\u002Fguide\u002Freflection","02.runtypes\u002F02.guide\u002F02.reflection",{"title":52,"path":199,"stem":200},"\u002Fruntypes\u002Fguide\u002Fvalidation","02.runtypes\u002F02.guide\u002F03.validation",{"title":56,"path":202,"stem":203},"\u002Fruntypes\u002Fguide\u002Fjson-round-trip","02.runtypes\u002F02.guide\u002F04.json-round-trip",{"title":205,"path":206,"stem":207},"Data Mocking","\u002Fruntypes\u002Fguide\u002Fmocking","02.runtypes\u002F02.guide\u002F07.mocking",{"title":209,"path":210,"stem":211},"JSON Schemas","\u002Fruntypes\u002Fguide\u002Fjson-schemas","02.runtypes\u002F02.guide\u002F08.json-schemas",{"title":213,"path":214,"stem":215},"Pure Functions","\u002Fruntypes\u002Fguide\u002Fpure-functions","02.runtypes\u002F02.guide\u002F09.pure-functions",{"title":217,"path":218,"stem":219},"Compiler Markers","\u002Fruntypes\u002Fguide\u002Fcompiler-markers","02.runtypes\u002F02.guide\u002F10.compiler-markers",{"title":221,"path":222,"stem":223},"All Compiled Functions","\u002Fruntypes\u002Fguide\u002Fall-compiled-functions","02.runtypes\u002F02.guide\u002F11.all-compiled-functions",{"title":225,"icon":226,"redirect":227,"path":228,"stem":229,"children":230,"page":24},"Type Formats","i-lucide-shapes","\u002Fruntypes\u002Ftype-formats\u002Foverview","\u002Fruntypes\u002Ftype-formats","02.runtypes\u002F03.type-formats",[231,234,238,242,246,250],{"title":232,"path":227,"stem":233},"Overview","02.runtypes\u002F03.type-formats\u002F01.overview",{"title":235,"path":236,"stem":237},"String Formats","\u002Fruntypes\u002Ftype-formats\u002Fstring","02.runtypes\u002F03.type-formats\u002F02.string",{"title":239,"path":240,"stem":241},"Number Formats","\u002Fruntypes\u002Ftype-formats\u002Fnumber","02.runtypes\u002F03.type-formats\u002F03.number",{"title":243,"path":244,"stem":245},"BigInt Formats","\u002Fruntypes\u002Ftype-formats\u002Fbigint","02.runtypes\u002F03.type-formats\u002F04.bigint",{"title":247,"path":248,"stem":249},"Date and Time Formats","\u002Fruntypes\u002Ftype-formats\u002Fdate-time","02.runtypes\u002F03.type-formats\u002F05.date-time",{"title":251,"path":252,"stem":253},"Collection Formats","\u002Fruntypes\u002Ftype-formats\u002Fcollections","02.runtypes\u002F03.type-formats\u002F06.collections",{"title":255,"icon":256,"redirect":257,"path":258,"stem":259,"children":260,"page":24},"Tooling","i-lucide-wrench","\u002Fruntypes\u002Ftooling\u002Flinting","\u002Fruntypes\u002Ftooling","02.runtypes\u002F04.tooling",[261,264],{"title":262,"path":257,"stem":263},"Linting","02.runtypes\u002F04.tooling\u002F01.linting",{"title":265,"path":266,"stem":267},"Source Conversion","\u002Fruntypes\u002Ftooling\u002Fsource-conversion","02.runtypes\u002F04.tooling\u002F02.source-conversion",{"title":269,"icon":270,"redirect":271,"path":272,"stem":273,"children":274,"page":24},"AI Integration","i-lucide-sparkles","\u002Fruntypes\u002Fai-integration\u002Fworkflow-and-commands","\u002Fruntypes\u002Fai-integration","02.runtypes\u002F05.ai-integration",[275,278,282,286],{"title":276,"path":271,"stem":277},"AI Workflow","02.runtypes\u002F05.ai-integration\u002F01.workflow-and-commands",{"title":279,"path":280,"stem":281},"FriendlyText","\u002Fruntypes\u002Fai-integration\u002Ffriendly-text","02.runtypes\u002F05.ai-integration\u002F02.friendly-text",{"title":283,"path":284,"stem":285},"MockData","\u002Fruntypes\u002Fai-integration\u002Fmock-data","02.runtypes\u002F05.ai-integration\u002F03.mock-data",{"title":287,"path":288,"stem":289},"Translations (i18n)","\u002Fruntypes\u002Fai-integration\u002Fi18n","02.runtypes\u002F05.ai-integration\u002F04.i18n",{"title":291,"icon":292,"redirect":293,"path":294,"stem":295,"children":296,"page":24},"Drizzle ORM","i-lineicons-drizzle","\u002Fruntypes\u002Fdrizzle-orm\u002Fdrizzle-overview","\u002Fruntypes\u002Fdrizzle-orm","02.runtypes\u002F06.drizzle-orm",[297,300,304,308,312,316,320,324,328],{"title":298,"path":293,"stem":299},"Drizzle Overview","02.runtypes\u002F06.drizzle-orm\u002F00.drizzle-overview",{"title":301,"path":302,"stem":303},"Column Formats","\u002Fruntypes\u002Fdrizzle-orm\u002Fcolumn-formats","02.runtypes\u002F06.drizzle-orm\u002F01.column-formats",{"title":305,"path":306,"stem":307},"Views","\u002Fruntypes\u002Fdrizzle-orm\u002Fviews","02.runtypes\u002F06.drizzle-orm\u002F02.views",{"title":309,"path":310,"stem":311},"Indexes and Constraints","\u002Fruntypes\u002Fdrizzle-orm\u002Fconstraints","02.runtypes\u002F06.drizzle-orm\u002F03.constraints",{"title":313,"path":314,"stem":315},"Row Level Security","\u002Fruntypes\u002Fdrizzle-orm\u002Frow-level-security","02.runtypes\u002F06.drizzle-orm\u002F04.row-level-security",{"title":317,"path":318,"stem":319},"Relations","\u002Fruntypes\u002Fdrizzle-orm\u002Frelations","02.runtypes\u002F06.drizzle-orm\u002F05.relations",{"title":321,"path":322,"stem":323},"The Schema File","\u002Fruntypes\u002Fdrizzle-orm\u002Fschema-file","02.runtypes\u002F06.drizzle-orm\u002F06.schema-file",{"title":325,"path":326,"stem":327},"Migrate an Existing Schema","\u002Fruntypes\u002Fdrizzle-orm\u002Fmigrate-an-existing-schema","02.runtypes\u002F06.drizzle-orm\u002F07.migrate-an-existing-schema",{"title":329,"path":330,"stem":331},"Cloudflare D1 and Durable Objects","\u002Fruntypes\u002Fdrizzle-orm\u002Fcloudflare-storage","02.runtypes\u002F06.drizzle-orm\u002F08.cloudflare-storage",{"title":333,"icon":334,"redirect":335,"path":336,"stem":337,"children":338,"page":24},"Diagnostics","i-lucide-triangle-alert","\u002Fruntypes\u002Fdiagnostics\u002Ferror-levels","\u002Fruntypes\u002Fdiagnostics","02.runtypes\u002F08.diagnostics",[339,342],{"title":340,"path":335,"stem":341},"Error Levels","02.runtypes\u002F08.diagnostics\u002F01.error-levels",{"title":343,"path":344,"stem":345},"All Diagnostics","\u002Fruntypes\u002Fdiagnostics\u002Fall-diagnostics","02.runtypes\u002F08.diagnostics\u002F02.all-diagnostics",{"title":347,"icon":348,"path":349,"stem":350,"children":351,"page":24},"Benchmarks","i-lucide-gauge","\u002Fbenchmarks","03.benchmarks",[352,372],{"title":5,"icon":6,"redirect":353,"path":354,"stem":355,"children":356,"page":24},"\u002Fbenchmarks\u002Frpc\u002Fhello-world","\u002Fbenchmarks\u002Frpc","03.benchmarks\u002F02.rpc",[357,360,364,368],{"title":358,"path":353,"stem":359},"Hello World","03.benchmarks\u002F02.rpc\u002F01.hello-world",{"title":361,"path":362,"stem":363},"Light Validation","\u002Fbenchmarks\u002Frpc\u002Flight-validation","03.benchmarks\u002F02.rpc\u002F02.light-validation",{"title":365,"path":366,"stem":367},"Heavy Validation","\u002Fbenchmarks\u002Frpc\u002Fheavy-validation","03.benchmarks\u002F02.rpc\u002F03.heavy-validation",{"title":369,"path":370,"stem":371},"Payload Sizes","\u002Fbenchmarks\u002Frpc\u002Fpayload-sizes","03.benchmarks\u002F02.rpc\u002F04.payload-sizes",{"title":163,"icon":164,"redirect":373,"path":374,"stem":375,"children":376,"page":24},"\u002Fbenchmarks\u002Fruntypes\u002Fis-valid","\u002Fbenchmarks\u002Fruntypes","03.benchmarks\u002F03.runtypes",[377,380,384,388,392,395],{"title":378,"path":373,"stem":379},"Is Valid","03.benchmarks\u002F03.runtypes\u002F01.is-valid",{"title":381,"path":382,"stem":383},"Is Valid Formats","\u002Fbenchmarks\u002Fruntypes\u002Fis-valid-formats","03.benchmarks\u002F03.runtypes\u002F02.is-valid-formats",{"title":385,"path":386,"stem":387},"Get Errors","\u002Fbenchmarks\u002Fruntypes\u002Fget-errors","03.benchmarks\u002F03.runtypes\u002F03.get-errors",{"title":389,"path":390,"stem":391},"Get Errors Formats","\u002Fbenchmarks\u002Fruntypes\u002Fget-errors-formats","03.benchmarks\u002F03.runtypes\u002F04.get-errors-formats",{"title":56,"path":393,"stem":394},"\u002Fbenchmarks\u002Fruntypes\u002Fjson-round-trip","03.benchmarks\u002F03.runtypes\u002F05.json-round-trip",{"title":396,"path":397,"stem":398},"Type Checking","\u002Fbenchmarks\u002Fruntypes\u002Ftype-checking","03.benchmarks\u002F03.runtypes\u002F07.type-checking",{"id":400,"title":48,"body":401,"description":3124,"extension":3125,"links":3126,"meta":3127,"navigation":489,"path":92,"seo":3128,"stem":93,"__hash__":3129},"docs\u002F01.rpc\u002F04.client\u002F02.error-handling.md",{"type":402,"value":403},"minimark",[404,408,1196,1201,1214,1785,1791,1795,1805,3094,3098,3113,3120],[405,406,407],"p",{},"Calls never throw. An error comes back in the result, next to the value, and TypeScript already knows which errors a route can return.",[409,410,411,791],"code-split",{},[412,413,419],"pre",{"className":414,"code":415,"filename":416,"language":417,"meta":418,"style":418},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {initClient} from '@mionjs\u002Fclient';\nimport type {MyApi} from '.\u002Ferror-basic.routes.ts';\n\nconst {routes} = initClient\u003CMyApi>({baseURL: 'http:\u002F\u002Flocalhost:3000'});\n\n\u002F\u002F call() never throws, errors come back in the result\nconst [user, error] = await routes.users.getById('123').call();\n\nif (error?.type === 'user-not-found') {\n  \u002F\u002F the route's own error, narrowed by its type\n  console.log('no user with that id');\n} else if (error) {\n  \u002F\u002F the only other typed error: the params failed validation\n  console.log('invalid params:', error.publicMessage);\n} else if (user) {\n  console.log('User:', user.name);\n}\n","client.ts","ts","",[420,421,422,458,484,491,548,553,560,620,625,656,662,686,702,708,739,753,785],"code",{"__ignoreMap":418},[423,424,427,431,435,439,442,445,448,452,455],"span",{"class":425,"line":426},"line",1,[423,428,430],{"class":429},"s7zQu","import",[423,432,434],{"class":433},"sMK4o"," {",[423,436,438],{"class":437},"sTEyZ","initClient",[423,440,441],{"class":433},"}",[423,443,444],{"class":429}," from",[423,446,447],{"class":433}," '",[423,449,451],{"class":450},"sfazB","@mionjs\u002Fclient",[423,453,454],{"class":433},"'",[423,456,457],{"class":433},";\n",[423,459,461,463,466,468,471,473,475,477,480,482],{"class":425,"line":460},2,[423,462,430],{"class":429},[423,464,465],{"class":429}," type",[423,467,434],{"class":433},[423,469,470],{"class":437},"MyApi",[423,472,441],{"class":433},[423,474,444],{"class":429},[423,476,447],{"class":433},[423,478,479],{"class":450},".\u002Ferror-basic.routes.ts",[423,481,454],{"class":433},[423,483,457],{"class":433},[423,485,487],{"class":425,"line":486},3,[423,488,490],{"emptyLinePlaceholder":489},true,"\n",[423,492,494,498,500,503,505,508,512,515,518,521,524,527,531,534,536,539,541,543,546],{"class":425,"line":493},4,[423,495,497],{"class":496},"spNyl","const",[423,499,434],{"class":433},[423,501,502],{"class":437},"routes",[423,504,441],{"class":433},[423,506,507],{"class":433}," =",[423,509,511],{"class":510},"s2Zo4"," initClient",[423,513,514],{"class":433},"\u003C",[423,516,470],{"class":517},"sBMFI",[423,519,520],{"class":433},">",[423,522,523],{"class":437},"(",[423,525,526],{"class":433},"{",[423,528,530],{"class":529},"swJcz","baseURL",[423,532,533],{"class":433},":",[423,535,447],{"class":433},[423,537,538],{"class":450},"http:\u002F\u002Flocalhost:3000",[423,540,454],{"class":433},[423,542,441],{"class":433},[423,544,545],{"class":437},")",[423,547,457],{"class":433},[423,549,551],{"class":425,"line":550},5,[423,552,490],{"emptyLinePlaceholder":489},[423,554,556],{"class":425,"line":555},6,[423,557,559],{"class":558},"sHwdD","\u002F\u002F call() never throws, errors come back in the result\n",[423,561,563,565,568,571,574,577,580,582,585,588,591,594,596,599,601,603,606,608,610,612,615,618],{"class":425,"line":562},7,[423,564,497],{"class":496},[423,566,567],{"class":433}," [",[423,569,570],{"class":437},"user",[423,572,573],{"class":433},",",[423,575,576],{"class":437}," error",[423,578,579],{"class":433},"]",[423,581,507],{"class":433},[423,583,584],{"class":429}," await",[423,586,587],{"class":437}," routes",[423,589,590],{"class":433},".",[423,592,593],{"class":437},"users",[423,595,590],{"class":433},[423,597,598],{"class":510},"getById",[423,600,523],{"class":437},[423,602,454],{"class":433},[423,604,605],{"class":450},"123",[423,607,454],{"class":433},[423,609,545],{"class":437},[423,611,590],{"class":433},[423,613,614],{"class":510},"call",[423,616,617],{"class":437},"()",[423,619,457],{"class":433},[423,621,623],{"class":425,"line":622},8,[423,624,490],{"emptyLinePlaceholder":489},[423,626,628,631,634,637,640,643,645,648,650,653],{"class":425,"line":627},9,[423,629,630],{"class":429},"if",[423,632,633],{"class":437}," (error",[423,635,636],{"class":433},"?.",[423,638,639],{"class":437},"type ",[423,641,642],{"class":433},"===",[423,644,447],{"class":433},[423,646,647],{"class":450},"user-not-found",[423,649,454],{"class":433},[423,651,652],{"class":437},") ",[423,654,655],{"class":433},"{\n",[423,657,659],{"class":425,"line":658},10,[423,660,661],{"class":558},"  \u002F\u002F the route's own error, narrowed by its type\n",[423,663,665,668,670,673,675,677,680,682,684],{"class":425,"line":664},11,[423,666,667],{"class":437},"  console",[423,669,590],{"class":433},[423,671,672],{"class":510},"log",[423,674,523],{"class":529},[423,676,454],{"class":433},[423,678,679],{"class":450},"no user with that id",[423,681,454],{"class":433},[423,683,545],{"class":529},[423,685,457],{"class":433},[423,687,689,691,694,697,700],{"class":425,"line":688},12,[423,690,441],{"class":433},[423,692,693],{"class":429}," else",[423,695,696],{"class":429}," if",[423,698,699],{"class":437}," (error) ",[423,701,655],{"class":433},[423,703,705],{"class":425,"line":704},13,[423,706,707],{"class":558},"  \u002F\u002F the only other typed error: the params failed validation\n",[423,709,711,713,715,717,719,721,724,726,728,730,732,735,737],{"class":425,"line":710},14,[423,712,667],{"class":437},[423,714,590],{"class":433},[423,716,672],{"class":510},[423,718,523],{"class":529},[423,720,454],{"class":433},[423,722,723],{"class":450},"invalid params:",[423,725,454],{"class":433},[423,727,573],{"class":433},[423,729,576],{"class":437},[423,731,590],{"class":433},[423,733,734],{"class":437},"publicMessage",[423,736,545],{"class":529},[423,738,457],{"class":433},[423,740,742,744,746,748,751],{"class":425,"line":741},15,[423,743,441],{"class":433},[423,745,693],{"class":429},[423,747,696],{"class":429},[423,749,750],{"class":437}," (user) ",[423,752,655],{"class":433},[423,754,756,758,760,762,764,766,769,771,773,776,778,781,783],{"class":425,"line":755},16,[423,757,667],{"class":437},[423,759,590],{"class":433},[423,761,672],{"class":510},[423,763,523],{"class":529},[423,765,454],{"class":433},[423,767,768],{"class":450},"User:",[423,770,454],{"class":433},[423,772,573],{"class":433},[423,774,775],{"class":437}," user",[423,777,590],{"class":433},[423,779,780],{"class":437},"name",[423,782,545],{"class":529},[423,784,457],{"class":433},[423,786,788],{"class":425,"line":787},17,[423,789,790],{"class":433},"}\n",[412,792,795],{"className":414,"code":793,"filename":794,"language":417,"meta":418,"style":418},"import {RpcError} from '@mionjs\u002Fcore';\nimport {createMionRouter, Routes} from '@mionjs\u002Frouter';\n\nconst mion = createMionRouter();\n\nexport type User = {id: string; name: string};\n\n\u002F\u002F the returned error is part of the signature, so the client knows it exists\nconst routes = {\n  users: {\n    getById: mion.route(\n      (ctx, id: string): User | RpcError\u003C'user-not-found'> => {\n        if (id !== '123')\n          return new RpcError({\n            publicMessage: `User ${id} not found`,\n            type: 'user-not-found',\n          });\n        return {id, name: 'John'};\n      }\n    ),\n  },\n} satisfies Routes;\n\nconst myApi = mion.initRoutes(routes);\n\nexport type MyApi = typeof myApi;\n","server.routes.ts",[420,796,797,819,846,850,867,871,906,910,915,927,936,954,998,1020,1034,1063,1078,1087,1112,1118,1126,1132,1144,1149,1171,1176],{"__ignoreMap":418},[423,798,799,801,803,806,808,810,812,815,817],{"class":425,"line":426},[423,800,430],{"class":429},[423,802,434],{"class":433},[423,804,805],{"class":437},"RpcError",[423,807,441],{"class":433},[423,809,444],{"class":429},[423,811,447],{"class":433},[423,813,814],{"class":450},"@mionjs\u002Fcore",[423,816,454],{"class":433},[423,818,457],{"class":433},[423,820,821,823,825,828,830,833,835,837,839,842,844],{"class":425,"line":460},[423,822,430],{"class":429},[423,824,434],{"class":433},[423,826,827],{"class":437},"createMionRouter",[423,829,573],{"class":433},[423,831,832],{"class":437}," Routes",[423,834,441],{"class":433},[423,836,444],{"class":429},[423,838,447],{"class":433},[423,840,841],{"class":450},"@mionjs\u002Frouter",[423,843,454],{"class":433},[423,845,457],{"class":433},[423,847,848],{"class":425,"line":486},[423,849,490],{"emptyLinePlaceholder":489},[423,851,852,854,857,860,863,865],{"class":425,"line":493},[423,853,497],{"class":496},[423,855,856],{"class":437}," mion ",[423,858,859],{"class":433},"=",[423,861,862],{"class":510}," createMionRouter",[423,864,617],{"class":437},[423,866,457],{"class":433},[423,868,869],{"class":425,"line":550},[423,870,490],{"emptyLinePlaceholder":489},[423,872,873,876,878,881,883,885,888,890,893,896,899,901,903],{"class":425,"line":555},[423,874,875],{"class":429},"export",[423,877,465],{"class":496},[423,879,880],{"class":517}," User",[423,882,507],{"class":433},[423,884,434],{"class":433},[423,886,887],{"class":529},"id",[423,889,533],{"class":433},[423,891,892],{"class":517}," string",[423,894,895],{"class":433},";",[423,897,898],{"class":529}," name",[423,900,533],{"class":433},[423,902,892],{"class":517},[423,904,905],{"class":433},"};\n",[423,907,908],{"class":425,"line":562},[423,909,490],{"emptyLinePlaceholder":489},[423,911,912],{"class":425,"line":622},[423,913,914],{"class":558},"\u002F\u002F the returned error is part of the signature, so the client knows it exists\n",[423,916,917,919,922,924],{"class":425,"line":627},[423,918,497],{"class":496},[423,920,921],{"class":437}," routes ",[423,923,859],{"class":433},[423,925,926],{"class":433}," {\n",[423,928,929,932,934],{"class":425,"line":658},[423,930,931],{"class":529},"  users",[423,933,533],{"class":433},[423,935,926],{"class":433},[423,937,938,941,943,946,948,951],{"class":425,"line":664},[423,939,940],{"class":529},"    getById",[423,942,533],{"class":433},[423,944,945],{"class":437}," mion",[423,947,590],{"class":433},[423,949,950],{"class":510},"route",[423,952,953],{"class":437},"(\n",[423,955,956,959,963,965,968,970,972,975,977,980,983,985,987,989,991,993,996],{"class":425,"line":688},[423,957,958],{"class":433},"      (",[423,960,962],{"class":961},"sHdIc","ctx",[423,964,573],{"class":433},[423,966,967],{"class":961}," id",[423,969,533],{"class":433},[423,971,892],{"class":517},[423,973,974],{"class":433},"):",[423,976,880],{"class":517},[423,978,979],{"class":433}," |",[423,981,982],{"class":517}," RpcError",[423,984,514],{"class":433},[423,986,454],{"class":433},[423,988,647],{"class":450},[423,990,454],{"class":433},[423,992,520],{"class":433},[423,994,995],{"class":496}," =>",[423,997,926],{"class":433},[423,999,1000,1003,1006,1008,1011,1013,1015,1017],{"class":425,"line":704},[423,1001,1002],{"class":429},"        if",[423,1004,1005],{"class":529}," (",[423,1007,887],{"class":437},[423,1009,1010],{"class":433}," !==",[423,1012,447],{"class":433},[423,1014,605],{"class":450},[423,1016,454],{"class":433},[423,1018,1019],{"class":529},")\n",[423,1021,1022,1025,1028,1030,1032],{"class":425,"line":710},[423,1023,1024],{"class":429},"          return",[423,1026,1027],{"class":433}," new",[423,1029,982],{"class":510},[423,1031,523],{"class":529},[423,1033,655],{"class":433},[423,1035,1036,1039,1041,1044,1047,1050,1052,1054,1057,1060],{"class":425,"line":741},[423,1037,1038],{"class":529},"            publicMessage",[423,1040,533],{"class":433},[423,1042,1043],{"class":433}," `",[423,1045,1046],{"class":450},"User ",[423,1048,1049],{"class":433},"${",[423,1051,887],{"class":437},[423,1053,441],{"class":433},[423,1055,1056],{"class":450}," not found",[423,1058,1059],{"class":433},"`",[423,1061,1062],{"class":433},",\n",[423,1064,1065,1068,1070,1072,1074,1076],{"class":425,"line":755},[423,1066,1067],{"class":529},"            type",[423,1069,533],{"class":433},[423,1071,447],{"class":433},[423,1073,647],{"class":450},[423,1075,454],{"class":433},[423,1077,1062],{"class":433},[423,1079,1080,1083,1085],{"class":425,"line":787},[423,1081,1082],{"class":433},"          }",[423,1084,545],{"class":529},[423,1086,457],{"class":433},[423,1088,1090,1093,1095,1097,1099,1101,1103,1105,1108,1110],{"class":425,"line":1089},18,[423,1091,1092],{"class":429},"        return",[423,1094,434],{"class":433},[423,1096,887],{"class":437},[423,1098,573],{"class":433},[423,1100,898],{"class":529},[423,1102,533],{"class":433},[423,1104,447],{"class":433},[423,1106,1107],{"class":450},"John",[423,1109,454],{"class":433},[423,1111,905],{"class":433},[423,1113,1115],{"class":425,"line":1114},19,[423,1116,1117],{"class":433},"      }\n",[423,1119,1121,1124],{"class":425,"line":1120},20,[423,1122,1123],{"class":437},"    )",[423,1125,1062],{"class":433},[423,1127,1129],{"class":425,"line":1128},21,[423,1130,1131],{"class":433},"  },\n",[423,1133,1135,1137,1140,1142],{"class":425,"line":1134},22,[423,1136,441],{"class":433},[423,1138,1139],{"class":429}," satisfies",[423,1141,832],{"class":517},[423,1143,457],{"class":433},[423,1145,1147],{"class":425,"line":1146},23,[423,1148,490],{"emptyLinePlaceholder":489},[423,1150,1152,1154,1157,1159,1161,1163,1166,1169],{"class":425,"line":1151},24,[423,1153,497],{"class":496},[423,1155,1156],{"class":437}," myApi ",[423,1158,859],{"class":433},[423,1160,945],{"class":437},[423,1162,590],{"class":433},[423,1164,1165],{"class":510},"initRoutes",[423,1167,1168],{"class":437},"(routes)",[423,1170,457],{"class":433},[423,1172,1174],{"class":425,"line":1173},25,[423,1175,490],{"emptyLinePlaceholder":489},[423,1177,1179,1181,1183,1186,1188,1191,1194],{"class":425,"line":1178},26,[423,1180,875],{"class":429},[423,1182,465],{"class":496},[423,1184,1185],{"class":517}," MyApi",[423,1187,507],{"class":433},[423,1189,1190],{"class":433}," typeof",[423,1192,1193],{"class":437}," myApi",[423,1195,457],{"class":433},[1197,1198,1200],"h2",{"id":1199},"the-result-pattern","The Result Pattern",[405,1202,1203,1206,1207,1210,1211,590],{},[420,1204,1205],{},"call()"," returns ",[420,1208,1209],{},"[result, error, response]",". The result and the error come only from the route and are strongly typed: its return value, one of its declared errors or a validation error. Every other error goes to the response, and leaves both result and error ",[420,1212,1213],{},"undefined",[409,1215,1216,1424],{},[412,1217,1220],{"className":414,"code":1218,"filename":1219,"language":417,"meta":418,"style":418},"import {initClient} from '@mionjs\u002Fclient';\nimport type {MyApi} from '.\u002Fauth-user.routes.ts';\n\nconst {routes} = initClient\u003CMyApi>({baseURL: 'http:\u002F\u002Flocalhost:3000'});\n\n\u002F\u002F strongly typed: the route's own result or error\nconst [user, error] = await routes.users.getById('USER-404').call();\n\nif (error)\n  console.log(error.type); \u002F\u002F 'user-not-found' | 'validation-error'\nelse if (user) console.log(user.name); \u002F\u002F John\n","returned by the route",[420,1221,1222,1242,1265,1269,1309,1313,1318,1365,1369,1376,1397],{"__ignoreMap":418},[423,1223,1224,1226,1228,1230,1232,1234,1236,1238,1240],{"class":425,"line":426},[423,1225,430],{"class":429},[423,1227,434],{"class":433},[423,1229,438],{"class":437},[423,1231,441],{"class":433},[423,1233,444],{"class":429},[423,1235,447],{"class":433},[423,1237,451],{"class":450},[423,1239,454],{"class":433},[423,1241,457],{"class":433},[423,1243,1244,1246,1248,1250,1252,1254,1256,1258,1261,1263],{"class":425,"line":460},[423,1245,430],{"class":429},[423,1247,465],{"class":429},[423,1249,434],{"class":433},[423,1251,470],{"class":437},[423,1253,441],{"class":433},[423,1255,444],{"class":429},[423,1257,447],{"class":433},[423,1259,1260],{"class":450},".\u002Fauth-user.routes.ts",[423,1262,454],{"class":433},[423,1264,457],{"class":433},[423,1266,1267],{"class":425,"line":486},[423,1268,490],{"emptyLinePlaceholder":489},[423,1270,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307],{"class":425,"line":493},[423,1272,497],{"class":496},[423,1274,434],{"class":433},[423,1276,502],{"class":437},[423,1278,441],{"class":433},[423,1280,507],{"class":433},[423,1282,511],{"class":510},[423,1284,514],{"class":433},[423,1286,470],{"class":517},[423,1288,520],{"class":433},[423,1290,523],{"class":437},[423,1292,526],{"class":433},[423,1294,530],{"class":529},[423,1296,533],{"class":433},[423,1298,447],{"class":433},[423,1300,538],{"class":450},[423,1302,454],{"class":433},[423,1304,441],{"class":433},[423,1306,545],{"class":437},[423,1308,457],{"class":433},[423,1310,1311],{"class":425,"line":550},[423,1312,490],{"emptyLinePlaceholder":489},[423,1314,1315],{"class":425,"line":555},[423,1316,1317],{"class":558},"\u002F\u002F strongly typed: the route's own result or error\n",[423,1319,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1353,1355,1357,1359,1361,1363],{"class":425,"line":562},[423,1321,497],{"class":496},[423,1323,567],{"class":433},[423,1325,570],{"class":437},[423,1327,573],{"class":433},[423,1329,576],{"class":437},[423,1331,579],{"class":433},[423,1333,507],{"class":433},[423,1335,584],{"class":429},[423,1337,587],{"class":437},[423,1339,590],{"class":433},[423,1341,593],{"class":437},[423,1343,590],{"class":433},[423,1345,598],{"class":510},[423,1347,523],{"class":437},[423,1349,454],{"class":433},[423,1351,1352],{"class":450},"USER-404",[423,1354,454],{"class":433},[423,1356,545],{"class":437},[423,1358,590],{"class":433},[423,1360,614],{"class":510},[423,1362,617],{"class":437},[423,1364,457],{"class":433},[423,1366,1367],{"class":425,"line":622},[423,1368,490],{"emptyLinePlaceholder":489},[423,1370,1371,1373],{"class":425,"line":627},[423,1372,630],{"class":429},[423,1374,1375],{"class":437}," (error)\n",[423,1377,1378,1380,1382,1384,1387,1389,1392,1394],{"class":425,"line":658},[423,1379,667],{"class":437},[423,1381,590],{"class":433},[423,1383,672],{"class":510},[423,1385,1386],{"class":437},"(error",[423,1388,590],{"class":433},[423,1390,1391],{"class":437},"type)",[423,1393,895],{"class":433},[423,1395,1396],{"class":558}," \u002F\u002F 'user-not-found' | 'validation-error'\n",[423,1398,1399,1402,1404,1407,1409,1411,1414,1416,1419,1421],{"class":425,"line":664},[423,1400,1401],{"class":429},"else",[423,1403,696],{"class":429},[423,1405,1406],{"class":437}," (user) console",[423,1408,590],{"class":433},[423,1410,672],{"class":510},[423,1412,1413],{"class":437},"(user",[423,1415,590],{"class":433},[423,1417,1418],{"class":437},"name)",[423,1420,895],{"class":433},[423,1422,1423],{"class":558}," \u002F\u002F John\n",[412,1425,1428],{"className":414,"code":1426,"filename":1427,"language":417,"meta":418,"style":418},"import {isRpcError} from '@mionjs\u002Fcore';\nimport {initClient} from '@mionjs\u002Fclient';\nimport type {MyApi} from '.\u002Fauth-user.routes.ts';\n\nconst {routes} = initClient\u003CMyApi>({baseURL: 'http:\u002F\u002Flocalhost:3000'});\n\nconst [user, error, response] = await routes.users\n  .getById('USER-123')\n  .call({timeout: 5000});\n\n\u002F\u002F both undefined: the error came from outside the route\nif (!user && !error) {\n  \u002F\u002F a middleware's declared error, typed, under its name\n  if (isRpcError(response.auth))\n    console.log('auth failed:', response.auth.type); \u002F\u002F 'not-authorized'\n  \u002F\u002F anything nobody declared: a timeout, an abort, a network failure, a thrown error\n  for (const thrown of response['@thrownErrors'] ?? [])\n    console.log('failed:', thrown.publicMessage);\n}\n","failed outside the route",[420,1429,1430,1451,1471,1493,1497,1537,1541,1571,1589,1614,1618,1623,1646,1651,1673,1711,1716,1752,1781],{"__ignoreMap":418},[423,1431,1432,1434,1436,1439,1441,1443,1445,1447,1449],{"class":425,"line":426},[423,1433,430],{"class":429},[423,1435,434],{"class":433},[423,1437,1438],{"class":437},"isRpcError",[423,1440,441],{"class":433},[423,1442,444],{"class":429},[423,1444,447],{"class":433},[423,1446,814],{"class":450},[423,1448,454],{"class":433},[423,1450,457],{"class":433},[423,1452,1453,1455,1457,1459,1461,1463,1465,1467,1469],{"class":425,"line":460},[423,1454,430],{"class":429},[423,1456,434],{"class":433},[423,1458,438],{"class":437},[423,1460,441],{"class":433},[423,1462,444],{"class":429},[423,1464,447],{"class":433},[423,1466,451],{"class":450},[423,1468,454],{"class":433},[423,1470,457],{"class":433},[423,1472,1473,1475,1477,1479,1481,1483,1485,1487,1489,1491],{"class":425,"line":486},[423,1474,430],{"class":429},[423,1476,465],{"class":429},[423,1478,434],{"class":433},[423,1480,470],{"class":437},[423,1482,441],{"class":433},[423,1484,444],{"class":429},[423,1486,447],{"class":433},[423,1488,1260],{"class":450},[423,1490,454],{"class":433},[423,1492,457],{"class":433},[423,1494,1495],{"class":425,"line":493},[423,1496,490],{"emptyLinePlaceholder":489},[423,1498,1499,1501,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535],{"class":425,"line":550},[423,1500,497],{"class":496},[423,1502,434],{"class":433},[423,1504,502],{"class":437},[423,1506,441],{"class":433},[423,1508,507],{"class":433},[423,1510,511],{"class":510},[423,1512,514],{"class":433},[423,1514,470],{"class":517},[423,1516,520],{"class":433},[423,1518,523],{"class":437},[423,1520,526],{"class":433},[423,1522,530],{"class":529},[423,1524,533],{"class":433},[423,1526,447],{"class":433},[423,1528,538],{"class":450},[423,1530,454],{"class":433},[423,1532,441],{"class":433},[423,1534,545],{"class":437},[423,1536,457],{"class":433},[423,1538,1539],{"class":425,"line":555},[423,1540,490],{"emptyLinePlaceholder":489},[423,1542,1543,1545,1547,1549,1551,1553,1555,1558,1560,1562,1564,1566,1568],{"class":425,"line":562},[423,1544,497],{"class":496},[423,1546,567],{"class":433},[423,1548,570],{"class":437},[423,1550,573],{"class":433},[423,1552,576],{"class":437},[423,1554,573],{"class":433},[423,1556,1557],{"class":437}," response",[423,1559,579],{"class":433},[423,1561,507],{"class":433},[423,1563,584],{"class":429},[423,1565,587],{"class":437},[423,1567,590],{"class":433},[423,1569,1570],{"class":437},"users\n",[423,1572,1573,1576,1578,1580,1582,1585,1587],{"class":425,"line":622},[423,1574,1575],{"class":433},"  .",[423,1577,598],{"class":510},[423,1579,523],{"class":437},[423,1581,454],{"class":433},[423,1583,1584],{"class":450},"USER-123",[423,1586,454],{"class":433},[423,1588,1019],{"class":437},[423,1590,1591,1593,1595,1597,1599,1602,1604,1608,1610,1612],{"class":425,"line":627},[423,1592,1575],{"class":433},[423,1594,614],{"class":510},[423,1596,523],{"class":437},[423,1598,526],{"class":433},[423,1600,1601],{"class":529},"timeout",[423,1603,533],{"class":433},[423,1605,1607],{"class":1606},"sbssI"," 5000",[423,1609,441],{"class":433},[423,1611,545],{"class":437},[423,1613,457],{"class":433},[423,1615,1616],{"class":425,"line":658},[423,1617,490],{"emptyLinePlaceholder":489},[423,1619,1620],{"class":425,"line":664},[423,1621,1622],{"class":558},"\u002F\u002F both undefined: the error came from outside the route\n",[423,1624,1625,1627,1629,1632,1635,1638,1641,1644],{"class":425,"line":688},[423,1626,630],{"class":429},[423,1628,1005],{"class":437},[423,1630,1631],{"class":433},"!",[423,1633,1634],{"class":437},"user ",[423,1636,1637],{"class":433},"&&",[423,1639,1640],{"class":433}," !",[423,1642,1643],{"class":437},"error) ",[423,1645,655],{"class":433},[423,1647,1648],{"class":425,"line":704},[423,1649,1650],{"class":558},"  \u002F\u002F a middleware's declared error, typed, under its name\n",[423,1652,1653,1656,1658,1660,1662,1665,1667,1670],{"class":425,"line":710},[423,1654,1655],{"class":429},"  if",[423,1657,1005],{"class":529},[423,1659,1438],{"class":510},[423,1661,523],{"class":529},[423,1663,1664],{"class":437},"response",[423,1666,590],{"class":433},[423,1668,1669],{"class":437},"auth",[423,1671,1672],{"class":529},"))\n",[423,1674,1675,1678,1680,1682,1684,1686,1689,1691,1693,1695,1697,1699,1701,1704,1706,1708],{"class":425,"line":741},[423,1676,1677],{"class":437},"    console",[423,1679,590],{"class":433},[423,1681,672],{"class":510},[423,1683,523],{"class":529},[423,1685,454],{"class":433},[423,1687,1688],{"class":450},"auth failed:",[423,1690,454],{"class":433},[423,1692,573],{"class":433},[423,1694,1557],{"class":437},[423,1696,590],{"class":433},[423,1698,1669],{"class":437},[423,1700,590],{"class":433},[423,1702,1703],{"class":437},"type",[423,1705,545],{"class":529},[423,1707,895],{"class":433},[423,1709,1710],{"class":558}," \u002F\u002F 'not-authorized'\n",[423,1712,1713],{"class":425,"line":755},[423,1714,1715],{"class":558},"  \u002F\u002F anything nobody declared: a timeout, an abort, a network failure, a thrown error\n",[423,1717,1718,1721,1723,1725,1728,1731,1733,1736,1738,1741,1743,1746,1749],{"class":425,"line":787},[423,1719,1720],{"class":429},"  for",[423,1722,1005],{"class":529},[423,1724,497],{"class":496},[423,1726,1727],{"class":437}," thrown",[423,1729,1730],{"class":433}," of",[423,1732,1557],{"class":437},[423,1734,1735],{"class":529},"[",[423,1737,454],{"class":433},[423,1739,1740],{"class":450},"@thrownErrors",[423,1742,454],{"class":433},[423,1744,1745],{"class":529},"] ",[423,1747,1748],{"class":433},"??",[423,1750,1751],{"class":529}," [])\n",[423,1753,1754,1756,1758,1760,1762,1764,1767,1769,1771,1773,1775,1777,1779],{"class":425,"line":1089},[423,1755,1677],{"class":437},[423,1757,590],{"class":433},[423,1759,672],{"class":510},[423,1761,523],{"class":529},[423,1763,454],{"class":433},[423,1765,1766],{"class":450},"failed:",[423,1768,454],{"class":433},[423,1770,573],{"class":433},[423,1772,1727],{"class":437},[423,1774,590],{"class":433},[423,1776,734],{"class":437},[423,1778,545],{"class":529},[423,1780,457],{"class":433},[423,1782,1783],{"class":425,"line":1114},[423,1784,790],{"class":433},[1786,1787,1788,1789,590],"note",{},"The client builds the result, the server never sees it. Your handlers just return a value or an ",[420,1790,805],{},[1197,1792,1794],{"id":1793},"handling-typed-errors","Handling Typed Errors",[405,1796,1797,1798,1801,1802,590],{},"When routes declare specific error types, you get autocompletion and type checking on ",[420,1799,1800],{},"error.type"," and on ",[420,1803,1804],{},"error.errorData",[409,1806,1807,2446],{},[412,1808,1810],{"className":414,"code":1809,"filename":416,"language":417,"meta":418,"style":418},"import {isRpcError} from '@mionjs\u002Fcore';\nimport {initClient} from '@mionjs\u002Fclient';\nimport type {MyApi} from '.\u002Fauth-user.routes.ts';\n\nconst {routes} = initClient\u003CMyApi>({\n  baseURL: 'http:\u002F\u002Flocalhost:3000',\n});\n\nconst [user, error, response] = await routes.users.getById('USER-404').call();\nconst thrown = response['@thrownErrors'];\n\n\u002F\u002F error.type is the discriminator, never the HTTP status code\nif (error) {\n  switch (error.type) {\n    case 'user-not-found':\n      \u002F\u002F declared payloads survive narrowing: errorData is UserNotFoundData\n      console.log('missing user:', error.errorData?.requestedId);\n      break;\n    case 'validation-error':\n      console.log('type errors:', error.errorData?.typeErrors.length);\n      break;\n  }\n} else if (isRpcError(response.auth)) {\n  \u002F\u002F the middleware's declared error; its onError hook gets it strongly typed\n  console.log('auth failed:', response.auth.type);\n} else if (thrown) {\n  \u002F\u002F transport, platform or any undeclared error lands here\n  console.log('request failed:', thrown[0].type);\n} else {\n  console.log(user?.name); \u002F\u002F John\n}\n\n\u002F\u002F typeErrors() is the only method that can throw\ntry {\n  const errors = await routes.users.getById(null as any).typeErrors();\n  console.log(errors); \u002F\u002F [] (empty array if no errors)\n} catch (validationError: any) {\n  \u002F\u002F { type: 'validation-error', message: `Invalid params ...` }\n  console.log(validationError);\n}\n",[420,1811,1812,1832,1852,1874,1878,1902,1917,1925,1929,1979,2001,2005,2010,2018,2036,2050,2055,2091,2098,2111,2150,2156,2161,2183,2188,2220,2233,2239,2276,2285,2308,2313,2318,2324,2332,2376,2397,2418,2424,2441],{"__ignoreMap":418},[423,1813,1814,1816,1818,1820,1822,1824,1826,1828,1830],{"class":425,"line":426},[423,1815,430],{"class":429},[423,1817,434],{"class":433},[423,1819,1438],{"class":437},[423,1821,441],{"class":433},[423,1823,444],{"class":429},[423,1825,447],{"class":433},[423,1827,814],{"class":450},[423,1829,454],{"class":433},[423,1831,457],{"class":433},[423,1833,1834,1836,1838,1840,1842,1844,1846,1848,1850],{"class":425,"line":460},[423,1835,430],{"class":429},[423,1837,434],{"class":433},[423,1839,438],{"class":437},[423,1841,441],{"class":433},[423,1843,444],{"class":429},[423,1845,447],{"class":433},[423,1847,451],{"class":450},[423,1849,454],{"class":433},[423,1851,457],{"class":433},[423,1853,1854,1856,1858,1860,1862,1864,1866,1868,1870,1872],{"class":425,"line":486},[423,1855,430],{"class":429},[423,1857,465],{"class":429},[423,1859,434],{"class":433},[423,1861,470],{"class":437},[423,1863,441],{"class":433},[423,1865,444],{"class":429},[423,1867,447],{"class":433},[423,1869,1260],{"class":450},[423,1871,454],{"class":433},[423,1873,457],{"class":433},[423,1875,1876],{"class":425,"line":493},[423,1877,490],{"emptyLinePlaceholder":489},[423,1879,1880,1882,1884,1886,1888,1890,1892,1894,1896,1898,1900],{"class":425,"line":550},[423,1881,497],{"class":496},[423,1883,434],{"class":433},[423,1885,502],{"class":437},[423,1887,441],{"class":433},[423,1889,507],{"class":433},[423,1891,511],{"class":510},[423,1893,514],{"class":433},[423,1895,470],{"class":517},[423,1897,520],{"class":433},[423,1899,523],{"class":437},[423,1901,655],{"class":433},[423,1903,1904,1907,1909,1911,1913,1915],{"class":425,"line":555},[423,1905,1906],{"class":529},"  baseURL",[423,1908,533],{"class":433},[423,1910,447],{"class":433},[423,1912,538],{"class":450},[423,1914,454],{"class":433},[423,1916,1062],{"class":433},[423,1918,1919,1921,1923],{"class":425,"line":562},[423,1920,441],{"class":433},[423,1922,545],{"class":437},[423,1924,457],{"class":433},[423,1926,1927],{"class":425,"line":622},[423,1928,490],{"emptyLinePlaceholder":489},[423,1930,1931,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977],{"class":425,"line":627},[423,1932,497],{"class":496},[423,1934,567],{"class":433},[423,1936,570],{"class":437},[423,1938,573],{"class":433},[423,1940,576],{"class":437},[423,1942,573],{"class":433},[423,1944,1557],{"class":437},[423,1946,579],{"class":433},[423,1948,507],{"class":433},[423,1950,584],{"class":429},[423,1952,587],{"class":437},[423,1954,590],{"class":433},[423,1956,593],{"class":437},[423,1958,590],{"class":433},[423,1960,598],{"class":510},[423,1962,523],{"class":437},[423,1964,454],{"class":433},[423,1966,1352],{"class":450},[423,1968,454],{"class":433},[423,1970,545],{"class":437},[423,1972,590],{"class":433},[423,1974,614],{"class":510},[423,1976,617],{"class":437},[423,1978,457],{"class":433},[423,1980,1981,1983,1986,1988,1991,1993,1995,1997,1999],{"class":425,"line":658},[423,1982,497],{"class":496},[423,1984,1985],{"class":437}," thrown ",[423,1987,859],{"class":433},[423,1989,1990],{"class":437}," response[",[423,1992,454],{"class":433},[423,1994,1740],{"class":450},[423,1996,454],{"class":433},[423,1998,579],{"class":437},[423,2000,457],{"class":433},[423,2002,2003],{"class":425,"line":664},[423,2004,490],{"emptyLinePlaceholder":489},[423,2006,2007],{"class":425,"line":688},[423,2008,2009],{"class":558},"\u002F\u002F error.type is the discriminator, never the HTTP status code\n",[423,2011,2012,2014,2016],{"class":425,"line":704},[423,2013,630],{"class":429},[423,2015,699],{"class":437},[423,2017,655],{"class":433},[423,2019,2020,2023,2025,2028,2030,2032,2034],{"class":425,"line":710},[423,2021,2022],{"class":429},"  switch",[423,2024,1005],{"class":529},[423,2026,2027],{"class":437},"error",[423,2029,590],{"class":433},[423,2031,1703],{"class":437},[423,2033,652],{"class":529},[423,2035,655],{"class":433},[423,2037,2038,2041,2043,2045,2047],{"class":425,"line":741},[423,2039,2040],{"class":429},"    case",[423,2042,447],{"class":433},[423,2044,647],{"class":450},[423,2046,454],{"class":433},[423,2048,2049],{"class":433},":\n",[423,2051,2052],{"class":425,"line":755},[423,2053,2054],{"class":558},"      \u002F\u002F declared payloads survive narrowing: errorData is UserNotFoundData\n",[423,2056,2057,2060,2062,2064,2066,2068,2071,2073,2075,2077,2079,2082,2084,2087,2089],{"class":425,"line":787},[423,2058,2059],{"class":437},"      console",[423,2061,590],{"class":433},[423,2063,672],{"class":510},[423,2065,523],{"class":529},[423,2067,454],{"class":433},[423,2069,2070],{"class":450},"missing user:",[423,2072,454],{"class":433},[423,2074,573],{"class":433},[423,2076,576],{"class":437},[423,2078,590],{"class":433},[423,2080,2081],{"class":437},"errorData",[423,2083,636],{"class":433},[423,2085,2086],{"class":437},"requestedId",[423,2088,545],{"class":529},[423,2090,457],{"class":433},[423,2092,2093,2096],{"class":425,"line":1089},[423,2094,2095],{"class":429},"      break",[423,2097,457],{"class":433},[423,2099,2100,2102,2104,2107,2109],{"class":425,"line":1114},[423,2101,2040],{"class":429},[423,2103,447],{"class":433},[423,2105,2106],{"class":450},"validation-error",[423,2108,454],{"class":433},[423,2110,2049],{"class":433},[423,2112,2113,2115,2117,2119,2121,2123,2126,2128,2130,2132,2134,2136,2138,2141,2143,2146,2148],{"class":425,"line":1120},[423,2114,2059],{"class":437},[423,2116,590],{"class":433},[423,2118,672],{"class":510},[423,2120,523],{"class":529},[423,2122,454],{"class":433},[423,2124,2125],{"class":450},"type errors:",[423,2127,454],{"class":433},[423,2129,573],{"class":433},[423,2131,576],{"class":437},[423,2133,590],{"class":433},[423,2135,2081],{"class":437},[423,2137,636],{"class":433},[423,2139,2140],{"class":437},"typeErrors",[423,2142,590],{"class":433},[423,2144,2145],{"class":437},"length",[423,2147,545],{"class":529},[423,2149,457],{"class":433},[423,2151,2152,2154],{"class":425,"line":1128},[423,2153,2095],{"class":429},[423,2155,457],{"class":433},[423,2157,2158],{"class":425,"line":1134},[423,2159,2160],{"class":433},"  }\n",[423,2162,2163,2165,2167,2169,2171,2173,2176,2178,2181],{"class":425,"line":1146},[423,2164,441],{"class":433},[423,2166,693],{"class":429},[423,2168,696],{"class":429},[423,2170,1005],{"class":437},[423,2172,1438],{"class":510},[423,2174,2175],{"class":437},"(response",[423,2177,590],{"class":433},[423,2179,2180],{"class":437},"auth)) ",[423,2182,655],{"class":433},[423,2184,2185],{"class":425,"line":1151},[423,2186,2187],{"class":558},"  \u002F\u002F the middleware's declared error; its onError hook gets it strongly typed\n",[423,2189,2190,2192,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216,2218],{"class":425,"line":1173},[423,2191,667],{"class":437},[423,2193,590],{"class":433},[423,2195,672],{"class":510},[423,2197,523],{"class":529},[423,2199,454],{"class":433},[423,2201,1688],{"class":450},[423,2203,454],{"class":433},[423,2205,573],{"class":433},[423,2207,1557],{"class":437},[423,2209,590],{"class":433},[423,2211,1669],{"class":437},[423,2213,590],{"class":433},[423,2215,1703],{"class":437},[423,2217,545],{"class":529},[423,2219,457],{"class":433},[423,2221,2222,2224,2226,2228,2231],{"class":425,"line":1178},[423,2223,441],{"class":433},[423,2225,693],{"class":429},[423,2227,696],{"class":429},[423,2229,2230],{"class":437}," (thrown) ",[423,2232,655],{"class":433},[423,2234,2236],{"class":425,"line":2235},27,[423,2237,2238],{"class":558},"  \u002F\u002F transport, platform or any undeclared error lands here\n",[423,2240,2242,2244,2246,2248,2250,2252,2255,2257,2259,2261,2263,2266,2268,2270,2272,2274],{"class":425,"line":2241},28,[423,2243,667],{"class":437},[423,2245,590],{"class":433},[423,2247,672],{"class":510},[423,2249,523],{"class":529},[423,2251,454],{"class":433},[423,2253,2254],{"class":450},"request failed:",[423,2256,454],{"class":433},[423,2258,573],{"class":433},[423,2260,1727],{"class":437},[423,2262,1735],{"class":529},[423,2264,2265],{"class":1606},"0",[423,2267,579],{"class":529},[423,2269,590],{"class":433},[423,2271,1703],{"class":437},[423,2273,545],{"class":529},[423,2275,457],{"class":433},[423,2277,2279,2281,2283],{"class":425,"line":2278},29,[423,2280,441],{"class":433},[423,2282,693],{"class":429},[423,2284,926],{"class":433},[423,2286,2288,2290,2292,2294,2296,2298,2300,2302,2304,2306],{"class":425,"line":2287},30,[423,2289,667],{"class":437},[423,2291,590],{"class":433},[423,2293,672],{"class":510},[423,2295,523],{"class":529},[423,2297,570],{"class":437},[423,2299,636],{"class":433},[423,2301,780],{"class":437},[423,2303,545],{"class":529},[423,2305,895],{"class":433},[423,2307,1423],{"class":558},[423,2309,2311],{"class":425,"line":2310},31,[423,2312,790],{"class":433},[423,2314,2316],{"class":425,"line":2315},32,[423,2317,490],{"emptyLinePlaceholder":489},[423,2319,2321],{"class":425,"line":2320},33,[423,2322,2323],{"class":558},"\u002F\u002F typeErrors() is the only method that can throw\n",[423,2325,2327,2330],{"class":425,"line":2326},34,[423,2328,2329],{"class":429},"try",[423,2331,926],{"class":433},[423,2333,2335,2338,2341,2343,2345,2347,2349,2351,2353,2355,2357,2360,2363,2366,2368,2370,2372,2374],{"class":425,"line":2334},35,[423,2336,2337],{"class":496},"  const",[423,2339,2340],{"class":437}," errors",[423,2342,507],{"class":433},[423,2344,584],{"class":429},[423,2346,587],{"class":437},[423,2348,590],{"class":433},[423,2350,593],{"class":437},[423,2352,590],{"class":433},[423,2354,598],{"class":510},[423,2356,523],{"class":529},[423,2358,2359],{"class":433},"null",[423,2361,2362],{"class":429}," as",[423,2364,2365],{"class":517}," any",[423,2367,545],{"class":529},[423,2369,590],{"class":433},[423,2371,2140],{"class":510},[423,2373,617],{"class":529},[423,2375,457],{"class":433},[423,2377,2379,2381,2383,2385,2387,2390,2392,2394],{"class":425,"line":2378},36,[423,2380,667],{"class":437},[423,2382,590],{"class":433},[423,2384,672],{"class":510},[423,2386,523],{"class":529},[423,2388,2389],{"class":437},"errors",[423,2391,545],{"class":529},[423,2393,895],{"class":433},[423,2395,2396],{"class":558}," \u002F\u002F [] (empty array if no errors)\n",[423,2398,2400,2402,2405,2407,2410,2412,2414,2416],{"class":425,"line":2399},37,[423,2401,441],{"class":433},[423,2403,2404],{"class":429}," catch",[423,2406,1005],{"class":433},[423,2408,2409],{"class":961},"validationError",[423,2411,533],{"class":433},[423,2413,2365],{"class":517},[423,2415,545],{"class":433},[423,2417,926],{"class":433},[423,2419,2421],{"class":425,"line":2420},38,[423,2422,2423],{"class":558},"  \u002F\u002F { type: 'validation-error', message: `Invalid params ...` }\n",[423,2425,2427,2429,2431,2433,2435,2437,2439],{"class":425,"line":2426},39,[423,2428,667],{"class":437},[423,2430,590],{"class":433},[423,2432,672],{"class":510},[423,2434,523],{"class":529},[423,2436,2409],{"class":437},[423,2438,545],{"class":529},[423,2440,457],{"class":433},[423,2442,2444],{"class":425,"line":2443},40,[423,2445,790],{"class":433},[412,2447,2449],{"className":414,"code":2448,"filename":794,"language":417,"meta":418,"style":418},"import {RpcError, FatalError} from '@mionjs\u002Fcore';\nimport {createMionRouter, Routes} from '@mionjs\u002Frouter';\nimport {getSession} from '.\u002Fsession.ts';\n\nconst mion = createMionRouter();\n\nexport type User = {id: string; name: string};\nexport type NotAuthorizedData = {reason: 'no-session' | 'expired-session'};\nexport type UserNotFoundData = {requestedId: string};\n\nconst routes = {\n  \u002F\u002F reads the HttpOnly session cookie; a returned FatalError ends the request and reaches the client typed, errorData included\n  auth: mion.middleware(\n    (ctx): void | FatalError\u003C'not-authorized', NotAuthorizedData> => {\n      if (!getSession(ctx.request.headers.get('cookie'))) {\n        return new FatalError({\n          publicMessage: 'Not Authorized',\n          type: 'not-authorized',\n          errorData: {reason: 'no-session'},\n        });\n      }\n    }\n  ),\n  users: {\n    getById: mion.route(\n      (\n        ctx,\n        id: string\n      ): User | RpcError\u003C'user-not-found', UserNotFoundData> => {\n        if (id !== 'USER-123') {\n          return new RpcError({\n            publicMessage: `User ${id} not found`,\n            type: 'user-not-found',\n            errorData: {requestedId: id},\n          });\n        }\n        return {id, name: 'John'};\n      }\n    ),\n  },\n} satisfies Routes;\n\nconst myApi = mion.initRoutes(routes);\n\nexport type MyApi = typeof myApi;\n",[420,2450,2451,2476,2500,2522,2526,2540,2544,2572,2608,2629,2633,2643,2648,2664,2699,2743,2755,2771,2786,2808,2817,2821,2826,2833,2841,2855,2860,2867,2872,2903,2923,2935,2957,2971,2988,2996,3001,3023,3027,3033,3037,3048,3053,3072,3077],{"__ignoreMap":418},[423,2452,2453,2455,2457,2459,2461,2464,2466,2468,2470,2472,2474],{"class":425,"line":426},[423,2454,430],{"class":429},[423,2456,434],{"class":433},[423,2458,805],{"class":437},[423,2460,573],{"class":433},[423,2462,2463],{"class":437}," FatalError",[423,2465,441],{"class":433},[423,2467,444],{"class":429},[423,2469,447],{"class":433},[423,2471,814],{"class":450},[423,2473,454],{"class":433},[423,2475,457],{"class":433},[423,2477,2478,2480,2482,2484,2486,2488,2490,2492,2494,2496,2498],{"class":425,"line":460},[423,2479,430],{"class":429},[423,2481,434],{"class":433},[423,2483,827],{"class":437},[423,2485,573],{"class":433},[423,2487,832],{"class":437},[423,2489,441],{"class":433},[423,2491,444],{"class":429},[423,2493,447],{"class":433},[423,2495,841],{"class":450},[423,2497,454],{"class":433},[423,2499,457],{"class":433},[423,2501,2502,2504,2506,2509,2511,2513,2515,2518,2520],{"class":425,"line":486},[423,2503,430],{"class":429},[423,2505,434],{"class":433},[423,2507,2508],{"class":437},"getSession",[423,2510,441],{"class":433},[423,2512,444],{"class":429},[423,2514,447],{"class":433},[423,2516,2517],{"class":450},".\u002Fsession.ts",[423,2519,454],{"class":433},[423,2521,457],{"class":433},[423,2523,2524],{"class":425,"line":493},[423,2525,490],{"emptyLinePlaceholder":489},[423,2527,2528,2530,2532,2534,2536,2538],{"class":425,"line":550},[423,2529,497],{"class":496},[423,2531,856],{"class":437},[423,2533,859],{"class":433},[423,2535,862],{"class":510},[423,2537,617],{"class":437},[423,2539,457],{"class":433},[423,2541,2542],{"class":425,"line":555},[423,2543,490],{"emptyLinePlaceholder":489},[423,2545,2546,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570],{"class":425,"line":562},[423,2547,875],{"class":429},[423,2549,465],{"class":496},[423,2551,880],{"class":517},[423,2553,507],{"class":433},[423,2555,434],{"class":433},[423,2557,887],{"class":529},[423,2559,533],{"class":433},[423,2561,892],{"class":517},[423,2563,895],{"class":433},[423,2565,898],{"class":529},[423,2567,533],{"class":433},[423,2569,892],{"class":517},[423,2571,905],{"class":433},[423,2573,2574,2576,2578,2581,2583,2585,2588,2590,2592,2595,2597,2599,2601,2604,2606],{"class":425,"line":622},[423,2575,875],{"class":429},[423,2577,465],{"class":496},[423,2579,2580],{"class":517}," NotAuthorizedData",[423,2582,507],{"class":433},[423,2584,434],{"class":433},[423,2586,2587],{"class":529},"reason",[423,2589,533],{"class":433},[423,2591,447],{"class":433},[423,2593,2594],{"class":450},"no-session",[423,2596,454],{"class":433},[423,2598,979],{"class":433},[423,2600,447],{"class":433},[423,2602,2603],{"class":450},"expired-session",[423,2605,454],{"class":433},[423,2607,905],{"class":433},[423,2609,2610,2612,2614,2617,2619,2621,2623,2625,2627],{"class":425,"line":627},[423,2611,875],{"class":429},[423,2613,465],{"class":496},[423,2615,2616],{"class":517}," UserNotFoundData",[423,2618,507],{"class":433},[423,2620,434],{"class":433},[423,2622,2086],{"class":529},[423,2624,533],{"class":433},[423,2626,892],{"class":517},[423,2628,905],{"class":433},[423,2630,2631],{"class":425,"line":658},[423,2632,490],{"emptyLinePlaceholder":489},[423,2634,2635,2637,2639,2641],{"class":425,"line":664},[423,2636,497],{"class":496},[423,2638,921],{"class":437},[423,2640,859],{"class":433},[423,2642,926],{"class":433},[423,2644,2645],{"class":425,"line":688},[423,2646,2647],{"class":558},"  \u002F\u002F reads the HttpOnly session cookie; a returned FatalError ends the request and reaches the client typed, errorData included\n",[423,2649,2650,2653,2655,2657,2659,2662],{"class":425,"line":704},[423,2651,2652],{"class":529},"  auth",[423,2654,533],{"class":433},[423,2656,945],{"class":437},[423,2658,590],{"class":433},[423,2660,2661],{"class":510},"middleware",[423,2663,953],{"class":437},[423,2665,2666,2669,2671,2673,2676,2678,2680,2682,2684,2687,2689,2691,2693,2695,2697],{"class":425,"line":710},[423,2667,2668],{"class":433},"    (",[423,2670,962],{"class":961},[423,2672,974],{"class":433},[423,2674,2675],{"class":517}," void",[423,2677,979],{"class":433},[423,2679,2463],{"class":517},[423,2681,514],{"class":433},[423,2683,454],{"class":433},[423,2685,2686],{"class":450},"not-authorized",[423,2688,454],{"class":433},[423,2690,573],{"class":433},[423,2692,2580],{"class":517},[423,2694,520],{"class":433},[423,2696,995],{"class":496},[423,2698,926],{"class":433},[423,2700,2701,2704,2706,2708,2710,2712,2714,2716,2719,2721,2724,2726,2729,2731,2733,2736,2738,2741],{"class":425,"line":741},[423,2702,2703],{"class":429},"      if",[423,2705,1005],{"class":529},[423,2707,1631],{"class":433},[423,2709,2508],{"class":510},[423,2711,523],{"class":529},[423,2713,962],{"class":437},[423,2715,590],{"class":433},[423,2717,2718],{"class":437},"request",[423,2720,590],{"class":433},[423,2722,2723],{"class":437},"headers",[423,2725,590],{"class":433},[423,2727,2728],{"class":510},"get",[423,2730,523],{"class":529},[423,2732,454],{"class":433},[423,2734,2735],{"class":450},"cookie",[423,2737,454],{"class":433},[423,2739,2740],{"class":529},"))) ",[423,2742,655],{"class":433},[423,2744,2745,2747,2749,2751,2753],{"class":425,"line":755},[423,2746,1092],{"class":429},[423,2748,1027],{"class":433},[423,2750,2463],{"class":510},[423,2752,523],{"class":529},[423,2754,655],{"class":433},[423,2756,2757,2760,2762,2764,2767,2769],{"class":425,"line":787},[423,2758,2759],{"class":529},"          publicMessage",[423,2761,533],{"class":433},[423,2763,447],{"class":433},[423,2765,2766],{"class":450},"Not Authorized",[423,2768,454],{"class":433},[423,2770,1062],{"class":433},[423,2772,2773,2776,2778,2780,2782,2784],{"class":425,"line":1089},[423,2774,2775],{"class":529},"          type",[423,2777,533],{"class":433},[423,2779,447],{"class":433},[423,2781,2686],{"class":450},[423,2783,454],{"class":433},[423,2785,1062],{"class":433},[423,2787,2788,2791,2793,2795,2797,2799,2801,2803,2805],{"class":425,"line":1114},[423,2789,2790],{"class":529},"          errorData",[423,2792,533],{"class":433},[423,2794,434],{"class":433},[423,2796,2587],{"class":529},[423,2798,533],{"class":433},[423,2800,447],{"class":433},[423,2802,2594],{"class":450},[423,2804,454],{"class":433},[423,2806,2807],{"class":433},"},\n",[423,2809,2810,2813,2815],{"class":425,"line":1120},[423,2811,2812],{"class":433},"        }",[423,2814,545],{"class":529},[423,2816,457],{"class":433},[423,2818,2819],{"class":425,"line":1128},[423,2820,1117],{"class":433},[423,2822,2823],{"class":425,"line":1134},[423,2824,2825],{"class":433},"    }\n",[423,2827,2828,2831],{"class":425,"line":1146},[423,2829,2830],{"class":437},"  )",[423,2832,1062],{"class":433},[423,2834,2835,2837,2839],{"class":425,"line":1151},[423,2836,931],{"class":529},[423,2838,533],{"class":433},[423,2840,926],{"class":433},[423,2842,2843,2845,2847,2849,2851,2853],{"class":425,"line":1173},[423,2844,940],{"class":529},[423,2846,533],{"class":433},[423,2848,945],{"class":437},[423,2850,590],{"class":433},[423,2852,950],{"class":510},[423,2854,953],{"class":437},[423,2856,2857],{"class":425,"line":1178},[423,2858,2859],{"class":437},"      (\n",[423,2861,2862,2865],{"class":425,"line":2235},[423,2863,2864],{"class":437},"        ctx",[423,2866,1062],{"class":433},[423,2868,2869],{"class":425,"line":2241},[423,2870,2871],{"class":437},"        id: string\n",[423,2873,2874,2877,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2899,2901],{"class":425,"line":2278},[423,2875,2876],{"class":437},"      )",[423,2878,533],{"class":433},[423,2880,880],{"class":517},[423,2882,979],{"class":433},[423,2884,982],{"class":517},[423,2886,514],{"class":433},[423,2888,454],{"class":433},[423,2890,647],{"class":450},[423,2892,454],{"class":433},[423,2894,573],{"class":433},[423,2896,2616],{"class":517},[423,2898,520],{"class":433},[423,2900,995],{"class":496},[423,2902,926],{"class":433},[423,2904,2905,2907,2909,2911,2913,2915,2917,2919,2921],{"class":425,"line":2287},[423,2906,1002],{"class":429},[423,2908,1005],{"class":529},[423,2910,887],{"class":437},[423,2912,1010],{"class":433},[423,2914,447],{"class":433},[423,2916,1584],{"class":450},[423,2918,454],{"class":433},[423,2920,652],{"class":529},[423,2922,655],{"class":433},[423,2924,2925,2927,2929,2931,2933],{"class":425,"line":2310},[423,2926,1024],{"class":429},[423,2928,1027],{"class":433},[423,2930,982],{"class":510},[423,2932,523],{"class":529},[423,2934,655],{"class":433},[423,2936,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955],{"class":425,"line":2315},[423,2938,1038],{"class":529},[423,2940,533],{"class":433},[423,2942,1043],{"class":433},[423,2944,1046],{"class":450},[423,2946,1049],{"class":433},[423,2948,887],{"class":437},[423,2950,441],{"class":433},[423,2952,1056],{"class":450},[423,2954,1059],{"class":433},[423,2956,1062],{"class":433},[423,2958,2959,2961,2963,2965,2967,2969],{"class":425,"line":2320},[423,2960,1067],{"class":529},[423,2962,533],{"class":433},[423,2964,447],{"class":433},[423,2966,647],{"class":450},[423,2968,454],{"class":433},[423,2970,1062],{"class":433},[423,2972,2973,2976,2978,2980,2982,2984,2986],{"class":425,"line":2326},[423,2974,2975],{"class":529},"            errorData",[423,2977,533],{"class":433},[423,2979,434],{"class":433},[423,2981,2086],{"class":529},[423,2983,533],{"class":433},[423,2985,967],{"class":437},[423,2987,2807],{"class":433},[423,2989,2990,2992,2994],{"class":425,"line":2334},[423,2991,1082],{"class":433},[423,2993,545],{"class":529},[423,2995,457],{"class":433},[423,2997,2998],{"class":425,"line":2378},[423,2999,3000],{"class":433},"        }\n",[423,3002,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021],{"class":425,"line":2399},[423,3004,1092],{"class":429},[423,3006,434],{"class":433},[423,3008,887],{"class":437},[423,3010,573],{"class":433},[423,3012,898],{"class":529},[423,3014,533],{"class":433},[423,3016,447],{"class":433},[423,3018,1107],{"class":450},[423,3020,454],{"class":433},[423,3022,905],{"class":433},[423,3024,3025],{"class":425,"line":2420},[423,3026,1117],{"class":433},[423,3028,3029,3031],{"class":425,"line":2426},[423,3030,1123],{"class":437},[423,3032,1062],{"class":433},[423,3034,3035],{"class":425,"line":2443},[423,3036,1131],{"class":433},[423,3038,3040,3042,3044,3046],{"class":425,"line":3039},41,[423,3041,441],{"class":433},[423,3043,1139],{"class":429},[423,3045,832],{"class":517},[423,3047,457],{"class":433},[423,3049,3051],{"class":425,"line":3050},42,[423,3052,490],{"emptyLinePlaceholder":489},[423,3054,3056,3058,3060,3062,3064,3066,3068,3070],{"class":425,"line":3055},43,[423,3057,497],{"class":496},[423,3059,1156],{"class":437},[423,3061,859],{"class":433},[423,3063,945],{"class":437},[423,3065,590],{"class":433},[423,3067,1165],{"class":510},[423,3069,1168],{"class":437},[423,3071,457],{"class":433},[423,3073,3075],{"class":425,"line":3074},44,[423,3076,490],{"emptyLinePlaceholder":489},[423,3078,3080,3082,3084,3086,3088,3090,3092],{"class":425,"line":3079},45,[423,3081,875],{"class":429},[423,3083,465],{"class":496},[423,3085,1185],{"class":517},[423,3087,507],{"class":433},[423,3089,1190],{"class":433},[423,3091,1193],{"class":437},[423,3093,457],{"class":433},[1197,3095,3097],{"id":3096},"middleware-errors","Middleware Errors",[405,3099,3100,3101,3104,3105,3107,3108,590],{},"A middleware's declared errors reach its ",[420,3102,3103],{},"onError"," hook and its path in the response, both strongly typed. Use the hook for app-wide handling, like a logout on ",[420,3106,2686],{},". To send a middleware its data, see ",[3109,3110,3112],"a",{"href":3111},"\u002Frpc\u002Fclient\u002Fclient-middleware#middleware-hooks","Middleware Hooks",[3114,3115,3116,3117,3119],"warning",{},"Hooks run on every request that includes the middleware, whether or not you also read the response. Every ",[420,3118,3103],{}," for an error type runs, in the order added.",[3121,3122,3123],"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 .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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}","Handle errors in the mion client with the Result pattern.","md",null,{"toc":24},{"title":48,"description":3124},"f2KaWtdzqNaoeaEJi_jl6MeDBNn4Jy4M40NbAFE1awM",1793324370346]