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