[{"data":1,"prerenderedAt":1953},["ShallowReactive",2],{"navigation_docs":3,"-server-validation":195,"-server-validation-surround":1948},[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":54,"body":197,"description":1942,"extension":1943,"links":1944,"meta":1945,"navigation":299,"path":55,"seo":1946,"stem":56,"__hash__":1947},"docs\u002F20.server\u002F7.validation.md",{"type":198,"value":199},"minimark",[200,209,214,221,629,639,875,879,882,887,901,1106,1114,1127,1131,1137,1293,1299,1313,1317,1324,1327,1331,1660,1664,1670,1927,1938],[201,202,203,204,208],"p",{},"mion uses ",[205,206,207],"code",{},"@mionjs\u002Frun-types"," for automatic validation.\nThis is a powerful type system that extracts TypeScript type metadata at compile time and uses it at runtime.\nNo need to manage schemas or write extra code for validation.",[210,211,213],"h2",{"id":212},"automatic-validation","Automatic Validation",[201,215,216,217,220],{},"All routes and middleFns parameters are automatically validated before the method gets called.\nIf validation fails, an ",[205,218,219],{},"RpcError"," is thrown with details about the validation errors and method gets never called.",[222,223,228],"pre",{"className":224,"code":225,"language":226,"meta":227,"style":227},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {Routes, route} from '@mionjs\u002Frouter';\nimport {memoryStoreService} from '.\u002Ffull-example.app.ts';\n\n\u002F\u002F Your TypeScript types ARE the validation schema\ninterface User {\n    id: string;\n    email: string;\n    age: number;\n    birthDate: Date;\n    tags: Set\u003Cstring>;\n}\n\ntype NewUser = Omit\u003CUser, 'id'>;\n\n\u002F\u002F mion automatically:\n\u002F\u002F 1. Restores Date and Set from JSON\n\u002F\u002F 2. Validates user parameter\nconst routes = {\n    createUser: route((ctx, user: NewUser): User => {\n        \u002F\u002F user is already validated and types are restored\n        console.log(user.birthDate instanceof Date); \u002F\u002F true\n        console.log(user.tags instanceof Set); \u002F\u002F true\n        return memoryStoreService.createUser(user);\n    }),\n} satisfies Routes;\n","ts","",[205,229,230,271,294,301,308,322,337,349,362,375,395,401,406,437,442,448,454,460,474,513,519,555,583,605,616],{"__ignoreMap":227},[231,232,235,239,243,246,249,252,255,258,261,265,268],"span",{"class":233,"line":234},"line",1,[231,236,238],{"class":237},"s7zQu","import",[231,240,242],{"class":241},"sMK4o"," {",[231,244,38],{"class":245},"sTEyZ",[231,247,248],{"class":241},",",[231,250,251],{"class":245}," route",[231,253,254],{"class":241},"}",[231,256,257],{"class":237}," from",[231,259,260],{"class":241}," '",[231,262,264],{"class":263},"sfazB","@mionjs\u002Frouter",[231,266,267],{"class":241},"'",[231,269,270],{"class":241},";\n",[231,272,274,276,278,281,283,285,287,290,292],{"class":233,"line":273},2,[231,275,238],{"class":237},[231,277,242],{"class":241},[231,279,280],{"class":245},"memoryStoreService",[231,282,254],{"class":241},[231,284,257],{"class":237},[231,286,260],{"class":241},[231,288,289],{"class":263},".\u002Ffull-example.app.ts",[231,291,267],{"class":241},[231,293,270],{"class":241},[231,295,297],{"class":233,"line":296},3,[231,298,300],{"emptyLinePlaceholder":299},true,"\n",[231,302,304],{"class":233,"line":303},4,[231,305,307],{"class":306},"sHwdD","\u002F\u002F Your TypeScript types ARE the validation schema\n",[231,309,311,315,319],{"class":233,"line":310},5,[231,312,314],{"class":313},"spNyl","interface",[231,316,318],{"class":317},"sBMFI"," User",[231,320,321],{"class":241}," {\n",[231,323,325,329,332,335],{"class":233,"line":324},6,[231,326,328],{"class":327},"swJcz","    id",[231,330,331],{"class":241},":",[231,333,334],{"class":317}," string",[231,336,270],{"class":241},[231,338,340,343,345,347],{"class":233,"line":339},7,[231,341,342],{"class":327},"    email",[231,344,331],{"class":241},[231,346,334],{"class":317},[231,348,270],{"class":241},[231,350,352,355,357,360],{"class":233,"line":351},8,[231,353,354],{"class":327},"    age",[231,356,331],{"class":241},[231,358,359],{"class":317}," number",[231,361,270],{"class":241},[231,363,365,368,370,373],{"class":233,"line":364},9,[231,366,367],{"class":327},"    birthDate",[231,369,331],{"class":241},[231,371,372],{"class":317}," Date",[231,374,270],{"class":241},[231,376,378,381,383,386,389,392],{"class":233,"line":377},10,[231,379,380],{"class":327},"    tags",[231,382,331],{"class":241},[231,384,385],{"class":317}," Set",[231,387,388],{"class":241},"\u003C",[231,390,391],{"class":317},"string",[231,393,394],{"class":241},">;\n",[231,396,398],{"class":233,"line":397},11,[231,399,400],{"class":241},"}\n",[231,402,404],{"class":233,"line":403},12,[231,405,300],{"emptyLinePlaceholder":299},[231,407,409,412,415,418,421,423,426,428,430,433,435],{"class":233,"line":408},13,[231,410,411],{"class":313},"type",[231,413,414],{"class":317}," NewUser",[231,416,417],{"class":241}," =",[231,419,420],{"class":317}," Omit",[231,422,388],{"class":241},[231,424,425],{"class":317},"User",[231,427,248],{"class":241},[231,429,260],{"class":241},[231,431,432],{"class":263},"id",[231,434,267],{"class":241},[231,436,394],{"class":241},[231,438,440],{"class":233,"line":439},14,[231,441,300],{"emptyLinePlaceholder":299},[231,443,445],{"class":233,"line":444},15,[231,446,447],{"class":306},"\u002F\u002F mion automatically:\n",[231,449,451],{"class":233,"line":450},16,[231,452,453],{"class":306},"\u002F\u002F 1. Restores Date and Set from JSON\n",[231,455,457],{"class":233,"line":456},17,[231,458,459],{"class":306},"\u002F\u002F 2. Validates user parameter\n",[231,461,463,466,469,472],{"class":233,"line":462},18,[231,464,465],{"class":313},"const",[231,467,468],{"class":245}," routes ",[231,470,471],{"class":241},"=",[231,473,321],{"class":241},[231,475,477,480,482,485,488,490,494,496,499,501,503,506,508,511],{"class":233,"line":476},19,[231,478,479],{"class":327},"    createUser",[231,481,331],{"class":241},[231,483,251],{"class":484},"s2Zo4",[231,486,487],{"class":245},"(",[231,489,487],{"class":241},[231,491,493],{"class":492},"sHdIc","ctx",[231,495,248],{"class":241},[231,497,498],{"class":492}," user",[231,500,331],{"class":241},[231,502,414],{"class":317},[231,504,505],{"class":241},"):",[231,507,318],{"class":317},[231,509,510],{"class":313}," =>",[231,512,321],{"class":241},[231,514,516],{"class":233,"line":515},20,[231,517,518],{"class":306},"        \u002F\u002F user is already validated and types are restored\n",[231,520,522,525,528,531,533,536,538,541,544,546,549,552],{"class":233,"line":521},21,[231,523,524],{"class":245},"        console",[231,526,527],{"class":241},".",[231,529,530],{"class":484},"log",[231,532,487],{"class":327},[231,534,535],{"class":245},"user",[231,537,527],{"class":241},[231,539,540],{"class":245},"birthDate",[231,542,543],{"class":241}," instanceof",[231,545,372],{"class":317},[231,547,548],{"class":327},")",[231,550,551],{"class":241},";",[231,553,554],{"class":306}," \u002F\u002F true\n",[231,556,558,560,562,564,566,568,570,573,575,577,579,581],{"class":233,"line":557},22,[231,559,524],{"class":245},[231,561,527],{"class":241},[231,563,530],{"class":484},[231,565,487],{"class":327},[231,567,535],{"class":245},[231,569,527],{"class":241},[231,571,572],{"class":245},"tags",[231,574,543],{"class":241},[231,576,385],{"class":317},[231,578,548],{"class":327},[231,580,551],{"class":241},[231,582,554],{"class":306},[231,584,586,589,592,594,597,599,601,603],{"class":233,"line":585},23,[231,587,588],{"class":237},"        return",[231,590,591],{"class":245}," memoryStoreService",[231,593,527],{"class":241},[231,595,596],{"class":484},"createUser",[231,598,487],{"class":327},[231,600,535],{"class":245},[231,602,548],{"class":327},[231,604,270],{"class":241},[231,606,608,611,613],{"class":233,"line":607},24,[231,609,610],{"class":241},"    }",[231,612,548],{"class":245},[231,614,615],{"class":241},",\n",[231,617,619,621,624,627],{"class":233,"line":618},25,[231,620,254],{"class":241},[231,622,623],{"class":237}," satisfies",[231,625,626],{"class":317}," Routes",[231,628,270],{"class":241},[201,630,631,632,635,636,638],{},"If an invalid request is sent, a ",[205,633,634],{},"ValidationError"," (which extends ",[205,637,219],{},") is thrown:",[222,640,642],{"className":224,"code":641,"language":226,"meta":227,"style":227},"import {RpcError, RunTypeError, ValidationError} from '@mionjs\u002Fcore';\n\n\u002F\u002F Example validation error thrown when invalid data is received\nconst validationError: ValidationError = new RpcError({\n    statusCode: 400,\n    type: 'validation-error',\n    publicMessage: \"Invalid params in 'createUser', validation failed.\",\n    errorData: {\n        typeErrors: [\n            {path: ['email'], expected: 'string'},\n            {path: ['age'], expected: 'number'},\n        ] as RunTypeError[],\n    },\n});\n",[205,643,644,675,679,684,708,721,737,755,764,774,813,847,862,867],{"__ignoreMap":227},[231,645,646,648,650,652,654,657,659,662,664,666,668,671,673],{"class":233,"line":234},[231,647,238],{"class":237},[231,649,242],{"class":241},[231,651,219],{"class":245},[231,653,248],{"class":241},[231,655,656],{"class":245}," RunTypeError",[231,658,248],{"class":241},[231,660,661],{"class":245}," ValidationError",[231,663,254],{"class":241},[231,665,257],{"class":237},[231,667,260],{"class":241},[231,669,670],{"class":263},"@mionjs\u002Fcore",[231,672,267],{"class":241},[231,674,270],{"class":241},[231,676,677],{"class":233,"line":273},[231,678,300],{"emptyLinePlaceholder":299},[231,680,681],{"class":233,"line":296},[231,682,683],{"class":306},"\u002F\u002F Example validation error thrown when invalid data is received\n",[231,685,686,688,691,693,695,697,700,703,705],{"class":233,"line":303},[231,687,465],{"class":313},[231,689,690],{"class":245}," validationError",[231,692,331],{"class":241},[231,694,661],{"class":317},[231,696,417],{"class":241},[231,698,699],{"class":241}," new",[231,701,702],{"class":484}," RpcError",[231,704,487],{"class":245},[231,706,707],{"class":241},"{\n",[231,709,710,713,715,719],{"class":233,"line":310},[231,711,712],{"class":327},"    statusCode",[231,714,331],{"class":241},[231,716,718],{"class":717},"sbssI"," 400",[231,720,615],{"class":241},[231,722,723,726,728,730,733,735],{"class":233,"line":324},[231,724,725],{"class":327},"    type",[231,727,331],{"class":241},[231,729,260],{"class":241},[231,731,732],{"class":263},"validation-error",[231,734,267],{"class":241},[231,736,615],{"class":241},[231,738,739,742,744,747,750,753],{"class":233,"line":339},[231,740,741],{"class":327},"    publicMessage",[231,743,331],{"class":241},[231,745,746],{"class":241}," \"",[231,748,749],{"class":263},"Invalid params in 'createUser', validation failed.",[231,751,752],{"class":241},"\"",[231,754,615],{"class":241},[231,756,757,760,762],{"class":233,"line":351},[231,758,759],{"class":327},"    errorData",[231,761,331],{"class":241},[231,763,321],{"class":241},[231,765,766,769,771],{"class":233,"line":364},[231,767,768],{"class":327},"        typeErrors",[231,770,331],{"class":241},[231,772,773],{"class":245}," [\n",[231,775,776,779,782,784,787,789,792,794,797,799,802,804,806,808,810],{"class":233,"line":377},[231,777,778],{"class":241},"            {",[231,780,781],{"class":327},"path",[231,783,331],{"class":241},[231,785,786],{"class":245}," [",[231,788,267],{"class":241},[231,790,791],{"class":263},"email",[231,793,267],{"class":241},[231,795,796],{"class":245},"]",[231,798,248],{"class":241},[231,800,801],{"class":327}," expected",[231,803,331],{"class":241},[231,805,260],{"class":241},[231,807,391],{"class":263},[231,809,267],{"class":241},[231,811,812],{"class":241},"},\n",[231,814,815,817,819,821,823,825,828,830,832,834,836,838,840,843,845],{"class":233,"line":397},[231,816,778],{"class":241},[231,818,781],{"class":327},[231,820,331],{"class":241},[231,822,786],{"class":245},[231,824,267],{"class":241},[231,826,827],{"class":263},"age",[231,829,267],{"class":241},[231,831,796],{"class":245},[231,833,248],{"class":241},[231,835,801],{"class":327},[231,837,331],{"class":241},[231,839,260],{"class":241},[231,841,842],{"class":263},"number",[231,844,267],{"class":241},[231,846,812],{"class":241},[231,848,849,852,855,857,860],{"class":233,"line":403},[231,850,851],{"class":245},"        ] ",[231,853,854],{"class":237},"as",[231,856,656],{"class":317},[231,858,859],{"class":245},"[]",[231,861,615],{"class":241},[231,863,864],{"class":233,"line":408},[231,865,866],{"class":241},"    },\n",[231,868,869,871,873],{"class":233,"line":439},[231,870,254],{"class":241},[231,872,548],{"class":245},[231,874,270],{"class":241},[210,876,878],{"id":877},"validation-functions","Validation Functions",[201,880,881],{},"mion provides two main validation functions with different use cases:",[883,884,886],"h4",{"id":885},"istype-fast-boolean-check","isType - Fast Boolean Check",[201,888,889,892,893,896,897,900],{},[205,890,891],{},"isType"," is optimized for performance and returns a simple ",[205,894,895],{},"true"," or ",[205,898,899],{},"false"," result. Use this when you only need to know if data is valid without detailed error information.",[222,902,904],{"className":224,"code":903,"language":226,"meta":227,"style":227},"import {createIsTypeFn} from '@mionjs\u002Frun-types';\n\ninterface User {\n    name: string;\n    age: number;\n}\n\nconst isUser = await createIsTypeFn\u003CUser>();\n\nisUser({name: 'John', age: 30}); \u002F\u002F true\nisUser({name: 'John'}); \u002F\u002F false (missing age)\nisUser({name: 'John', age: '30'}); \u002F\u002F false (age is string)\n",[205,905,906,927,931,939,950,960,964,968,995,999,1039,1066],{"__ignoreMap":227},[231,907,908,910,912,915,917,919,921,923,925],{"class":233,"line":234},[231,909,238],{"class":237},[231,911,242],{"class":241},[231,913,914],{"class":245},"createIsTypeFn",[231,916,254],{"class":241},[231,918,257],{"class":237},[231,920,260],{"class":241},[231,922,207],{"class":263},[231,924,267],{"class":241},[231,926,270],{"class":241},[231,928,929],{"class":233,"line":273},[231,930,300],{"emptyLinePlaceholder":299},[231,932,933,935,937],{"class":233,"line":296},[231,934,314],{"class":313},[231,936,318],{"class":317},[231,938,321],{"class":241},[231,940,941,944,946,948],{"class":233,"line":303},[231,942,943],{"class":327},"    name",[231,945,331],{"class":241},[231,947,334],{"class":317},[231,949,270],{"class":241},[231,951,952,954,956,958],{"class":233,"line":310},[231,953,354],{"class":327},[231,955,331],{"class":241},[231,957,359],{"class":317},[231,959,270],{"class":241},[231,961,962],{"class":233,"line":324},[231,963,400],{"class":241},[231,965,966],{"class":233,"line":339},[231,967,300],{"emptyLinePlaceholder":299},[231,969,970,972,975,977,980,983,985,987,990,993],{"class":233,"line":351},[231,971,465],{"class":313},[231,973,974],{"class":245}," isUser ",[231,976,471],{"class":241},[231,978,979],{"class":237}," await",[231,981,982],{"class":484}," createIsTypeFn",[231,984,388],{"class":241},[231,986,425],{"class":317},[231,988,989],{"class":241},">",[231,991,992],{"class":245},"()",[231,994,270],{"class":241},[231,996,997],{"class":233,"line":364},[231,998,300],{"emptyLinePlaceholder":299},[231,1000,1001,1004,1006,1009,1012,1014,1016,1019,1021,1023,1026,1028,1031,1033,1035,1037],{"class":233,"line":377},[231,1002,1003],{"class":484},"isUser",[231,1005,487],{"class":245},[231,1007,1008],{"class":241},"{",[231,1010,1011],{"class":327},"name",[231,1013,331],{"class":241},[231,1015,260],{"class":241},[231,1017,1018],{"class":263},"John",[231,1020,267],{"class":241},[231,1022,248],{"class":241},[231,1024,1025],{"class":327}," age",[231,1027,331],{"class":241},[231,1029,1030],{"class":717}," 30",[231,1032,254],{"class":241},[231,1034,548],{"class":245},[231,1036,551],{"class":241},[231,1038,554],{"class":306},[231,1040,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063],{"class":233,"line":397},[231,1042,1003],{"class":484},[231,1044,487],{"class":245},[231,1046,1008],{"class":241},[231,1048,1011],{"class":327},[231,1050,331],{"class":241},[231,1052,260],{"class":241},[231,1054,1018],{"class":263},[231,1056,267],{"class":241},[231,1058,254],{"class":241},[231,1060,548],{"class":245},[231,1062,551],{"class":241},[231,1064,1065],{"class":306}," \u002F\u002F false (missing age)\n",[231,1067,1068,1070,1072,1074,1076,1078,1080,1082,1084,1086,1088,1090,1092,1095,1097,1099,1101,1103],{"class":233,"line":403},[231,1069,1003],{"class":484},[231,1071,487],{"class":245},[231,1073,1008],{"class":241},[231,1075,1011],{"class":327},[231,1077,331],{"class":241},[231,1079,260],{"class":241},[231,1081,1018],{"class":263},[231,1083,267],{"class":241},[231,1085,248],{"class":241},[231,1087,1025],{"class":327},[231,1089,331],{"class":241},[231,1091,260],{"class":241},[231,1093,1094],{"class":263},"30",[231,1096,267],{"class":241},[231,1098,254],{"class":241},[231,1100,548],{"class":245},[231,1102,551],{"class":241},[231,1104,1105],{"class":306}," \u002F\u002F false (age is string)\n",[201,1107,1108],{},[1109,1110,1111,1112,331],"strong",{},"When to use ",[205,1113,891],{},[1115,1116,1117,1121,1124],"ul",{},[1118,1119,1120],"li",{},"Quick validation checks in hot paths",[1118,1122,1123],{},"Guard clauses where you just need a boolean",[1118,1125,1126],{},"Performance-critical code where detailed errors aren't needed",[883,1128,1130],{"id":1129},"gettypeerrors-detailed-error-information","getTypeErrors - Detailed Error Information",[201,1132,1133,1136],{},[205,1134,1135],{},"getTypeErrors"," returns comprehensive error data including the path to invalid properties and expected types. Use this when you need to provide detailed feedback to users or for debugging.",[222,1138,1140],{"className":224,"code":1139,"language":226,"meta":227,"style":227},"import {createTypeErrorsFn} from '@mionjs\u002Frun-types';\n\ninterface User {\n    name: string;\n    age: number;\n}\n\nconst getUserErrors = await createTypeErrorsFn\u003CUser>();\n\nconst errors = getUserErrors({name: 123, age: 'invalid'});\n\u002F\u002F Returns: [\n\u002F\u002F   { path: ['name'], expected: 'string', actual: 'number' },\n\u002F\u002F   { path: ['age'], expected: 'number', actual: 'string' }\n\u002F\u002F ]\n",[205,1141,1142,1163,1167,1175,1185,1195,1199,1203,1227,1231,1273,1278,1283,1288],{"__ignoreMap":227},[231,1143,1144,1146,1148,1151,1153,1155,1157,1159,1161],{"class":233,"line":234},[231,1145,238],{"class":237},[231,1147,242],{"class":241},[231,1149,1150],{"class":245},"createTypeErrorsFn",[231,1152,254],{"class":241},[231,1154,257],{"class":237},[231,1156,260],{"class":241},[231,1158,207],{"class":263},[231,1160,267],{"class":241},[231,1162,270],{"class":241},[231,1164,1165],{"class":233,"line":273},[231,1166,300],{"emptyLinePlaceholder":299},[231,1168,1169,1171,1173],{"class":233,"line":296},[231,1170,314],{"class":313},[231,1172,318],{"class":317},[231,1174,321],{"class":241},[231,1176,1177,1179,1181,1183],{"class":233,"line":303},[231,1178,943],{"class":327},[231,1180,331],{"class":241},[231,1182,334],{"class":317},[231,1184,270],{"class":241},[231,1186,1187,1189,1191,1193],{"class":233,"line":310},[231,1188,354],{"class":327},[231,1190,331],{"class":241},[231,1192,359],{"class":317},[231,1194,270],{"class":241},[231,1196,1197],{"class":233,"line":324},[231,1198,400],{"class":241},[231,1200,1201],{"class":233,"line":339},[231,1202,300],{"emptyLinePlaceholder":299},[231,1204,1205,1207,1210,1212,1214,1217,1219,1221,1223,1225],{"class":233,"line":351},[231,1206,465],{"class":313},[231,1208,1209],{"class":245}," getUserErrors ",[231,1211,471],{"class":241},[231,1213,979],{"class":237},[231,1215,1216],{"class":484}," createTypeErrorsFn",[231,1218,388],{"class":241},[231,1220,425],{"class":317},[231,1222,989],{"class":241},[231,1224,992],{"class":245},[231,1226,270],{"class":241},[231,1228,1229],{"class":233,"line":364},[231,1230,300],{"emptyLinePlaceholder":299},[231,1232,1233,1235,1238,1240,1243,1245,1247,1249,1251,1254,1256,1258,1260,1262,1265,1267,1269,1271],{"class":233,"line":377},[231,1234,465],{"class":313},[231,1236,1237],{"class":245}," errors ",[231,1239,471],{"class":241},[231,1241,1242],{"class":484}," getUserErrors",[231,1244,487],{"class":245},[231,1246,1008],{"class":241},[231,1248,1011],{"class":327},[231,1250,331],{"class":241},[231,1252,1253],{"class":717}," 123",[231,1255,248],{"class":241},[231,1257,1025],{"class":327},[231,1259,331],{"class":241},[231,1261,260],{"class":241},[231,1263,1264],{"class":263},"invalid",[231,1266,267],{"class":241},[231,1268,254],{"class":241},[231,1270,548],{"class":245},[231,1272,270],{"class":241},[231,1274,1275],{"class":233,"line":397},[231,1276,1277],{"class":306},"\u002F\u002F Returns: [\n",[231,1279,1280],{"class":233,"line":403},[231,1281,1282],{"class":306},"\u002F\u002F   { path: ['name'], expected: 'string', actual: 'number' },\n",[231,1284,1285],{"class":233,"line":408},[231,1286,1287],{"class":306},"\u002F\u002F   { path: ['age'], expected: 'number', actual: 'string' }\n",[231,1289,1290],{"class":233,"line":439},[231,1291,1292],{"class":306},"\u002F\u002F ]\n",[201,1294,1295],{},[1109,1296,1111,1297,331],{},[205,1298,1135],{},[1115,1300,1301,1304,1307,1310],{},[1118,1302,1303],{},"Form validation with user feedback",[1118,1305,1306],{},"API error responses with detailed messages",[1118,1308,1309],{},"Debugging and logging validation failures",[1118,1311,1312],{},"When you need to know exactly what went wrong",[210,1314,1316],{"id":1315},"strict-types","Strict Types",[201,1318,1319,1320,1323],{},"By default, mion allows objects with extra properties to pass validation. When ",[205,1321,1322],{},"strictTypes"," is enabled, objects with unknown or extra properties are rejected.",[201,1325,1326],{},"This is useful for security-sensitive endpoints where you want to ensure no unexpected data is passed.",[883,1328,1330],{"id":1329},"using-stricttypes-with-run-types","Using strictTypes with run-types",[222,1332,1334],{"className":224,"code":1333,"language":226,"meta":227,"style":227},"import {createIsTypeFn, createTypeErrorsFn} from '@mionjs\u002Frun-types';\n\ninterface User {\n    name: string;\n    age: number;\n}\n\n\u002F\u002F With strictTypes, extra properties are rejected\nconst isUser = await createIsTypeFn\u003CUser>({strictTypes: true});\n\nisUser({name: 'John', age: 30}); \u002F\u002F true\nisUser({name: 'John', age: 30, extra: 'value'}); \u002F\u002F false (unknown property 'extra')\n\n\u002F\u002F typeErrors also reports unknown properties\nconst getUserErrors = await createTypeErrorsFn\u003CUser>({strictTypes: true});\n\ngetUserErrors({name: 'John', age: 30}); \u002F\u002F []\ngetUserErrors({name: 'John', age: 30, extra: 'value'});\n\u002F\u002F Returns: [{ path: ['extra'], expected: 'never' }]\n",[205,1335,1336,1360,1364,1372,1382,1392,1396,1400,1405,1441,1445,1479,1528,1532,1537,1571,1575,1611,1655],{"__ignoreMap":227},[231,1337,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358],{"class":233,"line":234},[231,1339,238],{"class":237},[231,1341,242],{"class":241},[231,1343,914],{"class":245},[231,1345,248],{"class":241},[231,1347,1216],{"class":245},[231,1349,254],{"class":241},[231,1351,257],{"class":237},[231,1353,260],{"class":241},[231,1355,207],{"class":263},[231,1357,267],{"class":241},[231,1359,270],{"class":241},[231,1361,1362],{"class":233,"line":273},[231,1363,300],{"emptyLinePlaceholder":299},[231,1365,1366,1368,1370],{"class":233,"line":296},[231,1367,314],{"class":313},[231,1369,318],{"class":317},[231,1371,321],{"class":241},[231,1373,1374,1376,1378,1380],{"class":233,"line":303},[231,1375,943],{"class":327},[231,1377,331],{"class":241},[231,1379,334],{"class":317},[231,1381,270],{"class":241},[231,1383,1384,1386,1388,1390],{"class":233,"line":310},[231,1385,354],{"class":327},[231,1387,331],{"class":241},[231,1389,359],{"class":317},[231,1391,270],{"class":241},[231,1393,1394],{"class":233,"line":324},[231,1395,400],{"class":241},[231,1397,1398],{"class":233,"line":339},[231,1399,300],{"emptyLinePlaceholder":299},[231,1401,1402],{"class":233,"line":351},[231,1403,1404],{"class":306},"\u002F\u002F With strictTypes, extra properties are rejected\n",[231,1406,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1435,1437,1439],{"class":233,"line":364},[231,1408,465],{"class":313},[231,1410,974],{"class":245},[231,1412,471],{"class":241},[231,1414,979],{"class":237},[231,1416,982],{"class":484},[231,1418,388],{"class":241},[231,1420,425],{"class":317},[231,1422,989],{"class":241},[231,1424,487],{"class":245},[231,1426,1008],{"class":241},[231,1428,1322],{"class":327},[231,1430,331],{"class":241},[231,1432,1434],{"class":1433},"sfNiH"," true",[231,1436,254],{"class":241},[231,1438,548],{"class":245},[231,1440,270],{"class":241},[231,1442,1443],{"class":233,"line":377},[231,1444,300],{"emptyLinePlaceholder":299},[231,1446,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477],{"class":233,"line":397},[231,1448,1003],{"class":484},[231,1450,487],{"class":245},[231,1452,1008],{"class":241},[231,1454,1011],{"class":327},[231,1456,331],{"class":241},[231,1458,260],{"class":241},[231,1460,1018],{"class":263},[231,1462,267],{"class":241},[231,1464,248],{"class":241},[231,1466,1025],{"class":327},[231,1468,331],{"class":241},[231,1470,1030],{"class":717},[231,1472,254],{"class":241},[231,1474,548],{"class":245},[231,1476,551],{"class":241},[231,1478,554],{"class":306},[231,1480,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505,1507,1510,1512,1514,1517,1519,1521,1523,1525],{"class":233,"line":403},[231,1482,1003],{"class":484},[231,1484,487],{"class":245},[231,1486,1008],{"class":241},[231,1488,1011],{"class":327},[231,1490,331],{"class":241},[231,1492,260],{"class":241},[231,1494,1018],{"class":263},[231,1496,267],{"class":241},[231,1498,248],{"class":241},[231,1500,1025],{"class":327},[231,1502,331],{"class":241},[231,1504,1030],{"class":717},[231,1506,248],{"class":241},[231,1508,1509],{"class":327}," extra",[231,1511,331],{"class":241},[231,1513,260],{"class":241},[231,1515,1516],{"class":263},"value",[231,1518,267],{"class":241},[231,1520,254],{"class":241},[231,1522,548],{"class":245},[231,1524,551],{"class":241},[231,1526,1527],{"class":306}," \u002F\u002F false (unknown property 'extra')\n",[231,1529,1530],{"class":233,"line":408},[231,1531,300],{"emptyLinePlaceholder":299},[231,1533,1534],{"class":233,"line":439},[231,1535,1536],{"class":306},"\u002F\u002F typeErrors also reports unknown properties\n",[231,1538,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569],{"class":233,"line":444},[231,1540,465],{"class":313},[231,1542,1209],{"class":245},[231,1544,471],{"class":241},[231,1546,979],{"class":237},[231,1548,1216],{"class":484},[231,1550,388],{"class":241},[231,1552,425],{"class":317},[231,1554,989],{"class":241},[231,1556,487],{"class":245},[231,1558,1008],{"class":241},[231,1560,1322],{"class":327},[231,1562,331],{"class":241},[231,1564,1434],{"class":1433},[231,1566,254],{"class":241},[231,1568,548],{"class":245},[231,1570,270],{"class":241},[231,1572,1573],{"class":233,"line":450},[231,1574,300],{"emptyLinePlaceholder":299},[231,1576,1577,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600,1602,1604,1606,1608],{"class":233,"line":456},[231,1578,1579],{"class":484},"getUserErrors",[231,1581,487],{"class":245},[231,1583,1008],{"class":241},[231,1585,1011],{"class":327},[231,1587,331],{"class":241},[231,1589,260],{"class":241},[231,1591,1018],{"class":263},[231,1593,267],{"class":241},[231,1595,248],{"class":241},[231,1597,1025],{"class":327},[231,1599,331],{"class":241},[231,1601,1030],{"class":717},[231,1603,254],{"class":241},[231,1605,548],{"class":245},[231,1607,551],{"class":241},[231,1609,1610],{"class":306}," \u002F\u002F []\n",[231,1612,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637,1639,1641,1643,1645,1647,1649,1651,1653],{"class":233,"line":462},[231,1614,1579],{"class":484},[231,1616,487],{"class":245},[231,1618,1008],{"class":241},[231,1620,1011],{"class":327},[231,1622,331],{"class":241},[231,1624,260],{"class":241},[231,1626,1018],{"class":263},[231,1628,267],{"class":241},[231,1630,248],{"class":241},[231,1632,1025],{"class":327},[231,1634,331],{"class":241},[231,1636,1030],{"class":717},[231,1638,248],{"class":241},[231,1640,1509],{"class":327},[231,1642,331],{"class":241},[231,1644,260],{"class":241},[231,1646,1516],{"class":263},[231,1648,267],{"class":241},[231,1650,254],{"class":241},[231,1652,548],{"class":245},[231,1654,270],{"class":241},[231,1656,1657],{"class":233,"line":476},[231,1658,1659],{"class":306},"\u002F\u002F Returns: [{ path: ['extra'], expected: 'never' }]\n",[883,1661,1663],{"id":1662},"using-stricttypes-in-the-router","Using strictTypes in the router",[201,1665,1666,1667,1669],{},"You can enable ",[205,1668,1322],{}," globally via router options or per-route:",[222,1671,1673],{"className":224,"code":1672,"language":226,"meta":227,"style":227},"import {Routes, route, initRouter} from '@mionjs\u002Frouter';\n\ninterface User {\n    name: string;\n    email: string;\n    age: number;\n}\n\n\u002F\u002F Enable strictTypes globally: rejects objects with unknown\u002Fextra properties\nawait initRouter({strictTypes: true});\n\n\u002F\u002F Or enable strictTypes per-route\nconst routes = {\n    \u002F\u002F this route rejects objects with extra properties\n    createUser: route((ctx, user: User): User => user, {strictTypes: true}),\n    \u002F\u002F this route accepts objects with extra properties\n    updateUser: route((ctx, user: Partial\u003CUser>): Partial\u003CUser> => user, {strictTypes: false}),\n} satisfies Routes;\n",[205,1674,1675,1704,1708,1716,1726,1736,1746,1750,1754,1759,1782,1786,1791,1801,1806,1852,1857,1917],{"__ignoreMap":227},[231,1676,1677,1679,1681,1683,1685,1687,1689,1692,1694,1696,1698,1700,1702],{"class":233,"line":234},[231,1678,238],{"class":237},[231,1680,242],{"class":241},[231,1682,38],{"class":245},[231,1684,248],{"class":241},[231,1686,251],{"class":245},[231,1688,248],{"class":241},[231,1690,1691],{"class":245}," initRouter",[231,1693,254],{"class":241},[231,1695,257],{"class":237},[231,1697,260],{"class":241},[231,1699,264],{"class":263},[231,1701,267],{"class":241},[231,1703,270],{"class":241},[231,1705,1706],{"class":233,"line":273},[231,1707,300],{"emptyLinePlaceholder":299},[231,1709,1710,1712,1714],{"class":233,"line":296},[231,1711,314],{"class":313},[231,1713,318],{"class":317},[231,1715,321],{"class":241},[231,1717,1718,1720,1722,1724],{"class":233,"line":303},[231,1719,943],{"class":327},[231,1721,331],{"class":241},[231,1723,334],{"class":317},[231,1725,270],{"class":241},[231,1727,1728,1730,1732,1734],{"class":233,"line":310},[231,1729,342],{"class":327},[231,1731,331],{"class":241},[231,1733,334],{"class":317},[231,1735,270],{"class":241},[231,1737,1738,1740,1742,1744],{"class":233,"line":324},[231,1739,354],{"class":327},[231,1741,331],{"class":241},[231,1743,359],{"class":317},[231,1745,270],{"class":241},[231,1747,1748],{"class":233,"line":339},[231,1749,400],{"class":241},[231,1751,1752],{"class":233,"line":351},[231,1753,300],{"emptyLinePlaceholder":299},[231,1755,1756],{"class":233,"line":364},[231,1757,1758],{"class":306},"\u002F\u002F Enable strictTypes globally: rejects objects with unknown\u002Fextra properties\n",[231,1760,1761,1764,1766,1768,1770,1772,1774,1776,1778,1780],{"class":233,"line":377},[231,1762,1763],{"class":237},"await",[231,1765,1691],{"class":484},[231,1767,487],{"class":245},[231,1769,1008],{"class":241},[231,1771,1322],{"class":327},[231,1773,331],{"class":241},[231,1775,1434],{"class":1433},[231,1777,254],{"class":241},[231,1779,548],{"class":245},[231,1781,270],{"class":241},[231,1783,1784],{"class":233,"line":397},[231,1785,300],{"emptyLinePlaceholder":299},[231,1787,1788],{"class":233,"line":403},[231,1789,1790],{"class":306},"\u002F\u002F Or enable strictTypes per-route\n",[231,1792,1793,1795,1797,1799],{"class":233,"line":408},[231,1794,465],{"class":313},[231,1796,468],{"class":245},[231,1798,471],{"class":241},[231,1800,321],{"class":241},[231,1802,1803],{"class":233,"line":439},[231,1804,1805],{"class":306},"    \u002F\u002F this route rejects objects with extra properties\n",[231,1807,1808,1810,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850],{"class":233,"line":444},[231,1809,479],{"class":327},[231,1811,331],{"class":241},[231,1813,251],{"class":484},[231,1815,487],{"class":245},[231,1817,487],{"class":241},[231,1819,493],{"class":492},[231,1821,248],{"class":241},[231,1823,498],{"class":492},[231,1825,331],{"class":241},[231,1827,318],{"class":317},[231,1829,505],{"class":241},[231,1831,318],{"class":317},[231,1833,510],{"class":313},[231,1835,498],{"class":245},[231,1837,248],{"class":241},[231,1839,242],{"class":241},[231,1841,1322],{"class":327},[231,1843,331],{"class":241},[231,1845,1434],{"class":1433},[231,1847,254],{"class":241},[231,1849,548],{"class":245},[231,1851,615],{"class":241},[231,1853,1854],{"class":233,"line":450},[231,1855,1856],{"class":306},"    \u002F\u002F this route accepts objects with extra properties\n",[231,1858,1859,1862,1864,1866,1868,1870,1872,1874,1876,1878,1881,1883,1885,1888,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908,1911,1913,1915],{"class":233,"line":456},[231,1860,1861],{"class":327},"    updateUser",[231,1863,331],{"class":241},[231,1865,251],{"class":484},[231,1867,487],{"class":245},[231,1869,487],{"class":241},[231,1871,493],{"class":492},[231,1873,248],{"class":241},[231,1875,498],{"class":492},[231,1877,331],{"class":241},[231,1879,1880],{"class":317}," Partial",[231,1882,388],{"class":241},[231,1884,425],{"class":317},[231,1886,1887],{"class":241},">):",[231,1889,1880],{"class":317},[231,1891,388],{"class":241},[231,1893,425],{"class":317},[231,1895,989],{"class":241},[231,1897,510],{"class":313},[231,1899,498],{"class":245},[231,1901,248],{"class":241},[231,1903,242],{"class":241},[231,1905,1322],{"class":327},[231,1907,331],{"class":241},[231,1909,1910],{"class":1433}," false",[231,1912,254],{"class":241},[231,1914,548],{"class":245},[231,1916,615],{"class":241},[231,1918,1919,1921,1923,1925],{"class":233,"line":462},[231,1920,254],{"class":241},[231,1922,623],{"class":237},[231,1924,626],{"class":317},[231,1926,270],{"class":241},[1928,1929,1930,1931,1934,1935,1937],"note",{},"When a type has an index signature (e.g. ",[205,1932,1933],{},"[key: string]: any","), ",[205,1936,1322],{}," is automatically skipped since the type explicitly allows arbitrary properties.",[1939,1940,1941],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}","Automatic validation in mion using RunTypes.","md",null,{"toc":26},{"title":54,"description":1942},"6ldypLNUdqJLYTINOhyfSHCh5yTF6UL_fIM4NNrFKHg",[1949,1951],{"title":50,"path":51,"stem":52,"description":1950,"children":-1},"Learn how to handle errors in mion APIs with strongly typed error returns.",{"title":58,"path":59,"stem":60,"description":1952,"children":-1},"Automatic serialization in mion using RunTypes.",1778674524008]