[{"data":1,"prerenderedAt":985},["ShallowReactive",2],{"navigation_docs":3,"-guide-source-conversion":149,"-guide-source-conversion-surround":980},[4,27,81,103,144],{"title":5,"icon":6,"redirect":7,"path":8,"stem":9,"children":10,"page":26},"Introduction","i-lucide-rocket","\u002Fintroduction\u002Fabout-ts-runtypes","\u002Fintroduction","01.introduction",[11,14,18,22],{"title":12,"path":7,"stem":13},"About RunTypes","01.introduction\u002F01.about-ts-runtypes",{"title":15,"path":16,"stem":17},"Built on typescript-go","\u002Fintroduction\u002Fbuilt-on-typescript-go","01.introduction\u002F02.built-on-typescript-go",{"title":19,"path":20,"stem":21},"Quick Start","\u002Fintroduction\u002Fquick-start","01.introduction\u002F03.quick-start",{"title":23,"path":24,"stem":25},"Configuration","\u002Fintroduction\u002Fconfiguration","01.introduction\u002F04.configuration",false,{"title":28,"icon":29,"redirect":30,"path":31,"stem":32,"children":33,"page":26},"Guide","i-lucide-book-open","\u002Fguide\u002Ftype-builders","\u002Fguide","02.guide",[34,37,41,45,49,53,57,61,65,69,73,77],{"title":35,"path":30,"stem":36},"Types vs Type Builders","02.guide\u002F01.type-builders",{"title":38,"path":39,"stem":40},"Type Formats","\u002Fguide\u002Ftype-formats","02.guide\u002F02.type-formats",{"title":42,"path":43,"stem":44},"Validation","\u002Fguide\u002Fvalidation","02.guide\u002F03.validation",{"title":46,"path":47,"stem":48},"Reflection","\u002Fguide\u002Freflection","02.guide\u002F04.reflection",{"title":50,"path":51,"stem":52},"JSON Serialization","\u002Fguide\u002Fjson-serialization","02.guide\u002F05.json-serialization",{"title":54,"path":55,"stem":56},"Binary Serialization","\u002Fguide\u002Fbinary-serialization","02.guide\u002F06.binary-serialization",{"title":58,"path":59,"stem":60},"Data Mocking","\u002Fguide\u002Fmocking","02.guide\u002F07.mocking",{"title":62,"path":63,"stem":64},"Compiler Markers","\u002Fguide\u002Fcompiler-markers","02.guide\u002F08.compiler-markers",{"title":66,"path":67,"stem":68},"Pure Functions","\u002Fguide\u002Fpure-functions","02.guide\u002F09.pure-functions",{"title":70,"path":71,"stem":72},"Linting","\u002Fguide\u002Flinting","02.guide\u002F10.linting",{"title":74,"path":75,"stem":76},"Source Conversion","\u002Fguide\u002Fsource-conversion","02.guide\u002F13.source-conversion",{"title":78,"path":79,"stem":80},"Generating JSON Schema","\u002Fguide\u002Fjson-schema-generation","02.guide\u002F14.json-schema-generation",{"title":82,"icon":83,"redirect":84,"path":85,"stem":86,"children":87,"page":26},"AI Integration","i-lucide-sparkles","\u002Fai-integration\u002Fworkflow-and-commands","\u002Fai-integration","03.ai-integration",[88,91,95,99],{"title":89,"path":84,"stem":90},"AI Workflow","03.ai-integration\u002F01.workflow-and-commands",{"title":92,"path":93,"stem":94},"FriendlyText","\u002Fai-integration\u002Ffriendly-type","03.ai-integration\u002F02.friendly-type",{"title":96,"path":97,"stem":98},"MockData","\u002Fai-integration\u002Fmock-data","03.ai-integration\u002F03.mock-data",{"title":100,"path":101,"stem":102},"Translations (i18n)","\u002Fai-integration\u002Fi18n","03.ai-integration\u002F04.i18n",{"title":104,"icon":105,"redirect":106,"path":107,"stem":108,"children":109,"page":26},"Benchmarks","i-lucide-gauge","\u002Fbenchmarks\u002Fvalidation","\u002Fbenchmarks","07.benchmarks",[110,112,116,120,124,128,132,136,140],{"title":42,"path":106,"stem":111},"07.benchmarks\u002F01.validation",{"title":113,"path":114,"stem":115},"Validation Formats","\u002Fbenchmarks\u002Fvalidation-formats","07.benchmarks\u002F02.validation-formats",{"title":117,"path":118,"stem":119},"Validation Errors","\u002Fbenchmarks\u002Fgetvalidationerrors","07.benchmarks\u002F03.getvalidationerrors",{"title":121,"path":122,"stem":123},"Validation Error Formats","\u002Fbenchmarks\u002Fgetvalidationerrors-formats","07.benchmarks\u002F04.getvalidationerrors-formats",{"title":125,"path":126,"stem":127},"Serialization","\u002Fbenchmarks\u002Fserialization","07.benchmarks\u002F05.serialization",{"title":129,"path":130,"stem":131},"Serialization Formats","\u002Fbenchmarks\u002Fserialization-formats","07.benchmarks\u002F06.serialization-formats",{"title":133,"path":134,"stem":135},"Compile Time","\u002Fbenchmarks\u002Fcompiletime","07.benchmarks\u002F07.compiletime",{"title":137,"path":138,"stem":139},"Correctness","\u002Fbenchmarks\u002Fcorrectness","07.benchmarks\u002F08.correctness",{"title":141,"path":142,"stem":143},"Strict validation","\u002Fbenchmarks\u002Fstrict","07.benchmarks\u002F09.strict",{"title":145,"path":146,"stem":147,"icon":148},"Diagnostics","\u002Fdiagnostics","08.diagnostics","i-lucide-triangle-alert",{"id":150,"title":74,"body":151,"description":974,"extension":975,"links":976,"meta":977,"navigation":213,"path":75,"seo":978,"stem":76,"__hash__":979},"docs\u002F02.guide\u002F13.source-conversion.md",{"type":152,"value":153},"minimark",[154,159,163,238,249,329,336,480,484,487,542,545,694,705,709,712,753,757,768,771,794,798,805,808,889,896,907,910,914,924,967,970],[155,156,158],"h2",{"id":157},"one-shape-any-notation","One shape, any notation",[160,161,162],"p",{},"RunTypes accepts two ways to write a shape: a plain TypeScript type and the value-first type builders. They are interchangeable, so a codebase can also switch between them. The convert command rewrites your files from one form to the other, in place.",[164,165,170],"pre",{"className":166,"code":167,"language":168,"meta":169,"style":169},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# one file, or several\nnpx ts-runtypes convert --to builders src\u002Fmodels.ts src\u002Fapi.ts\n\n# or a whole folder (every .ts and .tsx inside it)\nnpx ts-runtypes convert --to type src\u002Fmodels\u002F\n","bash","",[171,172,173,182,208,215,221],"code",{"__ignoreMap":169},[174,175,178],"span",{"class":176,"line":177},"line",1,[174,179,181],{"class":180},"sHwdD","# one file, or several\n",[174,183,185,189,193,196,199,202,205],{"class":176,"line":184},2,[174,186,188],{"class":187},"sBMFI","npx",[174,190,192],{"class":191},"sfazB"," ts-runtypes",[174,194,195],{"class":191}," convert",[174,197,198],{"class":191}," --to",[174,200,201],{"class":191}," builders",[174,203,204],{"class":191}," src\u002Fmodels.ts",[174,206,207],{"class":191}," src\u002Fapi.ts\n",[174,209,211],{"class":176,"line":210},3,[174,212,214],{"emptyLinePlaceholder":213},true,"\n",[174,216,218],{"class":176,"line":217},4,[174,219,220],{"class":180},"# or a whole folder (every .ts and .tsx inside it)\n",[174,222,224,226,228,230,232,235],{"class":176,"line":223},5,[174,225,188],{"class":187},[174,227,192],{"class":191},[174,229,195],{"class":191},[174,231,198],{"class":191},[174,233,234],{"class":191}," type",[174,236,237],{"class":191}," src\u002Fmodels\u002F\n",[160,239,240,241,244,245,248],{},"The targets are ",[171,242,243],{},"type"," and ",[171,246,247],{},"builders",". Declarations already written in the target form are left byte-for-byte unchanged, so running the command twice is safe.",[164,250,254],{"className":251,"code":252,"language":253,"meta":169,"style":169},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F A file you might have today, written type-first.\nexport type User = {\n  id: number;\n  name?: string;\n  tags: string[];\n};\n","ts",[171,255,256,261,280,295,308,323],{"__ignoreMap":169},[174,257,258],{"class":176,"line":177},[174,259,260],{"class":180},"\u002F\u002F A file you might have today, written type-first.\n",[174,262,263,267,270,273,277],{"class":176,"line":184},[174,264,266],{"class":265},"s7zQu","export",[174,268,234],{"class":269},"spNyl",[174,271,272],{"class":187}," User",[174,274,276],{"class":275},"sMK4o"," =",[174,278,279],{"class":275}," {\n",[174,281,282,286,289,292],{"class":176,"line":210},[174,283,285],{"class":284},"swJcz","  id",[174,287,288],{"class":275},":",[174,290,291],{"class":187}," number",[174,293,294],{"class":275},";\n",[174,296,297,300,303,306],{"class":176,"line":217},[174,298,299],{"class":284},"  name",[174,301,302],{"class":275},"?:",[174,304,305],{"class":187}," string",[174,307,294],{"class":275},[174,309,310,313,315,317,321],{"class":176,"line":223},[174,311,312],{"class":284},"  tags",[174,314,288],{"class":275},[174,316,305],{"class":187},[174,318,320],{"class":319},"sTEyZ","[]",[174,322,294],{"class":275},[174,324,326],{"class":176,"line":325},6,[174,327,328],{"class":275},"};\n",[160,330,331,332,335],{},"After ",[171,333,334],{},"--to builders"," the declaration reads like this. The type name survives as an alias, so every import of it keeps working. (The example below renames the alias only so both spellings can sit in one file; the real command keeps your original name.)",[164,337,339],{"className":251,"code":338,"language":253,"meta":169,"style":169},"\u002F\u002F The same declaration after `ts-runtypes convert --to builders`: the const\n\u002F\u002F carries the shape, and the alias keeps the type name alive so nothing that\n\u002F\u002F imported `User` breaks.\nexport const userRT = RT.object({id: TF.number(), name: RT.optional(TF.string()), tags: RT.array(TF.string())});\nexport type UserAsBuilders = InferType\u003Ctypeof userRT>;\n",[171,340,341,346,351,356,457],{"__ignoreMap":169},[174,342,343],{"class":176,"line":177},[174,344,345],{"class":180},"\u002F\u002F The same declaration after `ts-runtypes convert --to builders`: the const\n",[174,347,348],{"class":176,"line":184},[174,349,350],{"class":180},"\u002F\u002F carries the shape, and the alias keeps the type name alive so nothing that\n",[174,352,353],{"class":176,"line":210},[174,354,355],{"class":180},"\u002F\u002F imported `User` breaks.\n",[174,357,358,360,363,366,369,372,375,379,382,385,388,390,393,395,398,401,404,407,409,411,413,416,419,421,424,427,429,432,434,436,438,441,443,445,447,449,452,455],{"class":176,"line":217},[174,359,266],{"class":265},[174,361,362],{"class":269}," const",[174,364,365],{"class":319}," userRT ",[174,367,368],{"class":275},"=",[174,370,371],{"class":319}," RT",[174,373,374],{"class":275},".",[174,376,378],{"class":377},"s2Zo4","object",[174,380,381],{"class":319},"(",[174,383,384],{"class":275},"{",[174,386,387],{"class":284},"id",[174,389,288],{"class":275},[174,391,392],{"class":319}," TF",[174,394,374],{"class":275},[174,396,397],{"class":377},"number",[174,399,400],{"class":319},"()",[174,402,403],{"class":275},",",[174,405,406],{"class":284}," name",[174,408,288],{"class":275},[174,410,371],{"class":319},[174,412,374],{"class":275},[174,414,415],{"class":377},"optional",[174,417,418],{"class":319},"(TF",[174,420,374],{"class":275},[174,422,423],{"class":377},"string",[174,425,426],{"class":319},"())",[174,428,403],{"class":275},[174,430,431],{"class":284}," tags",[174,433,288],{"class":275},[174,435,371],{"class":319},[174,437,374],{"class":275},[174,439,440],{"class":377},"array",[174,442,418],{"class":319},[174,444,374],{"class":275},[174,446,423],{"class":377},[174,448,426],{"class":319},[174,450,451],{"class":275},"}",[174,453,454],{"class":319},")",[174,456,294],{"class":275},[174,458,459,461,463,466,468,471,474,477],{"class":176,"line":223},[174,460,266],{"class":265},[174,462,234],{"class":269},[174,464,465],{"class":187}," UserAsBuilders",[174,467,276],{"class":275},[174,469,470],{"class":187}," InferType",[174,472,473],{"class":275},"\u003Ctypeof",[174,475,476],{"class":319}," userRT",[174,478,479],{"class":275},">;\n",[155,481,483],{"id":482},"types-written-inside-a-call","Types written inside a call",[160,485,486],{},"Not every type has a declaration. Writing one straight into a factory call is\njust as common, and there is nothing there for the converter to rename, so it\nrewrites the call itself.",[164,488,490],{"className":251,"code":489,"language":253,"meta":169,"style":169},"\u002F\u002F A type written straight into a factory call has no declaration to rewrite,\n\u002F\u002F so the converter rewrites the call itself. Before:\nexport const isOrder = createValidateFn\u003C{id: string; total: number}>();\n",[171,491,492,497,502],{"__ignoreMap":169},[174,493,494],{"class":176,"line":177},[174,495,496],{"class":180},"\u002F\u002F A type written straight into a factory call has no declaration to rewrite,\n",[174,498,499],{"class":176,"line":184},[174,500,501],{"class":180},"\u002F\u002F so the converter rewrites the call itself. Before:\n",[174,503,504,506,508,511,513,516,519,521,523,525,528,531,533,535,538,540],{"class":176,"line":210},[174,505,266],{"class":265},[174,507,362],{"class":269},[174,509,510],{"class":319}," isOrder ",[174,512,368],{"class":275},[174,514,515],{"class":377}," createValidateFn",[174,517,518],{"class":275},"\u003C{",[174,520,387],{"class":284},[174,522,288],{"class":275},[174,524,305],{"class":187},[174,526,527],{"class":275},";",[174,529,530],{"class":284}," total",[174,532,288],{"class":275},[174,534,291],{"class":187},[174,536,537],{"class":275},"}>",[174,539,400],{"class":319},[174,541,294],{"class":275},[160,543,544],{},"Converting to type builders moves the type into the value slot the same factory\nalready accepts:",[164,546,548],{"className":251,"code":547,"language":253,"meta":169,"style":169},"\u002F\u002F And after converting to type builders, the same call with the type as a\n\u002F\u002F value. It reflects the same shape, so it is the same validator.\nexport const isOrderBuilt = createValidateFn(RT.object({id: TF.string(), total: TF.number()}));\ngetRunTypeId\u003C{id: string; total: number}>() === getRunTypeId(RT.object({id: TF.string(), total: TF.number()})); \u002F\u002F true\n",[171,549,550,555,560,617],{"__ignoreMap":169},[174,551,552],{"class":176,"line":177},[174,553,554],{"class":180},"\u002F\u002F And after converting to type builders, the same call with the type as a\n",[174,556,557],{"class":176,"line":184},[174,558,559],{"class":180},"\u002F\u002F value. It reflects the same shape, so it is the same validator.\n",[174,561,562,564,566,569,571,573,576,578,580,582,584,586,588,590,592,594,596,598,600,602,604,606,608,610,612,615],{"class":176,"line":210},[174,563,266],{"class":265},[174,565,362],{"class":269},[174,567,568],{"class":319}," isOrderBuilt ",[174,570,368],{"class":275},[174,572,515],{"class":377},[174,574,575],{"class":319},"(RT",[174,577,374],{"class":275},[174,579,378],{"class":377},[174,581,381],{"class":319},[174,583,384],{"class":275},[174,585,387],{"class":284},[174,587,288],{"class":275},[174,589,392],{"class":319},[174,591,374],{"class":275},[174,593,423],{"class":377},[174,595,400],{"class":319},[174,597,403],{"class":275},[174,599,530],{"class":284},[174,601,288],{"class":275},[174,603,392],{"class":319},[174,605,374],{"class":275},[174,607,397],{"class":377},[174,609,400],{"class":319},[174,611,451],{"class":275},[174,613,614],{"class":319},"))",[174,616,294],{"class":275},[174,618,619,622,624,626,628,630,632,634,636,638,640,643,646,649,651,653,655,657,659,661,663,665,667,669,671,673,675,677,679,681,683,685,687,689,691],{"class":176,"line":217},[174,620,621],{"class":377},"getRunTypeId",[174,623,518],{"class":275},[174,625,387],{"class":284},[174,627,288],{"class":275},[174,629,305],{"class":187},[174,631,527],{"class":275},[174,633,530],{"class":284},[174,635,288],{"class":275},[174,637,291],{"class":187},[174,639,537],{"class":275},[174,641,642],{"class":319},"() ",[174,644,645],{"class":275},"===",[174,647,648],{"class":377}," getRunTypeId",[174,650,575],{"class":319},[174,652,374],{"class":275},[174,654,378],{"class":377},[174,656,381],{"class":319},[174,658,384],{"class":275},[174,660,387],{"class":284},[174,662,288],{"class":275},[174,664,392],{"class":319},[174,666,374],{"class":275},[174,668,423],{"class":377},[174,670,400],{"class":319},[174,672,403],{"class":275},[174,674,530],{"class":284},[174,676,288],{"class":275},[174,678,392],{"class":319},[174,680,374],{"class":275},[174,682,397],{"class":377},[174,684,400],{"class":319},[174,686,451],{"class":275},[174,688,614],{"class":319},[174,690,527],{"class":275},[174,692,693],{"class":180}," \u002F\u002F true\n",[160,695,696,697,700,701,704],{},"Two shapes are deliberately left alone. A call that already names its type\n(",[171,698,699],{},"createValidateFn\u003COrder>()",") keeps the name, because the declaration behind it\nconverts on its own. And a call that reflects a runtime value\n(",[171,702,703],{},"createValidateFn(order)",") is untouched, since there is no written type there\nto move.",[155,706,708],{"id":707},"identity-never-moves","Identity never moves",[160,710,711],{},"Conversion changes the spelling, never the shape. Every converted declaration resolves to the same identity as before, which means the same generated validator, the same codecs, the same mock data. This is enforced, not aspirational: the converter's test suite converts randomly generated files through the full chain (type to builders and back) and checks the identity of every declaration on every step.",[164,713,715],{"className":251,"code":714,"language":253,"meta":169,"style":169},"\u002F\u002F Conversion never moves a type's identity: both spellings resolve to\n\u002F\u002F the same id, so they share one generated validator, codec and mock pool.\ngetRunTypeId\u003CUser>() === getRunTypeId(userRT); \u002F\u002F true\n",[171,716,717,722,727],{"__ignoreMap":169},[174,718,719],{"class":176,"line":177},[174,720,721],{"class":180},"\u002F\u002F Conversion never moves a type's identity: both spellings resolve to\n",[174,723,724],{"class":176,"line":184},[174,725,726],{"class":180},"\u002F\u002F the same id, so they share one generated validator, codec and mock pool.\n",[174,728,729,731,734,737,740,742,744,746,749,751],{"class":176,"line":210},[174,730,621],{"class":377},[174,732,733],{"class":275},"\u003C",[174,735,736],{"class":187},"User",[174,738,739],{"class":275},">",[174,741,642],{"class":319},[174,743,645],{"class":275},[174,745,648],{"class":377},[174,747,748],{"class":319},"(userRT)",[174,750,527],{"class":275},[174,752,693],{"class":180},[155,754,756],{"id":755},"what-converts","What converts",[160,758,759,760,763,764,767],{},"Everything the engine reflects: primitives and literals, string and number formats, arrays, tuples (labeled ones included, using RT.slot in builder form), objects (optional, readonly and quoted keys included), records (including an index signature beside named properties, which becomes an intersection in builder form), unions, enums, classes, Date, Map, Set, Promise, RegExp, Temporal types, functions (named parameters use RT.slot too), template literals, branded types, and recursive types. Recursive shapes come out as ",[171,761,762],{},"RT.circular"," with ",[171,765,766],{},"RT.self()"," in builder form.",[160,769,770],{},"Declarations that reference each other stay references. A type that names another converted type keeps the name in every form, across files too: convert the files together and the imports are updated for you.",[164,772,774],{"className":166,"code":773,"language":168,"meta":169,"style":169},"npx ts-runtypes convert --to builders src\u002Fuser.ts src\u002Forder.ts\n",[171,775,776],{"__ignoreMap":169},[174,777,778,780,782,784,786,788,791],{"class":176,"line":177},[174,779,188],{"class":187},[174,781,192],{"class":191},[174,783,195],{"class":191},[174,785,198],{"class":191},[174,787,201],{"class":191},[174,789,790],{"class":191}," src\u002Fuser.ts",[174,792,793],{"class":191}," src\u002Forder.ts\n",[155,795,797],{"id":796},"what-does-not-convert","What does not convert",[160,799,800,801,804],{},"Most shapes that the builder form has no word for still convert: they ride an escape that carries the type itself, ",[171,802,803],{},"getRunType\u003CT>()",". That covers functions, template literals, bigint literals and more.",[160,806,807],{},"What is left is the short list below, where even the escape cannot help because the type cannot be written down inside it. The converter never guesses: it reports the shape, leaves that declaration exactly as you wrote it, converts the rest of the file, and exits with a non-zero code so CI notices.",[809,810,811,824],"table",{},[812,813,814],"thead",{},[815,816,817,821],"tr",{},[818,819,820],"th",{},"Shape",[818,822,823],{},"Why",[825,826,827,836,844,852,863,871],"tbody",{},[815,828,829,833],{},[830,831,832],"td",{},"A cycle that never passes through a named type",[830,834,835],{},"The self reference has nothing to point at. Give the inner type a name and it converts.",[815,837,838,841],{},[830,839,840],{},"A symbol-keyed property",[830,842,843],{},"The property name is a symbol, and an escape can only carry a type it can write down.",[815,845,846,849],{},[830,847,848],{},"A recursive type reached only inside an embedded type expression",[830,850,851],{},"Embedded types are quoted TypeScript, and quoted text cannot point back at the declaration being defined.",[815,853,854,860],{},[830,855,856,857],{},"A type that loops back through one of its own tuple slots, like ",[171,858,859],{},"type Pair = [number, Pair]",[830,861,862],{},"Only when converting to type builders. TypeScript works out a tuple's slots straight away rather than on demand, so the builder form cannot close the loop there. Put the recursion behind an object, array, Map, Set or function and it converts.",[815,864,865,868],{},[830,866,867],{},"A reference to a type whose file is not in the same run",[830,869,870],{},"Add that file to the same command.",[815,872,873,879],{},[830,874,875,876],{},"A Temporal type that resolves to ",[171,877,878],{},"any",[830,880,881,882,885,886,888],{},"The Temporal declarations are missing from your project. Add the ",[171,883,884],{},"ESNext.Temporal"," lib or a polyfill's types. Converting would bake the ",[171,887,878],{}," in permanently.",[160,890,891,892,895],{},"A generic type (",[171,893,894],{},"type Box\u003CT> = ...",") is not on the list, and not an error\neither: a type parameter has no runtime shape, so there is nothing to convert.\nThe declaration is reported and left as written, and every place it is used with\nreal types converts normally.",[160,897,898,899,906],{},"That list is kept honest by a test. Every row is a real declaration handed to the real command, asserting the exact message you would see and that your file came back untouched: ",[900,901,905],"a",{"href":902,"rel":903},"https:\u002F\u002Fgithub.com\u002FMionKit\u002Fts-run-types\u002Fblob\u002Fmain\u002Fpackages\u002Fts-runtypes\u002Ftest\u002Ffeatures\u002Funsupported-conversion.test.ts",[904],"nofollow","unsupported-conversion.test.ts",". When one of these starts converting, that test fails and the row goes away, so the list can never quietly drift from the tool.",[160,908,909],{},"One more case is not a refusal but worth knowing: converting to plain types leaves a builder const alone if your code still uses it elsewhere, since removing it would break those call sites.",[155,911,913],{"id":912},"checking-without-writing","Checking without writing",[160,915,916,919,920,923],{},[171,917,918],{},"--check"," reports what would change and exits with code 1 while anything is pending, so it slots into CI. ",[171,921,922],{},"--out-dir"," writes the converted files into a copy of the folder and leaves your sources untouched.",[164,925,927],{"className":166,"code":926,"language":168,"meta":169,"style":169},"npx ts-runtypes convert --to type --check src\u002Fmodels\u002F\nnpx ts-runtypes convert --to builders src\u002Fmodels\u002F --out-dir converted\u002F\n",[171,928,929,946],{"__ignoreMap":169},[174,930,931,933,935,937,939,941,944],{"class":176,"line":177},[174,932,188],{"class":187},[174,934,192],{"class":191},[174,936,195],{"class":191},[174,938,198],{"class":191},[174,940,234],{"class":191},[174,942,943],{"class":191}," --check",[174,945,237],{"class":191},[174,947,948,950,952,954,956,958,961,964],{"class":176,"line":184},[174,949,188],{"class":187},[174,951,192],{"class":191},[174,953,195],{"class":191},[174,955,198],{"class":191},[174,957,201],{"class":191},[174,959,960],{"class":191}," src\u002Fmodels\u002F",[174,962,963],{"class":191}," --out-dir",[174,965,966],{"class":191}," converted\u002F\n",[160,968,969],{},"Anything the converter cannot express is reported with a clear message and left exactly as it was, and the exit code tells you something needs attention. The shapes that can happen to are listed above.",[971,972,973],"style",{},"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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}","Rewrite files between plain types and type builders with one command.","md",null,{"toc":26},{"title":74,"description":974},"xA6gbMuU8tnuj_SjO9KdrcvqtPaMCKWbbXCSATkCLjg",[981,983],{"title":70,"path":71,"stem":72,"description":982,"children":-1},"See RunTypes problems in your editor and block dirty enrichment files at commit time.",{"title":78,"path":79,"stem":80,"description":984,"children":-1},"JSON Schema documents generated from your types at build time.",1787523491078]