[{"data":1,"prerenderedAt":4558},["ShallowReactive",2],{"navigation_docs":3,"-devtools-eslint-rules":195,"-devtools-eslint-rules-surround":4553},[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":140,"body":197,"description":4547,"extension":4548,"links":4549,"meta":4550,"navigation":1335,"path":141,"seo":4551,"stem":142,"__hash__":4552},"docs\u002F5.devtools\u002F2.eslint-rules.md",{"type":198,"value":199,"toc":4533},"minimark",[200,209,214,334,338,366,370,373,566,569,605,608,614,617,622,625,629,635,828,833,951,956,1100,1109,1256,1261,1502,1506,1511,1652,1657,1762,1765,1770,1781,1784,1791,1795,2073,2077,2342,2344,2349,2358,2361,2367,2370,2487,2490,2596,2598,2603,2606,2609,2612,2615,2620,2869,2874,3166,3169,3174,3348,3353,3553,3558,3678,3680,3685,3699,3701,3706,3718,3721,3741,3744,3853,3856,3960,3962,3968,3981,3988,3992,4024,4027,4092,4095,4258,4261,4511,4513,4529],[201,202,203,204,208],"p",{},"mion provides an ESLint plugin (",[205,206,207],"code",{},"@mionjs\u002Feslint-plugin",") with rules specifically designed to catch common mistakes and enforce best practices when working with RunTYpes mion routes and middleFns.",[210,211,213],"h2",{"id":212},"summary","Summary",[215,216,217,233],"table",{},[218,219,220],"thead",{},[221,222,223,227,230],"tr",{},[224,225,226],"th",{},"Rule",[224,228,229],{},"Description",[224,231,232],{},"Recommended",[234,235,236,250,262,278,290,309,321],"tbody",{},[221,237,238,244,247],{},[239,240,241],"td",{},[205,242,243],{},"strong-typed-routes",[239,245,246],{},"Ensures handlers have explicit type annotations",[239,248,249],{},"✅ Error",[221,251,252,257,260],{},[239,253,254],{},[205,255,256],{},"no-type-imports",[239,258,259],{},"Prevents type-only imports for route\u002FmiddleFn types",[239,261,249],{},[221,263,264,269,276],{},[239,265,266],{},[205,267,268],{},"no-typeof-runtype",[239,270,271,272,275],{},"Prevents ",[205,273,274],{},"typeof"," with runType functions",[239,277,249],{},[221,279,280,285,288],{},[239,281,282],{},[205,283,284],{},"no-unreachable-union-types",[239,286,287],{},"Detects unreachable union type members",[239,289,249],{},[221,291,292,297,307],{},[239,293,294],{},[205,295,296],{},"pure-functions",[239,298,299,300,303,304],{},"Validates purity of functions passed to ",[205,301,302],{},"pureServerFn"," and ",[205,305,306],{},"registerPureFnFactory",[239,308,249],{},[221,310,311,316,319],{},[239,312,313],{},[205,314,315],{},"type-formats-imports",[239,317,318],{},"Prevents type-only imports for TypeFormat types",[239,320,249],{},[221,322,323,328,331],{},[239,324,325],{},[205,326,327],{},"no-vite-client",[239,329,330],{},"Enforces constraints for non-Vite client builds (Next.js, Turbopack, etc.)",[239,332,333],{},"Opt-in",[210,335,337],{"id":336},"installation","Installation",[339,340,345],"pre",{"className":341,"code":342,"language":343,"meta":344,"style":344},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install @mionjs\u002Feslint-plugin -D\n","bash","",[205,346,347],{"__ignoreMap":344},[348,349,352,356,360,363],"span",{"class":350,"line":351},"line",1,[348,353,355],{"class":354},"sBMFI","npm",[348,357,359],{"class":358},"sfazB"," install",[348,361,362],{"class":358}," @mionjs\u002Feslint-plugin",[348,364,365],{"class":358}," -D\n",[210,367,369],{"id":368},"configuration","Configuration",[201,371,372],{},"Add the plugin to your ESLint configuration:",[339,374,379],{"className":375,"code":376,"filename":377,"language":378,"meta":344,"style":344},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"plugins\": [\"@mionjs\"],\n  \"rules\": {\n    \"@mionjs\u002Fstrong-typed-routes\": \"error\",\n    \"@mionjs\u002Fno-type-imports\": \"error\",\n    \"@mionjs\u002Fno-unreachable-union-types\": \"error\",\n    \"@mionjs\u002Fno-typeof-runtype\": \"error\",\n    \"@mionjs\u002Fpure-functions\": \"error\",\n    \"@mionjs\u002Ftype-formats-imports\": \"error\"\n  }\n}\n",".eslintrc.json","json",[205,380,381,387,416,431,455,475,495,515,535,554,560],{"__ignoreMap":344},[348,382,383],{"class":350,"line":351},[348,384,386],{"class":385},"sMK4o","{\n",[348,388,390,393,397,400,403,406,408,411,413],{"class":350,"line":389},2,[348,391,392],{"class":385},"  \"",[348,394,396],{"class":395},"spNyl","plugins",[348,398,399],{"class":385},"\"",[348,401,402],{"class":385},":",[348,404,405],{"class":385}," [",[348,407,399],{"class":385},[348,409,410],{"class":358},"@mionjs",[348,412,399],{"class":385},[348,414,415],{"class":385},"],\n",[348,417,419,421,424,426,428],{"class":350,"line":418},3,[348,420,392],{"class":385},[348,422,423],{"class":395},"rules",[348,425,399],{"class":385},[348,427,402],{"class":385},[348,429,430],{"class":385}," {\n",[348,432,434,437,440,442,444,447,450,452],{"class":350,"line":433},4,[348,435,436],{"class":385},"    \"",[348,438,439],{"class":354},"@mionjs\u002Fstrong-typed-routes",[348,441,399],{"class":385},[348,443,402],{"class":385},[348,445,446],{"class":385}," \"",[348,448,449],{"class":358},"error",[348,451,399],{"class":385},[348,453,454],{"class":385},",\n",[348,456,458,460,463,465,467,469,471,473],{"class":350,"line":457},5,[348,459,436],{"class":385},[348,461,462],{"class":354},"@mionjs\u002Fno-type-imports",[348,464,399],{"class":385},[348,466,402],{"class":385},[348,468,446],{"class":385},[348,470,449],{"class":358},[348,472,399],{"class":385},[348,474,454],{"class":385},[348,476,478,480,483,485,487,489,491,493],{"class":350,"line":477},6,[348,479,436],{"class":385},[348,481,482],{"class":354},"@mionjs\u002Fno-unreachable-union-types",[348,484,399],{"class":385},[348,486,402],{"class":385},[348,488,446],{"class":385},[348,490,449],{"class":358},[348,492,399],{"class":385},[348,494,454],{"class":385},[348,496,498,500,503,505,507,509,511,513],{"class":350,"line":497},7,[348,499,436],{"class":385},[348,501,502],{"class":354},"@mionjs\u002Fno-typeof-runtype",[348,504,399],{"class":385},[348,506,402],{"class":385},[348,508,446],{"class":385},[348,510,449],{"class":358},[348,512,399],{"class":385},[348,514,454],{"class":385},[348,516,518,520,523,525,527,529,531,533],{"class":350,"line":517},8,[348,519,436],{"class":385},[348,521,522],{"class":354},"@mionjs\u002Fpure-functions",[348,524,399],{"class":385},[348,526,402],{"class":385},[348,528,446],{"class":385},[348,530,449],{"class":358},[348,532,399],{"class":385},[348,534,454],{"class":385},[348,536,538,540,543,545,547,549,551],{"class":350,"line":537},9,[348,539,436],{"class":385},[348,541,542],{"class":354},"@mionjs\u002Ftype-formats-imports",[348,544,399],{"class":385},[348,546,402],{"class":385},[348,548,446],{"class":385},[348,550,449],{"class":358},[348,552,553],{"class":385},"\"\n",[348,555,557],{"class":350,"line":556},10,[348,558,559],{"class":385},"  }\n",[348,561,563],{"class":350,"line":562},11,[348,564,565],{"class":385},"}\n",[201,567,568],{},"Or use the recommended configuration:",[339,570,572],{"className":375,"code":571,"filename":377,"language":378,"meta":344,"style":344},"{\n  \"extends\": [\"plugin:@mionjs\u002Frecommended\"]\n}\n",[205,573,574,578,601],{"__ignoreMap":344},[348,575,576],{"class":350,"line":351},[348,577,386],{"class":385},[348,579,580,582,585,587,589,591,593,596,598],{"class":350,"line":389},[348,581,392],{"class":385},[348,583,584],{"class":395},"extends",[348,586,399],{"class":385},[348,588,402],{"class":385},[348,590,405],{"class":385},[348,592,399],{"class":385},[348,594,595],{"class":358},"plugin:@mionjs\u002Frecommended",[348,597,399],{"class":385},[348,599,600],{"class":385},"]\n",[348,602,603],{"class":350,"line":418},[348,604,565],{"class":385},[210,606,607],{"id":423},"Rules",[609,610,612],"h3",{"id":611},"mionjsstrong-typed-routes",[205,613,439],{},[201,615,616],{},"Ensures that all route and middleFn handlers have explicit type annotations for parameters and return types. This is essential for mion's automatic validation and serialization to work correctly.",[618,619,621],"h4",{"id":620},"why-is-this-important","Why is this important?",[201,623,624],{},"mion uses TypeScript types at runtime to generate validation and serialization functions. Without explicit types, mion cannot properly validate incoming data or serialize responses.",[618,626,628],{"id":627},"valid-examples","✅ Valid Examples",[201,630,631],{},[632,633,634],"strong",{},"Inline handlers with explicit types:",[339,636,640],{"className":637,"code":638,"language":639,"meta":344,"style":344},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F 1. Direct inline handlers with proper types\nroute((ctx, name: string): string => `hello ${name}`);\nmiddleFn((ctx, data: number): void => {\n    console.log(data);\n});\nheadersFn((c: CallContext, {headers}: HeadersSubset\u003C'auth'>): void => {\n    \u002F\u002F do something\n});\n","ts",[205,641,642,648,704,734,755,764,815,820],{"__ignoreMap":344},[348,643,644],{"class":350,"line":351},[348,645,647],{"class":646},"sHwdD","\u002F\u002F 1. Direct inline handlers with proper types\n",[348,649,650,654,658,660,664,667,670,672,675,678,680,683,686,689,692,695,698,701],{"class":350,"line":389},[348,651,653],{"class":652},"s2Zo4","route",[348,655,657],{"class":656},"sTEyZ","(",[348,659,657],{"class":385},[348,661,663],{"class":662},"sHdIc","ctx",[348,665,666],{"class":385},",",[348,668,669],{"class":662}," name",[348,671,402],{"class":385},[348,673,674],{"class":354}," string",[348,676,677],{"class":385},"):",[348,679,674],{"class":354},[348,681,682],{"class":395}," =>",[348,684,685],{"class":385}," `",[348,687,688],{"class":358},"hello ",[348,690,691],{"class":385},"${",[348,693,694],{"class":656},"name",[348,696,697],{"class":385},"}`",[348,699,700],{"class":656},")",[348,702,703],{"class":385},";\n",[348,705,706,709,711,713,715,717,720,722,725,727,730,732],{"class":350,"line":418},[348,707,708],{"class":652},"middleFn",[348,710,657],{"class":656},[348,712,657],{"class":385},[348,714,663],{"class":662},[348,716,666],{"class":385},[348,718,719],{"class":662}," data",[348,721,402],{"class":385},[348,723,724],{"class":354}," number",[348,726,677],{"class":385},[348,728,729],{"class":354}," void",[348,731,682],{"class":395},[348,733,430],{"class":385},[348,735,736,739,742,745,748,751,753],{"class":350,"line":433},[348,737,738],{"class":656},"    console",[348,740,741],{"class":385},".",[348,743,744],{"class":652},"log",[348,746,657],{"class":747},"swJcz",[348,749,750],{"class":656},"data",[348,752,700],{"class":747},[348,754,703],{"class":385},[348,756,757,760,762],{"class":350,"line":457},[348,758,759],{"class":385},"}",[348,761,700],{"class":656},[348,763,703],{"class":385},[348,765,766,769,771,773,776,778,781,783,786,789,792,795,798,801,804,806,809,811,813],{"class":350,"line":477},[348,767,768],{"class":652},"headersFn",[348,770,657],{"class":656},[348,772,657],{"class":385},[348,774,775],{"class":662},"c",[348,777,402],{"class":385},[348,779,780],{"class":354}," CallContext",[348,782,666],{"class":385},[348,784,785],{"class":385}," {",[348,787,788],{"class":662},"headers",[348,790,791],{"class":385},"}:",[348,793,794],{"class":354}," HeadersSubset",[348,796,797],{"class":385},"\u003C",[348,799,800],{"class":385},"'",[348,802,803],{"class":358},"auth",[348,805,800],{"class":385},[348,807,808],{"class":385},">):",[348,810,729],{"class":354},[348,812,682],{"class":395},[348,814,430],{"class":385},[348,816,817],{"class":350,"line":497},[348,818,819],{"class":646},"    \u002F\u002F do something\n",[348,821,822,824,826],{"class":350,"line":517},[348,823,759],{"class":385},[348,825,700],{"class":656},[348,827,703],{"class":385},[201,829,830],{},[632,831,832],{},"Function references with types:",[339,834,836],{"className":637,"code":835,"language":639,"meta":344,"style":344},"\u002F\u002F 2. Function references with proper types\nfunction validHandler(ctx, name: string): string {\n    return `hello ${name}`;\n}\nconst validArrowHandler = (ctx, name: string): string => `hello ${name}`;\nroute(validHandler);\nroute(validArrowHandler);\n",[205,837,838,843,869,887,891,933,942],{"__ignoreMap":344},[348,839,840],{"class":350,"line":351},[348,841,842],{"class":646},"\u002F\u002F 2. Function references with proper types\n",[348,844,845,848,851,853,855,857,859,861,863,865,867],{"class":350,"line":389},[348,846,847],{"class":395},"function",[348,849,850],{"class":652}," validHandler",[348,852,657],{"class":385},[348,854,663],{"class":662},[348,856,666],{"class":385},[348,858,669],{"class":662},[348,860,402],{"class":385},[348,862,674],{"class":354},[348,864,677],{"class":385},[348,866,674],{"class":354},[348,868,430],{"class":385},[348,870,871,875,877,879,881,883,885],{"class":350,"line":418},[348,872,874],{"class":873},"s7zQu","    return",[348,876,685],{"class":385},[348,878,688],{"class":358},[348,880,691],{"class":385},[348,882,694],{"class":656},[348,884,697],{"class":385},[348,886,703],{"class":385},[348,888,889],{"class":350,"line":433},[348,890,565],{"class":385},[348,892,893,896,899,902,905,907,909,911,913,915,917,919,921,923,925,927,929,931],{"class":350,"line":457},[348,894,895],{"class":395},"const",[348,897,898],{"class":656}," validArrowHandler ",[348,900,901],{"class":385},"=",[348,903,904],{"class":385}," (",[348,906,663],{"class":662},[348,908,666],{"class":385},[348,910,669],{"class":662},[348,912,402],{"class":385},[348,914,674],{"class":354},[348,916,677],{"class":385},[348,918,674],{"class":354},[348,920,682],{"class":395},[348,922,685],{"class":385},[348,924,688],{"class":358},[348,926,691],{"class":385},[348,928,694],{"class":656},[348,930,697],{"class":385},[348,932,703],{"class":385},[348,934,935,937,940],{"class":350,"line":477},[348,936,653],{"class":652},[348,938,939],{"class":656},"(validHandler)",[348,941,703],{"class":385},[348,943,944,946,949],{"class":350,"line":497},[348,945,653],{"class":652},[348,947,948],{"class":656},"(validArrowHandler)",[348,950,703],{"class":385},[201,952,953],{},[632,954,955],{},"Using type annotations:",[339,957,959],{"className":637,"code":958,"language":639,"meta":344,"style":344},"\u002F\u002F 3. Type annotations\nconst typedHandler: Handler = (ctx, name: string): string => `hello ${name}`;\nconst typedHeaderHandler: HeaderHandler = (c: CallContext, {headers}: HeadersSubset\u003C'auth'>): void => {\n    const token = headers.auth;\n    console.log(token);\n};\n",[205,960,961,966,1011,1059,1078,1095],{"__ignoreMap":344},[348,962,963],{"class":350,"line":351},[348,964,965],{"class":646},"\u002F\u002F 3. Type annotations\n",[348,967,968,970,973,975,978,981,983,985,987,989,991,993,995,997,999,1001,1003,1005,1007,1009],{"class":350,"line":389},[348,969,895],{"class":395},[348,971,972],{"class":656}," typedHandler",[348,974,402],{"class":385},[348,976,977],{"class":354}," Handler",[348,979,980],{"class":385}," =",[348,982,904],{"class":385},[348,984,663],{"class":662},[348,986,666],{"class":385},[348,988,669],{"class":662},[348,990,402],{"class":385},[348,992,674],{"class":354},[348,994,677],{"class":385},[348,996,674],{"class":354},[348,998,682],{"class":395},[348,1000,685],{"class":385},[348,1002,688],{"class":358},[348,1004,691],{"class":385},[348,1006,694],{"class":656},[348,1008,697],{"class":385},[348,1010,703],{"class":385},[348,1012,1013,1015,1018,1020,1023,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049,1051,1053,1055,1057],{"class":350,"line":418},[348,1014,895],{"class":395},[348,1016,1017],{"class":656}," typedHeaderHandler",[348,1019,402],{"class":385},[348,1021,1022],{"class":354}," HeaderHandler",[348,1024,980],{"class":385},[348,1026,904],{"class":385},[348,1028,775],{"class":662},[348,1030,402],{"class":385},[348,1032,780],{"class":354},[348,1034,666],{"class":385},[348,1036,785],{"class":385},[348,1038,788],{"class":662},[348,1040,791],{"class":385},[348,1042,794],{"class":354},[348,1044,797],{"class":385},[348,1046,800],{"class":385},[348,1048,803],{"class":358},[348,1050,800],{"class":385},[348,1052,808],{"class":385},[348,1054,729],{"class":354},[348,1056,682],{"class":395},[348,1058,430],{"class":385},[348,1060,1061,1064,1067,1069,1072,1074,1076],{"class":350,"line":433},[348,1062,1063],{"class":395},"    const",[348,1065,1066],{"class":656}," token",[348,1068,980],{"class":385},[348,1070,1071],{"class":656}," headers",[348,1073,741],{"class":385},[348,1075,803],{"class":656},[348,1077,703],{"class":385},[348,1079,1080,1082,1084,1086,1088,1091,1093],{"class":350,"line":457},[348,1081,738],{"class":656},[348,1083,741],{"class":385},[348,1085,744],{"class":652},[348,1087,657],{"class":747},[348,1089,1090],{"class":656},"token",[348,1092,700],{"class":747},[348,1094,703],{"class":385},[348,1096,1097],{"class":350,"line":477},[348,1098,1099],{"class":385},"};\n",[201,1101,1102],{},[632,1103,1104,1105,1108],{},"Using ",[205,1106,1107],{},"satisfies"," expressions:",[339,1110,1112],{"className":637,"code":1111,"language":639,"meta":344,"style":344},"\u002F\u002F 4. Satisfies expressions\nconst satisfiesHandler = ((ctx, name: string): string => `hello ${name}`) satisfies Handler;\nconst satisfiesHeaderHandler = ((c: CallContext, {headers}: HeadersSubset\u003C'auth'>): void => {\n    const token = headers.auth;\n    console.log(token);\n}) satisfies HeaderHandler;\n",[205,1113,1114,1119,1167,1212,1228,1244],{"__ignoreMap":344},[348,1115,1116],{"class":350,"line":351},[348,1117,1118],{"class":646},"\u002F\u002F 4. Satisfies expressions\n",[348,1120,1121,1123,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152,1154,1156,1158,1161,1163,1165],{"class":350,"line":389},[348,1122,895],{"class":395},[348,1124,1125],{"class":656}," satisfiesHandler ",[348,1127,901],{"class":385},[348,1129,904],{"class":656},[348,1131,657],{"class":385},[348,1133,663],{"class":662},[348,1135,666],{"class":385},[348,1137,669],{"class":662},[348,1139,402],{"class":385},[348,1141,674],{"class":354},[348,1143,677],{"class":385},[348,1145,674],{"class":354},[348,1147,682],{"class":395},[348,1149,685],{"class":385},[348,1151,688],{"class":358},[348,1153,691],{"class":385},[348,1155,694],{"class":656},[348,1157,697],{"class":385},[348,1159,1160],{"class":656},") ",[348,1162,1107],{"class":873},[348,1164,977],{"class":354},[348,1166,703],{"class":385},[348,1168,1169,1171,1174,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210],{"class":350,"line":418},[348,1170,895],{"class":395},[348,1172,1173],{"class":656}," satisfiesHeaderHandler ",[348,1175,901],{"class":385},[348,1177,904],{"class":656},[348,1179,657],{"class":385},[348,1181,775],{"class":662},[348,1183,402],{"class":385},[348,1185,780],{"class":354},[348,1187,666],{"class":385},[348,1189,785],{"class":385},[348,1191,788],{"class":662},[348,1193,791],{"class":385},[348,1195,794],{"class":354},[348,1197,797],{"class":385},[348,1199,800],{"class":385},[348,1201,803],{"class":358},[348,1203,800],{"class":385},[348,1205,808],{"class":385},[348,1207,729],{"class":354},[348,1209,682],{"class":395},[348,1211,430],{"class":385},[348,1213,1214,1216,1218,1220,1222,1224,1226],{"class":350,"line":433},[348,1215,1063],{"class":395},[348,1217,1066],{"class":656},[348,1219,980],{"class":385},[348,1221,1071],{"class":656},[348,1223,741],{"class":385},[348,1225,803],{"class":656},[348,1227,703],{"class":385},[348,1229,1230,1232,1234,1236,1238,1240,1242],{"class":350,"line":457},[348,1231,738],{"class":656},[348,1233,741],{"class":385},[348,1235,744],{"class":652},[348,1237,657],{"class":747},[348,1239,1090],{"class":656},[348,1241,700],{"class":747},[348,1243,703],{"class":385},[348,1245,1246,1248,1250,1252,1254],{"class":350,"line":477},[348,1247,759],{"class":385},[348,1249,1160],{"class":656},[348,1251,1107],{"class":873},[348,1253,1022],{"class":354},[348,1255,703],{"class":385},[201,1257,1258],{},[632,1259,1260],{},"Using JSDoc tags:",[339,1262,1264],{"className":637,"code":1263,"language":639,"meta":344,"style":344},"\u002F\u002F 5. JSDoc tags\n\u002F**\n * @mion:route\n *\u002F\nfunction routeWithJSDoc(ctx, name: string): string {\n    return `hello ${name}`;\n}\n\n\u002F**\n * @mion:middleFn\n *\u002F\nconst middleFnWithJSDoc = (ctx, data: number): void => {\n    console.log(data);\n};\n\n\u002F**\n * @mion:headersFn\n *\u002F\nfunction headersFnWithJSDoc(c: CallContext, {headers}: HeadersSubset\u003C'auth'>): void {\n    const token = headers.auth;\n    console.log(token);\n}\n",[205,1265,1266,1271,1276,1281,1286,1311,1327,1331,1337,1341,1346,1350,1380,1397,1402,1407,1412,1418,1423,1463,1480,1497],{"__ignoreMap":344},[348,1267,1268],{"class":350,"line":351},[348,1269,1270],{"class":646},"\u002F\u002F 5. JSDoc tags\n",[348,1272,1273],{"class":350,"line":389},[348,1274,1275],{"class":646},"\u002F**\n",[348,1277,1278],{"class":350,"line":418},[348,1279,1280],{"class":646}," * @mion:route\n",[348,1282,1283],{"class":350,"line":433},[348,1284,1285],{"class":646}," *\u002F\n",[348,1287,1288,1290,1293,1295,1297,1299,1301,1303,1305,1307,1309],{"class":350,"line":457},[348,1289,847],{"class":395},[348,1291,1292],{"class":652}," routeWithJSDoc",[348,1294,657],{"class":385},[348,1296,663],{"class":662},[348,1298,666],{"class":385},[348,1300,669],{"class":662},[348,1302,402],{"class":385},[348,1304,674],{"class":354},[348,1306,677],{"class":385},[348,1308,674],{"class":354},[348,1310,430],{"class":385},[348,1312,1313,1315,1317,1319,1321,1323,1325],{"class":350,"line":477},[348,1314,874],{"class":873},[348,1316,685],{"class":385},[348,1318,688],{"class":358},[348,1320,691],{"class":385},[348,1322,694],{"class":656},[348,1324,697],{"class":385},[348,1326,703],{"class":385},[348,1328,1329],{"class":350,"line":497},[348,1330,565],{"class":385},[348,1332,1333],{"class":350,"line":517},[348,1334,1336],{"emptyLinePlaceholder":1335},true,"\n",[348,1338,1339],{"class":350,"line":537},[348,1340,1275],{"class":646},[348,1342,1343],{"class":350,"line":556},[348,1344,1345],{"class":646}," * @mion:middleFn\n",[348,1347,1348],{"class":350,"line":562},[348,1349,1285],{"class":646},[348,1351,1353,1355,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378],{"class":350,"line":1352},12,[348,1354,895],{"class":395},[348,1356,1357],{"class":656}," middleFnWithJSDoc ",[348,1359,901],{"class":385},[348,1361,904],{"class":385},[348,1363,663],{"class":662},[348,1365,666],{"class":385},[348,1367,719],{"class":662},[348,1369,402],{"class":385},[348,1371,724],{"class":354},[348,1373,677],{"class":385},[348,1375,729],{"class":354},[348,1377,682],{"class":395},[348,1379,430],{"class":385},[348,1381,1383,1385,1387,1389,1391,1393,1395],{"class":350,"line":1382},13,[348,1384,738],{"class":656},[348,1386,741],{"class":385},[348,1388,744],{"class":652},[348,1390,657],{"class":747},[348,1392,750],{"class":656},[348,1394,700],{"class":747},[348,1396,703],{"class":385},[348,1398,1400],{"class":350,"line":1399},14,[348,1401,1099],{"class":385},[348,1403,1405],{"class":350,"line":1404},15,[348,1406,1336],{"emptyLinePlaceholder":1335},[348,1408,1410],{"class":350,"line":1409},16,[348,1411,1275],{"class":646},[348,1413,1415],{"class":350,"line":1414},17,[348,1416,1417],{"class":646}," * @mion:headersFn\n",[348,1419,1421],{"class":350,"line":1420},18,[348,1422,1285],{"class":646},[348,1424,1426,1428,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461],{"class":350,"line":1425},19,[348,1427,847],{"class":395},[348,1429,1430],{"class":652}," headersFnWithJSDoc",[348,1432,657],{"class":385},[348,1434,775],{"class":662},[348,1436,402],{"class":385},[348,1438,780],{"class":354},[348,1440,666],{"class":385},[348,1442,785],{"class":385},[348,1444,788],{"class":662},[348,1446,791],{"class":385},[348,1448,794],{"class":354},[348,1450,797],{"class":385},[348,1452,800],{"class":385},[348,1454,803],{"class":358},[348,1456,800],{"class":385},[348,1458,808],{"class":385},[348,1460,729],{"class":354},[348,1462,430],{"class":385},[348,1464,1466,1468,1470,1472,1474,1476,1478],{"class":350,"line":1465},20,[348,1467,1063],{"class":395},[348,1469,1066],{"class":656},[348,1471,980],{"class":385},[348,1473,1071],{"class":656},[348,1475,741],{"class":385},[348,1477,803],{"class":656},[348,1479,703],{"class":385},[348,1481,1483,1485,1487,1489,1491,1493,1495],{"class":350,"line":1482},21,[348,1484,738],{"class":656},[348,1486,741],{"class":385},[348,1488,744],{"class":652},[348,1490,657],{"class":747},[348,1492,1090],{"class":656},[348,1494,700],{"class":747},[348,1496,703],{"class":385},[348,1498,1500],{"class":350,"line":1499},22,[348,1501,565],{"class":385},[618,1503,1505],{"id":1504},"invalid-examples","❌ Invalid Examples",[201,1507,1508],{},[632,1509,1510],{},"Missing types in inline handlers:",[339,1512,1514],{"className":637,"code":1513,"language":639,"meta":344,"style":344},"\u002F\u002F 1. Direct inline handlers missing types\nroute((ctx, name) => `hello ${name}`); \u002F\u002F Missing both param type and return type\nmiddleFn((ctx, data: number) => {\n    console.log(data);\n}); \u002F\u002F Missing return type\nheadersFn((c: CallContext, [token]): void => {\n    \u002F\u002F do something\n}); \u002F\u002F Missing param type\n",[205,1515,1516,1521,1557,1581,1597,1608,1637,1641],{"__ignoreMap":344},[348,1517,1518],{"class":350,"line":351},[348,1519,1520],{"class":646},"\u002F\u002F 1. Direct inline handlers missing types\n",[348,1522,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1554],{"class":350,"line":389},[348,1524,653],{"class":652},[348,1526,657],{"class":656},[348,1528,657],{"class":385},[348,1530,663],{"class":662},[348,1532,666],{"class":385},[348,1534,669],{"class":662},[348,1536,700],{"class":385},[348,1538,682],{"class":395},[348,1540,685],{"class":385},[348,1542,688],{"class":358},[348,1544,691],{"class":385},[348,1546,694],{"class":656},[348,1548,697],{"class":385},[348,1550,700],{"class":656},[348,1552,1553],{"class":385},";",[348,1555,1556],{"class":646}," \u002F\u002F Missing both param type and return type\n",[348,1558,1559,1561,1563,1565,1567,1569,1571,1573,1575,1577,1579],{"class":350,"line":418},[348,1560,708],{"class":652},[348,1562,657],{"class":656},[348,1564,657],{"class":385},[348,1566,663],{"class":662},[348,1568,666],{"class":385},[348,1570,719],{"class":662},[348,1572,402],{"class":385},[348,1574,724],{"class":354},[348,1576,700],{"class":385},[348,1578,682],{"class":395},[348,1580,430],{"class":385},[348,1582,1583,1585,1587,1589,1591,1593,1595],{"class":350,"line":433},[348,1584,738],{"class":656},[348,1586,741],{"class":385},[348,1588,744],{"class":652},[348,1590,657],{"class":747},[348,1592,750],{"class":656},[348,1594,700],{"class":747},[348,1596,703],{"class":385},[348,1598,1599,1601,1603,1605],{"class":350,"line":457},[348,1600,759],{"class":385},[348,1602,700],{"class":656},[348,1604,1553],{"class":385},[348,1606,1607],{"class":646}," \u002F\u002F Missing return type\n",[348,1609,1610,1612,1614,1616,1618,1620,1622,1624,1626,1628,1631,1633,1635],{"class":350,"line":477},[348,1611,768],{"class":652},[348,1613,657],{"class":656},[348,1615,657],{"class":385},[348,1617,775],{"class":662},[348,1619,402],{"class":385},[348,1621,780],{"class":354},[348,1623,666],{"class":385},[348,1625,405],{"class":385},[348,1627,1090],{"class":662},[348,1629,1630],{"class":385},"]):",[348,1632,729],{"class":354},[348,1634,682],{"class":395},[348,1636,430],{"class":385},[348,1638,1639],{"class":350,"line":497},[348,1640,819],{"class":646},[348,1642,1643,1645,1647,1649],{"class":350,"line":517},[348,1644,759],{"class":385},[348,1646,700],{"class":656},[348,1648,1553],{"class":385},[348,1650,1651],{"class":646}," \u002F\u002F Missing param type\n",[201,1653,1654],{},[632,1655,1656],{},"Missing types in function references:",[339,1658,1660],{"className":637,"code":1659,"language":639,"meta":344,"style":344},"\u002F\u002F 2. Function references missing types\nfunction invalidHandler(ctx, name) {\n    return `hello ${name}`;\n}\nconst invalidArrowHandler = (ctx, name) => `hello ${name}`;\nroute(invalidHandler); \u002F\u002F Should error: missing both types\nroute(invalidArrowHandler); \u002F\u002F Should error: missing both types\n",[205,1661,1662,1667,1686,1702,1706,1739,1751],{"__ignoreMap":344},[348,1663,1664],{"class":350,"line":351},[348,1665,1666],{"class":646},"\u002F\u002F 2. Function references missing types\n",[348,1668,1669,1671,1674,1676,1678,1680,1682,1684],{"class":350,"line":389},[348,1670,847],{"class":395},[348,1672,1673],{"class":652}," invalidHandler",[348,1675,657],{"class":385},[348,1677,663],{"class":662},[348,1679,666],{"class":385},[348,1681,669],{"class":662},[348,1683,700],{"class":385},[348,1685,430],{"class":385},[348,1687,1688,1690,1692,1694,1696,1698,1700],{"class":350,"line":418},[348,1689,874],{"class":873},[348,1691,685],{"class":385},[348,1693,688],{"class":358},[348,1695,691],{"class":385},[348,1697,694],{"class":656},[348,1699,697],{"class":385},[348,1701,703],{"class":385},[348,1703,1704],{"class":350,"line":433},[348,1705,565],{"class":385},[348,1707,1708,1710,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737],{"class":350,"line":457},[348,1709,895],{"class":395},[348,1711,1712],{"class":656}," invalidArrowHandler ",[348,1714,901],{"class":385},[348,1716,904],{"class":385},[348,1718,663],{"class":662},[348,1720,666],{"class":385},[348,1722,669],{"class":662},[348,1724,700],{"class":385},[348,1726,682],{"class":395},[348,1728,685],{"class":385},[348,1730,688],{"class":358},[348,1732,691],{"class":385},[348,1734,694],{"class":656},[348,1736,697],{"class":385},[348,1738,703],{"class":385},[348,1740,1741,1743,1746,1748],{"class":350,"line":477},[348,1742,653],{"class":652},[348,1744,1745],{"class":656},"(invalidHandler)",[348,1747,1553],{"class":385},[348,1749,1750],{"class":646}," \u002F\u002F Should error: missing both types\n",[348,1752,1753,1755,1758,1760],{"class":350,"line":497},[348,1754,653],{"class":652},[348,1756,1757],{"class":656},"(invalidArrowHandler)",[348,1759,1553],{"class":385},[348,1761,1750],{"class":646},[1763,1764],"hr",{},[609,1766,1768],{"id":1767},"mionjsno-type-imports",[205,1769,462],{},[201,1771,1772,1773,1776,1777,1780],{},"Prevents using type-only imports (",[205,1774,1775],{},"import type { X }"," or ",[205,1778,1779],{},"import { type X }",") for types that are used in route\u002FmiddleFn parameters or return types.",[618,1782,621],{"id":1783},"why-is-this-important-1",[201,1785,1786,1787,1790],{},"Type-only imports are completely erased at compile time. When mion needs to generate validation and serialization functions at runtime, it requires the type metadata to be present. If you use ",[205,1788,1789],{},"import type",", the type information is not available at runtime, and mion cannot properly validate or serialize the data.",[618,1792,1794],{"id":1793},"valid-example","✅ Valid Example",[339,1796,1798],{"className":637,"code":1797,"language":639,"meta":344,"style":344},"\u002F\u002F ✅ CORRECT: Regular import - types are available at runtime\nimport {User, Product} from '.\u002Ftypes.ts';\nimport {route, middleFn} from '@mionjs\u002Frouter';\n\n\u002F\u002F Types imported without 'type' keyword work correctly with mion\nconst getUser = route((ctx, id: number): User => {\n    return {id, name: 'John', email: 'john@example.com'};\n});\n\nconst createProduct = route((ctx, product: Product): Product => {\n    return product;\n});\n\nconst logUser = middleFn((ctx, user: User): void => {\n    console.log(user.name);\n});\n",[205,1799,1800,1805,1835,1861,1865,1870,1906,1944,1952,1956,1990,1998,2006,2010,2044,2065],{"__ignoreMap":344},[348,1801,1802],{"class":350,"line":351},[348,1803,1804],{"class":646},"\u002F\u002F ✅ CORRECT: Regular import - types are available at runtime\n",[348,1806,1807,1810,1812,1815,1817,1820,1822,1825,1828,1831,1833],{"class":350,"line":389},[348,1808,1809],{"class":873},"import",[348,1811,785],{"class":385},[348,1813,1814],{"class":656},"User",[348,1816,666],{"class":385},[348,1818,1819],{"class":656}," Product",[348,1821,759],{"class":385},[348,1823,1824],{"class":873}," from",[348,1826,1827],{"class":385}," '",[348,1829,1830],{"class":358},".\u002Ftypes.ts",[348,1832,800],{"class":385},[348,1834,703],{"class":385},[348,1836,1837,1839,1841,1843,1845,1848,1850,1852,1854,1857,1859],{"class":350,"line":418},[348,1838,1809],{"class":873},[348,1840,785],{"class":385},[348,1842,653],{"class":656},[348,1844,666],{"class":385},[348,1846,1847],{"class":656}," middleFn",[348,1849,759],{"class":385},[348,1851,1824],{"class":873},[348,1853,1827],{"class":385},[348,1855,1856],{"class":358},"@mionjs\u002Frouter",[348,1858,800],{"class":385},[348,1860,703],{"class":385},[348,1862,1863],{"class":350,"line":433},[348,1864,1336],{"emptyLinePlaceholder":1335},[348,1866,1867],{"class":350,"line":457},[348,1868,1869],{"class":646},"\u002F\u002F Types imported without 'type' keyword work correctly with mion\n",[348,1871,1872,1874,1877,1879,1882,1884,1886,1888,1890,1893,1895,1897,1899,1902,1904],{"class":350,"line":477},[348,1873,895],{"class":395},[348,1875,1876],{"class":656}," getUser ",[348,1878,901],{"class":385},[348,1880,1881],{"class":652}," route",[348,1883,657],{"class":656},[348,1885,657],{"class":385},[348,1887,663],{"class":662},[348,1889,666],{"class":385},[348,1891,1892],{"class":662}," id",[348,1894,402],{"class":385},[348,1896,724],{"class":354},[348,1898,677],{"class":385},[348,1900,1901],{"class":354}," User",[348,1903,682],{"class":395},[348,1905,430],{"class":385},[348,1907,1908,1910,1912,1915,1917,1919,1921,1923,1926,1928,1930,1933,1935,1937,1940,1942],{"class":350,"line":497},[348,1909,874],{"class":873},[348,1911,785],{"class":385},[348,1913,1914],{"class":656},"id",[348,1916,666],{"class":385},[348,1918,669],{"class":747},[348,1920,402],{"class":385},[348,1922,1827],{"class":385},[348,1924,1925],{"class":358},"John",[348,1927,800],{"class":385},[348,1929,666],{"class":385},[348,1931,1932],{"class":747}," email",[348,1934,402],{"class":385},[348,1936,1827],{"class":385},[348,1938,1939],{"class":358},"john@example.com",[348,1941,800],{"class":385},[348,1943,1099],{"class":385},[348,1945,1946,1948,1950],{"class":350,"line":517},[348,1947,759],{"class":385},[348,1949,700],{"class":656},[348,1951,703],{"class":385},[348,1953,1954],{"class":350,"line":537},[348,1955,1336],{"emptyLinePlaceholder":1335},[348,1957,1958,1960,1963,1965,1967,1969,1971,1973,1975,1978,1980,1982,1984,1986,1988],{"class":350,"line":556},[348,1959,895],{"class":395},[348,1961,1962],{"class":656}," createProduct ",[348,1964,901],{"class":385},[348,1966,1881],{"class":652},[348,1968,657],{"class":656},[348,1970,657],{"class":385},[348,1972,663],{"class":662},[348,1974,666],{"class":385},[348,1976,1977],{"class":662}," product",[348,1979,402],{"class":385},[348,1981,1819],{"class":354},[348,1983,677],{"class":385},[348,1985,1819],{"class":354},[348,1987,682],{"class":395},[348,1989,430],{"class":385},[348,1991,1992,1994,1996],{"class":350,"line":562},[348,1993,874],{"class":873},[348,1995,1977],{"class":656},[348,1997,703],{"class":385},[348,1999,2000,2002,2004],{"class":350,"line":1352},[348,2001,759],{"class":385},[348,2003,700],{"class":656},[348,2005,703],{"class":385},[348,2007,2008],{"class":350,"line":1382},[348,2009,1336],{"emptyLinePlaceholder":1335},[348,2011,2012,2014,2017,2019,2021,2023,2025,2027,2029,2032,2034,2036,2038,2040,2042],{"class":350,"line":1399},[348,2013,895],{"class":395},[348,2015,2016],{"class":656}," logUser ",[348,2018,901],{"class":385},[348,2020,1847],{"class":652},[348,2022,657],{"class":656},[348,2024,657],{"class":385},[348,2026,663],{"class":662},[348,2028,666],{"class":385},[348,2030,2031],{"class":662}," user",[348,2033,402],{"class":385},[348,2035,1901],{"class":354},[348,2037,677],{"class":385},[348,2039,729],{"class":354},[348,2041,682],{"class":395},[348,2043,430],{"class":385},[348,2045,2046,2048,2050,2052,2054,2057,2059,2061,2063],{"class":350,"line":1404},[348,2047,738],{"class":656},[348,2049,741],{"class":385},[348,2051,744],{"class":652},[348,2053,657],{"class":747},[348,2055,2056],{"class":656},"user",[348,2058,741],{"class":385},[348,2060,694],{"class":656},[348,2062,700],{"class":747},[348,2064,703],{"class":385},[348,2066,2067,2069,2071],{"class":350,"line":1409},[348,2068,759],{"class":385},[348,2070,700],{"class":656},[348,2072,703],{"class":385},[618,2074,2076],{"id":2075},"invalid-example","❌ Invalid Example",[339,2078,2080],{"className":637,"code":2079,"language":639,"meta":344,"style":344},"\u002F\u002F ❌ WRONG: Type-only import - types are erased at runtime\nimport type {User, Product} from '.\u002Ftypes.ts';\nimport {route, middleFn} from '@mionjs\u002Frouter';\n\n\u002F\u002F Types imported with 'type' keyword are erased at runtime\n\u002F\u002F mion cannot generate validation\u002Fserialization functions for them\nconst getUser = route((ctx, id: number): User => {\n    return {id, name: 'John', email: 'john@example.com'};\n});\n\nconst createProduct = route((ctx, product: Product): Product => {\n    return product;\n});\n\nconst logUser = middleFn((ctx, user: User): void => {\n    console.log(user.name);\n});\n",[205,2081,2082,2087,2114,2138,2142,2147,2152,2184,2218,2226,2230,2262,2270,2278,2282,2314,2334],{"__ignoreMap":344},[348,2083,2084],{"class":350,"line":351},[348,2085,2086],{"class":646},"\u002F\u002F ❌ WRONG: Type-only import - types are erased at runtime\n",[348,2088,2089,2091,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112],{"class":350,"line":389},[348,2090,1809],{"class":873},[348,2092,2093],{"class":873}," type",[348,2095,785],{"class":385},[348,2097,1814],{"class":656},[348,2099,666],{"class":385},[348,2101,1819],{"class":656},[348,2103,759],{"class":385},[348,2105,1824],{"class":873},[348,2107,1827],{"class":385},[348,2109,1830],{"class":358},[348,2111,800],{"class":385},[348,2113,703],{"class":385},[348,2115,2116,2118,2120,2122,2124,2126,2128,2130,2132,2134,2136],{"class":350,"line":418},[348,2117,1809],{"class":873},[348,2119,785],{"class":385},[348,2121,653],{"class":656},[348,2123,666],{"class":385},[348,2125,1847],{"class":656},[348,2127,759],{"class":385},[348,2129,1824],{"class":873},[348,2131,1827],{"class":385},[348,2133,1856],{"class":358},[348,2135,800],{"class":385},[348,2137,703],{"class":385},[348,2139,2140],{"class":350,"line":433},[348,2141,1336],{"emptyLinePlaceholder":1335},[348,2143,2144],{"class":350,"line":457},[348,2145,2146],{"class":646},"\u002F\u002F Types imported with 'type' keyword are erased at runtime\n",[348,2148,2149],{"class":350,"line":477},[348,2150,2151],{"class":646},"\u002F\u002F mion cannot generate validation\u002Fserialization functions for them\n",[348,2153,2154,2156,2158,2160,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182],{"class":350,"line":497},[348,2155,895],{"class":395},[348,2157,1876],{"class":656},[348,2159,901],{"class":385},[348,2161,1881],{"class":652},[348,2163,657],{"class":656},[348,2165,657],{"class":385},[348,2167,663],{"class":662},[348,2169,666],{"class":385},[348,2171,1892],{"class":662},[348,2173,402],{"class":385},[348,2175,724],{"class":354},[348,2177,677],{"class":385},[348,2179,1901],{"class":354},[348,2181,682],{"class":395},[348,2183,430],{"class":385},[348,2185,2186,2188,2190,2192,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216],{"class":350,"line":517},[348,2187,874],{"class":873},[348,2189,785],{"class":385},[348,2191,1914],{"class":656},[348,2193,666],{"class":385},[348,2195,669],{"class":747},[348,2197,402],{"class":385},[348,2199,1827],{"class":385},[348,2201,1925],{"class":358},[348,2203,800],{"class":385},[348,2205,666],{"class":385},[348,2207,1932],{"class":747},[348,2209,402],{"class":385},[348,2211,1827],{"class":385},[348,2213,1939],{"class":358},[348,2215,800],{"class":385},[348,2217,1099],{"class":385},[348,2219,2220,2222,2224],{"class":350,"line":537},[348,2221,759],{"class":385},[348,2223,700],{"class":656},[348,2225,703],{"class":385},[348,2227,2228],{"class":350,"line":556},[348,2229,1336],{"emptyLinePlaceholder":1335},[348,2231,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260],{"class":350,"line":562},[348,2233,895],{"class":395},[348,2235,1962],{"class":656},[348,2237,901],{"class":385},[348,2239,1881],{"class":652},[348,2241,657],{"class":656},[348,2243,657],{"class":385},[348,2245,663],{"class":662},[348,2247,666],{"class":385},[348,2249,1977],{"class":662},[348,2251,402],{"class":385},[348,2253,1819],{"class":354},[348,2255,677],{"class":385},[348,2257,1819],{"class":354},[348,2259,682],{"class":395},[348,2261,430],{"class":385},[348,2263,2264,2266,2268],{"class":350,"line":1352},[348,2265,874],{"class":873},[348,2267,1977],{"class":656},[348,2269,703],{"class":385},[348,2271,2272,2274,2276],{"class":350,"line":1382},[348,2273,759],{"class":385},[348,2275,700],{"class":656},[348,2277,703],{"class":385},[348,2279,2280],{"class":350,"line":1399},[348,2281,1336],{"emptyLinePlaceholder":1335},[348,2283,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302,2304,2306,2308,2310,2312],{"class":350,"line":1404},[348,2285,895],{"class":395},[348,2287,2016],{"class":656},[348,2289,901],{"class":385},[348,2291,1847],{"class":652},[348,2293,657],{"class":656},[348,2295,657],{"class":385},[348,2297,663],{"class":662},[348,2299,666],{"class":385},[348,2301,2031],{"class":662},[348,2303,402],{"class":385},[348,2305,1901],{"class":354},[348,2307,677],{"class":385},[348,2309,729],{"class":354},[348,2311,682],{"class":395},[348,2313,430],{"class":385},[348,2315,2316,2318,2320,2322,2324,2326,2328,2330,2332],{"class":350,"line":1409},[348,2317,738],{"class":656},[348,2319,741],{"class":385},[348,2321,744],{"class":652},[348,2323,657],{"class":747},[348,2325,2056],{"class":656},[348,2327,741],{"class":385},[348,2329,694],{"class":656},[348,2331,700],{"class":747},[348,2333,703],{"class":385},[348,2335,2336,2338,2340],{"class":350,"line":1414},[348,2337,759],{"class":385},[348,2339,700],{"class":656},[348,2341,703],{"class":385},[1763,2343],{},[609,2345,2347],{"id":2346},"mionjsno-typeof-runtype",[205,2348,502],{},[201,2350,2351,2352,2354,2355,2357],{},"Prevents using ",[205,2353,274],{}," when generating a RunType. Using ",[205,2356,274],{}," with runtime values can lead to incorrect type inference.",[618,2359,621],{"id":2360},"why-is-this-important-2",[201,2362,2363,2364,2366],{},"When you use ",[205,2365,274],{}," with a runtime value, TypeScript infers the type from the current value, which may not represent all possible values. This can lead to validation that's too strict or serialization that doesn't handle all cases.",[618,2368,1794],{"id":2369},"valid-example-1",[339,2371,2373],{"className":637,"code":2372,"language":639,"meta":344,"style":344},"import {runType} from '@mionjs\u002Frun-types';\n\n\u002F\u002F Define the type explicitly\ntype User = {\n    id: string;\n    name: string;\n    email: string;\n};\n\n\u002F\u002F Use the explicit type\nconst userRunType = runType\u003CUser>();\n",[205,2374,2375,2397,2401,2406,2417,2428,2439,2450,2454,2458,2463],{"__ignoreMap":344},[348,2376,2377,2379,2381,2384,2386,2388,2390,2393,2395],{"class":350,"line":351},[348,2378,1809],{"class":873},[348,2380,785],{"class":385},[348,2382,2383],{"class":656},"runType",[348,2385,759],{"class":385},[348,2387,1824],{"class":873},[348,2389,1827],{"class":385},[348,2391,2392],{"class":358},"@mionjs\u002Frun-types",[348,2394,800],{"class":385},[348,2396,703],{"class":385},[348,2398,2399],{"class":350,"line":389},[348,2400,1336],{"emptyLinePlaceholder":1335},[348,2402,2403],{"class":350,"line":418},[348,2404,2405],{"class":646},"\u002F\u002F Define the type explicitly\n",[348,2407,2408,2411,2413,2415],{"class":350,"line":433},[348,2409,2410],{"class":395},"type",[348,2412,1901],{"class":354},[348,2414,980],{"class":385},[348,2416,430],{"class":385},[348,2418,2419,2422,2424,2426],{"class":350,"line":457},[348,2420,2421],{"class":747},"    id",[348,2423,402],{"class":385},[348,2425,674],{"class":354},[348,2427,703],{"class":385},[348,2429,2430,2433,2435,2437],{"class":350,"line":477},[348,2431,2432],{"class":747},"    name",[348,2434,402],{"class":385},[348,2436,674],{"class":354},[348,2438,703],{"class":385},[348,2440,2441,2444,2446,2448],{"class":350,"line":497},[348,2442,2443],{"class":747},"    email",[348,2445,402],{"class":385},[348,2447,674],{"class":354},[348,2449,703],{"class":385},[348,2451,2452],{"class":350,"line":517},[348,2453,1099],{"class":385},[348,2455,2456],{"class":350,"line":537},[348,2457,1336],{"emptyLinePlaceholder":1335},[348,2459,2460],{"class":350,"line":556},[348,2461,2462],{"class":646},"\u002F\u002F Use the explicit type\n",[348,2464,2465,2467,2470,2472,2475,2477,2479,2482,2485],{"class":350,"line":562},[348,2466,895],{"class":395},[348,2468,2469],{"class":656}," userRunType ",[348,2471,901],{"class":385},[348,2473,2474],{"class":652}," runType",[348,2476,797],{"class":385},[348,2478,1814],{"class":354},[348,2480,2481],{"class":385},">",[348,2483,2484],{"class":656},"()",[348,2486,703],{"class":385},[618,2488,2076],{"id":2489},"invalid-example-1",[339,2491,2493],{"className":637,"code":2492,"language":639,"meta":344,"style":344},"import {runType} from '@mionjs\u002Frun-types';\n\n\u002F\u002F Don't use typeof with runtime values\nconst user = {id: '1', name: 'John', email: 'john@example.com'};\nconst userRunType = runType\u003Ctypeof user>(); \u002F\u002F ❌ Error: Don't use typeof\n",[205,2494,2495,2515,2519,2524,2572],{"__ignoreMap":344},[348,2496,2497,2499,2501,2503,2505,2507,2509,2511,2513],{"class":350,"line":351},[348,2498,1809],{"class":873},[348,2500,785],{"class":385},[348,2502,2383],{"class":656},[348,2504,759],{"class":385},[348,2506,1824],{"class":873},[348,2508,1827],{"class":385},[348,2510,2392],{"class":358},[348,2512,800],{"class":385},[348,2514,703],{"class":385},[348,2516,2517],{"class":350,"line":389},[348,2518,1336],{"emptyLinePlaceholder":1335},[348,2520,2521],{"class":350,"line":418},[348,2522,2523],{"class":646},"\u002F\u002F Don't use typeof with runtime values\n",[348,2525,2526,2528,2531,2533,2535,2537,2539,2541,2544,2546,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570],{"class":350,"line":433},[348,2527,895],{"class":395},[348,2529,2530],{"class":656}," user ",[348,2532,901],{"class":385},[348,2534,785],{"class":385},[348,2536,1914],{"class":747},[348,2538,402],{"class":385},[348,2540,1827],{"class":385},[348,2542,2543],{"class":358},"1",[348,2545,800],{"class":385},[348,2547,666],{"class":385},[348,2549,669],{"class":747},[348,2551,402],{"class":385},[348,2553,1827],{"class":385},[348,2555,1925],{"class":358},[348,2557,800],{"class":385},[348,2559,666],{"class":385},[348,2561,1932],{"class":747},[348,2563,402],{"class":385},[348,2565,1827],{"class":385},[348,2567,1939],{"class":358},[348,2569,800],{"class":385},[348,2571,1099],{"class":385},[348,2573,2574,2576,2578,2580,2582,2585,2587,2589,2591,2593],{"class":350,"line":457},[348,2575,895],{"class":395},[348,2577,2469],{"class":656},[348,2579,901],{"class":385},[348,2581,2474],{"class":652},[348,2583,2584],{"class":385},"\u003Ctypeof",[348,2586,2031],{"class":656},[348,2588,2481],{"class":385},[348,2590,2484],{"class":656},[348,2592,1553],{"class":385},[348,2594,2595],{"class":646}," \u002F\u002F ❌ Error: Don't use typeof\n",[1763,2597],{},[609,2599,2601],{"id":2600},"mionjsno-unreachable-union-types",[205,2602,482],{},[201,2604,2605],{},"Detects union types where some members can never be matched because a less specific type appears earlier in the union. This is particularly important for mion because it affects how data is validated and deserialized.",[618,2607,621],{"id":2608},"why-is-this-important-3",[201,2610,2611],{},"When mion deserializes incoming JSON data, it tries to match against union types in order. If a less specific type (with fewer properties) comes before a more specific type (with more properties), the more specific type will never be matched because the less specific type will always match first.",[618,2613,628],{"id":2614},"valid-examples-1",[201,2616,2617],{},[632,2618,2619],{},"Union types with proper order (most specific first):",[339,2621,2623],{"className":637,"code":2622,"language":639,"meta":344,"style":344},"\u002F\u002F 6. Union types with proper order (more specific types first)\ntype UserResponse = {id: string; name: string; email: string} | {id: string; name: string} | {id: string};\nroute((ctx): UserResponse => ({id: '1', name: 'John', email: 'john@example.com'}));\n\n\u002F\u002F 7. Union types in parameters with proper order\ntype UserInput = {id: string; name: string; email: string} | {id: string; name: string} | {id: string};\nroute((ctx, user: UserInput): string => user.id);\n",[205,2624,2625,2630,2698,2760,2764,2769,2836],{"__ignoreMap":344},[348,2626,2627],{"class":350,"line":351},[348,2628,2629],{"class":646},"\u002F\u002F 6. Union types with proper order (more specific types first)\n",[348,2631,2632,2634,2637,2639,2641,2643,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2668,2670,2672,2674,2676,2678,2680,2682,2684,2686,2688,2690,2692,2694,2696],{"class":350,"line":389},[348,2633,2410],{"class":395},[348,2635,2636],{"class":354}," UserResponse",[348,2638,980],{"class":385},[348,2640,785],{"class":385},[348,2642,1914],{"class":747},[348,2644,402],{"class":385},[348,2646,674],{"class":354},[348,2648,1553],{"class":385},[348,2650,669],{"class":747},[348,2652,402],{"class":385},[348,2654,674],{"class":354},[348,2656,1553],{"class":385},[348,2658,1932],{"class":747},[348,2660,402],{"class":385},[348,2662,674],{"class":354},[348,2664,759],{"class":385},[348,2666,2667],{"class":385}," |",[348,2669,785],{"class":385},[348,2671,1914],{"class":747},[348,2673,402],{"class":385},[348,2675,674],{"class":354},[348,2677,1553],{"class":385},[348,2679,669],{"class":747},[348,2681,402],{"class":385},[348,2683,674],{"class":354},[348,2685,759],{"class":385},[348,2687,2667],{"class":385},[348,2689,785],{"class":385},[348,2691,1914],{"class":747},[348,2693,402],{"class":385},[348,2695,674],{"class":354},[348,2697,1099],{"class":385},[348,2699,2700,2702,2704,2706,2708,2710,2712,2714,2716,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2758],{"class":350,"line":418},[348,2701,653],{"class":652},[348,2703,657],{"class":656},[348,2705,657],{"class":385},[348,2707,663],{"class":662},[348,2709,677],{"class":385},[348,2711,2636],{"class":354},[348,2713,682],{"class":395},[348,2715,904],{"class":656},[348,2717,2718],{"class":385},"{",[348,2720,1914],{"class":747},[348,2722,402],{"class":385},[348,2724,1827],{"class":385},[348,2726,2543],{"class":358},[348,2728,800],{"class":385},[348,2730,666],{"class":385},[348,2732,669],{"class":747},[348,2734,402],{"class":385},[348,2736,1827],{"class":385},[348,2738,1925],{"class":358},[348,2740,800],{"class":385},[348,2742,666],{"class":385},[348,2744,1932],{"class":747},[348,2746,402],{"class":385},[348,2748,1827],{"class":385},[348,2750,1939],{"class":358},[348,2752,800],{"class":385},[348,2754,759],{"class":385},[348,2756,2757],{"class":656},"))",[348,2759,703],{"class":385},[348,2761,2762],{"class":350,"line":433},[348,2763,1336],{"emptyLinePlaceholder":1335},[348,2765,2766],{"class":350,"line":457},[348,2767,2768],{"class":646},"\u002F\u002F 7. Union types in parameters with proper order\n",[348,2770,2771,2773,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802,2804,2806,2808,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,2834],{"class":350,"line":477},[348,2772,2410],{"class":395},[348,2774,2775],{"class":354}," UserInput",[348,2777,980],{"class":385},[348,2779,785],{"class":385},[348,2781,1914],{"class":747},[348,2783,402],{"class":385},[348,2785,674],{"class":354},[348,2787,1553],{"class":385},[348,2789,669],{"class":747},[348,2791,402],{"class":385},[348,2793,674],{"class":354},[348,2795,1553],{"class":385},[348,2797,1932],{"class":747},[348,2799,402],{"class":385},[348,2801,674],{"class":354},[348,2803,759],{"class":385},[348,2805,2667],{"class":385},[348,2807,785],{"class":385},[348,2809,1914],{"class":747},[348,2811,402],{"class":385},[348,2813,674],{"class":354},[348,2815,1553],{"class":385},[348,2817,669],{"class":747},[348,2819,402],{"class":385},[348,2821,674],{"class":354},[348,2823,759],{"class":385},[348,2825,2667],{"class":385},[348,2827,785],{"class":385},[348,2829,1914],{"class":747},[348,2831,402],{"class":385},[348,2833,674],{"class":354},[348,2835,1099],{"class":385},[348,2837,2838,2840,2842,2844,2846,2848,2850,2852,2854,2856,2858,2860,2862,2864,2867],{"class":350,"line":497},[348,2839,653],{"class":652},[348,2841,657],{"class":656},[348,2843,657],{"class":385},[348,2845,663],{"class":662},[348,2847,666],{"class":385},[348,2849,2031],{"class":662},[348,2851,402],{"class":385},[348,2853,2775],{"class":354},[348,2855,677],{"class":385},[348,2857,674],{"class":354},[348,2859,682],{"class":395},[348,2861,2031],{"class":656},[348,2863,741],{"class":385},[348,2865,2866],{"class":656},"id)",[348,2868,703],{"class":385},[201,2870,2871],{},[632,2872,2873],{},"Union types with distinct properties:",[339,2875,2877],{"className":637,"code":2876,"language":639,"meta":344,"style":344},"\u002F\u002F 8. Union types with distinct properties (no overlap)\ntype Action = {type: 'create'; data: string} | {type: 'update'; id: string} | {type: 'delete'; id: string};\nroute((ctx): Action => ({type: 'create', data: 'test'}));\n\n\u002F\u002F 9. Return objects matching single union type (no mixed properties)\ntype Result = {success: true; data: string} | {success: false; error: string};\nroute((ctx): Result => ({success: true, data: 'ok'}));\nroute((ctx): Result => ({success: false, error: 'failed'}));\n",[205,2878,2879,2884,2966,3015,3019,3024,3075,3121],{"__ignoreMap":344},[348,2880,2881],{"class":350,"line":351},[348,2882,2883],{"class":646},"\u002F\u002F 8. Union types with distinct properties (no overlap)\n",[348,2885,2886,2888,2891,2893,2895,2897,2899,2901,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2929,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951,2954,2956,2958,2960,2962,2964],{"class":350,"line":389},[348,2887,2410],{"class":395},[348,2889,2890],{"class":354}," Action",[348,2892,980],{"class":385},[348,2894,785],{"class":385},[348,2896,2410],{"class":747},[348,2898,402],{"class":385},[348,2900,1827],{"class":385},[348,2902,2903],{"class":358},"create",[348,2905,800],{"class":385},[348,2907,1553],{"class":385},[348,2909,719],{"class":747},[348,2911,402],{"class":385},[348,2913,674],{"class":354},[348,2915,759],{"class":385},[348,2917,2667],{"class":385},[348,2919,785],{"class":385},[348,2921,2410],{"class":747},[348,2923,402],{"class":385},[348,2925,1827],{"class":385},[348,2927,2928],{"class":358},"update",[348,2930,800],{"class":385},[348,2932,1553],{"class":385},[348,2934,1892],{"class":747},[348,2936,402],{"class":385},[348,2938,674],{"class":354},[348,2940,759],{"class":385},[348,2942,2667],{"class":385},[348,2944,785],{"class":385},[348,2946,2410],{"class":747},[348,2948,402],{"class":385},[348,2950,1827],{"class":385},[348,2952,2953],{"class":358},"delete",[348,2955,800],{"class":385},[348,2957,1553],{"class":385},[348,2959,1892],{"class":747},[348,2961,402],{"class":385},[348,2963,674],{"class":354},[348,2965,1099],{"class":385},[348,2967,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3007,3009,3011,3013],{"class":350,"line":418},[348,2969,653],{"class":652},[348,2971,657],{"class":656},[348,2973,657],{"class":385},[348,2975,663],{"class":662},[348,2977,677],{"class":385},[348,2979,2890],{"class":354},[348,2981,682],{"class":395},[348,2983,904],{"class":656},[348,2985,2718],{"class":385},[348,2987,2410],{"class":747},[348,2989,402],{"class":385},[348,2991,1827],{"class":385},[348,2993,2903],{"class":358},[348,2995,800],{"class":385},[348,2997,666],{"class":385},[348,2999,719],{"class":747},[348,3001,402],{"class":385},[348,3003,1827],{"class":385},[348,3005,3006],{"class":358},"test",[348,3008,800],{"class":385},[348,3010,759],{"class":385},[348,3012,2757],{"class":656},[348,3014,703],{"class":385},[348,3016,3017],{"class":350,"line":433},[348,3018,1336],{"emptyLinePlaceholder":1335},[348,3020,3021],{"class":350,"line":457},[348,3022,3023],{"class":646},"\u002F\u002F 9. Return objects matching single union type (no mixed properties)\n",[348,3025,3026,3028,3031,3033,3035,3038,3040,3043,3045,3047,3049,3051,3053,3055,3057,3059,3061,3064,3066,3069,3071,3073],{"class":350,"line":477},[348,3027,2410],{"class":395},[348,3029,3030],{"class":354}," Result",[348,3032,980],{"class":385},[348,3034,785],{"class":385},[348,3036,3037],{"class":747},"success",[348,3039,402],{"class":385},[348,3041,3042],{"class":354}," true",[348,3044,1553],{"class":385},[348,3046,719],{"class":747},[348,3048,402],{"class":385},[348,3050,674],{"class":354},[348,3052,759],{"class":385},[348,3054,2667],{"class":385},[348,3056,785],{"class":385},[348,3058,3037],{"class":747},[348,3060,402],{"class":385},[348,3062,3063],{"class":354}," false",[348,3065,1553],{"class":385},[348,3067,3068],{"class":747}," error",[348,3070,402],{"class":385},[348,3072,674],{"class":354},[348,3074,1099],{"class":385},[348,3076,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3102,3104,3106,3108,3110,3113,3115,3117,3119],{"class":350,"line":497},[348,3078,653],{"class":652},[348,3080,657],{"class":656},[348,3082,657],{"class":385},[348,3084,663],{"class":662},[348,3086,677],{"class":385},[348,3088,3030],{"class":354},[348,3090,682],{"class":395},[348,3092,904],{"class":656},[348,3094,2718],{"class":385},[348,3096,3037],{"class":747},[348,3098,402],{"class":385},[348,3100,3042],{"class":3101},"sfNiH",[348,3103,666],{"class":385},[348,3105,719],{"class":747},[348,3107,402],{"class":385},[348,3109,1827],{"class":385},[348,3111,3112],{"class":358},"ok",[348,3114,800],{"class":385},[348,3116,759],{"class":385},[348,3118,2757],{"class":656},[348,3120,703],{"class":385},[348,3122,3123,3125,3127,3129,3131,3133,3135,3137,3139,3141,3143,3145,3147,3149,3151,3153,3155,3158,3160,3162,3164],{"class":350,"line":517},[348,3124,653],{"class":652},[348,3126,657],{"class":656},[348,3128,657],{"class":385},[348,3130,663],{"class":662},[348,3132,677],{"class":385},[348,3134,3030],{"class":354},[348,3136,682],{"class":395},[348,3138,904],{"class":656},[348,3140,2718],{"class":385},[348,3142,3037],{"class":747},[348,3144,402],{"class":385},[348,3146,3063],{"class":3101},[348,3148,666],{"class":385},[348,3150,3068],{"class":747},[348,3152,402],{"class":385},[348,3154,1827],{"class":385},[348,3156,3157],{"class":358},"failed",[348,3159,800],{"class":385},[348,3161,759],{"class":385},[348,3163,2757],{"class":656},[348,3165,703],{"class":385},[618,3167,1505],{"id":3168},"invalid-examples-1",[201,3170,3171],{},[632,3172,3173],{},"Subset before superset (unreachable types):",[339,3175,3177],{"className":637,"code":3176,"language":639,"meta":344,"style":344},"\u002F\u002F 1. Unreachable union type in return (subset before superset)\ntype UnreachableReturn = {a: string} | {a: string; b: number}; \u002F\u002F Second type is unreachable\nroute((ctx): UnreachableReturn => ({a: 'hello'}));\n\n\u002F\u002F 2. Unreachable union type in parameter\ntype UnreachableParam = {id: string} | {id: string; name: string}; \u002F\u002F Second type is unreachable\nroute((ctx, data: UnreachableParam): string => data.id);\n",[205,3178,3179,3184,3229,3266,3270,3275,3316],{"__ignoreMap":344},[348,3180,3181],{"class":350,"line":351},[348,3182,3183],{"class":646},"\u002F\u002F 1. Unreachable union type in return (subset before superset)\n",[348,3185,3186,3188,3191,3193,3195,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3219,3221,3223,3226],{"class":350,"line":389},[348,3187,2410],{"class":395},[348,3189,3190],{"class":354}," UnreachableReturn",[348,3192,980],{"class":385},[348,3194,785],{"class":385},[348,3196,3197],{"class":747},"a",[348,3199,402],{"class":385},[348,3201,674],{"class":354},[348,3203,759],{"class":385},[348,3205,2667],{"class":385},[348,3207,785],{"class":385},[348,3209,3197],{"class":747},[348,3211,402],{"class":385},[348,3213,674],{"class":354},[348,3215,1553],{"class":385},[348,3217,3218],{"class":747}," b",[348,3220,402],{"class":385},[348,3222,724],{"class":354},[348,3224,3225],{"class":385},"};",[348,3227,3228],{"class":646}," \u002F\u002F Second type is unreachable\n",[348,3230,3231,3233,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3258,3260,3262,3264],{"class":350,"line":418},[348,3232,653],{"class":652},[348,3234,657],{"class":656},[348,3236,657],{"class":385},[348,3238,663],{"class":662},[348,3240,677],{"class":385},[348,3242,3190],{"class":354},[348,3244,682],{"class":395},[348,3246,904],{"class":656},[348,3248,2718],{"class":385},[348,3250,3197],{"class":747},[348,3252,402],{"class":385},[348,3254,1827],{"class":385},[348,3256,3257],{"class":358},"hello",[348,3259,800],{"class":385},[348,3261,759],{"class":385},[348,3263,2757],{"class":656},[348,3265,703],{"class":385},[348,3267,3268],{"class":350,"line":433},[348,3269,1336],{"emptyLinePlaceholder":1335},[348,3271,3272],{"class":350,"line":457},[348,3273,3274],{"class":646},"\u002F\u002F 2. Unreachable union type in parameter\n",[348,3276,3277,3279,3282,3284,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308,3310,3312,3314],{"class":350,"line":477},[348,3278,2410],{"class":395},[348,3280,3281],{"class":354}," UnreachableParam",[348,3283,980],{"class":385},[348,3285,785],{"class":385},[348,3287,1914],{"class":747},[348,3289,402],{"class":385},[348,3291,674],{"class":354},[348,3293,759],{"class":385},[348,3295,2667],{"class":385},[348,3297,785],{"class":385},[348,3299,1914],{"class":747},[348,3301,402],{"class":385},[348,3303,674],{"class":354},[348,3305,1553],{"class":385},[348,3307,669],{"class":747},[348,3309,402],{"class":385},[348,3311,674],{"class":354},[348,3313,3225],{"class":385},[348,3315,3228],{"class":646},[348,3317,3318,3320,3322,3324,3326,3328,3330,3332,3334,3336,3338,3340,3342,3344,3346],{"class":350,"line":497},[348,3319,653],{"class":652},[348,3321,657],{"class":656},[348,3323,657],{"class":385},[348,3325,663],{"class":662},[348,3327,666],{"class":385},[348,3329,719],{"class":662},[348,3331,402],{"class":385},[348,3333,3281],{"class":354},[348,3335,677],{"class":385},[348,3337,674],{"class":354},[348,3339,682],{"class":395},[348,3341,719],{"class":656},[348,3343,741],{"class":385},[348,3345,2866],{"class":656},[348,3347,703],{"class":385},[201,3349,3350],{},[632,3351,3352],{},"Optional properties blocking more specific types:",[339,3354,3356],{"className":637,"code":3355,"language":639,"meta":344,"style":344},"\u002F\u002F 3. Optional properties blocking more specific types\ntype OptionalBlocking = {a?: string} | {a: string; b: number}; \u002F\u002F Second type is unreachable\nroute((ctx): OptionalBlocking => ({a: 'hello', b: 1}));\n\n\u002F\u002F 4. Mixed optional\u002Frequired blocking\ntype MixedBlocking = {a: string; b?: number} | {a: string; b: number}; \u002F\u002F Second type is unreachable\nroute((ctx): MixedBlocking => ({a: 'hello', b: 1}));\n",[205,3357,3358,3363,3405,3451,3455,3460,3509],{"__ignoreMap":344},[348,3359,3360],{"class":350,"line":351},[348,3361,3362],{"class":646},"\u002F\u002F 3. Optional properties blocking more specific types\n",[348,3364,3365,3367,3370,3372,3374,3376,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397,3399,3401,3403],{"class":350,"line":389},[348,3366,2410],{"class":395},[348,3368,3369],{"class":354}," OptionalBlocking",[348,3371,980],{"class":385},[348,3373,785],{"class":385},[348,3375,3197],{"class":747},[348,3377,3378],{"class":385},"?:",[348,3380,674],{"class":354},[348,3382,759],{"class":385},[348,3384,2667],{"class":385},[348,3386,785],{"class":385},[348,3388,3197],{"class":747},[348,3390,402],{"class":385},[348,3392,674],{"class":354},[348,3394,1553],{"class":385},[348,3396,3218],{"class":747},[348,3398,402],{"class":385},[348,3400,724],{"class":354},[348,3402,3225],{"class":385},[348,3404,3228],{"class":646},[348,3406,3407,3409,3411,3413,3415,3417,3419,3421,3423,3425,3427,3429,3431,3433,3435,3437,3439,3441,3445,3447,3449],{"class":350,"line":418},[348,3408,653],{"class":652},[348,3410,657],{"class":656},[348,3412,657],{"class":385},[348,3414,663],{"class":662},[348,3416,677],{"class":385},[348,3418,3369],{"class":354},[348,3420,682],{"class":395},[348,3422,904],{"class":656},[348,3424,2718],{"class":385},[348,3426,3197],{"class":747},[348,3428,402],{"class":385},[348,3430,1827],{"class":385},[348,3432,3257],{"class":358},[348,3434,800],{"class":385},[348,3436,666],{"class":385},[348,3438,3218],{"class":747},[348,3440,402],{"class":385},[348,3442,3444],{"class":3443},"sbssI"," 1",[348,3446,759],{"class":385},[348,3448,2757],{"class":656},[348,3450,703],{"class":385},[348,3452,3453],{"class":350,"line":433},[348,3454,1336],{"emptyLinePlaceholder":1335},[348,3456,3457],{"class":350,"line":457},[348,3458,3459],{"class":646},"\u002F\u002F 4. Mixed optional\u002Frequired blocking\n",[348,3461,3462,3464,3467,3469,3471,3473,3475,3477,3479,3481,3483,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507],{"class":350,"line":477},[348,3463,2410],{"class":395},[348,3465,3466],{"class":354}," MixedBlocking",[348,3468,980],{"class":385},[348,3470,785],{"class":385},[348,3472,3197],{"class":747},[348,3474,402],{"class":385},[348,3476,674],{"class":354},[348,3478,1553],{"class":385},[348,3480,3218],{"class":747},[348,3482,3378],{"class":385},[348,3484,724],{"class":354},[348,3486,759],{"class":385},[348,3488,2667],{"class":385},[348,3490,785],{"class":385},[348,3492,3197],{"class":747},[348,3494,402],{"class":385},[348,3496,674],{"class":354},[348,3498,1553],{"class":385},[348,3500,3218],{"class":747},[348,3502,402],{"class":385},[348,3504,724],{"class":354},[348,3506,3225],{"class":385},[348,3508,3228],{"class":646},[348,3510,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551],{"class":350,"line":497},[348,3512,653],{"class":652},[348,3514,657],{"class":656},[348,3516,657],{"class":385},[348,3518,663],{"class":662},[348,3520,677],{"class":385},[348,3522,3466],{"class":354},[348,3524,682],{"class":395},[348,3526,904],{"class":656},[348,3528,2718],{"class":385},[348,3530,3197],{"class":747},[348,3532,402],{"class":385},[348,3534,1827],{"class":385},[348,3536,3257],{"class":358},[348,3538,800],{"class":385},[348,3540,666],{"class":385},[348,3542,3218],{"class":747},[348,3544,402],{"class":385},[348,3546,3444],{"class":3443},[348,3548,759],{"class":385},[348,3550,2757],{"class":656},[348,3552,703],{"class":385},[201,3554,3555],{},[632,3556,3557],{},"Multiple unreachable types:",[339,3559,3561],{"className":637,"code":3560,"language":639,"meta":344,"style":344},"\u002F\u002F 5. Multiple unreachable types\ntype MultipleUnreachable = {a: string} | {a: string; b: number} | {a: string; b: number; c: boolean};\n\u002F\u002F Both second and third types are unreachable\nroute((ctx): MultipleUnreachable => ({a: 'hello'}));\n",[205,3562,3563,3568,3637,3642],{"__ignoreMap":344},[348,3564,3565],{"class":350,"line":351},[348,3566,3567],{"class":646},"\u002F\u002F 5. Multiple unreachable types\n",[348,3569,3570,3572,3575,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3630,3632,3635],{"class":350,"line":389},[348,3571,2410],{"class":395},[348,3573,3574],{"class":354}," MultipleUnreachable",[348,3576,980],{"class":385},[348,3578,785],{"class":385},[348,3580,3197],{"class":747},[348,3582,402],{"class":385},[348,3584,674],{"class":354},[348,3586,759],{"class":385},[348,3588,2667],{"class":385},[348,3590,785],{"class":385},[348,3592,3197],{"class":747},[348,3594,402],{"class":385},[348,3596,674],{"class":354},[348,3598,1553],{"class":385},[348,3600,3218],{"class":747},[348,3602,402],{"class":385},[348,3604,724],{"class":354},[348,3606,759],{"class":385},[348,3608,2667],{"class":385},[348,3610,785],{"class":385},[348,3612,3197],{"class":747},[348,3614,402],{"class":385},[348,3616,674],{"class":354},[348,3618,1553],{"class":385},[348,3620,3218],{"class":747},[348,3622,402],{"class":385},[348,3624,724],{"class":354},[348,3626,1553],{"class":385},[348,3628,3629],{"class":747}," c",[348,3631,402],{"class":385},[348,3633,3634],{"class":354}," boolean",[348,3636,1099],{"class":385},[348,3638,3639],{"class":350,"line":418},[348,3640,3641],{"class":646},"\u002F\u002F Both second and third types are unreachable\n",[348,3643,3644,3646,3648,3650,3652,3654,3656,3658,3660,3662,3664,3666,3668,3670,3672,3674,3676],{"class":350,"line":433},[348,3645,653],{"class":652},[348,3647,657],{"class":656},[348,3649,657],{"class":385},[348,3651,663],{"class":662},[348,3653,677],{"class":385},[348,3655,3574],{"class":354},[348,3657,682],{"class":395},[348,3659,904],{"class":656},[348,3661,2718],{"class":385},[348,3663,3197],{"class":747},[348,3665,402],{"class":385},[348,3667,1827],{"class":385},[348,3669,3257],{"class":358},[348,3671,800],{"class":385},[348,3673,759],{"class":385},[348,3675,2757],{"class":656},[348,3677,703],{"class":385},[1763,3679],{},[609,3681,3683],{"id":3682},"mionjspure-functions",[205,3684,522],{},[201,3686,3687,3688,303,3691,3694,3695,3698],{},"Validates that functions passed to ",[205,3689,3690],{},"pureServerFn()",[205,3692,3693],{},"registerPureFnFactory()"," are pure and do not use forbidden identifiers, closures, or side effects. See the ",[3197,3696,136],{"href":3697},".\u002Fpure-functions"," page for detailed documentation on purity rules and examples.",[1763,3700],{},[609,3702,3704],{"id":3703},"mionjstype-formats-imports",[205,3705,542],{},[201,3707,1772,3708,1776,3710,3712,3713,303,3716,741],{},[205,3709,1775],{},[205,3711,1779],{},") for TypeFormat types from ",[205,3714,3715],{},"@mionjs\u002Ftype-formats",[205,3717,2392],{},[618,3719,621],{"id":3720},"why-is-this-important-4",[201,3722,3723,3724,3727,3728,3727,3731,3727,3734,3737,3738,3740],{},"TypeFormat types (like ",[205,3725,3726],{},"FormatEmail",", ",[205,3729,3730],{},"FormatInteger",[205,3732,3733],{},"FormatBigInt",[205,3735,3736],{},"TypeFormat",", etc.) rely on the type compiler to preserve type metadata for runtime validation and serialization. Using ",[205,3739,1789],{}," strips this metadata, causing silent failures where format validation simply doesn't work.",[618,3742,1794],{"id":3743},"valid-example-2",[339,3745,3747],{"className":637,"code":3746,"language":639,"meta":344,"style":344},"\u002F\u002F ✅ CORRECT: Regular imports preserve type metadata for runtime reflection\nimport {FormatEmail, FormatUrl, FormatStringDate} from '@mionjs\u002Ftype-formats\u002FStringFormats';\nimport {FormatNumber, FormatInteger} from '@mionjs\u002Ftype-formats\u002FNumberFormats';\nimport {FormatBigInt} from '@mionjs\u002Ftype-formats\u002FBigintFormats';\nimport {TypeFormat} from '@mionjs\u002Frun-types';\n",[205,3748,3749,3754,3785,3812,3833],{"__ignoreMap":344},[348,3750,3751],{"class":350,"line":351},[348,3752,3753],{"class":646},"\u002F\u002F ✅ CORRECT: Regular imports preserve type metadata for runtime reflection\n",[348,3755,3756,3758,3760,3762,3764,3767,3769,3772,3774,3776,3778,3781,3783],{"class":350,"line":389},[348,3757,1809],{"class":873},[348,3759,785],{"class":385},[348,3761,3726],{"class":656},[348,3763,666],{"class":385},[348,3765,3766],{"class":656}," FormatUrl",[348,3768,666],{"class":385},[348,3770,3771],{"class":656}," FormatStringDate",[348,3773,759],{"class":385},[348,3775,1824],{"class":873},[348,3777,1827],{"class":385},[348,3779,3780],{"class":358},"@mionjs\u002Ftype-formats\u002FStringFormats",[348,3782,800],{"class":385},[348,3784,703],{"class":385},[348,3786,3787,3789,3791,3794,3796,3799,3801,3803,3805,3808,3810],{"class":350,"line":418},[348,3788,1809],{"class":873},[348,3790,785],{"class":385},[348,3792,3793],{"class":656},"FormatNumber",[348,3795,666],{"class":385},[348,3797,3798],{"class":656}," FormatInteger",[348,3800,759],{"class":385},[348,3802,1824],{"class":873},[348,3804,1827],{"class":385},[348,3806,3807],{"class":358},"@mionjs\u002Ftype-formats\u002FNumberFormats",[348,3809,800],{"class":385},[348,3811,703],{"class":385},[348,3813,3814,3816,3818,3820,3822,3824,3826,3829,3831],{"class":350,"line":433},[348,3815,1809],{"class":873},[348,3817,785],{"class":385},[348,3819,3733],{"class":656},[348,3821,759],{"class":385},[348,3823,1824],{"class":873},[348,3825,1827],{"class":385},[348,3827,3828],{"class":358},"@mionjs\u002Ftype-formats\u002FBigintFormats",[348,3830,800],{"class":385},[348,3832,703],{"class":385},[348,3834,3835,3837,3839,3841,3843,3845,3847,3849,3851],{"class":350,"line":457},[348,3836,1809],{"class":873},[348,3838,785],{"class":385},[348,3840,3736],{"class":656},[348,3842,759],{"class":385},[348,3844,1824],{"class":873},[348,3846,1827],{"class":385},[348,3848,2392],{"class":358},[348,3850,800],{"class":385},[348,3852,703],{"class":385},[618,3854,2076],{"id":3855},"invalid-example-2",[339,3857,3859],{"className":637,"code":3858,"language":639,"meta":344,"style":344},"\u002F\u002F ❌ WRONG: Type-only imports strip metadata, causing silent validation failures\nimport type {FormatEmail, FormatStringDate} from '@mionjs\u002Ftype-formats\u002FStringFormats';\nimport type {FormatFloat} from '@mionjs\u002Ftype-formats\u002FNumberFormats';\nimport {type FormatBigInt64} from '@mionjs\u002Ftype-formats\u002FBigintFormats';\nimport type {TypeFormat} from '@mionjs\u002Frun-types';\n",[205,3860,3861,3866,3892,3915,3938],{"__ignoreMap":344},[348,3862,3863],{"class":350,"line":351},[348,3864,3865],{"class":646},"\u002F\u002F ❌ WRONG: Type-only imports strip metadata, causing silent validation failures\n",[348,3867,3868,3870,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890],{"class":350,"line":389},[348,3869,1809],{"class":873},[348,3871,2093],{"class":873},[348,3873,785],{"class":385},[348,3875,3726],{"class":656},[348,3877,666],{"class":385},[348,3879,3771],{"class":656},[348,3881,759],{"class":385},[348,3883,1824],{"class":873},[348,3885,1827],{"class":385},[348,3887,3780],{"class":358},[348,3889,800],{"class":385},[348,3891,703],{"class":385},[348,3893,3894,3896,3898,3900,3903,3905,3907,3909,3911,3913],{"class":350,"line":418},[348,3895,1809],{"class":873},[348,3897,2093],{"class":873},[348,3899,785],{"class":385},[348,3901,3902],{"class":656},"FormatFloat",[348,3904,759],{"class":385},[348,3906,1824],{"class":873},[348,3908,1827],{"class":385},[348,3910,3807],{"class":358},[348,3912,800],{"class":385},[348,3914,703],{"class":385},[348,3916,3917,3919,3921,3923,3926,3928,3930,3932,3934,3936],{"class":350,"line":433},[348,3918,1809],{"class":873},[348,3920,785],{"class":385},[348,3922,2410],{"class":873},[348,3924,3925],{"class":656}," FormatBigInt64",[348,3927,759],{"class":385},[348,3929,1824],{"class":873},[348,3931,1827],{"class":385},[348,3933,3828],{"class":358},[348,3935,800],{"class":385},[348,3937,703],{"class":385},[348,3939,3940,3942,3944,3946,3948,3950,3952,3954,3956,3958],{"class":350,"line":457},[348,3941,1809],{"class":873},[348,3943,2093],{"class":873},[348,3945,785],{"class":385},[348,3947,3736],{"class":656},[348,3949,759],{"class":385},[348,3951,1824],{"class":873},[348,3953,1827],{"class":385},[348,3955,2392],{"class":358},[348,3957,800],{"class":385},[348,3959,703],{"class":385},[1763,3961],{},[609,3963,3965],{"id":3964},"mionjsno-vite-client",[205,3966,3967],{},"@mionjs\u002Fno-vite-client",[201,3969,3970,3971,3974,3975,303,3977,3980],{},"Enforces constraints for projects where the ",[632,3972,3973],{},"client is not built with Vite"," (e.g., Next.js with Turbopack). When Vite is not available on the client side, the build-time transforms that automatically inject hash identifiers into ",[205,3976,3690],{},[205,3978,3979],{},"serverMapFrom()"," calls cannot run. This rule ensures developers provide explicit name arguments and do not use APIs that require Vite transforms.",[201,3982,3983,3984,3987],{},"This rule is ",[632,3985,3986],{},"not"," included in the recommended config — enable it only in projects that don't use Vite for client builds.",[618,3989,3991],{"id":3990},"what-it-checks","What it checks",[3993,3994,3995,4003,4010,4017],"ul",{},[3996,3997,3998,4002],"li",{},[632,3999,4000],{},[205,4001,3690],{}," must have a string literal name as the second argument",[3996,4004,4005,4009],{},[632,4006,4007],{},[205,4008,3979],{}," must have a string literal name as the third argument",[3996,4011,4012,4016],{},[632,4013,4014],{},[205,4015,3693],{}," is not allowed — it requires Vite build-time transforms and cannot work without them",[3996,4018,4019,4020,4023],{},"Name arguments must be ",[632,4021,4022],{},"string literals",", not variables or expressions",[618,4025,369],{"id":4026},"configuration-1",[339,4028,4030],{"className":375,"code":4029,"filename":377,"language":378,"meta":344,"style":344},"{\n  \"plugins\": [\"@mionjs\"],\n  \"rules\": {\n    \"@mionjs\u002Fno-vite-client\": \"error\"\n  }\n}\n",[205,4031,4032,4036,4056,4068,4084,4088],{"__ignoreMap":344},[348,4033,4034],{"class":350,"line":351},[348,4035,386],{"class":385},[348,4037,4038,4040,4042,4044,4046,4048,4050,4052,4054],{"class":350,"line":389},[348,4039,392],{"class":385},[348,4041,396],{"class":395},[348,4043,399],{"class":385},[348,4045,402],{"class":385},[348,4047,405],{"class":385},[348,4049,399],{"class":385},[348,4051,410],{"class":358},[348,4053,399],{"class":385},[348,4055,415],{"class":385},[348,4057,4058,4060,4062,4064,4066],{"class":350,"line":418},[348,4059,392],{"class":385},[348,4061,423],{"class":395},[348,4063,399],{"class":385},[348,4065,402],{"class":385},[348,4067,430],{"class":385},[348,4069,4070,4072,4074,4076,4078,4080,4082],{"class":350,"line":433},[348,4071,436],{"class":385},[348,4073,3967],{"class":354},[348,4075,399],{"class":385},[348,4077,402],{"class":385},[348,4079,446],{"class":385},[348,4081,449],{"class":358},[348,4083,553],{"class":385},[348,4085,4086],{"class":350,"line":457},[348,4087,559],{"class":385},[348,4089,4090],{"class":350,"line":477},[348,4091,565],{"class":385},[618,4093,628],{"id":4094},"valid-examples-2",[339,4096,4098],{"className":637,"code":4097,"language":639,"meta":344,"style":344},"import {pureServerFn} from '@mionjs\u002Fcore';\nimport {serverMapFrom} from '@mionjs\u002Fclient';\n\n\u002F\u002F pureServerFn with explicit name\nconst addOne = pureServerFn((x: number) => x + 1, 'addOne');\n\n\u002F\u002F serverMapFrom with explicit name\nconst userToId = serverMapFrom(userSub, (user: any) => user.id, 'userToId');\n",[205,4099,4100,4121,4143,4147,4152,4200,4204,4209],{"__ignoreMap":344},[348,4101,4102,4104,4106,4108,4110,4112,4114,4117,4119],{"class":350,"line":351},[348,4103,1809],{"class":873},[348,4105,785],{"class":385},[348,4107,302],{"class":656},[348,4109,759],{"class":385},[348,4111,1824],{"class":873},[348,4113,1827],{"class":385},[348,4115,4116],{"class":358},"@mionjs\u002Fcore",[348,4118,800],{"class":385},[348,4120,703],{"class":385},[348,4122,4123,4125,4127,4130,4132,4134,4136,4139,4141],{"class":350,"line":389},[348,4124,1809],{"class":873},[348,4126,785],{"class":385},[348,4128,4129],{"class":656},"serverMapFrom",[348,4131,759],{"class":385},[348,4133,1824],{"class":873},[348,4135,1827],{"class":385},[348,4137,4138],{"class":358},"@mionjs\u002Fclient",[348,4140,800],{"class":385},[348,4142,703],{"class":385},[348,4144,4145],{"class":350,"line":418},[348,4146,1336],{"emptyLinePlaceholder":1335},[348,4148,4149],{"class":350,"line":433},[348,4150,4151],{"class":646},"\u002F\u002F pureServerFn with explicit name\n",[348,4153,4154,4156,4159,4161,4164,4166,4168,4171,4173,4175,4177,4179,4182,4185,4187,4189,4191,4194,4196,4198],{"class":350,"line":457},[348,4155,895],{"class":395},[348,4157,4158],{"class":656}," addOne ",[348,4160,901],{"class":385},[348,4162,4163],{"class":652}," pureServerFn",[348,4165,657],{"class":656},[348,4167,657],{"class":385},[348,4169,4170],{"class":662},"x",[348,4172,402],{"class":385},[348,4174,724],{"class":354},[348,4176,700],{"class":385},[348,4178,682],{"class":395},[348,4180,4181],{"class":656}," x ",[348,4183,4184],{"class":385},"+",[348,4186,3444],{"class":3443},[348,4188,666],{"class":385},[348,4190,1827],{"class":385},[348,4192,4193],{"class":358},"addOne",[348,4195,800],{"class":385},[348,4197,700],{"class":656},[348,4199,703],{"class":385},[348,4201,4202],{"class":350,"line":477},[348,4203,1336],{"emptyLinePlaceholder":1335},[348,4205,4206],{"class":350,"line":497},[348,4207,4208],{"class":646},"\u002F\u002F serverMapFrom with explicit name\n",[348,4210,4211,4213,4216,4218,4221,4224,4226,4228,4230,4232,4235,4237,4239,4241,4243,4245,4247,4249,4252,4254,4256],{"class":350,"line":517},[348,4212,895],{"class":395},[348,4214,4215],{"class":656}," userToId ",[348,4217,901],{"class":385},[348,4219,4220],{"class":652}," serverMapFrom",[348,4222,4223],{"class":656},"(userSub",[348,4225,666],{"class":385},[348,4227,904],{"class":385},[348,4229,2056],{"class":662},[348,4231,402],{"class":385},[348,4233,4234],{"class":354}," any",[348,4236,700],{"class":385},[348,4238,682],{"class":395},[348,4240,2031],{"class":656},[348,4242,741],{"class":385},[348,4244,1914],{"class":656},[348,4246,666],{"class":385},[348,4248,1827],{"class":385},[348,4250,4251],{"class":358},"userToId",[348,4253,800],{"class":385},[348,4255,700],{"class":656},[348,4257,703],{"class":385},[618,4259,1505],{"id":4260},"invalid-examples-2",[339,4262,4264],{"className":637,"code":4263,"language":639,"meta":344,"style":344},"import {pureServerFn} from '@mionjs\u002Fcore';\nimport {serverMapFrom} from '@mionjs\u002Fclient';\nimport {registerPureFnFactory} from '@mionjs\u002Fcore';\n\n\u002F\u002F ❌ Missing name argument\npureServerFn((x: number) => x + 1);\n\n\u002F\u002F ❌ Missing name argument\nserverMapFrom(userSub, (user: any) => user.id);\n\n\u002F\u002F ❌ Name must be a string literal, not a variable\nconst name = 'addOne';\npureServerFn((x: number) => x + 1, name);\n\n\u002F\u002F ❌ registerPureFnFactory requires Vite transforms\nregisterPureFnFactory('ns', 'id', (jitUtils) => (v) => v);\n",[205,4265,4266,4286,4306,4326,4330,4335,4363,4367,4371,4399,4403,4408,4425,4456,4460,4465],{"__ignoreMap":344},[348,4267,4268,4270,4272,4274,4276,4278,4280,4282,4284],{"class":350,"line":351},[348,4269,1809],{"class":873},[348,4271,785],{"class":385},[348,4273,302],{"class":656},[348,4275,759],{"class":385},[348,4277,1824],{"class":873},[348,4279,1827],{"class":385},[348,4281,4116],{"class":358},[348,4283,800],{"class":385},[348,4285,703],{"class":385},[348,4287,4288,4290,4292,4294,4296,4298,4300,4302,4304],{"class":350,"line":389},[348,4289,1809],{"class":873},[348,4291,785],{"class":385},[348,4293,4129],{"class":656},[348,4295,759],{"class":385},[348,4297,1824],{"class":873},[348,4299,1827],{"class":385},[348,4301,4138],{"class":358},[348,4303,800],{"class":385},[348,4305,703],{"class":385},[348,4307,4308,4310,4312,4314,4316,4318,4320,4322,4324],{"class":350,"line":418},[348,4309,1809],{"class":873},[348,4311,785],{"class":385},[348,4313,306],{"class":656},[348,4315,759],{"class":385},[348,4317,1824],{"class":873},[348,4319,1827],{"class":385},[348,4321,4116],{"class":358},[348,4323,800],{"class":385},[348,4325,703],{"class":385},[348,4327,4328],{"class":350,"line":433},[348,4329,1336],{"emptyLinePlaceholder":1335},[348,4331,4332],{"class":350,"line":457},[348,4333,4334],{"class":646},"\u002F\u002F ❌ Missing name argument\n",[348,4336,4337,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361],{"class":350,"line":477},[348,4338,302],{"class":652},[348,4340,657],{"class":656},[348,4342,657],{"class":385},[348,4344,4170],{"class":662},[348,4346,402],{"class":385},[348,4348,724],{"class":354},[348,4350,700],{"class":385},[348,4352,682],{"class":395},[348,4354,4181],{"class":656},[348,4356,4184],{"class":385},[348,4358,3444],{"class":3443},[348,4360,700],{"class":656},[348,4362,703],{"class":385},[348,4364,4365],{"class":350,"line":497},[348,4366,1336],{"emptyLinePlaceholder":1335},[348,4368,4369],{"class":350,"line":517},[348,4370,4334],{"class":646},[348,4372,4373,4375,4377,4379,4381,4383,4385,4387,4389,4391,4393,4395,4397],{"class":350,"line":537},[348,4374,4129],{"class":652},[348,4376,4223],{"class":656},[348,4378,666],{"class":385},[348,4380,904],{"class":385},[348,4382,2056],{"class":662},[348,4384,402],{"class":385},[348,4386,4234],{"class":354},[348,4388,700],{"class":385},[348,4390,682],{"class":395},[348,4392,2031],{"class":656},[348,4394,741],{"class":385},[348,4396,2866],{"class":656},[348,4398,703],{"class":385},[348,4400,4401],{"class":350,"line":556},[348,4402,1336],{"emptyLinePlaceholder":1335},[348,4404,4405],{"class":350,"line":562},[348,4406,4407],{"class":646},"\u002F\u002F ❌ Name must be a string literal, not a variable\n",[348,4409,4410,4412,4415,4417,4419,4421,4423],{"class":350,"line":1352},[348,4411,895],{"class":395},[348,4413,4414],{"class":656}," name ",[348,4416,901],{"class":385},[348,4418,1827],{"class":385},[348,4420,4193],{"class":358},[348,4422,800],{"class":385},[348,4424,703],{"class":385},[348,4426,4427,4429,4431,4433,4435,4437,4439,4441,4443,4445,4447,4449,4451,4454],{"class":350,"line":1382},[348,4428,302],{"class":652},[348,4430,657],{"class":656},[348,4432,657],{"class":385},[348,4434,4170],{"class":662},[348,4436,402],{"class":385},[348,4438,724],{"class":354},[348,4440,700],{"class":385},[348,4442,682],{"class":395},[348,4444,4181],{"class":656},[348,4446,4184],{"class":385},[348,4448,3444],{"class":3443},[348,4450,666],{"class":385},[348,4452,4453],{"class":656}," name)",[348,4455,703],{"class":385},[348,4457,4458],{"class":350,"line":1399},[348,4459,1336],{"emptyLinePlaceholder":1335},[348,4461,4462],{"class":350,"line":1404},[348,4463,4464],{"class":646},"\u002F\u002F ❌ registerPureFnFactory requires Vite transforms\n",[348,4466,4467,4469,4471,4473,4476,4478,4480,4482,4484,4486,4488,4490,4493,4495,4497,4499,4502,4504,4506,4509],{"class":350,"line":1409},[348,4468,306],{"class":652},[348,4470,657],{"class":656},[348,4472,800],{"class":385},[348,4474,4475],{"class":358},"ns",[348,4477,800],{"class":385},[348,4479,666],{"class":385},[348,4481,1827],{"class":385},[348,4483,1914],{"class":358},[348,4485,800],{"class":385},[348,4487,666],{"class":385},[348,4489,904],{"class":385},[348,4491,4492],{"class":662},"jitUtils",[348,4494,700],{"class":385},[348,4496,682],{"class":395},[348,4498,904],{"class":385},[348,4500,4501],{"class":662},"v",[348,4503,700],{"class":385},[348,4505,682],{"class":395},[348,4507,4508],{"class":656}," v)",[348,4510,703],{"class":385},[1763,4512],{},[4514,4515,4516,4517,4519,4520,4522,4523,4525,4526,4528],"note",{},"All rules except ",[205,4518,327],{}," are included in the ",[205,4521,595],{}," configuration and are enabled by default with ",[205,4524,449],{}," severity. The ",[205,4527,327],{}," rule is opt-in for projects that don't use Vite for client builds.",[4530,4531,4532],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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}",{"title":344,"searchDepth":389,"depth":389,"links":4534},[4535,4536,4537,4538],{"id":212,"depth":389,"text":213},{"id":336,"depth":389,"text":337},{"id":368,"depth":389,"text":369},{"id":423,"depth":389,"text":607,"children":4539},[4540,4541,4542,4543,4544,4545,4546],{"id":611,"depth":418,"text":439},{"id":1767,"depth":418,"text":462},{"id":2346,"depth":418,"text":502},{"id":2600,"depth":418,"text":482},{"id":3682,"depth":418,"text":522},{"id":3703,"depth":418,"text":542},{"id":3964,"depth":418,"text":3967},"ESLint rules specific for mion that ensure RunTypes works properly.","md",null,{},{"title":140,"description":4547},"2OhZqul2iTFVPfGX9MGVub58-DcL7_DDKFamFllJgf0",[4554,4556],{"title":136,"path":137,"stem":138,"description":4555,"children":-1},"Learn about pure functions — registerPureFnFactory for server-to-client sharing, and pureServerFn\u002FserverMapFrom for client-to-server injection.",{"title":144,"path":145,"stem":146,"description":4557,"children":-1},"How to configure the mion Vite plugin for server and client packages.",1778674529726]