[{"data":1,"prerenderedAt":1818},["ShallowReactive",2],{"navigation_docs":3,"-introduction-manual-install":195,"-introduction-manual-install-surround":1813},[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","/introduction/about-mion","/introduction","1.introduction",[11,14,18,22],{"title":12,"path":7,"stem":13},"About mion","1.introduction/1.about-mion",{"title":15,"path":16,"stem":17},"Quick Start","/introduction/quick-start","1.introduction/2.quick-start",{"title":19,"path":20,"stem":21},"Manual Install","/introduction/manual-install","1.introduction/3.manual-install",{"title":23,"path":24,"stem":25},"What's Next","/introduction/what-is-next","1.introduction/4.what-is-next",false,{"title":28,"icon":29,"path":30,"stem":31,"children":32,"page":26},"Server","icon-park-outline:server","/server","20.server",[33,37,41,45,49,53,57],{"title":34,"path":35,"stem":36},"Router Overview","/server/overview","20.server/0.overview",{"title":38,"path":39,"stem":40},"Routes","/server/routes","20.server/1.routes",{"title":42,"path":43,"stem":44},"Middleware","/server/middle-fns","20.server/2.middle-fns",{"title":46,"path":47,"stem":48},"Request & Response","/server/request-and-response","20.server/5.request-and-response",{"title":50,"path":51,"stem":52},"Error Handling","/server/error-handling","20.server/6.error-handling",{"title":54,"path":55,"stem":56},"Validation","/server/validation","20.server/7.validation",{"title":58,"path":59,"stem":60},"Serialization","/server/serialization","20.server/8.serialization",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":26},"Drizzle ORM","i-lineicons-drizzle","/drizzle-orm","21.drizzle-orm",[67,71],{"title":68,"path":69,"stem":70},"Drizzle Overview","/drizzle-orm/drizzle-overview","21.drizzle-orm/0.drizzle-overview",{"title":72,"path":73,"stem":74},"Column Mapping","/drizzle-orm/column-mapping","21.drizzle-orm/1.column-mapping",{"title":76,"icon":77,"path":78,"stem":79,"children":80,"page":26},"Client","icon-park-outline:computer","/client","3.client",[81,85,88,92,96],{"title":82,"path":83,"stem":84},"Client Overview","/client/client-overview","3.client/0.client-overview",{"title":50,"path":86,"stem":87},"/client/error-handling","3.client/1.error-handling",{"title":89,"path":90,"stem":91},"Validation Errors","/client/validation-errors","3.client/2.validation-errors",{"title":93,"path":94,"stem":95},"Routes Flow","/client/client-flow","3.client/3.client-flow",{"title":97,"path":98,"stem":99},"Cancellation & Timeouts","/client/cancellation-timeouts","3.client/4.cancellation-timeouts",{"title":101,"icon":102,"redirect":103,"path":104,"stem":105,"children":106,"page":26},"RunTypes","i-lucide-scan-text","/run-types/overview","/run-types","4.run-types",[107,110,114,118,122],{"title":108,"path":103,"stem":109},"RunTypes Overview","4.run-types/0.overview",{"title":111,"path":112,"stem":113},"Supported Types","/run-types/features","4.run-types/1.features",{"title":115,"path":116,"stem":117},"Type Formats","/run-types/type-formats","4.run-types/2.type-formats",{"title":119,"path":120,"stem":121},"Built-in Formats","/run-types/built-in-formats","4.run-types/3.built-in-formats",{"title":123,"path":124,"stem":125},"Caveats","/run-types/caveats","4.run-types/4.caveats",{"title":127,"path":128,"stem":129,"children":130,"page":26},"Devtools","/devtools","5.devtools",[131,135,139,143],{"title":132,"path":133,"stem":134},"AOT Compilation","/devtools/aot-compilation","5.devtools/0.aot-compilation",{"title":136,"path":137,"stem":138},"Pure Functions","/devtools/pure-functions","5.devtools/1.pure-functions",{"title":140,"path":141,"stem":142},"ESLint Rules","/devtools/eslint-rules","5.devtools/2.eslint-rules",{"title":144,"path":145,"stem":146},"Vite Configuration","/devtools/vite-config","5.devtools/3.vite-config",{"title":148,"redirect":149,"icon":150,"path":151,"stem":152,"children":153,"page":26},"Platforms","/platforms/node-js","icon-park-outline:play","/platforms","6.platforms",[154,157,161,165,169,173],{"title":155,"path":149,"stem":156},"Node.js","6.platforms/1.node-js",{"title":158,"path":159,"stem":160},"Bun","/platforms/bun","6.platforms/2.bun",{"title":162,"path":163,"stem":164},"AWS Lambda","/platforms/aws-lambda","6.platforms/3.aws-lambda",{"title":166,"path":167,"stem":168},"Google Cloud Functions","/platforms/google-cloud-functions","6.platforms/4.google-cloud-functions",{"title":170,"path":171,"stem":172},"Cloudflare Workers","/platforms/cloudflare","6.platforms/5.cloudflare",{"title":174,"path":175,"stem":176},"Vercel","/platforms/vercel","6.platforms/6.vercel",{"title":178,"icon":179,"redirect":180,"path":181,"stem":182,"children":183,"page":26},"Benchmarks","icon-park-outline:chart-line","/benchmarks/hello-world","/benchmarks","7.benchmarks",[184,187,191],{"title":185,"path":180,"stem":186},"Hello World","7.benchmarks/1.hello-world",{"title":188,"path":189,"stem":190},"Light Validation","/benchmarks/light-validation","7.benchmarks/2.light-validation",{"title":192,"path":193,"stem":194},"Heavy Validation","/benchmarks/heavy-validation","7.benchmarks/3.heavy-validation",{"id":196,"title":19,"body":197,"description":1807,"extension":1808,"links":1809,"meta":1810,"navigation":491,"path":20,"seo":1811,"stem":21,"__hash__":1812},"docs/1.introduction/3.manual-install.md",{"type":198,"value":199},"minimark",[200,205,219,260,331,338,398,401,1015,1018,1412,1414,1416,1419,1423,1437,1440,1789,1803],[201,202,204],"h2",{"id":203},"server-side","Server Side",[206,207,208,209,213,214],"p",{},"Install the router and Configure ",[210,211,212],"code",{},"tsConfig.json"," to enable ",[215,216,218],"a",{"href":217},"../introduction/about-mion#automatic-serialization-validation","runTypes metadata.",[220,221,226],"pre",{"className":222,"code":223,"language":224,"meta":225,"style":225},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm i @mionjs/core @mionjs/router\nnpm i -D @mionjs/devtools\n","bash","",[210,227,228,247],{"__ignoreMap":225},[229,230,233,237,241,244],"span",{"class":231,"line":232},"line",1,[229,234,236],{"class":235},"sBMFI","npm",[229,238,240],{"class":239},"sfazB"," i",[229,242,243],{"class":239}," @mionjs/core",[229,245,246],{"class":239}," @mionjs/router\n",[229,248,250,252,254,257],{"class":231,"line":249},2,[229,251,236],{"class":235},[229,253,240],{"class":239},[229,255,256],{"class":239}," -D",[229,258,259],{"class":239}," @mionjs/devtools\n",[220,261,265],{"className":262,"code":263,"filename":212,"language":264,"meta":225,"style":225},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"compilerOptions\": {\n    // typescript compiler options ...\n  },\n  // enables runtime type metadata for mion's validation and serialization\n  \"reflection\": true\n}\n","json",[210,266,267,273,291,298,304,310,325],{"__ignoreMap":225},[229,268,269],{"class":231,"line":232},[229,270,272],{"class":271},"sMK4o","{\n",[229,274,275,278,282,285,288],{"class":231,"line":249},[229,276,277],{"class":271},"  \"",[229,279,281],{"class":280},"spNyl","compilerOptions",[229,283,284],{"class":271},"\"",[229,286,287],{"class":271},":",[229,289,290],{"class":271}," {\n",[229,292,294],{"class":231,"line":293},3,[229,295,297],{"class":296},"sHwdD","    // typescript compiler options ...\n",[229,299,301],{"class":231,"line":300},4,[229,302,303],{"class":271},"  },\n",[229,305,307],{"class":231,"line":306},5,[229,308,309],{"class":296},"  // enables runtime type metadata for mion's validation and serialization\n",[229,311,313,315,318,320,322],{"class":231,"line":312},6,[229,314,277],{"class":271},[229,316,317],{"class":280},"reflection",[229,319,284],{"class":271},[229,321,287],{"class":271},[229,323,324],{"class":271}," true\n",[229,326,328],{"class":231,"line":327},7,[229,329,330],{"class":271},"}\n",[206,332,333,334,337],{},"Install dependencies depending on where you running mion.",[335,336],"br",{},"For local development use Node or Bun.",[339,340,341,356,370,384],"code-group",{},[220,342,344],{"className":222,"code":343,"filename":155,"language":224,"meta":225,"style":225},"npm install @mionjs/platform-node\n",[210,345,346],{"__ignoreMap":225},[229,347,348,350,353],{"class":231,"line":232},[229,349,236],{"class":235},[229,351,352],{"class":239}," install",[229,354,355],{"class":239}," @mionjs/platform-node\n",[220,357,359],{"className":222,"code":358,"filename":158,"language":224,"meta":225,"style":225},"npm install @mionjs/platform-bun\n",[210,360,361],{"__ignoreMap":225},[229,362,363,365,367],{"class":231,"line":232},[229,364,236],{"class":235},[229,366,352],{"class":239},[229,368,369],{"class":239}," @mionjs/platform-bun\n",[220,371,373],{"className":222,"code":372,"filename":162,"language":224,"meta":225,"style":225},"npm install @mionjs/platform-aws\n",[210,374,375],{"__ignoreMap":225},[229,376,377,379,381],{"class":231,"line":232},[229,378,236],{"class":235},[229,380,352],{"class":239},[229,382,383],{"class":239}," @mionjs/platform-aws\n",[220,385,387],{"className":222,"code":386,"filename":166,"language":224,"meta":225,"style":225},"npm install @mionjs/platform-gcloud\n",[210,388,389],{"__ignoreMap":225},[229,390,391,393,395],{"class":231,"line":232},[229,392,236],{"class":235},[229,394,352],{"class":239},[229,396,397],{"class":239}," @mionjs/platform-gcloud\n",[206,399,400],{},"Write your first mion API.",[220,402,406],{"className":403,"code":404,"language":405,"meta":225,"style":225},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {HeadersSubset, RpcError} from '@mionjs/core';\nimport {RouterOptions, initMionRouter, headersFn, middleFn, route} from '@mionjs/router';\n\nexport type User = {id: string; name: string; surname: string};\n\n// set options and init router\nexport const routerOptions: Partial\u003CRouterOptions> = {prefix: 'api/v1'};\nexport const myApi = await initMionRouter(\n    // all function parameters will be automatically validated before the function is called\n    {\n        auth: headersFn((ctx, h: HeadersSubset\u003C'Authorization'>): void | RpcError\u003C'not-authorized'> => {\n            const token = h.headers.Authorization;\n            if (!token) return new RpcError\u003C'not-authorized'>({publicMessage: 'Not Authorized', type: 'not-authorized'});\n        }),\n        users: {\n            sayHello: route((ctx, user: User): string => `Hello ${user.name} ${user.surname}`),\n        },\n        log: middleFn((ctx): void => console.log(Date.now(), ctx.path, ctx.response.statusCode), {runOnError: true}),\n    },\n    routerOptions\n);\n\n// Export the type of the Api (used by the client)\nexport type MyApi = typeof myApi;\n","ts",[210,407,408,445,487,493,540,544,549,590,612,618,624,689,714,786,797,807,875,881,965,971,977,984,989,995],{"__ignoreMap":225},[229,409,410,414,417,421,424,427,430,433,436,439,442],{"class":231,"line":232},[229,411,413],{"class":412},"s7zQu","import",[229,415,416],{"class":271}," {",[229,418,420],{"class":419},"sTEyZ","HeadersSubset",[229,422,423],{"class":271},",",[229,425,426],{"class":419}," RpcError",[229,428,429],{"class":271},"}",[229,431,432],{"class":412}," from",[229,434,435],{"class":271}," '",[229,437,438],{"class":239},"@mionjs/core",[229,440,441],{"class":271},"'",[229,443,444],{"class":271},";\n",[229,446,447,449,451,454,456,459,461,464,466,469,471,474,476,478,480,483,485],{"class":231,"line":249},[229,448,413],{"class":412},[229,450,416],{"class":271},[229,452,453],{"class":419},"RouterOptions",[229,455,423],{"class":271},[229,457,458],{"class":419}," initMionRouter",[229,460,423],{"class":271},[229,462,463],{"class":419}," headersFn",[229,465,423],{"class":271},[229,467,468],{"class":419}," middleFn",[229,470,423],{"class":271},[229,472,473],{"class":419}," route",[229,475,429],{"class":271},[229,477,432],{"class":412},[229,479,435],{"class":271},[229,481,482],{"class":239},"@mionjs/router",[229,484,441],{"class":271},[229,486,444],{"class":271},[229,488,489],{"class":231,"line":293},[229,490,492],{"emptyLinePlaceholder":491},true,"\n",[229,494,495,498,501,504,507,509,513,515,518,521,524,526,528,530,533,535,537],{"class":231,"line":300},[229,496,497],{"class":412},"export",[229,499,500],{"class":280}," type",[229,502,503],{"class":235}," User",[229,505,506],{"class":271}," =",[229,508,416],{"class":271},[229,510,512],{"class":511},"swJcz","id",[229,514,287],{"class":271},[229,516,517],{"class":235}," string",[229,519,520],{"class":271},";",[229,522,523],{"class":511}," name",[229,525,287],{"class":271},[229,527,517],{"class":235},[229,529,520],{"class":271},[229,531,532],{"class":511}," surname",[229,534,287],{"class":271},[229,536,517],{"class":235},[229,538,539],{"class":271},"};\n",[229,541,542],{"class":231,"line":306},[229,543,492],{"emptyLinePlaceholder":491},[229,545,546],{"class":231,"line":312},[229,547,548],{"class":296},"// set options and init router\n",[229,550,551,553,556,559,561,564,567,569,572,574,576,579,581,583,586,588],{"class":231,"line":327},[229,552,497],{"class":412},[229,554,555],{"class":280}," const",[229,557,558],{"class":419}," routerOptions",[229,560,287],{"class":271},[229,562,563],{"class":235}," Partial",[229,565,566],{"class":271},"\u003C",[229,568,453],{"class":235},[229,570,571],{"class":271},">",[229,573,506],{"class":271},[229,575,416],{"class":271},[229,577,578],{"class":511},"prefix",[229,580,287],{"class":271},[229,582,435],{"class":271},[229,584,585],{"class":239},"api/v1",[229,587,441],{"class":271},[229,589,539],{"class":271},[229,591,593,595,597,600,603,606,609],{"class":231,"line":592},8,[229,594,497],{"class":412},[229,596,555],{"class":280},[229,598,599],{"class":419}," myApi ",[229,601,602],{"class":271},"=",[229,604,605],{"class":412}," await",[229,607,458],{"class":608},"s2Zo4",[229,610,611],{"class":419},"(\n",[229,613,615],{"class":231,"line":614},9,[229,616,617],{"class":296},"    // all function parameters will be automatically validated before the function is called\n",[229,619,621],{"class":231,"line":620},10,[229,622,623],{"class":271},"    {\n",[229,625,627,630,632,634,637,639,643,645,648,650,653,655,657,660,662,665,668,671,673,675,677,680,682,684,687],{"class":231,"line":626},11,[229,628,629],{"class":511},"        auth",[229,631,287],{"class":271},[229,633,463],{"class":608},[229,635,636],{"class":419},"(",[229,638,636],{"class":271},[229,640,642],{"class":641},"sHdIc","ctx",[229,644,423],{"class":271},[229,646,647],{"class":641}," h",[229,649,287],{"class":271},[229,651,652],{"class":235}," HeadersSubset",[229,654,566],{"class":271},[229,656,441],{"class":271},[229,658,659],{"class":239},"Authorization",[229,661,441],{"class":271},[229,663,664],{"class":271},">):",[229,666,667],{"class":235}," void",[229,669,670],{"class":271}," |",[229,672,426],{"class":235},[229,674,566],{"class":271},[229,676,441],{"class":271},[229,678,679],{"class":239},"not-authorized",[229,681,441],{"class":271},[229,683,571],{"class":271},[229,685,686],{"class":280}," =>",[229,688,290],{"class":271},[229,690,692,695,698,700,702,705,708,710,712],{"class":231,"line":691},12,[229,693,694],{"class":280},"            const",[229,696,697],{"class":419}," token",[229,699,506],{"class":271},[229,701,647],{"class":419},[229,703,704],{"class":271},".",[229,706,707],{"class":419},"headers",[229,709,704],{"class":271},[229,711,659],{"class":419},[229,713,444],{"class":271},[229,715,717,720,723,726,729,732,735,738,740,742,744,746,748,750,752,755,758,760,762,765,767,769,771,773,775,777,779,781,784],{"class":231,"line":716},13,[229,718,719],{"class":412},"            if",[229,721,722],{"class":511}," (",[229,724,725],{"class":271},"!",[229,727,728],{"class":419},"token",[229,730,731],{"class":511},") ",[229,733,734],{"class":412},"return",[229,736,737],{"class":271}," new",[229,739,426],{"class":608},[229,741,566],{"class":271},[229,743,441],{"class":271},[229,745,679],{"class":239},[229,747,441],{"class":271},[229,749,571],{"class":271},[229,751,636],{"class":511},[229,753,754],{"class":271},"{",[229,756,757],{"class":511},"publicMessage",[229,759,287],{"class":271},[229,761,435],{"class":271},[229,763,764],{"class":239},"Not Authorized",[229,766,441],{"class":271},[229,768,423],{"class":271},[229,770,500],{"class":511},[229,772,287],{"class":271},[229,774,435],{"class":271},[229,776,679],{"class":239},[229,778,441],{"class":271},[229,780,429],{"class":271},[229,782,783],{"class":511},")",[229,785,444],{"class":271},[229,787,789,792,794],{"class":231,"line":788},14,[229,790,791],{"class":271},"        }",[229,793,783],{"class":419},[229,795,796],{"class":271},",\n",[229,798,800,803,805],{"class":231,"line":799},15,[229,801,802],{"class":511},"        users",[229,804,287],{"class":271},[229,806,290],{"class":271},[229,808,810,813,815,817,819,821,823,825,828,830,832,835,837,839,842,845,848,851,853,856,858,861,863,865,868,871,873],{"class":231,"line":809},16,[229,811,812],{"class":511},"            sayHello",[229,814,287],{"class":271},[229,816,473],{"class":608},[229,818,636],{"class":419},[229,820,636],{"class":271},[229,822,642],{"class":641},[229,824,423],{"class":271},[229,826,827],{"class":641}," user",[229,829,287],{"class":271},[229,831,503],{"class":235},[229,833,834],{"class":271},"):",[229,836,517],{"class":235},[229,838,686],{"class":280},[229,840,841],{"class":271}," `",[229,843,844],{"class":239},"Hello ",[229,846,847],{"class":271},"${",[229,849,850],{"class":419},"user",[229,852,704],{"class":271},[229,854,855],{"class":419},"name",[229,857,429],{"class":271},[229,859,860],{"class":271}," ${",[229,862,850],{"class":419},[229,864,704],{"class":271},[229,866,867],{"class":419},"surname",[229,869,870],{"class":271},"}`",[229,872,783],{"class":419},[229,874,796],{"class":271},[229,876,878],{"class":231,"line":877},17,[229,879,880],{"class":271},"        },\n",[229,882,884,887,889,891,893,895,897,899,901,903,906,908,911,914,916,919,922,924,927,929,932,934,936,938,941,943,946,948,950,953,955,959,961,963],{"class":231,"line":883},18,[229,885,886],{"class":511},"        log",[229,888,287],{"class":271},[229,890,468],{"class":608},[229,892,636],{"class":419},[229,894,636],{"class":271},[229,896,642],{"class":641},[229,898,834],{"class":271},[229,900,667],{"class":235},[229,902,686],{"class":280},[229,904,905],{"class":419}," console",[229,907,704],{"class":271},[229,909,910],{"class":608},"log",[229,912,913],{"class":419},"(Date",[229,915,704],{"class":271},[229,917,918],{"class":608},"now",[229,920,921],{"class":419},"()",[229,923,423],{"class":271},[229,925,926],{"class":419}," ctx",[229,928,704],{"class":271},[229,930,931],{"class":419},"path",[229,933,423],{"class":271},[229,935,926],{"class":419},[229,937,704],{"class":271},[229,939,940],{"class":419},"response",[229,942,704],{"class":271},[229,944,945],{"class":419},"statusCode)",[229,947,423],{"class":271},[229,949,416],{"class":271},[229,951,952],{"class":511},"runOnError",[229,954,287],{"class":271},[229,956,958],{"class":957},"sfNiH"," true",[229,960,429],{"class":271},[229,962,783],{"class":419},[229,964,796],{"class":271},[229,966,968],{"class":231,"line":967},19,[229,969,970],{"class":271},"    },\n",[229,972,974],{"class":231,"line":973},20,[229,975,976],{"class":419},"    routerOptions\n",[229,978,980,982],{"class":231,"line":979},21,[229,981,783],{"class":419},[229,983,444],{"class":271},[229,985,987],{"class":231,"line":986},22,[229,988,492],{"emptyLinePlaceholder":491},[229,990,992],{"class":231,"line":991},23,[229,993,994],{"class":296},"// Export the type of the Api (used by the client)\n",[229,996,998,1000,1002,1005,1007,1010,1013],{"class":231,"line":997},24,[229,999,497],{"class":412},[229,1001,500],{"class":280},[229,1003,1004],{"class":235}," MyApi",[229,1006,506],{"class":271},[229,1008,1009],{"class":271}," typeof",[229,1011,1012],{"class":419}," myApi",[229,1014,444],{"class":271},[206,1016,1017],{},"Write a start script depending on where you running mion.",[339,1019,1020,1117,1209,1311],{},[220,1021,1023],{"className":403,"code":1022,"filename":155,"language":405,"meta":225,"style":225},"import {NodeHttpOptions, startNodeServer} from '@mionjs/platform-node';\nimport './myApi.routes';\n\n// init a http server with options specific for node\nconst nodeOptions: Partial\u003CNodeHttpOptions> = {port: 3000};\nstartNodeServer(nodeOptions);\n",[210,1024,1025,1052,1065,1069,1074,1107],{"__ignoreMap":225},[229,1026,1027,1029,1031,1034,1036,1039,1041,1043,1045,1048,1050],{"class":231,"line":232},[229,1028,413],{"class":412},[229,1030,416],{"class":271},[229,1032,1033],{"class":419},"NodeHttpOptions",[229,1035,423],{"class":271},[229,1037,1038],{"class":419}," startNodeServer",[229,1040,429],{"class":271},[229,1042,432],{"class":412},[229,1044,435],{"class":271},[229,1046,1047],{"class":239},"@mionjs/platform-node",[229,1049,441],{"class":271},[229,1051,444],{"class":271},[229,1053,1054,1056,1058,1061,1063],{"class":231,"line":249},[229,1055,413],{"class":412},[229,1057,435],{"class":271},[229,1059,1060],{"class":239},"./myApi.routes",[229,1062,441],{"class":271},[229,1064,444],{"class":271},[229,1066,1067],{"class":231,"line":293},[229,1068,492],{"emptyLinePlaceholder":491},[229,1070,1071],{"class":231,"line":300},[229,1072,1073],{"class":296},"// init a http server with options specific for node\n",[229,1075,1076,1079,1082,1084,1086,1088,1090,1092,1094,1096,1099,1101,1105],{"class":231,"line":306},[229,1077,1078],{"class":280},"const",[229,1080,1081],{"class":419}," nodeOptions",[229,1083,287],{"class":271},[229,1085,563],{"class":235},[229,1087,566],{"class":271},[229,1089,1033],{"class":235},[229,1091,571],{"class":271},[229,1093,506],{"class":271},[229,1095,416],{"class":271},[229,1097,1098],{"class":511},"port",[229,1100,287],{"class":271},[229,1102,1104],{"class":1103},"sbssI"," 3000",[229,1106,539],{"class":271},[229,1108,1109,1112,1115],{"class":231,"line":312},[229,1110,1111],{"class":608},"startNodeServer",[229,1113,1114],{"class":419},"(nodeOptions)",[229,1116,444],{"class":271},[220,1118,1120],{"className":403,"code":1119,"filename":158,"language":405,"meta":225,"style":225},"import {BunHttpOptions, startBunServer} from '@mionjs/platform-bun';\nimport './myApi.routes';\n\n// init a bun server with options specific for bun\nconst bunOptions: Partial\u003CBunHttpOptions> = {port: 3000};\nstartBunServer(bunOptions);\n",[210,1121,1122,1149,1161,1165,1170,1199],{"__ignoreMap":225},[229,1123,1124,1126,1128,1131,1133,1136,1138,1140,1142,1145,1147],{"class":231,"line":232},[229,1125,413],{"class":412},[229,1127,416],{"class":271},[229,1129,1130],{"class":419},"BunHttpOptions",[229,1132,423],{"class":271},[229,1134,1135],{"class":419}," startBunServer",[229,1137,429],{"class":271},[229,1139,432],{"class":412},[229,1141,435],{"class":271},[229,1143,1144],{"class":239},"@mionjs/platform-bun",[229,1146,441],{"class":271},[229,1148,444],{"class":271},[229,1150,1151,1153,1155,1157,1159],{"class":231,"line":249},[229,1152,413],{"class":412},[229,1154,435],{"class":271},[229,1156,1060],{"class":239},[229,1158,441],{"class":271},[229,1160,444],{"class":271},[229,1162,1163],{"class":231,"line":293},[229,1164,492],{"emptyLinePlaceholder":491},[229,1166,1167],{"class":231,"line":300},[229,1168,1169],{"class":296},"// init a bun server with options specific for bun\n",[229,1171,1172,1174,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197],{"class":231,"line":306},[229,1173,1078],{"class":280},[229,1175,1176],{"class":419}," bunOptions",[229,1178,287],{"class":271},[229,1180,563],{"class":235},[229,1182,566],{"class":271},[229,1184,1130],{"class":235},[229,1186,571],{"class":271},[229,1188,506],{"class":271},[229,1190,416],{"class":271},[229,1192,1098],{"class":511},[229,1194,287],{"class":271},[229,1196,1104],{"class":1103},[229,1198,539],{"class":271},[229,1200,1201,1204,1207],{"class":231,"line":312},[229,1202,1203],{"class":608},"startBunServer",[229,1205,1206],{"class":419},"(bunOptions)",[229,1208,444],{"class":271},[220,1210,1212],{"className":403,"code":1211,"filename":162,"language":405,"meta":225,"style":225},"import {AwsLambdaOptions, createAwsLambdaHandler} from '@mionjs/platform-aws';\nimport './myApi.routes';\n\n// set options specific for aws lambda\nconst awsOptions: Partial\u003CAwsLambdaOptions> = {};\n\n// export AWS Lambda Handler\nexport const handler = createAwsLambdaHandler(awsOptions);\n",[210,1213,1214,1241,1253,1257,1262,1284,1288,1293],{"__ignoreMap":225},[229,1215,1216,1218,1220,1223,1225,1228,1230,1232,1234,1237,1239],{"class":231,"line":232},[229,1217,413],{"class":412},[229,1219,416],{"class":271},[229,1221,1222],{"class":419},"AwsLambdaOptions",[229,1224,423],{"class":271},[229,1226,1227],{"class":419}," createAwsLambdaHandler",[229,1229,429],{"class":271},[229,1231,432],{"class":412},[229,1233,435],{"class":271},[229,1235,1236],{"class":239},"@mionjs/platform-aws",[229,1238,441],{"class":271},[229,1240,444],{"class":271},[229,1242,1243,1245,1247,1249,1251],{"class":231,"line":249},[229,1244,413],{"class":412},[229,1246,435],{"class":271},[229,1248,1060],{"class":239},[229,1250,441],{"class":271},[229,1252,444],{"class":271},[229,1254,1255],{"class":231,"line":293},[229,1256,492],{"emptyLinePlaceholder":491},[229,1258,1259],{"class":231,"line":300},[229,1260,1261],{"class":296},"// set options specific for aws lambda\n",[229,1263,1264,1266,1269,1271,1273,1275,1277,1279,1281],{"class":231,"line":306},[229,1265,1078],{"class":280},[229,1267,1268],{"class":419}," awsOptions",[229,1270,287],{"class":271},[229,1272,563],{"class":235},[229,1274,566],{"class":271},[229,1276,1222],{"class":235},[229,1278,571],{"class":271},[229,1280,506],{"class":271},[229,1282,1283],{"class":271}," {};\n",[229,1285,1286],{"class":231,"line":312},[229,1287,492],{"emptyLinePlaceholder":491},[229,1289,1290],{"class":231,"line":327},[229,1291,1292],{"class":296},"// export AWS Lambda Handler\n",[229,1294,1295,1297,1299,1302,1304,1306,1309],{"class":231,"line":592},[229,1296,497],{"class":412},[229,1298,555],{"class":280},[229,1300,1301],{"class":419}," handler ",[229,1303,602],{"class":271},[229,1305,1227],{"class":608},[229,1307,1308],{"class":419},"(awsOptions)",[229,1310,444],{"class":271},[220,1312,1315],{"className":403,"code":1313,"filename":1314,"language":405,"meta":225,"style":225},"import {GoogleCFOptions, createGoogleCFHandler} from '@mionjs/platform-gcloud';\nimport './myApi.routes';\n\n// set options specific for GC Cloud Functions\nconst gcfOptions: Partial\u003CGoogleCFOptions> = {};\n\n// export Google Cloud Functions Handler\nexport const handler = createGoogleCFHandler(gcfOptions);\n","Google Cloud",[210,1316,1317,1344,1356,1360,1365,1386,1390,1395],{"__ignoreMap":225},[229,1318,1319,1321,1323,1326,1328,1331,1333,1335,1337,1340,1342],{"class":231,"line":232},[229,1320,413],{"class":412},[229,1322,416],{"class":271},[229,1324,1325],{"class":419},"GoogleCFOptions",[229,1327,423],{"class":271},[229,1329,1330],{"class":419}," createGoogleCFHandler",[229,1332,429],{"class":271},[229,1334,432],{"class":412},[229,1336,435],{"class":271},[229,1338,1339],{"class":239},"@mionjs/platform-gcloud",[229,1341,441],{"class":271},[229,1343,444],{"class":271},[229,1345,1346,1348,1350,1352,1354],{"class":231,"line":249},[229,1347,413],{"class":412},[229,1349,435],{"class":271},[229,1351,1060],{"class":239},[229,1353,441],{"class":271},[229,1355,444],{"class":271},[229,1357,1358],{"class":231,"line":293},[229,1359,492],{"emptyLinePlaceholder":491},[229,1361,1362],{"class":231,"line":300},[229,1363,1364],{"class":296},"// set options specific for GC Cloud Functions\n",[229,1366,1367,1369,1372,1374,1376,1378,1380,1382,1384],{"class":231,"line":306},[229,1368,1078],{"class":280},[229,1370,1371],{"class":419}," gcfOptions",[229,1373,287],{"class":271},[229,1375,563],{"class":235},[229,1377,566],{"class":271},[229,1379,1325],{"class":235},[229,1381,571],{"class":271},[229,1383,506],{"class":271},[229,1385,1283],{"class":271},[229,1387,1388],{"class":231,"line":312},[229,1389,492],{"emptyLinePlaceholder":491},[229,1391,1392],{"class":231,"line":327},[229,1393,1394],{"class":296},"// export Google Cloud Functions Handler\n",[229,1396,1397,1399,1401,1403,1405,1407,1410],{"class":231,"line":592},[229,1398,497],{"class":412},[229,1400,555],{"class":280},[229,1402,1301],{"class":419},[229,1404,602],{"class":271},[229,1406,1330],{"class":608},[229,1408,1409],{"class":419},"(gcfOptions)",[229,1411,444],{"class":271},[335,1413],{},[335,1415],{},[1417,1418],"spacer",{},[201,1420,1422],{"id":1421},"client-side","Client Side",[220,1424,1426],{"className":222,"code":1425,"language":224,"meta":225,"style":225},"npm install @mionjs/client\n",[210,1427,1428],{"__ignoreMap":225},[229,1429,1430,1432,1434],{"class":231,"line":232},[229,1431,236],{"class":235},[229,1433,352],{"class":239},[229,1435,1436],{"class":239}," @mionjs/client\n",[206,1438,1439],{},"Make sure to only import the types of our mion API, this way no code is actually imported.",[220,1441,1443],{"className":403,"code":1442,"language":405,"meta":225,"style":225},"import {initClient} from '@mionjs/client';\n// importing only the RemoteApi type from server\nimport type {MyApi} from './myApi.routes.ts';\n\nconst john = {id: '123', name: 'John', surname: 'Doe'};\nconst {routes, middleFns} = initClient\u003CMyApi>({baseURL: 'http://localhost:3000'});\n\n// prefills auth token for any future requests, value is stored in localStorage by default\nawait middleFns.auth({headers: {Authorization: 'myToken-XYZ'}}).prefill();\n\n// calls sayHello route in the server\nconst [hello] = await routes.users.sayHello(john).call();\nconsole.log(hello); // Hello John Doe\n\n// validate parameters locally without calling the server (await still required as typeErrors is async)\nconst [_, error] = await routes.users.sayHello(john).typeErrors();\nconsole.log(error); // {hasErrors: false, totalErrors: 0, errors: []}\n",[210,1444,1445,1467,1472,1496,1500,1550,1599,1603,1608,1655,1659,1664,1706,1723,1727,1732,1773],{"__ignoreMap":225},[229,1446,1447,1449,1451,1454,1456,1458,1460,1463,1465],{"class":231,"line":232},[229,1448,413],{"class":412},[229,1450,416],{"class":271},[229,1452,1453],{"class":419},"initClient",[229,1455,429],{"class":271},[229,1457,432],{"class":412},[229,1459,435],{"class":271},[229,1461,1462],{"class":239},"@mionjs/client",[229,1464,441],{"class":271},[229,1466,444],{"class":271},[229,1468,1469],{"class":231,"line":249},[229,1470,1471],{"class":296},"// importing only the RemoteApi type from server\n",[229,1473,1474,1476,1478,1480,1483,1485,1487,1489,1492,1494],{"class":231,"line":293},[229,1475,413],{"class":412},[229,1477,500],{"class":412},[229,1479,416],{"class":271},[229,1481,1482],{"class":419},"MyApi",[229,1484,429],{"class":271},[229,1486,432],{"class":412},[229,1488,435],{"class":271},[229,1490,1491],{"class":239},"./myApi.routes.ts",[229,1493,441],{"class":271},[229,1495,444],{"class":271},[229,1497,1498],{"class":231,"line":300},[229,1499,492],{"emptyLinePlaceholder":491},[229,1501,1502,1504,1507,1509,1511,1513,1515,1517,1520,1522,1524,1526,1528,1530,1533,1535,1537,1539,1541,1543,1546,1548],{"class":231,"line":306},[229,1503,1078],{"class":280},[229,1505,1506],{"class":419}," john ",[229,1508,602],{"class":271},[229,1510,416],{"class":271},[229,1512,512],{"class":511},[229,1514,287],{"class":271},[229,1516,435],{"class":271},[229,1518,1519],{"class":239},"123",[229,1521,441],{"class":271},[229,1523,423],{"class":271},[229,1525,523],{"class":511},[229,1527,287],{"class":271},[229,1529,435],{"class":271},[229,1531,1532],{"class":239},"John",[229,1534,441],{"class":271},[229,1536,423],{"class":271},[229,1538,532],{"class":511},[229,1540,287],{"class":271},[229,1542,435],{"class":271},[229,1544,1545],{"class":239},"Doe",[229,1547,441],{"class":271},[229,1549,539],{"class":271},[229,1551,1552,1554,1556,1559,1561,1564,1566,1568,1571,1573,1575,1577,1579,1581,1584,1586,1588,1591,1593,1595,1597],{"class":231,"line":312},[229,1553,1078],{"class":280},[229,1555,416],{"class":271},[229,1557,1558],{"class":419},"routes",[229,1560,423],{"class":271},[229,1562,1563],{"class":419}," middleFns",[229,1565,429],{"class":271},[229,1567,506],{"class":271},[229,1569,1570],{"class":608}," initClient",[229,1572,566],{"class":271},[229,1574,1482],{"class":235},[229,1576,571],{"class":271},[229,1578,636],{"class":419},[229,1580,754],{"class":271},[229,1582,1583],{"class":511},"baseURL",[229,1585,287],{"class":271},[229,1587,435],{"class":271},[229,1589,1590],{"class":239},"http://localhost:3000",[229,1592,441],{"class":271},[229,1594,429],{"class":271},[229,1596,783],{"class":419},[229,1598,444],{"class":271},[229,1600,1601],{"class":231,"line":327},[229,1602,492],{"emptyLinePlaceholder":491},[229,1604,1605],{"class":231,"line":592},[229,1606,1607],{"class":296},"// prefills auth token for any future requests, value is stored in localStorage by default\n",[229,1609,1610,1613,1615,1617,1620,1622,1624,1626,1628,1630,1632,1634,1636,1639,1641,1644,1646,1648,1651,1653],{"class":231,"line":614},[229,1611,1612],{"class":412},"await",[229,1614,1563],{"class":419},[229,1616,704],{"class":271},[229,1618,1619],{"class":608},"auth",[229,1621,636],{"class":419},[229,1623,754],{"class":271},[229,1625,707],{"class":511},[229,1627,287],{"class":271},[229,1629,416],{"class":271},[229,1631,659],{"class":511},[229,1633,287],{"class":271},[229,1635,435],{"class":271},[229,1637,1638],{"class":239},"myToken-XYZ",[229,1640,441],{"class":271},[229,1642,1643],{"class":271},"}}",[229,1645,783],{"class":419},[229,1647,704],{"class":271},[229,1649,1650],{"class":608},"prefill",[229,1652,921],{"class":419},[229,1654,444],{"class":271},[229,1656,1657],{"class":231,"line":620},[229,1658,492],{"emptyLinePlaceholder":491},[229,1660,1661],{"class":231,"line":626},[229,1662,1663],{"class":296},"// calls sayHello route in the server\n",[229,1665,1666,1668,1671,1674,1677,1679,1681,1684,1686,1689,1691,1694,1697,1699,1702,1704],{"class":231,"line":691},[229,1667,1078],{"class":280},[229,1669,1670],{"class":271}," [",[229,1672,1673],{"class":419},"hello",[229,1675,1676],{"class":271},"]",[229,1678,506],{"class":271},[229,1680,605],{"class":412},[229,1682,1683],{"class":419}," routes",[229,1685,704],{"class":271},[229,1687,1688],{"class":419},"users",[229,1690,704],{"class":271},[229,1692,1693],{"class":608},"sayHello",[229,1695,1696],{"class":419},"(john)",[229,1698,704],{"class":271},[229,1700,1701],{"class":608},"call",[229,1703,921],{"class":419},[229,1705,444],{"class":271},[229,1707,1708,1711,1713,1715,1718,1720],{"class":231,"line":716},[229,1709,1710],{"class":419},"console",[229,1712,704],{"class":271},[229,1714,910],{"class":608},[229,1716,1717],{"class":419},"(hello)",[229,1719,520],{"class":271},[229,1721,1722],{"class":296}," // Hello John Doe\n",[229,1724,1725],{"class":231,"line":788},[229,1726,492],{"emptyLinePlaceholder":491},[229,1728,1729],{"class":231,"line":799},[229,1730,1731],{"class":296},"// validate parameters locally without calling the server (await still required as typeErrors is async)\n",[229,1733,1734,1736,1738,1741,1743,1746,1748,1750,1752,1754,1756,1758,1760,1762,1764,1766,1769,1771],{"class":231,"line":809},[229,1735,1078],{"class":280},[229,1737,1670],{"class":271},[229,1739,1740],{"class":419},"_",[229,1742,423],{"class":271},[229,1744,1745],{"class":419}," error",[229,1747,1676],{"class":271},[229,1749,506],{"class":271},[229,1751,605],{"class":412},[229,1753,1683],{"class":419},[229,1755,704],{"class":271},[229,1757,1688],{"class":419},[229,1759,704],{"class":271},[229,1761,1693],{"class":608},[229,1763,1696],{"class":419},[229,1765,704],{"class":271},[229,1767,1768],{"class":608},"typeErrors",[229,1770,921],{"class":419},[229,1772,444],{"class":271},[229,1774,1775,1777,1779,1781,1784,1786],{"class":231,"line":877},[229,1776,1710],{"class":419},[229,1778,704],{"class":271},[229,1780,910],{"class":608},[229,1782,1783],{"class":419},"(error)",[229,1785,520],{"class":271},[229,1787,1788],{"class":296}," // {hasErrors: false, totalErrors: 0, errors: []}\n",[1790,1791,1792,1793,1797,1798,1802],"note",{},"The mion ",[215,1794,1796],{"href":1795},"../devtools/vite-config","Vite plugin"," with ",[215,1799,1801],{"href":1800},"../devtools/aot-compilation","AOT compilation"," can pre-compile all server routes and JIT functions, enabling deployment to secure environments and faster startup times.",[1804,1805,1806],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}","How to manually configure a mion app.","md",null,{"toc":26},{"title":19,"description":1807},"6RqiuZgBK60oqOTn-P2WKLLy1fGOUAroKq4Gf_1ICmE",[1814,1816],{"title":15,"path":16,"stem":17,"description":1815,"children":-1},"How to get started with mion full stack APIs.",{"title":23,"path":24,"stem":25,"description":1817,"children":-1},"Upcoming features and improvements for mion.",1777152485748]