[{"data":1,"prerenderedAt":3598},["ShallowReactive",2],{"navigation_docs":3,"-run-types-type-formats":195,"-run-types-type-formats-surround":3593},[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":115,"body":197,"description":3587,"extension":3588,"links":3589,"meta":3590,"navigation":350,"path":116,"seo":3591,"stem":117,"__hash__":3592},"docs\u002F4.run-types\u002F2.type-formats.md",{"type":198,"value":199},"minimark",[200,204,209,212,241,244,248,253,261,316,320,491,498,504,896,900,1068,1070,1074,1078,1084,1201,1204,1401,1407,1587,1591,1675,1677,1681,1684,2235,2239,2402,2404,2408,2411,2644,2646,2650,2657,2661,2668,2703,2707,2713,2853,2857,2860,2954,2966,2980,3195,3215,3217,3221,3234,3238,3399,3403,3581,3583],[201,202,203],"p",{},"Type Formats extend TypeScript's type system with validation, transformation, and serialization rules. Instead of writing validation schemas separately, you express constraints directly in your types.",[205,206,208],"h2",{"id":207},"overview","Overview",[201,210,211],{},"Type Formats provide:",[213,214,215,223,228,234],"ul",{},[216,217,218,219,222],"li",{},"✅ ",[220,221,54],"strong",{},": Min\u002Fmax length, patterns, allowed values",[216,224,218,225,227],{},[220,226,58],{},": Optimized binary encoding for numeric types",[216,229,218,230,233],{},[220,231,232],{},"Mock Generation",": Type-aware mock data with valid values",[216,235,236,237,240],{},"⚠️ ",[220,238,239],{},"Transformation",": Trim, lowercase, uppercase, capitalize (not implemented yet)",[242,243],"hr",{},[205,245,247],{"id":246},"string-formats","String Formats",[249,250,252],"h3",{"id":251},"built-in-string-formats","Built-in String Formats",[201,254,255,256,260],{},"Import string formats from ",[257,258,259],"code",{},"@mionjs\u002Ftype-formats\u002FStringFormats",":",[262,263,268],"pre",{"className":264,"code":265,"language":266,"meta":267,"style":267},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {FormatEmail, FormatEmailStrict, FormatEmailPunycode} from '@mionjs\u002Ftype-formats\u002FStringFormats';\n","ts","",[257,269,270],{"__ignoreMap":267},[271,272,275,279,283,287,290,293,295,298,301,304,307,310,313],"span",{"class":273,"line":274},"line",1,[271,276,278],{"class":277},"s7zQu","import",[271,280,282],{"class":281},"sMK4o"," {",[271,284,286],{"class":285},"sTEyZ","FormatEmail",[271,288,289],{"class":281},",",[271,291,292],{"class":285}," FormatEmailStrict",[271,294,289],{"class":281},[271,296,297],{"class":285}," FormatEmailPunycode",[271,299,300],{"class":281},"}",[271,302,303],{"class":277}," from",[271,305,306],{"class":281}," '",[271,308,259],{"class":309},"sfazB",[271,311,312],{"class":281},"'",[271,314,315],{"class":281},";\n",[249,317,319],{"id":318},"usage-examples","Usage Examples",[262,321,323],{"className":264,"code":322,"language":266,"meta":267,"style":267},"import {FormatEmail} from '@mionjs\u002Ftype-formats\u002FStringFormats';\n\ntype UserEmail = FormatEmail;\n\n\u002F\u002F Valid\n('user@example.com'); \u002F\u002F ✓\n('user+tag@example.com'); \u002F\u002F ✓ (allows + for email aliases)\n('user(comment)@test.com'); \u002F\u002F ✓\n\n\u002F\u002F Invalid\n('user@name@example.com'); \u002F\u002F ✗ (multiple @)\n('@example.com'); \u002F\u002F ✗ (missing local part)\n",[257,324,325,345,352,371,376,383,405,424,442,447,453,472],{"__ignoreMap":267},[271,326,327,329,331,333,335,337,339,341,343],{"class":273,"line":274},[271,328,278],{"class":277},[271,330,282],{"class":281},[271,332,286],{"class":285},[271,334,300],{"class":281},[271,336,303],{"class":277},[271,338,306],{"class":281},[271,340,259],{"class":309},[271,342,312],{"class":281},[271,344,315],{"class":281},[271,346,348],{"class":273,"line":347},2,[271,349,351],{"emptyLinePlaceholder":350},true,"\n",[271,353,355,359,363,366,369],{"class":273,"line":354},3,[271,356,358],{"class":357},"spNyl","type",[271,360,362],{"class":361},"sBMFI"," UserEmail",[271,364,365],{"class":281}," =",[271,367,368],{"class":361}," FormatEmail",[271,370,315],{"class":281},[271,372,374],{"class":273,"line":373},4,[271,375,351],{"emptyLinePlaceholder":350},[271,377,379],{"class":273,"line":378},5,[271,380,382],{"class":381},"sHwdD","\u002F\u002F Valid\n",[271,384,386,389,391,394,396,399,402],{"class":273,"line":385},6,[271,387,388],{"class":285},"(",[271,390,312],{"class":281},[271,392,393],{"class":309},"user@example.com",[271,395,312],{"class":281},[271,397,398],{"class":285},")",[271,400,401],{"class":281},";",[271,403,404],{"class":381}," \u002F\u002F ✓\n",[271,406,408,410,412,415,417,419,421],{"class":273,"line":407},7,[271,409,388],{"class":285},[271,411,312],{"class":281},[271,413,414],{"class":309},"user+tag@example.com",[271,416,312],{"class":281},[271,418,398],{"class":285},[271,420,401],{"class":281},[271,422,423],{"class":381}," \u002F\u002F ✓ (allows + for email aliases)\n",[271,425,427,429,431,434,436,438,440],{"class":273,"line":426},8,[271,428,388],{"class":285},[271,430,312],{"class":281},[271,432,433],{"class":309},"user(comment)@test.com",[271,435,312],{"class":281},[271,437,398],{"class":285},[271,439,401],{"class":281},[271,441,404],{"class":381},[271,443,445],{"class":273,"line":444},9,[271,446,351],{"emptyLinePlaceholder":350},[271,448,450],{"class":273,"line":449},10,[271,451,452],{"class":381},"\u002F\u002F Invalid\n",[271,454,456,458,460,463,465,467,469],{"class":273,"line":455},11,[271,457,388],{"class":285},[271,459,312],{"class":281},[271,461,462],{"class":309},"user@name@example.com",[271,464,312],{"class":281},[271,466,398],{"class":285},[271,468,401],{"class":281},[271,470,471],{"class":381}," \u002F\u002F ✗ (multiple @)\n",[271,473,475,477,479,482,484,486,488],{"class":273,"line":474},12,[271,476,388],{"class":285},[271,478,312],{"class":281},[271,480,481],{"class":309},"@example.com",[271,483,312],{"class":281},[271,485,398],{"class":285},[271,487,401],{"class":281},[271,489,490],{"class":381}," \u002F\u002F ✗ (missing local part)\n",[249,492,494,495],{"id":493},"custom-string-formats-with-formatstring","Custom String Formats with ",[257,496,497],{},"FormatString",[201,499,500,501,503],{},"Use ",[257,502,497],{}," to define custom string constraints:",[262,505,507],{"className":264,"code":506,"language":266,"meta":267,"style":267},"import {FormatString} from '@mionjs\u002Ftype-formats\u002FStringFormats';\n\n\u002F\u002F Username: 3-20 chars, lowercase, trimmed\ntype Username = FormatString\u003C{\n    minLength: 3;\n    maxLength: 20;\n    lowercase: true;\n    trim: true;\n}>;\n\n\u002F\u002F Slug with pattern validation\nconst slugRegex = \u002F^[a-z0-9-]+$\u002F;\ntype Slug = FormatString\u003C{\n    minLength: 1;\n    maxLength: 100;\n    pattern: {\n        val: typeof slugRegex;\n        errorMessage: 'Slug can only contain lowercase letters, numbers, and hyphens';\n        mockSamples: ['my-post', 'hello-world', 'article-123'];\n    };\n}>;\n\n\u002F\u002F Name with allowed characters only\ntype SafeName = FormatString\u003C{\n    minLength: 1;\n    maxLength: 50;\n    allowedChars: {\n        val: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ';\n        errorMessage: 'Name can only contain letters and spaces';\n    };\n    capitalize: true;\n}>;\n",[257,508,509,529,533,538,553,567,579,591,602,607,611,616,650,664,676,688,699,715,732,773,779,784,789,795,809,820,832,842,858,874,879,891],{"__ignoreMap":267},[271,510,511,513,515,517,519,521,523,525,527],{"class":273,"line":274},[271,512,278],{"class":277},[271,514,282],{"class":281},[271,516,497],{"class":285},[271,518,300],{"class":281},[271,520,303],{"class":277},[271,522,306],{"class":281},[271,524,259],{"class":309},[271,526,312],{"class":281},[271,528,315],{"class":281},[271,530,531],{"class":273,"line":347},[271,532,351],{"emptyLinePlaceholder":350},[271,534,535],{"class":273,"line":354},[271,536,537],{"class":381},"\u002F\u002F Username: 3-20 chars, lowercase, trimmed\n",[271,539,540,542,545,547,550],{"class":273,"line":373},[271,541,358],{"class":357},[271,543,544],{"class":361}," Username",[271,546,365],{"class":281},[271,548,549],{"class":361}," FormatString",[271,551,552],{"class":281},"\u003C{\n",[271,554,555,559,561,565],{"class":273,"line":378},[271,556,558],{"class":557},"swJcz","    minLength",[271,560,260],{"class":281},[271,562,564],{"class":563},"sbssI"," 3",[271,566,315],{"class":281},[271,568,569,572,574,577],{"class":273,"line":385},[271,570,571],{"class":557},"    maxLength",[271,573,260],{"class":281},[271,575,576],{"class":563}," 20",[271,578,315],{"class":281},[271,580,581,584,586,589],{"class":273,"line":407},[271,582,583],{"class":557},"    lowercase",[271,585,260],{"class":281},[271,587,588],{"class":361}," true",[271,590,315],{"class":281},[271,592,593,596,598,600],{"class":273,"line":426},[271,594,595],{"class":557},"    trim",[271,597,260],{"class":281},[271,599,588],{"class":361},[271,601,315],{"class":281},[271,603,604],{"class":273,"line":444},[271,605,606],{"class":281},"}>;\n",[271,608,609],{"class":273,"line":449},[271,610,351],{"emptyLinePlaceholder":350},[271,612,613],{"class":273,"line":455},[271,614,615],{"class":381},"\u002F\u002F Slug with pattern validation\n",[271,617,618,621,624,627,630,633,636,639,642,645,648],{"class":273,"line":474},[271,619,620],{"class":357},"const",[271,622,623],{"class":285}," slugRegex ",[271,625,626],{"class":281},"=",[271,628,629],{"class":281}," \u002F",[271,631,632],{"class":277},"^",[271,634,635],{"class":281},"[",[271,637,638],{"class":309},"a-z0-9-",[271,640,641],{"class":281},"]+",[271,643,644],{"class":277},"$",[271,646,647],{"class":281},"\u002F",[271,649,315],{"class":281},[271,651,653,655,658,660,662],{"class":273,"line":652},13,[271,654,358],{"class":357},[271,656,657],{"class":361}," Slug",[271,659,365],{"class":281},[271,661,549],{"class":361},[271,663,552],{"class":281},[271,665,667,669,671,674],{"class":273,"line":666},14,[271,668,558],{"class":557},[271,670,260],{"class":281},[271,672,673],{"class":563}," 1",[271,675,315],{"class":281},[271,677,679,681,683,686],{"class":273,"line":678},15,[271,680,571],{"class":557},[271,682,260],{"class":281},[271,684,685],{"class":563}," 100",[271,687,315],{"class":281},[271,689,691,694,696],{"class":273,"line":690},16,[271,692,693],{"class":557},"    pattern",[271,695,260],{"class":281},[271,697,698],{"class":281}," {\n",[271,700,702,705,707,710,713],{"class":273,"line":701},17,[271,703,704],{"class":557},"        val",[271,706,260],{"class":281},[271,708,709],{"class":281}," typeof",[271,711,712],{"class":285}," slugRegex",[271,714,315],{"class":281},[271,716,718,721,723,725,728,730],{"class":273,"line":717},18,[271,719,720],{"class":557},"        errorMessage",[271,722,260],{"class":281},[271,724,306],{"class":281},[271,726,727],{"class":309},"Slug can only contain lowercase letters, numbers, and hyphens",[271,729,312],{"class":281},[271,731,315],{"class":281},[271,733,735,738,740,743,745,748,750,752,754,757,759,761,763,766,768,771],{"class":273,"line":734},19,[271,736,737],{"class":557},"        mockSamples",[271,739,260],{"class":281},[271,741,742],{"class":285}," [",[271,744,312],{"class":281},[271,746,747],{"class":309},"my-post",[271,749,312],{"class":281},[271,751,289],{"class":281},[271,753,306],{"class":281},[271,755,756],{"class":309},"hello-world",[271,758,312],{"class":281},[271,760,289],{"class":281},[271,762,306],{"class":281},[271,764,765],{"class":309},"article-123",[271,767,312],{"class":281},[271,769,770],{"class":285},"]",[271,772,315],{"class":281},[271,774,776],{"class":273,"line":775},20,[271,777,778],{"class":281},"    };\n",[271,780,782],{"class":273,"line":781},21,[271,783,606],{"class":281},[271,785,787],{"class":273,"line":786},22,[271,788,351],{"emptyLinePlaceholder":350},[271,790,792],{"class":273,"line":791},23,[271,793,794],{"class":381},"\u002F\u002F Name with allowed characters only\n",[271,796,798,800,803,805,807],{"class":273,"line":797},24,[271,799,358],{"class":357},[271,801,802],{"class":361}," SafeName",[271,804,365],{"class":281},[271,806,549],{"class":361},[271,808,552],{"class":281},[271,810,812,814,816,818],{"class":273,"line":811},25,[271,813,558],{"class":557},[271,815,260],{"class":281},[271,817,673],{"class":563},[271,819,315],{"class":281},[271,821,823,825,827,830],{"class":273,"line":822},26,[271,824,571],{"class":557},[271,826,260],{"class":281},[271,828,829],{"class":563}," 50",[271,831,315],{"class":281},[271,833,835,838,840],{"class":273,"line":834},27,[271,836,837],{"class":557},"    allowedChars",[271,839,260],{"class":281},[271,841,698],{"class":281},[271,843,845,847,849,851,854,856],{"class":273,"line":844},28,[271,846,704],{"class":557},[271,848,260],{"class":281},[271,850,306],{"class":281},[271,852,853],{"class":309},"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ",[271,855,312],{"class":281},[271,857,315],{"class":281},[271,859,861,863,865,867,870,872],{"class":273,"line":860},29,[271,862,720],{"class":557},[271,864,260],{"class":281},[271,866,306],{"class":281},[271,868,869],{"class":309},"Name can only contain letters and spaces",[271,871,312],{"class":281},[271,873,315],{"class":281},[271,875,877],{"class":273,"line":876},30,[271,878,778],{"class":281},[271,880,882,885,887,889],{"class":273,"line":881},31,[271,883,884],{"class":557},"    capitalize",[271,886,260],{"class":281},[271,888,588],{"class":361},[271,890,315],{"class":281},[271,892,894],{"class":273,"line":893},32,[271,895,606],{"class":281},[249,897,899],{"id":898},"string-format-parameters","String Format Parameters",[901,902,903,919],"table",{},[904,905,906],"thead",{},[907,908,909,913,916],"tr",{},[910,911,912],"th",{},"Parameter",[910,914,915],{},"Type",[910,917,918],{},"Description",[920,921,922,938,952,967,982,996,1011,1026,1040,1054],"tbody",{},[907,923,924,930,935],{},[925,926,927],"td",{},[257,928,929],{},"minLength",[925,931,932],{},[257,933,934],{},"number",[925,936,937],{},"Minimum string length",[907,939,940,945,949],{},[925,941,942],{},[257,943,944],{},"maxLength",[925,946,947],{},[257,948,934],{},[925,950,951],{},"Maximum string length",[907,953,954,959,964],{},[925,955,956],{},[257,957,958],{},"pattern",[925,960,961],{},[257,962,963],{},"{val: RegExp; errorMessage: string; mockSamples: string[]}",[925,965,966],{},"Regex validation",[907,968,969,974,979],{},[925,970,971],{},[257,972,973],{},"allowedChars",[925,975,976],{},[257,977,978],{},"{val: string; errorMessage: string}",[925,980,981],{},"Allowed characters",[907,983,984,989,993],{},[925,985,986],{},[257,987,988],{},"disallowedChars",[925,990,991],{},[257,992,978],{},[925,994,995],{},"Disallowed characters",[907,997,998,1003,1008],{},[925,999,1000],{},[257,1001,1002],{},"allowedValues",[925,1004,1005],{},[257,1006,1007],{},"{val: string[]; errorMessage: string}",[925,1009,1010],{},"Enum-like validation",[907,1012,1013,1018,1023],{},[925,1014,1015],{},[257,1016,1017],{},"lowercase",[925,1019,1020],{},[257,1021,1022],{},"boolean",[925,1024,1025],{},"Transform to lowercase",[907,1027,1028,1033,1037],{},[925,1029,1030],{},[257,1031,1032],{},"uppercase",[925,1034,1035],{},[257,1036,1022],{},[925,1038,1039],{},"Transform to uppercase",[907,1041,1042,1047,1051],{},[925,1043,1044],{},[257,1045,1046],{},"capitalize",[925,1048,1049],{},[257,1050,1022],{},[925,1052,1053],{},"Capitalize first letter",[907,1055,1056,1061,1065],{},[925,1057,1058],{},[257,1059,1060],{},"trim",[925,1062,1063],{},[257,1064,1022],{},[925,1066,1067],{},"Trim whitespace",[242,1069],{},[205,1071,1073],{"id":1072},"number-formats","Number Formats",[249,1075,1077],{"id":1076},"built-in-number-formats","Built-in Number Formats",[201,1079,1080,1081,260],{},"Import number formats from ",[257,1082,1083],{},"@mionjs\u002Ftype-formats\u002FNumberFormats",[262,1085,1087],{"className":264,"code":1086,"language":266,"meta":267,"style":267},"import {\n    FormatNumber,\n    FormatInteger,\n    FormatFloat,\n    FormatPositive,\n    FormatNegative,\n    FormatPositiveInt,\n    FormatNegativeInt,\n    FormatInt8,\n    FormatInt16,\n    FormatInt32,\n    FormatUInt8,\n    FormatUInt16,\n    FormatUInt32,\n} from '@mionjs\u002Ftype-formats\u002FNumberFormats';\n",[257,1088,1089,1095,1103,1110,1117,1124,1131,1138,1145,1152,1159,1166,1173,1180,1187],{"__ignoreMap":267},[271,1090,1091,1093],{"class":273,"line":274},[271,1092,278],{"class":277},[271,1094,698],{"class":281},[271,1096,1097,1100],{"class":273,"line":347},[271,1098,1099],{"class":285},"    FormatNumber",[271,1101,1102],{"class":281},",\n",[271,1104,1105,1108],{"class":273,"line":354},[271,1106,1107],{"class":285},"    FormatInteger",[271,1109,1102],{"class":281},[271,1111,1112,1115],{"class":273,"line":373},[271,1113,1114],{"class":285},"    FormatFloat",[271,1116,1102],{"class":281},[271,1118,1119,1122],{"class":273,"line":378},[271,1120,1121],{"class":285},"    FormatPositive",[271,1123,1102],{"class":281},[271,1125,1126,1129],{"class":273,"line":385},[271,1127,1128],{"class":285},"    FormatNegative",[271,1130,1102],{"class":281},[271,1132,1133,1136],{"class":273,"line":407},[271,1134,1135],{"class":285},"    FormatPositiveInt",[271,1137,1102],{"class":281},[271,1139,1140,1143],{"class":273,"line":426},[271,1141,1142],{"class":285},"    FormatNegativeInt",[271,1144,1102],{"class":281},[271,1146,1147,1150],{"class":273,"line":444},[271,1148,1149],{"class":285},"    FormatInt8",[271,1151,1102],{"class":281},[271,1153,1154,1157],{"class":273,"line":449},[271,1155,1156],{"class":285},"    FormatInt16",[271,1158,1102],{"class":281},[271,1160,1161,1164],{"class":273,"line":455},[271,1162,1163],{"class":285},"    FormatInt32",[271,1165,1102],{"class":281},[271,1167,1168,1171],{"class":273,"line":474},[271,1169,1170],{"class":285},"    FormatUInt8",[271,1172,1102],{"class":281},[271,1174,1175,1178],{"class":273,"line":652},[271,1176,1177],{"class":285},"    FormatUInt16",[271,1179,1102],{"class":281},[271,1181,1182,1185],{"class":273,"line":666},[271,1183,1184],{"class":285},"    FormatUInt32",[271,1186,1102],{"class":281},[271,1188,1189,1191,1193,1195,1197,1199],{"class":273,"line":678},[271,1190,300],{"class":281},[271,1192,303],{"class":277},[271,1194,306],{"class":281},[271,1196,1083],{"class":309},[271,1198,312],{"class":281},[271,1200,315],{"class":281},[249,1202,319],{"id":1203},"usage-examples-1",[262,1205,1207],{"className":264,"code":1206,"language":266,"meta":267,"style":267},"import {FormatNumber} from '@mionjs\u002Ftype-formats\u002FNumberFormats';\n\n\u002F\u002F Age with valid range\ntype Age = FormatNumber\u003C{\n    min: 0;\n    max: 120;\n    integer: true;\n}>;\n\n\u002F\u002F Percentage with decimals\ntype Percentage = FormatNumber\u003C{\n    min: 0;\n    max: 100;\n}>;\n\n\u002F\u002F Price must be multiple of 0.01 (cents)\ntype Price = FormatNumber\u003C{\n    min: 0;\n    multipleOf: 1; \u002F\u002F multipleOf must be integer\n    integer: true; \u002F\u002F store as cents\n}>;\n",[257,1208,1209,1230,1234,1239,1253,1265,1277,1288,1292,1296,1301,1314,1324,1334,1338,1342,1347,1360,1370,1384,1397],{"__ignoreMap":267},[271,1210,1211,1213,1215,1218,1220,1222,1224,1226,1228],{"class":273,"line":274},[271,1212,278],{"class":277},[271,1214,282],{"class":281},[271,1216,1217],{"class":285},"FormatNumber",[271,1219,300],{"class":281},[271,1221,303],{"class":277},[271,1223,306],{"class":281},[271,1225,1083],{"class":309},[271,1227,312],{"class":281},[271,1229,315],{"class":281},[271,1231,1232],{"class":273,"line":347},[271,1233,351],{"emptyLinePlaceholder":350},[271,1235,1236],{"class":273,"line":354},[271,1237,1238],{"class":381},"\u002F\u002F Age with valid range\n",[271,1240,1241,1243,1246,1248,1251],{"class":273,"line":373},[271,1242,358],{"class":357},[271,1244,1245],{"class":361}," Age",[271,1247,365],{"class":281},[271,1249,1250],{"class":361}," FormatNumber",[271,1252,552],{"class":281},[271,1254,1255,1258,1260,1263],{"class":273,"line":378},[271,1256,1257],{"class":557},"    min",[271,1259,260],{"class":281},[271,1261,1262],{"class":563}," 0",[271,1264,315],{"class":281},[271,1266,1267,1270,1272,1275],{"class":273,"line":385},[271,1268,1269],{"class":557},"    max",[271,1271,260],{"class":281},[271,1273,1274],{"class":563}," 120",[271,1276,315],{"class":281},[271,1278,1279,1282,1284,1286],{"class":273,"line":407},[271,1280,1281],{"class":557},"    integer",[271,1283,260],{"class":281},[271,1285,588],{"class":361},[271,1287,315],{"class":281},[271,1289,1290],{"class":273,"line":426},[271,1291,606],{"class":281},[271,1293,1294],{"class":273,"line":444},[271,1295,351],{"emptyLinePlaceholder":350},[271,1297,1298],{"class":273,"line":449},[271,1299,1300],{"class":381},"\u002F\u002F Percentage with decimals\n",[271,1302,1303,1305,1308,1310,1312],{"class":273,"line":455},[271,1304,358],{"class":357},[271,1306,1307],{"class":361}," Percentage",[271,1309,365],{"class":281},[271,1311,1250],{"class":361},[271,1313,552],{"class":281},[271,1315,1316,1318,1320,1322],{"class":273,"line":474},[271,1317,1257],{"class":557},[271,1319,260],{"class":281},[271,1321,1262],{"class":563},[271,1323,315],{"class":281},[271,1325,1326,1328,1330,1332],{"class":273,"line":652},[271,1327,1269],{"class":557},[271,1329,260],{"class":281},[271,1331,685],{"class":563},[271,1333,315],{"class":281},[271,1335,1336],{"class":273,"line":666},[271,1337,606],{"class":281},[271,1339,1340],{"class":273,"line":678},[271,1341,351],{"emptyLinePlaceholder":350},[271,1343,1344],{"class":273,"line":690},[271,1345,1346],{"class":381},"\u002F\u002F Price must be multiple of 0.01 (cents)\n",[271,1348,1349,1351,1354,1356,1358],{"class":273,"line":701},[271,1350,358],{"class":357},[271,1352,1353],{"class":361}," Price",[271,1355,365],{"class":281},[271,1357,1250],{"class":361},[271,1359,552],{"class":281},[271,1361,1362,1364,1366,1368],{"class":273,"line":717},[271,1363,1257],{"class":557},[271,1365,260],{"class":281},[271,1367,1262],{"class":563},[271,1369,315],{"class":281},[271,1371,1372,1375,1377,1379,1381],{"class":273,"line":734},[271,1373,1374],{"class":557},"    multipleOf",[271,1376,260],{"class":281},[271,1378,673],{"class":563},[271,1380,401],{"class":281},[271,1382,1383],{"class":381}," \u002F\u002F multipleOf must be integer\n",[271,1385,1386,1388,1390,1392,1394],{"class":273,"line":775},[271,1387,1281],{"class":557},[271,1389,260],{"class":281},[271,1391,588],{"class":361},[271,1393,401],{"class":281},[271,1395,1396],{"class":381}," \u002F\u002F store as cents\n",[271,1398,1399],{"class":273,"line":781},[271,1400,606],{"class":281},[249,1402,1404,1405],{"id":1403},"custom-number-formats-with-formatnumber","Custom Number Formats with ",[257,1406,1217],{},[262,1408,1409],{"className":264,"code":1206,"language":266,"meta":267,"style":267},[257,1410,1411,1431,1435,1439,1451,1461,1471,1481,1485,1489,1493,1505,1515,1525,1529,1533,1537,1549,1559,1571,1583],{"__ignoreMap":267},[271,1412,1413,1415,1417,1419,1421,1423,1425,1427,1429],{"class":273,"line":274},[271,1414,278],{"class":277},[271,1416,282],{"class":281},[271,1418,1217],{"class":285},[271,1420,300],{"class":281},[271,1422,303],{"class":277},[271,1424,306],{"class":281},[271,1426,1083],{"class":309},[271,1428,312],{"class":281},[271,1430,315],{"class":281},[271,1432,1433],{"class":273,"line":347},[271,1434,351],{"emptyLinePlaceholder":350},[271,1436,1437],{"class":273,"line":354},[271,1438,1238],{"class":381},[271,1440,1441,1443,1445,1447,1449],{"class":273,"line":373},[271,1442,358],{"class":357},[271,1444,1245],{"class":361},[271,1446,365],{"class":281},[271,1448,1250],{"class":361},[271,1450,552],{"class":281},[271,1452,1453,1455,1457,1459],{"class":273,"line":378},[271,1454,1257],{"class":557},[271,1456,260],{"class":281},[271,1458,1262],{"class":563},[271,1460,315],{"class":281},[271,1462,1463,1465,1467,1469],{"class":273,"line":385},[271,1464,1269],{"class":557},[271,1466,260],{"class":281},[271,1468,1274],{"class":563},[271,1470,315],{"class":281},[271,1472,1473,1475,1477,1479],{"class":273,"line":407},[271,1474,1281],{"class":557},[271,1476,260],{"class":281},[271,1478,588],{"class":361},[271,1480,315],{"class":281},[271,1482,1483],{"class":273,"line":426},[271,1484,606],{"class":281},[271,1486,1487],{"class":273,"line":444},[271,1488,351],{"emptyLinePlaceholder":350},[271,1490,1491],{"class":273,"line":449},[271,1492,1300],{"class":381},[271,1494,1495,1497,1499,1501,1503],{"class":273,"line":455},[271,1496,358],{"class":357},[271,1498,1307],{"class":361},[271,1500,365],{"class":281},[271,1502,1250],{"class":361},[271,1504,552],{"class":281},[271,1506,1507,1509,1511,1513],{"class":273,"line":474},[271,1508,1257],{"class":557},[271,1510,260],{"class":281},[271,1512,1262],{"class":563},[271,1514,315],{"class":281},[271,1516,1517,1519,1521,1523],{"class":273,"line":652},[271,1518,1269],{"class":557},[271,1520,260],{"class":281},[271,1522,685],{"class":563},[271,1524,315],{"class":281},[271,1526,1527],{"class":273,"line":666},[271,1528,606],{"class":281},[271,1530,1531],{"class":273,"line":678},[271,1532,351],{"emptyLinePlaceholder":350},[271,1534,1535],{"class":273,"line":690},[271,1536,1346],{"class":381},[271,1538,1539,1541,1543,1545,1547],{"class":273,"line":701},[271,1540,358],{"class":357},[271,1542,1353],{"class":361},[271,1544,365],{"class":281},[271,1546,1250],{"class":361},[271,1548,552],{"class":281},[271,1550,1551,1553,1555,1557],{"class":273,"line":717},[271,1552,1257],{"class":557},[271,1554,260],{"class":281},[271,1556,1262],{"class":563},[271,1558,315],{"class":281},[271,1560,1561,1563,1565,1567,1569],{"class":273,"line":734},[271,1562,1374],{"class":557},[271,1564,260],{"class":281},[271,1566,673],{"class":563},[271,1568,401],{"class":281},[271,1570,1383],{"class":381},[271,1572,1573,1575,1577,1579,1581],{"class":273,"line":775},[271,1574,1281],{"class":557},[271,1576,260],{"class":281},[271,1578,588],{"class":361},[271,1580,401],{"class":281},[271,1582,1396],{"class":381},[271,1584,1585],{"class":273,"line":781},[271,1586,606],{"class":281},[249,1588,1590],{"id":1589},"number-format-parameters","Number Format Parameters",[901,1592,1593,1603],{},[904,1594,1595],{},[907,1596,1597,1599,1601],{},[910,1598,912],{},[910,1600,915],{},[910,1602,918],{},[920,1604,1605,1619,1633,1647,1661],{},[907,1606,1607,1612,1616],{},[925,1608,1609],{},[257,1610,1611],{},"min",[925,1613,1614],{},[257,1615,934],{},[925,1617,1618],{},"Minimum value",[907,1620,1621,1626,1630],{},[925,1622,1623],{},[257,1624,1625],{},"max",[925,1627,1628],{},[257,1629,934],{},[925,1631,1632],{},"Maximum value",[907,1634,1635,1640,1644],{},[925,1636,1637],{},[257,1638,1639],{},"integer",[925,1641,1642],{},[257,1643,1022],{},[925,1645,1646],{},"Must be an integer",[907,1648,1649,1654,1658],{},[925,1650,1651],{},[257,1652,1653],{},"float",[925,1655,1656],{},[257,1657,1022],{},[925,1659,1660],{},"Explicitly a float (affects binary serialization)",[907,1662,1663,1668,1672],{},[925,1664,1665],{},[257,1666,1667],{},"multipleOf",[925,1669,1670],{},[257,1671,934],{},[925,1673,1674],{},"Must be a multiple of this value",[242,1676],{},[205,1678,1680],{"id":1679},"complete-example","Complete Example",[201,1682,1683],{},"Here's a comprehensive example demonstrating various type formats:",[262,1685,1687],{"className":264,"code":1686,"language":266,"meta":267,"style":267},"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",[257,1688,1689,1695,1702,1709,1716,1723,1730,1745,1749,1759,1771,1782,1793,1802,1813,1824,1828,1842,1854,1878,1883,1887,1892,1921,1945,1969,1993,2017,2021,2026,2042,2046,2051,2069,2075,2098,2103,2109,2137,2159,2165,2171,2181,2202,2230],{"__ignoreMap":267},[271,1690,1691,1693],{"class":273,"line":274},[271,1692,278],{"class":277},[271,1694,698],{"class":281},[271,1696,1697,1700],{"class":273,"line":347},[271,1698,1699],{"class":285},"    createIsTypeFn",[271,1701,1102],{"class":281},[271,1703,1704,1707],{"class":273,"line":354},[271,1705,1706],{"class":285},"    createTypeErrorsFn",[271,1708,1102],{"class":281},[271,1710,1711,1714],{"class":273,"line":373},[271,1712,1713],{"class":285},"    createStringifyJsonFn",[271,1715,1102],{"class":281},[271,1717,1718,1721],{"class":273,"line":378},[271,1719,1720],{"class":285},"    createRestoreFromJsonFn",[271,1722,1102],{"class":281},[271,1724,1725,1728],{"class":273,"line":385},[271,1726,1727],{"class":285},"    createMockTypeFn",[271,1729,1102],{"class":281},[271,1731,1732,1734,1736,1738,1741,1743],{"class":273,"line":407},[271,1733,300],{"class":281},[271,1735,303],{"class":277},[271,1737,306],{"class":281},[271,1739,1740],{"class":309},"@mionjs\u002Frun-types",[271,1742,312],{"class":281},[271,1744,315],{"class":281},[271,1746,1747],{"class":273,"line":426},[271,1748,351],{"emptyLinePlaceholder":350},[271,1750,1751,1754,1757],{"class":273,"line":444},[271,1752,1753],{"class":357},"interface",[271,1755,1756],{"class":361}," BlogPost",[271,1758,698],{"class":281},[271,1760,1761,1764,1766,1769],{"class":273,"line":449},[271,1762,1763],{"class":557},"    id",[271,1765,260],{"class":281},[271,1767,1768],{"class":361}," string",[271,1770,315],{"class":281},[271,1772,1773,1776,1778,1780],{"class":273,"line":455},[271,1774,1775],{"class":557},"    title",[271,1777,260],{"class":281},[271,1779,1768],{"class":361},[271,1781,315],{"class":281},[271,1783,1784,1787,1789,1791],{"class":273,"line":474},[271,1785,1786],{"class":557},"    content",[271,1788,260],{"class":281},[271,1790,1768],{"class":361},[271,1792,315],{"class":281},[271,1794,1795,1798,1800],{"class":273,"line":652},[271,1796,1797],{"class":557},"    author",[271,1799,260],{"class":281},[271,1801,698],{"class":281},[271,1803,1804,1807,1809,1811],{"class":273,"line":666},[271,1805,1806],{"class":557},"        name",[271,1808,260],{"class":281},[271,1810,1768],{"class":361},[271,1812,315],{"class":281},[271,1814,1815,1818,1820,1822],{"class":273,"line":678},[271,1816,1817],{"class":557},"        email",[271,1819,260],{"class":281},[271,1821,1768],{"class":361},[271,1823,315],{"class":281},[271,1825,1826],{"class":273,"line":690},[271,1827,778],{"class":281},[271,1829,1830,1833,1835,1837,1840],{"class":273,"line":701},[271,1831,1832],{"class":557},"    tags",[271,1834,260],{"class":281},[271,1836,1768],{"class":361},[271,1838,1839],{"class":285},"[]",[271,1841,315],{"class":281},[271,1843,1844,1847,1849,1852],{"class":273,"line":717},[271,1845,1846],{"class":557},"    publishedAt",[271,1848,260],{"class":281},[271,1850,1851],{"class":361}," Date",[271,1853,315],{"class":281},[271,1855,1856,1859,1861,1864,1867,1870,1872,1875],{"class":273,"line":734},[271,1857,1858],{"class":557},"    metadata",[271,1860,260],{"class":281},[271,1862,1863],{"class":361}," Map",[271,1865,1866],{"class":281},"\u003C",[271,1868,1869],{"class":361},"string",[271,1871,289],{"class":281},[271,1873,1874],{"class":361}," any",[271,1876,1877],{"class":281},">;\n",[271,1879,1880],{"class":273,"line":775},[271,1881,1882],{"class":281},"}\n",[271,1884,1885],{"class":273,"line":781},[271,1886,351],{"emptyLinePlaceholder":350},[271,1888,1889],{"class":273,"line":786},[271,1890,1891],{"class":381},"\u002F\u002F Create all needed functions\n",[271,1893,1894,1896,1899,1901,1904,1908,1910,1913,1916,1919],{"class":273,"line":791},[271,1895,620],{"class":357},[271,1897,1898],{"class":285}," isPost ",[271,1900,626],{"class":281},[271,1902,1903],{"class":277}," await",[271,1905,1907],{"class":1906},"s2Zo4"," createIsTypeFn",[271,1909,1866],{"class":281},[271,1911,1912],{"class":361},"BlogPost",[271,1914,1915],{"class":281},">",[271,1917,1918],{"class":285},"()",[271,1920,315],{"class":281},[271,1922,1923,1925,1928,1930,1932,1935,1937,1939,1941,1943],{"class":273,"line":797},[271,1924,620],{"class":357},[271,1926,1927],{"class":285}," getPostErrors ",[271,1929,626],{"class":281},[271,1931,1903],{"class":277},[271,1933,1934],{"class":1906}," createTypeErrorsFn",[271,1936,1866],{"class":281},[271,1938,1912],{"class":361},[271,1940,1915],{"class":281},[271,1942,1918],{"class":285},[271,1944,315],{"class":281},[271,1946,1947,1949,1952,1954,1956,1959,1961,1963,1965,1967],{"class":273,"line":811},[271,1948,620],{"class":357},[271,1950,1951],{"class":285}," stringifyPost ",[271,1953,626],{"class":281},[271,1955,1903],{"class":277},[271,1957,1958],{"class":1906}," createStringifyJsonFn",[271,1960,1866],{"class":281},[271,1962,1912],{"class":361},[271,1964,1915],{"class":281},[271,1966,1918],{"class":285},[271,1968,315],{"class":281},[271,1970,1971,1973,1976,1978,1980,1983,1985,1987,1989,1991],{"class":273,"line":822},[271,1972,620],{"class":357},[271,1974,1975],{"class":285}," restorePost ",[271,1977,626],{"class":281},[271,1979,1903],{"class":277},[271,1981,1982],{"class":1906}," createRestoreFromJsonFn",[271,1984,1866],{"class":281},[271,1986,1912],{"class":361},[271,1988,1915],{"class":281},[271,1990,1918],{"class":285},[271,1992,315],{"class":281},[271,1994,1995,1997,2000,2002,2004,2007,2009,2011,2013,2015],{"class":273,"line":834},[271,1996,620],{"class":357},[271,1998,1999],{"class":285}," mockPost ",[271,2001,626],{"class":281},[271,2003,1903],{"class":277},[271,2005,2006],{"class":1906}," createMockTypeFn",[271,2008,1866],{"class":281},[271,2010,1912],{"class":361},[271,2012,1915],{"class":281},[271,2014,1918],{"class":285},[271,2016,315],{"class":281},[271,2018,2019],{"class":273,"line":844},[271,2020,351],{"emptyLinePlaceholder":350},[271,2022,2023],{"class":273,"line":860},[271,2024,2025],{"class":381},"\u002F\u002F Generate mock data\n",[271,2027,2028,2030,2033,2035,2038,2040],{"class":273,"line":876},[271,2029,620],{"class":357},[271,2031,2032],{"class":285}," post ",[271,2034,626],{"class":281},[271,2036,2037],{"class":1906}," mockPost",[271,2039,1918],{"class":285},[271,2041,315],{"class":281},[271,2043,2044],{"class":273,"line":881},[271,2045,351],{"emptyLinePlaceholder":350},[271,2047,2048],{"class":273,"line":893},[271,2049,2050],{"class":381},"\u002F\u002F Validate\n",[271,2052,2054,2057,2060,2063,2066],{"class":273,"line":2053},33,[271,2055,2056],{"class":277},"if",[271,2058,2059],{"class":285}," (",[271,2061,2062],{"class":1906},"isPost",[271,2064,2065],{"class":285},"(post)) ",[271,2067,2068],{"class":281},"{\n",[271,2070,2072],{"class":273,"line":2071},34,[271,2073,2074],{"class":381},"    \u002F\u002F Serialize to JSON (does not mutate original)\n",[271,2076,2078,2081,2084,2086,2089,2091,2094,2096],{"class":273,"line":2077},35,[271,2079,2080],{"class":357},"    const",[271,2082,2083],{"class":285}," json",[271,2085,365],{"class":281},[271,2087,2088],{"class":1906}," stringifyPost",[271,2090,388],{"class":557},[271,2092,2093],{"class":285},"post",[271,2095,398],{"class":557},[271,2097,315],{"class":281},[271,2099,2101],{"class":273,"line":2100},36,[271,2102,351],{"emptyLinePlaceholder":350},[271,2104,2106],{"class":273,"line":2105},37,[271,2107,2108],{"class":381},"    \u002F\u002F Deserialize\n",[271,2110,2112,2114,2117,2119,2122,2125,2128,2130,2133,2135],{"class":273,"line":2111},38,[271,2113,2080],{"class":357},[271,2115,2116],{"class":285}," parsed",[271,2118,365],{"class":281},[271,2120,2121],{"class":285}," JSON",[271,2123,2124],{"class":281},".",[271,2126,2127],{"class":1906},"parse",[271,2129,388],{"class":557},[271,2131,2132],{"class":285},"json",[271,2134,398],{"class":557},[271,2136,315],{"class":281},[271,2138,2140,2142,2145,2147,2150,2152,2155,2157],{"class":273,"line":2139},39,[271,2141,2080],{"class":357},[271,2143,2144],{"class":285}," restored",[271,2146,365],{"class":281},[271,2148,2149],{"class":1906}," restorePost",[271,2151,388],{"class":557},[271,2153,2154],{"class":285},"parsed",[271,2156,398],{"class":557},[271,2158,315],{"class":281},[271,2160,2162],{"class":273,"line":2161},40,[271,2163,2164],{"class":381},"    \u002F\u002F restored.publishedAt is a Date\n",[271,2166,2168],{"class":273,"line":2167},41,[271,2169,2170],{"class":381},"    \u002F\u002F restored.metadata is a Map\n",[271,2172,2174,2176,2179],{"class":273,"line":2173},42,[271,2175,300],{"class":281},[271,2177,2178],{"class":277}," else",[271,2180,698],{"class":281},[271,2182,2184,2186,2189,2191,2194,2196,2198,2200],{"class":273,"line":2183},43,[271,2185,2080],{"class":357},[271,2187,2188],{"class":285}," errors",[271,2190,365],{"class":281},[271,2192,2193],{"class":1906}," getPostErrors",[271,2195,388],{"class":557},[271,2197,2093],{"class":285},[271,2199,398],{"class":557},[271,2201,315],{"class":281},[271,2203,2205,2208,2210,2213,2215,2217,2220,2222,2224,2226,2228],{"class":273,"line":2204},44,[271,2206,2207],{"class":285},"    console",[271,2209,2124],{"class":281},[271,2211,2212],{"class":1906},"log",[271,2214,388],{"class":557},[271,2216,312],{"class":281},[271,2218,2219],{"class":309},"Validation failed:",[271,2221,312],{"class":281},[271,2223,289],{"class":281},[271,2225,2188],{"class":285},[271,2227,398],{"class":557},[271,2229,315],{"class":281},[271,2231,2233],{"class":273,"line":2232},45,[271,2234,1882],{"class":281},[249,2236,2238],{"id":2237},"using-with-validation","Using with Validation",[262,2240,2242],{"className":264,"code":2241,"language":266,"meta":267,"style":267},"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",[257,2243,2244,2265,2269,2278,2289,2301,2305,2309,2333,2337,2382,2387,2392,2397],{"__ignoreMap":267},[271,2245,2246,2248,2250,2253,2255,2257,2259,2261,2263],{"class":273,"line":274},[271,2247,278],{"class":277},[271,2249,282],{"class":281},[271,2251,2252],{"class":285},"createTypeErrorsFn",[271,2254,300],{"class":281},[271,2256,303],{"class":277},[271,2258,306],{"class":281},[271,2260,1740],{"class":309},[271,2262,312],{"class":281},[271,2264,315],{"class":281},[271,2266,2267],{"class":273,"line":347},[271,2268,351],{"emptyLinePlaceholder":350},[271,2270,2271,2273,2276],{"class":273,"line":354},[271,2272,1753],{"class":357},[271,2274,2275],{"class":361}," User",[271,2277,698],{"class":281},[271,2279,2280,2283,2285,2287],{"class":273,"line":373},[271,2281,2282],{"class":557},"    name",[271,2284,260],{"class":281},[271,2286,1768],{"class":361},[271,2288,315],{"class":281},[271,2290,2291,2294,2296,2299],{"class":273,"line":378},[271,2292,2293],{"class":557},"    age",[271,2295,260],{"class":281},[271,2297,2298],{"class":361}," number",[271,2300,315],{"class":281},[271,2302,2303],{"class":273,"line":385},[271,2304,1882],{"class":281},[271,2306,2307],{"class":273,"line":407},[271,2308,351],{"emptyLinePlaceholder":350},[271,2310,2311,2313,2316,2318,2320,2322,2324,2327,2329,2331],{"class":273,"line":426},[271,2312,620],{"class":357},[271,2314,2315],{"class":285}," getUserErrors ",[271,2317,626],{"class":281},[271,2319,1903],{"class":277},[271,2321,1934],{"class":1906},[271,2323,1866],{"class":281},[271,2325,2326],{"class":361},"User",[271,2328,1915],{"class":281},[271,2330,1918],{"class":285},[271,2332,315],{"class":281},[271,2334,2335],{"class":273,"line":444},[271,2336,351],{"emptyLinePlaceholder":350},[271,2338,2339,2341,2344,2346,2349,2351,2354,2357,2359,2362,2364,2367,2369,2371,2374,2376,2378,2380],{"class":273,"line":449},[271,2340,620],{"class":357},[271,2342,2343],{"class":285}," errors ",[271,2345,626],{"class":281},[271,2347,2348],{"class":1906}," getUserErrors",[271,2350,388],{"class":285},[271,2352,2353],{"class":281},"{",[271,2355,2356],{"class":557},"name",[271,2358,260],{"class":281},[271,2360,2361],{"class":563}," 123",[271,2363,289],{"class":281},[271,2365,2366],{"class":557}," age",[271,2368,260],{"class":281},[271,2370,306],{"class":281},[271,2372,2373],{"class":309},"invalid",[271,2375,312],{"class":281},[271,2377,300],{"class":281},[271,2379,398],{"class":285},[271,2381,315],{"class":281},[271,2383,2384],{"class":273,"line":455},[271,2385,2386],{"class":381},"\u002F\u002F Returns: [\n",[271,2388,2389],{"class":273,"line":474},[271,2390,2391],{"class":381},"\u002F\u002F   { path: ['name'], expected: 'string', actual: 'number' },\n",[271,2393,2394],{"class":273,"line":652},[271,2395,2396],{"class":381},"\u002F\u002F   { path: ['age'], expected: 'number', actual: 'string' }\n",[271,2398,2399],{"class":273,"line":666},[271,2400,2401],{"class":381},"\u002F\u002F ]\n",[242,2403],{},[205,2405,2407],{"id":2406},"binary-serialization-optimization","Binary Serialization Optimization",[201,2409,2410],{},"Use Number formats with specific ranges enable optimized binary serialization:",[262,2412,2414],{"className":264,"code":2413,"language":266,"meta":267,"style":267},"import {createToBinaryFn, createFromBinaryFn} from '@mionjs\u002Frun-types';\n\ninterface User {\n    name: string;\n    age: number;\n}\n\n\u002F\u002F start-to-binary\nconst toBinary = await createToBinaryFn\u003CUser>();\nconst buffer = toBinary({name: 'John', age: 30});\n\u002F\u002F Returns Uint8Array with optimized binary encoding\n\u002F\u002F end-to-binary\n\n\u002F\u002F start-from-binary\nconst 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\u002F\u002F end-from-binary\n",[257,2415,2416,2442,2446,2454,2464,2474,2478,2482,2487,2511,2553,2558,2563,2567,2572,2595,2617,2634,2639],{"__ignoreMap":267},[271,2417,2418,2420,2422,2425,2427,2430,2432,2434,2436,2438,2440],{"class":273,"line":274},[271,2419,278],{"class":277},[271,2421,282],{"class":281},[271,2423,2424],{"class":285},"createToBinaryFn",[271,2426,289],{"class":281},[271,2428,2429],{"class":285}," createFromBinaryFn",[271,2431,300],{"class":281},[271,2433,303],{"class":277},[271,2435,306],{"class":281},[271,2437,1740],{"class":309},[271,2439,312],{"class":281},[271,2441,315],{"class":281},[271,2443,2444],{"class":273,"line":347},[271,2445,351],{"emptyLinePlaceholder":350},[271,2447,2448,2450,2452],{"class":273,"line":354},[271,2449,1753],{"class":357},[271,2451,2275],{"class":361},[271,2453,698],{"class":281},[271,2455,2456,2458,2460,2462],{"class":273,"line":373},[271,2457,2282],{"class":557},[271,2459,260],{"class":281},[271,2461,1768],{"class":361},[271,2463,315],{"class":281},[271,2465,2466,2468,2470,2472],{"class":273,"line":378},[271,2467,2293],{"class":557},[271,2469,260],{"class":281},[271,2471,2298],{"class":361},[271,2473,315],{"class":281},[271,2475,2476],{"class":273,"line":385},[271,2477,1882],{"class":281},[271,2479,2480],{"class":273,"line":407},[271,2481,351],{"emptyLinePlaceholder":350},[271,2483,2484],{"class":273,"line":426},[271,2485,2486],{"class":381},"\u002F\u002F start-to-binary\n",[271,2488,2489,2491,2494,2496,2498,2501,2503,2505,2507,2509],{"class":273,"line":444},[271,2490,620],{"class":357},[271,2492,2493],{"class":285}," toBinary ",[271,2495,626],{"class":281},[271,2497,1903],{"class":277},[271,2499,2500],{"class":1906}," createToBinaryFn",[271,2502,1866],{"class":281},[271,2504,2326],{"class":361},[271,2506,1915],{"class":281},[271,2508,1918],{"class":285},[271,2510,315],{"class":281},[271,2512,2513,2515,2518,2520,2523,2525,2527,2529,2531,2533,2536,2538,2540,2542,2544,2547,2549,2551],{"class":273,"line":449},[271,2514,620],{"class":357},[271,2516,2517],{"class":285}," buffer ",[271,2519,626],{"class":281},[271,2521,2522],{"class":1906}," toBinary",[271,2524,388],{"class":285},[271,2526,2353],{"class":281},[271,2528,2356],{"class":557},[271,2530,260],{"class":281},[271,2532,306],{"class":281},[271,2534,2535],{"class":309},"John",[271,2537,312],{"class":281},[271,2539,289],{"class":281},[271,2541,2366],{"class":557},[271,2543,260],{"class":281},[271,2545,2546],{"class":563}," 30",[271,2548,300],{"class":281},[271,2550,398],{"class":285},[271,2552,315],{"class":281},[271,2554,2555],{"class":273,"line":455},[271,2556,2557],{"class":381},"\u002F\u002F Returns Uint8Array with optimized binary encoding\n",[271,2559,2560],{"class":273,"line":474},[271,2561,2562],{"class":381},"\u002F\u002F end-to-binary\n",[271,2564,2565],{"class":273,"line":652},[271,2566,351],{"emptyLinePlaceholder":350},[271,2568,2569],{"class":273,"line":666},[271,2570,2571],{"class":381},"\u002F\u002F start-from-binary\n",[271,2573,2574,2576,2579,2581,2583,2585,2587,2589,2591,2593],{"class":273,"line":678},[271,2575,620],{"class":357},[271,2577,2578],{"class":285}," fromBinary ",[271,2580,626],{"class":281},[271,2582,1903],{"class":277},[271,2584,2429],{"class":1906},[271,2586,1866],{"class":281},[271,2588,2326],{"class":361},[271,2590,1915],{"class":281},[271,2592,1918],{"class":285},[271,2594,315],{"class":281},[271,2596,2597,2599,2602,2604,2607,2610,2612,2614],{"class":273,"line":690},[271,2598,620],{"class":357},[271,2600,2601],{"class":285}," bufferInput ",[271,2603,626],{"class":281},[271,2605,2606],{"class":281}," new",[271,2608,2609],{"class":1906}," Uint8Array",[271,2611,1918],{"class":285},[271,2613,401],{"class":281},[271,2615,2616],{"class":381}," \u002F\u002F from previous example\n",[271,2618,2619,2621,2624,2626,2629,2632],{"class":273,"line":701},[271,2620,620],{"class":357},[271,2622,2623],{"class":285}," user ",[271,2625,626],{"class":281},[271,2627,2628],{"class":1906}," fromBinary",[271,2630,2631],{"class":285},"(bufferInput)",[271,2633,315],{"class":281},[271,2635,2636],{"class":273,"line":717},[271,2637,2638],{"class":381},"\u002F\u002F user is now { name: 'John', age: 30 }\n",[271,2640,2641],{"class":273,"line":734},[271,2642,2643],{"class":381},"\u002F\u002F end-from-binary\n",[242,2645],{},[205,2647,2649],{"id":2648},"branded-types-nominal-typing","Branded Types (Nominal Typing)",[201,2651,2652,2653,2656],{},"Type Formats support ",[220,2654,2655],{},"branded types"," for nominal typing. This prevents accidental assignment of plain strings\u002Fnumbers to validated types, providing compile-time type safety.",[249,2658,2660],{"id":2659},"why-branded-types","Why Branded Types?",[201,2662,2663,2664,2667],{},"Most built-in formats use branded types with ",[220,2665,2666],{},"fixed brand names"," for several important reasons:",[2669,2670,2671,2677,2691,2697],"ol",{},[216,2672,2673,2676],{},[220,2674,2675],{},"Type Safety",": Prevents accidental assignment of plain strings to validated types at compile time",[216,2678,2679,2682,2683,2686,2687,2690],{},[220,2680,2681],{},"Database Mapping",": Enables automatic translation of branded types to appropriate database columns (e.g., the Drizzle plugin can map ",[257,2684,2685],{},"FormatUUIDv4"," → ",[257,2688,2689],{},"uuid"," column type)",[216,2692,2693,2696],{},[220,2694,2695],{},"Friendly Errors",": Allows better type mapping for user-friendly error messages (e.g., \"Invalid email format\" instead of generic \"Invalid string\")",[216,2698,2699,2702],{},[220,2700,2701],{},"Consistent API",": Ensures predictable behavior across the framework's ecosystem",[249,2704,2706],{"id":2705},"how-branding-works","How Branding Works",[201,2708,2709,2710,260],{},"Most built-in string formats are ",[220,2711,2712],{},"branded by default",[262,2714,2716],{"className":264,"code":2715,"language":266,"meta":267,"style":267},"import type {FormatEmail, FormatUUIDv4} from '@mionjs\u002Ftype-formats\u002FStringFormats';\n\ntype User = {\n    email: FormatEmail;      \u002F\u002F Branded with 'email'\n    id: FormatUUIDv4;        \u002F\u002F Branded with 'uuid'\n};\n\n\u002F\u002F ❌ TypeScript Error: Type 'string' is not assignable to type 'FormatEmail'\nconst user: User = {\n    email: 'test@example.com',  \u002F\u002F Error!\n    id: '550e8400-e29b-41d4-a716-446655440000'  \u002F\u002F Error!\n};\n",[257,2717,2718,2746,2750,2760,2774,2787,2792,2796,2801,2816,2834,2849],{"__ignoreMap":267},[271,2719,2720,2722,2725,2727,2729,2731,2734,2736,2738,2740,2742,2744],{"class":273,"line":274},[271,2721,278],{"class":277},[271,2723,2724],{"class":277}," type",[271,2726,282],{"class":281},[271,2728,286],{"class":285},[271,2730,289],{"class":281},[271,2732,2733],{"class":285}," FormatUUIDv4",[271,2735,300],{"class":281},[271,2737,303],{"class":277},[271,2739,306],{"class":281},[271,2741,259],{"class":309},[271,2743,312],{"class":281},[271,2745,315],{"class":281},[271,2747,2748],{"class":273,"line":347},[271,2749,351],{"emptyLinePlaceholder":350},[271,2751,2752,2754,2756,2758],{"class":273,"line":354},[271,2753,358],{"class":357},[271,2755,2275],{"class":361},[271,2757,365],{"class":281},[271,2759,698],{"class":281},[271,2761,2762,2765,2767,2769,2771],{"class":273,"line":373},[271,2763,2764],{"class":557},"    email",[271,2766,260],{"class":281},[271,2768,368],{"class":361},[271,2770,401],{"class":281},[271,2772,2773],{"class":381},"      \u002F\u002F Branded with 'email'\n",[271,2775,2776,2778,2780,2782,2784],{"class":273,"line":378},[271,2777,1763],{"class":557},[271,2779,260],{"class":281},[271,2781,2733],{"class":361},[271,2783,401],{"class":281},[271,2785,2786],{"class":381},"        \u002F\u002F Branded with 'uuid'\n",[271,2788,2789],{"class":273,"line":385},[271,2790,2791],{"class":281},"};\n",[271,2793,2794],{"class":273,"line":407},[271,2795,351],{"emptyLinePlaceholder":350},[271,2797,2798],{"class":273,"line":426},[271,2799,2800],{"class":381},"\u002F\u002F ❌ TypeScript Error: Type 'string' is not assignable to type 'FormatEmail'\n",[271,2802,2803,2805,2808,2810,2812,2814],{"class":273,"line":444},[271,2804,620],{"class":357},[271,2806,2807],{"class":285}," user",[271,2809,260],{"class":281},[271,2811,2275],{"class":361},[271,2813,365],{"class":281},[271,2815,698],{"class":281},[271,2817,2818,2820,2822,2824,2827,2829,2831],{"class":273,"line":449},[271,2819,2764],{"class":557},[271,2821,260],{"class":281},[271,2823,306],{"class":281},[271,2825,2826],{"class":309},"test@example.com",[271,2828,312],{"class":281},[271,2830,289],{"class":281},[271,2832,2833],{"class":381},"  \u002F\u002F Error!\n",[271,2835,2836,2838,2840,2842,2845,2847],{"class":273,"line":455},[271,2837,1763],{"class":557},[271,2839,260],{"class":281},[271,2841,306],{"class":281},[271,2843,2844],{"class":309},"550e8400-e29b-41d4-a716-446655440000",[271,2846,312],{"class":281},[271,2848,2833],{"class":381},[271,2850,2851],{"class":273,"line":474},[271,2852,2791],{"class":281},[249,2854,2856],{"id":2855},"using-branded-types","Using Branded Types",[201,2858,2859],{},"To assign values to branded types, use type assertions:",[262,2861,2863],{"className":264,"code":2862,"language":266,"meta":267,"style":267},"import type {BrandEmail, BrandUUID} from '@mionjs\u002Fcore';\n\nconst user: User = {\n    email: 'test@example.com' as BrandEmail,\n    id: '550e8400-e29b-41d4-a716-446655440000' as BrandUUID,\n};\n",[257,2864,2865,2894,2898,2912,2932,2950],{"__ignoreMap":267},[271,2866,2867,2869,2871,2873,2876,2878,2881,2883,2885,2887,2890,2892],{"class":273,"line":274},[271,2868,278],{"class":277},[271,2870,2724],{"class":277},[271,2872,282],{"class":281},[271,2874,2875],{"class":285},"BrandEmail",[271,2877,289],{"class":281},[271,2879,2880],{"class":285}," BrandUUID",[271,2882,300],{"class":281},[271,2884,303],{"class":277},[271,2886,306],{"class":281},[271,2888,2889],{"class":309},"@mionjs\u002Fcore",[271,2891,312],{"class":281},[271,2893,315],{"class":281},[271,2895,2896],{"class":273,"line":347},[271,2897,351],{"emptyLinePlaceholder":350},[271,2899,2900,2902,2904,2906,2908,2910],{"class":273,"line":354},[271,2901,620],{"class":357},[271,2903,2807],{"class":285},[271,2905,260],{"class":281},[271,2907,2275],{"class":361},[271,2909,365],{"class":281},[271,2911,698],{"class":281},[271,2913,2914,2916,2918,2920,2922,2924,2927,2930],{"class":273,"line":373},[271,2915,2764],{"class":557},[271,2917,260],{"class":281},[271,2919,306],{"class":281},[271,2921,2826],{"class":309},[271,2923,312],{"class":281},[271,2925,2926],{"class":277}," as",[271,2928,2929],{"class":361}," BrandEmail",[271,2931,1102],{"class":281},[271,2933,2934,2936,2938,2940,2942,2944,2946,2948],{"class":273,"line":378},[271,2935,1763],{"class":557},[271,2937,260],{"class":281},[271,2939,306],{"class":281},[271,2941,2844],{"class":309},[271,2943,312],{"class":281},[271,2945,2926],{"class":277},[271,2947,2880],{"class":361},[271,2949,1102],{"class":281},[271,2951,2952],{"class":273,"line":385},[271,2953,2791],{"class":281},[249,2955,2957,2958,2960,2961,2960,2963],{"id":2956},"optional-branding-with-formatstring-formatnumber-formatbigint","Optional Branding with ",[257,2959,497],{},", ",[257,2962,1217],{},[257,2964,2965],{},"FormatBigInt",[201,2967,2968,2960,2970,2972,2973,2975,2976,2979],{},[257,2969,497],{},[257,2971,1217],{},", and ",[257,2974,2965],{}," are ",[220,2977,2978],{},"unbranded by default"," (escape hatch), but you can add branding:",[262,2981,2983],{"className":264,"code":2982,"language":266,"meta":267,"style":267},"import type {FormatString} from '@mionjs\u002Ftype-formats\u002FStringFormats';\nimport type {FormatNumber} from '@mionjs\u002Ftype-formats\u002FNumberFormats';\n\n\u002F\u002F Unbranded - accepts plain strings\u002Fnumbers\ntype DisplayName = FormatString\u003C{minLength: 2; maxLength: 50}>;\ntype Age = FormatNumber\u003C{min: 0; max: 150; integer: true}>;\n\n\u002F\u002F Branded - requires type assertion\ntype UserName = FormatString\u003C{minLength: 2; maxLength: 50}, 'UserName'>;\ntype UserId = FormatNumber\u003C{min: 1; integer: true}, 'UserId'>;\n",[257,2984,2985,3007,3029,3033,3038,3070,3109,3113,3118,3157],{"__ignoreMap":267},[271,2986,2987,2989,2991,2993,2995,2997,2999,3001,3003,3005],{"class":273,"line":274},[271,2988,278],{"class":277},[271,2990,2724],{"class":277},[271,2992,282],{"class":281},[271,2994,497],{"class":285},[271,2996,300],{"class":281},[271,2998,303],{"class":277},[271,3000,306],{"class":281},[271,3002,259],{"class":309},[271,3004,312],{"class":281},[271,3006,315],{"class":281},[271,3008,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027],{"class":273,"line":347},[271,3010,278],{"class":277},[271,3012,2724],{"class":277},[271,3014,282],{"class":281},[271,3016,1217],{"class":285},[271,3018,300],{"class":281},[271,3020,303],{"class":277},[271,3022,306],{"class":281},[271,3024,1083],{"class":309},[271,3026,312],{"class":281},[271,3028,315],{"class":281},[271,3030,3031],{"class":273,"line":354},[271,3032,351],{"emptyLinePlaceholder":350},[271,3034,3035],{"class":273,"line":373},[271,3036,3037],{"class":381},"\u002F\u002F Unbranded - accepts plain strings\u002Fnumbers\n",[271,3039,3040,3042,3045,3047,3049,3052,3054,3056,3059,3061,3064,3066,3068],{"class":273,"line":378},[271,3041,358],{"class":357},[271,3043,3044],{"class":361}," DisplayName",[271,3046,365],{"class":281},[271,3048,549],{"class":361},[271,3050,3051],{"class":281},"\u003C{",[271,3053,929],{"class":557},[271,3055,260],{"class":281},[271,3057,3058],{"class":563}," 2",[271,3060,401],{"class":281},[271,3062,3063],{"class":557}," maxLength",[271,3065,260],{"class":281},[271,3067,829],{"class":563},[271,3069,606],{"class":281},[271,3071,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090,3093,3095,3098,3100,3103,3105,3107],{"class":273,"line":385},[271,3073,358],{"class":357},[271,3075,1245],{"class":361},[271,3077,365],{"class":281},[271,3079,1250],{"class":361},[271,3081,3051],{"class":281},[271,3083,1611],{"class":557},[271,3085,260],{"class":281},[271,3087,1262],{"class":563},[271,3089,401],{"class":281},[271,3091,3092],{"class":557}," max",[271,3094,260],{"class":281},[271,3096,3097],{"class":563}," 150",[271,3099,401],{"class":281},[271,3101,3102],{"class":557}," integer",[271,3104,260],{"class":281},[271,3106,588],{"class":361},[271,3108,606],{"class":281},[271,3110,3111],{"class":273,"line":407},[271,3112,351],{"emptyLinePlaceholder":350},[271,3114,3115],{"class":273,"line":426},[271,3116,3117],{"class":381},"\u002F\u002F Branded - requires type assertion\n",[271,3119,3120,3122,3125,3127,3129,3131,3133,3135,3137,3139,3141,3143,3145,3148,3150,3153,3155],{"class":273,"line":444},[271,3121,358],{"class":357},[271,3123,3124],{"class":361}," UserName",[271,3126,365],{"class":281},[271,3128,549],{"class":361},[271,3130,3051],{"class":281},[271,3132,929],{"class":557},[271,3134,260],{"class":281},[271,3136,3058],{"class":563},[271,3138,401],{"class":281},[271,3140,3063],{"class":557},[271,3142,260],{"class":281},[271,3144,829],{"class":563},[271,3146,3147],{"class":281},"},",[271,3149,306],{"class":281},[271,3151,3152],{"class":309},"UserName",[271,3154,312],{"class":281},[271,3156,1877],{"class":281},[271,3158,3159,3161,3164,3166,3168,3170,3172,3174,3176,3178,3180,3182,3184,3186,3188,3191,3193],{"class":273,"line":449},[271,3160,358],{"class":357},[271,3162,3163],{"class":361}," UserId",[271,3165,365],{"class":281},[271,3167,1250],{"class":361},[271,3169,3051],{"class":281},[271,3171,1611],{"class":557},[271,3173,260],{"class":281},[271,3175,673],{"class":563},[271,3177,401],{"class":281},[271,3179,3102],{"class":557},[271,3181,260],{"class":281},[271,3183,588],{"class":361},[271,3185,3147],{"class":281},[271,3187,306],{"class":281},[271,3189,3190],{"class":309},"UserId",[271,3192,312],{"class":281},[271,3194,1877],{"class":281},[3196,3197,3198],"blockquote",{},[201,3199,3200,3203,3204,2960,3206,2960,3208,3211,3212,3214],{},[220,3201,3202],{},"Note:"," Built-in formats like ",[257,3205,286],{},[257,3207,2685],{},[257,3209,3210],{},"FormatUrl",", etc. have ",[220,3213,2666],{}," that cannot be overridden. This ensures consistent type mapping across the framework.",[242,3216],{},[205,3218,3220],{"id":3219},"client-side-usage-without-type-formats","Client-Side Usage (Without type-formats)",[201,3222,3223,3224,3227,3228,3231,3232,260],{},"Client code should ",[220,3225,3226],{},"not"," depend on ",[257,3229,3230],{},"@mionjs\u002Ftype-formats"," (which includes runtime validation code). Instead, import branded types from ",[257,3233,2889],{},[249,3235,3237],{"id":3236},"server-client-type-mapping","Server → Client Type Mapping",[901,3239,3240,3250],{},[904,3241,3242],{},[907,3243,3244,3247],{},[910,3245,3246],{},"Server Type (type-formats)",[910,3248,3249],{},"Client Type (core)",[920,3251,3252,3262,3273,3284,3304,3319,3338,3350,3362,3374,3383,3391],{},[907,3253,3254,3258],{},[925,3255,3256],{},[257,3257,286],{},[925,3259,3260],{},[257,3261,2875],{},[907,3263,3264,3268],{},[925,3265,3266],{},[257,3267,2685],{},[925,3269,3270],{},[257,3271,3272],{},"BrandUUID",[907,3274,3275,3280],{},[925,3276,3277],{},[257,3278,3279],{},"FormatUUIDv7",[925,3281,3282],{},[257,3283,3272],{},[907,3285,3286,3299],{},[925,3287,3288,2960,3290,2960,3293,2960,3296],{},[257,3289,3210],{},[257,3291,3292],{},"FormatUrlHttp",[257,3294,3295],{},"FormatUrlFile",[257,3297,3298],{},"FormatUrlSocialMedia",[925,3300,3301],{},[257,3302,3303],{},"BrandUrl",[907,3305,3306,3314],{},[925,3307,3308,2960,3311],{},[257,3309,3310],{},"FormatDomain",[257,3312,3313],{},"FormatDomainStrict",[925,3315,3316],{},[257,3317,3318],{},"BrandDomain",[907,3320,3321,3333],{},[925,3322,3323,2960,3326,2960,3329,3332],{},[257,3324,3325],{},"FormatIP",[257,3327,3328],{},"FormatIPv4",[257,3330,3331],{},"FormatIPv6",", etc.",[925,3334,3335],{},[257,3336,3337],{},"BrandIP",[907,3339,3340,3345],{},[925,3341,3342],{},[257,3343,3344],{},"FormatStringDate",[925,3346,3347],{},[257,3348,3349],{},"BrandDate",[907,3351,3352,3357],{},[925,3353,3354],{},[257,3355,3356],{},"FormatStringTime",[925,3358,3359],{},[257,3360,3361],{},"BrandTime",[907,3363,3364,3369],{},[925,3365,3366],{},[257,3367,3368],{},"FormatStringDateTime",[925,3370,3371],{},[257,3372,3373],{},"BrandDateTime",[907,3375,3376,3380],{},[925,3377,3378],{},[257,3379,497],{},[925,3381,3382],{},"❌ (unbranded by default)",[907,3384,3385,3389],{},[925,3386,3387],{},[257,3388,1217],{},[925,3390,3382],{},[907,3392,3393,3397],{},[925,3394,3395],{},[257,3396,2965],{},[925,3398,3382],{},[249,3400,3402],{"id":3401},"client-example","Client Example",[262,3404,3406],{"className":264,"code":3405,"language":266,"meta":267,"style":267},"\u002F\u002F client-types.ts\nimport type {BrandEmail, BrandUUID, BrandUrl} from '@mionjs\u002Fcore';\n\n\u002F\u002F These types are compatible with server-side FormatEmail, FormatUUIDv4, etc.\ntype User = {\n    id: BrandUUID;\n    email: BrandEmail;\n    website?: BrandUrl;\n};\n\n\u002F\u002F Usage\nconst user: User = {\n    id: '550e8400-e29b-41d4-a716-446655440000' as BrandUUID,\n    email: 'user@example.com' as BrandEmail,\n    website: 'https:\u002F\u002Fexample.com' as BrandUrl,\n};\n",[257,3407,3408,3413,3444,3448,3453,3463,3473,3483,3495,3499,3503,3508,3522,3540,3558,3577],{"__ignoreMap":267},[271,3409,3410],{"class":273,"line":274},[271,3411,3412],{"class":381},"\u002F\u002F client-types.ts\n",[271,3414,3415,3417,3419,3421,3423,3425,3427,3429,3432,3434,3436,3438,3440,3442],{"class":273,"line":347},[271,3416,278],{"class":277},[271,3418,2724],{"class":277},[271,3420,282],{"class":281},[271,3422,2875],{"class":285},[271,3424,289],{"class":281},[271,3426,2880],{"class":285},[271,3428,289],{"class":281},[271,3430,3431],{"class":285}," BrandUrl",[271,3433,300],{"class":281},[271,3435,303],{"class":277},[271,3437,306],{"class":281},[271,3439,2889],{"class":309},[271,3441,312],{"class":281},[271,3443,315],{"class":281},[271,3445,3446],{"class":273,"line":354},[271,3447,351],{"emptyLinePlaceholder":350},[271,3449,3450],{"class":273,"line":373},[271,3451,3452],{"class":381},"\u002F\u002F These types are compatible with server-side FormatEmail, FormatUUIDv4, etc.\n",[271,3454,3455,3457,3459,3461],{"class":273,"line":378},[271,3456,358],{"class":357},[271,3458,2275],{"class":361},[271,3460,365],{"class":281},[271,3462,698],{"class":281},[271,3464,3465,3467,3469,3471],{"class":273,"line":385},[271,3466,1763],{"class":557},[271,3468,260],{"class":281},[271,3470,2880],{"class":361},[271,3472,315],{"class":281},[271,3474,3475,3477,3479,3481],{"class":273,"line":407},[271,3476,2764],{"class":557},[271,3478,260],{"class":281},[271,3480,2929],{"class":361},[271,3482,315],{"class":281},[271,3484,3485,3488,3491,3493],{"class":273,"line":426},[271,3486,3487],{"class":557},"    website",[271,3489,3490],{"class":281},"?:",[271,3492,3431],{"class":361},[271,3494,315],{"class":281},[271,3496,3497],{"class":273,"line":444},[271,3498,2791],{"class":281},[271,3500,3501],{"class":273,"line":449},[271,3502,351],{"emptyLinePlaceholder":350},[271,3504,3505],{"class":273,"line":455},[271,3506,3507],{"class":381},"\u002F\u002F Usage\n",[271,3509,3510,3512,3514,3516,3518,3520],{"class":273,"line":474},[271,3511,620],{"class":357},[271,3513,2807],{"class":285},[271,3515,260],{"class":281},[271,3517,2275],{"class":361},[271,3519,365],{"class":281},[271,3521,698],{"class":281},[271,3523,3524,3526,3528,3530,3532,3534,3536,3538],{"class":273,"line":652},[271,3525,1763],{"class":557},[271,3527,260],{"class":281},[271,3529,306],{"class":281},[271,3531,2844],{"class":309},[271,3533,312],{"class":281},[271,3535,2926],{"class":277},[271,3537,2880],{"class":361},[271,3539,1102],{"class":281},[271,3541,3542,3544,3546,3548,3550,3552,3554,3556],{"class":273,"line":666},[271,3543,2764],{"class":557},[271,3545,260],{"class":281},[271,3547,306],{"class":281},[271,3549,393],{"class":309},[271,3551,312],{"class":281},[271,3553,2926],{"class":277},[271,3555,2929],{"class":361},[271,3557,1102],{"class":281},[271,3559,3560,3562,3564,3566,3569,3571,3573,3575],{"class":273,"line":678},[271,3561,3487],{"class":557},[271,3563,260],{"class":281},[271,3565,306],{"class":281},[271,3567,3568],{"class":309},"https:\u002F\u002Fexample.com",[271,3570,312],{"class":281},[271,3572,2926],{"class":277},[271,3574,3431],{"class":361},[271,3576,1102],{"class":281},[271,3578,3579],{"class":273,"line":690},[271,3580,2791],{"class":281},[242,3582],{},[3584,3585,3586],"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 .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 .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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}","Validation and transformation formats for strings and numbers using TypeScript types.","md",null,{"toc":26},{"title":115,"description":3587},"mSaq6cah75ejuWGrTa5r1sCkBxlFdbF-8ggfPSNRTd8",[3594,3596],{"title":111,"path":112,"stem":113,"description":3595,"children":-1},"Comprehensive list of supported TypeScript types and feature comparison with other validation libraries.",{"title":119,"path":120,"stem":121,"description":3597,"children":-1},"Complete reference for all built-in string and number format types with usage examples and parameters.",1778674524008]