[{"data":1,"prerenderedAt":4171},["ShallowReactive",2],{"navigation_docs":3,"-run-types-overview":195,"-run-types-overview-surround":4166},[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":108,"body":197,"description":4160,"extension":4161,"links":4162,"meta":4163,"navigation":336,"path":103,"seo":4164,"stem":109,"__hash__":4165},"docs\u002F4.run-types\u002F0.overview.md",{"type":198,"value":199},"minimark",[200,208,213,249,262,265,269,276,287,546,552,555,713,715,720,726,729,989,1004,1010,1015,1193,1199,1202,1413,1429,1431,1435,1438,1444,1447,1521,1527,1530,1602,1604,1607,1613,1616,1768,1771,1909,1911,1915,2457,2459,2463,2470,2476,2482,2530,2536,2539,2663,2665,2669,2677,2683,2688,2702,2707,2723,2975,2981,2985,2988,3000,3004,3011,3065,3071,3082,3180,3197,3201,3208,3222,3227,3328,3337,3597,3601,3604,3630,3711,3714,3717,3721,3728,3732,3742,3794,3797,3801,3808,3900,3905,3965,3968,3988,3992,3999,4006,4156],[201,202,203,207],"p",{},[204,205,206],"code",{},"@mionjs\u002Frun-types"," is a powerful JIT (Just-In-Time) compilation library that generates optimized validation, serialization, and mocking functions directly from TypeScript types. Unlike schema-based libraries like Zod or AJV, run-types leverages TypeScript's type system at compile time to generate highly efficient runtime code.",[209,210,212],"h2",{"id":211},"key-features","Key Features",[214,215,216,225,231,237,243],"ul",{},[217,218,219,220,224],"li",{},"✅ ",[221,222,223],"strong",{},"Type-Safe Validation",": Validate data against TypeScript types at runtime",[217,226,219,227,230],{},[221,228,229],{},"JSON Serialization",": Handle complex types (Date, BigInt, Map, Set) in JSON",[217,232,219,233,236],{},[221,234,235],{},"Binary Serialization",": Efficient binary encoding for performance-critical scenarios",[217,238,219,239,242],{},[221,240,241],{},"Mock Data Generation",": Generate valid test data from types",[217,244,219,245,248],{},[221,246,247],{},"JIT Compilation",": Functions are compiled on first use for optimal performance",[250,251,252,253,257,258,261],"warning",{},"RunTypes requires TypeScript type metadata at runtime. See ",[254,255,123],"a",{"href":256},".\u002Fcaveats"," for common pitfalls like type-only imports and missing type annotations. Use the ",[254,259,260],{"href":141},"ESLint rules"," to catch these issues.",[263,264],"hr",{},[209,266,268],{"id":267},"validation-functions","Validation Functions",[270,271,273],"h4",{"id":272},"createistypefnt",[204,274,275],{},"createIsTypeFn\u003CT>()",[201,277,278,279,282,283,286],{},"Returns a function that checks if a value matches the type. Returns ",[204,280,281],{},"true"," or ",[204,284,285],{},"false",".",[288,289,294],"pre",{"className":290,"code":291,"language":292,"meta":293,"style":293},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","ts","",[204,295,296,331,338,352,367,380,386,391,424,429,477,505],{"__ignoreMap":293},[297,298,301,305,309,313,316,319,322,325,328],"span",{"class":299,"line":300},"line",1,[297,302,304],{"class":303},"s7zQu","import",[297,306,308],{"class":307},"sMK4o"," {",[297,310,312],{"class":311},"sTEyZ","createIsTypeFn",[297,314,315],{"class":307},"}",[297,317,318],{"class":303}," from",[297,320,321],{"class":307}," '",[297,323,206],{"class":324},"sfazB",[297,326,327],{"class":307},"'",[297,329,330],{"class":307},";\n",[297,332,334],{"class":299,"line":333},2,[297,335,337],{"emptyLinePlaceholder":336},true,"\n",[297,339,341,345,349],{"class":299,"line":340},3,[297,342,344],{"class":343},"spNyl","interface",[297,346,348],{"class":347},"sBMFI"," User",[297,350,351],{"class":307}," {\n",[297,353,355,359,362,365],{"class":299,"line":354},4,[297,356,358],{"class":357},"swJcz","    name",[297,360,361],{"class":307},":",[297,363,364],{"class":347}," string",[297,366,330],{"class":307},[297,368,370,373,375,378],{"class":299,"line":369},5,[297,371,372],{"class":357},"    age",[297,374,361],{"class":307},[297,376,377],{"class":347}," number",[297,379,330],{"class":307},[297,381,383],{"class":299,"line":382},6,[297,384,385],{"class":307},"}\n",[297,387,389],{"class":299,"line":388},7,[297,390,337],{"emptyLinePlaceholder":336},[297,392,394,397,400,403,406,410,413,416,419,422],{"class":299,"line":393},8,[297,395,396],{"class":343},"const",[297,398,399],{"class":311}," isUser ",[297,401,402],{"class":307},"=",[297,404,405],{"class":303}," await",[297,407,409],{"class":408},"s2Zo4"," createIsTypeFn",[297,411,412],{"class":307},"\u003C",[297,414,415],{"class":347},"User",[297,417,418],{"class":307},">",[297,420,421],{"class":311},"()",[297,423,330],{"class":307},[297,425,427],{"class":299,"line":426},9,[297,428,337],{"emptyLinePlaceholder":336},[297,430,432,435,438,441,444,446,448,451,453,456,459,461,465,467,470,473],{"class":299,"line":431},10,[297,433,434],{"class":408},"isUser",[297,436,437],{"class":311},"(",[297,439,440],{"class":307},"{",[297,442,443],{"class":357},"name",[297,445,361],{"class":307},[297,447,321],{"class":307},[297,449,450],{"class":324},"John",[297,452,327],{"class":307},[297,454,455],{"class":307},",",[297,457,458],{"class":357}," age",[297,460,361],{"class":307},[297,462,464],{"class":463},"sbssI"," 30",[297,466,315],{"class":307},[297,468,469],{"class":311},")",[297,471,472],{"class":307},";",[297,474,476],{"class":475},"sHwdD"," \u002F\u002F true\n",[297,478,480,482,484,486,488,490,492,494,496,498,500,502],{"class":299,"line":479},11,[297,481,434],{"class":408},[297,483,437],{"class":311},[297,485,440],{"class":307},[297,487,443],{"class":357},[297,489,361],{"class":307},[297,491,321],{"class":307},[297,493,450],{"class":324},[297,495,327],{"class":307},[297,497,315],{"class":307},[297,499,469],{"class":311},[297,501,472],{"class":307},[297,503,504],{"class":475}," \u002F\u002F false (missing age)\n",[297,506,508,510,512,514,516,518,520,522,524,526,528,530,532,535,537,539,541,543],{"class":299,"line":507},12,[297,509,434],{"class":408},[297,511,437],{"class":311},[297,513,440],{"class":307},[297,515,443],{"class":357},[297,517,361],{"class":307},[297,519,321],{"class":307},[297,521,450],{"class":324},[297,523,327],{"class":307},[297,525,455],{"class":307},[297,527,458],{"class":357},[297,529,361],{"class":307},[297,531,321],{"class":307},[297,533,534],{"class":324},"30",[297,536,327],{"class":307},[297,538,315],{"class":307},[297,540,469],{"class":311},[297,542,472],{"class":307},[297,544,545],{"class":475}," \u002F\u002F false (age is string)\n",[270,547,549],{"id":548},"createtypeerrorsfnt",[204,550,551],{},"createTypeErrorsFn\u003CT>()",[201,553,554],{},"Returns a function that returns detailed error information when validation fails.",[288,556,558],{"className":290,"code":557,"language":292,"meta":293,"style":293},"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",[204,559,560,581,585,593,603,613,617,621,645,649,691,696,701,707],{"__ignoreMap":293},[297,561,562,564,566,569,571,573,575,577,579],{"class":299,"line":300},[297,563,304],{"class":303},[297,565,308],{"class":307},[297,567,568],{"class":311},"createTypeErrorsFn",[297,570,315],{"class":307},[297,572,318],{"class":303},[297,574,321],{"class":307},[297,576,206],{"class":324},[297,578,327],{"class":307},[297,580,330],{"class":307},[297,582,583],{"class":299,"line":333},[297,584,337],{"emptyLinePlaceholder":336},[297,586,587,589,591],{"class":299,"line":340},[297,588,344],{"class":343},[297,590,348],{"class":347},[297,592,351],{"class":307},[297,594,595,597,599,601],{"class":299,"line":354},[297,596,358],{"class":357},[297,598,361],{"class":307},[297,600,364],{"class":347},[297,602,330],{"class":307},[297,604,605,607,609,611],{"class":299,"line":369},[297,606,372],{"class":357},[297,608,361],{"class":307},[297,610,377],{"class":347},[297,612,330],{"class":307},[297,614,615],{"class":299,"line":382},[297,616,385],{"class":307},[297,618,619],{"class":299,"line":388},[297,620,337],{"emptyLinePlaceholder":336},[297,622,623,625,628,630,632,635,637,639,641,643],{"class":299,"line":393},[297,624,396],{"class":343},[297,626,627],{"class":311}," getUserErrors ",[297,629,402],{"class":307},[297,631,405],{"class":303},[297,633,634],{"class":408}," createTypeErrorsFn",[297,636,412],{"class":307},[297,638,415],{"class":347},[297,640,418],{"class":307},[297,642,421],{"class":311},[297,644,330],{"class":307},[297,646,647],{"class":299,"line":426},[297,648,337],{"emptyLinePlaceholder":336},[297,650,651,653,656,658,661,663,665,667,669,672,674,676,678,680,683,685,687,689],{"class":299,"line":431},[297,652,396],{"class":343},[297,654,655],{"class":311}," errors ",[297,657,402],{"class":307},[297,659,660],{"class":408}," getUserErrors",[297,662,437],{"class":311},[297,664,440],{"class":307},[297,666,443],{"class":357},[297,668,361],{"class":307},[297,670,671],{"class":463}," 123",[297,673,455],{"class":307},[297,675,458],{"class":357},[297,677,361],{"class":307},[297,679,321],{"class":307},[297,681,682],{"class":324},"invalid",[297,684,327],{"class":307},[297,686,315],{"class":307},[297,688,469],{"class":311},[297,690,330],{"class":307},[297,692,693],{"class":299,"line":479},[297,694,695],{"class":475},"\u002F\u002F Returns: [\n",[297,697,698],{"class":299,"line":507},[297,699,700],{"class":475},"\u002F\u002F   { path: ['name'], expected: 'string', actual: 'number' },\n",[297,702,704],{"class":299,"line":703},13,[297,705,706],{"class":475},"\u002F\u002F   { path: ['age'], expected: 'number', actual: 'string' }\n",[297,708,710],{"class":299,"line":709},14,[297,711,712],{"class":475},"\u002F\u002F ]\n",[263,714],{},[716,717,719],"h3",{"id":718},"json-serialization-functions","JSON Serialization Functions",[270,721,723],{"id":722},"createprepareforjsonfnt",[204,724,725],{},"createPrepareForJsonFn\u003CT>()",[201,727,728],{},"Converts JavaScript values to JSON-compatible format. Handles special types like Date, BigInt, Map, Set.",[288,730,732],{"className":290,"code":731,"language":292,"meta":293,"style":293},"import {createPrepareForJsonFn} from '@mionjs\u002Frun-types';\n\ninterface Event {\n    name: string;\n    timestamp: Date;\n    metadata: Map\u003Cstring, any>;\n}\n\nconst prepareEvent = await createPrepareForJsonFn\u003CEvent>();\n\nconst event = {\n    name: 'Click',\n    timestamp: new Date('2025-01-15'),\n    metadata: new Map([['source', 'web']]),\n};\n\nconst jsonReady = prepareEvent(event);\n\u002F\u002F { name: 'Click', timestamp: '2025-01-15T00:00:00.000Z', metadata: [['source', 'web']] }\nJSON.stringify(jsonReady); \u002F\u002F Now works correctly!\n",[204,733,734,755,759,768,778,790,813,817,821,846,850,861,877,901,935,941,946,964,970],{"__ignoreMap":293},[297,735,736,738,740,743,745,747,749,751,753],{"class":299,"line":300},[297,737,304],{"class":303},[297,739,308],{"class":307},[297,741,742],{"class":311},"createPrepareForJsonFn",[297,744,315],{"class":307},[297,746,318],{"class":303},[297,748,321],{"class":307},[297,750,206],{"class":324},[297,752,327],{"class":307},[297,754,330],{"class":307},[297,756,757],{"class":299,"line":333},[297,758,337],{"emptyLinePlaceholder":336},[297,760,761,763,766],{"class":299,"line":340},[297,762,344],{"class":343},[297,764,765],{"class":347}," Event",[297,767,351],{"class":307},[297,769,770,772,774,776],{"class":299,"line":354},[297,771,358],{"class":357},[297,773,361],{"class":307},[297,775,364],{"class":347},[297,777,330],{"class":307},[297,779,780,783,785,788],{"class":299,"line":369},[297,781,782],{"class":357},"    timestamp",[297,784,361],{"class":307},[297,786,787],{"class":347}," Date",[297,789,330],{"class":307},[297,791,792,795,797,800,802,805,807,810],{"class":299,"line":382},[297,793,794],{"class":357},"    metadata",[297,796,361],{"class":307},[297,798,799],{"class":347}," Map",[297,801,412],{"class":307},[297,803,804],{"class":347},"string",[297,806,455],{"class":307},[297,808,809],{"class":347}," any",[297,811,812],{"class":307},">;\n",[297,814,815],{"class":299,"line":388},[297,816,385],{"class":307},[297,818,819],{"class":299,"line":393},[297,820,337],{"emptyLinePlaceholder":336},[297,822,823,825,828,830,832,835,837,840,842,844],{"class":299,"line":426},[297,824,396],{"class":343},[297,826,827],{"class":311}," prepareEvent ",[297,829,402],{"class":307},[297,831,405],{"class":303},[297,833,834],{"class":408}," createPrepareForJsonFn",[297,836,412],{"class":307},[297,838,839],{"class":347},"Event",[297,841,418],{"class":307},[297,843,421],{"class":311},[297,845,330],{"class":307},[297,847,848],{"class":299,"line":431},[297,849,337],{"emptyLinePlaceholder":336},[297,851,852,854,857,859],{"class":299,"line":479},[297,853,396],{"class":343},[297,855,856],{"class":311}," event ",[297,858,402],{"class":307},[297,860,351],{"class":307},[297,862,863,865,867,869,872,874],{"class":299,"line":507},[297,864,358],{"class":357},[297,866,361],{"class":307},[297,868,321],{"class":307},[297,870,871],{"class":324},"Click",[297,873,327],{"class":307},[297,875,876],{"class":307},",\n",[297,878,879,881,883,886,888,890,892,895,897,899],{"class":299,"line":703},[297,880,782],{"class":357},[297,882,361],{"class":307},[297,884,885],{"class":307}," new",[297,887,787],{"class":408},[297,889,437],{"class":311},[297,891,327],{"class":307},[297,893,894],{"class":324},"2025-01-15",[297,896,327],{"class":307},[297,898,469],{"class":311},[297,900,876],{"class":307},[297,902,903,905,907,909,911,914,916,919,921,923,925,928,930,933],{"class":299,"line":709},[297,904,794],{"class":357},[297,906,361],{"class":307},[297,908,885],{"class":307},[297,910,799],{"class":408},[297,912,913],{"class":311},"([[",[297,915,327],{"class":307},[297,917,918],{"class":324},"source",[297,920,327],{"class":307},[297,922,455],{"class":307},[297,924,321],{"class":307},[297,926,927],{"class":324},"web",[297,929,327],{"class":307},[297,931,932],{"class":311},"]])",[297,934,876],{"class":307},[297,936,938],{"class":299,"line":937},15,[297,939,940],{"class":307},"};\n",[297,942,944],{"class":299,"line":943},16,[297,945,337],{"emptyLinePlaceholder":336},[297,947,949,951,954,956,959,962],{"class":299,"line":948},17,[297,950,396],{"class":343},[297,952,953],{"class":311}," jsonReady ",[297,955,402],{"class":307},[297,957,958],{"class":408}," prepareEvent",[297,960,961],{"class":311},"(event)",[297,963,330],{"class":307},[297,965,967],{"class":299,"line":966},18,[297,968,969],{"class":475},"\u002F\u002F { name: 'Click', timestamp: '2025-01-15T00:00:00.000Z', metadata: [['source', 'web']] }\n",[297,971,973,976,978,981,984,986],{"class":299,"line":972},19,[297,974,975],{"class":311},"JSON",[297,977,286],{"class":307},[297,979,980],{"class":408},"stringify",[297,982,983],{"class":311},"(jsonReady)",[297,985,472],{"class":307},[297,987,988],{"class":475}," \u002F\u002F Now works correctly!\n",[990,991,992,995,996,999,1000,1003],"note",{},[204,993,994],{},"prepareForJson"," mutates the original object for performance. This avoids creating unnecessary copies in request\u002Fresponse pipelines.\n",[997,998],"br",{},"\nIf you need to preserve the original object, use ",[204,1001,1002],{},"createStringifyJsonFn"," instead — it does not mutate the input.",[270,1005,1007],{"id":1006},"createrestorefromjsonfnt",[204,1008,1009],{},"createRestoreFromJsonFn\u003CT>()",[201,1011,1012,1013,286],{},"Restores JavaScript types from JSON-parsed data. The inverse of ",[204,1014,994],{},[288,1016,1018],{"className":290,"code":1017,"language":292,"meta":293,"style":293},"import {createRestoreFromJsonFn} from '@mionjs\u002Frun-types';\n\ninterface Event {\n    name: string;\n    timestamp: Date;\n    metadata: Map\u003Cstring, any>;\n}\n\nconst restoreEvent = await createRestoreFromJsonFn\u003CEvent>();\n\nconst jsonString = '{\"name\":\"Click\",\"timestamp\":\"2025-01-15T00:00:00.000Z\",\"metadata\":[[\"source\",\"web\"]]}';\nconst parsed = JSON.parse(jsonString);\nconst event = restoreEvent(parsed);\n\u002F\u002F event.timestamp is now a Date object\n\u002F\u002F event.metadata is now a Map\n",[204,1019,1020,1041,1045,1053,1063,1073,1091,1095,1099,1123,1127,1145,1167,1183,1188],{"__ignoreMap":293},[297,1021,1022,1024,1026,1029,1031,1033,1035,1037,1039],{"class":299,"line":300},[297,1023,304],{"class":303},[297,1025,308],{"class":307},[297,1027,1028],{"class":311},"createRestoreFromJsonFn",[297,1030,315],{"class":307},[297,1032,318],{"class":303},[297,1034,321],{"class":307},[297,1036,206],{"class":324},[297,1038,327],{"class":307},[297,1040,330],{"class":307},[297,1042,1043],{"class":299,"line":333},[297,1044,337],{"emptyLinePlaceholder":336},[297,1046,1047,1049,1051],{"class":299,"line":340},[297,1048,344],{"class":343},[297,1050,765],{"class":347},[297,1052,351],{"class":307},[297,1054,1055,1057,1059,1061],{"class":299,"line":354},[297,1056,358],{"class":357},[297,1058,361],{"class":307},[297,1060,364],{"class":347},[297,1062,330],{"class":307},[297,1064,1065,1067,1069,1071],{"class":299,"line":369},[297,1066,782],{"class":357},[297,1068,361],{"class":307},[297,1070,787],{"class":347},[297,1072,330],{"class":307},[297,1074,1075,1077,1079,1081,1083,1085,1087,1089],{"class":299,"line":382},[297,1076,794],{"class":357},[297,1078,361],{"class":307},[297,1080,799],{"class":347},[297,1082,412],{"class":307},[297,1084,804],{"class":347},[297,1086,455],{"class":307},[297,1088,809],{"class":347},[297,1090,812],{"class":307},[297,1092,1093],{"class":299,"line":388},[297,1094,385],{"class":307},[297,1096,1097],{"class":299,"line":393},[297,1098,337],{"emptyLinePlaceholder":336},[297,1100,1101,1103,1106,1108,1110,1113,1115,1117,1119,1121],{"class":299,"line":426},[297,1102,396],{"class":343},[297,1104,1105],{"class":311}," restoreEvent ",[297,1107,402],{"class":307},[297,1109,405],{"class":303},[297,1111,1112],{"class":408}," createRestoreFromJsonFn",[297,1114,412],{"class":307},[297,1116,839],{"class":347},[297,1118,418],{"class":307},[297,1120,421],{"class":311},[297,1122,330],{"class":307},[297,1124,1125],{"class":299,"line":431},[297,1126,337],{"emptyLinePlaceholder":336},[297,1128,1129,1131,1134,1136,1138,1141,1143],{"class":299,"line":479},[297,1130,396],{"class":343},[297,1132,1133],{"class":311}," jsonString ",[297,1135,402],{"class":307},[297,1137,321],{"class":307},[297,1139,1140],{"class":324},"{\"name\":\"Click\",\"timestamp\":\"2025-01-15T00:00:00.000Z\",\"metadata\":[[\"source\",\"web\"]]}",[297,1142,327],{"class":307},[297,1144,330],{"class":307},[297,1146,1147,1149,1152,1154,1157,1159,1162,1165],{"class":299,"line":507},[297,1148,396],{"class":343},[297,1150,1151],{"class":311}," parsed ",[297,1153,402],{"class":307},[297,1155,1156],{"class":311}," JSON",[297,1158,286],{"class":307},[297,1160,1161],{"class":408},"parse",[297,1163,1164],{"class":311},"(jsonString)",[297,1166,330],{"class":307},[297,1168,1169,1171,1173,1175,1178,1181],{"class":299,"line":703},[297,1170,396],{"class":343},[297,1172,856],{"class":311},[297,1174,402],{"class":307},[297,1176,1177],{"class":408}," restoreEvent",[297,1179,1180],{"class":311},"(parsed)",[297,1182,330],{"class":307},[297,1184,1185],{"class":299,"line":709},[297,1186,1187],{"class":475},"\u002F\u002F event.timestamp is now a Date object\n",[297,1189,1190],{"class":299,"line":937},[297,1191,1192],{"class":475},"\u002F\u002F event.metadata is now a Map\n",[270,1194,1196],{"id":1195},"createstringifyjsonfnt",[204,1197,1198],{},"createStringifyJsonFn\u003CT>()",[201,1200,1201],{},"Directly parses types into JSON strings, does not modify the original object.",[288,1203,1205],{"className":290,"code":1204,"language":292,"meta":293,"style":293},"import {createStringifyJsonFn} from '@mionjs\u002Frun-types';\n\ninterface Event {\n    name: string;\n    timestamp: Date;\n    metadata: Map\u003Cstring, any>;\n}\n\nconst event = {\n    name: 'Click',\n    timestamp: new Date('2025-01-15'),\n    metadata: new Map([['source', 'web']]),\n};\n\nconst stringifyEvent = await createStringifyJsonFn\u003CEvent>();\nconst jsonString = stringifyEvent(event);\n\u002F\u002F Equivalent to: JSON.stringify(prepareForJson(event)) but faster\n",[204,1206,1207,1227,1231,1239,1249,1259,1277,1281,1285,1295,1309,1331,1361,1365,1369,1393,1408],{"__ignoreMap":293},[297,1208,1209,1211,1213,1215,1217,1219,1221,1223,1225],{"class":299,"line":300},[297,1210,304],{"class":303},[297,1212,308],{"class":307},[297,1214,1002],{"class":311},[297,1216,315],{"class":307},[297,1218,318],{"class":303},[297,1220,321],{"class":307},[297,1222,206],{"class":324},[297,1224,327],{"class":307},[297,1226,330],{"class":307},[297,1228,1229],{"class":299,"line":333},[297,1230,337],{"emptyLinePlaceholder":336},[297,1232,1233,1235,1237],{"class":299,"line":340},[297,1234,344],{"class":343},[297,1236,765],{"class":347},[297,1238,351],{"class":307},[297,1240,1241,1243,1245,1247],{"class":299,"line":354},[297,1242,358],{"class":357},[297,1244,361],{"class":307},[297,1246,364],{"class":347},[297,1248,330],{"class":307},[297,1250,1251,1253,1255,1257],{"class":299,"line":369},[297,1252,782],{"class":357},[297,1254,361],{"class":307},[297,1256,787],{"class":347},[297,1258,330],{"class":307},[297,1260,1261,1263,1265,1267,1269,1271,1273,1275],{"class":299,"line":382},[297,1262,794],{"class":357},[297,1264,361],{"class":307},[297,1266,799],{"class":347},[297,1268,412],{"class":307},[297,1270,804],{"class":347},[297,1272,455],{"class":307},[297,1274,809],{"class":347},[297,1276,812],{"class":307},[297,1278,1279],{"class":299,"line":388},[297,1280,385],{"class":307},[297,1282,1283],{"class":299,"line":393},[297,1284,337],{"emptyLinePlaceholder":336},[297,1286,1287,1289,1291,1293],{"class":299,"line":426},[297,1288,396],{"class":343},[297,1290,856],{"class":311},[297,1292,402],{"class":307},[297,1294,351],{"class":307},[297,1296,1297,1299,1301,1303,1305,1307],{"class":299,"line":431},[297,1298,358],{"class":357},[297,1300,361],{"class":307},[297,1302,321],{"class":307},[297,1304,871],{"class":324},[297,1306,327],{"class":307},[297,1308,876],{"class":307},[297,1310,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329],{"class":299,"line":479},[297,1312,782],{"class":357},[297,1314,361],{"class":307},[297,1316,885],{"class":307},[297,1318,787],{"class":408},[297,1320,437],{"class":311},[297,1322,327],{"class":307},[297,1324,894],{"class":324},[297,1326,327],{"class":307},[297,1328,469],{"class":311},[297,1330,876],{"class":307},[297,1332,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359],{"class":299,"line":507},[297,1334,794],{"class":357},[297,1336,361],{"class":307},[297,1338,885],{"class":307},[297,1340,799],{"class":408},[297,1342,913],{"class":311},[297,1344,327],{"class":307},[297,1346,918],{"class":324},[297,1348,327],{"class":307},[297,1350,455],{"class":307},[297,1352,321],{"class":307},[297,1354,927],{"class":324},[297,1356,327],{"class":307},[297,1358,932],{"class":311},[297,1360,876],{"class":307},[297,1362,1363],{"class":299,"line":703},[297,1364,940],{"class":307},[297,1366,1367],{"class":299,"line":709},[297,1368,337],{"emptyLinePlaceholder":336},[297,1370,1371,1373,1376,1378,1380,1383,1385,1387,1389,1391],{"class":299,"line":937},[297,1372,396],{"class":343},[297,1374,1375],{"class":311}," stringifyEvent ",[297,1377,402],{"class":307},[297,1379,405],{"class":303},[297,1381,1382],{"class":408}," createStringifyJsonFn",[297,1384,412],{"class":307},[297,1386,839],{"class":347},[297,1388,418],{"class":307},[297,1390,421],{"class":311},[297,1392,330],{"class":307},[297,1394,1395,1397,1399,1401,1404,1406],{"class":299,"line":943},[297,1396,396],{"class":343},[297,1398,1133],{"class":311},[297,1400,402],{"class":307},[297,1402,1403],{"class":408}," stringifyEvent",[297,1405,961],{"class":311},[297,1407,330],{"class":307},[297,1409,1410],{"class":299,"line":948},[297,1411,1412],{"class":475},"\u002F\u002F Equivalent to: JSON.stringify(prepareForJson(event)) but faster\n",[990,1414,1415,1417,1418,1421,1422,1424,1425,1428],{},[204,1416,1002],{}," uses javascript to traverse the objects and convert them into JSON string. It does not use ",[204,1419,1420],{},"JSON.stringify"," directly!\n",[997,1423],{},"\nThis might result in a slightly slower performance than ",[204,1426,1427],{},"prepareForJson => JSON.stringify"," but does not mutate the input.",[263,1430],{},[716,1432,1434],{"id":1433},"binary-serialization-functions","Binary Serialization Functions",[201,1436,1437],{},"For performance-critical scenarios, binary serialization provides compact encoding.",[270,1439,1441],{"id":1440},"createtobinaryfnt",[204,1442,1443],{},"createToBinaryFn\u003CT>()",[201,1445,1446],{},"Serializes a value to a compact binary format (Uint8Array).",[288,1448,1450],{"className":290,"code":1449,"language":292,"meta":293,"style":293},"const toBinary = await createToBinaryFn\u003CUser>();\nconst buffer = toBinary({name: 'John', age: 30});\n\u002F\u002F Returns Uint8Array with optimized binary encoding\n",[204,1451,1452,1476,1516],{"__ignoreMap":293},[297,1453,1454,1456,1459,1461,1463,1466,1468,1470,1472,1474],{"class":299,"line":300},[297,1455,396],{"class":343},[297,1457,1458],{"class":311}," toBinary ",[297,1460,402],{"class":307},[297,1462,405],{"class":303},[297,1464,1465],{"class":408}," createToBinaryFn",[297,1467,412],{"class":307},[297,1469,415],{"class":347},[297,1471,418],{"class":307},[297,1473,421],{"class":311},[297,1475,330],{"class":307},[297,1477,1478,1480,1483,1485,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514],{"class":299,"line":333},[297,1479,396],{"class":343},[297,1481,1482],{"class":311}," buffer ",[297,1484,402],{"class":307},[297,1486,1487],{"class":408}," toBinary",[297,1489,437],{"class":311},[297,1491,440],{"class":307},[297,1493,443],{"class":357},[297,1495,361],{"class":307},[297,1497,321],{"class":307},[297,1499,450],{"class":324},[297,1501,327],{"class":307},[297,1503,455],{"class":307},[297,1505,458],{"class":357},[297,1507,361],{"class":307},[297,1509,464],{"class":463},[297,1511,315],{"class":307},[297,1513,469],{"class":311},[297,1515,330],{"class":307},[297,1517,1518],{"class":299,"line":340},[297,1519,1520],{"class":475},"\u002F\u002F Returns Uint8Array with optimized binary encoding\n",[270,1522,1524],{"id":1523},"createfrombinaryfnt",[204,1525,1526],{},"createFromBinaryFn\u003CT>()",[201,1528,1529],{},"Deserializes a binary buffer back to the original type.",[288,1531,1533],{"className":290,"code":1532,"language":292,"meta":293,"style":293},"const fromBinary = await createFromBinaryFn\u003CUser>();\nconst bufferInput = new Uint8Array(); \u002F\u002F from previous example\nconst user = fromBinary(bufferInput);\n\u002F\u002F user is now { name: 'John', age: 30 }\n",[204,1534,1535,1559,1580,1597],{"__ignoreMap":293},[297,1536,1537,1539,1542,1544,1546,1549,1551,1553,1555,1557],{"class":299,"line":300},[297,1538,396],{"class":343},[297,1540,1541],{"class":311}," fromBinary ",[297,1543,402],{"class":307},[297,1545,405],{"class":303},[297,1547,1548],{"class":408}," createFromBinaryFn",[297,1550,412],{"class":307},[297,1552,415],{"class":347},[297,1554,418],{"class":307},[297,1556,421],{"class":311},[297,1558,330],{"class":307},[297,1560,1561,1563,1566,1568,1570,1573,1575,1577],{"class":299,"line":333},[297,1562,396],{"class":343},[297,1564,1565],{"class":311}," bufferInput ",[297,1567,402],{"class":307},[297,1569,885],{"class":307},[297,1571,1572],{"class":408}," Uint8Array",[297,1574,421],{"class":311},[297,1576,472],{"class":307},[297,1578,1579],{"class":475}," \u002F\u002F from previous example\n",[297,1581,1582,1584,1587,1589,1592,1595],{"class":299,"line":340},[297,1583,396],{"class":343},[297,1585,1586],{"class":311}," user ",[297,1588,402],{"class":307},[297,1590,1591],{"class":408}," fromBinary",[297,1593,1594],{"class":311},"(bufferInput)",[297,1596,330],{"class":307},[297,1598,1599],{"class":299,"line":354},[297,1600,1601],{"class":475},"\u002F\u002F user is now { name: 'John', age: 30 }\n",[263,1603],{},[716,1605,241],{"id":1606},"mock-data-generation",[270,1608,1610],{"id":1609},"createmocktypefnt",[204,1611,1612],{},"createMockTypeFn\u003CT>()",[201,1614,1615],{},"Generates valid mock data for any type. Perfect for testing.",[288,1617,1619],{"className":290,"code":1618,"language":292,"meta":293,"style":293},"interface User {\n    id: string;\n    name: string;\n    email: string;\n    age: number;\n    createdAt: Date;\n}\n\nconst mockUser = await createMockTypeFn\u003CUser>();\n\nconst user = mockUser();\n\u002F\u002F {\n\u002F\u002F   id: 'abc123xyz',\n\u002F\u002F   name: 'mockString',\n\u002F\u002F   email: 'test@example.com',\n\u002F\u002F   age: 42,\n\u002F\u002F   createdAt: Date('2025-01-15T12:00:00.000Z')\n\u002F\u002F }\n",[204,1620,1621,1629,1640,1650,1661,1671,1682,1686,1690,1714,1718,1733,1738,1743,1748,1753,1758,1763],{"__ignoreMap":293},[297,1622,1623,1625,1627],{"class":299,"line":300},[297,1624,344],{"class":343},[297,1626,348],{"class":347},[297,1628,351],{"class":307},[297,1630,1631,1634,1636,1638],{"class":299,"line":333},[297,1632,1633],{"class":357},"    id",[297,1635,361],{"class":307},[297,1637,364],{"class":347},[297,1639,330],{"class":307},[297,1641,1642,1644,1646,1648],{"class":299,"line":340},[297,1643,358],{"class":357},[297,1645,361],{"class":307},[297,1647,364],{"class":347},[297,1649,330],{"class":307},[297,1651,1652,1655,1657,1659],{"class":299,"line":354},[297,1653,1654],{"class":357},"    email",[297,1656,361],{"class":307},[297,1658,364],{"class":347},[297,1660,330],{"class":307},[297,1662,1663,1665,1667,1669],{"class":299,"line":369},[297,1664,372],{"class":357},[297,1666,361],{"class":307},[297,1668,377],{"class":347},[297,1670,330],{"class":307},[297,1672,1673,1676,1678,1680],{"class":299,"line":382},[297,1674,1675],{"class":357},"    createdAt",[297,1677,361],{"class":307},[297,1679,787],{"class":347},[297,1681,330],{"class":307},[297,1683,1684],{"class":299,"line":388},[297,1685,385],{"class":307},[297,1687,1688],{"class":299,"line":393},[297,1689,337],{"emptyLinePlaceholder":336},[297,1691,1692,1694,1697,1699,1701,1704,1706,1708,1710,1712],{"class":299,"line":426},[297,1693,396],{"class":343},[297,1695,1696],{"class":311}," mockUser ",[297,1698,402],{"class":307},[297,1700,405],{"class":303},[297,1702,1703],{"class":408}," createMockTypeFn",[297,1705,412],{"class":307},[297,1707,415],{"class":347},[297,1709,418],{"class":307},[297,1711,421],{"class":311},[297,1713,330],{"class":307},[297,1715,1716],{"class":299,"line":431},[297,1717,337],{"emptyLinePlaceholder":336},[297,1719,1720,1722,1724,1726,1729,1731],{"class":299,"line":479},[297,1721,396],{"class":343},[297,1723,1586],{"class":311},[297,1725,402],{"class":307},[297,1727,1728],{"class":408}," mockUser",[297,1730,421],{"class":311},[297,1732,330],{"class":307},[297,1734,1735],{"class":299,"line":507},[297,1736,1737],{"class":475},"\u002F\u002F {\n",[297,1739,1740],{"class":299,"line":703},[297,1741,1742],{"class":475},"\u002F\u002F   id: 'abc123xyz',\n",[297,1744,1745],{"class":299,"line":709},[297,1746,1747],{"class":475},"\u002F\u002F   name: 'mockString',\n",[297,1749,1750],{"class":299,"line":937},[297,1751,1752],{"class":475},"\u002F\u002F   email: 'test@example.com',\n",[297,1754,1755],{"class":299,"line":943},[297,1756,1757],{"class":475},"\u002F\u002F   age: 42,\n",[297,1759,1760],{"class":299,"line":948},[297,1761,1762],{"class":475},"\u002F\u002F   createdAt: Date('2025-01-15T12:00:00.000Z')\n",[297,1764,1765],{"class":299,"line":966},[297,1766,1767],{"class":475},"\u002F\u002F }\n",[201,1769,1770],{},"When using Type Formats, mock data respects format constraints:",[288,1772,1774],{"className":290,"code":1773,"language":292,"meta":293,"style":293},"import {FormatEmail} from '@mionjs\u002Ftype-formats\u002FStringFormats';\nimport {FormatPositiveInt} from '@mionjs\u002Ftype-formats\u002FNumberFormats';\n\ninterface ValidatedUser {\n    email: FormatEmail;\n    followersCount: FormatPositiveInt;\n}\n\nconst mockValidatedUser = await createMockTypeFn\u003CValidatedUser>();\nconst validatedUser = mockValidatedUser();\n\u002F\u002F { email: 'user@example.com', followersCount: 150 }\n",[204,1775,1776,1798,1820,1824,1833,1844,1856,1860,1864,1888,1904],{"__ignoreMap":293},[297,1777,1778,1780,1782,1785,1787,1789,1791,1794,1796],{"class":299,"line":300},[297,1779,304],{"class":303},[297,1781,308],{"class":307},[297,1783,1784],{"class":311},"FormatEmail",[297,1786,315],{"class":307},[297,1788,318],{"class":303},[297,1790,321],{"class":307},[297,1792,1793],{"class":324},"@mionjs\u002Ftype-formats\u002FStringFormats",[297,1795,327],{"class":307},[297,1797,330],{"class":307},[297,1799,1800,1802,1804,1807,1809,1811,1813,1816,1818],{"class":299,"line":333},[297,1801,304],{"class":303},[297,1803,308],{"class":307},[297,1805,1806],{"class":311},"FormatPositiveInt",[297,1808,315],{"class":307},[297,1810,318],{"class":303},[297,1812,321],{"class":307},[297,1814,1815],{"class":324},"@mionjs\u002Ftype-formats\u002FNumberFormats",[297,1817,327],{"class":307},[297,1819,330],{"class":307},[297,1821,1822],{"class":299,"line":340},[297,1823,337],{"emptyLinePlaceholder":336},[297,1825,1826,1828,1831],{"class":299,"line":354},[297,1827,344],{"class":343},[297,1829,1830],{"class":347}," ValidatedUser",[297,1832,351],{"class":307},[297,1834,1835,1837,1839,1842],{"class":299,"line":369},[297,1836,1654],{"class":357},[297,1838,361],{"class":307},[297,1840,1841],{"class":347}," FormatEmail",[297,1843,330],{"class":307},[297,1845,1846,1849,1851,1854],{"class":299,"line":382},[297,1847,1848],{"class":357},"    followersCount",[297,1850,361],{"class":307},[297,1852,1853],{"class":347}," FormatPositiveInt",[297,1855,330],{"class":307},[297,1857,1858],{"class":299,"line":388},[297,1859,385],{"class":307},[297,1861,1862],{"class":299,"line":393},[297,1863,337],{"emptyLinePlaceholder":336},[297,1865,1866,1868,1871,1873,1875,1877,1879,1882,1884,1886],{"class":299,"line":426},[297,1867,396],{"class":343},[297,1869,1870],{"class":311}," mockValidatedUser ",[297,1872,402],{"class":307},[297,1874,405],{"class":303},[297,1876,1703],{"class":408},[297,1878,412],{"class":307},[297,1880,1881],{"class":347},"ValidatedUser",[297,1883,418],{"class":307},[297,1885,421],{"class":311},[297,1887,330],{"class":307},[297,1889,1890,1892,1895,1897,1900,1902],{"class":299,"line":431},[297,1891,396],{"class":343},[297,1893,1894],{"class":311}," validatedUser ",[297,1896,402],{"class":307},[297,1898,1899],{"class":408}," mockValidatedUser",[297,1901,421],{"class":311},[297,1903,330],{"class":307},[297,1905,1906],{"class":299,"line":479},[297,1907,1908],{"class":475},"\u002F\u002F { email: 'user@example.com', followersCount: 150 }\n",[263,1910],{},[209,1912,1914],{"id":1913},"complete-example","Complete Example",[288,1916,1918],{"className":290,"code":1917,"language":292,"meta":293,"style":293},"import {\n    createIsTypeFn,\n    createTypeErrorsFn,\n    createStringifyJsonFn,\n    createRestoreFromJsonFn,\n    createMockTypeFn,\n} from '@mionjs\u002Frun-types';\n\ninterface BlogPost {\n    id: string;\n    title: string;\n    content: string;\n    author: {\n        name: string;\n        email: string;\n    };\n    tags: string[];\n    publishedAt: Date;\n    metadata: Map\u003Cstring, any>;\n}\n\n\u002F\u002F Create all needed functions\nconst isPost = await createIsTypeFn\u003CBlogPost>();\nconst getPostErrors = await createTypeErrorsFn\u003CBlogPost>();\nconst stringifyPost = await createStringifyJsonFn\u003CBlogPost>();\nconst restorePost = await createRestoreFromJsonFn\u003CBlogPost>();\nconst mockPost = await createMockTypeFn\u003CBlogPost>();\n\n\u002F\u002F Generate mock data\nconst post = mockPost();\n\n\u002F\u002F Validate\nif (isPost(post)) {\n    \u002F\u002F Serialize to JSON (does not mutate original)\n    const json = stringifyPost(post);\n\n    \u002F\u002F Deserialize\n    const parsed = JSON.parse(json);\n    const restored = restorePost(parsed);\n    \u002F\u002F restored.publishedAt is a Date\n    \u002F\u002F restored.metadata is a Map\n} else {\n    const errors = getPostErrors(post);\n    console.log('Validation failed:', errors);\n}\n",[204,1919,1920,1926,1933,1940,1947,1954,1961,1975,1979,1988,1998,2009,2020,2029,2040,2051,2056,2070,2081,2099,2104,2109,2115,2140,2164,2188,2212,2236,2241,2247,2264,2269,2275,2293,2299,2323,2328,2334,2359,2381,2387,2393,2403,2424,2452],{"__ignoreMap":293},[297,1921,1922,1924],{"class":299,"line":300},[297,1923,304],{"class":303},[297,1925,351],{"class":307},[297,1927,1928,1931],{"class":299,"line":333},[297,1929,1930],{"class":311},"    createIsTypeFn",[297,1932,876],{"class":307},[297,1934,1935,1938],{"class":299,"line":340},[297,1936,1937],{"class":311},"    createTypeErrorsFn",[297,1939,876],{"class":307},[297,1941,1942,1945],{"class":299,"line":354},[297,1943,1944],{"class":311},"    createStringifyJsonFn",[297,1946,876],{"class":307},[297,1948,1949,1952],{"class":299,"line":369},[297,1950,1951],{"class":311},"    createRestoreFromJsonFn",[297,1953,876],{"class":307},[297,1955,1956,1959],{"class":299,"line":382},[297,1957,1958],{"class":311},"    createMockTypeFn",[297,1960,876],{"class":307},[297,1962,1963,1965,1967,1969,1971,1973],{"class":299,"line":388},[297,1964,315],{"class":307},[297,1966,318],{"class":303},[297,1968,321],{"class":307},[297,1970,206],{"class":324},[297,1972,327],{"class":307},[297,1974,330],{"class":307},[297,1976,1977],{"class":299,"line":393},[297,1978,337],{"emptyLinePlaceholder":336},[297,1980,1981,1983,1986],{"class":299,"line":426},[297,1982,344],{"class":343},[297,1984,1985],{"class":347}," BlogPost",[297,1987,351],{"class":307},[297,1989,1990,1992,1994,1996],{"class":299,"line":431},[297,1991,1633],{"class":357},[297,1993,361],{"class":307},[297,1995,364],{"class":347},[297,1997,330],{"class":307},[297,1999,2000,2003,2005,2007],{"class":299,"line":479},[297,2001,2002],{"class":357},"    title",[297,2004,361],{"class":307},[297,2006,364],{"class":347},[297,2008,330],{"class":307},[297,2010,2011,2014,2016,2018],{"class":299,"line":507},[297,2012,2013],{"class":357},"    content",[297,2015,361],{"class":307},[297,2017,364],{"class":347},[297,2019,330],{"class":307},[297,2021,2022,2025,2027],{"class":299,"line":703},[297,2023,2024],{"class":357},"    author",[297,2026,361],{"class":307},[297,2028,351],{"class":307},[297,2030,2031,2034,2036,2038],{"class":299,"line":709},[297,2032,2033],{"class":357},"        name",[297,2035,361],{"class":307},[297,2037,364],{"class":347},[297,2039,330],{"class":307},[297,2041,2042,2045,2047,2049],{"class":299,"line":937},[297,2043,2044],{"class":357},"        email",[297,2046,361],{"class":307},[297,2048,364],{"class":347},[297,2050,330],{"class":307},[297,2052,2053],{"class":299,"line":943},[297,2054,2055],{"class":307},"    };\n",[297,2057,2058,2061,2063,2065,2068],{"class":299,"line":948},[297,2059,2060],{"class":357},"    tags",[297,2062,361],{"class":307},[297,2064,364],{"class":347},[297,2066,2067],{"class":311},"[]",[297,2069,330],{"class":307},[297,2071,2072,2075,2077,2079],{"class":299,"line":966},[297,2073,2074],{"class":357},"    publishedAt",[297,2076,361],{"class":307},[297,2078,787],{"class":347},[297,2080,330],{"class":307},[297,2082,2083,2085,2087,2089,2091,2093,2095,2097],{"class":299,"line":972},[297,2084,794],{"class":357},[297,2086,361],{"class":307},[297,2088,799],{"class":347},[297,2090,412],{"class":307},[297,2092,804],{"class":347},[297,2094,455],{"class":307},[297,2096,809],{"class":347},[297,2098,812],{"class":307},[297,2100,2102],{"class":299,"line":2101},20,[297,2103,385],{"class":307},[297,2105,2107],{"class":299,"line":2106},21,[297,2108,337],{"emptyLinePlaceholder":336},[297,2110,2112],{"class":299,"line":2111},22,[297,2113,2114],{"class":475},"\u002F\u002F Create all needed functions\n",[297,2116,2118,2120,2123,2125,2127,2129,2131,2134,2136,2138],{"class":299,"line":2117},23,[297,2119,396],{"class":343},[297,2121,2122],{"class":311}," isPost ",[297,2124,402],{"class":307},[297,2126,405],{"class":303},[297,2128,409],{"class":408},[297,2130,412],{"class":307},[297,2132,2133],{"class":347},"BlogPost",[297,2135,418],{"class":307},[297,2137,421],{"class":311},[297,2139,330],{"class":307},[297,2141,2143,2145,2148,2150,2152,2154,2156,2158,2160,2162],{"class":299,"line":2142},24,[297,2144,396],{"class":343},[297,2146,2147],{"class":311}," getPostErrors ",[297,2149,402],{"class":307},[297,2151,405],{"class":303},[297,2153,634],{"class":408},[297,2155,412],{"class":307},[297,2157,2133],{"class":347},[297,2159,418],{"class":307},[297,2161,421],{"class":311},[297,2163,330],{"class":307},[297,2165,2167,2169,2172,2174,2176,2178,2180,2182,2184,2186],{"class":299,"line":2166},25,[297,2168,396],{"class":343},[297,2170,2171],{"class":311}," stringifyPost ",[297,2173,402],{"class":307},[297,2175,405],{"class":303},[297,2177,1382],{"class":408},[297,2179,412],{"class":307},[297,2181,2133],{"class":347},[297,2183,418],{"class":307},[297,2185,421],{"class":311},[297,2187,330],{"class":307},[297,2189,2191,2193,2196,2198,2200,2202,2204,2206,2208,2210],{"class":299,"line":2190},26,[297,2192,396],{"class":343},[297,2194,2195],{"class":311}," restorePost ",[297,2197,402],{"class":307},[297,2199,405],{"class":303},[297,2201,1112],{"class":408},[297,2203,412],{"class":307},[297,2205,2133],{"class":347},[297,2207,418],{"class":307},[297,2209,421],{"class":311},[297,2211,330],{"class":307},[297,2213,2215,2217,2220,2222,2224,2226,2228,2230,2232,2234],{"class":299,"line":2214},27,[297,2216,396],{"class":343},[297,2218,2219],{"class":311}," mockPost ",[297,2221,402],{"class":307},[297,2223,405],{"class":303},[297,2225,1703],{"class":408},[297,2227,412],{"class":307},[297,2229,2133],{"class":347},[297,2231,418],{"class":307},[297,2233,421],{"class":311},[297,2235,330],{"class":307},[297,2237,2239],{"class":299,"line":2238},28,[297,2240,337],{"emptyLinePlaceholder":336},[297,2242,2244],{"class":299,"line":2243},29,[297,2245,2246],{"class":475},"\u002F\u002F Generate mock data\n",[297,2248,2250,2252,2255,2257,2260,2262],{"class":299,"line":2249},30,[297,2251,396],{"class":343},[297,2253,2254],{"class":311}," post ",[297,2256,402],{"class":307},[297,2258,2259],{"class":408}," mockPost",[297,2261,421],{"class":311},[297,2263,330],{"class":307},[297,2265,2267],{"class":299,"line":2266},31,[297,2268,337],{"emptyLinePlaceholder":336},[297,2270,2272],{"class":299,"line":2271},32,[297,2273,2274],{"class":475},"\u002F\u002F Validate\n",[297,2276,2278,2281,2284,2287,2290],{"class":299,"line":2277},33,[297,2279,2280],{"class":303},"if",[297,2282,2283],{"class":311}," (",[297,2285,2286],{"class":408},"isPost",[297,2288,2289],{"class":311},"(post)) ",[297,2291,2292],{"class":307},"{\n",[297,2294,2296],{"class":299,"line":2295},34,[297,2297,2298],{"class":475},"    \u002F\u002F Serialize to JSON (does not mutate original)\n",[297,2300,2302,2305,2308,2311,2314,2316,2319,2321],{"class":299,"line":2301},35,[297,2303,2304],{"class":343},"    const",[297,2306,2307],{"class":311}," json",[297,2309,2310],{"class":307}," =",[297,2312,2313],{"class":408}," stringifyPost",[297,2315,437],{"class":357},[297,2317,2318],{"class":311},"post",[297,2320,469],{"class":357},[297,2322,330],{"class":307},[297,2324,2326],{"class":299,"line":2325},36,[297,2327,337],{"emptyLinePlaceholder":336},[297,2329,2331],{"class":299,"line":2330},37,[297,2332,2333],{"class":475},"    \u002F\u002F Deserialize\n",[297,2335,2337,2339,2342,2344,2346,2348,2350,2352,2355,2357],{"class":299,"line":2336},38,[297,2338,2304],{"class":343},[297,2340,2341],{"class":311}," parsed",[297,2343,2310],{"class":307},[297,2345,1156],{"class":311},[297,2347,286],{"class":307},[297,2349,1161],{"class":408},[297,2351,437],{"class":357},[297,2353,2354],{"class":311},"json",[297,2356,469],{"class":357},[297,2358,330],{"class":307},[297,2360,2362,2364,2367,2369,2372,2374,2377,2379],{"class":299,"line":2361},39,[297,2363,2304],{"class":343},[297,2365,2366],{"class":311}," restored",[297,2368,2310],{"class":307},[297,2370,2371],{"class":408}," restorePost",[297,2373,437],{"class":357},[297,2375,2376],{"class":311},"parsed",[297,2378,469],{"class":357},[297,2380,330],{"class":307},[297,2382,2384],{"class":299,"line":2383},40,[297,2385,2386],{"class":475},"    \u002F\u002F restored.publishedAt is a Date\n",[297,2388,2390],{"class":299,"line":2389},41,[297,2391,2392],{"class":475},"    \u002F\u002F restored.metadata is a Map\n",[297,2394,2396,2398,2401],{"class":299,"line":2395},42,[297,2397,315],{"class":307},[297,2399,2400],{"class":303}," else",[297,2402,351],{"class":307},[297,2404,2406,2408,2411,2413,2416,2418,2420,2422],{"class":299,"line":2405},43,[297,2407,2304],{"class":343},[297,2409,2410],{"class":311}," errors",[297,2412,2310],{"class":307},[297,2414,2415],{"class":408}," getPostErrors",[297,2417,437],{"class":357},[297,2419,2318],{"class":311},[297,2421,469],{"class":357},[297,2423,330],{"class":307},[297,2425,2427,2430,2432,2435,2437,2439,2442,2444,2446,2448,2450],{"class":299,"line":2426},44,[297,2428,2429],{"class":311},"    console",[297,2431,286],{"class":307},[297,2433,2434],{"class":408},"log",[297,2436,437],{"class":357},[297,2438,327],{"class":307},[297,2440,2441],{"class":324},"Validation failed:",[297,2443,327],{"class":307},[297,2445,455],{"class":307},[297,2447,2410],{"class":311},[297,2449,469],{"class":357},[297,2451,330],{"class":307},[297,2453,2455],{"class":299,"line":2454},45,[297,2456,385],{"class":307},[263,2458],{},[209,2460,2462],{"id":2461},"advanced-runtype-and-reflectfunction","Advanced: runType and reflectFunction",[201,2464,2465,2466,2469],{},"For advanced use cases, you can access the underlying ",[204,2467,2468],{},"RunType"," instance directly.",[716,2471,2473],{"id":2472},"runtypet",[204,2474,2475],{},"runType\u003CT>()",[201,2477,2478,2479,2481],{},"Creates a ",[204,2480,2468],{}," instance from any TypeScript type. Provides access to type metadata and low-level operations.",[288,2483,2485],{"className":290,"code":2484,"language":292,"meta":293,"style":293},"function runTypeExample() {\n    const userRunType = runType\u003CUser>();\n    \u002F\u002F Access type metadata, children, etc.\n}\n",[204,2486,2487,2499,2521,2526],{"__ignoreMap":293},[297,2488,2489,2492,2495,2497],{"class":299,"line":300},[297,2490,2491],{"class":343},"function",[297,2493,2494],{"class":408}," runTypeExample",[297,2496,421],{"class":307},[297,2498,351],{"class":307},[297,2500,2501,2503,2506,2508,2511,2513,2515,2517,2519],{"class":299,"line":333},[297,2502,2304],{"class":343},[297,2504,2505],{"class":311}," userRunType",[297,2507,2310],{"class":307},[297,2509,2510],{"class":408}," runType",[297,2512,412],{"class":307},[297,2514,415],{"class":347},[297,2516,418],{"class":307},[297,2518,421],{"class":357},[297,2520,330],{"class":307},[297,2522,2523],{"class":299,"line":340},[297,2524,2525],{"class":475},"    \u002F\u002F Access type metadata, children, etc.\n",[297,2527,2528],{"class":299,"line":354},[297,2529,385],{"class":307},[716,2531,2533],{"id":2532},"reflectfunctionfn",[204,2534,2535],{},"reflectFunction\u003CFn>()",[201,2537,2538],{},"Reflects a function to get type information about its parameters and return type.",[288,2540,2542],{"className":290,"code":2541,"language":292,"meta":293,"style":293},"function createUser(name: string, age: number): User {\n    return {id: '123', name, createdAt: new Date()};\n}\n\nfunction reflectFunctionExample() {\n    const fnReflection = reflectFunction(createUser);\n    \u002F\u002F Access parameter types, return type, etc.\n}\n",[204,2543,2544,2575,2614,2618,2622,2633,2654,2659],{"__ignoreMap":293},[297,2545,2546,2548,2551,2553,2556,2558,2560,2562,2564,2566,2568,2571,2573],{"class":299,"line":300},[297,2547,2491],{"class":343},[297,2549,2550],{"class":408}," createUser",[297,2552,437],{"class":307},[297,2554,443],{"class":2555},"sHdIc",[297,2557,361],{"class":307},[297,2559,364],{"class":347},[297,2561,455],{"class":307},[297,2563,458],{"class":2555},[297,2565,361],{"class":307},[297,2567,377],{"class":347},[297,2569,2570],{"class":307},"):",[297,2572,348],{"class":347},[297,2574,351],{"class":307},[297,2576,2577,2580,2582,2585,2587,2589,2592,2594,2596,2599,2601,2604,2606,2608,2610,2612],{"class":299,"line":333},[297,2578,2579],{"class":303},"    return",[297,2581,308],{"class":307},[297,2583,2584],{"class":357},"id",[297,2586,361],{"class":307},[297,2588,321],{"class":307},[297,2590,2591],{"class":324},"123",[297,2593,327],{"class":307},[297,2595,455],{"class":307},[297,2597,2598],{"class":311}," name",[297,2600,455],{"class":307},[297,2602,2603],{"class":357}," createdAt",[297,2605,361],{"class":307},[297,2607,885],{"class":307},[297,2609,787],{"class":408},[297,2611,421],{"class":357},[297,2613,940],{"class":307},[297,2615,2616],{"class":299,"line":340},[297,2617,385],{"class":307},[297,2619,2620],{"class":299,"line":354},[297,2621,337],{"emptyLinePlaceholder":336},[297,2623,2624,2626,2629,2631],{"class":299,"line":369},[297,2625,2491],{"class":343},[297,2627,2628],{"class":408}," reflectFunctionExample",[297,2630,421],{"class":307},[297,2632,351],{"class":307},[297,2634,2635,2637,2640,2642,2645,2647,2650,2652],{"class":299,"line":382},[297,2636,2304],{"class":343},[297,2638,2639],{"class":311}," fnReflection",[297,2641,2310],{"class":307},[297,2643,2644],{"class":408}," reflectFunction",[297,2646,437],{"class":357},[297,2648,2649],{"class":311},"createUser",[297,2651,469],{"class":357},[297,2653,330],{"class":307},[297,2655,2656],{"class":299,"line":388},[297,2657,2658],{"class":475},"    \u002F\u002F Access parameter types, return type, etc.\n",[297,2660,2661],{"class":299,"line":393},[297,2662,385],{"class":307},[263,2664],{},[209,2666,2668],{"id":2667},"serialization-details","Serialization Details",[716,2670,2672,2673,2676],{"id":2671},"the-any-type","The ",[204,2674,2675],{},"any"," Type",[201,2678,2679,2680,2682],{},"When an ",[204,2681,2675],{}," type is encountered during serialization, run-types uses a best-effort approach:",[201,2684,2685],{},[221,2686,2687],{},"JSON Serialization:",[214,2689,2690,2696],{},[217,2691,2692,2693,2695],{},"Uses ",[204,2694,1420],{}," to serialize the value",[217,2697,2692,2698,2701],{},[204,2699,2700],{},"JSON.parse"," to deserialize the value",[201,2703,2704],{},[221,2705,2706],{},"Binary Serialization:",[214,2708,2709,2714,2717],{},[217,2710,2711,2712],{},"The value is first converted to a JSON string using ",[204,2713,1420],{},[217,2715,2716],{},"The JSON string is then stored in the binary format",[217,2718,2719,2720,2722],{},"During deserialization, ",[204,2721,2700],{}," is used to restore the value",[288,2724,2726],{"className":290,"code":2725,"language":292,"meta":293,"style":293},"import {createToBinaryFn, createFromBinaryFn} from '@mionjs\u002Frun-types';\n\ntype FlexibleData = {\n    id: number;\n    payload: any; \u002F\u002F Can contain any JSON-compatible value\n};\n\nconst toBinary = await createToBinaryFn\u003CFlexibleData>();\nconst fromBinary = await createFromBinaryFn\u003CFlexibleData>();\n\nconst data: FlexibleData = {\n    id: 1,\n    payload: {nested: {deeply: [1, 2, 3]}, flag: true},\n};\n\nconst binary = toBinary(data);\nconst restored = fromBinary(binary);\n\u002F\u002F restored.payload is parsed back from JSON\n",[204,2727,2728,2753,2757,2769,2779,2793,2797,2801,2824,2846,2850,2865,2876,2930,2934,2938,2954,2970],{"__ignoreMap":293},[297,2729,2730,2732,2734,2737,2739,2741,2743,2745,2747,2749,2751],{"class":299,"line":300},[297,2731,304],{"class":303},[297,2733,308],{"class":307},[297,2735,2736],{"class":311},"createToBinaryFn",[297,2738,455],{"class":307},[297,2740,1548],{"class":311},[297,2742,315],{"class":307},[297,2744,318],{"class":303},[297,2746,321],{"class":307},[297,2748,206],{"class":324},[297,2750,327],{"class":307},[297,2752,330],{"class":307},[297,2754,2755],{"class":299,"line":333},[297,2756,337],{"emptyLinePlaceholder":336},[297,2758,2759,2762,2765,2767],{"class":299,"line":340},[297,2760,2761],{"class":343},"type",[297,2763,2764],{"class":347}," FlexibleData",[297,2766,2310],{"class":307},[297,2768,351],{"class":307},[297,2770,2771,2773,2775,2777],{"class":299,"line":354},[297,2772,1633],{"class":357},[297,2774,361],{"class":307},[297,2776,377],{"class":347},[297,2778,330],{"class":307},[297,2780,2781,2784,2786,2788,2790],{"class":299,"line":369},[297,2782,2783],{"class":357},"    payload",[297,2785,361],{"class":307},[297,2787,809],{"class":347},[297,2789,472],{"class":307},[297,2791,2792],{"class":475}," \u002F\u002F Can contain any JSON-compatible value\n",[297,2794,2795],{"class":299,"line":382},[297,2796,940],{"class":307},[297,2798,2799],{"class":299,"line":388},[297,2800,337],{"emptyLinePlaceholder":336},[297,2802,2803,2805,2807,2809,2811,2813,2815,2818,2820,2822],{"class":299,"line":393},[297,2804,396],{"class":343},[297,2806,1458],{"class":311},[297,2808,402],{"class":307},[297,2810,405],{"class":303},[297,2812,1465],{"class":408},[297,2814,412],{"class":307},[297,2816,2817],{"class":347},"FlexibleData",[297,2819,418],{"class":307},[297,2821,421],{"class":311},[297,2823,330],{"class":307},[297,2825,2826,2828,2830,2832,2834,2836,2838,2840,2842,2844],{"class":299,"line":426},[297,2827,396],{"class":343},[297,2829,1541],{"class":311},[297,2831,402],{"class":307},[297,2833,405],{"class":303},[297,2835,1548],{"class":408},[297,2837,412],{"class":307},[297,2839,2817],{"class":347},[297,2841,418],{"class":307},[297,2843,421],{"class":311},[297,2845,330],{"class":307},[297,2847,2848],{"class":299,"line":431},[297,2849,337],{"emptyLinePlaceholder":336},[297,2851,2852,2854,2857,2859,2861,2863],{"class":299,"line":479},[297,2853,396],{"class":343},[297,2855,2856],{"class":311}," data",[297,2858,361],{"class":307},[297,2860,2764],{"class":347},[297,2862,2310],{"class":307},[297,2864,351],{"class":307},[297,2866,2867,2869,2871,2874],{"class":299,"line":507},[297,2868,1633],{"class":357},[297,2870,361],{"class":307},[297,2872,2873],{"class":463}," 1",[297,2875,876],{"class":307},[297,2877,2878,2880,2882,2884,2887,2889,2891,2894,2896,2899,2902,2904,2907,2909,2912,2915,2918,2921,2923,2927],{"class":299,"line":703},[297,2879,2783],{"class":357},[297,2881,361],{"class":307},[297,2883,308],{"class":307},[297,2885,2886],{"class":357},"nested",[297,2888,361],{"class":307},[297,2890,308],{"class":307},[297,2892,2893],{"class":357},"deeply",[297,2895,361],{"class":307},[297,2897,2898],{"class":311}," [",[297,2900,2901],{"class":463},"1",[297,2903,455],{"class":307},[297,2905,2906],{"class":463}," 2",[297,2908,455],{"class":307},[297,2910,2911],{"class":463}," 3",[297,2913,2914],{"class":311},"]",[297,2916,2917],{"class":307},"},",[297,2919,2920],{"class":357}," flag",[297,2922,361],{"class":307},[297,2924,2926],{"class":2925},"sfNiH"," true",[297,2928,2929],{"class":307},"},\n",[297,2931,2932],{"class":299,"line":709},[297,2933,940],{"class":307},[297,2935,2936],{"class":299,"line":937},[297,2937,337],{"emptyLinePlaceholder":336},[297,2939,2940,2942,2945,2947,2949,2952],{"class":299,"line":943},[297,2941,396],{"class":343},[297,2943,2944],{"class":311}," binary ",[297,2946,402],{"class":307},[297,2948,1487],{"class":408},[297,2950,2951],{"class":311},"(data)",[297,2953,330],{"class":307},[297,2955,2956,2958,2961,2963,2965,2968],{"class":299,"line":948},[297,2957,396],{"class":343},[297,2959,2960],{"class":311}," restored ",[297,2962,402],{"class":307},[297,2964,1591],{"class":408},[297,2966,2967],{"class":311},"(binary)",[297,2969,330],{"class":307},[297,2971,2972],{"class":299,"line":966},[297,2973,2974],{"class":475},"\u002F\u002F restored.payload is parsed back from JSON\n",[250,2976,2977,2978,2980],{},"Using ",[204,2979,2675],{}," type has performance implications since JSON serialization is less efficient than typed binary encoding. When possible, define specific types for better performance and type safety.",[716,2982,2984],{"id":2983},"union-types","Union Types",[201,2986,2987],{},"Union types allow a value to be one of several possible types. Run-types provides full support for union validation and serialization.",[250,2989,2990,282,2992,2995,2996,2999],{},[204,2991,2675],{},[204,2993,2994],{},"unknown"," types are not allowed in unions, ie: ",[204,2997,2998],{},"any | User"," will alway match as any and it is not practical.",[270,3001,3003],{"id":3002},"how-union-validation-works","How Union Validation Works",[201,3005,3006,3007,3010],{},"When validating a union type, run-types checks each member of the union in declaration order using a ",[221,3008,3009],{},"first-match strategy",". The value is tested against each type until a match is found:",[288,3012,3016],{"className":3013,"code":3014,"language":3015,"meta":293,"style":293},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","type MyUnion = string | number | boolean;\n\n\u002F\u002F Validation order:\n\u002F\u002F 1. Check if value is string → matches \"hello\"\n\u002F\u002F 2. Check if value is number → matches 42\n\u002F\u002F 3. Check if value is boolean → matches true\n","typescript",[204,3017,3018,3041,3045,3050,3055,3060],{"__ignoreMap":293},[297,3019,3020,3022,3025,3027,3029,3032,3034,3036,3039],{"class":299,"line":300},[297,3021,2761],{"class":343},[297,3023,3024],{"class":347}," MyUnion",[297,3026,2310],{"class":307},[297,3028,364],{"class":347},[297,3030,3031],{"class":307}," |",[297,3033,377],{"class":347},[297,3035,3031],{"class":307},[297,3037,3038],{"class":347}," boolean",[297,3040,330],{"class":307},[297,3042,3043],{"class":299,"line":333},[297,3044,337],{"emptyLinePlaceholder":336},[297,3046,3047],{"class":299,"line":340},[297,3048,3049],{"class":475},"\u002F\u002F Validation order:\n",[297,3051,3052],{"class":299,"line":354},[297,3053,3054],{"class":475},"\u002F\u002F 1. Check if value is string → matches \"hello\"\n",[297,3056,3057],{"class":299,"line":369},[297,3058,3059],{"class":475},"\u002F\u002F 2. Check if value is number → matches 42\n",[297,3061,3062],{"class":299,"line":382},[297,3063,3064],{"class":475},"\u002F\u002F 3. Check if value is boolean → matches true\n",[201,3066,3067,3068,361],{},"For object types in unions, run-types uses ",[221,3069,3070],{},"loose matching",[214,3072,3073,3076,3079],{},[217,3074,3075],{},"Objects with properties from multiple union types match the first compatible type",[217,3077,3078],{},"Extra properties are allowed (they don't cause validation to fail)",[217,3080,3081],{},"For all-optional types (weak types), at least one matching property or an empty object is required",[288,3083,3085],{"className":3013,"code":3084,"language":3015,"meta":293,"style":293},"type Cat = {name: string; meow?: true};\ntype Dog = {name: string; bark?: true};\ntype Pet = Cat | Dog;\n\n\u002F\u002F {name: 'Fluffy', meow: true} matches Cat first\n\u002F\u002F {name: 'Rex', bark: true} matches Dog first\n\u002F\u002F {name: 'Unknown', age: 5} matches Cat (extra 'age' is allowed)\n",[204,3086,3087,3116,3144,3161,3165,3170,3175],{"__ignoreMap":293},[297,3088,3089,3091,3094,3096,3098,3100,3102,3104,3106,3109,3112,3114],{"class":299,"line":300},[297,3090,2761],{"class":343},[297,3092,3093],{"class":347}," Cat",[297,3095,2310],{"class":307},[297,3097,308],{"class":307},[297,3099,443],{"class":357},[297,3101,361],{"class":307},[297,3103,364],{"class":347},[297,3105,472],{"class":307},[297,3107,3108],{"class":357}," meow",[297,3110,3111],{"class":307},"?:",[297,3113,2926],{"class":347},[297,3115,940],{"class":307},[297,3117,3118,3120,3123,3125,3127,3129,3131,3133,3135,3138,3140,3142],{"class":299,"line":333},[297,3119,2761],{"class":343},[297,3121,3122],{"class":347}," Dog",[297,3124,2310],{"class":307},[297,3126,308],{"class":307},[297,3128,443],{"class":357},[297,3130,361],{"class":307},[297,3132,364],{"class":347},[297,3134,472],{"class":307},[297,3136,3137],{"class":357}," bark",[297,3139,3111],{"class":307},[297,3141,2926],{"class":347},[297,3143,940],{"class":307},[297,3145,3146,3148,3151,3153,3155,3157,3159],{"class":299,"line":340},[297,3147,2761],{"class":343},[297,3149,3150],{"class":347}," Pet",[297,3152,2310],{"class":307},[297,3154,3093],{"class":347},[297,3156,3031],{"class":307},[297,3158,3122],{"class":347},[297,3160,330],{"class":307},[297,3162,3163],{"class":299,"line":354},[297,3164,337],{"emptyLinePlaceholder":336},[297,3166,3167],{"class":299,"line":369},[297,3168,3169],{"class":475},"\u002F\u002F {name: 'Fluffy', meow: true} matches Cat first\n",[297,3171,3172],{"class":299,"line":382},[297,3173,3174],{"class":475},"\u002F\u002F {name: 'Rex', bark: true} matches Dog first\n",[297,3176,3177],{"class":299,"line":388},[297,3178,3179],{"class":475},"\u002F\u002F {name: 'Unknown', age: 5} matches Cat (extra 'age' is allowed)\n",[3181,3182,3183,3186,3188,3189,3192,3193,3196],"tip",{},[221,3184,3185],{},"Quick Tip",[997,3187],{},"\nUse the ESLint rules ",[204,3190,3191],{},"@mionjs\u002Fno-unreachable-union-types"," and ",[204,3194,3195],{},"@mionjs\u002Fno-mixed-union-properties"," to detect overlapping union types at compile time.",[270,3198,3200],{"id":3199},"union-serialization-format","Union Serialization Format",[201,3202,3203,3204,3207],{},"Union types are serialized as a tuple ",[204,3205,3206],{},"[unionTypeIndex, value]"," where:",[214,3209,3210,3216],{},[217,3211,3212,3215],{},[204,3213,3214],{},"unionTypeIndex"," is the 0-based index of the matching type in the union declaration",[217,3217,3218,3221],{},[204,3219,3220],{},"value"," is the serialized value according to that type's serialization rules",[201,3223,3224],{},[221,3225,3226],{},"Example:",[288,3228,3230],{"className":3013,"code":3229,"language":3015,"meta":293,"style":293},"type MyUnion = string | number | bigint;\n\nconst val1: MyUnion = \"hello\";  \u002F\u002F Encoded as: [0, \"hello\"]\nconst val2: MyUnion = 42;       \u002F\u002F Encoded as: [1, 42]\nconst val3: MyUnion = 123n;     \u002F\u002F Encoded as: [2, \"123n\"] (bigint as string)\n",[204,3231,3232,3253,3257,3284,3305],{"__ignoreMap":293},[297,3233,3234,3236,3238,3240,3242,3244,3246,3248,3251],{"class":299,"line":300},[297,3235,2761],{"class":343},[297,3237,3024],{"class":347},[297,3239,2310],{"class":307},[297,3241,364],{"class":347},[297,3243,3031],{"class":307},[297,3245,377],{"class":347},[297,3247,3031],{"class":307},[297,3249,3250],{"class":347}," bigint",[297,3252,330],{"class":307},[297,3254,3255],{"class":299,"line":333},[297,3256,337],{"emptyLinePlaceholder":336},[297,3258,3259,3261,3264,3266,3268,3270,3273,3276,3279,3281],{"class":299,"line":340},[297,3260,396],{"class":343},[297,3262,3263],{"class":311}," val1",[297,3265,361],{"class":307},[297,3267,3024],{"class":347},[297,3269,2310],{"class":307},[297,3271,3272],{"class":307}," \"",[297,3274,3275],{"class":324},"hello",[297,3277,3278],{"class":307},"\"",[297,3280,472],{"class":307},[297,3282,3283],{"class":475},"  \u002F\u002F Encoded as: [0, \"hello\"]\n",[297,3285,3286,3288,3291,3293,3295,3297,3300,3302],{"class":299,"line":354},[297,3287,396],{"class":343},[297,3289,3290],{"class":311}," val2",[297,3292,361],{"class":307},[297,3294,3024],{"class":347},[297,3296,2310],{"class":307},[297,3298,3299],{"class":463}," 42",[297,3301,472],{"class":307},[297,3303,3304],{"class":475},"       \u002F\u002F Encoded as: [1, 42]\n",[297,3306,3307,3309,3312,3314,3316,3318,3320,3323,3325],{"class":299,"line":369},[297,3308,396],{"class":343},[297,3310,3311],{"class":311}," val3",[297,3313,361],{"class":307},[297,3315,3024],{"class":347},[297,3317,2310],{"class":307},[297,3319,671],{"class":463},[297,3321,3322],{"class":343},"n",[297,3324,472],{"class":307},[297,3326,3327],{"class":475},"     \u002F\u002F Encoded as: [2, \"123n\"] (bigint as string)\n",[201,3329,3330,3331,3192,3333,3336],{},"This encoding is necessary because some types cannot be distinguished after serialization. For example, both ",[204,3332,804],{},[204,3334,3335],{},"bigint"," serialize to strings in JSON, so the discriminator index ensures correct deserialization.",[288,3338,3340],{"className":290,"code":3339,"language":292,"meta":293,"style":293},"import {createPrepareForJsonFn, createRestoreFromJsonFn} from '@mionjs\u002Frun-types';\n\ntype Result = string | number | {error: string};\n\nconst prepareForJson = await createPrepareForJsonFn\u003CResult>();\nconst restoreFromJson = await createRestoreFromJsonFn\u003CResult>();\n\n\u002F\u002F String value (index 0)\nconst json1 = prepareForJson('hello');\n\u002F\u002F Returns: [0, 'hello']\n\n\u002F\u002F Number value (index 1)\nconst json2 = prepareForJson(42);\n\u002F\u002F Returns: [1, 42]\n\n\u002F\u002F Object value (index 2)\nconst json3 = prepareForJson({error: 'not found'});\n\u002F\u002F Returns: [2, {error: 'not found'}]\n\n\u002F\u002F Deserialization restores the correct type\nconst restored = restoreFromJson(json2);\n\u002F\u002F restored === 42\n",[204,3341,3342,3366,3370,3398,3402,3426,3449,3453,3458,3482,3487,3491,3496,3516,3521,3525,3530,3562,3567,3571,3576,3592],{"__ignoreMap":293},[297,3343,3344,3346,3348,3350,3352,3354,3356,3358,3360,3362,3364],{"class":299,"line":300},[297,3345,304],{"class":303},[297,3347,308],{"class":307},[297,3349,742],{"class":311},[297,3351,455],{"class":307},[297,3353,1112],{"class":311},[297,3355,315],{"class":307},[297,3357,318],{"class":303},[297,3359,321],{"class":307},[297,3361,206],{"class":324},[297,3363,327],{"class":307},[297,3365,330],{"class":307},[297,3367,3368],{"class":299,"line":333},[297,3369,337],{"emptyLinePlaceholder":336},[297,3371,3372,3374,3377,3379,3381,3383,3385,3387,3389,3392,3394,3396],{"class":299,"line":340},[297,3373,2761],{"class":343},[297,3375,3376],{"class":347}," Result",[297,3378,2310],{"class":307},[297,3380,364],{"class":347},[297,3382,3031],{"class":307},[297,3384,377],{"class":347},[297,3386,3031],{"class":307},[297,3388,308],{"class":307},[297,3390,3391],{"class":357},"error",[297,3393,361],{"class":307},[297,3395,364],{"class":347},[297,3397,940],{"class":307},[297,3399,3400],{"class":299,"line":354},[297,3401,337],{"emptyLinePlaceholder":336},[297,3403,3404,3406,3409,3411,3413,3415,3417,3420,3422,3424],{"class":299,"line":369},[297,3405,396],{"class":343},[297,3407,3408],{"class":311}," prepareForJson ",[297,3410,402],{"class":307},[297,3412,405],{"class":303},[297,3414,834],{"class":408},[297,3416,412],{"class":307},[297,3418,3419],{"class":347},"Result",[297,3421,418],{"class":307},[297,3423,421],{"class":311},[297,3425,330],{"class":307},[297,3427,3428,3430,3433,3435,3437,3439,3441,3443,3445,3447],{"class":299,"line":382},[297,3429,396],{"class":343},[297,3431,3432],{"class":311}," restoreFromJson ",[297,3434,402],{"class":307},[297,3436,405],{"class":303},[297,3438,1112],{"class":408},[297,3440,412],{"class":307},[297,3442,3419],{"class":347},[297,3444,418],{"class":307},[297,3446,421],{"class":311},[297,3448,330],{"class":307},[297,3450,3451],{"class":299,"line":388},[297,3452,337],{"emptyLinePlaceholder":336},[297,3454,3455],{"class":299,"line":393},[297,3456,3457],{"class":475},"\u002F\u002F String value (index 0)\n",[297,3459,3460,3462,3465,3467,3470,3472,3474,3476,3478,3480],{"class":299,"line":426},[297,3461,396],{"class":343},[297,3463,3464],{"class":311}," json1 ",[297,3466,402],{"class":307},[297,3468,3469],{"class":408}," prepareForJson",[297,3471,437],{"class":311},[297,3473,327],{"class":307},[297,3475,3275],{"class":324},[297,3477,327],{"class":307},[297,3479,469],{"class":311},[297,3481,330],{"class":307},[297,3483,3484],{"class":299,"line":431},[297,3485,3486],{"class":475},"\u002F\u002F Returns: [0, 'hello']\n",[297,3488,3489],{"class":299,"line":479},[297,3490,337],{"emptyLinePlaceholder":336},[297,3492,3493],{"class":299,"line":507},[297,3494,3495],{"class":475},"\u002F\u002F Number value (index 1)\n",[297,3497,3498,3500,3503,3505,3507,3509,3512,3514],{"class":299,"line":703},[297,3499,396],{"class":343},[297,3501,3502],{"class":311}," json2 ",[297,3504,402],{"class":307},[297,3506,3469],{"class":408},[297,3508,437],{"class":311},[297,3510,3511],{"class":463},"42",[297,3513,469],{"class":311},[297,3515,330],{"class":307},[297,3517,3518],{"class":299,"line":709},[297,3519,3520],{"class":475},"\u002F\u002F Returns: [1, 42]\n",[297,3522,3523],{"class":299,"line":937},[297,3524,337],{"emptyLinePlaceholder":336},[297,3526,3527],{"class":299,"line":943},[297,3528,3529],{"class":475},"\u002F\u002F Object value (index 2)\n",[297,3531,3532,3534,3537,3539,3541,3543,3545,3547,3549,3551,3554,3556,3558,3560],{"class":299,"line":948},[297,3533,396],{"class":343},[297,3535,3536],{"class":311}," json3 ",[297,3538,402],{"class":307},[297,3540,3469],{"class":408},[297,3542,437],{"class":311},[297,3544,440],{"class":307},[297,3546,3391],{"class":357},[297,3548,361],{"class":307},[297,3550,321],{"class":307},[297,3552,3553],{"class":324},"not found",[297,3555,327],{"class":307},[297,3557,315],{"class":307},[297,3559,469],{"class":311},[297,3561,330],{"class":307},[297,3563,3564],{"class":299,"line":966},[297,3565,3566],{"class":475},"\u002F\u002F Returns: [2, {error: 'not found'}]\n",[297,3568,3569],{"class":299,"line":972},[297,3570,337],{"emptyLinePlaceholder":336},[297,3572,3573],{"class":299,"line":2101},[297,3574,3575],{"class":475},"\u002F\u002F Deserialization restores the correct type\n",[297,3577,3578,3580,3582,3584,3587,3590],{"class":299,"line":2106},[297,3579,396],{"class":343},[297,3581,2960],{"class":311},[297,3583,402],{"class":307},[297,3585,3586],{"class":408}," restoreFromJson",[297,3588,3589],{"class":311},"(json2)",[297,3591,330],{"class":307},[297,3593,3594],{"class":299,"line":2111},[297,3595,3596],{"class":475},"\u002F\u002F restored === 42\n",[270,3598,3600],{"id":3599},"union-restrictions","Union Restrictions",[201,3602,3603],{},"Unions cannot contain the following types:",[214,3605,3606,3617],{},[217,3607,3608,282,3612,3616],{},[221,3609,3610],{},[204,3611,2675],{},[221,3613,3614],{},[204,3615,2994],{}," - These types match everything at runtime, making union discrimination impossible",[217,3618,3619,3622,3623,282,3626,3629],{},[221,3620,3621],{},"Non-serializable types"," like ",[204,3624,3625],{},"Symbol",[204,3627,3628],{},"Function"," - These cannot be properly serialized",[288,3631,3633],{"className":3013,"code":3632,"language":3015,"meta":293,"style":293},"\u002F\u002F ❌ Invalid: Union with 'any' or 'unknown'\ntype BadUnion = any | string;      \u002F\u002F Error: Union can not have 'any' or 'unknown' types\ntype BadUnion2 = unknown | number; \u002F\u002F Error: Union can not have 'any' or 'unknown' types\n\n\u002F\u002F ✅ Valid: Union with concrete types\ntype GoodUnion = string | number | boolean;\n",[204,3634,3635,3640,3660,3681,3685,3690],{"__ignoreMap":293},[297,3636,3637],{"class":299,"line":300},[297,3638,3639],{"class":475},"\u002F\u002F ❌ Invalid: Union with 'any' or 'unknown'\n",[297,3641,3642,3644,3647,3649,3651,3653,3655,3657],{"class":299,"line":333},[297,3643,2761],{"class":343},[297,3645,3646],{"class":347}," BadUnion",[297,3648,2310],{"class":307},[297,3650,809],{"class":347},[297,3652,3031],{"class":307},[297,3654,364],{"class":347},[297,3656,472],{"class":307},[297,3658,3659],{"class":475},"      \u002F\u002F Error: Union can not have 'any' or 'unknown' types\n",[297,3661,3662,3664,3667,3669,3672,3674,3676,3678],{"class":299,"line":340},[297,3663,2761],{"class":343},[297,3665,3666],{"class":347}," BadUnion2",[297,3668,2310],{"class":307},[297,3670,3671],{"class":347}," unknown",[297,3673,3031],{"class":307},[297,3675,377],{"class":347},[297,3677,472],{"class":307},[297,3679,3680],{"class":475}," \u002F\u002F Error: Union can not have 'any' or 'unknown' types\n",[297,3682,3683],{"class":299,"line":354},[297,3684,337],{"emptyLinePlaceholder":336},[297,3686,3687],{"class":299,"line":369},[297,3688,3689],{"class":475},"\u002F\u002F ✅ Valid: Union with concrete types\n",[297,3691,3692,3694,3697,3699,3701,3703,3705,3707,3709],{"class":299,"line":382},[297,3693,2761],{"class":343},[297,3695,3696],{"class":347}," GoodUnion",[297,3698,2310],{"class":307},[297,3700,364],{"class":347},[297,3702,3031],{"class":307},[297,3704,377],{"class":347},[297,3706,3031],{"class":307},[297,3708,3038],{"class":347},[297,3710,330],{"class":307},[250,3712,3713],{},"Runtime type checking is used to discriminate the union type during serialization. For unions with many types or complex nested structures, this can have performance implications. Use unions carefully in performance-critical code paths.",[3715,3716],"spacer",{},[209,3718,3720],{"id":3719},"type-compiler","Type Compiler",[201,3722,3723,3724,3727],{},"RunTypes relies on a TypeScript type compiler to generate type metadata at compile time. This transformer embeds bytecode into the compiled JavaScript, enabling runtime access to type information without requiring separate schema definitions. The ",[254,3725,3726],{"href":145},"mion Vite plugin"," handles this transformation automatically.",[716,3729,3731],{"id":3730},"enabling-type-metadata","Enabling Type Metadata",[201,3733,3734,3735,3738,3739,361],{},"To enable type metadata generation, add ",[204,3736,3737],{},"reflection: true"," to your ",[204,3740,3741],{},"tsconfig.json",[288,3743,3746],{"className":3744,"code":3745,"filename":3741,"language":2354,"meta":293,"style":293},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"compilerOptions\": {\n    \u002F\u002F ... your compiler options\n  },\n  \"reflection\": true\n}\n",[204,3747,3748,3752,3766,3771,3776,3790],{"__ignoreMap":293},[297,3749,3750],{"class":299,"line":300},[297,3751,2292],{"class":307},[297,3753,3754,3757,3760,3762,3764],{"class":299,"line":333},[297,3755,3756],{"class":307},"  \"",[297,3758,3759],{"class":343},"compilerOptions",[297,3761,3278],{"class":307},[297,3763,361],{"class":307},[297,3765,351],{"class":307},[297,3767,3768],{"class":299,"line":340},[297,3769,3770],{"class":475},"    \u002F\u002F ... your compiler options\n",[297,3772,3773],{"class":299,"line":354},[297,3774,3775],{"class":307},"  },\n",[297,3777,3778,3780,3783,3785,3787],{"class":299,"line":369},[297,3779,3756],{"class":307},[297,3781,3782],{"class":343},"reflection",[297,3784,3278],{"class":307},[297,3786,361],{"class":307},[297,3788,3789],{"class":307}," true\n",[297,3791,3792],{"class":299,"line":382},[297,3793,385],{"class":307},[201,3795,3796],{},"This setting instructs the type compiler to generate bytecode metadata for all types in your project.",[716,3798,3800],{"id":3799},"disabling-metadata-for-specific-nodes","Disabling Metadata for Specific Nodes",[201,3802,3803,3804,3807],{},"In some cases, you may want to exclude specific functions, classes, or types from metadata generation. Use the ",[204,3805,3806],{},"@reflection"," JSDoc tag to control this:",[288,3809,3811],{"className":290,"code":3810,"language":292,"meta":293,"style":293},"\u002F** @reflection never *\u002F\nexport function myInternalFunction() {\n  \u002F\u002F No type metadata will be generated for this function\n  return function innerFn(value: string): boolean {\n    return value.length > 0;\n  };\n}\n",[204,3812,3813,3827,3842,3847,3871,3891,3896],{"__ignoreMap":293},[297,3814,3815,3818,3821,3824],{"class":299,"line":300},[297,3816,3817],{"class":475},"\u002F** ",[297,3819,3820],{"class":303},"@",[297,3822,3782],{"class":3823},"s6hCs",[297,3825,3826],{"class":475}," never *\u002F\n",[297,3828,3829,3832,3835,3838,3840],{"class":299,"line":333},[297,3830,3831],{"class":303},"export",[297,3833,3834],{"class":343}," function",[297,3836,3837],{"class":408}," myInternalFunction",[297,3839,421],{"class":307},[297,3841,351],{"class":307},[297,3843,3844],{"class":299,"line":340},[297,3845,3846],{"class":475},"  \u002F\u002F No type metadata will be generated for this function\n",[297,3848,3849,3852,3854,3857,3859,3861,3863,3865,3867,3869],{"class":299,"line":354},[297,3850,3851],{"class":303},"  return",[297,3853,3834],{"class":343},[297,3855,3856],{"class":408}," innerFn",[297,3858,437],{"class":307},[297,3860,3220],{"class":2555},[297,3862,361],{"class":307},[297,3864,364],{"class":347},[297,3866,2570],{"class":307},[297,3868,3038],{"class":347},[297,3870,351],{"class":307},[297,3872,3873,3875,3878,3880,3883,3886,3889],{"class":299,"line":369},[297,3874,2579],{"class":303},[297,3876,3877],{"class":311}," value",[297,3879,286],{"class":307},[297,3881,3882],{"class":311},"length",[297,3884,3885],{"class":307}," >",[297,3887,3888],{"class":463}," 0",[297,3890,330],{"class":307},[297,3892,3893],{"class":299,"line":382},[297,3894,3895],{"class":307},"  };\n",[297,3897,3898],{"class":299,"line":388},[297,3899,385],{"class":307},[201,3901,2672,3902,3904],{},[204,3903,3806],{}," tag accepts the following values:",[3906,3907,3908,3921],"table",{},[3909,3910,3911],"thead",{},[3912,3913,3914,3918],"tr",{},[3915,3916,3917],"th",{},"Value",[3915,3919,3920],{},"Effect",[3922,3923,3924,3947],"tbody",{},[3912,3925,3926,3944],{},[3927,3928,3929,3932,3933,3932,3936,3932,3938,3932,3941],"td",{},[204,3930,3931],{},"never",", ",[204,3934,3935],{},"no",[204,3937,285],{},[204,3939,3940],{},"disabled",[204,3942,3943],{},"0",[3927,3945,3946],{},"Disables metadata generation",[3912,3948,3949,3962],{},[3927,3950,3951,3932,3953,3932,3956,3932,3959,3961],{},[204,3952,281],{},[204,3954,3955],{},"default",[204,3957,3958],{},"enabled",[204,3960,2901],{},", or empty",[3927,3963,3964],{},"Enables metadata generation",[201,3966,3967],{},"This is particularly useful for:",[214,3969,3970,3976,3982],{},[217,3971,3972,3975],{},[221,3973,3974],{},"Pure functions"," used in JIT compilation that should not include compiler artifacts",[217,3977,3978,3981],{},[221,3979,3980],{},"Internal utilities"," that don't need runtime type information",[217,3983,3984,3987],{},[221,3985,3986],{},"Performance optimization"," by reducing generated code size",[270,3989,3991],{"id":3990},"example-pure-function-for-uuid-validation","Example: Pure Function for UUID Validation",[201,3993,3994,3995,3998],{},"Pure functions are methods that do not have side effect, don't depend on variables outside their scope or module imports and can be embedded into JIT-compiled code.\nThey must use ",[204,3996,3997],{},"@reflection never"," to avoid including type compiler artifacts.",[201,4000,4001,4002,4005],{},"Pure functions are registered with a ",[221,4003,4004],{},"namespace"," to organize and group related functions. This allows different libraries or modules to register their own pure functions without naming conflicts:",[288,4007,4009],{"className":290,"code":4008,"language":292,"meta":293,"style":293},"import {GenericPureFunction, registerPureFnClosure} from '@mionjs\u002Fcore';\n\n\u002F** @reflection never *\u002F\nexport function isOdd() {\n    return function _isOdd(value: string): boolean {\n        return value.length > 0;\n    } as GenericPureFunction\u003Cany>;\n}\n\n\u002F\u002F Register the pure function with a namespace for use in JIT compilation\nregisterPureFnClosure('myNamespace', isOdd);\n",[204,4010,4011,4038,4042,4052,4065,4088,4105,4122,4126,4130,4135],{"__ignoreMap":293},[297,4012,4013,4015,4017,4020,4022,4025,4027,4029,4031,4034,4036],{"class":299,"line":300},[297,4014,304],{"class":303},[297,4016,308],{"class":307},[297,4018,4019],{"class":311},"GenericPureFunction",[297,4021,455],{"class":307},[297,4023,4024],{"class":311}," registerPureFnClosure",[297,4026,315],{"class":307},[297,4028,318],{"class":303},[297,4030,321],{"class":307},[297,4032,4033],{"class":324},"@mionjs\u002Fcore",[297,4035,327],{"class":307},[297,4037,330],{"class":307},[297,4039,4040],{"class":299,"line":333},[297,4041,337],{"emptyLinePlaceholder":336},[297,4043,4044,4046,4048,4050],{"class":299,"line":340},[297,4045,3817],{"class":475},[297,4047,3820],{"class":303},[297,4049,3782],{"class":3823},[297,4051,3826],{"class":475},[297,4053,4054,4056,4058,4061,4063],{"class":299,"line":354},[297,4055,3831],{"class":303},[297,4057,3834],{"class":343},[297,4059,4060],{"class":408}," isOdd",[297,4062,421],{"class":307},[297,4064,351],{"class":307},[297,4066,4067,4069,4071,4074,4076,4078,4080,4082,4084,4086],{"class":299,"line":369},[297,4068,2579],{"class":303},[297,4070,3834],{"class":343},[297,4072,4073],{"class":408}," _isOdd",[297,4075,437],{"class":307},[297,4077,3220],{"class":2555},[297,4079,361],{"class":307},[297,4081,364],{"class":347},[297,4083,2570],{"class":307},[297,4085,3038],{"class":347},[297,4087,351],{"class":307},[297,4089,4090,4093,4095,4097,4099,4101,4103],{"class":299,"line":382},[297,4091,4092],{"class":303},"        return",[297,4094,3877],{"class":311},[297,4096,286],{"class":307},[297,4098,3882],{"class":311},[297,4100,3885],{"class":307},[297,4102,3888],{"class":463},[297,4104,330],{"class":307},[297,4106,4107,4110,4113,4116,4118,4120],{"class":299,"line":388},[297,4108,4109],{"class":307},"    }",[297,4111,4112],{"class":303}," as",[297,4114,4115],{"class":347}," GenericPureFunction",[297,4117,412],{"class":307},[297,4119,2675],{"class":347},[297,4121,812],{"class":307},[297,4123,4124],{"class":299,"line":393},[297,4125,385],{"class":307},[297,4127,4128],{"class":299,"line":426},[297,4129,337],{"emptyLinePlaceholder":336},[297,4131,4132],{"class":299,"line":431},[297,4133,4134],{"class":475},"\u002F\u002F Register the pure function with a namespace for use in JIT compilation\n",[297,4136,4137,4140,4142,4144,4147,4149,4151,4154],{"class":299,"line":479},[297,4138,4139],{"class":408},"registerPureFnClosure",[297,4141,437],{"class":311},[297,4143,327],{"class":307},[297,4145,4146],{"class":324},"myNamespace",[297,4148,327],{"class":307},[297,4150,455],{"class":307},[297,4152,4153],{"class":311}," isOdd)",[297,4155,330],{"class":307},[4157,4158,4159],"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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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 .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .s6hCs, html code.shiki .s6hCs{--shiki-light:#9C3EDA;--shiki-light-font-style:italic;--shiki-default:#C792EA;--shiki-default-font-style:italic;--shiki-dark:#C792EA;--shiki-dark-font-style:italic}","JIT compilation library that generates optimized validation, serialization, and mocking functions from TypeScript types.","md",null,{"toc":26},{"title":108,"description":4160},"SxY9Bis_3PR-uC9NbRK3brLzhXA0BwuZXr1g9a4mc1U",[4167,4169],{"title":97,"path":98,"stem":99,"description":4168,"children":-1},"Cancel in-flight requests and enforce timeouts using AbortSignal.",{"title":111,"path":112,"stem":113,"description":4170,"children":-1},"Comprehensive list of supported TypeScript types and feature comparison with other validation libraries.",1778674524008]