[{"data":1,"prerenderedAt":1071},["ShallowReactive",2],{"navigation_docs":3,"-guide-linting":132,"-guide-linting-surround":1066},[4,27,69,91,127],{"title":5,"icon":6,"redirect":7,"path":8,"stem":9,"children":10,"page":26},"Introduction","i-lucide-rocket","\u002Fintroduction\u002Fabout-ts-runtypes","\u002Fintroduction","1.introduction",[11,14,18,22],{"title":12,"path":7,"stem":13},"About RunTypes","1.introduction\u002F1.about-ts-runtypes",{"title":15,"path":16,"stem":17},"Built on typescript-go","\u002Fintroduction\u002Fbuilt-on-typescript-go","1.introduction\u002F2.built-on-typescript-go",{"title":19,"path":20,"stem":21},"Quick Start","\u002Fintroduction\u002Fquick-start","1.introduction\u002F3.quick-start",{"title":23,"path":24,"stem":25},"Configuration","\u002Fintroduction\u002Fconfiguration","1.introduction\u002F4.configuration",false,{"title":28,"icon":29,"redirect":30,"path":31,"stem":32,"children":33,"page":26},"Guide","i-lucide-book-open","\u002Fguide\u002Ftypes-vs-schemas","\u002Fguide","2.guide",[34,37,41,45,49,53,57,61,65],{"title":35,"path":30,"stem":36},"Types vs Schemas","2.guide\u002F1.types-vs-schemas",{"title":38,"path":39,"stem":40},"Type Formats","\u002Fguide\u002Ftype-formats","2.guide\u002F2.type-formats",{"title":42,"path":43,"stem":44},"Reflection","\u002Fguide\u002Freflection","2.guide\u002F3.reflection",{"title":46,"path":47,"stem":48},"Serialization","\u002Fguide\u002Fserialization","2.guide\u002F4.serialization",{"title":50,"path":51,"stem":52},"Validation","\u002Fguide\u002Fvalidation","2.guide\u002F5.validation",{"title":54,"path":55,"stem":56},"Data Mocking","\u002Fguide\u002Fmocking","2.guide\u002F6.mocking",{"title":58,"path":59,"stem":60},"Compiler Markers","\u002Fguide\u002Fcompiler-markers","2.guide\u002F7.compiler-markers",{"title":62,"path":63,"stem":64},"Pure Functions","\u002Fguide\u002Fpure-functions","2.guide\u002F8.pure-functions",{"title":66,"path":67,"stem":68},"Linting","\u002Fguide\u002Flinting","2.guide\u002F9.linting",{"title":70,"icon":71,"redirect":72,"path":73,"stem":74,"children":75,"page":26},"AI Integration","i-lucide-sparkles","\u002Fai-integration\u002Fworkflow-and-commands","\u002Fai-integration","3.ai-integration",[76,79,83,87],{"title":77,"path":72,"stem":78},"AI Workflow","3.ai-integration\u002F1.workflow-and-commands",{"title":80,"path":81,"stem":82},"FriendlyText","\u002Fai-integration\u002Ffriendly-type","3.ai-integration\u002F2.friendly-type",{"title":84,"path":85,"stem":86},"MockData","\u002Fai-integration\u002Fmock-data","3.ai-integration\u002F3.mock-data",{"title":88,"path":89,"stem":90},"Translations (i18n)","\u002Fai-integration\u002Fi18n","3.ai-integration\u002F4.i18n",{"title":92,"icon":93,"redirect":94,"path":95,"stem":96,"children":97,"page":26},"Benchmarks","i-lucide-gauge","\u002Fbenchmarks\u002Fvalidation","\u002Fbenchmarks","7.benchmarks",[98,100,104,108,112,115,119,123],{"title":50,"path":94,"stem":99},"7.benchmarks\u002F1.validation",{"title":101,"path":102,"stem":103},"Validation Formats","\u002Fbenchmarks\u002Fvalidation-formats","7.benchmarks\u002F2.validation-formats",{"title":105,"path":106,"stem":107},"Validation Errors","\u002Fbenchmarks\u002Fgetvalidationerrors","7.benchmarks\u002F3.getvalidationerrors",{"title":109,"path":110,"stem":111},"Validation Error Formats","\u002Fbenchmarks\u002Fgetvalidationerrors-formats","7.benchmarks\u002F4.getvalidationerrors-formats",{"title":46,"path":113,"stem":114},"\u002Fbenchmarks\u002Fserialization","7.benchmarks\u002F5.serialization",{"title":116,"path":117,"stem":118},"Serialization Formats","\u002Fbenchmarks\u002Fserialization-formats","7.benchmarks\u002F6.serialization-formats",{"title":120,"path":121,"stem":122},"Compile Time","\u002Fbenchmarks\u002Fcompiletime","7.benchmarks\u002F7.compiletime",{"title":124,"path":125,"stem":126},"Correctness","\u002Fbenchmarks\u002Fcorrectness","7.benchmarks\u002F8.correctness",{"title":128,"path":129,"stem":130,"icon":131},"Diagnostics","\u002Fdiagnostics","8.diagnostics","i-lucide-triangle-alert",{"id":133,"title":66,"body":134,"description":1060,"extension":1061,"links":1062,"meta":1063,"navigation":761,"path":67,"seo":1064,"stem":68,"__hash__":1065},"docs\u002F2.guide\u002F9.linting.md",{"type":135,"value":136,"toc":1054},"minimark",[137,146,151,592,596,602,829,833,856,866,869,989,993,996,1040,1050],[138,139,140,141,145],"p",{},"RunTypes ships a lint plugin inside the ",[142,143,144],"code",{},"@ts-runtypes\u002Fdevtools"," package. It works with OXlint (the primary target) and with ESLint v9 flat config. The same compiler that powers your build produces the findings, so what you see in the editor is exactly what the build would say.",[147,148,150],"h2",{"id":149},"rules","Rules",[152,153,154,170],"table",{},[155,156,157],"thead",{},[158,159,160,164,167],"tr",{},[161,162,163],"th",{},"Rule",[161,165,166],{},"Default",[161,168,169],{},"What it reports",[171,172,173,197,211,226,248,275,289,309,323,341,355,373,387,405,423,437,451,469,483,506,531,550,564,578],"tbody",{},[158,174,175,181,186],{},[176,177,178],"td",{},[142,179,180],{},"runtypes\u002Fbroken-tsconfig",[176,182,183],{},[142,184,185],{},"error",[176,187,188,189,192,193,196],{},"The tsconfig the linter was pointed at (your ",[142,190,191],{},"tsconfig"," setting, or the default ",[142,194,195],{},"tsconfig.json",") is missing or does not parse, so type-aware linting cannot run. The linter reads the same config as your build, so fix the config or the configured path.",[158,198,199,204,208],{},[176,200,201],{},[142,202,203],{},"runtypes\u002Finvalid-marker",[176,205,206],{},[142,207,185],{},[176,209,210],{},"A marker call the build cannot turn into a function: a generic type argument that is never filled in with a concrete type, an options argument that is not a plain literal, an import that failed to resolve, or a Temporal type without the Temporal lib enabled.",[158,212,213,218,223],{},[176,214,215],{},[142,216,217],{},"runtypes\u002Fredundant-marker",[176,219,220],{},[142,221,222],{},"warn",[176,224,225],{},"A marker that works but probably does not do what you meant, such as calling a function inside a marker just to read its return type (the call itself is wasted), or an option that has no effect on this particular type.",[158,227,228,233,237],{},[176,229,230],{},[142,231,232],{},"runtypes\u002Fpure-functions",[176,234,235],{},[142,236,185],{},[176,238,239,240,243,244,247],{},"A registered pure function that breaks the purity rules (uses ",[142,241,242],{},"this",", ",[142,245,246],{},"await",", or variables from outside its own body), is registered twice with different bodies, or is referenced but never registered. These functions are compiled at build time, so they must be fully self contained.",[158,249,250,255,259],{},[176,251,252],{},[142,253,254],{},"runtypes\u002Fvalidate-non-serializable",[176,256,257],{},[142,258,185],{},[176,260,261,262,266,267,270,271,274],{},"A type that can never be validated. Validators check the ",[263,264,265],"a",{"href":51},"data-only projection"," of your type (the JSON-shaped data, the same contract the encoders follow), so a type like ",[142,268,269],{},"symbol"," or ",[142,272,273],{},"Map"," at a root position has nothing to check, and the generated function will always fail when called.",[158,276,277,282,286],{},[176,278,279],{},[142,280,281],{},"runtypes\u002Fvalidate-skipped-member",[176,283,284],{},[142,285,222],{},[176,287,288],{},"A property the validator silently skips. Functions, methods, statics, and symbols are not data and never survive JSON, so the validator checks the rest of the object and ignores them.",[158,290,291,296,300],{},[176,292,293],{},[142,294,295],{},"runtypes\u002Fjson-non-serializable",[176,297,298],{},[142,299,185],{},[176,301,302,303,305,306,308],{},"A type that can never be encoded to or decoded from JSON, such as a function, a ",[142,304,269],{},", or a ",[142,307,273],{}," at a root position. The generated function will always fail when called, so the build stops instead.",[158,310,311,316,320],{},[176,312,313],{},[142,314,315],{},"runtypes\u002Fjson-skipped-member",[176,317,318],{},[142,319,222],{},[176,321,322],{},"A property the JSON encoder and decoder silently leave out, such as a function or symbol member. The rest of the object round-trips normally.",[158,324,325,330,334],{},[176,326,327],{},[142,328,329],{},"runtypes\u002Fbinary-non-serializable",[176,331,332],{},[142,333,185],{},[176,335,336,337,305,339,308],{},"A type that can never be serialized to or from binary, such as a function, a ",[142,338,269],{},[142,340,273],{},[158,342,343,348,352],{},[176,344,345],{},[142,346,347],{},"runtypes\u002Fbinary-skipped-member",[176,349,350],{},[142,351,222],{},[176,353,354],{},"A property the binary encoder and decoder silently leave out, such as a function or symbol member. The rest of the object round-trips normally.",[158,356,357,362,366],{},[176,358,359],{},[142,360,361],{},"runtypes\u002Fclone-unsupported-type",[176,363,364],{},[142,365,185],{},[176,367,368,369,372],{},"A type ",[142,370,371],{},"cloneExactShape"," cannot clone safely: a union of objects (the clone cannot tell which shape to rebuild) or a callable root. A clone that guessed could keep unknown keys, so the build stops instead.",[158,374,375,380,384],{},[176,376,377],{},[142,378,379],{},"runtypes\u002Fclone-shared-reference",[176,381,382],{},[142,383,222],{},[176,385,386],{},"A property the clone cannot rebuild (a function, symbol, or non-serializable built-in), so it stays pointing at the same value as the original. Changes through it are visible on both copies.",[158,388,389,394,398],{},[176,390,391],{},[142,392,393],{},"runtypes\u002Funknown-keys",[176,395,396],{},[142,397,222],{},[176,399,400,401,404],{},"A property the unknown-keys helpers (",[142,402,403],{},"hasUnknownKeys"," and friends) silently skip, such as a function member. The check covers the rest of the object.",[158,406,407,412,416],{},[176,408,409],{},[142,410,411],{},"runtypes\u002Fformat",[176,413,414],{},[142,415,185],{},[176,417,418,419,422],{},"A custom string format with a broken definition: a mock sample that does not match its own pattern, a sample that violates a sibling rule like maxLength, or invalid params. Also fires when the linter re-checks samples the build could not verify (see ",[263,420,421],{"href":24},"allowUncheckedPatterns",").",[158,424,425,430,434],{},[176,426,427],{},[142,428,429],{},"runtypes\u002Finvalid-override",[176,431,432],{},[142,433,185],{},[176,435,436],{},"An override that cannot work: the same type and function registered twice, or an override pointing at a generated module that does not exist.",[158,438,439,444,448],{},[176,440,441],{},[142,442,443],{},"runtypes\u002Foverride-side-effect",[176,445,446],{},[142,447,222],{},[176,449,450],{},"A validate override on a type whose JSON and binary decoders also run validation internally. The override changes their behaviour too, which may be intended, but is worth knowing.",[158,452,453,458,462],{},[176,454,455],{},[142,456,457],{},"runtypes\u002Fnon-enumerable",[176,459,460],{},[142,461,185],{},[176,463,464,465,468],{},"A property marked ",[142,466,467],{},"@nonEnumerable"," that is not optional. A non-enumerable property can be absent from a plain object, so the type must allow undefined.",[158,470,471,476,480],{},[176,472,473],{},[142,474,475],{},"runtypes\u002Fclass-serializer",[176,477,478],{},[142,479,222],{},[176,481,482],{},"A class that will be serialized structurally (declared properties only) because no custom serializer is registered. The data survives, but the decoded value is a plain object, not a class instance. Register one to get real instances back.",[158,484,485,490,494],{},[176,486,487],{},[142,488,489],{},"runtypes\u002Fno-enrichment-todo",[176,491,492],{},[142,493,185],{},[176,495,496,497,500,501,270,503,505],{},"An unfilled ",[142,498,499],{},"@todo"," placeholder the generator scaffolded in a ",[142,502,80],{},[142,504,84],{}," file. Fill in the value, then delete the tag line.",[158,507,508,513,517],{},[176,509,510],{},[142,511,512],{},"runtypes\u002Fno-orphan-carcass",[176,514,515],{},[142,516,185],{},[176,518,519,520,270,523,526,527,530],{},"A commented-out ",[142,521,522],{},"@rtOrphan",[142,524,525],{},"@rtOrphanChild"," block the generator left behind when a type or field disappeared. Restore the type, or run ",[142,528,529],{},"ts-runtypes enrich --prune"," to remove it.",[158,532,533,538,542],{},[176,534,535],{},[142,536,537],{},"runtypes\u002Fenrichment-field",[176,539,540],{},[142,541,185],{},[176,543,544,545,270,547,549],{},"An entry in a ",[142,546,80],{},[142,548,84],{}," map that no longer matches the type: a field the type does not declare, or a name colliding with the reserved rt$ prefix.",[158,551,552,557,561],{},[176,553,554],{},[142,555,556],{},"runtypes\u002Fenrichment-message",[176,558,559],{},[142,560,222],{},[176,562,563],{},"A friendly error message template with a problem: an error key that is not a constraint of the field, an unknown placeholder, or a plural form that is not a valid category.",[158,565,566,571,575],{},[176,567,568],{},[142,569,570],{},"runtypes\u002Fenrichment-broken-source",[176,572,573],{},[142,574,185],{},[176,576,577],{},"A generated file whose source is gone: the file it mirrors no longer exists, or no longer declares the imported type. Re-run the generator, or delete the mirror.",[158,579,580,585,589],{},[176,581,582],{},[142,583,584],{},"runtypes\u002Fenrichment-misplaced-file",[176,586,587],{},[142,588,222],{},[176,590,591],{},"A generated file that is no longer where the generator would write it, usually after its source file moved. Re-run the generator to relocate it.",[147,593,595],{"id":594},"setup","Setup",[138,597,598,599,601],{},"There is no separate package to install. Extend the recommended setup that ships inside ",[142,600,144],{}," and every rule is enabled at the defaults above. To change a rule's level, set it in your own config (your entries win over the preset).",[603,604,605,724],"code-group",{},[606,607,613],"pre",{"className":608,"code":609,"filename":610,"language":611,"meta":612,"style":612},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"$schema\": \".\u002Fnode_modules\u002Foxlint\u002Fconfiguration_schema.json\",\n  \"extends\": [\".\u002Fnode_modules\u002F@ts-runtypes\u002Fdevtools\u002Foxlint-recommended.json\"],\n  \"rules\": {\n    \"runtypes\u002Fvalidate-skipped-member\": \"off\"\n  }\n}\n",".oxlintrc.json","json","",[142,614,615,624,652,677,691,712,718],{"__ignoreMap":612},[616,617,620],"span",{"class":618,"line":619},"line",1,[616,621,623],{"class":622},"sMK4o","{\n",[616,625,627,630,634,637,640,643,647,649],{"class":618,"line":626},2,[616,628,629],{"class":622},"  \"",[616,631,633],{"class":632},"spNyl","$schema",[616,635,636],{"class":622},"\"",[616,638,639],{"class":622},":",[616,641,642],{"class":622}," \"",[616,644,646],{"class":645},"sfazB",".\u002Fnode_modules\u002Foxlint\u002Fconfiguration_schema.json",[616,648,636],{"class":622},[616,650,651],{"class":622},",\n",[616,653,655,657,660,662,664,667,669,672,674],{"class":618,"line":654},3,[616,656,629],{"class":622},[616,658,659],{"class":632},"extends",[616,661,636],{"class":622},[616,663,639],{"class":622},[616,665,666],{"class":622}," [",[616,668,636],{"class":622},[616,670,671],{"class":645},".\u002Fnode_modules\u002F@ts-runtypes\u002Fdevtools\u002Foxlint-recommended.json",[616,673,636],{"class":622},[616,675,676],{"class":622},"],\n",[616,678,680,682,684,686,688],{"class":618,"line":679},4,[616,681,629],{"class":622},[616,683,149],{"class":632},[616,685,636],{"class":622},[616,687,639],{"class":622},[616,689,690],{"class":622}," {\n",[616,692,694,697,700,702,704,706,709],{"class":618,"line":693},5,[616,695,696],{"class":622},"    \"",[616,698,281],{"class":699},"sBMFI",[616,701,636],{"class":622},[616,703,639],{"class":622},[616,705,642],{"class":622},[616,707,708],{"class":645},"off",[616,710,711],{"class":622},"\"\n",[616,713,715],{"class":618,"line":714},6,[616,716,717],{"class":622},"  }\n",[616,719,721],{"class":618,"line":720},7,[616,722,723],{"class":622},"}\n",[606,725,730],{"className":726,"code":727,"filename":728,"language":729,"meta":612,"style":612},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import runtypes from '@ts-runtypes\u002Fdevtools\u002Feslint';\n\nexport default [\n  runtypes.configs.recommended,\n  {rules: {'runtypes\u002Fvalidate-skipped-member': 'off'}},\n];\n","eslint.config.js","js",[142,731,732,757,763,774,792,822],{"__ignoreMap":612},[616,733,734,738,742,745,748,751,754],{"class":618,"line":619},[616,735,737],{"class":736},"s7zQu","import",[616,739,741],{"class":740},"sTEyZ"," runtypes ",[616,743,744],{"class":736},"from",[616,746,747],{"class":622}," '",[616,749,750],{"class":645},"@ts-runtypes\u002Fdevtools\u002Feslint",[616,752,753],{"class":622},"'",[616,755,756],{"class":622},";\n",[616,758,759],{"class":618,"line":626},[616,760,762],{"emptyLinePlaceholder":761},true,"\n",[616,764,765,768,771],{"class":618,"line":654},[616,766,767],{"class":736},"export",[616,769,770],{"class":736}," default",[616,772,773],{"class":740}," [\n",[616,775,776,779,782,785,787,790],{"class":618,"line":679},[616,777,778],{"class":740},"  runtypes",[616,780,781],{"class":622},".",[616,783,784],{"class":740},"configs",[616,786,781],{"class":622},[616,788,789],{"class":740},"recommended",[616,791,651],{"class":622},[616,793,794,797,800,802,805,807,809,811,813,815,817,819],{"class":618,"line":693},[616,795,796],{"class":622},"  {",[616,798,149],{"class":799},"swJcz",[616,801,639],{"class":622},[616,803,804],{"class":622}," {",[616,806,753],{"class":622},[616,808,281],{"class":799},[616,810,753],{"class":622},[616,812,639],{"class":622},[616,814,747],{"class":622},[616,816,708],{"class":645},[616,818,753],{"class":622},[616,820,821],{"class":622},"}},\n",[616,823,824,827],{"class":618,"line":714},[616,825,826],{"class":740},"]",[616,828,756],{"class":622},[147,830,832],{"id":831},"your-tsconfig","Your tsconfig",[138,834,835,836,838,839,243,842,243,845,848,849,851,852,855],{},"The plugin reads your full project ",[142,837,195],{},", so the linter checks types exactly the way your build does. Compiler options like ",[142,840,841],{},"lib",[142,843,844],{},"target",[142,846,847],{},"strict",", module resolution, custom conditions and path mappings all behave the same in both places. A Temporal type is only flagged when your ",[142,850,841],{}," really does not load Temporal, and a monorepo that resolves workspace packages from source (behind a ",[142,853,854],{},"source"," export condition) resolves them at lint time too, instead of reporting false errors on markers over cross package types.",[138,857,858,859,861,862,865],{},"A config that is missing or does not parse is reported as a ",[142,860,180],{}," error instead of being silently ignored, the same way ",[142,863,864],{},"tsc"," would refuse to run. Fix the config and the next lint pass picks it up automatically.",[138,867,868],{},"By default the config is found the same way tsc finds it, searching upward from the directory the linter runs in. Point it at a different config with a setting:",[603,870,871,927],{},[606,872,874],{"className":608,"code":873,"filename":610,"language":611,"meta":612,"style":612},"{\n  \"settings\": {\"runtypes\": {\"tsconfig\": \"tsconfig.lint.json\"}}\n}\n",[142,875,876,880,923],{"__ignoreMap":612},[616,877,878],{"class":618,"line":619},[616,879,623],{"class":622},[616,881,882,884,887,889,891,893,895,898,900,902,904,906,909,911,913,915,918,920],{"class":618,"line":626},[616,883,629],{"class":622},[616,885,886],{"class":632},"settings",[616,888,636],{"class":622},[616,890,639],{"class":622},[616,892,804],{"class":622},[616,894,636],{"class":622},[616,896,897],{"class":699},"runtypes",[616,899,636],{"class":622},[616,901,639],{"class":622},[616,903,804],{"class":622},[616,905,636],{"class":622},[616,907,191],{"class":908},"sbssI",[616,910,636],{"class":622},[616,912,639],{"class":622},[616,914,642],{"class":622},[616,916,917],{"class":645},"tsconfig.lint.json",[616,919,636],{"class":622},[616,921,922],{"class":622},"}}\n",[616,924,925],{"class":618,"line":654},[616,926,723],{"class":622},[606,928,930],{"className":726,"code":929,"filename":728,"language":729,"meta":612,"style":612},"export default [\n  runtypes.configs.recommended,\n  {settings: {runtypes: {tsconfig: 'tsconfig.lint.json'}}},\n];\n",[142,931,932,940,954,983],{"__ignoreMap":612},[616,933,934,936,938],{"class":618,"line":619},[616,935,767],{"class":736},[616,937,770],{"class":736},[616,939,773],{"class":740},[616,941,942,944,946,948,950,952],{"class":618,"line":626},[616,943,778],{"class":740},[616,945,781],{"class":622},[616,947,784],{"class":740},[616,949,781],{"class":622},[616,951,789],{"class":740},[616,953,651],{"class":622},[616,955,956,958,960,962,964,966,968,970,972,974,976,978,980],{"class":618,"line":654},[616,957,796],{"class":622},[616,959,886],{"class":799},[616,961,639],{"class":622},[616,963,804],{"class":622},[616,965,897],{"class":799},[616,967,639],{"class":622},[616,969,804],{"class":622},[616,971,191],{"class":799},[616,973,639],{"class":622},[616,975,747],{"class":622},[616,977,917],{"class":645},[616,979,753],{"class":622},[616,981,982],{"class":622},"}}},\n",[616,984,985,987],{"class":618,"line":679},[616,986,826],{"class":740},[616,988,756],{"class":622},[147,990,992],{"id":991},"checking-without-a-linter","Checking without a linter",[138,994,995],{},"The same findings are available straight from the CLI, which is handy for CI jobs or scripts that do not run node linting:",[606,997,1001],{"className":998,"code":999,"language":1000,"meta":612,"style":612},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ts-runtypes compile --no-emit\nts-runtypes enrich src\u002F__runtypes\u002Fenriched\u002Ffriendly\u002Fuser.ts --no-emit --json\nts-runtypes enrich --no-emit --json\n","bash",[142,1002,1003,1014,1030],{"__ignoreMap":612},[616,1004,1005,1008,1011],{"class":618,"line":619},[616,1006,1007],{"class":699},"ts-runtypes",[616,1009,1010],{"class":645}," compile",[616,1012,1013],{"class":645}," --no-emit\n",[616,1015,1016,1018,1021,1024,1027],{"class":618,"line":626},[616,1017,1007],{"class":699},[616,1019,1020],{"class":645}," enrich",[616,1022,1023],{"class":645}," src\u002F__runtypes\u002Fenriched\u002Ffriendly\u002Fuser.ts",[616,1025,1026],{"class":645}," --no-emit",[616,1028,1029],{"class":645}," --json\n",[616,1031,1032,1034,1036,1038],{"class":618,"line":654},[616,1033,1007],{"class":699},[616,1035,1020],{"class":645},[616,1037,1026],{"class":645},[616,1039,1029],{"class":645},[138,1041,1042,1045,1046,1049],{},[142,1043,1044],{},"compile --no-emit"," reports the build's RunType diagnostics (marker and serialization problems) while writing nothing. ",[142,1047,1048],{},"enrich --no-emit"," with a single file reports the tag hygiene, content validity, and drift findings for that file (exit 1 on errors), and with a directory, or no path, it walks the whole mirror directory for drift.",[1051,1052,1053],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":612,"searchDepth":626,"depth":626,"links":1055},[1056,1057,1058,1059],{"id":149,"depth":626,"text":150},{"id":594,"depth":626,"text":595},{"id":831,"depth":626,"text":832},{"id":991,"depth":626,"text":992},"See RunTypes problems in your editor and block dirty enrichment files at commit time.","md",null,{"toc":761},{"title":66,"description":1060},"aDuKQHa1YfqIlvPxuOdoXWSiuAS2XuZnWDgXvrq-p5o",[1067,1069],{"title":62,"path":63,"stem":64,"description":1068,"children":-1},"Extend RunTypes with pure inline helpers and your own formats and mock generators.",{"title":77,"path":72,"stem":78,"description":1070,"children":-1},"How AI agents and the compiler work together to enrich your types.",1785369665219]