[{"data":1,"prerenderedAt":2174},["ShallowReactive",2],{"navigation_docs":3,"-runtypes-introduction-configuration":399},[4,162,346],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":24},"RPC","icon-park-outline:lightning","\u002Frpc","01.rpc",[10,25,63,77,102,136],{"title":11,"icon":12,"redirect":7,"path":13,"stem":14,"children":15,"page":24},"Introduction","icon-park-outline:home","\u002Frpc\u002Fintroduction","01.rpc\u002F01.introduction",[16,20],{"title":17,"path":18,"stem":19},"Quick Start","\u002Frpc\u002Fintroduction\u002Fquick-start","01.rpc\u002F01.introduction\u002F02.quick-start",{"title":21,"path":22,"stem":23},"Manual Install","\u002Frpc\u002Fintroduction\u002Fmanual-install","01.rpc\u002F01.introduction\u002F03.manual-install",false,{"title":26,"icon":27,"path":28,"stem":29,"children":30,"page":24},"Server","icon-park-outline:server","\u002Frpc\u002Fserver","01.rpc\u002F02.server",[31,35,39,43,47,51,55,59],{"title":32,"path":33,"stem":34},"Routes","\u002Frpc\u002Fserver\u002Froutes","01.rpc\u002F02.server\u002F01.routes",{"title":36,"path":37,"stem":38},"Middleware","\u002Frpc\u002Fserver\u002Fmiddleware","01.rpc\u002F02.server\u002F02.middleware",{"title":40,"path":41,"stem":42},"Call Context","\u002Frpc\u002Fserver\u002Fcall-context","01.rpc\u002F02.server\u002F03.call-context",{"title":44,"path":45,"stem":46},"Headers","\u002Frpc\u002Fserver\u002Fheaders","01.rpc\u002F02.server\u002F04.headers",{"title":48,"path":49,"stem":50},"Error Handling","\u002Frpc\u002Fserver\u002Ferror-handling","01.rpc\u002F02.server\u002F05.error-handling",{"title":52,"path":53,"stem":54},"Validation","\u002Frpc\u002Fserver\u002Fvalidation","01.rpc\u002F02.server\u002F06.validation",{"title":56,"path":57,"stem":58},"JSON Round Trip","\u002Frpc\u002Fserver\u002Fjson-round-trip","01.rpc\u002F02.server\u002F07.json-round-trip",{"title":60,"path":61,"stem":62},"Drizzle Tables","\u002Frpc\u002Fserver\u002Fdrizzle-tables","01.rpc\u002F02.server\u002F08.drizzle-tables",{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":24},"Middlewares","icon-park-outline:link-one","\u002Frpc\u002Fmiddlewares","01.rpc\u002F03.middlewares",[69,73],{"title":70,"path":71,"stem":72},"fetchMetadata","\u002Frpc\u002Fmiddlewares\u002Ffetch-metadata","01.rpc\u002F03.middlewares\u002F01.fetch-metadata",{"title":74,"path":75,"stem":76},"syncRoutes","\u002Frpc\u002Fmiddlewares\u002Fsync-routes","01.rpc\u002F03.middlewares\u002F02.sync-routes",{"title":78,"icon":79,"path":80,"stem":81,"children":82,"page":24},"Client","icon-park-outline:computer","\u002Frpc\u002Fclient","01.rpc\u002F04.client",[83,87,91,94,98],{"title":84,"path":85,"stem":86},"Client Overview","\u002Frpc\u002Fclient\u002Fclient-overview","01.rpc\u002F04.client\u002F00.client-overview",{"title":88,"path":89,"stem":90},"Client Middleware","\u002Frpc\u002Fclient\u002Fclient-middleware","01.rpc\u002F04.client\u002F01.client-middleware",{"title":48,"path":92,"stem":93},"\u002Frpc\u002Fclient\u002Ferror-handling","01.rpc\u002F04.client\u002F02.error-handling",{"title":95,"path":96,"stem":97},"Batch Requests","\u002Frpc\u002Fclient\u002Fbatch","01.rpc\u002F04.client\u002F03.batch",{"title":99,"path":100,"stem":101},"Cancellation & Timeouts","\u002Frpc\u002Fclient\u002Fcancellation-timeouts","01.rpc\u002F04.client\u002F04.cancellation-timeouts",{"title":103,"redirect":104,"icon":105,"path":106,"stem":107,"children":108,"page":24},"Platforms","\u002Frpc\u002Fplatforms\u002Fnode-js","icon-park-outline:play","\u002Frpc\u002Fplatforms","01.rpc\u002F06.platforms",[109,112,116,120,124,128,132],{"title":110,"path":104,"stem":111},"Node.js","01.rpc\u002F06.platforms\u002F01.node-js",{"title":113,"path":114,"stem":115},"Bun","\u002Frpc\u002Fplatforms\u002Fbun","01.rpc\u002F06.platforms\u002F02.bun",{"title":117,"path":118,"stem":119},"AWS Lambda","\u002Frpc\u002Fplatforms\u002Faws-lambda","01.rpc\u002F06.platforms\u002F03.aws-lambda",{"title":121,"path":122,"stem":123},"Google Cloud Functions","\u002Frpc\u002Fplatforms\u002Fgoogle-cloud-functions","01.rpc\u002F06.platforms\u002F04.google-cloud-functions",{"title":125,"path":126,"stem":127},"Cloudflare Workers","\u002Frpc\u002Fplatforms\u002Fcloudflare","01.rpc\u002F06.platforms\u002F05.cloudflare",{"title":129,"path":130,"stem":131},"Vercel","\u002Frpc\u002Fplatforms\u002Fvercel","01.rpc\u002F06.platforms\u002F06.vercel",{"title":133,"path":134,"stem":135},"uWebSockets.js","\u002Frpc\u002Fplatforms\u002Fuwebsockets","01.rpc\u002F06.platforms\u002F07.uwebsockets",{"title":137,"icon":138,"path":139,"stem":140,"children":141,"page":24},"Devtools","icon-park-outline:tool","\u002Frpc\u002Fdevtools","01.rpc\u002F07.devtools",[142,146,150,154,158],{"title":143,"path":144,"stem":145},"Linter","\u002Frpc\u002Fdevtools\u002Flinter","01.rpc\u002F07.devtools\u002F01.linter",{"title":147,"path":148,"stem":149},"Vite","\u002Frpc\u002Fdevtools\u002Fvite","01.rpc\u002F07.devtools\u002F02.vite",{"title":151,"path":152,"stem":153},"Next.js","\u002Frpc\u002Fdevtools\u002Fnextjs","01.rpc\u002F07.devtools\u002F03.nextjs",{"title":155,"path":156,"stem":157},"CLI","\u002Frpc\u002Fdevtools\u002Fcli","01.rpc\u002F07.devtools\u002F04.cli",{"title":159,"path":160,"stem":161},"API Types","\u002Frpc\u002Fdevtools\u002Fapi-types","01.rpc\u002F07.devtools\u002F05.api-types",{"title":163,"icon":164,"path":165,"stem":166,"children":167,"page":24},"RunTypes","i-lucide-braces","\u002Fruntypes","02.runtypes",[168,184,224,254,268,290,332],{"title":11,"icon":169,"redirect":165,"path":170,"stem":171,"children":172,"page":24},"i-lucide-rocket","\u002Fruntypes\u002Fintroduction","02.runtypes\u002F01.introduction",[173,177,180],{"title":174,"path":175,"stem":176},"Built on typescript-go","\u002Fruntypes\u002Fintroduction\u002Fbuilt-on-typescript-go","02.runtypes\u002F01.introduction\u002F02.built-on-typescript-go",{"title":17,"path":178,"stem":179},"\u002Fruntypes\u002Fintroduction\u002Fquick-start","02.runtypes\u002F01.introduction\u002F03.quick-start",{"title":181,"path":182,"stem":183},"Configuration","\u002Fruntypes\u002Fintroduction\u002Fconfiguration","02.runtypes\u002F01.introduction\u002F04.configuration",{"title":185,"icon":186,"redirect":187,"path":188,"stem":189,"children":190,"page":24},"Guide","i-lucide-book-open","\u002Fruntypes\u002Fguide\u002Ftype-builders","\u002Fruntypes\u002Fguide","02.runtypes\u002F02.guide",[191,194,198,201,204,208,212,216,220],{"title":192,"path":187,"stem":193},"Types vs Type Builders","02.runtypes\u002F02.guide\u002F01.type-builders",{"title":195,"path":196,"stem":197},"Reflection","\u002Fruntypes\u002Fguide\u002Freflection","02.runtypes\u002F02.guide\u002F02.reflection",{"title":52,"path":199,"stem":200},"\u002Fruntypes\u002Fguide\u002Fvalidation","02.runtypes\u002F02.guide\u002F03.validation",{"title":56,"path":202,"stem":203},"\u002Fruntypes\u002Fguide\u002Fjson-round-trip","02.runtypes\u002F02.guide\u002F04.json-round-trip",{"title":205,"path":206,"stem":207},"Data Mocking","\u002Fruntypes\u002Fguide\u002Fmocking","02.runtypes\u002F02.guide\u002F07.mocking",{"title":209,"path":210,"stem":211},"JSON Schemas","\u002Fruntypes\u002Fguide\u002Fjson-schemas","02.runtypes\u002F02.guide\u002F08.json-schemas",{"title":213,"path":214,"stem":215},"Pure Functions","\u002Fruntypes\u002Fguide\u002Fpure-functions","02.runtypes\u002F02.guide\u002F09.pure-functions",{"title":217,"path":218,"stem":219},"Compiler Markers","\u002Fruntypes\u002Fguide\u002Fcompiler-markers","02.runtypes\u002F02.guide\u002F10.compiler-markers",{"title":221,"path":222,"stem":223},"All Compiled Functions","\u002Fruntypes\u002Fguide\u002Fall-compiled-functions","02.runtypes\u002F02.guide\u002F11.all-compiled-functions",{"title":225,"icon":226,"redirect":227,"path":228,"stem":229,"children":230,"page":24},"Type Formats","i-lucide-shapes","\u002Fruntypes\u002Ftype-formats\u002Foverview","\u002Fruntypes\u002Ftype-formats","02.runtypes\u002F03.type-formats",[231,234,238,242,246,250],{"title":232,"path":227,"stem":233},"Overview","02.runtypes\u002F03.type-formats\u002F01.overview",{"title":235,"path":236,"stem":237},"String Formats","\u002Fruntypes\u002Ftype-formats\u002Fstring","02.runtypes\u002F03.type-formats\u002F02.string",{"title":239,"path":240,"stem":241},"Number Formats","\u002Fruntypes\u002Ftype-formats\u002Fnumber","02.runtypes\u002F03.type-formats\u002F03.number",{"title":243,"path":244,"stem":245},"BigInt Formats","\u002Fruntypes\u002Ftype-formats\u002Fbigint","02.runtypes\u002F03.type-formats\u002F04.bigint",{"title":247,"path":248,"stem":249},"Date and Time Formats","\u002Fruntypes\u002Ftype-formats\u002Fdate-time","02.runtypes\u002F03.type-formats\u002F05.date-time",{"title":251,"path":252,"stem":253},"Collection Formats","\u002Fruntypes\u002Ftype-formats\u002Fcollections","02.runtypes\u002F03.type-formats\u002F06.collections",{"title":255,"icon":256,"redirect":257,"path":258,"stem":259,"children":260,"page":24},"Tooling","i-lucide-wrench","\u002Fruntypes\u002Ftooling\u002Flinting","\u002Fruntypes\u002Ftooling","02.runtypes\u002F04.tooling",[261,264],{"title":262,"path":257,"stem":263},"Linting","02.runtypes\u002F04.tooling\u002F01.linting",{"title":265,"path":266,"stem":267},"Source Conversion","\u002Fruntypes\u002Ftooling\u002Fsource-conversion","02.runtypes\u002F04.tooling\u002F02.source-conversion",{"title":269,"icon":270,"redirect":271,"path":272,"stem":273,"children":274,"page":24},"AI Integration","i-lucide-sparkles","\u002Fruntypes\u002Fai-integration\u002Fworkflow-and-commands","\u002Fruntypes\u002Fai-integration","02.runtypes\u002F05.ai-integration",[275,278,282,286],{"title":276,"path":271,"stem":277},"AI Workflow","02.runtypes\u002F05.ai-integration\u002F01.workflow-and-commands",{"title":279,"path":280,"stem":281},"FriendlyText","\u002Fruntypes\u002Fai-integration\u002Ffriendly-text","02.runtypes\u002F05.ai-integration\u002F02.friendly-text",{"title":283,"path":284,"stem":285},"MockData","\u002Fruntypes\u002Fai-integration\u002Fmock-data","02.runtypes\u002F05.ai-integration\u002F03.mock-data",{"title":287,"path":288,"stem":289},"Translations (i18n)","\u002Fruntypes\u002Fai-integration\u002Fi18n","02.runtypes\u002F05.ai-integration\u002F04.i18n",{"title":291,"icon":292,"redirect":293,"path":294,"stem":295,"children":296,"page":24},"Drizzle ORM","i-lineicons-drizzle","\u002Fruntypes\u002Fdrizzle-orm\u002Fdrizzle-overview","\u002Fruntypes\u002Fdrizzle-orm","02.runtypes\u002F06.drizzle-orm",[297,300,304,308,312,316,320,324,328],{"title":298,"path":293,"stem":299},"Drizzle Overview","02.runtypes\u002F06.drizzle-orm\u002F00.drizzle-overview",{"title":301,"path":302,"stem":303},"Column Formats","\u002Fruntypes\u002Fdrizzle-orm\u002Fcolumn-formats","02.runtypes\u002F06.drizzle-orm\u002F01.column-formats",{"title":305,"path":306,"stem":307},"Views","\u002Fruntypes\u002Fdrizzle-orm\u002Fviews","02.runtypes\u002F06.drizzle-orm\u002F02.views",{"title":309,"path":310,"stem":311},"Indexes and Constraints","\u002Fruntypes\u002Fdrizzle-orm\u002Fconstraints","02.runtypes\u002F06.drizzle-orm\u002F03.constraints",{"title":313,"path":314,"stem":315},"Row Level Security","\u002Fruntypes\u002Fdrizzle-orm\u002Frow-level-security","02.runtypes\u002F06.drizzle-orm\u002F04.row-level-security",{"title":317,"path":318,"stem":319},"Relations","\u002Fruntypes\u002Fdrizzle-orm\u002Frelations","02.runtypes\u002F06.drizzle-orm\u002F05.relations",{"title":321,"path":322,"stem":323},"The Schema File","\u002Fruntypes\u002Fdrizzle-orm\u002Fschema-file","02.runtypes\u002F06.drizzle-orm\u002F06.schema-file",{"title":325,"path":326,"stem":327},"Migrate an Existing Schema","\u002Fruntypes\u002Fdrizzle-orm\u002Fmigrate-an-existing-schema","02.runtypes\u002F06.drizzle-orm\u002F07.migrate-an-existing-schema",{"title":329,"path":330,"stem":331},"Cloudflare D1 and Durable Objects","\u002Fruntypes\u002Fdrizzle-orm\u002Fcloudflare-storage","02.runtypes\u002F06.drizzle-orm\u002F08.cloudflare-storage",{"title":333,"icon":334,"redirect":335,"path":336,"stem":337,"children":338,"page":24},"Diagnostics","i-lucide-triangle-alert","\u002Fruntypes\u002Fdiagnostics\u002Ferror-levels","\u002Fruntypes\u002Fdiagnostics","02.runtypes\u002F08.diagnostics",[339,342],{"title":340,"path":335,"stem":341},"Error Levels","02.runtypes\u002F08.diagnostics\u002F01.error-levels",{"title":343,"path":344,"stem":345},"All Diagnostics","\u002Fruntypes\u002Fdiagnostics\u002Fall-diagnostics","02.runtypes\u002F08.diagnostics\u002F02.all-diagnostics",{"title":347,"icon":348,"path":349,"stem":350,"children":351,"page":24},"Benchmarks","i-lucide-gauge","\u002Fbenchmarks","03.benchmarks",[352,372],{"title":5,"icon":6,"redirect":353,"path":354,"stem":355,"children":356,"page":24},"\u002Fbenchmarks\u002Frpc\u002Fhello-world","\u002Fbenchmarks\u002Frpc","03.benchmarks\u002F02.rpc",[357,360,364,368],{"title":358,"path":353,"stem":359},"Hello World","03.benchmarks\u002F02.rpc\u002F01.hello-world",{"title":361,"path":362,"stem":363},"Light Validation","\u002Fbenchmarks\u002Frpc\u002Flight-validation","03.benchmarks\u002F02.rpc\u002F02.light-validation",{"title":365,"path":366,"stem":367},"Heavy Validation","\u002Fbenchmarks\u002Frpc\u002Fheavy-validation","03.benchmarks\u002F02.rpc\u002F03.heavy-validation",{"title":369,"path":370,"stem":371},"Payload Sizes","\u002Fbenchmarks\u002Frpc\u002Fpayload-sizes","03.benchmarks\u002F02.rpc\u002F04.payload-sizes",{"title":163,"icon":164,"redirect":373,"path":374,"stem":375,"children":376,"page":24},"\u002Fbenchmarks\u002Fruntypes\u002Fis-valid","\u002Fbenchmarks\u002Fruntypes","03.benchmarks\u002F03.runtypes",[377,380,384,388,392,395],{"title":378,"path":373,"stem":379},"Is Valid","03.benchmarks\u002F03.runtypes\u002F01.is-valid",{"title":381,"path":382,"stem":383},"Is Valid Formats","\u002Fbenchmarks\u002Fruntypes\u002Fis-valid-formats","03.benchmarks\u002F03.runtypes\u002F02.is-valid-formats",{"title":385,"path":386,"stem":387},"Get Errors","\u002Fbenchmarks\u002Fruntypes\u002Fget-errors","03.benchmarks\u002F03.runtypes\u002F03.get-errors",{"title":389,"path":390,"stem":391},"Get Errors Formats","\u002Fbenchmarks\u002Fruntypes\u002Fget-errors-formats","03.benchmarks\u002F03.runtypes\u002F04.get-errors-formats",{"title":56,"path":393,"stem":394},"\u002Fbenchmarks\u002Fruntypes\u002Fjson-round-trip","03.benchmarks\u002F03.runtypes\u002F05.json-round-trip",{"title":396,"path":397,"stem":398},"Type Checking","\u002Fbenchmarks\u002Fruntypes\u002Ftype-checking","03.benchmarks\u002F03.runtypes\u002F07.type-checking",{"id":400,"title":181,"body":401,"description":2168,"extension":2169,"links":2170,"meta":2171,"navigation":1425,"path":182,"seo":2172,"stem":183,"__hash__":2173},"docs\u002F02.runtypes\u002F01.introduction\u002F04.configuration.md",{"type":402,"value":403},"minimark",[404,417,422,431,804,828,849,854,877,1022,1074,1082,1086,1097,1170,1173,1196,1487,1497,1500,1503,1519,1568,1739,1769,1773,1794,1992,2079,2083,2097,2101,2115,2157,2164],[405,406,407,408,412,413,416],"p",{},"RunTypes reads its settings from the ",[409,410,411],"code",{},"plugins"," list in your ",[409,414,415],{},"tsconfig.json",". Configure a project once, and every build tool (Vite, Rollup, webpack, Rspack, esbuild) picks it up.",[418,419,421],"h2",{"id":420},"option-reference","Option Reference",[405,423,424,425,430],{},"Every option is optional; leave one out and the default applies. Set them in your tsconfig plugin entry, shown under ",[426,427,429],"a",{"href":428},"#setting-options","Setting Options",".",[432,433,434,450],"table",{},[435,436,437],"thead",{},[438,439,440,444,447],"tr",{},[441,442,443],"th",{},"Option",[441,445,446],{},"Default",[441,448,449],{},"What it does",[451,452,453,509,550,576,595,634,664,693,737,759,771,787],"tbody",{},[438,454,455,461,464],{},[456,457,458],"td",{},[409,459,460],{},"genDir",[456,462,463],{},"inferred from tsconfig",[456,465,466,467,470,471,474,475,478,479,482,483,482,486,489,490,493,494,497,498,501,502,505,506,430],{},"The folder for generated files. Build output goes under ",[409,468,469],{},"types\u002F"," (ignored by git); the ",[426,472,473],{"href":271},"enrichment CLI"," writes its committed files under ",[409,476,477],{},"enriched\u002F"," (",[409,480,481],{},"friendly\u002F",", ",[409,484,485],{},"mock\u002F",[409,487,488],{},"i18n\u002F\u003Clocale>\u002F","). Each folder has a README. When omitted, it is ",[409,491,492],{},".mion"," in your source folder: ",[409,495,496],{},"rootDir"," if set, else the folder all your files share (the working directory for ",[409,499,500],{},"mion compile","), a dot-folder that tsconfig ",[409,503,504],{},"include"," globs skip, so the cache never enters your program. CLI flag: ",[409,507,508],{},"--gen-dir",[438,510,511,516,520],{},[456,512,513],{},[409,514,515],{},"emitMode",[456,517,518],{},[409,519,409],{},[456,521,522,523,525,526,529,530,533,534,537,538,540,541,544,545,549],{},"How each generated function ships. ",[409,524,409],{}," ships the function body as a string and builds it on first use (smallest output). ",[409,527,528],{},"functions"," ships ready functions. ",[409,531,532],{},"both"," ships both, for runtimes that block dynamic code (a strict CSP, Cloudflare Workers). ",[409,535,536],{},"ts"," ships the ",[409,539,532],{}," output as typed ",[409,542,543],{},".ts"," modules (",[426,546,548],{"href":547},"#typed-output","Typed Output","). A mion client that bundles its routes always ships ready functions for them.",[438,551,552,557,562],{},[456,553,554],{},[409,555,556],{},"moduleMode",[456,558,559],{},[409,560,561],{},"default",[456,563,564,565,567,568,571,572,575],{},"How the generated functions group into modules. ",[409,566,561],{}," gives each source file its own module, so a bundle holds only the types of the files it imports (best code splitting). A type several files use is written once in a shared module (a very small one is copied instead). ",[409,569,570],{},"allSingle"," groups each feature into one module for the whole program (fewest files). The mion presets reject it: a client bundle would carry the server's types. ",[409,573,574],{},"allModules"," gives every entry its own module (rarely useful).",[438,577,578,583,588],{},[456,579,580],{},[409,581,582],{},"hashLength",[456,584,585],{},[409,586,587],{},"7",[456,589,590,591,594],{},"Length of the short ids in generated names, always exactly this long. If two types get the same id, the build stops and prints both types, the shared id and the length to try next (",[426,592,593],{"href":344},"marker-type-id-collision","). That is the only reason to raise it; each extra character gives 62 times more ids.",[438,596,597,602,605],{},[456,598,599],{},[409,600,601],{},"downgradeErrors",[456,603,604],{},"unset",[456,606,607,608,611,612,614,615,618,619,622,623,626,627,629,630,633],{},"A RuntimeError (a type that can never be encoded, a contradictory format rule) stops your build: no bundle, and the ",[409,609,610],{},"mion"," command line exits with a failure code. See ",[426,613,340],{"href":335},". List the names to report as warnings instead, for example ",[409,616,617],{},"['validate-symbol-root']","; every other one still stops the build. A downgraded error still prints, marked ",[409,620,621],{},"(downgraded)",". Set in the tsconfig, it also lowers them in the linter. ",[409,624,625],{},"'*'"," downgrades all of them, for a project adopting mion that cannot list them yet. An Error cannot be downgraded, ",[409,628,625],{}," included; naming one here is refused with the reason. For a bad call site in your own source, prefer a ",[409,631,632],{},"@mion-expect-error"," comment on the line above: it is precise, and an unused one is reported as a warning.",[438,635,636,641,643],{},[456,637,638],{},[409,639,640],{},"levels",[456,642,604],{},[456,644,645,646,649,650,653,654,656,657,430],{},"Info messages are hidden: a method a validator skips, a validator on a type you wrote as ",[409,647,648],{},"any",". ",[409,651,652],{},"'all'"," shows them in the build and the ",[409,655,610],{}," command line. They never stop the build. The linter shows them with its ",[426,658,660,663],{"href":659},"\u002Fruntypes\u002Ftooling\u002Flinting#showing-info-messages",[409,661,662],{},"mion\u002Finfo"," rule",[438,665,666,671,676],{},[456,667,668],{},[409,669,670],{},"logStyle",[456,672,673],{},[409,674,675],{},"grouped",[456,677,678,679,681,682,684,685,688,689,430],{},"How the build, the dev server and the ",[409,680,610],{}," command line print messages. ",[409,683,675],{}," prints each message once, then one line per place, with the values that change. ",[409,686,687],{},"lines"," prints one full line per message, the form CI tools read. See ",[426,690,692],{"href":691},"\u002Fruntypes\u002Fdiagnostics\u002Ferror-levels#grouping-messages","Grouping Messages",[438,694,695,700,703],{},[456,696,697],{},[409,698,699],{},"pureFnReport",[456,701,702],{},"off",[456,704,705,706,709,710,713,714,717,718,721,722,724,725,728,729,732,733,736],{},"A report of every pure function this build generated, for tooling that moves pure function bodies between two builds of one codebase (a framework that declares a mapper in client code but runs it on the server). On the bundler plugin: ",[409,707,708],{},"'file'"," writes it to ",[409,711,712],{},"\u003CgenDir>\u002Ftypes\u002Fpure-fns-report.json"," on every build (a fixed, gitignored path); ",[409,715,716],{},"'callback'"," passes it in process to ",[409,719,720],{},"onPureFnReport"," and writes no file; off (the default) does neither. Each record carries the call site, the pure function's id, the function and package that declared the registrar, and the function body. The shape is the same for every ",[409,723,556],{},". In tsconfig, ",[409,726,727],{},"pureFnReport: true"," writes the file (the handler is plugin only); the CLI flags are ",[409,730,731],{},"--pure-fn-report-file"," (writes the JSON) and ",[409,734,735],{},"--pure-fn-report-wire"," (sends it to the calling plugin, no file).",[438,738,739,744,749],{},[456,740,741],{},[409,742,743],{},"jsonMaxBytes",[456,745,746],{},[409,747,748],{},"true",[456,750,751,752,755,756,430],{},"For every reflected type with a fully bounded size (strings with a maximum length, lists with a maximum number of items, and so on), emit the largest JSON a valid value can be. mion turns it into per route request size limits. Set ",[409,753,754],{},"false"," to emit nothing, for a project with its own limits. CLI flag: ",[409,757,758],{},"--json-max-bytes=false",[438,760,761,766,768],{},[456,762,763],{},[409,764,765],{},"i18n",[456,767,604],{},[456,769,770],{},"Translation settings for the friendly maps, detailed below. Left out, translations are off.",[438,772,773,778,780],{},[456,774,775],{},[409,776,777],{},"markers",[456,779,604],{},[456,781,782,783,786],{},"Which packages may declare the RunTypes marker types, detailed below. Left out, only ",[409,784,785],{},"@mionjs\u002Frun-types"," is trusted, which suits almost every project.",[438,788,789,794,797],{},[456,790,791],{},[409,792,793],{},"tsconfig",[456,795,796],{},"found like tsc",[456,798,799,800,803],{},"Path to your tsconfig, relative to the project root. It cannot live inside the tsconfig: set it on the bundler plugin, the lint settings, or with the CLI ",[409,801,802],{},"--tsconfig"," flag. When not set, it is found the way tsc finds it, searching upward from the working directory. A config you name must load, or the tool stops with an error.",[805,806,807,808,811,812,815,816,819,820,824,825,430],"note",{},"mion adds one key to the same plugin entry: ",[409,809,810],{},"clientRoutes"," (CLI flag ",[409,813,814],{},"--client-routes","). A client bundles its routes with ",[409,817,818],{},"'bundle'",", the default, or ",[426,821,823],{"href":822},"\u002Frpc\u002Fmiddlewares\u002Ffetch-metadata#disabling-routes-metadata-bundling","fetches them from the server"," with ",[409,826,827],{},"'fetch'",[805,829,830,831,834,835,838,839,842,843,845,846,848],{},"For in-process tooling, the bundler plugin also takes an ",[409,832,833],{},"onPureFnReport(sites, phase)"," callback, with the same records as the JSON file. It fires once with the whole report after the build scan (phase ",[409,836,837],{},"'build'","), and again under Vite with just the changed file when you edit a pure function body (phase ",[409,840,841],{},"'update'","). Setting it without ",[409,844,699],{}," implies ",[409,847,716],{},": the report is on and no file is written.",[850,851,853],"h3",{"id":852},"marker-packages","Marker Packages",[405,855,856,857,859,860,482,863,482,866,482,869,872,873,876],{},"The ",[409,858,777],{}," object says where the marker types (",[409,861,862],{},"InjectRunTypeId",[409,864,865],{},"InjectTypeFnArgs",[409,867,868],{},"CompTimeArgs",[409,870,871],{},"PureFunction",") may come from. You need it only when a library declares them itself: the compiler trusts a marker only from a package it knows, so an unknown package leaves your type as ",[409,874,875],{},"unknown",". The build reports this as marker-untrusted-package and names the package to add.",[878,879,884],"pre",{"className":880,"code":881,"filename":415,"language":882,"meta":883,"style":883},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"compilerOptions\": {\n    \"plugins\": [\n      {\n        \"name\": \"mion\",\n        \"markers\": {\"packages\": [\"@my-org\u002Fruntypes-markers\"]}\n      }\n    ]\n  }\n}\n","json","",[409,885,886,895,914,930,936,961,998,1004,1010,1016],{"__ignoreMap":883},[887,888,891],"span",{"class":889,"line":890},"line",1,[887,892,894],{"class":893},"sMK4o","{\n",[887,896,898,901,905,908,911],{"class":889,"line":897},2,[887,899,900],{"class":893},"  \"",[887,902,904],{"class":903},"spNyl","compilerOptions",[887,906,907],{"class":893},"\"",[887,909,910],{"class":893},":",[887,912,913],{"class":893}," {\n",[887,915,917,920,923,925,927],{"class":889,"line":916},3,[887,918,919],{"class":893},"    \"",[887,921,411],{"class":922},"sBMFI",[887,924,907],{"class":893},[887,926,910],{"class":893},[887,928,929],{"class":893}," [\n",[887,931,933],{"class":889,"line":932},4,[887,934,935],{"class":893},"      {\n",[887,937,939,942,946,948,950,953,956,958],{"class":889,"line":938},5,[887,940,941],{"class":893},"        \"",[887,943,945],{"class":944},"sbssI","name",[887,947,907],{"class":893},[887,949,910],{"class":893},[887,951,952],{"class":893}," \"",[887,954,610],{"class":955},"sfazB",[887,957,907],{"class":893},[887,959,960],{"class":893},",\n",[887,962,964,966,968,970,972,975,977,981,983,985,988,990,993,995],{"class":889,"line":963},6,[887,965,941],{"class":893},[887,967,777],{"class":944},[887,969,907],{"class":893},[887,971,910],{"class":893},[887,973,974],{"class":893}," {",[887,976,907],{"class":893},[887,978,980],{"class":979},"swJcz","packages",[887,982,907],{"class":893},[887,984,910],{"class":893},[887,986,987],{"class":893}," [",[887,989,907],{"class":893},[887,991,992],{"class":955},"@my-org\u002Fruntypes-markers",[887,994,907],{"class":893},[887,996,997],{"class":893},"]}\n",[887,999,1001],{"class":889,"line":1000},7,[887,1002,1003],{"class":893},"      }\n",[887,1005,1007],{"class":889,"line":1006},8,[887,1008,1009],{"class":893},"    ]\n",[887,1011,1013],{"class":889,"line":1012},9,[887,1014,1015],{"class":893},"  }\n",[887,1017,1019],{"class":889,"line":1018},10,[887,1020,1021],{"class":893},"}\n",[432,1023,1024,1035],{},[435,1025,1026],{},[438,1027,1028,1031,1033],{},[441,1029,1030],{},"Key",[441,1032,446],{},[441,1034,449],{},[451,1036,1037,1052],{},[438,1038,1039,1043,1046],{},[456,1040,1041],{},[409,1042,980],{},[456,1044,1045],{},"none",[456,1047,1048,1049,1051],{},"Extra package names allowed to declare the marker types. It adds to ",[409,1050,785],{},", never replaces it, so its markers keep working alongside your own.",[438,1053,1054,1059,1063],{},[456,1055,1056],{},[409,1057,1058],{},"checkPackage",[456,1060,1061],{},[409,1062,748],{},[456,1064,1065,1066,1068,1069,1071,1072,430],{},"When ",[409,1067,754],{},", a type counts as a marker on its name alone, whatever package declared it: a type you happen to name ",[409,1070,862],{}," then drives rewrites too. Prefer naming your package in ",[409,1073,980],{},[1075,1076,1077,1078,1081],"tip",{},"Re-exporting the marker types (",[409,1079,1080],{},"export type {InjectRunTypeId} from '@mionjs\u002Frun-types'",") needs no configuration, because the declaration still belongs to RunTypes.",[850,1083,1085],{"id":1084},"translations","Translations",[405,1087,856,1088,1090,1091,1093,1094,1096],{},[409,1089,765],{}," object configures ",[426,1092,1084],{"href":288}," for your ",[426,1095,279],{"href":280}," maps:",[432,1098,1099,1109],{},[435,1100,1101],{},[438,1102,1103,1105,1107],{},[441,1104,1030],{},[441,1106,446],{},[441,1108,449],{},[451,1110,1111,1130,1150],{},[438,1112,1113,1118,1123],{},[456,1114,1115],{},[409,1116,1117],{},"sourceLocale",[456,1119,1120],{},[409,1121,1122],{},"en",[456,1124,1125,1126,1129],{},"The language your friendly maps are written in. It decides which plural forms ",[409,1127,1128],{},"enrich"," scaffolds in them.",[438,1131,1132,1137,1139],{},[456,1133,1134],{},[409,1135,1136],{},"locales",[456,1138,1045],{},[456,1140,1141,1142,1145,1146,1149],{},"The locales you translate into; ",[409,1143,1144],{},"enrich --i18n all"," and its ",[409,1147,1148],{},"--no-emit"," check walk this list. Don't list the source locale.",[438,1151,1152,1157,1161],{},[456,1153,1154],{},[409,1155,1156],{},"strict",[456,1158,1159],{},[409,1160,754],{},[456,1162,1065,1163,1165,1166,1169],{},[409,1164,748],{},", an incomplete or out-of-date translation fails the i18n check by default, the same as passing ",[409,1167,1168],{},"--require-complete"," to a single run. Rendering at runtime stays lenient either way.",[418,1171,429],{"id":1172},"setting-options",[405,1174,1175,1176,1178,1179,1182,1183,1185,1186,1189,1190,1192,1193,1195],{},"Add an entry named ",[409,1177,610],{}," under ",[409,1180,1181],{},"compilerOptions.plugins"," in your ",[409,1184,415],{},". A ",[409,1187,1188],{},"@mionjs\u002Fdevtools"," bundler plugin option or a CLI flag overrides that entry, which overrides the built-in default. Two exceptions: options that describe the build itself (such as ",[409,1191,793],{},") are plugin only, and the ",[409,1194,765],{}," object, which belongs to the enrich command, is tsconfig only.",[1197,1198,1199,1365],"code-group",{},[878,1200,1202],{"className":880,"code":1201,"filename":415,"language":882,"meta":883,"style":883},"{\n  \"compilerOptions\": {\n    \"plugins\": [\n      {\n        \"name\": \"mion\",\n        \"emitMode\": \"code\",\n        \"moduleMode\": \"default\",\n        \"i18n\": {\"sourceLocale\": \"en\", \"locales\": [\"es\", \"pl\"]}\n      }\n    ]\n  }\n}\n",[409,1203,1204,1208,1220,1232,1236,1254,1272,1290,1347,1351,1355,1360],{"__ignoreMap":883},[887,1205,1206],{"class":889,"line":890},[887,1207,894],{"class":893},[887,1209,1210,1212,1214,1216,1218],{"class":889,"line":897},[887,1211,900],{"class":893},[887,1213,904],{"class":903},[887,1215,907],{"class":893},[887,1217,910],{"class":893},[887,1219,913],{"class":893},[887,1221,1222,1224,1226,1228,1230],{"class":889,"line":916},[887,1223,919],{"class":893},[887,1225,411],{"class":922},[887,1227,907],{"class":893},[887,1229,910],{"class":893},[887,1231,929],{"class":893},[887,1233,1234],{"class":889,"line":932},[887,1235,935],{"class":893},[887,1237,1238,1240,1242,1244,1246,1248,1250,1252],{"class":889,"line":938},[887,1239,941],{"class":893},[887,1241,945],{"class":944},[887,1243,907],{"class":893},[887,1245,910],{"class":893},[887,1247,952],{"class":893},[887,1249,610],{"class":955},[887,1251,907],{"class":893},[887,1253,960],{"class":893},[887,1255,1256,1258,1260,1262,1264,1266,1268,1270],{"class":889,"line":963},[887,1257,941],{"class":893},[887,1259,515],{"class":944},[887,1261,907],{"class":893},[887,1263,910],{"class":893},[887,1265,952],{"class":893},[887,1267,409],{"class":955},[887,1269,907],{"class":893},[887,1271,960],{"class":893},[887,1273,1274,1276,1278,1280,1282,1284,1286,1288],{"class":889,"line":1000},[887,1275,941],{"class":893},[887,1277,556],{"class":944},[887,1279,907],{"class":893},[887,1281,910],{"class":893},[887,1283,952],{"class":893},[887,1285,561],{"class":955},[887,1287,907],{"class":893},[887,1289,960],{"class":893},[887,1291,1292,1294,1296,1298,1300,1302,1304,1306,1308,1310,1312,1314,1316,1319,1321,1323,1325,1327,1329,1331,1334,1336,1338,1340,1343,1345],{"class":889,"line":1006},[887,1293,941],{"class":893},[887,1295,765],{"class":944},[887,1297,907],{"class":893},[887,1299,910],{"class":893},[887,1301,974],{"class":893},[887,1303,907],{"class":893},[887,1305,1117],{"class":979},[887,1307,907],{"class":893},[887,1309,910],{"class":893},[887,1311,952],{"class":893},[887,1313,1122],{"class":955},[887,1315,907],{"class":893},[887,1317,1318],{"class":893},",",[887,1320,952],{"class":893},[887,1322,1136],{"class":979},[887,1324,907],{"class":893},[887,1326,910],{"class":893},[887,1328,987],{"class":893},[887,1330,907],{"class":893},[887,1332,1333],{"class":955},"es",[887,1335,907],{"class":893},[887,1337,1318],{"class":893},[887,1339,952],{"class":893},[887,1341,1342],{"class":955},"pl",[887,1344,907],{"class":893},[887,1346,997],{"class":893},[887,1348,1349],{"class":889,"line":1012},[887,1350,1003],{"class":893},[887,1352,1353],{"class":889,"line":1018},[887,1354,1009],{"class":893},[887,1356,1358],{"class":889,"line":1357},11,[887,1359,1015],{"class":893},[887,1361,1363],{"class":889,"line":1362},12,[887,1364,1021],{"class":893},[878,1366,1370],{"className":1367,"code":1368,"filename":1369,"language":536,"meta":883,"style":883},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {defineConfig} from 'vite';\nimport runtypes from '@mionjs\u002Fdevtools\u002Fruntypes\u002Fvite';\n\nexport default defineConfig({\n  plugins: [runtypes({emitMode: 'functions'})],\n});\n","vite.config.ts",[409,1371,1372,1402,1421,1427,1444,1478],{"__ignoreMap":883},[887,1373,1374,1378,1380,1384,1387,1390,1393,1396,1399],{"class":889,"line":890},[887,1375,1377],{"class":1376},"s7zQu","import",[887,1379,974],{"class":893},[887,1381,1383],{"class":1382},"sTEyZ","defineConfig",[887,1385,1386],{"class":893},"}",[887,1388,1389],{"class":1376}," from",[887,1391,1392],{"class":893}," '",[887,1394,1395],{"class":955},"vite",[887,1397,1398],{"class":893},"'",[887,1400,1401],{"class":893},";\n",[887,1403,1404,1406,1409,1412,1414,1417,1419],{"class":889,"line":897},[887,1405,1377],{"class":1376},[887,1407,1408],{"class":1382}," runtypes ",[887,1410,1411],{"class":1376},"from",[887,1413,1392],{"class":893},[887,1415,1416],{"class":955},"@mionjs\u002Fdevtools\u002Fruntypes\u002Fvite",[887,1418,1398],{"class":893},[887,1420,1401],{"class":893},[887,1422,1423],{"class":889,"line":916},[887,1424,1426],{"emptyLinePlaceholder":1425},true,"\n",[887,1428,1429,1432,1435,1439,1442],{"class":889,"line":932},[887,1430,1431],{"class":1376},"export",[887,1433,1434],{"class":1376}," default",[887,1436,1438],{"class":1437},"s2Zo4"," defineConfig",[887,1440,1441],{"class":1382},"(",[887,1443,894],{"class":893},[887,1445,1446,1449,1451,1453,1456,1458,1461,1463,1465,1467,1469,1471,1473,1476],{"class":889,"line":938},[887,1447,1448],{"class":979},"  plugins",[887,1450,910],{"class":893},[887,1452,987],{"class":1382},[887,1454,1455],{"class":1437},"runtypes",[887,1457,1441],{"class":1382},[887,1459,1460],{"class":893},"{",[887,1462,515],{"class":979},[887,1464,910],{"class":893},[887,1466,1392],{"class":893},[887,1468,528],{"class":955},[887,1470,1398],{"class":893},[887,1472,1386],{"class":893},[887,1474,1475],{"class":1382},")]",[887,1477,960],{"class":893},[887,1479,1480,1482,1485],{"class":889,"line":963},[887,1481,1386],{"class":893},[887,1483,1484],{"class":1382},")",[887,1486,1401],{"class":893},[805,1488,1489,1490,1492,1493,1496],{},"Order ",[409,1491,1188],{}," first among your ",[409,1494,1495],{},"enforce: 'pre'"," plugins, so it sees your source before other plugins rewrite it.",[1075,1498,1499],{},"Set your options once in tsconfig. Use a build-tool option or a CLI flag only when a single build needs to differ.",[418,1501,548],{"id":1502},"typed-output",[405,1504,1505,1508,1509,1511,1512,1515,1516,1518],{},[409,1506,1507],{},"emitMode: 'ts'"," writes the generated functions as typed ",[409,1510,543],{}," modules, for compilers that turn TypeScript into native code and need the types to optimize it. Each type gets a data-only copy (no methods) in its own module under ",[409,1513,1514],{},"\u003CgenDir>\u002Ftypes\u002Ft\u002F",". The modules pass the strictest tsconfig and run the same logic as the ",[409,1517,532],{}," output. The code sent to clients does not change.",[878,1520,1523],{"className":1367,"code":1521,"filename":1522,"language":536,"meta":883,"style":883},"\u002F** User *\u002F\nexport type T_OMOvTMe = {id: number; name: string};\n",".mion\u002Ftypes\u002Ft\u002FOMOvTMe.ts",[409,1524,1525,1531],{"__ignoreMap":883},[887,1526,1527],{"class":889,"line":890},[887,1528,1530],{"class":1529},"sHwdD","\u002F** User *\u002F\n",[887,1532,1533,1535,1538,1541,1544,1546,1549,1551,1554,1557,1560,1562,1565],{"class":889,"line":897},[887,1534,1431],{"class":1376},[887,1536,1537],{"class":903}," type",[887,1539,1540],{"class":922}," T_OMOvTMe",[887,1542,1543],{"class":893}," =",[887,1545,974],{"class":893},[887,1547,1548],{"class":979},"id",[887,1550,910],{"class":893},[887,1552,1553],{"class":922}," number",[887,1555,1556],{"class":893},";",[887,1558,1559],{"class":979}," name",[887,1561,910],{"class":893},[887,1563,1564],{"class":922}," string",[887,1566,1567],{"class":893},"};\n",[878,1569,1572],{"className":1367,"code":1570,"filename":1571,"language":536,"meta":883,"style":883},"function g_Eq2V_OMOvTMe(_utl: RTUtils): (v: unknown) => v is T_OMOvTMe {\n  function Eq2V_OMOvTMe(v: any): v is T_OMOvTMe {\n    return typeof v === 'object' && v !== null && Number.isFinite(v.id) && typeof v.name === 'string';\n  }\n  return Eq2V_OMOvTMe;\n}\n",".mion\u002Ftypes\u002FEq2V_OMOvTMe.ts (the live function, shortened)",[409,1573,1574,1621,1648,1722,1726,1735],{"__ignoreMap":883},[887,1575,1576,1579,1582,1584,1588,1590,1593,1596,1598,1601,1603,1606,1608,1611,1614,1617,1619],{"class":889,"line":890},[887,1577,1578],{"class":903},"function",[887,1580,1581],{"class":1437}," g_Eq2V_OMOvTMe",[887,1583,1441],{"class":893},[887,1585,1587],{"class":1586},"sHdIc","_utl",[887,1589,910],{"class":893},[887,1591,1592],{"class":922}," RTUtils",[887,1594,1595],{"class":893},"):",[887,1597,478],{"class":893},[887,1599,1600],{"class":1586},"v",[887,1602,910],{"class":893},[887,1604,1605],{"class":922}," unknown",[887,1607,1484],{"class":893},[887,1609,1610],{"class":903}," =>",[887,1612,1613],{"class":1586}," v",[887,1615,1616],{"class":893}," is",[887,1618,1540],{"class":922},[887,1620,913],{"class":893},[887,1622,1623,1626,1629,1631,1633,1635,1638,1640,1642,1644,1646],{"class":889,"line":897},[887,1624,1625],{"class":903},"  function",[887,1627,1628],{"class":1437}," Eq2V_OMOvTMe",[887,1630,1441],{"class":893},[887,1632,1600],{"class":1586},[887,1634,910],{"class":893},[887,1636,1637],{"class":922}," any",[887,1639,1595],{"class":893},[887,1641,1613],{"class":1586},[887,1643,1616],{"class":893},[887,1645,1540],{"class":922},[887,1647,913],{"class":893},[887,1649,1650,1653,1656,1658,1661,1663,1666,1668,1671,1673,1676,1679,1681,1684,1686,1689,1691,1693,1695,1697,1700,1703,1705,1707,1709,1711,1713,1715,1718,1720],{"class":889,"line":916},[887,1651,1652],{"class":1376},"    return",[887,1654,1655],{"class":893}," typeof",[887,1657,1613],{"class":1382},[887,1659,1660],{"class":893}," ===",[887,1662,1392],{"class":893},[887,1664,1665],{"class":955},"object",[887,1667,1398],{"class":893},[887,1669,1670],{"class":893}," &&",[887,1672,1613],{"class":1382},[887,1674,1675],{"class":893}," !==",[887,1677,1678],{"class":893}," null",[887,1680,1670],{"class":893},[887,1682,1683],{"class":1382}," Number",[887,1685,430],{"class":893},[887,1687,1688],{"class":1437},"isFinite",[887,1690,1441],{"class":979},[887,1692,1600],{"class":1382},[887,1694,430],{"class":893},[887,1696,1548],{"class":1382},[887,1698,1699],{"class":979},") ",[887,1701,1702],{"class":893},"&&",[887,1704,1655],{"class":893},[887,1706,1613],{"class":1382},[887,1708,430],{"class":893},[887,1710,945],{"class":1382},[887,1712,1660],{"class":893},[887,1714,1392],{"class":893},[887,1716,1717],{"class":955},"string",[887,1719,1398],{"class":893},[887,1721,1401],{"class":893},[887,1723,1724],{"class":889,"line":932},[887,1725,1015],{"class":893},[887,1727,1728,1731,1733],{"class":889,"line":938},[887,1729,1730],{"class":1376},"  return",[887,1732,1628],{"class":1382},[887,1734,1401],{"class":893},[887,1736,1737],{"class":889,"line":963},[887,1738,1021],{"class":893},[805,1740,1741,1743,1744,1747,1748,1750,1751,1754,1755,1757,1758,1760,1761,1764,1765,1768],{},[409,1742,500],{}," then writes your sources to the tsconfig ",[409,1745,1746],{},"outDir"," as ",[409,1749,543],{}," instead of ",[409,1752,1753],{},".js",", so it needs an ",[409,1756,1746],{},". Imports between the files keep their ",[409,1759,543],{}," extension, so your tsconfig needs ",[409,1762,1763],{},"allowImportingTsExtensions"," (or ",[409,1766,1767],{},"rewriteRelativeImportExtensions"," when tsc emits).",[418,1770,1772],{"id":1771},"syncing-enrichment-files-during-dev","Syncing Enrichment Files During Dev",[405,1774,856,1775,1777,1778,1780,1781,1783,1784,1786,1787,1789,1790,1793],{},[409,1776,1188],{}," bundler plugin can scaffold and sync your committed ",[409,1779,279],{}," and ",[409,1782,283],{}," maps while your dev server runs, instead of you running the ",[426,1785,473],{"href":271},". Turn it on with an ",[409,1788,1128],{}," object on the plugin (never in your tsconfig); it runs only in dev and watch. Like ",[409,1791,1792],{},"enrich --update",", it updates the file structure but never fills in translated strings or any other value you wrote.",[878,1795,1797],{"className":1367,"code":1796,"filename":1369,"language":536,"meta":883,"style":883},"import {defineConfig} from 'vite';\nimport runtypes from '@mionjs\u002Fdevtools\u002Fruntypes\u002Fvite';\n\nexport default defineConfig({\n  plugins: [\n    runtypes({\n      enrich: {\n        friendly: true,\n        mock: true,\n        i18n: {sourceLocale: 'en', locales: ['es', 'pl']},\n        suppressHmr: true,\n      },\n    }),\n  ],\n});\n",[409,1798,1799,1819,1835,1839,1851,1859,1868,1877,1890,1901,1949,1960,1965,1975,1983],{"__ignoreMap":883},[887,1800,1801,1803,1805,1807,1809,1811,1813,1815,1817],{"class":889,"line":890},[887,1802,1377],{"class":1376},[887,1804,974],{"class":893},[887,1806,1383],{"class":1382},[887,1808,1386],{"class":893},[887,1810,1389],{"class":1376},[887,1812,1392],{"class":893},[887,1814,1395],{"class":955},[887,1816,1398],{"class":893},[887,1818,1401],{"class":893},[887,1820,1821,1823,1825,1827,1829,1831,1833],{"class":889,"line":897},[887,1822,1377],{"class":1376},[887,1824,1408],{"class":1382},[887,1826,1411],{"class":1376},[887,1828,1392],{"class":893},[887,1830,1416],{"class":955},[887,1832,1398],{"class":893},[887,1834,1401],{"class":893},[887,1836,1837],{"class":889,"line":916},[887,1838,1426],{"emptyLinePlaceholder":1425},[887,1840,1841,1843,1845,1847,1849],{"class":889,"line":932},[887,1842,1431],{"class":1376},[887,1844,1434],{"class":1376},[887,1846,1438],{"class":1437},[887,1848,1441],{"class":1382},[887,1850,894],{"class":893},[887,1852,1853,1855,1857],{"class":889,"line":938},[887,1854,1448],{"class":979},[887,1856,910],{"class":893},[887,1858,929],{"class":1382},[887,1860,1861,1864,1866],{"class":889,"line":963},[887,1862,1863],{"class":1437},"    runtypes",[887,1865,1441],{"class":1382},[887,1867,894],{"class":893},[887,1869,1870,1873,1875],{"class":889,"line":1000},[887,1871,1872],{"class":979},"      enrich",[887,1874,910],{"class":893},[887,1876,913],{"class":893},[887,1878,1879,1882,1884,1888],{"class":889,"line":1006},[887,1880,1881],{"class":979},"        friendly",[887,1883,910],{"class":893},[887,1885,1887],{"class":1886},"sfNiH"," true",[887,1889,960],{"class":893},[887,1891,1892,1895,1897,1899],{"class":889,"line":1012},[887,1893,1894],{"class":979},"        mock",[887,1896,910],{"class":893},[887,1898,1887],{"class":1886},[887,1900,960],{"class":893},[887,1902,1903,1906,1908,1910,1912,1914,1916,1918,1920,1922,1925,1927,1929,1931,1933,1935,1937,1939,1941,1943,1946],{"class":889,"line":1018},[887,1904,1905],{"class":979},"        i18n",[887,1907,910],{"class":893},[887,1909,974],{"class":893},[887,1911,1117],{"class":979},[887,1913,910],{"class":893},[887,1915,1392],{"class":893},[887,1917,1122],{"class":955},[887,1919,1398],{"class":893},[887,1921,1318],{"class":893},[887,1923,1924],{"class":979}," locales",[887,1926,910],{"class":893},[887,1928,987],{"class":1382},[887,1930,1398],{"class":893},[887,1932,1333],{"class":955},[887,1934,1398],{"class":893},[887,1936,1318],{"class":893},[887,1938,1392],{"class":893},[887,1940,1342],{"class":955},[887,1942,1398],{"class":893},[887,1944,1945],{"class":1382},"]",[887,1947,1948],{"class":893},"},\n",[887,1950,1951,1954,1956,1958],{"class":889,"line":1357},[887,1952,1953],{"class":979},"        suppressHmr",[887,1955,910],{"class":893},[887,1957,1887],{"class":1886},[887,1959,960],{"class":893},[887,1961,1962],{"class":889,"line":1362},[887,1963,1964],{"class":893},"      },\n",[887,1966,1968,1971,1973],{"class":889,"line":1967},13,[887,1969,1970],{"class":893},"    }",[887,1972,1484],{"class":1382},[887,1974,960],{"class":893},[887,1976,1978,1981],{"class":889,"line":1977},14,[887,1979,1980],{"class":1382},"  ]",[887,1982,960],{"class":893},[887,1984,1986,1988,1990],{"class":889,"line":1985},15,[887,1987,1386],{"class":893},[887,1989,1484],{"class":1382},[887,1991,1401],{"class":893},[432,1993,1994,2004],{},[435,1995,1996],{},[438,1997,1998,2000,2002],{},[441,1999,1030],{},[441,2001,446],{},[441,2003,449],{},[451,2005,2006,2024,2040,2062],{},[438,2007,2008,2013,2017],{},[456,2009,2010],{},[409,2011,2012],{},"friendly",[456,2014,2015],{},[409,2016,754],{},[456,2018,2019,2020,2023],{},"Scaffold and sync the ",[409,2021,2022],{},"enriched\u002Ffriendly\u002F"," maps as your types change.",[438,2025,2026,2031,2035],{},[456,2027,2028],{},[409,2029,2030],{},"mock",[456,2032,2033],{},[409,2034,754],{},[456,2036,2019,2037,2023],{},[409,2038,2039],{},"enriched\u002Fmock\u002F",[438,2041,2042,2046,2048],{},[456,2043,2044],{},[409,2045,765],{},[456,2047,604],{},[456,2049,2050,2051,2054,2055,482,2057,1780,2059,2061],{},"Sync the per-locale ",[409,2052,2053],{},"enriched\u002Fi18n\u002F\u003Clocale>\u002F"," mirrors. Takes ",[409,2056,1117],{},[409,2058,1136],{},[409,2060,1156],{},", the same shape as the tsconfig i18n object; its presence turns the locale sync on.",[438,2063,2064,2069,2072],{},[456,2065,2066],{},[409,2067,2068],{},"suppressHmr",[456,2070,2071],{},"on when any key above is on",[456,2073,2074,2075,2078],{},"Skip HMR for writes under ",[409,2076,2077],{},"\u003CgenDir>\u002Fenriched",", so the dev server does not reload when the plugin (or you) touch a mirror file.",[418,2080,2082],{"id":2081},"enrichment-check-on-production-builds","Enrichment Check on Production Builds",[405,2084,2085,2086,2088,2089,2092,2093,2096],{},"With ",[409,2087,1128],{}," set, a production build never writes. The plugin runs a read-only check instead (the build equivalent of ",[409,2090,2091],{},"enrich --require-complete","), and fails the build if any file is out of date, missing, still carries an unfilled blank, or holds a stale ",[409,2094,2095],{},"@rtOrphan"," entry.",[418,2098,2100],{"id":2099},"the-build-cache","The Build Cache",[405,2102,2103,2104,2107,2108,1764,2111,2114],{},"RunTypes keeps a cache under ",[409,2105,2106],{},"node_modules\u002F.cache\u002Fmion"," so a rebuild can skip types that did not change. It is on when your tsconfig sets ",[409,2109,2110],{},"incremental",[409,2112,2113],{},"composite","), and off otherwise; there is no separate option.",[878,2116,2118],{"className":880,"code":2117,"filename":415,"language":882,"meta":883,"style":883},"{\n  \"compilerOptions\": {\n    \"incremental\": true\n  }\n}\n",[409,2119,2120,2124,2136,2149,2153],{"__ignoreMap":883},[887,2121,2122],{"class":889,"line":890},[887,2123,894],{"class":893},[887,2125,2126,2128,2130,2132,2134],{"class":889,"line":897},[887,2127,900],{"class":893},[887,2129,904],{"class":903},[887,2131,907],{"class":893},[887,2133,910],{"class":893},[887,2135,913],{"class":893},[887,2137,2138,2140,2142,2144,2146],{"class":889,"line":916},[887,2139,919],{"class":893},[887,2141,2110],{"class":922},[887,2143,907],{"class":893},[887,2145,910],{"class":893},[887,2147,2148],{"class":893}," true\n",[887,2150,2151],{"class":889,"line":932},[887,2152,1015],{"class":893},[887,2154,2155],{"class":889,"line":938},[887,2156,1021],{"class":893},[805,2158,2159,2160,2163],{},"Stale entries are never read after a new release or a changed setting. Anything that wipes ",[409,2161,2162],{},"node_modules\u002F.cache"," clears it.",[2165,2166,2167],"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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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}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 .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}","Configure the compiler from your tsconfig, with build tools overriding per build.","md",null,{"toc":24},{"title":181,"description":2168},"30W0Czu8Tt5rA1w2rZVzve720Rr9r9dze5fI8s0FehM",1793324363741]