[{"data":1,"prerenderedAt":1792},["ShallowReactive",2],{"navigation_docs":3,"-runtypes-introduction-quick-start":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":17,"body":401,"description":1786,"extension":1787,"links":1788,"meta":1789,"navigation":586,"path":178,"seo":1790,"stem":179,"__hash__":1791},"docs\u002F02.runtypes\u002F01.introduction\u002F03.quick-start.md",{"type":402,"value":403},"minimark",[404,409,413,504,512,516,523,683,692,696,699,1069,1073,1076,1155,1159,1163,1169,1251,1339,1354,1358,1364,1468,1472,1486,1511,1576,1582,1586,1599,1666,1672,1676,1683,1782],[405,406,408],"h2",{"id":407},"_1-install-the-packages","1. Install the Packages",[410,411,412],"p",{},"Install the runtime package and the build plugin that reads your types.",[414,415,416,455,480],"code-group",{},[417,418,424],"pre",{"className":419,"code":420,"filename":421,"language":422,"meta":423,"style":423},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @mionjs\u002Frun-types\npnpm add -D @mionjs\u002Fdevtools\n","pnpm","bash","",[425,426,427,442],"code",{"__ignoreMap":423},[428,429,432,435,439],"span",{"class":430,"line":431},"line",1,[428,433,421],{"class":434},"sBMFI",[428,436,438],{"class":437},"sfazB"," add",[428,440,441],{"class":437}," @mionjs\u002Frun-types\n",[428,443,445,447,449,452],{"class":430,"line":444},2,[428,446,421],{"class":434},[428,448,438],{"class":437},[428,450,451],{"class":437}," -D",[428,453,454],{"class":437}," @mionjs\u002Fdevtools\n",[417,456,459],{"className":419,"code":457,"filename":458,"language":422,"meta":423,"style":423},"npm install @mionjs\u002Frun-types\nnpm install -D @mionjs\u002Fdevtools\n","npm",[425,460,461,470],{"__ignoreMap":423},[428,462,463,465,468],{"class":430,"line":431},[428,464,458],{"class":434},[428,466,467],{"class":437}," install",[428,469,441],{"class":437},[428,471,472,474,476,478],{"class":430,"line":444},[428,473,458],{"class":434},[428,475,467],{"class":437},[428,477,451],{"class":437},[428,479,454],{"class":437},[417,481,484],{"className":419,"code":482,"filename":483,"language":422,"meta":423,"style":423},"yarn add @mionjs\u002Frun-types\nyarn add -D @mionjs\u002Fdevtools\n","yarn",[425,485,486,494],{"__ignoreMap":423},[428,487,488,490,492],{"class":430,"line":431},[428,489,483],{"class":434},[428,491,438],{"class":437},[428,493,441],{"class":437},[428,495,496,498,500,502],{"class":430,"line":444},[428,497,483],{"class":434},[428,499,438],{"class":437},[428,501,451],{"class":437},[428,503,454],{"class":437},[505,506,507,508,511],"note",{},"Only RunTypes ends up in your bundle, and it has no dependencies. ",[425,509,510],{},"@mionjs\u002Fdevtools"," runs at build time and ships nothing.",[405,513,515],{"id":514},"_2-add-the-vite-plugin","2. Add the Vite Plugin",[410,517,518,519,522],{},"Add the plugin to your ",[425,520,521],{},"vite.config.ts",". It reads your types during the build.",[417,524,528],{"className":525,"code":526,"language":527,"meta":423,"style":423},"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: [\n    \u002F\u002F the binary for your platform installs as an optional dependency\n    runtypes({\n      tsconfig: 'tsconfig.json',\n    }),\n  ],\n});\n","ts",[425,529,530,562,581,588,607,620,627,637,655,666,674],{"__ignoreMap":423},[428,531,532,536,540,544,547,550,553,556,559],{"class":430,"line":431},[428,533,535],{"class":534},"s7zQu","import",[428,537,539],{"class":538},"sMK4o"," {",[428,541,543],{"class":542},"sTEyZ","defineConfig",[428,545,546],{"class":538},"}",[428,548,549],{"class":534}," from",[428,551,552],{"class":538}," '",[428,554,555],{"class":437},"vite",[428,557,558],{"class":538},"'",[428,560,561],{"class":538},";\n",[428,563,564,566,569,572,574,577,579],{"class":430,"line":444},[428,565,535],{"class":534},[428,567,568],{"class":542}," runtypes ",[428,570,571],{"class":534},"from",[428,573,552],{"class":538},[428,575,576],{"class":437},"@mionjs\u002Fdevtools\u002Fruntypes\u002Fvite",[428,578,558],{"class":538},[428,580,561],{"class":538},[428,582,584],{"class":430,"line":583},3,[428,585,587],{"emptyLinePlaceholder":586},true,"\n",[428,589,591,594,597,601,604],{"class":430,"line":590},4,[428,592,593],{"class":534},"export",[428,595,596],{"class":534}," default",[428,598,600],{"class":599},"s2Zo4"," defineConfig",[428,602,603],{"class":542},"(",[428,605,606],{"class":538},"{\n",[428,608,610,614,617],{"class":430,"line":609},5,[428,611,613],{"class":612},"swJcz","  plugins",[428,615,616],{"class":538},":",[428,618,619],{"class":542}," [\n",[428,621,623],{"class":430,"line":622},6,[428,624,626],{"class":625},"sHwdD","    \u002F\u002F the binary for your platform installs as an optional dependency\n",[428,628,630,633,635],{"class":430,"line":629},7,[428,631,632],{"class":599},"    runtypes",[428,634,603],{"class":542},[428,636,606],{"class":538},[428,638,640,643,645,647,650,652],{"class":430,"line":639},8,[428,641,642],{"class":612},"      tsconfig",[428,644,616],{"class":538},[428,646,552],{"class":538},[428,648,649],{"class":437},"tsconfig.json",[428,651,558],{"class":538},[428,653,654],{"class":538},",\n",[428,656,658,661,664],{"class":430,"line":657},9,[428,659,660],{"class":538},"    }",[428,662,663],{"class":542},")",[428,665,654],{"class":538},[428,667,669,672],{"class":430,"line":668},10,[428,670,671],{"class":542},"  ]",[428,673,654],{"class":538},[428,675,677,679,681],{"class":430,"line":676},11,[428,678,546],{"class":538},[428,680,663],{"class":542},[428,682,561],{"class":538},[505,684,685,686,688,689,691],{},"No ",[425,687,649],{}," flag to turn on: point the plugin at your existing ",[425,690,649],{},".",[405,693,695],{"id":694},"_3-write-a-type-and-validate-it","3. Write a Type and Validate It",[410,697,698],{},"Write a normal TypeScript type and ask for a validator: no schema, no decorators, no reflection at runtime.",[417,700,702],{"className":525,"code":701,"language":527,"meta":423,"style":423},"import {createValidateFn, createGetValidationErrorsFn} from '@mionjs\u002Frun-types';\n\ntype User = {\n  id: number;\n  name: string;\n  email: string;\n  roles: ('admin' | 'user')[];\n};\n\n\u002F\u002F generated from User at build time\nconst isUser = createValidateFn\u003CUser>();\n\nconst maybeUser: unknown = JSON.parse(\n  '{\"id\":1,\"name\":\"Ada\",\"email\":\"ada@x.io\",\"roles\":[\"admin\"]}'\n);\n\nif (isUser(maybeUser)) {\n  \u002F\u002F narrowed to User here\n  console.log(maybeUser.name);\n}\n\n\u002F\u002F lists what failed, not just yes or no\nconst getUserErrors = createGetValidationErrorsFn\u003CUser>();\ngetUserErrors({id: '1', name: 'Ada'}); \u002F\u002F [{path: ['id'], ...}, ...]\n\nexport {isUser, getUserErrors};\n",[425,703,704,732,736,751,763,775,786,818,823,827,832,860,865,891,903,910,915,931,937,962,968,973,979,1001,1048,1053],{"__ignoreMap":423},[428,705,706,708,710,713,716,719,721,723,725,728,730],{"class":430,"line":431},[428,707,535],{"class":534},[428,709,539],{"class":538},[428,711,712],{"class":542},"createValidateFn",[428,714,715],{"class":538},",",[428,717,718],{"class":542}," createGetValidationErrorsFn",[428,720,546],{"class":538},[428,722,549],{"class":534},[428,724,552],{"class":538},[428,726,727],{"class":437},"@mionjs\u002Frun-types",[428,729,558],{"class":538},[428,731,561],{"class":538},[428,733,734],{"class":430,"line":444},[428,735,587],{"emptyLinePlaceholder":586},[428,737,738,742,745,748],{"class":430,"line":583},[428,739,741],{"class":740},"spNyl","type",[428,743,744],{"class":434}," User",[428,746,747],{"class":538}," =",[428,749,750],{"class":538}," {\n",[428,752,753,756,758,761],{"class":430,"line":590},[428,754,755],{"class":612},"  id",[428,757,616],{"class":538},[428,759,760],{"class":434}," number",[428,762,561],{"class":538},[428,764,765,768,770,773],{"class":430,"line":609},[428,766,767],{"class":612},"  name",[428,769,616],{"class":538},[428,771,772],{"class":434}," string",[428,774,561],{"class":538},[428,776,777,780,782,784],{"class":430,"line":622},[428,778,779],{"class":612},"  email",[428,781,616],{"class":538},[428,783,772],{"class":434},[428,785,561],{"class":538},[428,787,788,791,793,796,798,801,803,806,808,811,813,816],{"class":430,"line":629},[428,789,790],{"class":612},"  roles",[428,792,616],{"class":538},[428,794,795],{"class":542}," (",[428,797,558],{"class":538},[428,799,800],{"class":437},"admin",[428,802,558],{"class":538},[428,804,805],{"class":538}," |",[428,807,552],{"class":538},[428,809,810],{"class":437},"user",[428,812,558],{"class":538},[428,814,815],{"class":542},")[]",[428,817,561],{"class":538},[428,819,820],{"class":430,"line":639},[428,821,822],{"class":538},"};\n",[428,824,825],{"class":430,"line":657},[428,826,587],{"emptyLinePlaceholder":586},[428,828,829],{"class":430,"line":668},[428,830,831],{"class":625},"\u002F\u002F generated from User at build time\n",[428,833,834,837,840,843,846,849,852,855,858],{"class":430,"line":676},[428,835,836],{"class":740},"const",[428,838,839],{"class":542}," isUser ",[428,841,842],{"class":538},"=",[428,844,845],{"class":599}," createValidateFn",[428,847,848],{"class":538},"\u003C",[428,850,851],{"class":434},"User",[428,853,854],{"class":538},">",[428,856,857],{"class":542},"()",[428,859,561],{"class":538},[428,861,863],{"class":430,"line":862},12,[428,864,587],{"emptyLinePlaceholder":586},[428,866,868,870,873,875,878,880,883,885,888],{"class":430,"line":867},13,[428,869,836],{"class":740},[428,871,872],{"class":542}," maybeUser",[428,874,616],{"class":538},[428,876,877],{"class":434}," unknown",[428,879,747],{"class":538},[428,881,882],{"class":542}," JSON",[428,884,691],{"class":538},[428,886,887],{"class":599},"parse",[428,889,890],{"class":542},"(\n",[428,892,894,897,900],{"class":430,"line":893},14,[428,895,896],{"class":538},"  '",[428,898,899],{"class":437},"{\"id\":1,\"name\":\"Ada\",\"email\":\"ada@x.io\",\"roles\":[\"admin\"]}",[428,901,902],{"class":538},"'\n",[428,904,906,908],{"class":430,"line":905},15,[428,907,663],{"class":542},[428,909,561],{"class":538},[428,911,913],{"class":430,"line":912},16,[428,914,587],{"emptyLinePlaceholder":586},[428,916,918,921,923,926,929],{"class":430,"line":917},17,[428,919,920],{"class":534},"if",[428,922,795],{"class":542},[428,924,925],{"class":599},"isUser",[428,927,928],{"class":542},"(maybeUser)) ",[428,930,606],{"class":538},[428,932,934],{"class":430,"line":933},18,[428,935,936],{"class":625},"  \u002F\u002F narrowed to User here\n",[428,938,940,943,945,948,950,953,955,958,960],{"class":430,"line":939},19,[428,941,942],{"class":542},"  console",[428,944,691],{"class":538},[428,946,947],{"class":599},"log",[428,949,603],{"class":612},[428,951,952],{"class":542},"maybeUser",[428,954,691],{"class":538},[428,956,957],{"class":542},"name",[428,959,663],{"class":612},[428,961,561],{"class":538},[428,963,965],{"class":430,"line":964},20,[428,966,967],{"class":538},"}\n",[428,969,971],{"class":430,"line":970},21,[428,972,587],{"emptyLinePlaceholder":586},[428,974,976],{"class":430,"line":975},22,[428,977,978],{"class":625},"\u002F\u002F lists what failed, not just yes or no\n",[428,980,982,984,987,989,991,993,995,997,999],{"class":430,"line":981},23,[428,983,836],{"class":740},[428,985,986],{"class":542}," getUserErrors ",[428,988,842],{"class":538},[428,990,718],{"class":599},[428,992,848],{"class":538},[428,994,851],{"class":434},[428,996,854],{"class":538},[428,998,857],{"class":542},[428,1000,561],{"class":538},[428,1002,1004,1007,1009,1012,1015,1017,1019,1022,1024,1026,1029,1031,1033,1036,1038,1040,1042,1045],{"class":430,"line":1003},24,[428,1005,1006],{"class":599},"getUserErrors",[428,1008,603],{"class":542},[428,1010,1011],{"class":538},"{",[428,1013,1014],{"class":612},"id",[428,1016,616],{"class":538},[428,1018,552],{"class":538},[428,1020,1021],{"class":437},"1",[428,1023,558],{"class":538},[428,1025,715],{"class":538},[428,1027,1028],{"class":612}," name",[428,1030,616],{"class":538},[428,1032,552],{"class":538},[428,1034,1035],{"class":437},"Ada",[428,1037,558],{"class":538},[428,1039,546],{"class":538},[428,1041,663],{"class":542},[428,1043,1044],{"class":538},";",[428,1046,1047],{"class":625}," \u002F\u002F [{path: ['id'], ...}, ...]\n",[428,1049,1051],{"class":430,"line":1050},25,[428,1052,587],{"emptyLinePlaceholder":586},[428,1054,1056,1058,1060,1062,1064,1067],{"class":430,"line":1055},26,[428,1057,593],{"class":534},[428,1059,539],{"class":538},[428,1061,925],{"class":542},[428,1063,715],{"class":538},[428,1065,1066],{"class":542}," getUserErrors",[428,1068,822],{"class":538},[405,1070,1072],{"id":1071},"import-paths","Import Paths",[410,1074,1075],{},"The main import has the everyday API. The rest is split into subpaths, so you only bundle what you import.",[1077,1078,1079,1092],"table",{},[1080,1081,1082],"thead",{},[1083,1084,1085,1089],"tr",{},[1086,1087,1088],"th",{},"Import",[1086,1090,1091],{},"What it has",[1093,1094,1095,1105,1115,1125,1135,1145],"tbody",{},[1083,1096,1097,1102],{},[1098,1099,1100],"td",{},[425,1101,727],{},[1098,1103,1104],{},"Validators, JSON round trip functions, reflection and the type helpers",[1083,1106,1107,1112],{},[1098,1108,1109],{},[425,1110,1111],{},"@mionjs\u002Frun-types\u002Fformats",[1098,1113,1114],{},"Format types like Email and UUIDv4, plus their checks",[1083,1116,1117,1122],{},[1098,1118,1119],{},[425,1120,1121],{},"@mionjs\u002Frun-types\u002Fformats\u002Ftemporal",[1098,1123,1124],{},"The TC39 Temporal formats",[1083,1126,1127,1132],{},[1098,1128,1129],{},[425,1130,1131],{},"@mionjs\u002Frun-types\u002Fbuilders",[1098,1133,1134],{},"Type builders, for types you assemble at runtime",[1083,1136,1137,1142],{},[1098,1138,1139],{},[425,1140,1141],{},"@mionjs\u002Frun-types\u002Fruntime",[1098,1143,1144],{},"Pure functions and class serializers you register yourself",[1083,1146,1147,1152],{},[1098,1148,1149],{},[425,1150,1151],{},"@mionjs\u002Frun-types\u002Fmocking",[1098,1153,1154],{},"Mock data generation",[1156,1157,1158],"tip",{},"Import mocking only from test files. A browser bundle that imports it ships the generator.",[405,1160,1162],{"id":1161},"supported-bundlers","Supported Bundlers",[410,1164,1165,1166,691],{},"The same plugin ships for other bundlers, one entry point each. Every entry takes the same options and generates the same code. The Vite entry also adds hot reload: editing a type refreshes every file that uses it, even a type only import or a global declared in a ",[425,1167,1168],{},".d.ts",[417,1170,1172],{"className":525,"code":1171,"language":527,"meta":423,"style":423},"import runtypes from '@mionjs\u002Fdevtools\u002Fruntypes\u002Frollup';\n\nexport default {\n  plugins: [\n    runtypes({\n      tsconfig: 'tsconfig.json',\n    }),\n  ],\n};\n",[425,1173,1174,1191,1195,1203,1211,1219,1233,1241,1247],{"__ignoreMap":423},[428,1175,1176,1178,1180,1182,1184,1187,1189],{"class":430,"line":431},[428,1177,535],{"class":534},[428,1179,568],{"class":542},[428,1181,571],{"class":534},[428,1183,552],{"class":538},[428,1185,1186],{"class":437},"@mionjs\u002Fdevtools\u002Fruntypes\u002Frollup",[428,1188,558],{"class":538},[428,1190,561],{"class":538},[428,1192,1193],{"class":430,"line":444},[428,1194,587],{"emptyLinePlaceholder":586},[428,1196,1197,1199,1201],{"class":430,"line":583},[428,1198,593],{"class":534},[428,1200,596],{"class":534},[428,1202,750],{"class":538},[428,1204,1205,1207,1209],{"class":430,"line":590},[428,1206,613],{"class":612},[428,1208,616],{"class":538},[428,1210,619],{"class":542},[428,1212,1213,1215,1217],{"class":430,"line":609},[428,1214,632],{"class":599},[428,1216,603],{"class":542},[428,1218,606],{"class":538},[428,1220,1221,1223,1225,1227,1229,1231],{"class":430,"line":622},[428,1222,642],{"class":612},[428,1224,616],{"class":538},[428,1226,552],{"class":538},[428,1228,649],{"class":437},[428,1230,558],{"class":538},[428,1232,654],{"class":538},[428,1234,1235,1237,1239],{"class":430,"line":629},[428,1236,660],{"class":538},[428,1238,663],{"class":542},[428,1240,654],{"class":538},[428,1242,1243,1245],{"class":430,"line":639},[428,1244,671],{"class":542},[428,1246,654],{"class":538},[428,1248,1249],{"class":430,"line":657},[428,1250,822],{"class":538},[1077,1252,1253,1262],{},[1080,1254,1255],{},[1083,1256,1257,1260],{},[1086,1258,1259],{},"Bundler",[1086,1261,1088],{},[1093,1263,1264,1272,1281,1291,1301,1311,1321,1330],{},[1083,1265,1266,1268],{},[1098,1267,147],{},[1098,1269,1270],{},[425,1271,576],{},[1083,1273,1274,1277],{},[1098,1275,1276],{},"Rollup",[1098,1278,1279],{},[425,1280,1186],{},[1083,1282,1283,1286],{},[1098,1284,1285],{},"Rolldown",[1098,1287,1288],{},[425,1289,1290],{},"@mionjs\u002Fdevtools\u002Fruntypes\u002Frolldown",[1083,1292,1293,1296],{},[1098,1294,1295],{},"webpack",[1098,1297,1298],{},[425,1299,1300],{},"@mionjs\u002Fdevtools\u002Fruntypes\u002Fwebpack",[1083,1302,1303,1306],{},[1098,1304,1305],{},"Rspack",[1098,1307,1308],{},[425,1309,1310],{},"@mionjs\u002Fdevtools\u002Fruntypes\u002Frspack",[1083,1312,1313,1316],{},[1098,1314,1315],{},"esbuild",[1098,1317,1318],{},[425,1319,1320],{},"@mionjs\u002Fdevtools\u002Fruntypes\u002Fesbuild",[1083,1322,1323,1325],{},[1098,1324,113],{},[1098,1326,1327],{},[425,1328,1329],{},"@mionjs\u002Fdevtools\u002Fruntypes\u002Fbun",[1083,1331,1332,1334],{},[1098,1333,151],{},[1098,1335,1336],{},[425,1337,1338],{},"@mionjs\u002Fdevtools\u002Fruntypes\u002Fnext",[1156,1340,1341,1342,1345,1346,1353],{},"For a tool not on the list, ",[425,1343,1344],{},"@mionjs\u002Fdevtools\u002Funplugin"," exposes the ",[1347,1348,1352],"a",{"href":1349,"rel":1350},"https:\u002F\u002Fgithub.com\u002Funjs\u002Funplugin",[1351],"nofollow","unplugin"," instance the others are built from.",[405,1355,1357],{"id":1356},"bundling-with-bun","Bundling With Bun",[410,1359,1360,1361,616],{},"Pass the Bun entry to ",[425,1362,1363],{},"Bun.build",[417,1365,1367],{"className":525,"code":1366,"language":527,"meta":423,"style":423},"import runtypes from '@mionjs\u002Fdevtools\u002Fruntypes\u002Fbun';\n\nawait Bun.build({\n  entrypoints: ['.\u002Fsrc\u002Findex.ts'],\n  outdir: '.\u002Fdist',\n  plugins: [runtypes()],\n});\n",[425,1368,1369,1385,1389,1406,1428,1444,1460],{"__ignoreMap":423},[428,1370,1371,1373,1375,1377,1379,1381,1383],{"class":430,"line":431},[428,1372,535],{"class":534},[428,1374,568],{"class":542},[428,1376,571],{"class":534},[428,1378,552],{"class":538},[428,1380,1329],{"class":437},[428,1382,558],{"class":538},[428,1384,561],{"class":538},[428,1386,1387],{"class":430,"line":444},[428,1388,587],{"emptyLinePlaceholder":586},[428,1390,1391,1394,1397,1399,1402,1404],{"class":430,"line":583},[428,1392,1393],{"class":534},"await",[428,1395,1396],{"class":542}," Bun",[428,1398,691],{"class":538},[428,1400,1401],{"class":599},"build",[428,1403,603],{"class":542},[428,1405,606],{"class":538},[428,1407,1408,1411,1413,1416,1418,1421,1423,1426],{"class":430,"line":590},[428,1409,1410],{"class":612},"  entrypoints",[428,1412,616],{"class":538},[428,1414,1415],{"class":542}," [",[428,1417,558],{"class":538},[428,1419,1420],{"class":437},".\u002Fsrc\u002Findex.ts",[428,1422,558],{"class":538},[428,1424,1425],{"class":542},"]",[428,1427,654],{"class":538},[428,1429,1430,1433,1435,1437,1440,1442],{"class":430,"line":609},[428,1431,1432],{"class":612},"  outdir",[428,1434,616],{"class":538},[428,1436,552],{"class":538},[428,1438,1439],{"class":437},".\u002Fdist",[428,1441,558],{"class":538},[428,1443,654],{"class":538},[428,1445,1446,1448,1450,1452,1455,1458],{"class":430,"line":622},[428,1447,613],{"class":612},[428,1449,616],{"class":538},[428,1451,1415],{"class":542},[428,1453,1454],{"class":599},"runtypes",[428,1456,1457],{"class":542},"()]",[428,1459,654],{"class":538},[428,1461,1462,1464,1466],{"class":430,"line":629},[428,1463,546],{"class":538},[428,1465,663],{"class":542},[428,1467,561],{"class":538},[405,1469,1471],{"id":1470},"running-and-testing-with-bun","Running and Testing With Bun",[410,1473,1474,1477,1478,1481,1482,1485],{},[425,1475,1476],{},"bun run"," and ",[425,1479,1480],{},"bun test"," have no bundle step, so register the plugin from a preload file. Point ",[425,1483,1484],{},"bunfig.toml"," at it and every file is compiled as Bun imports it:",[417,1487,1491],{"className":1488,"code":1489,"language":1490,"meta":423,"style":423},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","preload = [\".\u002Frt-preload.ts\"]\n\n[test]\npreload = [\".\u002Frt-preload.ts\"]\n","toml",[425,1492,1493,1498,1502,1507],{"__ignoreMap":423},[428,1494,1495],{"class":430,"line":431},[428,1496,1497],{},"preload = [\".\u002Frt-preload.ts\"]\n",[428,1499,1500],{"class":430,"line":444},[428,1501,587],{"emptyLinePlaceholder":586},[428,1503,1504],{"class":430,"line":583},[428,1505,1506],{},"[test]\n",[428,1508,1509],{"class":430,"line":590},[428,1510,1497],{},[417,1512,1514],{"className":525,"code":1513,"language":527,"meta":423,"style":423},"\u002F\u002F rt-preload.ts\nimport {plugin} from 'bun';\nimport runtypes from '@mionjs\u002Fdevtools\u002Fruntypes\u002Fbun';\n\nplugin(runtypes());\n",[425,1515,1516,1521,1543,1559,1563],{"__ignoreMap":423},[428,1517,1518],{"class":430,"line":431},[428,1519,1520],{"class":625},"\u002F\u002F rt-preload.ts\n",[428,1522,1523,1525,1527,1530,1532,1534,1536,1539,1541],{"class":430,"line":444},[428,1524,535],{"class":534},[428,1526,539],{"class":538},[428,1528,1529],{"class":542},"plugin",[428,1531,546],{"class":538},[428,1533,549],{"class":534},[428,1535,552],{"class":538},[428,1537,1538],{"class":437},"bun",[428,1540,558],{"class":538},[428,1542,561],{"class":538},[428,1544,1545,1547,1549,1551,1553,1555,1557],{"class":430,"line":583},[428,1546,535],{"class":534},[428,1548,568],{"class":542},[428,1550,571],{"class":534},[428,1552,552],{"class":538},[428,1554,1329],{"class":437},[428,1556,558],{"class":538},[428,1558,561],{"class":538},[428,1560,1561],{"class":430,"line":590},[428,1562,587],{"emptyLinePlaceholder":586},[428,1564,1565,1567,1569,1571,1574],{"class":430,"line":609},[428,1566,1529],{"class":599},[428,1568,603],{"class":542},[428,1570,1454],{"class":599},[428,1572,1573],{"class":542},"())",[428,1575,561],{"class":538},[1156,1577,1578,1581],{},[425,1579,1580],{},"await plugin(...)"," works too, but is not needed: no file loads before the plugin is ready.",[405,1583,1585],{"id":1584},"setting-up-nextjs","Setting Up Next.js",[410,1587,1588,1589,1477,1592,1595,1596,691],{},"Turbopack, the bundler Next 16 uses by default, takes no plugins, so Next.js has its own entry. One wrapper covers Turbopack and webpack, so ",[425,1590,1591],{},"next dev --webpack",[425,1593,1594],{},"next build --webpack"," keep working. Options go in a second argument, the same ones every other entry takes: ",[425,1597,1598],{},"withRunTypes({reactStrictMode: true}, {tsconfig: 'tsconfig.json'})",[417,1600,1602],{"className":525,"code":1601,"language":527,"meta":423,"style":423},"import {withRunTypes} from '@mionjs\u002Fdevtools\u002Fruntypes\u002Fnext';\n\nexport default await withRunTypes({\n  reactStrictMode: true,\n});\n",[425,1603,1604,1625,1629,1645,1658],{"__ignoreMap":423},[428,1605,1606,1608,1610,1613,1615,1617,1619,1621,1623],{"class":430,"line":431},[428,1607,535],{"class":534},[428,1609,539],{"class":538},[428,1611,1612],{"class":542},"withRunTypes",[428,1614,546],{"class":538},[428,1616,549],{"class":534},[428,1618,552],{"class":538},[428,1620,1338],{"class":437},[428,1622,558],{"class":538},[428,1624,561],{"class":538},[428,1626,1627],{"class":430,"line":444},[428,1628,587],{"emptyLinePlaceholder":586},[428,1630,1631,1633,1635,1638,1641,1643],{"class":430,"line":583},[428,1632,593],{"class":534},[428,1634,596],{"class":534},[428,1636,1637],{"class":534}," await",[428,1639,1640],{"class":599}," withRunTypes",[428,1642,603],{"class":542},[428,1644,606],{"class":538},[428,1646,1647,1650,1652,1656],{"class":430,"line":590},[428,1648,1649],{"class":612},"  reactStrictMode",[428,1651,616],{"class":538},[428,1653,1655],{"class":1654},"sfNiH"," true",[428,1657,654],{"class":538},[428,1659,1660,1662,1664],{"class":430,"line":609},[428,1661,546],{"class":538},[428,1663,663],{"class":542},[428,1665,561],{"class":538},[505,1667,1668,1669,1671],{},"The ",[425,1670,1393],{}," matters: RunTypes reads your types before Turbopack starts compiling.",[405,1673,1675],{"id":1674},"nextjs-in-a-monorepo","Next.js in a Monorepo",[410,1677,1678,1679,1682],{},"Point Turbopack at the folder that holds your ",[425,1680,1681],{},"node_modules"," and any shared code you import. Turbopack will not compile files outside that folder.",[417,1684,1686],{"className":525,"code":1685,"language":527,"meta":423,"style":423},"import path from 'node:path';\n\nexport default await withRunTypes({\n  turbopack: {root: path.resolve(import.meta.dirname, '..')},\n});\n",[425,1687,1688,1706,1710,1724,1774],{"__ignoreMap":423},[428,1689,1690,1692,1695,1697,1699,1702,1704],{"class":430,"line":431},[428,1691,535],{"class":534},[428,1693,1694],{"class":542}," path ",[428,1696,571],{"class":534},[428,1698,552],{"class":538},[428,1700,1701],{"class":437},"node:path",[428,1703,558],{"class":538},[428,1705,561],{"class":538},[428,1707,1708],{"class":430,"line":444},[428,1709,587],{"emptyLinePlaceholder":586},[428,1711,1712,1714,1716,1718,1720,1722],{"class":430,"line":583},[428,1713,593],{"class":534},[428,1715,596],{"class":534},[428,1717,1637],{"class":534},[428,1719,1640],{"class":599},[428,1721,603],{"class":542},[428,1723,606],{"class":538},[428,1725,1726,1729,1731,1733,1736,1738,1741,1743,1746,1748,1750,1752,1755,1757,1760,1762,1764,1767,1769,1771],{"class":430,"line":590},[428,1727,1728],{"class":612},"  turbopack",[428,1730,616],{"class":538},[428,1732,539],{"class":538},[428,1734,1735],{"class":612},"root",[428,1737,616],{"class":538},[428,1739,1740],{"class":542}," path",[428,1742,691],{"class":538},[428,1744,1745],{"class":599},"resolve",[428,1747,603],{"class":542},[428,1749,535],{"class":534},[428,1751,691],{"class":538},[428,1753,1754],{"class":542},"meta",[428,1756,691],{"class":538},[428,1758,1759],{"class":542},"dirname",[428,1761,715],{"class":538},[428,1763,552],{"class":538},[428,1765,1766],{"class":437},"..",[428,1768,558],{"class":538},[428,1770,663],{"class":542},[428,1772,1773],{"class":538},"},\n",[428,1775,1776,1778,1780],{"class":430,"line":609},[428,1777,546],{"class":538},[428,1779,663],{"class":542},[428,1781,561],{"class":538},[1783,1784,1785],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}","Install the package + Vite plugin and generate your first validator from a TypeScript type.","md",null,{"toc":24},{"title":17,"description":1786},"LnH_vub-EtaGeaWL2W7ikq08ovS6XAYF4tPAcXuLqCE",1793324363741]