[{"data":1,"prerenderedAt":2138},["ShallowReactive",2],{"navigation_docs":3,"-devtools-vite-config":195,"-devtools-vite-config-surround":2133},[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":144,"body":197,"description":2127,"extension":2128,"links":2129,"meta":2130,"navigation":266,"path":145,"seo":2131,"stem":146,"__hash__":2132},"docs\u002F5.devtools\u002F3.vite-config.md",{"type":198,"value":199},"minimark",[200,213,218,763,778,782,787,790,1329,1333,1342,1938,1942,1945,2071,2074,2082,2123],[201,202,203,204,208,209,212],"p",{},"The ",[205,206,207],"code",{},"mionPlugin"," from ",[205,210,211],{},"@mionjs\u002Fdevtools\u002Fvite-plugin"," is the single Vite plugin that handles all mion build-time features: runtime type reflection, pure function extraction, and AOT cache generation.",[214,215,217],"h2",{"id":216},"plugin-options","Plugin Options",[219,220,225],"pre",{"className":221,"code":222,"language":223,"meta":224,"style":224},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {mionPlugin} from '@mionjs\u002Fdevtools\u002Fvite-plugin';\n\nmionPlugin({\n    \u002F\u002F Enables the type compiler, preserves TypeScript type metadata at runtime.\n    \u002F\u002F Required for mion's validation and serialization.\n    runTypes?: {\n        tsConfig?: string;              \u002F\u002F Path to tsconfig.json (auto-discovered by default)\n        include?: string | string[];    \u002F\u002F Glob patterns (default: ['**\u002F*.tsx', '**\u002F*.ts'])\n        exclude?: string | string[];    \u002F\u002F Glob patterns (default: 'node_modules\u002F**')\n        reflection?: 'default' | 'explicit' | 'never';\n        compilerOptions?: CompilerOptions;\n    },\n\n    \u002F\u002F Scans client source for pureServerFn(), registerPureFnFactory(), and serverMapFrom() calls.\n    \u002F\u002F Extracts them into a virtual module the server imports automatically.\n    serverPureFunctions?: {\n        clientSrcPath: string;          \u002F\u002F Path to client package source directory (required)\n        include?: string[];             \u002F\u002F Glob patterns (default: ['**\u002F*.ts', '**\u002F*.tsx'])\n        exclude?: string[];             \u002F\u002F Glob patterns (default: ['**\u002Fnode_modules\u002F**', '**\u002F.dist\u002F**', '**\u002Fdist\u002F**'])\n        noViteClient?: boolean;         \u002F\u002F Require explicit names for pureServerFn\u002FserverMapFrom (default: false)\n    },\n\n    \u002F\u002F Generates AOT caches for validation, serialization, and pure functions.\n    \u002F\u002F Without this, caches are fetched at runtime via fetchRemoteMethodsMetadata().\n    aotCaches?: {\n        excludedFns?: string[];         \u002F\u002F JIT function IDs to exclude\n        excludedPureFns?: string[];     \u002F\u002F Pure function names to exclude\n        cache?: boolean | string;       \u002F\u002F Disk cache: true (default), false, or custom path\n        excludeReflection?: boolean;    \u002F\u002F Stub out reflection modules in bundle (reduces size)\n        customVirtualModuleId?: string; \u002F\u002F Custom virtual module prefix\n    },\n\n    \u002F\u002F Runs the server to generate AOT caches and optionally keeps it alive.\n    \u002F\u002F If omitted, only mion's internal routes are cached (when aotCaches is set).\n    server?: {\n        startScript: string;      \u002F\u002F Server start script (required)\n        viteConfig?: string;      \u002F\u002F Server's vite.config.ts for vite-node (auto-discovered)\n        runMode: 'buildOnly' | 'childProcess' | 'middleware'; \u002F\u002F Server run mode (required)\n        waitTimeout?: number;           \u002F\u002F Max wait time in ms for setPlatformConfig() IPC (default: 30000)\n        env?: Record\u003Cstring, string>;   \u002F\u002F Extra env vars for the child process\n        args?: string[];                \u002F\u002F Extra args appended after the start script\n    },\n});\n","typescript","",[205,226,227,261,268,280,287,293,305,319,340,357,393,404,410,415,421,427,437,452,465,477,491,496,501,507,513,523,537,551,570,584,598,603,608,614,620,630,644,657,694,708,734,748,753],{"__ignoreMap":224},[228,229,232,236,240,243,246,249,252,255,258],"span",{"class":230,"line":231},"line",1,[228,233,235],{"class":234},"s7zQu","import",[228,237,239],{"class":238},"sMK4o"," {",[228,241,207],{"class":242},"sTEyZ",[228,244,245],{"class":238},"}",[228,247,248],{"class":234}," from",[228,250,251],{"class":238}," '",[228,253,211],{"class":254},"sfazB",[228,256,257],{"class":238},"'",[228,259,260],{"class":238},";\n",[228,262,264],{"class":230,"line":263},2,[228,265,267],{"emptyLinePlaceholder":266},true,"\n",[228,269,271,274,277],{"class":230,"line":270},3,[228,272,207],{"class":273},"s2Zo4",[228,275,276],{"class":242},"(",[228,278,279],{"class":238},"{\n",[228,281,283],{"class":230,"line":282},4,[228,284,286],{"class":285},"sHwdD","    \u002F\u002F Enables the type compiler, preserves TypeScript type metadata at runtime.\n",[228,288,290],{"class":230,"line":289},5,[228,291,292],{"class":285},"    \u002F\u002F Required for mion's validation and serialization.\n",[228,294,296,299,302],{"class":230,"line":295},6,[228,297,298],{"class":242},"    runTypes?",[228,300,301],{"class":238},":",[228,303,304],{"class":238}," {\n",[228,306,308,311,313,316],{"class":230,"line":307},7,[228,309,310],{"class":242},"        tsConfig?",[228,312,301],{"class":238},[228,314,315],{"class":242}," string;              ",[228,317,318],{"class":285},"\u002F\u002F Path to tsconfig.json (auto-discovered by default)\n",[228,320,322,325,328,331,334,337],{"class":230,"line":321},8,[228,323,324],{"class":242},"        include",[228,326,327],{"class":238},"?:",[228,329,330],{"class":242}," string ",[228,332,333],{"class":238},"|",[228,335,336],{"class":242}," string[];    ",[228,338,339],{"class":285},"\u002F\u002F Glob patterns (default: ['**\u002F*.tsx', '**\u002F*.ts'])\n",[228,341,343,346,348,350,352,354],{"class":230,"line":342},9,[228,344,345],{"class":242},"        exclude",[228,347,327],{"class":238},[228,349,330],{"class":242},[228,351,333],{"class":238},[228,353,336],{"class":242},[228,355,356],{"class":285},"\u002F\u002F Glob patterns (default: 'node_modules\u002F**')\n",[228,358,360,363,365,367,370,372,375,377,380,382,384,386,389,391],{"class":230,"line":359},10,[228,361,362],{"class":242},"        reflection",[228,364,327],{"class":238},[228,366,251],{"class":238},[228,368,369],{"class":254},"default",[228,371,257],{"class":238},[228,373,374],{"class":238}," |",[228,376,251],{"class":238},[228,378,379],{"class":254},"explicit",[228,381,257],{"class":238},[228,383,374],{"class":238},[228,385,251],{"class":238},[228,387,388],{"class":254},"never",[228,390,257],{"class":238},[228,392,260],{"class":242},[228,394,396,399,401],{"class":230,"line":395},11,[228,397,398],{"class":242},"        compilerOptions",[228,400,327],{"class":238},[228,402,403],{"class":242}," CompilerOptions;\n",[228,405,407],{"class":230,"line":406},12,[228,408,409],{"class":238},"    },\n",[228,411,413],{"class":230,"line":412},13,[228,414,267],{"emptyLinePlaceholder":266},[228,416,418],{"class":230,"line":417},14,[228,419,420],{"class":285},"    \u002F\u002F Scans client source for pureServerFn(), registerPureFnFactory(), and serverMapFrom() calls.\n",[228,422,424],{"class":230,"line":423},15,[228,425,426],{"class":285},"    \u002F\u002F Extracts them into a virtual module the server imports automatically.\n",[228,428,430,433,435],{"class":230,"line":429},16,[228,431,432],{"class":242},"    serverPureFunctions?",[228,434,301],{"class":238},[228,436,304],{"class":238},[228,438,440,444,446,449],{"class":230,"line":439},17,[228,441,443],{"class":442},"swJcz","        clientSrcPath",[228,445,301],{"class":238},[228,447,448],{"class":242}," string;          ",[228,450,451],{"class":285},"\u002F\u002F Path to client package source directory (required)\n",[228,453,455,457,459,462],{"class":230,"line":454},18,[228,456,324],{"class":242},[228,458,327],{"class":238},[228,460,461],{"class":242}," string[];             ",[228,463,464],{"class":285},"\u002F\u002F Glob patterns (default: ['**\u002F*.ts', '**\u002F*.tsx'])\n",[228,466,468,470,472,474],{"class":230,"line":467},19,[228,469,345],{"class":242},[228,471,327],{"class":238},[228,473,461],{"class":242},[228,475,476],{"class":285},"\u002F\u002F Glob patterns (default: ['**\u002Fnode_modules\u002F**', '**\u002F.dist\u002F**', '**\u002Fdist\u002F**'])\n",[228,478,480,483,485,488],{"class":230,"line":479},20,[228,481,482],{"class":242},"        noViteClient",[228,484,327],{"class":238},[228,486,487],{"class":242}," boolean;         ",[228,489,490],{"class":285},"\u002F\u002F Require explicit names for pureServerFn\u002FserverMapFrom (default: false)\n",[228,492,494],{"class":230,"line":493},21,[228,495,409],{"class":238},[228,497,499],{"class":230,"line":498},22,[228,500,267],{"emptyLinePlaceholder":266},[228,502,504],{"class":230,"line":503},23,[228,505,506],{"class":285},"    \u002F\u002F Generates AOT caches for validation, serialization, and pure functions.\n",[228,508,510],{"class":230,"line":509},24,[228,511,512],{"class":285},"    \u002F\u002F Without this, caches are fetched at runtime via fetchRemoteMethodsMetadata().\n",[228,514,516,519,521],{"class":230,"line":515},25,[228,517,518],{"class":242},"    aotCaches?",[228,520,301],{"class":238},[228,522,304],{"class":238},[228,524,526,529,531,534],{"class":230,"line":525},26,[228,527,528],{"class":242},"        excludedFns?",[228,530,301],{"class":238},[228,532,533],{"class":242}," string[];         ",[228,535,536],{"class":285},"\u002F\u002F JIT function IDs to exclude\n",[228,538,540,543,545,548],{"class":230,"line":539},27,[228,541,542],{"class":242},"        excludedPureFns",[228,544,327],{"class":238},[228,546,547],{"class":242}," string[];     ",[228,549,550],{"class":285},"\u002F\u002F Pure function names to exclude\n",[228,552,554,557,559,562,564,567],{"class":230,"line":553},28,[228,555,556],{"class":242},"        cache",[228,558,327],{"class":238},[228,560,561],{"class":242}," boolean ",[228,563,333],{"class":238},[228,565,566],{"class":242}," string;       ",[228,568,569],{"class":285},"\u002F\u002F Disk cache: true (default), false, or custom path\n",[228,571,573,576,578,581],{"class":230,"line":572},29,[228,574,575],{"class":242},"        excludeReflection",[228,577,327],{"class":238},[228,579,580],{"class":242}," boolean;    ",[228,582,583],{"class":285},"\u002F\u002F Stub out reflection modules in bundle (reduces size)\n",[228,585,587,590,592,595],{"class":230,"line":586},30,[228,588,589],{"class":242},"        customVirtualModuleId",[228,591,327],{"class":238},[228,593,594],{"class":242}," string; ",[228,596,597],{"class":285},"\u002F\u002F Custom virtual module prefix\n",[228,599,601],{"class":230,"line":600},31,[228,602,409],{"class":238},[228,604,606],{"class":230,"line":605},32,[228,607,267],{"emptyLinePlaceholder":266},[228,609,611],{"class":230,"line":610},33,[228,612,613],{"class":285},"    \u002F\u002F Runs the server to generate AOT caches and optionally keeps it alive.\n",[228,615,617],{"class":230,"line":616},34,[228,618,619],{"class":285},"    \u002F\u002F If omitted, only mion's internal routes are cached (when aotCaches is set).\n",[228,621,623,626,628],{"class":230,"line":622},35,[228,624,625],{"class":242},"    server?",[228,627,301],{"class":238},[228,629,304],{"class":238},[228,631,633,636,638,641],{"class":230,"line":632},36,[228,634,635],{"class":442},"        startScript",[228,637,301],{"class":238},[228,639,640],{"class":242}," string;      ",[228,642,643],{"class":285},"\u002F\u002F Server start script (required)\n",[228,645,647,650,652,654],{"class":230,"line":646},37,[228,648,649],{"class":242},"        viteConfig",[228,651,327],{"class":238},[228,653,640],{"class":242},[228,655,656],{"class":285},"\u002F\u002F Server's vite.config.ts for vite-node (auto-discovered)\n",[228,658,660,663,665,668,670,672,674,677,679,681,683,686,688,691],{"class":230,"line":659},38,[228,661,662],{"class":242},"        runMode: ",[228,664,257],{"class":238},[228,666,667],{"class":254},"buildOnly",[228,669,257],{"class":238},[228,671,374],{"class":238},[228,673,251],{"class":238},[228,675,676],{"class":254},"childProcess",[228,678,257],{"class":238},[228,680,374],{"class":238},[228,682,251],{"class":238},[228,684,685],{"class":254},"middleware",[228,687,257],{"class":238},[228,689,690],{"class":242},"; ",[228,692,693],{"class":285},"\u002F\u002F Server run mode (required)\n",[228,695,697,700,702,705],{"class":230,"line":696},39,[228,698,699],{"class":242},"        waitTimeout",[228,701,327],{"class":238},[228,703,704],{"class":242}," number;           ",[228,706,707],{"class":285},"\u002F\u002F Max wait time in ms for setPlatformConfig() IPC (default: 30000)\n",[228,709,711,714,716,719,722,725,728,731],{"class":230,"line":710},40,[228,712,713],{"class":242},"        env",[228,715,327],{"class":238},[228,717,718],{"class":242}," Record",[228,720,721],{"class":238},"\u003C",[228,723,724],{"class":242},"string",[228,726,727],{"class":238},",",[228,729,730],{"class":242}," string>;   ",[228,732,733],{"class":285},"\u002F\u002F Extra env vars for the child process\n",[228,735,737,740,742,745],{"class":230,"line":736},41,[228,738,739],{"class":242},"        args?",[228,741,301],{"class":238},[228,743,744],{"class":242}," string[];                ",[228,746,747],{"class":285},"\u002F\u002F Extra args appended after the start script\n",[228,749,751],{"class":230,"line":750},42,[228,752,409],{"class":238},[228,754,756,758,761],{"class":230,"line":755},43,[228,757,245],{"class":238},[228,759,760],{"class":242},")",[228,762,260],{"class":238},[764,765,203,766,769,770,773,774,777],"note",{},[205,767,768],{},"aotCaches"," option only applies to ",[205,771,772],{},"vite build"," — it has no effect during ",[205,775,776],{},"vite dev",".",[214,779,781],{"id":780},"configuration-examples","Configuration Examples",[783,784,786],"h3",{"id":785},"server-only","Server Only",[201,788,789],{},"For setups where server and client use separate build tools (e.g., Next.js, Turbopack), or when you only have a server package.",[791,792,793,1124],"code-group",{},[219,794,798],{"className":795,"code":796,"filename":28,"language":797,"meta":224,"style":224},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {defineConfig} from 'vite';\nimport {resolve} from 'path';\nimport {mionVitePlugin} from '@mionjs\u002Fdevtools\u002Fvite-plugin';\n\nexport default defineConfig({\n    plugins: [\n        mionVitePlugin({\n            \u002F\u002F runTypes metadata\n            runTypes: {tsConfig: resolve(__dirname, 'tsconfig.json')},\n            \u002F\u002F Scan client source for pureServerFn() and serverMapFrom() calls\n            serverPureFunctions: {\n                clientSrcPath: resolve(__dirname, '..\u002Fclient\u002Fsrc'),\n            },\n        }),\n    ],\n    build: {\n        lib: {\n            entry: resolve(__dirname, 'src\u002Finit.ts'),\n            formats: ['es'],\n        },\n        rollupOptions: {\n            external: [\u002F^[^.\u002F]\u002F],\n        },\n    },\n});\n","ts",[205,799,800,822,844,865,869,884,894,903,908,942,947,956,981,986,995,1002,1011,1020,1044,1066,1071,1080,1108,1112,1116],{"__ignoreMap":224},[228,801,802,804,806,809,811,813,815,818,820],{"class":230,"line":231},[228,803,235],{"class":234},[228,805,239],{"class":238},[228,807,808],{"class":242},"defineConfig",[228,810,245],{"class":238},[228,812,248],{"class":234},[228,814,251],{"class":238},[228,816,817],{"class":254},"vite",[228,819,257],{"class":238},[228,821,260],{"class":238},[228,823,824,826,828,831,833,835,837,840,842],{"class":230,"line":263},[228,825,235],{"class":234},[228,827,239],{"class":238},[228,829,830],{"class":242},"resolve",[228,832,245],{"class":238},[228,834,248],{"class":234},[228,836,251],{"class":238},[228,838,839],{"class":254},"path",[228,841,257],{"class":238},[228,843,260],{"class":238},[228,845,846,848,850,853,855,857,859,861,863],{"class":230,"line":270},[228,847,235],{"class":234},[228,849,239],{"class":238},[228,851,852],{"class":242},"mionVitePlugin",[228,854,245],{"class":238},[228,856,248],{"class":234},[228,858,251],{"class":238},[228,860,211],{"class":254},[228,862,257],{"class":238},[228,864,260],{"class":238},[228,866,867],{"class":230,"line":282},[228,868,267],{"emptyLinePlaceholder":266},[228,870,871,874,877,880,882],{"class":230,"line":289},[228,872,873],{"class":234},"export",[228,875,876],{"class":234}," default",[228,878,879],{"class":273}," defineConfig",[228,881,276],{"class":242},[228,883,279],{"class":238},[228,885,886,889,891],{"class":230,"line":295},[228,887,888],{"class":442},"    plugins",[228,890,301],{"class":238},[228,892,893],{"class":242}," [\n",[228,895,896,899,901],{"class":230,"line":307},[228,897,898],{"class":273},"        mionVitePlugin",[228,900,276],{"class":242},[228,902,279],{"class":238},[228,904,905],{"class":230,"line":321},[228,906,907],{"class":285},"            \u002F\u002F runTypes metadata\n",[228,909,910,913,915,917,920,922,925,928,930,932,935,937,939],{"class":230,"line":342},[228,911,912],{"class":442},"            runTypes",[228,914,301],{"class":238},[228,916,239],{"class":238},[228,918,919],{"class":442},"tsConfig",[228,921,301],{"class":238},[228,923,924],{"class":273}," resolve",[228,926,927],{"class":242},"(__dirname",[228,929,727],{"class":238},[228,931,251],{"class":238},[228,933,934],{"class":254},"tsconfig.json",[228,936,257],{"class":238},[228,938,760],{"class":242},[228,940,941],{"class":238},"},\n",[228,943,944],{"class":230,"line":359},[228,945,946],{"class":285},"            \u002F\u002F Scan client source for pureServerFn() and serverMapFrom() calls\n",[228,948,949,952,954],{"class":230,"line":395},[228,950,951],{"class":442},"            serverPureFunctions",[228,953,301],{"class":238},[228,955,304],{"class":238},[228,957,958,961,963,965,967,969,971,974,976,978],{"class":230,"line":406},[228,959,960],{"class":442},"                clientSrcPath",[228,962,301],{"class":238},[228,964,924],{"class":273},[228,966,927],{"class":242},[228,968,727],{"class":238},[228,970,251],{"class":238},[228,972,973],{"class":254},"..\u002Fclient\u002Fsrc",[228,975,257],{"class":238},[228,977,760],{"class":242},[228,979,980],{"class":238},",\n",[228,982,983],{"class":230,"line":412},[228,984,985],{"class":238},"            },\n",[228,987,988,991,993],{"class":230,"line":417},[228,989,990],{"class":238},"        }",[228,992,760],{"class":242},[228,994,980],{"class":238},[228,996,997,1000],{"class":230,"line":423},[228,998,999],{"class":242},"    ]",[228,1001,980],{"class":238},[228,1003,1004,1007,1009],{"class":230,"line":429},[228,1005,1006],{"class":442},"    build",[228,1008,301],{"class":238},[228,1010,304],{"class":238},[228,1012,1013,1016,1018],{"class":230,"line":439},[228,1014,1015],{"class":442},"        lib",[228,1017,301],{"class":238},[228,1019,304],{"class":238},[228,1021,1022,1025,1027,1029,1031,1033,1035,1038,1040,1042],{"class":230,"line":454},[228,1023,1024],{"class":442},"            entry",[228,1026,301],{"class":238},[228,1028,924],{"class":273},[228,1030,927],{"class":242},[228,1032,727],{"class":238},[228,1034,251],{"class":238},[228,1036,1037],{"class":254},"src\u002Finit.ts",[228,1039,257],{"class":238},[228,1041,760],{"class":242},[228,1043,980],{"class":238},[228,1045,1046,1049,1051,1054,1056,1059,1061,1064],{"class":230,"line":467},[228,1047,1048],{"class":442},"            formats",[228,1050,301],{"class":238},[228,1052,1053],{"class":242}," [",[228,1055,257],{"class":238},[228,1057,1058],{"class":254},"es",[228,1060,257],{"class":238},[228,1062,1063],{"class":242},"]",[228,1065,980],{"class":238},[228,1067,1068],{"class":230,"line":479},[228,1069,1070],{"class":238},"        },\n",[228,1072,1073,1076,1078],{"class":230,"line":493},[228,1074,1075],{"class":442},"        rollupOptions",[228,1077,301],{"class":238},[228,1079,304],{"class":238},[228,1081,1082,1085,1087,1089,1092,1095,1098,1101,1104,1106],{"class":230,"line":498},[228,1083,1084],{"class":442},"            external",[228,1086,301],{"class":238},[228,1088,1053],{"class":242},[228,1090,1091],{"class":238},"\u002F",[228,1093,1094],{"class":234},"^",[228,1096,1097],{"class":238},"[^",[228,1099,1100],{"class":254},".\u002F",[228,1102,1103],{"class":238},"]\u002F",[228,1105,1063],{"class":242},[228,1107,980],{"class":238},[228,1109,1110],{"class":230,"line":503},[228,1111,1070],{"class":238},[228,1113,1114],{"class":230,"line":509},[228,1115,409],{"class":238},[228,1117,1118,1120,1122],{"class":230,"line":515},[228,1119,245],{"class":238},[228,1121,760],{"class":242},[228,1123,260],{"class":238},[219,1125,1128],{"className":795,"code":1126,"filename":1127,"language":797,"meta":224,"style":224},"import {defineConfig} from 'vite';\nimport {resolve} from 'path';\nimport {mionVitePlugin} from '@mionjs\u002Fdevtools\u002Fvite-plugin';\n\n\u002F\u002F Server config when the client is NOT built with Vite (e.g., Next.js with Turbopack).\n\u002F\u002F noViteClient requires all pureServerFn() and serverMapFrom() calls to have explicit names.\nexport default defineConfig({\n    plugins: [\n        mionVitePlugin({\n            runTypes: {tsConfig: resolve(__dirname, 'tsconfig.json')},\n            serverPureFunctions: {\n                clientSrcPath: resolve(__dirname, '..\u002Fclient\u002Fsrc'),\n                noViteClient: true,\n            },\n        }),\n    ],\n});\n","Server (no Vite client)",[205,1129,1130,1150,1170,1190,1194,1199,1204,1216,1224,1232,1260,1268,1290,1303,1307,1315,1321],{"__ignoreMap":224},[228,1131,1132,1134,1136,1138,1140,1142,1144,1146,1148],{"class":230,"line":231},[228,1133,235],{"class":234},[228,1135,239],{"class":238},[228,1137,808],{"class":242},[228,1139,245],{"class":238},[228,1141,248],{"class":234},[228,1143,251],{"class":238},[228,1145,817],{"class":254},[228,1147,257],{"class":238},[228,1149,260],{"class":238},[228,1151,1152,1154,1156,1158,1160,1162,1164,1166,1168],{"class":230,"line":263},[228,1153,235],{"class":234},[228,1155,239],{"class":238},[228,1157,830],{"class":242},[228,1159,245],{"class":238},[228,1161,248],{"class":234},[228,1163,251],{"class":238},[228,1165,839],{"class":254},[228,1167,257],{"class":238},[228,1169,260],{"class":238},[228,1171,1172,1174,1176,1178,1180,1182,1184,1186,1188],{"class":230,"line":270},[228,1173,235],{"class":234},[228,1175,239],{"class":238},[228,1177,852],{"class":242},[228,1179,245],{"class":238},[228,1181,248],{"class":234},[228,1183,251],{"class":238},[228,1185,211],{"class":254},[228,1187,257],{"class":238},[228,1189,260],{"class":238},[228,1191,1192],{"class":230,"line":282},[228,1193,267],{"emptyLinePlaceholder":266},[228,1195,1196],{"class":230,"line":289},[228,1197,1198],{"class":285},"\u002F\u002F Server config when the client is NOT built with Vite (e.g., Next.js with Turbopack).\n",[228,1200,1201],{"class":230,"line":295},[228,1202,1203],{"class":285},"\u002F\u002F noViteClient requires all pureServerFn() and serverMapFrom() calls to have explicit names.\n",[228,1205,1206,1208,1210,1212,1214],{"class":230,"line":307},[228,1207,873],{"class":234},[228,1209,876],{"class":234},[228,1211,879],{"class":273},[228,1213,276],{"class":242},[228,1215,279],{"class":238},[228,1217,1218,1220,1222],{"class":230,"line":321},[228,1219,888],{"class":442},[228,1221,301],{"class":238},[228,1223,893],{"class":242},[228,1225,1226,1228,1230],{"class":230,"line":342},[228,1227,898],{"class":273},[228,1229,276],{"class":242},[228,1231,279],{"class":238},[228,1233,1234,1236,1238,1240,1242,1244,1246,1248,1250,1252,1254,1256,1258],{"class":230,"line":359},[228,1235,912],{"class":442},[228,1237,301],{"class":238},[228,1239,239],{"class":238},[228,1241,919],{"class":442},[228,1243,301],{"class":238},[228,1245,924],{"class":273},[228,1247,927],{"class":242},[228,1249,727],{"class":238},[228,1251,251],{"class":238},[228,1253,934],{"class":254},[228,1255,257],{"class":238},[228,1257,760],{"class":242},[228,1259,941],{"class":238},[228,1261,1262,1264,1266],{"class":230,"line":395},[228,1263,951],{"class":442},[228,1265,301],{"class":238},[228,1267,304],{"class":238},[228,1269,1270,1272,1274,1276,1278,1280,1282,1284,1286,1288],{"class":230,"line":406},[228,1271,960],{"class":442},[228,1273,301],{"class":238},[228,1275,924],{"class":273},[228,1277,927],{"class":242},[228,1279,727],{"class":238},[228,1281,251],{"class":238},[228,1283,973],{"class":254},[228,1285,257],{"class":238},[228,1287,760],{"class":242},[228,1289,980],{"class":238},[228,1291,1292,1295,1297,1301],{"class":230,"line":412},[228,1293,1294],{"class":442},"                noViteClient",[228,1296,301],{"class":238},[228,1298,1300],{"class":1299},"sfNiH"," true",[228,1302,980],{"class":238},[228,1304,1305],{"class":230,"line":417},[228,1306,985],{"class":238},[228,1308,1309,1311,1313],{"class":230,"line":423},[228,1310,990],{"class":238},[228,1312,760],{"class":242},[228,1314,980],{"class":238},[228,1316,1317,1319],{"class":230,"line":429},[228,1318,999],{"class":242},[228,1320,980],{"class":238},[228,1322,1323,1325,1327],{"class":230,"line":439},[228,1324,245],{"class":238},[228,1326,760],{"class":242},[228,1328,260],{"class":238},[783,1330,1332],{"id":1331},"client-server","Client + Server",[201,1334,1335,1336,1338,1339,1341],{},"When both client and server are managed by Vite. In ",[205,1337,676],{}," mode the server stays running for dev; in ",[205,1340,685],{}," mode it runs inside the same Vite process (e.g., Nuxt).",[791,1343,1344,1619,1869],{},[219,1345,1348],{"className":795,"code":1346,"filename":1347,"language":797,"meta":224,"style":224},"import {defineConfig} from 'vite';\nimport {resolve} from 'path';\nimport {mionVitePlugin} from '@mionjs\u002Fdevtools\u002Fvite-plugin';\n\n\u002F\u002F IPC mode: spawns the server, generates AOT caches, and keeps the server running.\n\u002F\u002F Useful during development when the client needs a live server for API calls.\nexport default defineConfig({\n    plugins: [\n        mionVitePlugin({\n            runTypes: {tsConfig: resolve(__dirname, 'tsconfig.json')},\n            \u002F\u002F runs the server in a child process separate from vite dev server\n            server: {\n                startScript: resolve(__dirname, '..\u002Fserver\u002Fsrc\u002Finit.ts'),\n                viteConfig: resolve(__dirname, '..\u002Fserver\u002Fvite.config.ts'),\n                runMode: 'childProcess',\n                waitTimeout: 30000,\n                env: {PORT: '3000'},\n            },\n        }),\n    ],\n});\n","Client (childProcess)",[205,1349,1350,1370,1390,1410,1414,1419,1424,1436,1444,1452,1480,1485,1494,1518,1542,1557,1570,1593,1597,1605,1611],{"__ignoreMap":224},[228,1351,1352,1354,1356,1358,1360,1362,1364,1366,1368],{"class":230,"line":231},[228,1353,235],{"class":234},[228,1355,239],{"class":238},[228,1357,808],{"class":242},[228,1359,245],{"class":238},[228,1361,248],{"class":234},[228,1363,251],{"class":238},[228,1365,817],{"class":254},[228,1367,257],{"class":238},[228,1369,260],{"class":238},[228,1371,1372,1374,1376,1378,1380,1382,1384,1386,1388],{"class":230,"line":263},[228,1373,235],{"class":234},[228,1375,239],{"class":238},[228,1377,830],{"class":242},[228,1379,245],{"class":238},[228,1381,248],{"class":234},[228,1383,251],{"class":238},[228,1385,839],{"class":254},[228,1387,257],{"class":238},[228,1389,260],{"class":238},[228,1391,1392,1394,1396,1398,1400,1402,1404,1406,1408],{"class":230,"line":270},[228,1393,235],{"class":234},[228,1395,239],{"class":238},[228,1397,852],{"class":242},[228,1399,245],{"class":238},[228,1401,248],{"class":234},[228,1403,251],{"class":238},[228,1405,211],{"class":254},[228,1407,257],{"class":238},[228,1409,260],{"class":238},[228,1411,1412],{"class":230,"line":282},[228,1413,267],{"emptyLinePlaceholder":266},[228,1415,1416],{"class":230,"line":289},[228,1417,1418],{"class":285},"\u002F\u002F IPC mode: spawns the server, generates AOT caches, and keeps the server running.\n",[228,1420,1421],{"class":230,"line":295},[228,1422,1423],{"class":285},"\u002F\u002F Useful during development when the client needs a live server for API calls.\n",[228,1425,1426,1428,1430,1432,1434],{"class":230,"line":307},[228,1427,873],{"class":234},[228,1429,876],{"class":234},[228,1431,879],{"class":273},[228,1433,276],{"class":242},[228,1435,279],{"class":238},[228,1437,1438,1440,1442],{"class":230,"line":321},[228,1439,888],{"class":442},[228,1441,301],{"class":238},[228,1443,893],{"class":242},[228,1445,1446,1448,1450],{"class":230,"line":342},[228,1447,898],{"class":273},[228,1449,276],{"class":242},[228,1451,279],{"class":238},[228,1453,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478],{"class":230,"line":359},[228,1455,912],{"class":442},[228,1457,301],{"class":238},[228,1459,239],{"class":238},[228,1461,919],{"class":442},[228,1463,301],{"class":238},[228,1465,924],{"class":273},[228,1467,927],{"class":242},[228,1469,727],{"class":238},[228,1471,251],{"class":238},[228,1473,934],{"class":254},[228,1475,257],{"class":238},[228,1477,760],{"class":242},[228,1479,941],{"class":238},[228,1481,1482],{"class":230,"line":395},[228,1483,1484],{"class":285},"            \u002F\u002F runs the server in a child process separate from vite dev server\n",[228,1486,1487,1490,1492],{"class":230,"line":406},[228,1488,1489],{"class":442},"            server",[228,1491,301],{"class":238},[228,1493,304],{"class":238},[228,1495,1496,1499,1501,1503,1505,1507,1509,1512,1514,1516],{"class":230,"line":412},[228,1497,1498],{"class":442},"                startScript",[228,1500,301],{"class":238},[228,1502,924],{"class":273},[228,1504,927],{"class":242},[228,1506,727],{"class":238},[228,1508,251],{"class":238},[228,1510,1511],{"class":254},"..\u002Fserver\u002Fsrc\u002Finit.ts",[228,1513,257],{"class":238},[228,1515,760],{"class":242},[228,1517,980],{"class":238},[228,1519,1520,1523,1525,1527,1529,1531,1533,1536,1538,1540],{"class":230,"line":417},[228,1521,1522],{"class":442},"                viteConfig",[228,1524,301],{"class":238},[228,1526,924],{"class":273},[228,1528,927],{"class":242},[228,1530,727],{"class":238},[228,1532,251],{"class":238},[228,1534,1535],{"class":254},"..\u002Fserver\u002Fvite.config.ts",[228,1537,257],{"class":238},[228,1539,760],{"class":242},[228,1541,980],{"class":238},[228,1543,1544,1547,1549,1551,1553,1555],{"class":230,"line":423},[228,1545,1546],{"class":442},"                runMode",[228,1548,301],{"class":238},[228,1550,251],{"class":238},[228,1552,676],{"class":254},[228,1554,257],{"class":238},[228,1556,980],{"class":238},[228,1558,1559,1562,1564,1568],{"class":230,"line":429},[228,1560,1561],{"class":442},"                waitTimeout",[228,1563,301],{"class":238},[228,1565,1567],{"class":1566},"sbssI"," 30000",[228,1569,980],{"class":238},[228,1571,1572,1575,1577,1579,1582,1584,1586,1589,1591],{"class":230,"line":439},[228,1573,1574],{"class":442},"                env",[228,1576,301],{"class":238},[228,1578,239],{"class":238},[228,1580,1581],{"class":442},"PORT",[228,1583,301],{"class":238},[228,1585,251],{"class":238},[228,1587,1588],{"class":254},"3000",[228,1590,257],{"class":238},[228,1592,941],{"class":238},[228,1594,1595],{"class":230,"line":454},[228,1596,985],{"class":238},[228,1598,1599,1601,1603],{"class":230,"line":467},[228,1600,990],{"class":238},[228,1602,760],{"class":242},[228,1604,980],{"class":238},[228,1606,1607,1609],{"class":230,"line":479},[228,1608,999],{"class":242},[228,1610,980],{"class":238},[228,1612,1613,1615,1617],{"class":230,"line":493},[228,1614,245],{"class":238},[228,1616,760],{"class":242},[228,1618,260],{"class":238},[219,1620,1623],{"className":795,"code":1621,"filename":1622,"language":797,"meta":224,"style":224},"import {defineConfig} from 'vite';\nimport {resolve} from 'path';\nimport vue from '@vitejs\u002Fplugin-vue';\nimport {mionVitePlugin} from '@mionjs\u002Fdevtools\u002Fvite-plugin';\n\n\u002F\u002F viteSSR mode: loads the server in the same Vite process.\n\u002F\u002F Used with frameworks like Nuxt that run Vite in middlewareMode.\nexport default defineConfig({\n    plugins: [\n        vue(),\n        mionVitePlugin({\n            runTypes: {tsConfig: resolve(__dirname, 'tsconfig.json')},\n            \u002F\u002F run mion ins the same dev server as FE but in SSR mode\n            \u002F\u002F mion runs as a middleware function\n            \u002F\u002F api calls are directly proxied to the mion request handler function\n            server: {\n                startScript: resolve(__dirname, '..\u002Fserver\u002Fsrc\u002Finit.ts'),\n                runMode: 'middleware',\n            },\n        }),\n    ],\n});\n","Client (middleware)",[205,1624,1625,1645,1665,1684,1704,1708,1713,1718,1730,1738,1748,1756,1784,1789,1794,1799,1807,1829,1843,1847,1855,1861],{"__ignoreMap":224},[228,1626,1627,1629,1631,1633,1635,1637,1639,1641,1643],{"class":230,"line":231},[228,1628,235],{"class":234},[228,1630,239],{"class":238},[228,1632,808],{"class":242},[228,1634,245],{"class":238},[228,1636,248],{"class":234},[228,1638,251],{"class":238},[228,1640,817],{"class":254},[228,1642,257],{"class":238},[228,1644,260],{"class":238},[228,1646,1647,1649,1651,1653,1655,1657,1659,1661,1663],{"class":230,"line":263},[228,1648,235],{"class":234},[228,1650,239],{"class":238},[228,1652,830],{"class":242},[228,1654,245],{"class":238},[228,1656,248],{"class":234},[228,1658,251],{"class":238},[228,1660,839],{"class":254},[228,1662,257],{"class":238},[228,1664,260],{"class":238},[228,1666,1667,1669,1672,1675,1677,1680,1682],{"class":230,"line":270},[228,1668,235],{"class":234},[228,1670,1671],{"class":242}," vue ",[228,1673,1674],{"class":234},"from",[228,1676,251],{"class":238},[228,1678,1679],{"class":254},"@vitejs\u002Fplugin-vue",[228,1681,257],{"class":238},[228,1683,260],{"class":238},[228,1685,1686,1688,1690,1692,1694,1696,1698,1700,1702],{"class":230,"line":282},[228,1687,235],{"class":234},[228,1689,239],{"class":238},[228,1691,852],{"class":242},[228,1693,245],{"class":238},[228,1695,248],{"class":234},[228,1697,251],{"class":238},[228,1699,211],{"class":254},[228,1701,257],{"class":238},[228,1703,260],{"class":238},[228,1705,1706],{"class":230,"line":289},[228,1707,267],{"emptyLinePlaceholder":266},[228,1709,1710],{"class":230,"line":295},[228,1711,1712],{"class":285},"\u002F\u002F viteSSR mode: loads the server in the same Vite process.\n",[228,1714,1715],{"class":230,"line":307},[228,1716,1717],{"class":285},"\u002F\u002F Used with frameworks like Nuxt that run Vite in middlewareMode.\n",[228,1719,1720,1722,1724,1726,1728],{"class":230,"line":321},[228,1721,873],{"class":234},[228,1723,876],{"class":234},[228,1725,879],{"class":273},[228,1727,276],{"class":242},[228,1729,279],{"class":238},[228,1731,1732,1734,1736],{"class":230,"line":342},[228,1733,888],{"class":442},[228,1735,301],{"class":238},[228,1737,893],{"class":242},[228,1739,1740,1743,1746],{"class":230,"line":359},[228,1741,1742],{"class":273},"        vue",[228,1744,1745],{"class":242},"()",[228,1747,980],{"class":238},[228,1749,1750,1752,1754],{"class":230,"line":395},[228,1751,898],{"class":273},[228,1753,276],{"class":242},[228,1755,279],{"class":238},[228,1757,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782],{"class":230,"line":406},[228,1759,912],{"class":442},[228,1761,301],{"class":238},[228,1763,239],{"class":238},[228,1765,919],{"class":442},[228,1767,301],{"class":238},[228,1769,924],{"class":273},[228,1771,927],{"class":242},[228,1773,727],{"class":238},[228,1775,251],{"class":238},[228,1777,934],{"class":254},[228,1779,257],{"class":238},[228,1781,760],{"class":242},[228,1783,941],{"class":238},[228,1785,1786],{"class":230,"line":412},[228,1787,1788],{"class":285},"            \u002F\u002F run mion ins the same dev server as FE but in SSR mode\n",[228,1790,1791],{"class":230,"line":417},[228,1792,1793],{"class":285},"            \u002F\u002F mion runs as a middleware function\n",[228,1795,1796],{"class":230,"line":423},[228,1797,1798],{"class":285},"            \u002F\u002F api calls are directly proxied to the mion request handler function\n",[228,1800,1801,1803,1805],{"class":230,"line":429},[228,1802,1489],{"class":442},[228,1804,301],{"class":238},[228,1806,304],{"class":238},[228,1808,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827],{"class":230,"line":439},[228,1810,1498],{"class":442},[228,1812,301],{"class":238},[228,1814,924],{"class":273},[228,1816,927],{"class":242},[228,1818,727],{"class":238},[228,1820,251],{"class":238},[228,1822,1511],{"class":254},[228,1824,257],{"class":238},[228,1826,760],{"class":242},[228,1828,980],{"class":238},[228,1830,1831,1833,1835,1837,1839,1841],{"class":230,"line":454},[228,1832,1546],{"class":442},[228,1834,301],{"class":238},[228,1836,251],{"class":238},[228,1838,685],{"class":254},[228,1840,257],{"class":238},[228,1842,980],{"class":238},[228,1844,1845],{"class":230,"line":467},[228,1846,985],{"class":238},[228,1848,1849,1851,1853],{"class":230,"line":479},[228,1850,990],{"class":238},[228,1852,760],{"class":242},[228,1854,980],{"class":238},[228,1856,1857,1859],{"class":230,"line":493},[228,1858,999],{"class":242},[228,1860,980],{"class":238},[228,1862,1863,1865,1867],{"class":230,"line":498},[228,1864,245],{"class":238},[228,1866,760],{"class":242},[228,1868,260],{"class":238},[219,1870,1873],{"className":795,"code":1871,"filename":1872,"language":797,"meta":224,"style":224},"\u002F\u002F vitest globalSetup — wait for the mion server before running tests\nimport {serverReady} from '@mionjs\u002Fdevtools\u002Fvite-plugin';\n\nexport async function setup() {\n    await serverReady;\n}\n","Vitest globalSetup",[205,1874,1875,1880,1901,1905,1923,1933],{"__ignoreMap":224},[228,1876,1877],{"class":230,"line":231},[228,1878,1879],{"class":285},"\u002F\u002F vitest globalSetup — wait for the mion server before running tests\n",[228,1881,1882,1884,1886,1889,1891,1893,1895,1897,1899],{"class":230,"line":263},[228,1883,235],{"class":234},[228,1885,239],{"class":238},[228,1887,1888],{"class":242},"serverReady",[228,1890,245],{"class":238},[228,1892,248],{"class":234},[228,1894,251],{"class":238},[228,1896,211],{"class":254},[228,1898,257],{"class":238},[228,1900,260],{"class":238},[228,1902,1903],{"class":230,"line":270},[228,1904,267],{"emptyLinePlaceholder":266},[228,1906,1907,1909,1913,1916,1919,1921],{"class":230,"line":282},[228,1908,873],{"class":234},[228,1910,1912],{"class":1911},"spNyl"," async",[228,1914,1915],{"class":1911}," function",[228,1917,1918],{"class":273}," setup",[228,1920,1745],{"class":238},[228,1922,304],{"class":238},[228,1924,1925,1928,1931],{"class":230,"line":289},[228,1926,1927],{"class":234},"    await",[228,1929,1930],{"class":242}," serverReady",[228,1932,260],{"class":238},[228,1934,1935],{"class":230,"line":295},[228,1936,1937],{"class":238},"}\n",[783,1939,1941],{"id":1940},"client-only","Client Only",[201,1943,1944],{},"The client fetches validation and serialization metadata from the server at runtime using optimistic updates, so no AOT caches or build-time server spawning is needed.",[219,1946,1949],{"className":795,"code":1947,"filename":1948,"language":797,"meta":224,"style":224},"\u002F\u002F Client without mion Vite plugin — no AOT caches needed.\n\u002F\u002F Validation and serialization metadata is fetched at runtime\n\u002F\u002F from the server via fetchRemoteMethodsMetadata().\nimport {initClient} from '@mionjs\u002Fclient';\nimport type {MyApi} from '.\u002Faot-routes-example.ts';\n\nconst {routes, middleFns} = initClient\u003CMyApi>({baseURL: 'http:\u002F\u002Flocalhost:3000'});\n","Client (no Vite plugin)",[205,1950,1951,1956,1961,1966,1988,2013,2017],{"__ignoreMap":224},[228,1952,1953],{"class":230,"line":231},[228,1954,1955],{"class":285},"\u002F\u002F Client without mion Vite plugin — no AOT caches needed.\n",[228,1957,1958],{"class":230,"line":263},[228,1959,1960],{"class":285},"\u002F\u002F Validation and serialization metadata is fetched at runtime\n",[228,1962,1963],{"class":230,"line":270},[228,1964,1965],{"class":285},"\u002F\u002F from the server via fetchRemoteMethodsMetadata().\n",[228,1967,1968,1970,1972,1975,1977,1979,1981,1984,1986],{"class":230,"line":282},[228,1969,235],{"class":234},[228,1971,239],{"class":238},[228,1973,1974],{"class":242},"initClient",[228,1976,245],{"class":238},[228,1978,248],{"class":234},[228,1980,251],{"class":238},[228,1982,1983],{"class":254},"@mionjs\u002Fclient",[228,1985,257],{"class":238},[228,1987,260],{"class":238},[228,1989,1990,1992,1995,1997,2000,2002,2004,2006,2009,2011],{"class":230,"line":289},[228,1991,235],{"class":234},[228,1993,1994],{"class":234}," type",[228,1996,239],{"class":238},[228,1998,1999],{"class":242},"MyApi",[228,2001,245],{"class":238},[228,2003,248],{"class":234},[228,2005,251],{"class":238},[228,2007,2008],{"class":254},".\u002Faot-routes-example.ts",[228,2010,257],{"class":238},[228,2012,260],{"class":238},[228,2014,2015],{"class":230,"line":295},[228,2016,267],{"emptyLinePlaceholder":266},[228,2018,2019,2022,2024,2027,2029,2032,2034,2037,2040,2042,2045,2048,2050,2053,2056,2058,2060,2063,2065,2067,2069],{"class":230,"line":307},[228,2020,2021],{"class":1911},"const",[228,2023,239],{"class":238},[228,2025,2026],{"class":242},"routes",[228,2028,727],{"class":238},[228,2030,2031],{"class":242}," middleFns",[228,2033,245],{"class":238},[228,2035,2036],{"class":238}," =",[228,2038,2039],{"class":273}," initClient",[228,2041,721],{"class":238},[228,2043,1999],{"class":2044},"sBMFI",[228,2046,2047],{"class":238},">",[228,2049,276],{"class":242},[228,2051,2052],{"class":238},"{",[228,2054,2055],{"class":442},"baseURL",[228,2057,301],{"class":238},[228,2059,251],{"class":238},[228,2061,2062],{"class":254},"http:\u002F\u002Flocalhost:3000",[228,2064,257],{"class":238},[228,2066,245],{"class":238},[228,2068,760],{"class":242},[228,2070,260],{"class":238},[214,2072,140],{"id":2073},"eslint-rules",[201,2075,2076,2077,2081],{},"mion provides an ESLint plugin with rules to catch common mistakes with type imports, route typing, and pure functions. See the ",[2078,2079,140],"a",{"href":2080},".\u002Feslint-rules"," page for full documentation.",[219,2083,2088],{"className":2084,"code":2085,"filename":2086,"language":2087,"meta":224,"style":224},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"extends\": [\"plugin:@mionjs\u002Frecommended\"]\n}\n",".eslintrc.json","json",[205,2089,2090,2094,2119],{"__ignoreMap":224},[228,2091,2092],{"class":230,"line":231},[228,2093,279],{"class":238},[228,2095,2096,2099,2102,2105,2107,2109,2111,2114,2116],{"class":230,"line":263},[228,2097,2098],{"class":238},"  \"",[228,2100,2101],{"class":1911},"extends",[228,2103,2104],{"class":238},"\"",[228,2106,301],{"class":238},[228,2108,1053],{"class":238},[228,2110,2104],{"class":238},[228,2112,2113],{"class":254},"plugin:@mionjs\u002Frecommended",[228,2115,2104],{"class":238},[228,2117,2118],{"class":238},"]\n",[228,2120,2121],{"class":230,"line":270},[228,2122,1937],{"class":238},[2124,2125,2126],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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 .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}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}","How to configure the mion Vite plugin for server and client packages.","md",null,{"toc":26},{"title":144,"description":2127},"n-iV4SY4lR-m2Hltx280fY6tsEyXsDqhke2WtyLh-fk",[2134,2136],{"title":140,"path":141,"stem":142,"description":2135,"children":-1},"ESLint rules specific for mion that ensure RunTypes works properly.",{"title":155,"path":149,"stem":156,"description":2137,"children":-1},"Running mion APIs on Node.js using the http module.",1778674529756]