[{"data":1,"prerenderedAt":1501},["ShallowReactive",2],{"navigation_docs":3,"-ai-integration-mock-data":127,"-ai-integration-mock-data-surround":1496},[4,19,53,71,95],{"title":5,"icon":6,"redirect":7,"path":8,"stem":9,"children":10,"page":18},"Introduction","i-lucide-rocket","\u002Fintroduction\u002Fabout-ts-runtypes","\u002Fintroduction","1.introduction",[11,14],{"title":12,"path":7,"stem":13},"About RunTypes","1.introduction\u002F1.about-ts-runtypes",{"title":15,"path":16,"stem":17},"Quick Start","\u002Fintroduction\u002Fquick-start","1.introduction\u002F2.quick-start",false,{"title":20,"icon":21,"redirect":22,"path":23,"stem":24,"children":25,"page":18},"Guide","i-lucide-book-open","\u002Fguide\u002Ftypes-vs-schemas","\u002Fguide","2.guide",[26,29,33,37,41,45,49],{"title":27,"path":22,"stem":28},"Types vs Schemas","2.guide\u002F1.types-vs-schemas",{"title":30,"path":31,"stem":32},"Type Formats","\u002Fguide\u002Ftype-formats","2.guide\u002F2.type-formats",{"title":34,"path":35,"stem":36},"Serialization","\u002Fguide\u002Fserialization","2.guide\u002F3.serialization",{"title":38,"path":39,"stem":40},"Mock Data","\u002Fguide\u002Fmocking","2.guide\u002F4.mocking",{"title":42,"path":43,"stem":44},"Validation","\u002Fguide\u002Fvalidation","2.guide\u002F5.validation",{"title":46,"path":47,"stem":48},"Reflection","\u002Fguide\u002Fmarkers-and-reflection","2.guide\u002F6.markers-and-reflection",{"title":50,"path":51,"stem":52},"Pure Functions","\u002Fguide\u002Fpure-functions","2.guide\u002F7.pure-functions",{"title":54,"icon":55,"redirect":56,"path":57,"stem":58,"children":59,"page":18},"AI Integration","i-lucide-sparkles","\u002Fai-integration\u002Fworkflow-and-commands","\u002Fai-integration","3.ai-integration",[60,63,67],{"title":61,"path":56,"stem":62},"AI Workflow","3.ai-integration\u002F1.workflow-and-commands",{"title":64,"path":65,"stem":66},"FriendlyType","\u002Fai-integration\u002Ffriendly-type","3.ai-integration\u002F2.friendly-type",{"title":68,"path":69,"stem":70},"MockData","\u002Fai-integration\u002Fmock-data","3.ai-integration\u002F3.mock-data",{"title":72,"icon":73,"redirect":74,"path":75,"stem":76,"children":77,"page":18},"Test Suites","i-lucide-terminal","\u002Fsuites\u002Fvalidation","\u002Fsuites","6.suites",[78,80,83,87,91],{"title":42,"path":74,"stem":79},"6.suites\u002F1.validation",{"title":34,"path":81,"stem":82},"\u002Fsuites\u002Fserialization","6.suites\u002F2.serialization",{"title":84,"path":85,"stem":86},"Formats Validation","\u002Fsuites\u002Fformat-validation","6.suites\u002F3.format-validation",{"title":88,"path":89,"stem":90},"Formats Serialization","\u002Fsuites\u002Fformat-serialization","6.suites\u002F4.format-serialization",{"title":92,"path":93,"stem":94},"Fuzzing","\u002Fsuites\u002Ffuzzing","6.suites\u002F5.fuzzing",{"title":96,"icon":97,"redirect":98,"path":99,"stem":100,"children":101,"page":18},"Benchmarks","i-lucide-gauge","\u002Fbenchmarks\u002Fvalidation","\u002Fbenchmarks","7.benchmarks",[102,104,108,112,116,119,123],{"title":42,"path":98,"stem":103},"7.benchmarks\u002F1.validation",{"title":105,"path":106,"stem":107},"Validation Formats","\u002Fbenchmarks\u002Fvalidation-formats","7.benchmarks\u002F2.validation-formats",{"title":109,"path":110,"stem":111},"Validation Errors","\u002Fbenchmarks\u002Fgetvalidationerrors","7.benchmarks\u002F3.getvalidationerrors",{"title":113,"path":114,"stem":115},"Validation Error Formats","\u002Fbenchmarks\u002Fgetvalidationerrors-formats","7.benchmarks\u002F4.getvalidationerrors-formats",{"title":34,"path":117,"stem":118},"\u002Fbenchmarks\u002Fserialization","7.benchmarks\u002F5.serialization",{"title":120,"path":121,"stem":122},"Serialization Formats","\u002Fbenchmarks\u002Fserialization-formats","7.benchmarks\u002F6.serialization-formats",{"title":124,"path":125,"stem":126},"Compile Time","\u002Fbenchmarks\u002Fcompiletime","7.benchmarks\u002F7.compiletime",{"id":128,"title":68,"body":129,"description":1490,"extension":1491,"links":1492,"meta":1493,"navigation":235,"path":69,"seo":1494,"stem":70,"__hash__":1495},"docs\u002F3.ai-integration\u002F3.mock-data.md",{"type":130,"value":131},"minimark",[132,166,171,178,1048,1051,1154,1161,1282,1296,1300,1319,1426,1435,1439,1476,1486],[133,134,135,139,140,144,145,148,149,155,156,161,162,165],"p",{},[136,137,138],"code",{},"MockData\u003CT>"," gives a type realistic sample values: ",[141,142,143],"strong",{},"pools"," of believable names and emails, ",[141,146,147],{},"ranges"," for numbers and dates, and a few hints for arrays and optional fields. It feeds the ",[150,151,152],"a",{"href":39},[136,153,154],{},"createMockType\u003CT>()"," generator. The AI supplies the believable values, and the generator handles the rest. Like ",[150,157,158],{"href":65},[136,159,160],{},"FriendlyType\u003CT>",", you ",[150,163,164],{"href":56},"commit"," it next to your type and the compiler checks it against that type on every build.",[167,168,170],"h2",{"id":169},"how-its-shaped","How it's shaped",[133,172,173,174,177],{},"The map mirrors your type. Each field carries the knobs that make sense for its kind. The compiler scaffolds an entry for every field with the blanks marked ",[136,175,176],{},"@todo",", then the agent fills in believable values.",[179,180,181,444,718],"code-group",{},[182,183,189],"pre",{"className":184,"code":185,"filename":186,"language":187,"meta":188,"style":188},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type * as TF from 'ts-runtypes\u002Fformats';\n\n\u002F\u002F models\u002Fuser.ts\nexport interface User {\n  name: TF.String\u003C{ minLength: 2; maxLength: 60 }>;\n  age: TF.Number\u003C{ min: 0; max: 120 }>;\n  isActive: boolean;\n  tags: string[];\n  profile: {\n    email: TF.Email;\n    score: TF.Number\u003C{ min: 0; max: 100 }>;\n  };\n}\n","Your type","ts","",[136,190,191,230,237,244,261,306,343,356,372,382,399,432,438],{"__ignoreMap":188},[192,193,196,200,203,207,210,214,217,220,224,227],"span",{"class":194,"line":195},"line",1,[192,197,199],{"class":198},"s7zQu","import",[192,201,202],{"class":198}," type",[192,204,206],{"class":205},"sMK4o"," *",[192,208,209],{"class":198}," as",[192,211,213],{"class":212},"sTEyZ"," TF ",[192,215,216],{"class":198},"from",[192,218,219],{"class":205}," '",[192,221,223],{"class":222},"sfazB","ts-runtypes\u002Fformats",[192,225,226],{"class":205},"'",[192,228,229],{"class":205},";\n",[192,231,233],{"class":194,"line":232},2,[192,234,236],{"emptyLinePlaceholder":235},true,"\n",[192,238,240],{"class":194,"line":239},3,[192,241,243],{"class":242},"sHwdD","\u002F\u002F models\u002Fuser.ts\n",[192,245,247,250,254,258],{"class":194,"line":246},4,[192,248,249],{"class":198},"export",[192,251,253],{"class":252},"spNyl"," interface",[192,255,257],{"class":256},"sBMFI"," User",[192,259,260],{"class":205}," {\n",[192,262,264,268,271,274,277,280,283,286,288,292,295,298,300,303],{"class":194,"line":263},5,[192,265,267],{"class":266},"swJcz","  name",[192,269,270],{"class":205},":",[192,272,273],{"class":256}," TF",[192,275,276],{"class":205},".",[192,278,279],{"class":256},"String",[192,281,282],{"class":205},"\u003C{",[192,284,285],{"class":266}," minLength",[192,287,270],{"class":205},[192,289,291],{"class":290},"sbssI"," 2",[192,293,294],{"class":205},";",[192,296,297],{"class":266}," maxLength",[192,299,270],{"class":205},[192,301,302],{"class":290}," 60",[192,304,305],{"class":205}," }>;\n",[192,307,309,312,314,316,318,321,323,326,328,331,333,336,338,341],{"class":194,"line":308},6,[192,310,311],{"class":266},"  age",[192,313,270],{"class":205},[192,315,273],{"class":256},[192,317,276],{"class":205},[192,319,320],{"class":256},"Number",[192,322,282],{"class":205},[192,324,325],{"class":266}," min",[192,327,270],{"class":205},[192,329,330],{"class":290}," 0",[192,332,294],{"class":205},[192,334,335],{"class":266}," max",[192,337,270],{"class":205},[192,339,340],{"class":290}," 120",[192,342,305],{"class":205},[192,344,346,349,351,354],{"class":194,"line":345},7,[192,347,348],{"class":266},"  isActive",[192,350,270],{"class":205},[192,352,353],{"class":256}," boolean",[192,355,229],{"class":205},[192,357,359,362,364,367,370],{"class":194,"line":358},8,[192,360,361],{"class":266},"  tags",[192,363,270],{"class":205},[192,365,366],{"class":256}," string",[192,368,369],{"class":212},"[]",[192,371,229],{"class":205},[192,373,375,378,380],{"class":194,"line":374},9,[192,376,377],{"class":266},"  profile",[192,379,270],{"class":205},[192,381,260],{"class":205},[192,383,385,388,390,392,394,397],{"class":194,"line":384},10,[192,386,387],{"class":266},"    email",[192,389,270],{"class":205},[192,391,273],{"class":256},[192,393,276],{"class":205},[192,395,396],{"class":256},"Email",[192,398,229],{"class":205},[192,400,402,405,407,409,411,413,415,417,419,421,423,425,427,430],{"class":194,"line":401},11,[192,403,404],{"class":266},"    score",[192,406,270],{"class":205},[192,408,273],{"class":256},[192,410,276],{"class":205},[192,412,320],{"class":256},[192,414,282],{"class":205},[192,416,325],{"class":266},[192,418,270],{"class":205},[192,420,330],{"class":290},[192,422,294],{"class":205},[192,424,335],{"class":266},[192,426,270],{"class":205},[192,428,429],{"class":290}," 100",[192,431,305],{"class":205},[192,433,435],{"class":194,"line":434},12,[192,436,437],{"class":205},"  };\n",[192,439,441],{"class":194,"line":440},13,[192,442,443],{"class":205},"}\n",[182,445,448],{"className":184,"code":446,"filename":447,"language":187,"meta":188,"style":188},"import type { MockData } from 'ts-runtypes';\nimport type { User } from '.\u002Fuser';\n\n\u002F\u002F scaffolded by `gen`: one entry per field, each blank marked @todo\nexport const userMock: MockData\u003CUser> = {\n  name: { pool: [] },                              \u002F\u002F @todo believable names\n  age: { min: 0, max: 0 },                         \u002F\u002F @todo realistic range\n  isActive: { pool: [] },                          \u002F\u002F @todo\n  tags: { $items: { pool: [] }, $length: [0, 0] }, \u002F\u002F @todo\n  profile: {\n    email: { pool: [] },                           \u002F\u002F @todo real-looking addresses\n    score: { min: 0, max: 0 },                     \u002F\u002F @todo realistic range\n  },\n};\n","Generated by the compiler",[136,449,450,477,500,504,509,537,559,588,607,653,661,680,707,712],{"__ignoreMap":188},[192,451,452,454,456,459,462,465,468,470,473,475],{"class":194,"line":195},[192,453,199],{"class":198},[192,455,202],{"class":198},[192,457,458],{"class":205}," {",[192,460,461],{"class":212}," MockData",[192,463,464],{"class":205}," }",[192,466,467],{"class":198}," from",[192,469,219],{"class":205},[192,471,472],{"class":222},"ts-runtypes",[192,474,226],{"class":205},[192,476,229],{"class":205},[192,478,479,481,483,485,487,489,491,493,496,498],{"class":194,"line":232},[192,480,199],{"class":198},[192,482,202],{"class":198},[192,484,458],{"class":205},[192,486,257],{"class":212},[192,488,464],{"class":205},[192,490,467],{"class":198},[192,492,219],{"class":205},[192,494,495],{"class":222},".\u002Fuser",[192,497,226],{"class":205},[192,499,229],{"class":205},[192,501,502],{"class":194,"line":239},[192,503,236],{"emptyLinePlaceholder":235},[192,505,506],{"class":194,"line":246},[192,507,508],{"class":242},"\u002F\u002F scaffolded by `gen`: one entry per field, each blank marked @todo\n",[192,510,511,513,516,519,521,523,526,529,532,535],{"class":194,"line":263},[192,512,249],{"class":198},[192,514,515],{"class":252}," const",[192,517,518],{"class":212}," userMock",[192,520,270],{"class":205},[192,522,461],{"class":256},[192,524,525],{"class":205},"\u003C",[192,527,528],{"class":256},"User",[192,530,531],{"class":205},">",[192,533,534],{"class":205}," =",[192,536,260],{"class":205},[192,538,539,541,543,545,548,550,553,556],{"class":194,"line":308},[192,540,267],{"class":266},[192,542,270],{"class":205},[192,544,458],{"class":205},[192,546,547],{"class":266}," pool",[192,549,270],{"class":205},[192,551,552],{"class":212}," [] ",[192,554,555],{"class":205},"},",[192,557,558],{"class":242},"                              \u002F\u002F @todo believable names\n",[192,560,561,563,565,567,569,571,573,576,578,580,582,585],{"class":194,"line":345},[192,562,311],{"class":266},[192,564,270],{"class":205},[192,566,458],{"class":205},[192,568,325],{"class":266},[192,570,270],{"class":205},[192,572,330],{"class":290},[192,574,575],{"class":205},",",[192,577,335],{"class":266},[192,579,270],{"class":205},[192,581,330],{"class":290},[192,583,584],{"class":205}," },",[192,586,587],{"class":242},"                         \u002F\u002F @todo realistic range\n",[192,589,590,592,594,596,598,600,602,604],{"class":194,"line":358},[192,591,348],{"class":266},[192,593,270],{"class":205},[192,595,458],{"class":205},[192,597,547],{"class":266},[192,599,270],{"class":205},[192,601,552],{"class":212},[192,603,555],{"class":205},[192,605,606],{"class":242},"                          \u002F\u002F @todo\n",[192,608,609,611,613,615,618,620,622,624,626,628,630,633,635,638,641,643,645,648,650],{"class":194,"line":374},[192,610,361],{"class":266},[192,612,270],{"class":205},[192,614,458],{"class":205},[192,616,617],{"class":266}," $items",[192,619,270],{"class":205},[192,621,458],{"class":205},[192,623,547],{"class":266},[192,625,270],{"class":205},[192,627,552],{"class":212},[192,629,555],{"class":205},[192,631,632],{"class":266}," $length",[192,634,270],{"class":205},[192,636,637],{"class":212}," [",[192,639,640],{"class":290},"0",[192,642,575],{"class":205},[192,644,330],{"class":290},[192,646,647],{"class":212},"] ",[192,649,555],{"class":205},[192,651,652],{"class":242}," \u002F\u002F @todo\n",[192,654,655,657,659],{"class":194,"line":384},[192,656,377],{"class":266},[192,658,270],{"class":205},[192,660,260],{"class":205},[192,662,663,665,667,669,671,673,675,677],{"class":194,"line":401},[192,664,387],{"class":266},[192,666,270],{"class":205},[192,668,458],{"class":205},[192,670,547],{"class":266},[192,672,270],{"class":205},[192,674,552],{"class":212},[192,676,555],{"class":205},[192,678,679],{"class":242},"                           \u002F\u002F @todo real-looking addresses\n",[192,681,682,684,686,688,690,692,694,696,698,700,702,704],{"class":194,"line":434},[192,683,404],{"class":266},[192,685,270],{"class":205},[192,687,458],{"class":205},[192,689,325],{"class":266},[192,691,270],{"class":205},[192,693,330],{"class":290},[192,695,575],{"class":205},[192,697,335],{"class":266},[192,699,270],{"class":205},[192,701,330],{"class":290},[192,703,584],{"class":205},[192,705,706],{"class":242},"                     \u002F\u002F @todo realistic range\n",[192,708,709],{"class":194,"line":440},[192,710,711],{"class":205},"  },\n",[192,713,715],{"class":194,"line":714},14,[192,716,717],{"class":205},"};\n",[182,719,722],{"className":184,"code":720,"filename":721,"language":187,"meta":188,"style":188},"import type { MockData } from 'ts-runtypes';\nimport type { User } from '.\u002Fuser';\n\nexport const userMock: MockData\u003CUser> = {\n  name: { pool: ['Alice Martin', 'Liang Wei', 'Fatima Noor', \u002F* …50+ *\u002F] },\n  age: { min: 18, max: 95 },\n  isActive: { pool: [true, true, false] },\n  tags: { $items: { pool: ['urgent', 'beta', 'vip'] }, $length: [1, 4] },\n  profile: {\n    email: { pool: ['alice@example.com', 'liang@corp.io', \u002F* … *\u002F] },\n    score: { min: 0, max: 100 },\n  },\n};\n","Filled by the agent",[136,723,724,746,768,772,794,843,870,902,969,977,1016,1040,1044],{"__ignoreMap":188},[192,725,726,728,730,732,734,736,738,740,742,744],{"class":194,"line":195},[192,727,199],{"class":198},[192,729,202],{"class":198},[192,731,458],{"class":205},[192,733,461],{"class":212},[192,735,464],{"class":205},[192,737,467],{"class":198},[192,739,219],{"class":205},[192,741,472],{"class":222},[192,743,226],{"class":205},[192,745,229],{"class":205},[192,747,748,750,752,754,756,758,760,762,764,766],{"class":194,"line":232},[192,749,199],{"class":198},[192,751,202],{"class":198},[192,753,458],{"class":205},[192,755,257],{"class":212},[192,757,464],{"class":205},[192,759,467],{"class":198},[192,761,219],{"class":205},[192,763,495],{"class":222},[192,765,226],{"class":205},[192,767,229],{"class":205},[192,769,770],{"class":194,"line":239},[192,771,236],{"emptyLinePlaceholder":235},[192,773,774,776,778,780,782,784,786,788,790,792],{"class":194,"line":246},[192,775,249],{"class":198},[192,777,515],{"class":252},[192,779,518],{"class":212},[192,781,270],{"class":205},[192,783,461],{"class":256},[192,785,525],{"class":205},[192,787,528],{"class":256},[192,789,531],{"class":205},[192,791,534],{"class":205},[192,793,260],{"class":205},[192,795,796,798,800,802,804,806,808,810,813,815,817,819,822,824,826,828,831,833,835,838,840],{"class":194,"line":263},[192,797,267],{"class":266},[192,799,270],{"class":205},[192,801,458],{"class":205},[192,803,547],{"class":266},[192,805,270],{"class":205},[192,807,637],{"class":212},[192,809,226],{"class":205},[192,811,812],{"class":222},"Alice Martin",[192,814,226],{"class":205},[192,816,575],{"class":205},[192,818,219],{"class":205},[192,820,821],{"class":222},"Liang Wei",[192,823,226],{"class":205},[192,825,575],{"class":205},[192,827,219],{"class":205},[192,829,830],{"class":222},"Fatima Noor",[192,832,226],{"class":205},[192,834,575],{"class":205},[192,836,837],{"class":242}," \u002F* …50+ *\u002F",[192,839,647],{"class":212},[192,841,842],{"class":205},"},\n",[192,844,845,847,849,851,853,855,858,860,862,864,867],{"class":194,"line":308},[192,846,311],{"class":266},[192,848,270],{"class":205},[192,850,458],{"class":205},[192,852,325],{"class":266},[192,854,270],{"class":205},[192,856,857],{"class":290}," 18",[192,859,575],{"class":205},[192,861,335],{"class":266},[192,863,270],{"class":205},[192,865,866],{"class":290}," 95",[192,868,869],{"class":205}," },\n",[192,871,872,874,876,878,880,882,884,888,890,893,895,898,900],{"class":194,"line":345},[192,873,348],{"class":266},[192,875,270],{"class":205},[192,877,458],{"class":205},[192,879,547],{"class":266},[192,881,270],{"class":205},[192,883,637],{"class":212},[192,885,887],{"class":886},"sfNiH","true",[192,889,575],{"class":205},[192,891,892],{"class":886}," true",[192,894,575],{"class":205},[192,896,897],{"class":886}," false",[192,899,647],{"class":212},[192,901,842],{"class":205},[192,903,904,906,908,910,912,914,916,918,920,922,924,927,929,931,933,936,938,940,942,945,947,949,951,953,955,957,960,962,965,967],{"class":194,"line":358},[192,905,361],{"class":266},[192,907,270],{"class":205},[192,909,458],{"class":205},[192,911,617],{"class":266},[192,913,270],{"class":205},[192,915,458],{"class":205},[192,917,547],{"class":266},[192,919,270],{"class":205},[192,921,637],{"class":212},[192,923,226],{"class":205},[192,925,926],{"class":222},"urgent",[192,928,226],{"class":205},[192,930,575],{"class":205},[192,932,219],{"class":205},[192,934,935],{"class":222},"beta",[192,937,226],{"class":205},[192,939,575],{"class":205},[192,941,219],{"class":205},[192,943,944],{"class":222},"vip",[192,946,226],{"class":205},[192,948,647],{"class":212},[192,950,555],{"class":205},[192,952,632],{"class":266},[192,954,270],{"class":205},[192,956,637],{"class":212},[192,958,959],{"class":290},"1",[192,961,575],{"class":205},[192,963,964],{"class":290}," 4",[192,966,647],{"class":212},[192,968,842],{"class":205},[192,970,971,973,975],{"class":194,"line":374},[192,972,377],{"class":266},[192,974,270],{"class":205},[192,976,260],{"class":205},[192,978,979,981,983,985,987,989,991,993,996,998,1000,1002,1005,1007,1009,1012,1014],{"class":194,"line":384},[192,980,387],{"class":266},[192,982,270],{"class":205},[192,984,458],{"class":205},[192,986,547],{"class":266},[192,988,270],{"class":205},[192,990,637],{"class":212},[192,992,226],{"class":205},[192,994,995],{"class":222},"alice@example.com",[192,997,226],{"class":205},[192,999,575],{"class":205},[192,1001,219],{"class":205},[192,1003,1004],{"class":222},"liang@corp.io",[192,1006,226],{"class":205},[192,1008,575],{"class":205},[192,1010,1011],{"class":242}," \u002F* … *\u002F",[192,1013,647],{"class":212},[192,1015,842],{"class":205},[192,1017,1018,1020,1022,1024,1026,1028,1030,1032,1034,1036,1038],{"class":194,"line":401},[192,1019,404],{"class":266},[192,1021,270],{"class":205},[192,1023,458],{"class":205},[192,1025,325],{"class":266},[192,1027,270],{"class":205},[192,1029,330],{"class":290},[192,1031,575],{"class":205},[192,1033,335],{"class":266},[192,1035,270],{"class":205},[192,1037,429],{"class":290},[192,1039,869],{"class":205},[192,1041,1042],{"class":194,"line":434},[192,1043,711],{"class":205},[192,1045,1046],{"class":194,"line":440},[192,1047,717],{"class":205},[133,1049,1050],{},"The per-field knobs, by kind:",[1052,1053,1054,1070],"table",{},[1055,1056,1057],"thead",{},[1058,1059,1060,1064,1067],"tr",{},[1061,1062,1063],"th",{},"Knob",[1061,1065,1066],{},"Applies to",[1061,1068,1069],{},"What it does",[1071,1072,1073,1087,1104,1124,1141],"tbody",{},[1058,1074,1075,1081,1084],{},[1076,1077,1078],"td",{},[136,1079,1080],{},"pool",[1076,1082,1083],{},"strings, numbers, booleans, bigints, …",[1076,1085,1086],{},"draw the value from this list",[1058,1088,1089,1098,1101],{},[1076,1090,1091,1094,1095],{},[136,1092,1093],{},"min"," \u002F ",[136,1096,1097],{},"max",[1076,1099,1100],{},"numbers, dates",[1076,1102,1103],{},"bound the generated range",[1058,1105,1106,1111,1114],{},[1076,1107,1108],{},[136,1109,1110],{},"$items",[1076,1112,1113],{},"arrays, tuples",[1076,1115,1116,1117,1119,1120,1123],{},"the element node (a ",[136,1118,68],{}," node for ",[136,1121,1122],{},"T[number]",")",[1058,1125,1126,1131,1134],{},[1076,1127,1128],{},[136,1129,1130],{},"$length",[1076,1132,1133],{},"arrays",[1076,1135,1136,1137,1140],{},"fixed length, or a ",[136,1138,1139],{},"[min, max]"," range",[1058,1142,1143,1148,1151],{},[1076,1144,1145],{},[136,1146,1147],{},"$optional",[1076,1149,1150],{},"objects",[1076,1152,1153],{},"present-probability (0 to 1) for optional members",[133,1155,1156,1157,1160],{},"Then feed it to the generator through the ",[136,1158,1159],{},"data"," option:",[182,1162,1164],{"className":184,"code":1163,"language":187,"meta":188,"style":188},"import { createMockType } from 'ts-runtypes';\nimport { userMock } from 'runtypes\u002Fgenerated\u002Fmodels\u002Fuser';\n\nconst mockUser = createMockType\u003CUser>({ data: userMock });\n\nmockUser();\n\u002F\u002F → { name: 'Liang Wei', age: 41, isActive: true,\n\u002F\u002F     tags: ['beta', 'vip'],\n\u002F\u002F     profile: { email: 'liang@corp.io', score: 73 } }\n",[136,1165,1166,1187,1208,1212,1253,1257,1267,1272,1277],{"__ignoreMap":188},[192,1167,1168,1170,1172,1175,1177,1179,1181,1183,1185],{"class":194,"line":195},[192,1169,199],{"class":198},[192,1171,458],{"class":205},[192,1173,1174],{"class":212}," createMockType",[192,1176,464],{"class":205},[192,1178,467],{"class":198},[192,1180,219],{"class":205},[192,1182,472],{"class":222},[192,1184,226],{"class":205},[192,1186,229],{"class":205},[192,1188,1189,1191,1193,1195,1197,1199,1201,1204,1206],{"class":194,"line":232},[192,1190,199],{"class":198},[192,1192,458],{"class":205},[192,1194,518],{"class":212},[192,1196,464],{"class":205},[192,1198,467],{"class":198},[192,1200,219],{"class":205},[192,1202,1203],{"class":222},"runtypes\u002Fgenerated\u002Fmodels\u002Fuser",[192,1205,226],{"class":205},[192,1207,229],{"class":205},[192,1209,1210],{"class":194,"line":239},[192,1211,236],{"emptyLinePlaceholder":235},[192,1213,1214,1217,1220,1223,1226,1228,1230,1232,1235,1238,1241,1243,1246,1249,1251],{"class":194,"line":246},[192,1215,1216],{"class":252},"const",[192,1218,1219],{"class":212}," mockUser ",[192,1221,1222],{"class":205},"=",[192,1224,1174],{"class":1225},"s2Zo4",[192,1227,525],{"class":205},[192,1229,528],{"class":256},[192,1231,531],{"class":205},[192,1233,1234],{"class":212},"(",[192,1236,1237],{"class":205},"{",[192,1239,1240],{"class":266}," data",[192,1242,270],{"class":205},[192,1244,1245],{"class":212}," userMock ",[192,1247,1248],{"class":205},"}",[192,1250,1123],{"class":212},[192,1252,229],{"class":205},[192,1254,1255],{"class":194,"line":263},[192,1256,236],{"emptyLinePlaceholder":235},[192,1258,1259,1262,1265],{"class":194,"line":308},[192,1260,1261],{"class":1225},"mockUser",[192,1263,1264],{"class":212},"()",[192,1266,229],{"class":205},[192,1268,1269],{"class":194,"line":345},[192,1270,1271],{"class":242},"\u002F\u002F → { name: 'Liang Wei', age: 41, isActive: true,\n",[192,1273,1274],{"class":194,"line":358},[192,1275,1276],{"class":242},"\u002F\u002F     tags: ['beta', 'vip'],\n",[192,1278,1279],{"class":194,"line":374},[192,1280,1281],{"class":242},"\u002F\u002F     profile: { email: 'liang@corp.io', score: 73 } }\n",[1283,1284,1285,1286,1288,1289,1291,1292,1295],"note",{},"The ",[136,1287,1159],{}," option is purely additive. Leave it out and the generator works exactly as it does today. The ",[136,1290,138],{}," type and the ",[136,1293,1294],{},"createMockType({ data })"," integration ship today; the build-time check on pool values is still in development.",[167,1297,1299],{"id":1298},"every-sample-value-is-checked","Every sample value is checked",[133,1301,1302,1303,1306,1307,1310,1311,1314,1315,1318],{},"Because RunTypes already knows how to validate, the compiler checks that ",[141,1304,1305],{},"every value in your pools and ranges is actually valid for its field",", at build time and not when your tests run. If an AI drops a malformed address into the ",[136,1308,1309],{},"email"," pool, or a ",[136,1312,1313],{},"score"," of ",[136,1316,1317],{},"150",", the build catches it:",[182,1320,1322],{"className":184,"code":1321,"language":187,"meta":188,"style":188},"export const userMock: MockData\u003CUser> = {\n  profile: {\n    email: { pool: ['alice@example.com', 'not-an-email'] },   \u002F\u002F error: 'not-an-email' isn't a valid email\n    score: { min: 0, max: 150 },                              \u002F\u002F error: 150 is above the field's max of 100\n  },\n};\n",[136,1323,1324,1346,1354,1390,1418,1422],{"__ignoreMap":188},[192,1325,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344],{"class":194,"line":195},[192,1327,249],{"class":198},[192,1329,515],{"class":252},[192,1331,518],{"class":212},[192,1333,270],{"class":205},[192,1335,461],{"class":256},[192,1337,525],{"class":205},[192,1339,528],{"class":256},[192,1341,531],{"class":205},[192,1343,534],{"class":205},[192,1345,260],{"class":205},[192,1347,1348,1350,1352],{"class":194,"line":232},[192,1349,377],{"class":266},[192,1351,270],{"class":205},[192,1353,260],{"class":205},[192,1355,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1381,1383,1385,1387],{"class":194,"line":239},[192,1357,387],{"class":266},[192,1359,270],{"class":205},[192,1361,458],{"class":205},[192,1363,547],{"class":266},[192,1365,270],{"class":205},[192,1367,637],{"class":212},[192,1369,226],{"class":205},[192,1371,995],{"class":222},[192,1373,226],{"class":205},[192,1375,575],{"class":205},[192,1377,219],{"class":205},[192,1379,1380],{"class":222},"not-an-email",[192,1382,226],{"class":205},[192,1384,647],{"class":212},[192,1386,555],{"class":205},[192,1388,1389],{"class":242},"   \u002F\u002F error: 'not-an-email' isn't a valid email\n",[192,1391,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1413,1415],{"class":194,"line":246},[192,1393,404],{"class":266},[192,1395,270],{"class":205},[192,1397,458],{"class":205},[192,1399,325],{"class":266},[192,1401,270],{"class":205},[192,1403,330],{"class":290},[192,1405,575],{"class":205},[192,1407,335],{"class":266},[192,1409,270],{"class":205},[192,1411,1412],{"class":290}," 150",[192,1414,584],{"class":205},[192,1416,1417],{"class":242},"                              \u002F\u002F error: 150 is above the field's max of 100\n",[192,1419,1420],{"class":194,"line":263},[192,1421,711],{"class":205},[192,1423,1424],{"class":194,"line":308},[192,1425,717],{"class":205},[133,1427,1428,1429,1431,1432,1434],{},"No other mock library does this; it falls straight out of the validator RunTypes already has. (Mistakes like ",[136,1430,1093],{}," above ",[136,1433,1097],{}," get flagged too.)",[167,1436,1438],{"id":1437},"format-aware-by-default","Format-aware by default",[133,1440,1441,1442,1445,1446,1448,1449,1452,1453,1455,1456,1460,1461,1464,1465,1468,1469,1471,1472,1475],{},"Even without a pool, the generator already respects ",[150,1443,1444],{"href":31},"type formats",": an ",[136,1447,1309],{}," field gets a real-looking address, a ",[136,1450,1451],{},"uuidv4"," field a real-looking UUID. ",[136,1454,138],{}," is for when ",[1457,1458,1459],"em",{},"mechanical-but-valid"," isn't enough and you want ",[1457,1462,1463],{},"believable",": real names in ",[136,1466,1467],{},"name",", your own domains in ",[136,1470,1309],{},", realistic ranges in ",[136,1473,1474],{},"age",". Anything you don't pin falls back to the format-aware mechanical generator.",[1283,1477,1478,1479,1481,1482,1485],{},"Mock pools get big and almost never belong in a production bundle. Use ",[136,1480,138],{}," in tests and seed scripts (the same place ",[136,1483,1484],{},"createMockType"," already lives) and normal tree-shaking keeps it out of your shipped code.",[1487,1488,1489],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}","Realistic sample data for a type, checked against its fields at build time.","md",null,{"toc":18},{"title":68,"description":1490},"PucKOUTJzG9Na9fuwYM7v-ycytFSge9JB3LSLOEakwA",[1497,1499],{"title":64,"path":65,"stem":66,"description":1498,"children":-1},"Human-readable labels and error messages for a type.",{"title":42,"path":74,"stem":79,"description":1500,"children":-1},"Type validation that checks data only (methods and other non-data members are ignored).",1781995977193]