[{"data":1,"prerenderedAt":1350},["ShallowReactive",2],{"navigation_docs":3,"-rpc-platforms-node-js":399},[4,162,346],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":24},"RPC","icon-park-outline:lightning","\u002Frpc","01.rpc",[10,25,63,77,102,136],{"title":11,"icon":12,"redirect":7,"path":13,"stem":14,"children":15,"page":24},"Introduction","icon-park-outline:home","\u002Frpc\u002Fintroduction","01.rpc\u002F01.introduction",[16,20],{"title":17,"path":18,"stem":19},"Quick Start","\u002Frpc\u002Fintroduction\u002Fquick-start","01.rpc\u002F01.introduction\u002F02.quick-start",{"title":21,"path":22,"stem":23},"Manual Install","\u002Frpc\u002Fintroduction\u002Fmanual-install","01.rpc\u002F01.introduction\u002F03.manual-install",false,{"title":26,"icon":27,"path":28,"stem":29,"children":30,"page":24},"Server","icon-park-outline:server","\u002Frpc\u002Fserver","01.rpc\u002F02.server",[31,35,39,43,47,51,55,59],{"title":32,"path":33,"stem":34},"Routes","\u002Frpc\u002Fserver\u002Froutes","01.rpc\u002F02.server\u002F01.routes",{"title":36,"path":37,"stem":38},"Middleware","\u002Frpc\u002Fserver\u002Fmiddleware","01.rpc\u002F02.server\u002F02.middleware",{"title":40,"path":41,"stem":42},"Call Context","\u002Frpc\u002Fserver\u002Fcall-context","01.rpc\u002F02.server\u002F03.call-context",{"title":44,"path":45,"stem":46},"Headers","\u002Frpc\u002Fserver\u002Fheaders","01.rpc\u002F02.server\u002F04.headers",{"title":48,"path":49,"stem":50},"Error Handling","\u002Frpc\u002Fserver\u002Ferror-handling","01.rpc\u002F02.server\u002F05.error-handling",{"title":52,"path":53,"stem":54},"Validation","\u002Frpc\u002Fserver\u002Fvalidation","01.rpc\u002F02.server\u002F06.validation",{"title":56,"path":57,"stem":58},"JSON Round Trip","\u002Frpc\u002Fserver\u002Fjson-round-trip","01.rpc\u002F02.server\u002F07.json-round-trip",{"title":60,"path":61,"stem":62},"Drizzle Tables","\u002Frpc\u002Fserver\u002Fdrizzle-tables","01.rpc\u002F02.server\u002F08.drizzle-tables",{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":24},"Middlewares","icon-park-outline:link-one","\u002Frpc\u002Fmiddlewares","01.rpc\u002F03.middlewares",[69,73],{"title":70,"path":71,"stem":72},"fetchMetadata","\u002Frpc\u002Fmiddlewares\u002Ffetch-metadata","01.rpc\u002F03.middlewares\u002F01.fetch-metadata",{"title":74,"path":75,"stem":76},"syncRoutes","\u002Frpc\u002Fmiddlewares\u002Fsync-routes","01.rpc\u002F03.middlewares\u002F02.sync-routes",{"title":78,"icon":79,"path":80,"stem":81,"children":82,"page":24},"Client","icon-park-outline:computer","\u002Frpc\u002Fclient","01.rpc\u002F04.client",[83,87,91,94,98],{"title":84,"path":85,"stem":86},"Client Overview","\u002Frpc\u002Fclient\u002Fclient-overview","01.rpc\u002F04.client\u002F00.client-overview",{"title":88,"path":89,"stem":90},"Client Middleware","\u002Frpc\u002Fclient\u002Fclient-middleware","01.rpc\u002F04.client\u002F01.client-middleware",{"title":48,"path":92,"stem":93},"\u002Frpc\u002Fclient\u002Ferror-handling","01.rpc\u002F04.client\u002F02.error-handling",{"title":95,"path":96,"stem":97},"Batch Requests","\u002Frpc\u002Fclient\u002Fbatch","01.rpc\u002F04.client\u002F03.batch",{"title":99,"path":100,"stem":101},"Cancellation & Timeouts","\u002Frpc\u002Fclient\u002Fcancellation-timeouts","01.rpc\u002F04.client\u002F04.cancellation-timeouts",{"title":103,"redirect":104,"icon":105,"path":106,"stem":107,"children":108,"page":24},"Platforms","\u002Frpc\u002Fplatforms\u002Fnode-js","icon-park-outline:play","\u002Frpc\u002Fplatforms","01.rpc\u002F06.platforms",[109,112,116,120,124,128,132],{"title":110,"path":104,"stem":111},"Node.js","01.rpc\u002F06.platforms\u002F01.node-js",{"title":113,"path":114,"stem":115},"Bun","\u002Frpc\u002Fplatforms\u002Fbun","01.rpc\u002F06.platforms\u002F02.bun",{"title":117,"path":118,"stem":119},"AWS Lambda","\u002Frpc\u002Fplatforms\u002Faws-lambda","01.rpc\u002F06.platforms\u002F03.aws-lambda",{"title":121,"path":122,"stem":123},"Google Cloud Functions","\u002Frpc\u002Fplatforms\u002Fgoogle-cloud-functions","01.rpc\u002F06.platforms\u002F04.google-cloud-functions",{"title":125,"path":126,"stem":127},"Cloudflare Workers","\u002Frpc\u002Fplatforms\u002Fcloudflare","01.rpc\u002F06.platforms\u002F05.cloudflare",{"title":129,"path":130,"stem":131},"Vercel","\u002Frpc\u002Fplatforms\u002Fvercel","01.rpc\u002F06.platforms\u002F06.vercel",{"title":133,"path":134,"stem":135},"uWebSockets.js","\u002Frpc\u002Fplatforms\u002Fuwebsockets","01.rpc\u002F06.platforms\u002F07.uwebsockets",{"title":137,"icon":138,"path":139,"stem":140,"children":141,"page":24},"Devtools","icon-park-outline:tool","\u002Frpc\u002Fdevtools","01.rpc\u002F07.devtools",[142,146,150,154,158],{"title":143,"path":144,"stem":145},"Linter","\u002Frpc\u002Fdevtools\u002Flinter","01.rpc\u002F07.devtools\u002F01.linter",{"title":147,"path":148,"stem":149},"Vite","\u002Frpc\u002Fdevtools\u002Fvite","01.rpc\u002F07.devtools\u002F02.vite",{"title":151,"path":152,"stem":153},"Next.js","\u002Frpc\u002Fdevtools\u002Fnextjs","01.rpc\u002F07.devtools\u002F03.nextjs",{"title":155,"path":156,"stem":157},"CLI","\u002Frpc\u002Fdevtools\u002Fcli","01.rpc\u002F07.devtools\u002F04.cli",{"title":159,"path":160,"stem":161},"API Types","\u002Frpc\u002Fdevtools\u002Fapi-types","01.rpc\u002F07.devtools\u002F05.api-types",{"title":163,"icon":164,"path":165,"stem":166,"children":167,"page":24},"RunTypes","i-lucide-braces","\u002Fruntypes","02.runtypes",[168,184,224,254,268,290,332],{"title":11,"icon":169,"redirect":165,"path":170,"stem":171,"children":172,"page":24},"i-lucide-rocket","\u002Fruntypes\u002Fintroduction","02.runtypes\u002F01.introduction",[173,177,180],{"title":174,"path":175,"stem":176},"Built on typescript-go","\u002Fruntypes\u002Fintroduction\u002Fbuilt-on-typescript-go","02.runtypes\u002F01.introduction\u002F02.built-on-typescript-go",{"title":17,"path":178,"stem":179},"\u002Fruntypes\u002Fintroduction\u002Fquick-start","02.runtypes\u002F01.introduction\u002F03.quick-start",{"title":181,"path":182,"stem":183},"Configuration","\u002Fruntypes\u002Fintroduction\u002Fconfiguration","02.runtypes\u002F01.introduction\u002F04.configuration",{"title":185,"icon":186,"redirect":187,"path":188,"stem":189,"children":190,"page":24},"Guide","i-lucide-book-open","\u002Fruntypes\u002Fguide\u002Ftype-builders","\u002Fruntypes\u002Fguide","02.runtypes\u002F02.guide",[191,194,198,201,204,208,212,216,220],{"title":192,"path":187,"stem":193},"Types vs Type Builders","02.runtypes\u002F02.guide\u002F01.type-builders",{"title":195,"path":196,"stem":197},"Reflection","\u002Fruntypes\u002Fguide\u002Freflection","02.runtypes\u002F02.guide\u002F02.reflection",{"title":52,"path":199,"stem":200},"\u002Fruntypes\u002Fguide\u002Fvalidation","02.runtypes\u002F02.guide\u002F03.validation",{"title":56,"path":202,"stem":203},"\u002Fruntypes\u002Fguide\u002Fjson-round-trip","02.runtypes\u002F02.guide\u002F04.json-round-trip",{"title":205,"path":206,"stem":207},"Data Mocking","\u002Fruntypes\u002Fguide\u002Fmocking","02.runtypes\u002F02.guide\u002F07.mocking",{"title":209,"path":210,"stem":211},"JSON Schemas","\u002Fruntypes\u002Fguide\u002Fjson-schemas","02.runtypes\u002F02.guide\u002F08.json-schemas",{"title":213,"path":214,"stem":215},"Pure Functions","\u002Fruntypes\u002Fguide\u002Fpure-functions","02.runtypes\u002F02.guide\u002F09.pure-functions",{"title":217,"path":218,"stem":219},"Compiler Markers","\u002Fruntypes\u002Fguide\u002Fcompiler-markers","02.runtypes\u002F02.guide\u002F10.compiler-markers",{"title":221,"path":222,"stem":223},"All Compiled Functions","\u002Fruntypes\u002Fguide\u002Fall-compiled-functions","02.runtypes\u002F02.guide\u002F11.all-compiled-functions",{"title":225,"icon":226,"redirect":227,"path":228,"stem":229,"children":230,"page":24},"Type Formats","i-lucide-shapes","\u002Fruntypes\u002Ftype-formats\u002Foverview","\u002Fruntypes\u002Ftype-formats","02.runtypes\u002F03.type-formats",[231,234,238,242,246,250],{"title":232,"path":227,"stem":233},"Overview","02.runtypes\u002F03.type-formats\u002F01.overview",{"title":235,"path":236,"stem":237},"String Formats","\u002Fruntypes\u002Ftype-formats\u002Fstring","02.runtypes\u002F03.type-formats\u002F02.string",{"title":239,"path":240,"stem":241},"Number Formats","\u002Fruntypes\u002Ftype-formats\u002Fnumber","02.runtypes\u002F03.type-formats\u002F03.number",{"title":243,"path":244,"stem":245},"BigInt Formats","\u002Fruntypes\u002Ftype-formats\u002Fbigint","02.runtypes\u002F03.type-formats\u002F04.bigint",{"title":247,"path":248,"stem":249},"Date and Time Formats","\u002Fruntypes\u002Ftype-formats\u002Fdate-time","02.runtypes\u002F03.type-formats\u002F05.date-time",{"title":251,"path":252,"stem":253},"Collection Formats","\u002Fruntypes\u002Ftype-formats\u002Fcollections","02.runtypes\u002F03.type-formats\u002F06.collections",{"title":255,"icon":256,"redirect":257,"path":258,"stem":259,"children":260,"page":24},"Tooling","i-lucide-wrench","\u002Fruntypes\u002Ftooling\u002Flinting","\u002Fruntypes\u002Ftooling","02.runtypes\u002F04.tooling",[261,264],{"title":262,"path":257,"stem":263},"Linting","02.runtypes\u002F04.tooling\u002F01.linting",{"title":265,"path":266,"stem":267},"Source Conversion","\u002Fruntypes\u002Ftooling\u002Fsource-conversion","02.runtypes\u002F04.tooling\u002F02.source-conversion",{"title":269,"icon":270,"redirect":271,"path":272,"stem":273,"children":274,"page":24},"AI Integration","i-lucide-sparkles","\u002Fruntypes\u002Fai-integration\u002Fworkflow-and-commands","\u002Fruntypes\u002Fai-integration","02.runtypes\u002F05.ai-integration",[275,278,282,286],{"title":276,"path":271,"stem":277},"AI Workflow","02.runtypes\u002F05.ai-integration\u002F01.workflow-and-commands",{"title":279,"path":280,"stem":281},"FriendlyText","\u002Fruntypes\u002Fai-integration\u002Ffriendly-text","02.runtypes\u002F05.ai-integration\u002F02.friendly-text",{"title":283,"path":284,"stem":285},"MockData","\u002Fruntypes\u002Fai-integration\u002Fmock-data","02.runtypes\u002F05.ai-integration\u002F03.mock-data",{"title":287,"path":288,"stem":289},"Translations (i18n)","\u002Fruntypes\u002Fai-integration\u002Fi18n","02.runtypes\u002F05.ai-integration\u002F04.i18n",{"title":291,"icon":292,"redirect":293,"path":294,"stem":295,"children":296,"page":24},"Drizzle ORM","i-lineicons-drizzle","\u002Fruntypes\u002Fdrizzle-orm\u002Fdrizzle-overview","\u002Fruntypes\u002Fdrizzle-orm","02.runtypes\u002F06.drizzle-orm",[297,300,304,308,312,316,320,324,328],{"title":298,"path":293,"stem":299},"Drizzle Overview","02.runtypes\u002F06.drizzle-orm\u002F00.drizzle-overview",{"title":301,"path":302,"stem":303},"Column Formats","\u002Fruntypes\u002Fdrizzle-orm\u002Fcolumn-formats","02.runtypes\u002F06.drizzle-orm\u002F01.column-formats",{"title":305,"path":306,"stem":307},"Views","\u002Fruntypes\u002Fdrizzle-orm\u002Fviews","02.runtypes\u002F06.drizzle-orm\u002F02.views",{"title":309,"path":310,"stem":311},"Indexes and Constraints","\u002Fruntypes\u002Fdrizzle-orm\u002Fconstraints","02.runtypes\u002F06.drizzle-orm\u002F03.constraints",{"title":313,"path":314,"stem":315},"Row Level Security","\u002Fruntypes\u002Fdrizzle-orm\u002Frow-level-security","02.runtypes\u002F06.drizzle-orm\u002F04.row-level-security",{"title":317,"path":318,"stem":319},"Relations","\u002Fruntypes\u002Fdrizzle-orm\u002Frelations","02.runtypes\u002F06.drizzle-orm\u002F05.relations",{"title":321,"path":322,"stem":323},"The Schema File","\u002Fruntypes\u002Fdrizzle-orm\u002Fschema-file","02.runtypes\u002F06.drizzle-orm\u002F06.schema-file",{"title":325,"path":326,"stem":327},"Migrate an Existing Schema","\u002Fruntypes\u002Fdrizzle-orm\u002Fmigrate-an-existing-schema","02.runtypes\u002F06.drizzle-orm\u002F07.migrate-an-existing-schema",{"title":329,"path":330,"stem":331},"Cloudflare D1 and Durable Objects","\u002Fruntypes\u002Fdrizzle-orm\u002Fcloudflare-storage","02.runtypes\u002F06.drizzle-orm\u002F08.cloudflare-storage",{"title":333,"icon":334,"redirect":335,"path":336,"stem":337,"children":338,"page":24},"Diagnostics","i-lucide-triangle-alert","\u002Fruntypes\u002Fdiagnostics\u002Ferror-levels","\u002Fruntypes\u002Fdiagnostics","02.runtypes\u002F08.diagnostics",[339,342],{"title":340,"path":335,"stem":341},"Error Levels","02.runtypes\u002F08.diagnostics\u002F01.error-levels",{"title":343,"path":344,"stem":345},"All Diagnostics","\u002Fruntypes\u002Fdiagnostics\u002Fall-diagnostics","02.runtypes\u002F08.diagnostics\u002F02.all-diagnostics",{"title":347,"icon":348,"path":349,"stem":350,"children":351,"page":24},"Benchmarks","i-lucide-gauge","\u002Fbenchmarks","03.benchmarks",[352,372],{"title":5,"icon":6,"redirect":353,"path":354,"stem":355,"children":356,"page":24},"\u002Fbenchmarks\u002Frpc\u002Fhello-world","\u002Fbenchmarks\u002Frpc","03.benchmarks\u002F02.rpc",[357,360,364,368],{"title":358,"path":353,"stem":359},"Hello World","03.benchmarks\u002F02.rpc\u002F01.hello-world",{"title":361,"path":362,"stem":363},"Light Validation","\u002Fbenchmarks\u002Frpc\u002Flight-validation","03.benchmarks\u002F02.rpc\u002F02.light-validation",{"title":365,"path":366,"stem":367},"Heavy Validation","\u002Fbenchmarks\u002Frpc\u002Fheavy-validation","03.benchmarks\u002F02.rpc\u002F03.heavy-validation",{"title":369,"path":370,"stem":371},"Payload Sizes","\u002Fbenchmarks\u002Frpc\u002Fpayload-sizes","03.benchmarks\u002F02.rpc\u002F04.payload-sizes",{"title":163,"icon":164,"redirect":373,"path":374,"stem":375,"children":376,"page":24},"\u002Fbenchmarks\u002Fruntypes\u002Fis-valid","\u002Fbenchmarks\u002Fruntypes","03.benchmarks\u002F03.runtypes",[377,380,384,388,392,395],{"title":378,"path":373,"stem":379},"Is Valid","03.benchmarks\u002F03.runtypes\u002F01.is-valid",{"title":381,"path":382,"stem":383},"Is Valid Formats","\u002Fbenchmarks\u002Fruntypes\u002Fis-valid-formats","03.benchmarks\u002F03.runtypes\u002F02.is-valid-formats",{"title":385,"path":386,"stem":387},"Get Errors","\u002Fbenchmarks\u002Fruntypes\u002Fget-errors","03.benchmarks\u002F03.runtypes\u002F03.get-errors",{"title":389,"path":390,"stem":391},"Get Errors Formats","\u002Fbenchmarks\u002Fruntypes\u002Fget-errors-formats","03.benchmarks\u002F03.runtypes\u002F04.get-errors-formats",{"title":56,"path":393,"stem":394},"\u002Fbenchmarks\u002Fruntypes\u002Fjson-round-trip","03.benchmarks\u002F03.runtypes\u002F05.json-round-trip",{"title":396,"path":397,"stem":398},"Type Checking","\u002Fbenchmarks\u002Fruntypes\u002Ftype-checking","03.benchmarks\u002F03.runtypes\u002F07.type-checking",{"id":400,"title":110,"body":401,"description":1344,"extension":1345,"links":1346,"meta":1347,"navigation":504,"path":104,"seo":1348,"stem":111,"__hash__":1349},"docs\u002F01.rpc\u002F06.platforms\u002F01.node-js.md",{"type":402,"value":403},"minimark",[404,409,438,442,805,809,840,904,908,912,939,1340],[405,406,408],"h2",{"id":407},"installing-the-adapter","Installing the Adapter",[410,411,416],"pre",{"className":412,"code":413,"language":414,"meta":415,"style":415},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install @mionjs\u002Fplatform-node @mionjs\u002Frouter\n","bash","",[417,418,419],"code",{"__ignoreMap":415},[420,421,424,428,432,435],"span",{"class":422,"line":423},"line",1,[420,425,427],{"class":426},"sBMFI","npm",[420,429,431],{"class":430},"sfazB"," install",[420,433,434],{"class":430}," @mionjs\u002Fplatform-node",[420,436,437],{"class":430}," @mionjs\u002Frouter\n",[405,439,441],{"id":440},"starting-the-server","Starting the Server",[443,444,445,580],"code-group",{},[410,446,451],{"className":447,"code":448,"filename":449,"language":450,"meta":415,"style":415},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {startNodeServer} from '@mionjs\u002Fplatform-node';\nimport '.\u002Fnode-routes.ts';\n\nconst server = await startNodeServer({port: 3000});\n\nconsole.log('Server running at http:\u002F\u002Flocalhost:3000');\n","src\u002Fserver.ts","ts",[417,452,453,485,499,506,550,555],{"__ignoreMap":415},[420,454,455,459,463,467,470,473,476,479,482],{"class":422,"line":423},[420,456,458],{"class":457},"s7zQu","import",[420,460,462],{"class":461},"sMK4o"," {",[420,464,466],{"class":465},"sTEyZ","startNodeServer",[420,468,469],{"class":461},"}",[420,471,472],{"class":457}," from",[420,474,475],{"class":461}," '",[420,477,478],{"class":430},"@mionjs\u002Fplatform-node",[420,480,481],{"class":461},"'",[420,483,484],{"class":461},";\n",[420,486,488,490,492,495,497],{"class":422,"line":487},2,[420,489,458],{"class":457},[420,491,475],{"class":461},[420,493,494],{"class":430},".\u002Fnode-routes.ts",[420,496,481],{"class":461},[420,498,484],{"class":461},[420,500,502],{"class":422,"line":501},3,[420,503,505],{"emptyLinePlaceholder":504},true,"\n",[420,507,509,513,516,519,522,526,529,532,536,539,543,545,548],{"class":422,"line":508},4,[420,510,512],{"class":511},"spNyl","const",[420,514,515],{"class":465}," server ",[420,517,518],{"class":461},"=",[420,520,521],{"class":457}," await",[420,523,525],{"class":524},"s2Zo4"," startNodeServer",[420,527,528],{"class":465},"(",[420,530,531],{"class":461},"{",[420,533,535],{"class":534},"swJcz","port",[420,537,538],{"class":461},":",[420,540,542],{"class":541},"sbssI"," 3000",[420,544,469],{"class":461},[420,546,547],{"class":465},")",[420,549,484],{"class":461},[420,551,553],{"class":422,"line":552},5,[420,554,505],{"emptyLinePlaceholder":504},[420,556,558,561,564,567,569,571,574,576,578],{"class":422,"line":557},6,[420,559,560],{"class":465},"console",[420,562,563],{"class":461},".",[420,565,566],{"class":524},"log",[420,568,528],{"class":465},[420,570,481],{"class":461},[420,572,573],{"class":430},"Server running at http:\u002F\u002Flocalhost:3000",[420,575,481],{"class":461},[420,577,547],{"class":465},[420,579,484],{"class":461},[410,581,584],{"className":447,"code":582,"filename":583,"language":450,"meta":415,"style":415},"import {createMionRouter, Routes} from '@mionjs\u002Frouter';\n\nconst mion = createMionRouter();\n\nconst routes = {\n  sayHello: mion.route((ctx, name: string): string => {\n    return `Hello ${name}!`;\n  }),\n} satisfies Routes;\n\n\u002F\u002F the server entry only imports this file\nexport const myApi = mion.initRoutes(routes);\nexport type MyApi = typeof myApi;\n","src\u002Froutes.ts",[417,585,586,614,618,635,639,651,694,722,733,745,750,757,783],{"__ignoreMap":415},[420,587,588,590,592,595,598,601,603,605,607,610,612],{"class":422,"line":423},[420,589,458],{"class":457},[420,591,462],{"class":461},[420,593,594],{"class":465},"createMionRouter",[420,596,597],{"class":461},",",[420,599,600],{"class":465}," Routes",[420,602,469],{"class":461},[420,604,472],{"class":457},[420,606,475],{"class":461},[420,608,609],{"class":430},"@mionjs\u002Frouter",[420,611,481],{"class":461},[420,613,484],{"class":461},[420,615,616],{"class":422,"line":487},[420,617,505],{"emptyLinePlaceholder":504},[420,619,620,622,625,627,630,633],{"class":422,"line":501},[420,621,512],{"class":511},[420,623,624],{"class":465}," mion ",[420,626,518],{"class":461},[420,628,629],{"class":524}," createMionRouter",[420,631,632],{"class":465},"()",[420,634,484],{"class":461},[420,636,637],{"class":422,"line":508},[420,638,505],{"emptyLinePlaceholder":504},[420,640,641,643,646,648],{"class":422,"line":552},[420,642,512],{"class":511},[420,644,645],{"class":465}," routes ",[420,647,518],{"class":461},[420,649,650],{"class":461}," {\n",[420,652,653,656,658,661,663,666,668,670,674,676,679,681,684,687,689,692],{"class":422,"line":557},[420,654,655],{"class":534},"  sayHello",[420,657,538],{"class":461},[420,659,660],{"class":465}," mion",[420,662,563],{"class":461},[420,664,665],{"class":524},"route",[420,667,528],{"class":465},[420,669,528],{"class":461},[420,671,673],{"class":672},"sHdIc","ctx",[420,675,597],{"class":461},[420,677,678],{"class":672}," name",[420,680,538],{"class":461},[420,682,683],{"class":426}," string",[420,685,686],{"class":461},"):",[420,688,683],{"class":426},[420,690,691],{"class":511}," =>",[420,693,650],{"class":461},[420,695,697,700,703,706,709,712,714,717,720],{"class":422,"line":696},7,[420,698,699],{"class":457},"    return",[420,701,702],{"class":461}," `",[420,704,705],{"class":430},"Hello ",[420,707,708],{"class":461},"${",[420,710,711],{"class":465},"name",[420,713,469],{"class":461},[420,715,716],{"class":430},"!",[420,718,719],{"class":461},"`",[420,721,484],{"class":461},[420,723,725,728,730],{"class":422,"line":724},8,[420,726,727],{"class":461},"  }",[420,729,547],{"class":465},[420,731,732],{"class":461},",\n",[420,734,736,738,741,743],{"class":422,"line":735},9,[420,737,469],{"class":461},[420,739,740],{"class":457}," satisfies",[420,742,600],{"class":426},[420,744,484],{"class":461},[420,746,748],{"class":422,"line":747},10,[420,749,505],{"emptyLinePlaceholder":504},[420,751,753],{"class":422,"line":752},11,[420,754,756],{"class":755},"sHwdD","\u002F\u002F the server entry only imports this file\n",[420,758,760,763,766,769,771,773,775,778,781],{"class":422,"line":759},12,[420,761,762],{"class":457},"export",[420,764,765],{"class":511}," const",[420,767,768],{"class":465}," myApi ",[420,770,518],{"class":461},[420,772,660],{"class":465},[420,774,563],{"class":461},[420,776,777],{"class":524},"initRoutes",[420,779,780],{"class":465},"(routes)",[420,782,484],{"class":461},[420,784,786,788,791,794,797,800,803],{"class":422,"line":785},13,[420,787,762],{"class":457},[420,789,790],{"class":511}," type",[420,792,793],{"class":426}," MyApi",[420,795,796],{"class":461}," =",[420,798,799],{"class":461}," typeof",[420,801,802],{"class":465}," myApi",[420,804,484],{"class":461},[405,806,808],{"id":807},"adapter-options","Adapter Options",[810,811,812,813,816,817,819,820,823,824,830,831,835,836,839],"p",{},"Pass options such as ",[417,814,815],{},"maxBodySize"," to ",[417,818,466],{},", and set router options like ",[417,821,822],{},"basePath"," once in ",[825,826,828],"a",{"href":827},"\u002Frpc\u002Fserver\u002Froutes#creating-the-router",[417,829,594],{},". Each route has its own ",[825,832,834],{"href":833},"\u002Frpc\u002Fserver\u002Froutes#request-size","body limit",": a ",[417,837,838],{},"content-length"," over it is refused before reading, and a body that grows past it is refused mid-stream with a 413.",[410,841,843],{"className":447,"code":842,"language":450,"meta":415,"style":415},"import {startNodeServer} from '@mionjs\u002Fplatform-node';\nimport '.\u002Fnode-routes.ts';\n\nawait startNodeServer({port: 3000});\n",[417,844,845,865,877,881],{"__ignoreMap":415},[420,846,847,849,851,853,855,857,859,861,863],{"class":422,"line":423},[420,848,458],{"class":457},[420,850,462],{"class":461},[420,852,466],{"class":465},[420,854,469],{"class":461},[420,856,472],{"class":457},[420,858,475],{"class":461},[420,860,478],{"class":430},[420,862,481],{"class":461},[420,864,484],{"class":461},[420,866,867,869,871,873,875],{"class":422,"line":487},[420,868,458],{"class":457},[420,870,475],{"class":461},[420,872,494],{"class":430},[420,874,481],{"class":461},[420,876,484],{"class":461},[420,878,879],{"class":422,"line":501},[420,880,505],{"emptyLinePlaceholder":504},[420,882,883,886,888,890,892,894,896,898,900,902],{"class":422,"line":508},[420,884,885],{"class":457},"await",[420,887,525],{"class":524},[420,889,528],{"class":465},[420,891,531],{"class":461},[420,893,535],{"class":534},[420,895,538],{"class":461},[420,897,542],{"class":541},[420,899,469],{"class":461},[420,901,547],{"class":465},[420,903,484],{"class":461},[905,906,907],"tip",{},"In production, consider a process manager like PM2 or a reverse proxy like nginx.",[405,909,911],{"id":910},"mounting-mion-in-your-own-server","Mounting mion in Your Own Server",[810,913,914,915,918,919,922,923,926,927,930,931,934,935,938],{},"With ",[417,916,917],{},"asMiddleware",", mion sets everything up but never calls ",[417,920,921],{},"listen()",". Mount ",[417,924,925],{},"httpRequestHandler"," wherever you want, in an express\u002Fconnect app or your own ",[417,928,929],{},"http.createServer",". The ",[825,932,933],{"href":148},"Vite plugin"," sets this option to run an unchanged ",[417,936,937],{},"mion.initRoutes(routes); startNodeServer();"," entry inside its dev server, without opening a port.",[410,940,943],{"className":447,"code":941,"filename":942,"language":450,"meta":415,"style":415},"import {createServer} from 'node:http';\nimport {httpRequestHandler, startNodeServer} from '@mionjs\u002Fplatform-node';\nimport {createMionRouter, Routes} from '@mionjs\u002Frouter';\n\n\u002F\u002F the router's basePath must match the prefix the host forwards\nconst mion = createMionRouter({basePath: 'api'});\nconst routes = {\n  sayHello: mion.route((ctx, name: string): string => `Hello ${name}!`),\n} satisfies Routes;\nmion.initRoutes(routes);\n\n\u002F\u002F registers routes and options but opens no port: the host owns the socket\nawait startNodeServer({asMiddleware: true});\n\n\u002F\u002F here mion handles everything under \u002Fapi\nconst host = createServer((req, res) => {\n  if (req.url?.startsWith('\u002Fapi')) return httpRequestHandler(req, res);\n  res.statusCode = 404;\n  res.end('not found');\n});\n\nhost.listen(3000);\n","src\u002Fmiddleware.ts",[417,944,945,967,991,1015,1019,1024,1055,1065,1115,1125,1138,1142,1147,1171,1176,1182,1213,1265,1283,1306,1315,1320],{"__ignoreMap":415},[420,946,947,949,951,954,956,958,960,963,965],{"class":422,"line":423},[420,948,458],{"class":457},[420,950,462],{"class":461},[420,952,953],{"class":465},"createServer",[420,955,469],{"class":461},[420,957,472],{"class":457},[420,959,475],{"class":461},[420,961,962],{"class":430},"node:http",[420,964,481],{"class":461},[420,966,484],{"class":461},[420,968,969,971,973,975,977,979,981,983,985,987,989],{"class":422,"line":487},[420,970,458],{"class":457},[420,972,462],{"class":461},[420,974,925],{"class":465},[420,976,597],{"class":461},[420,978,525],{"class":465},[420,980,469],{"class":461},[420,982,472],{"class":457},[420,984,475],{"class":461},[420,986,478],{"class":430},[420,988,481],{"class":461},[420,990,484],{"class":461},[420,992,993,995,997,999,1001,1003,1005,1007,1009,1011,1013],{"class":422,"line":501},[420,994,458],{"class":457},[420,996,462],{"class":461},[420,998,594],{"class":465},[420,1000,597],{"class":461},[420,1002,600],{"class":465},[420,1004,469],{"class":461},[420,1006,472],{"class":457},[420,1008,475],{"class":461},[420,1010,609],{"class":430},[420,1012,481],{"class":461},[420,1014,484],{"class":461},[420,1016,1017],{"class":422,"line":508},[420,1018,505],{"emptyLinePlaceholder":504},[420,1020,1021],{"class":422,"line":552},[420,1022,1023],{"class":755},"\u002F\u002F the router's basePath must match the prefix the host forwards\n",[420,1025,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1047,1049,1051,1053],{"class":422,"line":557},[420,1027,512],{"class":511},[420,1029,624],{"class":465},[420,1031,518],{"class":461},[420,1033,629],{"class":524},[420,1035,528],{"class":465},[420,1037,531],{"class":461},[420,1039,822],{"class":534},[420,1041,538],{"class":461},[420,1043,475],{"class":461},[420,1045,1046],{"class":430},"api",[420,1048,481],{"class":461},[420,1050,469],{"class":461},[420,1052,547],{"class":465},[420,1054,484],{"class":461},[420,1056,1057,1059,1061,1063],{"class":422,"line":696},[420,1058,512],{"class":511},[420,1060,645],{"class":465},[420,1062,518],{"class":461},[420,1064,650],{"class":461},[420,1066,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113],{"class":422,"line":724},[420,1068,655],{"class":534},[420,1070,538],{"class":461},[420,1072,660],{"class":465},[420,1074,563],{"class":461},[420,1076,665],{"class":524},[420,1078,528],{"class":465},[420,1080,528],{"class":461},[420,1082,673],{"class":672},[420,1084,597],{"class":461},[420,1086,678],{"class":672},[420,1088,538],{"class":461},[420,1090,683],{"class":426},[420,1092,686],{"class":461},[420,1094,683],{"class":426},[420,1096,691],{"class":511},[420,1098,702],{"class":461},[420,1100,705],{"class":430},[420,1102,708],{"class":461},[420,1104,711],{"class":465},[420,1106,469],{"class":461},[420,1108,716],{"class":430},[420,1110,719],{"class":461},[420,1112,547],{"class":465},[420,1114,732],{"class":461},[420,1116,1117,1119,1121,1123],{"class":422,"line":735},[420,1118,469],{"class":461},[420,1120,740],{"class":457},[420,1122,600],{"class":426},[420,1124,484],{"class":461},[420,1126,1127,1130,1132,1134,1136],{"class":422,"line":747},[420,1128,1129],{"class":465},"mion",[420,1131,563],{"class":461},[420,1133,777],{"class":524},[420,1135,780],{"class":465},[420,1137,484],{"class":461},[420,1139,1140],{"class":422,"line":752},[420,1141,505],{"emptyLinePlaceholder":504},[420,1143,1144],{"class":422,"line":759},[420,1145,1146],{"class":755},"\u002F\u002F registers routes and options but opens no port: the host owns the socket\n",[420,1148,1149,1151,1153,1155,1157,1159,1161,1165,1167,1169],{"class":422,"line":785},[420,1150,885],{"class":457},[420,1152,525],{"class":524},[420,1154,528],{"class":465},[420,1156,531],{"class":461},[420,1158,917],{"class":534},[420,1160,538],{"class":461},[420,1162,1164],{"class":1163},"sfNiH"," true",[420,1166,469],{"class":461},[420,1168,547],{"class":465},[420,1170,484],{"class":461},[420,1172,1174],{"class":422,"line":1173},14,[420,1175,505],{"emptyLinePlaceholder":504},[420,1177,1179],{"class":422,"line":1178},15,[420,1180,1181],{"class":755},"\u002F\u002F here mion handles everything under \u002Fapi\n",[420,1183,1185,1187,1190,1192,1195,1197,1199,1202,1204,1207,1209,1211],{"class":422,"line":1184},16,[420,1186,512],{"class":511},[420,1188,1189],{"class":465}," host ",[420,1191,518],{"class":461},[420,1193,1194],{"class":524}," createServer",[420,1196,528],{"class":465},[420,1198,528],{"class":461},[420,1200,1201],{"class":672},"req",[420,1203,597],{"class":461},[420,1205,1206],{"class":672}," res",[420,1208,547],{"class":461},[420,1210,691],{"class":511},[420,1212,650],{"class":461},[420,1214,1216,1219,1222,1224,1226,1229,1232,1235,1237,1239,1242,1244,1247,1250,1253,1255,1257,1259,1261,1263],{"class":422,"line":1215},17,[420,1217,1218],{"class":457},"  if",[420,1220,1221],{"class":534}," (",[420,1223,1201],{"class":465},[420,1225,563],{"class":461},[420,1227,1228],{"class":465},"url",[420,1230,1231],{"class":461},"?.",[420,1233,1234],{"class":524},"startsWith",[420,1236,528],{"class":534},[420,1238,481],{"class":461},[420,1240,1241],{"class":430},"\u002Fapi",[420,1243,481],{"class":461},[420,1245,1246],{"class":534},")) ",[420,1248,1249],{"class":457},"return",[420,1251,1252],{"class":524}," httpRequestHandler",[420,1254,528],{"class":534},[420,1256,1201],{"class":465},[420,1258,597],{"class":461},[420,1260,1206],{"class":465},[420,1262,547],{"class":534},[420,1264,484],{"class":461},[420,1266,1268,1271,1273,1276,1278,1281],{"class":422,"line":1267},18,[420,1269,1270],{"class":465},"  res",[420,1272,563],{"class":461},[420,1274,1275],{"class":465},"statusCode",[420,1277,796],{"class":461},[420,1279,1280],{"class":541}," 404",[420,1282,484],{"class":461},[420,1284,1286,1288,1290,1293,1295,1297,1300,1302,1304],{"class":422,"line":1285},19,[420,1287,1270],{"class":465},[420,1289,563],{"class":461},[420,1291,1292],{"class":524},"end",[420,1294,528],{"class":534},[420,1296,481],{"class":461},[420,1298,1299],{"class":430},"not found",[420,1301,481],{"class":461},[420,1303,547],{"class":534},[420,1305,484],{"class":461},[420,1307,1309,1311,1313],{"class":422,"line":1308},20,[420,1310,469],{"class":461},[420,1312,547],{"class":465},[420,1314,484],{"class":461},[420,1316,1318],{"class":422,"line":1317},21,[420,1319,505],{"emptyLinePlaceholder":504},[420,1321,1323,1326,1328,1331,1333,1336,1338],{"class":422,"line":1322},22,[420,1324,1325],{"class":465},"host",[420,1327,563],{"class":461},[420,1329,1330],{"class":524},"listen",[420,1332,528],{"class":465},[420,1334,1335],{"class":541},"3000",[420,1337,547],{"class":465},[420,1339,484],{"class":461},[1341,1342,1343],"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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}","Running mion APIs on Node.js using the http module.","md",null,{"toc":24},{"title":110,"description":1344},"dbCBBH5ePzUh2pTn0OnCzmPEx1djayiBmBpAlhwyhW8",1793324370676]