[{"data":1,"prerenderedAt":3720},["ShallowReactive",2],{"navigation_docs":3,"-rpc-client-cancellation-timeouts":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":99,"body":401,"description":3714,"extension":3715,"links":3716,"meta":3717,"navigation":505,"path":100,"seo":3718,"stem":101,"__hash__":3719},"docs\u002F01.rpc\u002F04.client\u002F04.cancellation-timeouts.md",{"type":402,"value":403},"minimark",[404,425,1002,1009,1014,1026,1446,1450,1456,1918,1922,1928,2589,2596,2600,2607,3662,3665,3669,3684,3696,3699,3710],[405,406,407,408,412,413,416,417,420,421,424],"p",{},"Cancel any call with a standard ",[409,410,411],"code",{},"AbortController",": pass its signal in the ",[409,414,415],{},"call()"," setup object. A cancelled request comes back as ",[409,418,419],{},"request-aborted"," in ",[409,422,423],{},"response['@thrownErrors']",", never in the route's typed error union.",[426,427,428,807],"code-split",{},[429,430,436],"pre",{"className":431,"code":432,"filename":433,"language":434,"meta":435,"style":435},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {initClient} from '@mionjs\u002Fclient';\nimport type {MyApi} from '.\u002Fhello.routes.ts';\n\nconst {routes} = initClient\u003CMyApi>({baseURL: 'http:\u002F\u002Flocalhost:3000'});\n\nconst controller = new AbortController();\n\nconst resultPromise = routes.sayHello('John').call({signal: controller.signal});\n\n\u002F\u002F e.g. on component unmount or a user action\ncontroller.abort();\n\nconst [greeting, , response] = await resultPromise;\nif (response['@thrownErrors']?.[0].type === 'request-aborted')\n  console.log('Request was canceled');\nelse console.log(greeting);\n","client.ts","ts","",[409,437,438,474,500,507,564,569,591,596,653,658,665,680,685,718,765,789],{"__ignoreMap":435},[439,440,443,447,451,455,458,461,464,468,471],"span",{"class":441,"line":442},"line",1,[439,444,446],{"class":445},"s7zQu","import",[439,448,450],{"class":449},"sMK4o"," {",[439,452,454],{"class":453},"sTEyZ","initClient",[439,456,457],{"class":449},"}",[439,459,460],{"class":445}," from",[439,462,463],{"class":449}," '",[439,465,467],{"class":466},"sfazB","@mionjs\u002Fclient",[439,469,470],{"class":449},"'",[439,472,473],{"class":449},";\n",[439,475,477,479,482,484,487,489,491,493,496,498],{"class":441,"line":476},2,[439,478,446],{"class":445},[439,480,481],{"class":445}," type",[439,483,450],{"class":449},[439,485,486],{"class":453},"MyApi",[439,488,457],{"class":449},[439,490,460],{"class":445},[439,492,463],{"class":449},[439,494,495],{"class":466},".\u002Fhello.routes.ts",[439,497,470],{"class":449},[439,499,473],{"class":449},[439,501,503],{"class":441,"line":502},3,[439,504,506],{"emptyLinePlaceholder":505},true,"\n",[439,508,510,514,516,519,521,524,528,531,534,537,540,543,547,550,552,555,557,559,562],{"class":441,"line":509},4,[439,511,513],{"class":512},"spNyl","const",[439,515,450],{"class":449},[439,517,518],{"class":453},"routes",[439,520,457],{"class":449},[439,522,523],{"class":449}," =",[439,525,527],{"class":526},"s2Zo4"," initClient",[439,529,530],{"class":449},"\u003C",[439,532,486],{"class":533},"sBMFI",[439,535,536],{"class":449},">",[439,538,539],{"class":453},"(",[439,541,542],{"class":449},"{",[439,544,546],{"class":545},"swJcz","baseURL",[439,548,549],{"class":449},":",[439,551,463],{"class":449},[439,553,554],{"class":466},"http:\u002F\u002Flocalhost:3000",[439,556,470],{"class":449},[439,558,457],{"class":449},[439,560,561],{"class":453},")",[439,563,473],{"class":449},[439,565,567],{"class":441,"line":566},5,[439,568,506],{"emptyLinePlaceholder":505},[439,570,572,574,577,580,583,586,589],{"class":441,"line":571},6,[439,573,513],{"class":512},[439,575,576],{"class":453}," controller ",[439,578,579],{"class":449},"=",[439,581,582],{"class":449}," new",[439,584,585],{"class":526}," AbortController",[439,587,588],{"class":453},"()",[439,590,473],{"class":449},[439,592,594],{"class":441,"line":593},7,[439,595,506],{"emptyLinePlaceholder":505},[439,597,599,601,604,606,609,612,615,617,619,622,624,626,628,631,633,635,638,640,643,645,647,649,651],{"class":441,"line":598},8,[439,600,513],{"class":512},[439,602,603],{"class":453}," resultPromise ",[439,605,579],{"class":449},[439,607,608],{"class":453}," routes",[439,610,611],{"class":449},".",[439,613,614],{"class":526},"sayHello",[439,616,539],{"class":453},[439,618,470],{"class":449},[439,620,621],{"class":466},"John",[439,623,470],{"class":449},[439,625,561],{"class":453},[439,627,611],{"class":449},[439,629,630],{"class":526},"call",[439,632,539],{"class":453},[439,634,542],{"class":449},[439,636,637],{"class":545},"signal",[439,639,549],{"class":449},[439,641,642],{"class":453}," controller",[439,644,611],{"class":449},[439,646,637],{"class":453},[439,648,457],{"class":449},[439,650,561],{"class":453},[439,652,473],{"class":449},[439,654,656],{"class":441,"line":655},9,[439,657,506],{"emptyLinePlaceholder":505},[439,659,661],{"class":441,"line":660},10,[439,662,664],{"class":663},"sHwdD","\u002F\u002F e.g. on component unmount or a user action\n",[439,666,668,671,673,676,678],{"class":441,"line":667},11,[439,669,670],{"class":453},"controller",[439,672,611],{"class":449},[439,674,675],{"class":526},"abort",[439,677,588],{"class":453},[439,679,473],{"class":449},[439,681,683],{"class":441,"line":682},12,[439,684,506],{"emptyLinePlaceholder":505},[439,686,688,690,693,696,699,702,705,708,710,713,716],{"class":441,"line":687},13,[439,689,513],{"class":512},[439,691,692],{"class":449}," [",[439,694,695],{"class":453},"greeting",[439,697,698],{"class":449},",",[439,700,701],{"class":449}," ,",[439,703,704],{"class":453}," response",[439,706,707],{"class":449},"]",[439,709,523],{"class":449},[439,711,712],{"class":445}," await",[439,714,715],{"class":453}," resultPromise",[439,717,473],{"class":449},[439,719,721,724,727,729,732,734,736,739,742,746,748,750,753,756,758,760,762],{"class":441,"line":720},14,[439,722,723],{"class":445},"if",[439,725,726],{"class":453}," (response[",[439,728,470],{"class":449},[439,730,731],{"class":466},"@thrownErrors",[439,733,470],{"class":449},[439,735,707],{"class":453},[439,737,738],{"class":449},"?.",[439,740,741],{"class":453},"[",[439,743,745],{"class":744},"sbssI","0",[439,747,707],{"class":453},[439,749,611],{"class":449},[439,751,752],{"class":453},"type ",[439,754,755],{"class":449},"===",[439,757,463],{"class":449},[439,759,419],{"class":466},[439,761,470],{"class":449},[439,763,764],{"class":453},")\n",[439,766,768,771,773,776,778,780,783,785,787],{"class":441,"line":767},15,[439,769,770],{"class":453},"  console",[439,772,611],{"class":449},[439,774,775],{"class":526},"log",[439,777,539],{"class":453},[439,779,470],{"class":449},[439,781,782],{"class":466},"Request was canceled",[439,784,470],{"class":449},[439,786,561],{"class":453},[439,788,473],{"class":449},[439,790,792,795,798,800,802,805],{"class":441,"line":791},16,[439,793,794],{"class":445},"else",[439,796,797],{"class":453}," console",[439,799,611],{"class":449},[439,801,775],{"class":526},[439,803,804],{"class":453},"(greeting)",[439,806,473],{"class":449},[429,808,811],{"className":431,"code":809,"filename":810,"language":434,"meta":435,"style":435},"import {createMionRouter, Routes} from '@mionjs\u002Frouter';\n\nconst mion = createMionRouter();\n\nconst routes = {\n  sayHello: mion.route((ctx, name: string): string => `Hello ${name}`),\n} satisfies Routes;\n\nconst myApi = mion.initRoutes(routes);\n\n\u002F\u002F the type the client uses, no server code ever reaches the browser\nexport type MyApi = typeof myApi;\n","server.routes.ts",[409,812,813,840,844,860,864,876,937,948,952,973,977,982],{"__ignoreMap":435},[439,814,815,817,819,822,824,827,829,831,833,836,838],{"class":441,"line":442},[439,816,446],{"class":445},[439,818,450],{"class":449},[439,820,821],{"class":453},"createMionRouter",[439,823,698],{"class":449},[439,825,826],{"class":453}," Routes",[439,828,457],{"class":449},[439,830,460],{"class":445},[439,832,463],{"class":449},[439,834,835],{"class":466},"@mionjs\u002Frouter",[439,837,470],{"class":449},[439,839,473],{"class":449},[439,841,842],{"class":441,"line":476},[439,843,506],{"emptyLinePlaceholder":505},[439,845,846,848,851,853,856,858],{"class":441,"line":502},[439,847,513],{"class":512},[439,849,850],{"class":453}," mion ",[439,852,579],{"class":449},[439,854,855],{"class":526}," createMionRouter",[439,857,588],{"class":453},[439,859,473],{"class":449},[439,861,862],{"class":441,"line":509},[439,863,506],{"emptyLinePlaceholder":505},[439,865,866,868,871,873],{"class":441,"line":566},[439,867,513],{"class":512},[439,869,870],{"class":453}," routes ",[439,872,579],{"class":449},[439,874,875],{"class":449}," {\n",[439,877,878,881,883,886,888,891,893,895,899,901,904,906,909,912,914,917,920,923,926,929,932,934],{"class":441,"line":571},[439,879,880],{"class":545},"  sayHello",[439,882,549],{"class":449},[439,884,885],{"class":453}," mion",[439,887,611],{"class":449},[439,889,890],{"class":526},"route",[439,892,539],{"class":453},[439,894,539],{"class":449},[439,896,898],{"class":897},"sHdIc","ctx",[439,900,698],{"class":449},[439,902,903],{"class":897}," name",[439,905,549],{"class":449},[439,907,908],{"class":533}," string",[439,910,911],{"class":449},"):",[439,913,908],{"class":533},[439,915,916],{"class":512}," =>",[439,918,919],{"class":449}," `",[439,921,922],{"class":466},"Hello ",[439,924,925],{"class":449},"${",[439,927,928],{"class":453},"name",[439,930,931],{"class":449},"}`",[439,933,561],{"class":453},[439,935,936],{"class":449},",\n",[439,938,939,941,944,946],{"class":441,"line":593},[439,940,457],{"class":449},[439,942,943],{"class":445}," satisfies",[439,945,826],{"class":533},[439,947,473],{"class":449},[439,949,950],{"class":441,"line":598},[439,951,506],{"emptyLinePlaceholder":505},[439,953,954,956,959,961,963,965,968,971],{"class":441,"line":655},[439,955,513],{"class":512},[439,957,958],{"class":453}," myApi ",[439,960,579],{"class":449},[439,962,885],{"class":453},[439,964,611],{"class":449},[439,966,967],{"class":526},"initRoutes",[439,969,970],{"class":453},"(routes)",[439,972,473],{"class":449},[439,974,975],{"class":441,"line":660},[439,976,506],{"emptyLinePlaceholder":505},[439,978,979],{"class":441,"line":667},[439,980,981],{"class":663},"\u002F\u002F the type the client uses, no server code ever reaches the browser\n",[439,983,984,987,989,992,994,997,1000],{"class":441,"line":682},[439,985,986],{"class":445},"export",[439,988,481],{"class":512},[439,990,991],{"class":533}," MyApi",[439,993,523],{"class":449},[439,995,996],{"class":449}," typeof",[439,998,999],{"class":453}," myApi",[439,1001,473],{"class":449},[1003,1004,1005,1006,1008],"tip",{},"A cancel started by the user is not a failure. Ignore ",[409,1007,419],{}," in your UI instead of showing an error.",[1010,1011,1013],"h2",{"id":1012},"per-request-timeout","Per-Request Timeout",[405,1015,1016,1017,1020,1021,420,1024,611],{},"Set a ",[409,1018,1019],{},"timeout"," in milliseconds to cancel a request that takes too long. It comes back as ",[409,1022,1023],{},"request-timeout",[409,1025,423],{},[426,1027,1028,1284],{},[429,1029,1031],{"className":431,"code":1030,"filename":433,"language":434,"meta":435,"style":435},"import {initClient} from '@mionjs\u002Fclient';\nimport type {MyApi} from '.\u002Fhello.routes.ts';\n\nconst {routes} = initClient\u003CMyApi>({baseURL: 'http:\u002F\u002Flocalhost:3000'});\n\n\u002F\u002F this request fails if it takes longer than 5 seconds\nconst [greeting, error, response] = await routes\n  .sayHello('John')\n  .call({timeout: 5000});\n\n\u002F\u002F transport failures never join the route's typed errors; each is an open RpcError\u003Cstring>\nif (response['@thrownErrors']?.[0].type === 'request-timeout')\n  console.log('Request took too long');\nelse if (!error) console.log(greeting);\n",[409,1032,1033,1053,1075,1079,1119,1123,1128,1154,1171,1194,1198,1203,1239,1260],{"__ignoreMap":435},[439,1034,1035,1037,1039,1041,1043,1045,1047,1049,1051],{"class":441,"line":442},[439,1036,446],{"class":445},[439,1038,450],{"class":449},[439,1040,454],{"class":453},[439,1042,457],{"class":449},[439,1044,460],{"class":445},[439,1046,463],{"class":449},[439,1048,467],{"class":466},[439,1050,470],{"class":449},[439,1052,473],{"class":449},[439,1054,1055,1057,1059,1061,1063,1065,1067,1069,1071,1073],{"class":441,"line":476},[439,1056,446],{"class":445},[439,1058,481],{"class":445},[439,1060,450],{"class":449},[439,1062,486],{"class":453},[439,1064,457],{"class":449},[439,1066,460],{"class":445},[439,1068,463],{"class":449},[439,1070,495],{"class":466},[439,1072,470],{"class":449},[439,1074,473],{"class":449},[439,1076,1077],{"class":441,"line":502},[439,1078,506],{"emptyLinePlaceholder":505},[439,1080,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117],{"class":441,"line":509},[439,1082,513],{"class":512},[439,1084,450],{"class":449},[439,1086,518],{"class":453},[439,1088,457],{"class":449},[439,1090,523],{"class":449},[439,1092,527],{"class":526},[439,1094,530],{"class":449},[439,1096,486],{"class":533},[439,1098,536],{"class":449},[439,1100,539],{"class":453},[439,1102,542],{"class":449},[439,1104,546],{"class":545},[439,1106,549],{"class":449},[439,1108,463],{"class":449},[439,1110,554],{"class":466},[439,1112,470],{"class":449},[439,1114,457],{"class":449},[439,1116,561],{"class":453},[439,1118,473],{"class":449},[439,1120,1121],{"class":441,"line":566},[439,1122,506],{"emptyLinePlaceholder":505},[439,1124,1125],{"class":441,"line":571},[439,1126,1127],{"class":663},"\u002F\u002F this request fails if it takes longer than 5 seconds\n",[439,1129,1130,1132,1134,1136,1138,1141,1143,1145,1147,1149,1151],{"class":441,"line":593},[439,1131,513],{"class":512},[439,1133,692],{"class":449},[439,1135,695],{"class":453},[439,1137,698],{"class":449},[439,1139,1140],{"class":453}," error",[439,1142,698],{"class":449},[439,1144,704],{"class":453},[439,1146,707],{"class":449},[439,1148,523],{"class":449},[439,1150,712],{"class":445},[439,1152,1153],{"class":453}," routes\n",[439,1155,1156,1159,1161,1163,1165,1167,1169],{"class":441,"line":598},[439,1157,1158],{"class":449},"  .",[439,1160,614],{"class":526},[439,1162,539],{"class":453},[439,1164,470],{"class":449},[439,1166,621],{"class":466},[439,1168,470],{"class":449},[439,1170,764],{"class":453},[439,1172,1173,1175,1177,1179,1181,1183,1185,1188,1190,1192],{"class":441,"line":655},[439,1174,1158],{"class":449},[439,1176,630],{"class":526},[439,1178,539],{"class":453},[439,1180,542],{"class":449},[439,1182,1019],{"class":545},[439,1184,549],{"class":449},[439,1186,1187],{"class":744}," 5000",[439,1189,457],{"class":449},[439,1191,561],{"class":453},[439,1193,473],{"class":449},[439,1195,1196],{"class":441,"line":660},[439,1197,506],{"emptyLinePlaceholder":505},[439,1199,1200],{"class":441,"line":667},[439,1201,1202],{"class":663},"\u002F\u002F transport failures never join the route's typed errors; each is an open RpcError\u003Cstring>\n",[439,1204,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237],{"class":441,"line":682},[439,1206,723],{"class":445},[439,1208,726],{"class":453},[439,1210,470],{"class":449},[439,1212,731],{"class":466},[439,1214,470],{"class":449},[439,1216,707],{"class":453},[439,1218,738],{"class":449},[439,1220,741],{"class":453},[439,1222,745],{"class":744},[439,1224,707],{"class":453},[439,1226,611],{"class":449},[439,1228,752],{"class":453},[439,1230,755],{"class":449},[439,1232,463],{"class":449},[439,1234,1023],{"class":466},[439,1236,470],{"class":449},[439,1238,764],{"class":453},[439,1240,1241,1243,1245,1247,1249,1251,1254,1256,1258],{"class":441,"line":687},[439,1242,770],{"class":453},[439,1244,611],{"class":449},[439,1246,775],{"class":526},[439,1248,539],{"class":453},[439,1250,470],{"class":449},[439,1252,1253],{"class":466},"Request took too long",[439,1255,470],{"class":449},[439,1257,561],{"class":453},[439,1259,473],{"class":449},[439,1261,1262,1264,1267,1270,1273,1276,1278,1280,1282],{"class":441,"line":720},[439,1263,794],{"class":445},[439,1265,1266],{"class":445}," if",[439,1268,1269],{"class":453}," (",[439,1271,1272],{"class":449},"!",[439,1274,1275],{"class":453},"error) console",[439,1277,611],{"class":449},[439,1279,775],{"class":526},[439,1281,804],{"class":453},[439,1283,473],{"class":449},[429,1285,1286],{"className":431,"code":809,"filename":810,"language":434,"meta":435,"style":435},[409,1287,1288,1312,1316,1330,1334,1344,1390,1400,1404,1422,1426,1430],{"__ignoreMap":435},[439,1289,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308,1310],{"class":441,"line":442},[439,1291,446],{"class":445},[439,1293,450],{"class":449},[439,1295,821],{"class":453},[439,1297,698],{"class":449},[439,1299,826],{"class":453},[439,1301,457],{"class":449},[439,1303,460],{"class":445},[439,1305,463],{"class":449},[439,1307,835],{"class":466},[439,1309,470],{"class":449},[439,1311,473],{"class":449},[439,1313,1314],{"class":441,"line":476},[439,1315,506],{"emptyLinePlaceholder":505},[439,1317,1318,1320,1322,1324,1326,1328],{"class":441,"line":502},[439,1319,513],{"class":512},[439,1321,850],{"class":453},[439,1323,579],{"class":449},[439,1325,855],{"class":526},[439,1327,588],{"class":453},[439,1329,473],{"class":449},[439,1331,1332],{"class":441,"line":509},[439,1333,506],{"emptyLinePlaceholder":505},[439,1335,1336,1338,1340,1342],{"class":441,"line":566},[439,1337,513],{"class":512},[439,1339,870],{"class":453},[439,1341,579],{"class":449},[439,1343,875],{"class":449},[439,1345,1346,1348,1350,1352,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1388],{"class":441,"line":571},[439,1347,880],{"class":545},[439,1349,549],{"class":449},[439,1351,885],{"class":453},[439,1353,611],{"class":449},[439,1355,890],{"class":526},[439,1357,539],{"class":453},[439,1359,539],{"class":449},[439,1361,898],{"class":897},[439,1363,698],{"class":449},[439,1365,903],{"class":897},[439,1367,549],{"class":449},[439,1369,908],{"class":533},[439,1371,911],{"class":449},[439,1373,908],{"class":533},[439,1375,916],{"class":512},[439,1377,919],{"class":449},[439,1379,922],{"class":466},[439,1381,925],{"class":449},[439,1383,928],{"class":453},[439,1385,931],{"class":449},[439,1387,561],{"class":453},[439,1389,936],{"class":449},[439,1391,1392,1394,1396,1398],{"class":441,"line":593},[439,1393,457],{"class":449},[439,1395,943],{"class":445},[439,1397,826],{"class":533},[439,1399,473],{"class":449},[439,1401,1402],{"class":441,"line":598},[439,1403,506],{"emptyLinePlaceholder":505},[439,1405,1406,1408,1410,1412,1414,1416,1418,1420],{"class":441,"line":655},[439,1407,513],{"class":512},[439,1409,958],{"class":453},[439,1411,579],{"class":449},[439,1413,885],{"class":453},[439,1415,611],{"class":449},[439,1417,967],{"class":526},[439,1419,970],{"class":453},[439,1421,473],{"class":449},[439,1423,1424],{"class":441,"line":660},[439,1425,506],{"emptyLinePlaceholder":505},[439,1427,1428],{"class":441,"line":667},[439,1429,981],{"class":663},[439,1431,1432,1434,1436,1438,1440,1442,1444],{"class":441,"line":682},[439,1433,986],{"class":445},[439,1435,481],{"class":512},[439,1437,991],{"class":533},[439,1439,523],{"class":449},[439,1441,996],{"class":449},[439,1443,999],{"class":453},[439,1445,473],{"class":449},[1010,1447,1449],{"id":1448},"default-timeout","Default Timeout",[405,1451,1452,1453,1455],{},"Set a default timeout for all requests in ",[409,1454,454],{},". A per-request timeout overrides it.",[426,1457,1458,1756],{},[429,1459,1461],{"className":431,"code":1460,"filename":433,"language":434,"meta":435,"style":435},"import {initClient} from '@mionjs\u002Fclient';\nimport type {MyApi} from '.\u002Fhello.routes.ts';\n\n\u002F\u002F every request times out after 10 seconds\nconst {routes} = initClient\u003CMyApi>({\n  baseURL: 'http:\u002F\u002Flocalhost:3000',\n  timeout: 10_000,\n});\n\n\u002F\u002F uses the 10s default timeout\nconst [greeting] = await routes.sayHello('John').call();\nconsole.log(greeting);\n\n\u002F\u002F 2s for this call only\nconst [, , response] = await routes.sayHello('Jane').call({timeout: 2000});\nif (response['@thrownErrors']?.[0].type === 'request-timeout')\n  console.log('too slow');\n",[409,1462,1463,1483,1505,1509,1514,1539,1554,1566,1574,1578,1583,1621,1634,1638,1643,1698,1734],{"__ignoreMap":435},[439,1464,1465,1467,1469,1471,1473,1475,1477,1479,1481],{"class":441,"line":442},[439,1466,446],{"class":445},[439,1468,450],{"class":449},[439,1470,454],{"class":453},[439,1472,457],{"class":449},[439,1474,460],{"class":445},[439,1476,463],{"class":449},[439,1478,467],{"class":466},[439,1480,470],{"class":449},[439,1482,473],{"class":449},[439,1484,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503],{"class":441,"line":476},[439,1486,446],{"class":445},[439,1488,481],{"class":445},[439,1490,450],{"class":449},[439,1492,486],{"class":453},[439,1494,457],{"class":449},[439,1496,460],{"class":445},[439,1498,463],{"class":449},[439,1500,495],{"class":466},[439,1502,470],{"class":449},[439,1504,473],{"class":449},[439,1506,1507],{"class":441,"line":502},[439,1508,506],{"emptyLinePlaceholder":505},[439,1510,1511],{"class":441,"line":509},[439,1512,1513],{"class":663},"\u002F\u002F every request times out after 10 seconds\n",[439,1515,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536],{"class":441,"line":566},[439,1517,513],{"class":512},[439,1519,450],{"class":449},[439,1521,518],{"class":453},[439,1523,457],{"class":449},[439,1525,523],{"class":449},[439,1527,527],{"class":526},[439,1529,530],{"class":449},[439,1531,486],{"class":533},[439,1533,536],{"class":449},[439,1535,539],{"class":453},[439,1537,1538],{"class":449},"{\n",[439,1540,1541,1544,1546,1548,1550,1552],{"class":441,"line":571},[439,1542,1543],{"class":545},"  baseURL",[439,1545,549],{"class":449},[439,1547,463],{"class":449},[439,1549,554],{"class":466},[439,1551,470],{"class":449},[439,1553,936],{"class":449},[439,1555,1556,1559,1561,1564],{"class":441,"line":593},[439,1557,1558],{"class":545},"  timeout",[439,1560,549],{"class":449},[439,1562,1563],{"class":744}," 10_000",[439,1565,936],{"class":449},[439,1567,1568,1570,1572],{"class":441,"line":598},[439,1569,457],{"class":449},[439,1571,561],{"class":453},[439,1573,473],{"class":449},[439,1575,1576],{"class":441,"line":655},[439,1577,506],{"emptyLinePlaceholder":505},[439,1579,1580],{"class":441,"line":660},[439,1581,1582],{"class":663},"\u002F\u002F uses the 10s default timeout\n",[439,1584,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605,1607,1609,1611,1613,1615,1617,1619],{"class":441,"line":667},[439,1586,513],{"class":512},[439,1588,692],{"class":449},[439,1590,695],{"class":453},[439,1592,707],{"class":449},[439,1594,523],{"class":449},[439,1596,712],{"class":445},[439,1598,608],{"class":453},[439,1600,611],{"class":449},[439,1602,614],{"class":526},[439,1604,539],{"class":453},[439,1606,470],{"class":449},[439,1608,621],{"class":466},[439,1610,470],{"class":449},[439,1612,561],{"class":453},[439,1614,611],{"class":449},[439,1616,630],{"class":526},[439,1618,588],{"class":453},[439,1620,473],{"class":449},[439,1622,1623,1626,1628,1630,1632],{"class":441,"line":682},[439,1624,1625],{"class":453},"console",[439,1627,611],{"class":449},[439,1629,775],{"class":526},[439,1631,804],{"class":453},[439,1633,473],{"class":449},[439,1635,1636],{"class":441,"line":687},[439,1637,506],{"emptyLinePlaceholder":505},[439,1639,1640],{"class":441,"line":720},[439,1641,1642],{"class":663},"\u002F\u002F 2s for this call only\n",[439,1644,1645,1647,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670,1673,1675,1677,1679,1681,1683,1685,1687,1689,1692,1694,1696],{"class":441,"line":767},[439,1646,513],{"class":512},[439,1648,1649],{"class":449}," [,",[439,1651,701],{"class":449},[439,1653,704],{"class":453},[439,1655,707],{"class":449},[439,1657,523],{"class":449},[439,1659,712],{"class":445},[439,1661,608],{"class":453},[439,1663,611],{"class":449},[439,1665,614],{"class":526},[439,1667,539],{"class":453},[439,1669,470],{"class":449},[439,1671,1672],{"class":466},"Jane",[439,1674,470],{"class":449},[439,1676,561],{"class":453},[439,1678,611],{"class":449},[439,1680,630],{"class":526},[439,1682,539],{"class":453},[439,1684,542],{"class":449},[439,1686,1019],{"class":545},[439,1688,549],{"class":449},[439,1690,1691],{"class":744}," 2000",[439,1693,457],{"class":449},[439,1695,561],{"class":453},[439,1697,473],{"class":449},[439,1699,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732],{"class":441,"line":791},[439,1701,723],{"class":445},[439,1703,726],{"class":453},[439,1705,470],{"class":449},[439,1707,731],{"class":466},[439,1709,470],{"class":449},[439,1711,707],{"class":453},[439,1713,738],{"class":449},[439,1715,741],{"class":453},[439,1717,745],{"class":744},[439,1719,707],{"class":453},[439,1721,611],{"class":449},[439,1723,752],{"class":453},[439,1725,755],{"class":449},[439,1727,463],{"class":449},[439,1729,1023],{"class":466},[439,1731,470],{"class":449},[439,1733,764],{"class":453},[439,1735,1737,1739,1741,1743,1745,1747,1750,1752,1754],{"class":441,"line":1736},17,[439,1738,770],{"class":453},[439,1740,611],{"class":449},[439,1742,775],{"class":526},[439,1744,539],{"class":453},[439,1746,470],{"class":449},[439,1748,1749],{"class":466},"too slow",[439,1751,470],{"class":449},[439,1753,561],{"class":453},[439,1755,473],{"class":449},[429,1757,1758],{"className":431,"code":809,"filename":810,"language":434,"meta":435,"style":435},[409,1759,1760,1784,1788,1802,1806,1816,1862,1872,1876,1894,1898,1902],{"__ignoreMap":435},[439,1761,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782],{"class":441,"line":442},[439,1763,446],{"class":445},[439,1765,450],{"class":449},[439,1767,821],{"class":453},[439,1769,698],{"class":449},[439,1771,826],{"class":453},[439,1773,457],{"class":449},[439,1775,460],{"class":445},[439,1777,463],{"class":449},[439,1779,835],{"class":466},[439,1781,470],{"class":449},[439,1783,473],{"class":449},[439,1785,1786],{"class":441,"line":476},[439,1787,506],{"emptyLinePlaceholder":505},[439,1789,1790,1792,1794,1796,1798,1800],{"class":441,"line":502},[439,1791,513],{"class":512},[439,1793,850],{"class":453},[439,1795,579],{"class":449},[439,1797,855],{"class":526},[439,1799,588],{"class":453},[439,1801,473],{"class":449},[439,1803,1804],{"class":441,"line":509},[439,1805,506],{"emptyLinePlaceholder":505},[439,1807,1808,1810,1812,1814],{"class":441,"line":566},[439,1809,513],{"class":512},[439,1811,870],{"class":453},[439,1813,579],{"class":449},[439,1815,875],{"class":449},[439,1817,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860],{"class":441,"line":571},[439,1819,880],{"class":545},[439,1821,549],{"class":449},[439,1823,885],{"class":453},[439,1825,611],{"class":449},[439,1827,890],{"class":526},[439,1829,539],{"class":453},[439,1831,539],{"class":449},[439,1833,898],{"class":897},[439,1835,698],{"class":449},[439,1837,903],{"class":897},[439,1839,549],{"class":449},[439,1841,908],{"class":533},[439,1843,911],{"class":449},[439,1845,908],{"class":533},[439,1847,916],{"class":512},[439,1849,919],{"class":449},[439,1851,922],{"class":466},[439,1853,925],{"class":449},[439,1855,928],{"class":453},[439,1857,931],{"class":449},[439,1859,561],{"class":453},[439,1861,936],{"class":449},[439,1863,1864,1866,1868,1870],{"class":441,"line":593},[439,1865,457],{"class":449},[439,1867,943],{"class":445},[439,1869,826],{"class":533},[439,1871,473],{"class":449},[439,1873,1874],{"class":441,"line":598},[439,1875,506],{"emptyLinePlaceholder":505},[439,1877,1878,1880,1882,1884,1886,1888,1890,1892],{"class":441,"line":655},[439,1879,513],{"class":512},[439,1881,958],{"class":453},[439,1883,579],{"class":449},[439,1885,885],{"class":453},[439,1887,611],{"class":449},[439,1889,967],{"class":526},[439,1891,970],{"class":453},[439,1893,473],{"class":449},[439,1895,1896],{"class":441,"line":660},[439,1897,506],{"emptyLinePlaceholder":505},[439,1899,1900],{"class":441,"line":667},[439,1901,981],{"class":663},[439,1903,1904,1906,1908,1910,1912,1914,1916],{"class":441,"line":682},[439,1905,986],{"class":445},[439,1907,481],{"class":512},[439,1909,991],{"class":533},[439,1911,523],{"class":449},[439,1913,996],{"class":449},[439,1915,999],{"class":453},[439,1917,473],{"class":449},[1010,1919,1921],{"id":1920},"global-abort","Global Abort",[405,1923,1924,1927],{},[409,1925,1926],{},"client.abort()"," cancels every in-flight request at once, for example when a single page app navigates away. New requests work normally afterwards.",[426,1929,1930,2361],{},[429,1931,1933],{"className":431,"code":1932,"filename":433,"language":434,"meta":435,"style":435},"import {initClient} from '@mionjs\u002Fclient';\nimport type {MyApi} from '.\u002Fhello-sum.routes.ts';\n\nconst {client, routes} = initClient\u003CMyApi>({\n  baseURL: 'http:\u002F\u002Flocalhost:3000',\n});\n\nconst p1 = routes.sayHello('John').call();\nconst p2 = routes.utils.sum(5, 2).call();\n\nclient.abort();\n\n\u002F\u002F both come back as 'request-aborted'\nconst [, , response1] = await p1;\nconst [, , response2] = await p2;\nif (response1['@thrownErrors']?.[0].type === 'request-aborted')\n  console.log('first request canceled');\nif (response2['@thrownErrors']?.[0].type === 'request-aborted')\n  console.log('second request canceled');\n\n\u002F\u002F new requests work normally after abort\nconst [greeting] = await routes.sayHello('John').call();\nconsole.log(greeting);\n",[409,1934,1935,1955,1978,1982,2011,2025,2033,2037,2070,2111,2115,2127,2131,2136,2158,2180,2217,2238,2276,2298,2303,2309,2348],{"__ignoreMap":435},[439,1936,1937,1939,1941,1943,1945,1947,1949,1951,1953],{"class":441,"line":442},[439,1938,446],{"class":445},[439,1940,450],{"class":449},[439,1942,454],{"class":453},[439,1944,457],{"class":449},[439,1946,460],{"class":445},[439,1948,463],{"class":449},[439,1950,467],{"class":466},[439,1952,470],{"class":449},[439,1954,473],{"class":449},[439,1956,1957,1959,1961,1963,1965,1967,1969,1971,1974,1976],{"class":441,"line":476},[439,1958,446],{"class":445},[439,1960,481],{"class":445},[439,1962,450],{"class":449},[439,1964,486],{"class":453},[439,1966,457],{"class":449},[439,1968,460],{"class":445},[439,1970,463],{"class":449},[439,1972,1973],{"class":466},".\u002Fhello-sum.routes.ts",[439,1975,470],{"class":449},[439,1977,473],{"class":449},[439,1979,1980],{"class":441,"line":502},[439,1981,506],{"emptyLinePlaceholder":505},[439,1983,1984,1986,1988,1991,1993,1995,1997,1999,2001,2003,2005,2007,2009],{"class":441,"line":509},[439,1985,513],{"class":512},[439,1987,450],{"class":449},[439,1989,1990],{"class":453},"client",[439,1992,698],{"class":449},[439,1994,608],{"class":453},[439,1996,457],{"class":449},[439,1998,523],{"class":449},[439,2000,527],{"class":526},[439,2002,530],{"class":449},[439,2004,486],{"class":533},[439,2006,536],{"class":449},[439,2008,539],{"class":453},[439,2010,1538],{"class":449},[439,2012,2013,2015,2017,2019,2021,2023],{"class":441,"line":566},[439,2014,1543],{"class":545},[439,2016,549],{"class":449},[439,2018,463],{"class":449},[439,2020,554],{"class":466},[439,2022,470],{"class":449},[439,2024,936],{"class":449},[439,2026,2027,2029,2031],{"class":441,"line":571},[439,2028,457],{"class":449},[439,2030,561],{"class":453},[439,2032,473],{"class":449},[439,2034,2035],{"class":441,"line":593},[439,2036,506],{"emptyLinePlaceholder":505},[439,2038,2039,2041,2044,2046,2048,2050,2052,2054,2056,2058,2060,2062,2064,2066,2068],{"class":441,"line":598},[439,2040,513],{"class":512},[439,2042,2043],{"class":453}," p1 ",[439,2045,579],{"class":449},[439,2047,608],{"class":453},[439,2049,611],{"class":449},[439,2051,614],{"class":526},[439,2053,539],{"class":453},[439,2055,470],{"class":449},[439,2057,621],{"class":466},[439,2059,470],{"class":449},[439,2061,561],{"class":453},[439,2063,611],{"class":449},[439,2065,630],{"class":526},[439,2067,588],{"class":453},[439,2069,473],{"class":449},[439,2071,2072,2074,2077,2079,2081,2083,2086,2088,2091,2093,2096,2098,2101,2103,2105,2107,2109],{"class":441,"line":655},[439,2073,513],{"class":512},[439,2075,2076],{"class":453}," p2 ",[439,2078,579],{"class":449},[439,2080,608],{"class":453},[439,2082,611],{"class":449},[439,2084,2085],{"class":453},"utils",[439,2087,611],{"class":449},[439,2089,2090],{"class":526},"sum",[439,2092,539],{"class":453},[439,2094,2095],{"class":744},"5",[439,2097,698],{"class":449},[439,2099,2100],{"class":744}," 2",[439,2102,561],{"class":453},[439,2104,611],{"class":449},[439,2106,630],{"class":526},[439,2108,588],{"class":453},[439,2110,473],{"class":449},[439,2112,2113],{"class":441,"line":660},[439,2114,506],{"emptyLinePlaceholder":505},[439,2116,2117,2119,2121,2123,2125],{"class":441,"line":667},[439,2118,1990],{"class":453},[439,2120,611],{"class":449},[439,2122,675],{"class":526},[439,2124,588],{"class":453},[439,2126,473],{"class":449},[439,2128,2129],{"class":441,"line":682},[439,2130,506],{"emptyLinePlaceholder":505},[439,2132,2133],{"class":441,"line":687},[439,2134,2135],{"class":663},"\u002F\u002F both come back as 'request-aborted'\n",[439,2137,2138,2140,2142,2144,2147,2149,2151,2153,2156],{"class":441,"line":720},[439,2139,513],{"class":512},[439,2141,1649],{"class":449},[439,2143,701],{"class":449},[439,2145,2146],{"class":453}," response1",[439,2148,707],{"class":449},[439,2150,523],{"class":449},[439,2152,712],{"class":445},[439,2154,2155],{"class":453}," p1",[439,2157,473],{"class":449},[439,2159,2160,2162,2164,2166,2169,2171,2173,2175,2178],{"class":441,"line":767},[439,2161,513],{"class":512},[439,2163,1649],{"class":449},[439,2165,701],{"class":449},[439,2167,2168],{"class":453}," response2",[439,2170,707],{"class":449},[439,2172,523],{"class":449},[439,2174,712],{"class":445},[439,2176,2177],{"class":453}," p2",[439,2179,473],{"class":449},[439,2181,2182,2184,2187,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215],{"class":441,"line":791},[439,2183,723],{"class":445},[439,2185,2186],{"class":453}," (response1[",[439,2188,470],{"class":449},[439,2190,731],{"class":466},[439,2192,470],{"class":449},[439,2194,707],{"class":453},[439,2196,738],{"class":449},[439,2198,741],{"class":453},[439,2200,745],{"class":744},[439,2202,707],{"class":453},[439,2204,611],{"class":449},[439,2206,752],{"class":453},[439,2208,755],{"class":449},[439,2210,463],{"class":449},[439,2212,419],{"class":466},[439,2214,470],{"class":449},[439,2216,764],{"class":453},[439,2218,2219,2221,2223,2225,2227,2229,2232,2234,2236],{"class":441,"line":1736},[439,2220,770],{"class":453},[439,2222,611],{"class":449},[439,2224,775],{"class":526},[439,2226,539],{"class":453},[439,2228,470],{"class":449},[439,2230,2231],{"class":466},"first request canceled",[439,2233,470],{"class":449},[439,2235,561],{"class":453},[439,2237,473],{"class":449},[439,2239,2241,2243,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274],{"class":441,"line":2240},18,[439,2242,723],{"class":445},[439,2244,2245],{"class":453}," (response2[",[439,2247,470],{"class":449},[439,2249,731],{"class":466},[439,2251,470],{"class":449},[439,2253,707],{"class":453},[439,2255,738],{"class":449},[439,2257,741],{"class":453},[439,2259,745],{"class":744},[439,2261,707],{"class":453},[439,2263,611],{"class":449},[439,2265,752],{"class":453},[439,2267,755],{"class":449},[439,2269,463],{"class":449},[439,2271,419],{"class":466},[439,2273,470],{"class":449},[439,2275,764],{"class":453},[439,2277,2279,2281,2283,2285,2287,2289,2292,2294,2296],{"class":441,"line":2278},19,[439,2280,770],{"class":453},[439,2282,611],{"class":449},[439,2284,775],{"class":526},[439,2286,539],{"class":453},[439,2288,470],{"class":449},[439,2290,2291],{"class":466},"second request canceled",[439,2293,470],{"class":449},[439,2295,561],{"class":453},[439,2297,473],{"class":449},[439,2299,2301],{"class":441,"line":2300},20,[439,2302,506],{"emptyLinePlaceholder":505},[439,2304,2306],{"class":441,"line":2305},21,[439,2307,2308],{"class":663},"\u002F\u002F new requests work normally after abort\n",[439,2310,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346],{"class":441,"line":2311},22,[439,2313,513],{"class":512},[439,2315,692],{"class":449},[439,2317,695],{"class":453},[439,2319,707],{"class":449},[439,2321,523],{"class":449},[439,2323,712],{"class":445},[439,2325,608],{"class":453},[439,2327,611],{"class":449},[439,2329,614],{"class":526},[439,2331,539],{"class":453},[439,2333,470],{"class":449},[439,2335,621],{"class":466},[439,2337,470],{"class":449},[439,2339,561],{"class":453},[439,2341,611],{"class":449},[439,2343,630],{"class":526},[439,2345,588],{"class":453},[439,2347,473],{"class":449},[439,2349,2351,2353,2355,2357,2359],{"class":441,"line":2350},23,[439,2352,1625],{"class":453},[439,2354,611],{"class":449},[439,2356,775],{"class":526},[439,2358,804],{"class":453},[439,2360,473],{"class":449},[429,2362,2364],{"className":431,"code":2363,"filename":810,"language":434,"meta":435,"style":435},"import {createMionRouter, Routes} from '@mionjs\u002Frouter';\n\nconst mion = createMionRouter();\n\nconst routes = {\n  sayHello: mion.route((ctx, name: string): string => `Hello ${name}`),\n  utils: {\n    sum: mion.route((ctx, a: number, b: number): number => a + b),\n  },\n} satisfies Routes;\n\nconst myApi = mion.initRoutes(routes);\n\nexport type MyApi = typeof myApi;\n",[409,2365,2366,2390,2394,2408,2412,2422,2468,2477,2532,2537,2547,2551,2569,2573],{"__ignoreMap":435},[439,2367,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388],{"class":441,"line":442},[439,2369,446],{"class":445},[439,2371,450],{"class":449},[439,2373,821],{"class":453},[439,2375,698],{"class":449},[439,2377,826],{"class":453},[439,2379,457],{"class":449},[439,2381,460],{"class":445},[439,2383,463],{"class":449},[439,2385,835],{"class":466},[439,2387,470],{"class":449},[439,2389,473],{"class":449},[439,2391,2392],{"class":441,"line":476},[439,2393,506],{"emptyLinePlaceholder":505},[439,2395,2396,2398,2400,2402,2404,2406],{"class":441,"line":502},[439,2397,513],{"class":512},[439,2399,850],{"class":453},[439,2401,579],{"class":449},[439,2403,855],{"class":526},[439,2405,588],{"class":453},[439,2407,473],{"class":449},[439,2409,2410],{"class":441,"line":509},[439,2411,506],{"emptyLinePlaceholder":505},[439,2413,2414,2416,2418,2420],{"class":441,"line":566},[439,2415,513],{"class":512},[439,2417,870],{"class":453},[439,2419,579],{"class":449},[439,2421,875],{"class":449},[439,2423,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456,2458,2460,2462,2464,2466],{"class":441,"line":571},[439,2425,880],{"class":545},[439,2427,549],{"class":449},[439,2429,885],{"class":453},[439,2431,611],{"class":449},[439,2433,890],{"class":526},[439,2435,539],{"class":453},[439,2437,539],{"class":449},[439,2439,898],{"class":897},[439,2441,698],{"class":449},[439,2443,903],{"class":897},[439,2445,549],{"class":449},[439,2447,908],{"class":533},[439,2449,911],{"class":449},[439,2451,908],{"class":533},[439,2453,916],{"class":512},[439,2455,919],{"class":449},[439,2457,922],{"class":466},[439,2459,925],{"class":449},[439,2461,928],{"class":453},[439,2463,931],{"class":449},[439,2465,561],{"class":453},[439,2467,936],{"class":449},[439,2469,2470,2473,2475],{"class":441,"line":593},[439,2471,2472],{"class":545},"  utils",[439,2474,549],{"class":449},[439,2476,875],{"class":449},[439,2478,2479,2482,2484,2486,2488,2490,2492,2494,2496,2498,2501,2503,2506,2508,2511,2513,2515,2517,2519,2521,2524,2527,2530],{"class":441,"line":598},[439,2480,2481],{"class":545},"    sum",[439,2483,549],{"class":449},[439,2485,885],{"class":453},[439,2487,611],{"class":449},[439,2489,890],{"class":526},[439,2491,539],{"class":453},[439,2493,539],{"class":449},[439,2495,898],{"class":897},[439,2497,698],{"class":449},[439,2499,2500],{"class":897}," a",[439,2502,549],{"class":449},[439,2504,2505],{"class":533}," number",[439,2507,698],{"class":449},[439,2509,2510],{"class":897}," b",[439,2512,549],{"class":449},[439,2514,2505],{"class":533},[439,2516,911],{"class":449},[439,2518,2505],{"class":533},[439,2520,916],{"class":512},[439,2522,2523],{"class":453}," a ",[439,2525,2526],{"class":449},"+",[439,2528,2529],{"class":453}," b)",[439,2531,936],{"class":449},[439,2533,2534],{"class":441,"line":655},[439,2535,2536],{"class":449},"  },\n",[439,2538,2539,2541,2543,2545],{"class":441,"line":660},[439,2540,457],{"class":449},[439,2542,943],{"class":445},[439,2544,826],{"class":533},[439,2546,473],{"class":449},[439,2548,2549],{"class":441,"line":667},[439,2550,506],{"emptyLinePlaceholder":505},[439,2552,2553,2555,2557,2559,2561,2563,2565,2567],{"class":441,"line":682},[439,2554,513],{"class":512},[439,2556,958],{"class":453},[439,2558,579],{"class":449},[439,2560,885],{"class":453},[439,2562,611],{"class":449},[439,2564,967],{"class":526},[439,2566,970],{"class":453},[439,2568,473],{"class":449},[439,2570,2571],{"class":441,"line":687},[439,2572,506],{"emptyLinePlaceholder":505},[439,2574,2575,2577,2579,2581,2583,2585,2587],{"class":441,"line":720},[439,2576,986],{"class":445},[439,2578,481],{"class":512},[439,2580,991],{"class":533},[439,2582,523],{"class":449},[439,2584,996],{"class":449},[439,2586,999],{"class":453},[439,2588,473],{"class":449},[2590,2591,2592,2595],"note",{},[409,2593,2594],{},"client.destroy()"," also aborts all in-flight requests before clearing handlers.",[1010,2597,2599],{"id":2598},"cancelling-middleware-calls-and-batches","Cancelling Middleware Calls and Batches",[405,2601,2602,2603,611],{},"Cancellation and timeouts work the same with middleware and ",[2604,2605,2606],"a",{"href":96},"batches",[426,2608,2609,3167],{},[429,2610,2612],{"className":431,"code":2611,"filename":433,"language":434,"meta":435,"style":435},"import {HeadersSubset} from '@mionjs\u002Fcore';\nimport {initClient, batch} from '@mionjs\u002Fclient';\nimport type {MyApi} from '.\u002Fhello-sum-auth.routes.ts';\n\nconst {routes, middlewares} = initClient\u003CMyApi>({\n  baseURL: 'http:\u002F\u002Flocalhost:3000',\n});\n\nconst controller = new AbortController();\nmiddlewares.trace.onRequest((trace) =>\n  trace(new HeadersSubset({'X-Trace-Id': crypto.randomUUID()}))\n);\n\n\u002F\u002F cancellation works with middleware\nconst [greeting, , response] = await routes.sayHello('John').call({\n  timeout: 5000,\n  signal: controller.signal,\n});\nif (!response['@thrownErrors']) console.log(greeting);\n\n\u002F\u002F and with a batch\nconst [[sum, sumError, batchResponse], [greeting2, greetingError]] =\n  await batch([routes.utils.sum(5, 2), routes.sayHello('Jane')]).call({\n    timeout: 10_000,\n  });\nif (batchResponse['@thrownErrors'])\n  console.log('Batch failed:', batchResponse['@thrownErrors'][0].publicMessage);\nelse if (!sumError && !greetingError) console.log(sum, greeting2);\n",[409,2613,2614,2636,2661,2684,2688,2717,2731,2739,2743,2759,2785,2826,2832,2836,2841,2885,2895,2910,2918,2946,2950,2955,2993,3048,3060,3070,3087,3130],{"__ignoreMap":435},[439,2615,2616,2618,2620,2623,2625,2627,2629,2632,2634],{"class":441,"line":442},[439,2617,446],{"class":445},[439,2619,450],{"class":449},[439,2621,2622],{"class":453},"HeadersSubset",[439,2624,457],{"class":449},[439,2626,460],{"class":445},[439,2628,463],{"class":449},[439,2630,2631],{"class":466},"@mionjs\u002Fcore",[439,2633,470],{"class":449},[439,2635,473],{"class":449},[439,2637,2638,2640,2642,2644,2646,2649,2651,2653,2655,2657,2659],{"class":441,"line":476},[439,2639,446],{"class":445},[439,2641,450],{"class":449},[439,2643,454],{"class":453},[439,2645,698],{"class":449},[439,2647,2648],{"class":453}," batch",[439,2650,457],{"class":449},[439,2652,460],{"class":445},[439,2654,463],{"class":449},[439,2656,467],{"class":466},[439,2658,470],{"class":449},[439,2660,473],{"class":449},[439,2662,2663,2665,2667,2669,2671,2673,2675,2677,2680,2682],{"class":441,"line":502},[439,2664,446],{"class":445},[439,2666,481],{"class":445},[439,2668,450],{"class":449},[439,2670,486],{"class":453},[439,2672,457],{"class":449},[439,2674,460],{"class":445},[439,2676,463],{"class":449},[439,2678,2679],{"class":466},".\u002Fhello-sum-auth.routes.ts",[439,2681,470],{"class":449},[439,2683,473],{"class":449},[439,2685,2686],{"class":441,"line":509},[439,2687,506],{"emptyLinePlaceholder":505},[439,2689,2690,2692,2694,2696,2698,2701,2703,2705,2707,2709,2711,2713,2715],{"class":441,"line":566},[439,2691,513],{"class":512},[439,2693,450],{"class":449},[439,2695,518],{"class":453},[439,2697,698],{"class":449},[439,2699,2700],{"class":453}," middlewares",[439,2702,457],{"class":449},[439,2704,523],{"class":449},[439,2706,527],{"class":526},[439,2708,530],{"class":449},[439,2710,486],{"class":533},[439,2712,536],{"class":449},[439,2714,539],{"class":453},[439,2716,1538],{"class":449},[439,2718,2719,2721,2723,2725,2727,2729],{"class":441,"line":571},[439,2720,1543],{"class":545},[439,2722,549],{"class":449},[439,2724,463],{"class":449},[439,2726,554],{"class":466},[439,2728,470],{"class":449},[439,2730,936],{"class":449},[439,2732,2733,2735,2737],{"class":441,"line":593},[439,2734,457],{"class":449},[439,2736,561],{"class":453},[439,2738,473],{"class":449},[439,2740,2741],{"class":441,"line":598},[439,2742,506],{"emptyLinePlaceholder":505},[439,2744,2745,2747,2749,2751,2753,2755,2757],{"class":441,"line":655},[439,2746,513],{"class":512},[439,2748,576],{"class":453},[439,2750,579],{"class":449},[439,2752,582],{"class":449},[439,2754,585],{"class":526},[439,2756,588],{"class":453},[439,2758,473],{"class":449},[439,2760,2761,2764,2766,2769,2771,2774,2776,2778,2780,2782],{"class":441,"line":660},[439,2762,2763],{"class":453},"middlewares",[439,2765,611],{"class":449},[439,2767,2768],{"class":453},"trace",[439,2770,611],{"class":449},[439,2772,2773],{"class":526},"onRequest",[439,2775,539],{"class":453},[439,2777,539],{"class":449},[439,2779,2768],{"class":897},[439,2781,561],{"class":449},[439,2783,2784],{"class":512}," =>\n",[439,2786,2787,2790,2792,2795,2798,2800,2802,2804,2807,2809,2811,2814,2816,2819,2821,2823],{"class":441,"line":667},[439,2788,2789],{"class":526},"  trace",[439,2791,539],{"class":453},[439,2793,2794],{"class":449},"new",[439,2796,2797],{"class":526}," HeadersSubset",[439,2799,539],{"class":453},[439,2801,542],{"class":449},[439,2803,470],{"class":449},[439,2805,2806],{"class":545},"X-Trace-Id",[439,2808,470],{"class":449},[439,2810,549],{"class":449},[439,2812,2813],{"class":453}," crypto",[439,2815,611],{"class":449},[439,2817,2818],{"class":526},"randomUUID",[439,2820,588],{"class":453},[439,2822,457],{"class":449},[439,2824,2825],{"class":453},"))\n",[439,2827,2828,2830],{"class":441,"line":682},[439,2829,561],{"class":453},[439,2831,473],{"class":449},[439,2833,2834],{"class":441,"line":687},[439,2835,506],{"emptyLinePlaceholder":505},[439,2837,2838],{"class":441,"line":720},[439,2839,2840],{"class":663},"\u002F\u002F cancellation works with middleware\n",[439,2842,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871,2873,2875,2877,2879,2881,2883],{"class":441,"line":767},[439,2844,513],{"class":512},[439,2846,692],{"class":449},[439,2848,695],{"class":453},[439,2850,698],{"class":449},[439,2852,701],{"class":449},[439,2854,704],{"class":453},[439,2856,707],{"class":449},[439,2858,523],{"class":449},[439,2860,712],{"class":445},[439,2862,608],{"class":453},[439,2864,611],{"class":449},[439,2866,614],{"class":526},[439,2868,539],{"class":453},[439,2870,470],{"class":449},[439,2872,621],{"class":466},[439,2874,470],{"class":449},[439,2876,561],{"class":453},[439,2878,611],{"class":449},[439,2880,630],{"class":526},[439,2882,539],{"class":453},[439,2884,1538],{"class":449},[439,2886,2887,2889,2891,2893],{"class":441,"line":791},[439,2888,1558],{"class":545},[439,2890,549],{"class":449},[439,2892,1187],{"class":744},[439,2894,936],{"class":449},[439,2896,2897,2900,2902,2904,2906,2908],{"class":441,"line":1736},[439,2898,2899],{"class":545},"  signal",[439,2901,549],{"class":449},[439,2903,642],{"class":453},[439,2905,611],{"class":449},[439,2907,637],{"class":453},[439,2909,936],{"class":449},[439,2911,2912,2914,2916],{"class":441,"line":2240},[439,2913,457],{"class":449},[439,2915,561],{"class":453},[439,2917,473],{"class":449},[439,2919,2920,2922,2924,2926,2929,2931,2933,2935,2938,2940,2942,2944],{"class":441,"line":2278},[439,2921,723],{"class":445},[439,2923,1269],{"class":453},[439,2925,1272],{"class":449},[439,2927,2928],{"class":453},"response[",[439,2930,470],{"class":449},[439,2932,731],{"class":466},[439,2934,470],{"class":449},[439,2936,2937],{"class":453},"]) console",[439,2939,611],{"class":449},[439,2941,775],{"class":526},[439,2943,804],{"class":453},[439,2945,473],{"class":449},[439,2947,2948],{"class":441,"line":2300},[439,2949,506],{"emptyLinePlaceholder":505},[439,2951,2952],{"class":441,"line":2305},[439,2953,2954],{"class":663},"\u002F\u002F and with a batch\n",[439,2956,2957,2959,2962,2964,2966,2969,2971,2974,2977,2979,2982,2984,2987,2990],{"class":441,"line":2311},[439,2958,513],{"class":512},[439,2960,2961],{"class":449}," [[",[439,2963,2090],{"class":453},[439,2965,698],{"class":449},[439,2967,2968],{"class":453}," sumError",[439,2970,698],{"class":449},[439,2972,2973],{"class":453}," batchResponse",[439,2975,2976],{"class":449},"],",[439,2978,692],{"class":449},[439,2980,2981],{"class":453},"greeting2",[439,2983,698],{"class":449},[439,2985,2986],{"class":453}," greetingError",[439,2988,2989],{"class":449},"]]",[439,2991,2992],{"class":449}," =\n",[439,2994,2995,2998,3000,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3040,3042,3044,3046],{"class":441,"line":2350},[439,2996,2997],{"class":445},"  await",[439,2999,2648],{"class":526},[439,3001,3002],{"class":453},"([routes",[439,3004,611],{"class":449},[439,3006,2085],{"class":453},[439,3008,611],{"class":449},[439,3010,2090],{"class":526},[439,3012,539],{"class":453},[439,3014,2095],{"class":744},[439,3016,698],{"class":449},[439,3018,2100],{"class":744},[439,3020,561],{"class":453},[439,3022,698],{"class":449},[439,3024,608],{"class":453},[439,3026,611],{"class":449},[439,3028,614],{"class":526},[439,3030,539],{"class":453},[439,3032,470],{"class":449},[439,3034,1672],{"class":466},[439,3036,470],{"class":449},[439,3038,3039],{"class":453},")])",[439,3041,611],{"class":449},[439,3043,630],{"class":526},[439,3045,539],{"class":453},[439,3047,1538],{"class":449},[439,3049,3051,3054,3056,3058],{"class":441,"line":3050},24,[439,3052,3053],{"class":545},"    timeout",[439,3055,549],{"class":449},[439,3057,1563],{"class":744},[439,3059,936],{"class":449},[439,3061,3063,3066,3068],{"class":441,"line":3062},25,[439,3064,3065],{"class":449},"  }",[439,3067,561],{"class":453},[439,3069,473],{"class":449},[439,3071,3073,3075,3078,3080,3082,3084],{"class":441,"line":3072},26,[439,3074,723],{"class":445},[439,3076,3077],{"class":453}," (batchResponse[",[439,3079,470],{"class":449},[439,3081,731],{"class":466},[439,3083,470],{"class":449},[439,3085,3086],{"class":453},"])\n",[439,3088,3090,3092,3094,3096,3098,3100,3103,3105,3107,3110,3112,3114,3116,3119,3121,3123,3125,3128],{"class":441,"line":3089},27,[439,3091,770],{"class":453},[439,3093,611],{"class":449},[439,3095,775],{"class":526},[439,3097,539],{"class":453},[439,3099,470],{"class":449},[439,3101,3102],{"class":466},"Batch failed:",[439,3104,470],{"class":449},[439,3106,698],{"class":449},[439,3108,3109],{"class":453}," batchResponse[",[439,3111,470],{"class":449},[439,3113,731],{"class":466},[439,3115,470],{"class":449},[439,3117,3118],{"class":453},"][",[439,3120,745],{"class":744},[439,3122,707],{"class":453},[439,3124,611],{"class":449},[439,3126,3127],{"class":453},"publicMessage)",[439,3129,473],{"class":449},[439,3131,3133,3135,3137,3139,3141,3144,3147,3150,3153,3155,3157,3160,3162,3165],{"class":441,"line":3132},28,[439,3134,794],{"class":445},[439,3136,1266],{"class":445},[439,3138,1269],{"class":453},[439,3140,1272],{"class":449},[439,3142,3143],{"class":453},"sumError ",[439,3145,3146],{"class":449},"&&",[439,3148,3149],{"class":449}," !",[439,3151,3152],{"class":453},"greetingError) console",[439,3154,611],{"class":449},[439,3156,775],{"class":526},[439,3158,3159],{"class":453},"(sum",[439,3161,698],{"class":449},[439,3163,3164],{"class":453}," greeting2)",[439,3166,473],{"class":449},[429,3168,3170],{"className":431,"code":3169,"filename":810,"language":434,"meta":435,"style":435},"import {HeadersSubset, FatalError} from '@mionjs\u002Fcore';\nimport {createMionRouter, Routes} from '@mionjs\u002Frouter';\nimport {getSession} from '.\u002Fsession.ts';\n\nconst mion = createMionRouter();\n\nconst routes = {\n  \u002F\u002F the client sends a trace id with every request, the server echoes it back\n  trace: mion.headersMiddleware(\n    (ctx, {headers}: HeadersSubset\u003C'X-Trace-Id'>): string =>\n      headers['X-Trace-Id']\n  ),\n  \u002F\u002F runs before every route; a returned FatalError ends the request and stays typed\n  auth: mion.middleware((ctx): void | FatalError\u003C'not-authorized'> => {\n    if (!getSession(ctx.request.headers.get('cookie')))\n      return new FatalError({\n        publicMessage: 'Not Authorized',\n        type: 'not-authorized',\n      });\n  }),\n  sayHello: mion.route((ctx, name: string): string => `Hello ${name}`),\n  utils: {\n    sum: mion.route((ctx, a: number, b: number): number => a + b),\n  },\n} satisfies Routes;\n\nconst myApi = mion.initRoutes(routes);\n\nexport type MyApi = typeof myApi;\n",[409,3171,3172,3197,3221,3243,3247,3261,3265,3275,3280,3296,3330,3344,3351,3356,3401,3442,3455,3471,3486,3495,3503,3549,3557,3605,3609,3619,3623,3641,3645],{"__ignoreMap":435},[439,3173,3174,3176,3178,3180,3182,3185,3187,3189,3191,3193,3195],{"class":441,"line":442},[439,3175,446],{"class":445},[439,3177,450],{"class":449},[439,3179,2622],{"class":453},[439,3181,698],{"class":449},[439,3183,3184],{"class":453}," FatalError",[439,3186,457],{"class":449},[439,3188,460],{"class":445},[439,3190,463],{"class":449},[439,3192,2631],{"class":466},[439,3194,470],{"class":449},[439,3196,473],{"class":449},[439,3198,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219],{"class":441,"line":476},[439,3200,446],{"class":445},[439,3202,450],{"class":449},[439,3204,821],{"class":453},[439,3206,698],{"class":449},[439,3208,826],{"class":453},[439,3210,457],{"class":449},[439,3212,460],{"class":445},[439,3214,463],{"class":449},[439,3216,835],{"class":466},[439,3218,470],{"class":449},[439,3220,473],{"class":449},[439,3222,3223,3225,3227,3230,3232,3234,3236,3239,3241],{"class":441,"line":502},[439,3224,446],{"class":445},[439,3226,450],{"class":449},[439,3228,3229],{"class":453},"getSession",[439,3231,457],{"class":449},[439,3233,460],{"class":445},[439,3235,463],{"class":449},[439,3237,3238],{"class":466},".\u002Fsession.ts",[439,3240,470],{"class":449},[439,3242,473],{"class":449},[439,3244,3245],{"class":441,"line":509},[439,3246,506],{"emptyLinePlaceholder":505},[439,3248,3249,3251,3253,3255,3257,3259],{"class":441,"line":566},[439,3250,513],{"class":512},[439,3252,850],{"class":453},[439,3254,579],{"class":449},[439,3256,855],{"class":526},[439,3258,588],{"class":453},[439,3260,473],{"class":449},[439,3262,3263],{"class":441,"line":571},[439,3264,506],{"emptyLinePlaceholder":505},[439,3266,3267,3269,3271,3273],{"class":441,"line":593},[439,3268,513],{"class":512},[439,3270,870],{"class":453},[439,3272,579],{"class":449},[439,3274,875],{"class":449},[439,3276,3277],{"class":441,"line":598},[439,3278,3279],{"class":663},"  \u002F\u002F the client sends a trace id with every request, the server echoes it back\n",[439,3281,3282,3284,3286,3288,3290,3293],{"class":441,"line":655},[439,3283,2789],{"class":545},[439,3285,549],{"class":449},[439,3287,885],{"class":453},[439,3289,611],{"class":449},[439,3291,3292],{"class":526},"headersMiddleware",[439,3294,3295],{"class":453},"(\n",[439,3297,3298,3301,3303,3305,3307,3310,3313,3315,3317,3319,3321,3323,3326,3328],{"class":441,"line":660},[439,3299,3300],{"class":449},"    (",[439,3302,898],{"class":897},[439,3304,698],{"class":449},[439,3306,450],{"class":449},[439,3308,3309],{"class":897},"headers",[439,3311,3312],{"class":449},"}:",[439,3314,2797],{"class":533},[439,3316,530],{"class":449},[439,3318,470],{"class":449},[439,3320,2806],{"class":466},[439,3322,470],{"class":449},[439,3324,3325],{"class":449},">):",[439,3327,908],{"class":533},[439,3329,2784],{"class":512},[439,3331,3332,3335,3337,3339,3341],{"class":441,"line":667},[439,3333,3334],{"class":453},"      headers[",[439,3336,470],{"class":449},[439,3338,2806],{"class":466},[439,3340,470],{"class":449},[439,3342,3343],{"class":453},"]\n",[439,3345,3346,3349],{"class":441,"line":682},[439,3347,3348],{"class":453},"  )",[439,3350,936],{"class":449},[439,3352,3353],{"class":441,"line":687},[439,3354,3355],{"class":663},"  \u002F\u002F runs before every route; a returned FatalError ends the request and stays typed\n",[439,3357,3358,3361,3363,3365,3367,3370,3372,3374,3376,3378,3381,3384,3386,3388,3390,3393,3395,3397,3399],{"class":441,"line":720},[439,3359,3360],{"class":545},"  auth",[439,3362,549],{"class":449},[439,3364,885],{"class":453},[439,3366,611],{"class":449},[439,3368,3369],{"class":526},"middleware",[439,3371,539],{"class":453},[439,3373,539],{"class":449},[439,3375,898],{"class":897},[439,3377,911],{"class":449},[439,3379,3380],{"class":533}," void",[439,3382,3383],{"class":449}," |",[439,3385,3184],{"class":533},[439,3387,530],{"class":449},[439,3389,470],{"class":449},[439,3391,3392],{"class":466},"not-authorized",[439,3394,470],{"class":449},[439,3396,536],{"class":449},[439,3398,916],{"class":512},[439,3400,875],{"class":449},[439,3402,3403,3406,3408,3410,3412,3414,3416,3418,3421,3423,3425,3427,3430,3432,3434,3437,3439],{"class":441,"line":767},[439,3404,3405],{"class":445},"    if",[439,3407,1269],{"class":545},[439,3409,1272],{"class":449},[439,3411,3229],{"class":526},[439,3413,539],{"class":545},[439,3415,898],{"class":453},[439,3417,611],{"class":449},[439,3419,3420],{"class":453},"request",[439,3422,611],{"class":449},[439,3424,3309],{"class":453},[439,3426,611],{"class":449},[439,3428,3429],{"class":526},"get",[439,3431,539],{"class":545},[439,3433,470],{"class":449},[439,3435,3436],{"class":466},"cookie",[439,3438,470],{"class":449},[439,3440,3441],{"class":545},")))\n",[439,3443,3444,3447,3449,3451,3453],{"class":441,"line":791},[439,3445,3446],{"class":445},"      return",[439,3448,582],{"class":449},[439,3450,3184],{"class":526},[439,3452,539],{"class":545},[439,3454,1538],{"class":449},[439,3456,3457,3460,3462,3464,3467,3469],{"class":441,"line":1736},[439,3458,3459],{"class":545},"        publicMessage",[439,3461,549],{"class":449},[439,3463,463],{"class":449},[439,3465,3466],{"class":466},"Not Authorized",[439,3468,470],{"class":449},[439,3470,936],{"class":449},[439,3472,3473,3476,3478,3480,3482,3484],{"class":441,"line":2240},[439,3474,3475],{"class":545},"        type",[439,3477,549],{"class":449},[439,3479,463],{"class":449},[439,3481,3392],{"class":466},[439,3483,470],{"class":449},[439,3485,936],{"class":449},[439,3487,3488,3491,3493],{"class":441,"line":2278},[439,3489,3490],{"class":449},"      }",[439,3492,561],{"class":545},[439,3494,473],{"class":449},[439,3496,3497,3499,3501],{"class":441,"line":2300},[439,3498,3065],{"class":449},[439,3500,561],{"class":453},[439,3502,936],{"class":449},[439,3504,3505,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547],{"class":441,"line":2305},[439,3506,880],{"class":545},[439,3508,549],{"class":449},[439,3510,885],{"class":453},[439,3512,611],{"class":449},[439,3514,890],{"class":526},[439,3516,539],{"class":453},[439,3518,539],{"class":449},[439,3520,898],{"class":897},[439,3522,698],{"class":449},[439,3524,903],{"class":897},[439,3526,549],{"class":449},[439,3528,908],{"class":533},[439,3530,911],{"class":449},[439,3532,908],{"class":533},[439,3534,916],{"class":512},[439,3536,919],{"class":449},[439,3538,922],{"class":466},[439,3540,925],{"class":449},[439,3542,928],{"class":453},[439,3544,931],{"class":449},[439,3546,561],{"class":453},[439,3548,936],{"class":449},[439,3550,3551,3553,3555],{"class":441,"line":2311},[439,3552,2472],{"class":545},[439,3554,549],{"class":449},[439,3556,875],{"class":449},[439,3558,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603],{"class":441,"line":2350},[439,3560,2481],{"class":545},[439,3562,549],{"class":449},[439,3564,885],{"class":453},[439,3566,611],{"class":449},[439,3568,890],{"class":526},[439,3570,539],{"class":453},[439,3572,539],{"class":449},[439,3574,898],{"class":897},[439,3576,698],{"class":449},[439,3578,2500],{"class":897},[439,3580,549],{"class":449},[439,3582,2505],{"class":533},[439,3584,698],{"class":449},[439,3586,2510],{"class":897},[439,3588,549],{"class":449},[439,3590,2505],{"class":533},[439,3592,911],{"class":449},[439,3594,2505],{"class":533},[439,3596,916],{"class":512},[439,3598,2523],{"class":453},[439,3600,2526],{"class":449},[439,3602,2529],{"class":453},[439,3604,936],{"class":449},[439,3606,3607],{"class":441,"line":3050},[439,3608,2536],{"class":449},[439,3610,3611,3613,3615,3617],{"class":441,"line":3062},[439,3612,457],{"class":449},[439,3614,943],{"class":445},[439,3616,826],{"class":533},[439,3618,473],{"class":449},[439,3620,3621],{"class":441,"line":3072},[439,3622,506],{"emptyLinePlaceholder":505},[439,3624,3625,3627,3629,3631,3633,3635,3637,3639],{"class":441,"line":3089},[439,3626,513],{"class":512},[439,3628,958],{"class":453},[439,3630,579],{"class":449},[439,3632,885],{"class":453},[439,3634,611],{"class":449},[439,3636,967],{"class":526},[439,3638,970],{"class":453},[439,3640,473],{"class":449},[439,3642,3643],{"class":441,"line":3132},[439,3644,506],{"emptyLinePlaceholder":505},[439,3646,3648,3650,3652,3654,3656,3658,3660],{"class":441,"line":3647},29,[439,3649,986],{"class":445},[439,3651,481],{"class":512},[439,3653,991],{"class":533},[439,3655,523],{"class":449},[439,3657,996],{"class":449},[439,3659,999],{"class":453},[439,3661,473],{"class":449},[1003,3663,3664],{},"In a batch the timeout applies to the whole request, not to each route inside it.",[1010,3666,3668],{"id":3667},"aborting-mutations","Aborting Mutations",[405,3670,3671,3673,3674,3676,3677,3679,3680,3683],{},[409,3672,1926],{},", a ",[409,3675,637],{}," and a ",[409,3678,1019],{}," only end the wait on the ",[3681,3682,1990],"strong",{},". The server sees a dropped connection, and nothing is undone. By then the server may not have received the request, may be halfway through it, or may already have committed it.",[3685,3686,3687,3688,3691,3692,3695],"warning",{},"Treat an aborted mutation as ",[3681,3689,3690],{},"unknown",", not as ",[3681,3693,3694],{},"failed",". There is no client-side way to tell the difference.",[1003,3697,3698],{},"Send an idempotency key with each logical action, so the server can return the stored result when you retry. After an abort, refetch the affected resource and show \"syncing\" rather than \"failed\".",[405,3700,3701,3702,3705,3706,611],{},"Cancelling a ",[409,3703,3704],{},"query()"," is always safe, the worst case is wasted work on the server. See ",[2604,3707,3709],{"href":3708},"\u002Frpc\u002Fclient\u002Fclient-overview#queries-and-mutations","Queries and Mutations",[3711,3712,3713],"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 pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}","Cancel in-flight requests and enforce timeouts using AbortSignal.","md",null,{"toc":24},{"title":99,"description":3714},"OUabNuS0-nLuQkWeUEblyhy7umyR3WqY_lf-iFQ5uh0",1793324370458]