[{"data":1,"prerenderedAt":2335},["ShallowReactive",2],{"navigation_docs":3,"-runtypes-ai-integration-workflow-and-commands":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":276,"body":401,"description":2329,"extension":2330,"links":2331,"meta":2332,"navigation":565,"path":271,"seo":2333,"stem":277,"__hash__":2334},"docs\u002F02.runtypes\u002F05.ai-integration\u002F01.workflow-and-commands.md",{"type":402,"value":403},"minimark",[404,415,432,445,500,1504,1977,1982,2007,2043,2063,2067,2076,2114,2122,2126,2132,2257,2276,2283,2286,2309,2312,2325],[405,406,409],"div",{"className":407},[408],"ai-experimental",[410,411,414],"span",{"className":412},[413],"rt-badge-experimental","Experimental",[416,417,421,427],"card-group",{"className":418},[419,420],"sm:grid-cols-2","ai-artifacts",[422,423,426],"card",{"icon":424,"title":425,"to":280},"i-lucide-message-square-text","AI-generated human-readable labels & errors","Field labels and error messages for your forms and UI, kept in sync with your type.",[422,428,431],{"icon":429,"title":430,"to":284},"i-lucide-dices","AI-generated real-world mock data","Believable sample data (real names, emails, addresses) for your tests and demos, every value valid for its field.",[405,433,436,441],{"className":434},[435],"ai-steps-head",[437,438,440],"h3",{"id":439},"how-enrichment-works","How Enrichment Works",[442,443,444],"p",{},"The compiler can't invent a field label, an error message or a sample name, so your agent fills those in.",[405,446,449,468,484],{"className":447},[448],"ai-steps",[405,450,453,465],{"className":451},[452],"ai-step",[442,454,455,460],{},[410,456,459],{"className":457},[458],"ai-step-num","1",[410,461,464],{"className":462},[463],"ai-step-title","The compiler scaffolds",[442,466,467],{},"From your type it writes a source file, every field in place, correctly typed, each blank marked.",[405,469,471,481],{"className":470},[452],[442,472,473,477],{},[410,474,476],{"className":475},[458],"2",[410,478,480],{"className":479},[463],"The AI agent fills the gaps",[442,482,483],{},"The agent fills the blanks with labels, messages and sample values, guided by the type.",[405,485,487,497],{"className":486},[452],[442,488,489,493],{},[410,490,492],{"className":491},[458],"3",[410,494,496],{"className":495},[463],"The compiler checks & keeps in sync",[442,498,499],{},"It checks every value against the type and updates the file as your type changes, keeping your edits.",[422,501,504],{"icon":424,"title":279,"className":502},[503],"rt-ai-example",[405,505,508,696,1151],{"className":506},[507],"rt-ai-example-cols",[509,510,511],"code-group",{},[512,513,519],"pre",{"className":514,"code":515,"filename":516,"language":517,"meta":518,"style":518},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type * as TF from '@mionjs\u002Frun-types\u002Fformats';\n\n\u002F\u002F models\u002Fuser.ts\nexport interface User {\n  name: TF.String\u003C{ minLength: 2; maxLength: 60 }>;\n  age: TF.Number\u003C{ min: 0; max: 120 }>;\n  email: TF.Email;\n}\n","Your type","ts","",[520,521,522,560,567,574,591,636,673,690],"code",{"__ignoreMap":518},[410,523,526,530,533,537,540,544,547,550,554,557],{"class":524,"line":525},"line",1,[410,527,529],{"class":528},"s7zQu","import",[410,531,532],{"class":528}," type",[410,534,536],{"class":535},"sMK4o"," *",[410,538,539],{"class":528}," as",[410,541,543],{"class":542},"sTEyZ"," TF ",[410,545,546],{"class":528},"from",[410,548,549],{"class":535}," '",[410,551,553],{"class":552},"sfazB","@mionjs\u002Frun-types\u002Fformats",[410,555,556],{"class":535},"'",[410,558,559],{"class":535},";\n",[410,561,563],{"class":524,"line":562},2,[410,564,566],{"emptyLinePlaceholder":565},true,"\n",[410,568,570],{"class":524,"line":569},3,[410,571,573],{"class":572},"sHwdD","\u002F\u002F models\u002Fuser.ts\n",[410,575,577,580,584,588],{"class":524,"line":576},4,[410,578,579],{"class":528},"export",[410,581,583],{"class":582},"spNyl"," interface",[410,585,587],{"class":586},"sBMFI"," User",[410,589,590],{"class":535}," {\n",[410,592,594,598,601,604,607,610,613,616,618,622,625,628,630,633],{"class":524,"line":593},5,[410,595,597],{"class":596},"swJcz","  name",[410,599,600],{"class":535},":",[410,602,603],{"class":586}," TF",[410,605,606],{"class":535},".",[410,608,609],{"class":586},"String",[410,611,612],{"class":535},"\u003C{",[410,614,615],{"class":596}," minLength",[410,617,600],{"class":535},[410,619,621],{"class":620},"sbssI"," 2",[410,623,624],{"class":535},";",[410,626,627],{"class":596}," maxLength",[410,629,600],{"class":535},[410,631,632],{"class":620}," 60",[410,634,635],{"class":535}," }>;\n",[410,637,639,642,644,646,648,651,653,656,658,661,663,666,668,671],{"class":524,"line":638},6,[410,640,641],{"class":596},"  age",[410,643,600],{"class":535},[410,645,603],{"class":586},[410,647,606],{"class":535},[410,649,650],{"class":586},"Number",[410,652,612],{"class":535},[410,654,655],{"class":596}," min",[410,657,600],{"class":535},[410,659,660],{"class":620}," 0",[410,662,624],{"class":535},[410,664,665],{"class":596}," max",[410,667,600],{"class":535},[410,669,670],{"class":620}," 120",[410,672,635],{"class":535},[410,674,676,679,681,683,685,688],{"class":524,"line":675},7,[410,677,678],{"class":596},"  email",[410,680,600],{"class":535},[410,682,603],{"class":586},[410,684,606],{"class":535},[410,686,687],{"class":586},"Email",[410,689,559],{"class":535},[410,691,693],{"class":524,"line":692},8,[410,694,695],{"class":535},"}\n",[509,697,698],{},[512,699,702],{"className":514,"code":700,"filename":701,"language":517,"meta":518,"style":518},"import type { FriendlyText } from '@mionjs\u002Frun-types';\nimport type { User } from '.\u002Fuser';\n\n\u002F\u002F @todo: generated skeleton — fill in real data, then delete this line\nexport const friendlyUser: FriendlyText\u003CUser> = {\n  rt$label: '',\n  rt$errors: { type: '' },\n  name: {\n    rt$label: '',\n    rt$errors: {\n      type: '',\n      minLength: { one: '', other: '' },\n      maxLength: { one: '', other: '' },\n    },\n  },\n  age: {\n    rt$label: '',\n    rt$errors: {\n      type: '',\n      min: { one: '', other: '' },\n      max: { one: '', other: '' },\n    },\n  },\n  email: {\n    rt$label: '',\n    rt$errors: {\n      type: '',\n      minLength: { one: '', other: '' },\n      maxLength: { one: '', other: '' },\n      pattern: '',\n    },\n  },\n};\n","Generated by the compiler",[520,703,704,731,754,758,763,791,804,822,830,842,852,864,893,919,925,931,940,951,960,971,997,1023,1028,1033,1042,1053,1062,1073,1098,1123,1135,1140,1145],{"__ignoreMap":518},[410,705,706,708,710,713,716,719,722,724,727,729],{"class":524,"line":525},[410,707,529],{"class":528},[410,709,532],{"class":528},[410,711,712],{"class":535}," {",[410,714,715],{"class":542}," FriendlyText",[410,717,718],{"class":535}," }",[410,720,721],{"class":528}," from",[410,723,549],{"class":535},[410,725,726],{"class":552},"@mionjs\u002Frun-types",[410,728,556],{"class":535},[410,730,559],{"class":535},[410,732,733,735,737,739,741,743,745,747,750,752],{"class":524,"line":562},[410,734,529],{"class":528},[410,736,532],{"class":528},[410,738,712],{"class":535},[410,740,587],{"class":542},[410,742,718],{"class":535},[410,744,721],{"class":528},[410,746,549],{"class":535},[410,748,749],{"class":552},".\u002Fuser",[410,751,556],{"class":535},[410,753,559],{"class":535},[410,755,756],{"class":524,"line":569},[410,757,566],{"emptyLinePlaceholder":565},[410,759,760],{"class":524,"line":576},[410,761,762],{"class":572},"\u002F\u002F @todo: generated skeleton — fill in real data, then delete this line\n",[410,764,765,767,770,773,775,777,780,783,786,789],{"class":524,"line":593},[410,766,579],{"class":528},[410,768,769],{"class":582}," const",[410,771,772],{"class":542}," friendlyUser",[410,774,600],{"class":535},[410,776,715],{"class":586},[410,778,779],{"class":535},"\u003C",[410,781,782],{"class":586},"User",[410,784,785],{"class":535},">",[410,787,788],{"class":535}," =",[410,790,590],{"class":535},[410,792,793,796,798,801],{"class":524,"line":638},[410,794,795],{"class":596},"  rt$label",[410,797,600],{"class":535},[410,799,800],{"class":535}," ''",[410,802,803],{"class":535},",\n",[410,805,806,809,811,813,815,817,819],{"class":524,"line":675},[410,807,808],{"class":596},"  rt$errors",[410,810,600],{"class":535},[410,812,712],{"class":535},[410,814,532],{"class":596},[410,816,600],{"class":535},[410,818,800],{"class":535},[410,820,821],{"class":535}," },\n",[410,823,824,826,828],{"class":524,"line":692},[410,825,597],{"class":596},[410,827,600],{"class":535},[410,829,590],{"class":535},[410,831,833,836,838,840],{"class":524,"line":832},9,[410,834,835],{"class":596},"    rt$label",[410,837,600],{"class":535},[410,839,800],{"class":535},[410,841,803],{"class":535},[410,843,845,848,850],{"class":524,"line":844},10,[410,846,847],{"class":596},"    rt$errors",[410,849,600],{"class":535},[410,851,590],{"class":535},[410,853,855,858,860,862],{"class":524,"line":854},11,[410,856,857],{"class":596},"      type",[410,859,600],{"class":535},[410,861,800],{"class":535},[410,863,803],{"class":535},[410,865,867,870,872,874,877,879,881,884,887,889,891],{"class":524,"line":866},12,[410,868,869],{"class":596},"      minLength",[410,871,600],{"class":535},[410,873,712],{"class":535},[410,875,876],{"class":596}," one",[410,878,600],{"class":535},[410,880,800],{"class":535},[410,882,883],{"class":535},",",[410,885,886],{"class":596}," other",[410,888,600],{"class":535},[410,890,800],{"class":535},[410,892,821],{"class":535},[410,894,896,899,901,903,905,907,909,911,913,915,917],{"class":524,"line":895},13,[410,897,898],{"class":596},"      maxLength",[410,900,600],{"class":535},[410,902,712],{"class":535},[410,904,876],{"class":596},[410,906,600],{"class":535},[410,908,800],{"class":535},[410,910,883],{"class":535},[410,912,886],{"class":596},[410,914,600],{"class":535},[410,916,800],{"class":535},[410,918,821],{"class":535},[410,920,922],{"class":524,"line":921},14,[410,923,924],{"class":535},"    },\n",[410,926,928],{"class":524,"line":927},15,[410,929,930],{"class":535},"  },\n",[410,932,934,936,938],{"class":524,"line":933},16,[410,935,641],{"class":596},[410,937,600],{"class":535},[410,939,590],{"class":535},[410,941,943,945,947,949],{"class":524,"line":942},17,[410,944,835],{"class":596},[410,946,600],{"class":535},[410,948,800],{"class":535},[410,950,803],{"class":535},[410,952,954,956,958],{"class":524,"line":953},18,[410,955,847],{"class":596},[410,957,600],{"class":535},[410,959,590],{"class":535},[410,961,963,965,967,969],{"class":524,"line":962},19,[410,964,857],{"class":596},[410,966,600],{"class":535},[410,968,800],{"class":535},[410,970,803],{"class":535},[410,972,974,977,979,981,983,985,987,989,991,993,995],{"class":524,"line":973},20,[410,975,976],{"class":596},"      min",[410,978,600],{"class":535},[410,980,712],{"class":535},[410,982,876],{"class":596},[410,984,600],{"class":535},[410,986,800],{"class":535},[410,988,883],{"class":535},[410,990,886],{"class":596},[410,992,600],{"class":535},[410,994,800],{"class":535},[410,996,821],{"class":535},[410,998,1000,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021],{"class":524,"line":999},21,[410,1001,1002],{"class":596},"      max",[410,1004,600],{"class":535},[410,1006,712],{"class":535},[410,1008,876],{"class":596},[410,1010,600],{"class":535},[410,1012,800],{"class":535},[410,1014,883],{"class":535},[410,1016,886],{"class":596},[410,1018,600],{"class":535},[410,1020,800],{"class":535},[410,1022,821],{"class":535},[410,1024,1026],{"class":524,"line":1025},22,[410,1027,924],{"class":535},[410,1029,1031],{"class":524,"line":1030},23,[410,1032,930],{"class":535},[410,1034,1036,1038,1040],{"class":524,"line":1035},24,[410,1037,678],{"class":596},[410,1039,600],{"class":535},[410,1041,590],{"class":535},[410,1043,1045,1047,1049,1051],{"class":524,"line":1044},25,[410,1046,835],{"class":596},[410,1048,600],{"class":535},[410,1050,800],{"class":535},[410,1052,803],{"class":535},[410,1054,1056,1058,1060],{"class":524,"line":1055},26,[410,1057,847],{"class":596},[410,1059,600],{"class":535},[410,1061,590],{"class":535},[410,1063,1065,1067,1069,1071],{"class":524,"line":1064},27,[410,1066,857],{"class":596},[410,1068,600],{"class":535},[410,1070,800],{"class":535},[410,1072,803],{"class":535},[410,1074,1076,1078,1080,1082,1084,1086,1088,1090,1092,1094,1096],{"class":524,"line":1075},28,[410,1077,869],{"class":596},[410,1079,600],{"class":535},[410,1081,712],{"class":535},[410,1083,876],{"class":596},[410,1085,600],{"class":535},[410,1087,800],{"class":535},[410,1089,883],{"class":535},[410,1091,886],{"class":596},[410,1093,600],{"class":535},[410,1095,800],{"class":535},[410,1097,821],{"class":535},[410,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121],{"class":524,"line":1100},29,[410,1102,898],{"class":596},[410,1104,600],{"class":535},[410,1106,712],{"class":535},[410,1108,876],{"class":596},[410,1110,600],{"class":535},[410,1112,800],{"class":535},[410,1114,883],{"class":535},[410,1116,886],{"class":596},[410,1118,600],{"class":535},[410,1120,800],{"class":535},[410,1122,821],{"class":535},[410,1124,1126,1129,1131,1133],{"class":524,"line":1125},30,[410,1127,1128],{"class":596},"      pattern",[410,1130,600],{"class":535},[410,1132,800],{"class":535},[410,1134,803],{"class":535},[410,1136,1138],{"class":524,"line":1137},31,[410,1139,924],{"class":535},[410,1141,1143],{"class":524,"line":1142},32,[410,1144,930],{"class":535},[410,1146,1148],{"class":524,"line":1147},33,[410,1149,1150],{"class":535},"};\n",[509,1152,1153],{},[512,1154,1157],{"className":514,"code":1155,"filename":1156,"language":517,"meta":518,"style":518},"import type { FriendlyText } from '@mionjs\u002Frun-types';\nimport type { User } from '.\u002Fuser';\n\nexport const friendlyUser: FriendlyText\u003CUser> = {\n  rt$label: 'User account',\n  rt$errors: { type: '' },\n  name: {\n    rt$label: 'Full name',\n    rt$errors: {\n      type: '$[label] must be a valid name',\n      minLength: '$[label] needs at least $[val] characters',\n      maxLength: '$[label] allows at most $[val] characters',\n    },\n  },\n  age: {\n    rt$label: 'Age',\n    rt$errors: {\n      type: '$[label] must be a number',\n      min: '$[label] must be at least $[val]',\n      max: '$[label] must be no more than $[val]',\n    },\n  },\n  email: {\n    rt$label: 'Email',\n    rt$errors: { type: '', minLength: '', maxLength: '', pattern: 'Enter a valid email address' },\n  },\n};\n","Filled by the agent",[520,1158,1159,1181,1203,1207,1229,1244,1260,1268,1283,1291,1306,1321,1336,1340,1344,1352,1367,1375,1390,1405,1420,1424,1428,1436,1450,1496,1500],{"__ignoreMap":518},[410,1160,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179],{"class":524,"line":525},[410,1162,529],{"class":528},[410,1164,532],{"class":528},[410,1166,712],{"class":535},[410,1168,715],{"class":542},[410,1170,718],{"class":535},[410,1172,721],{"class":528},[410,1174,549],{"class":535},[410,1176,726],{"class":552},[410,1178,556],{"class":535},[410,1180,559],{"class":535},[410,1182,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201],{"class":524,"line":562},[410,1184,529],{"class":528},[410,1186,532],{"class":528},[410,1188,712],{"class":535},[410,1190,587],{"class":542},[410,1192,718],{"class":535},[410,1194,721],{"class":528},[410,1196,549],{"class":535},[410,1198,749],{"class":552},[410,1200,556],{"class":535},[410,1202,559],{"class":535},[410,1204,1205],{"class":524,"line":569},[410,1206,566],{"emptyLinePlaceholder":565},[410,1208,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227],{"class":524,"line":576},[410,1210,579],{"class":528},[410,1212,769],{"class":582},[410,1214,772],{"class":542},[410,1216,600],{"class":535},[410,1218,715],{"class":586},[410,1220,779],{"class":535},[410,1222,782],{"class":586},[410,1224,785],{"class":535},[410,1226,788],{"class":535},[410,1228,590],{"class":535},[410,1230,1231,1233,1235,1237,1240,1242],{"class":524,"line":593},[410,1232,795],{"class":596},[410,1234,600],{"class":535},[410,1236,549],{"class":535},[410,1238,1239],{"class":552},"User account",[410,1241,556],{"class":535},[410,1243,803],{"class":535},[410,1245,1246,1248,1250,1252,1254,1256,1258],{"class":524,"line":638},[410,1247,808],{"class":596},[410,1249,600],{"class":535},[410,1251,712],{"class":535},[410,1253,532],{"class":596},[410,1255,600],{"class":535},[410,1257,800],{"class":535},[410,1259,821],{"class":535},[410,1261,1262,1264,1266],{"class":524,"line":675},[410,1263,597],{"class":596},[410,1265,600],{"class":535},[410,1267,590],{"class":535},[410,1269,1270,1272,1274,1276,1279,1281],{"class":524,"line":692},[410,1271,835],{"class":596},[410,1273,600],{"class":535},[410,1275,549],{"class":535},[410,1277,1278],{"class":552},"Full name",[410,1280,556],{"class":535},[410,1282,803],{"class":535},[410,1284,1285,1287,1289],{"class":524,"line":832},[410,1286,847],{"class":596},[410,1288,600],{"class":535},[410,1290,590],{"class":535},[410,1292,1293,1295,1297,1299,1302,1304],{"class":524,"line":844},[410,1294,857],{"class":596},[410,1296,600],{"class":535},[410,1298,549],{"class":535},[410,1300,1301],{"class":552},"$[label] must be a valid name",[410,1303,556],{"class":535},[410,1305,803],{"class":535},[410,1307,1308,1310,1312,1314,1317,1319],{"class":524,"line":854},[410,1309,869],{"class":596},[410,1311,600],{"class":535},[410,1313,549],{"class":535},[410,1315,1316],{"class":552},"$[label] needs at least $[val] characters",[410,1318,556],{"class":535},[410,1320,803],{"class":535},[410,1322,1323,1325,1327,1329,1332,1334],{"class":524,"line":866},[410,1324,898],{"class":596},[410,1326,600],{"class":535},[410,1328,549],{"class":535},[410,1330,1331],{"class":552},"$[label] allows at most $[val] characters",[410,1333,556],{"class":535},[410,1335,803],{"class":535},[410,1337,1338],{"class":524,"line":895},[410,1339,924],{"class":535},[410,1341,1342],{"class":524,"line":921},[410,1343,930],{"class":535},[410,1345,1346,1348,1350],{"class":524,"line":927},[410,1347,641],{"class":596},[410,1349,600],{"class":535},[410,1351,590],{"class":535},[410,1353,1354,1356,1358,1360,1363,1365],{"class":524,"line":933},[410,1355,835],{"class":596},[410,1357,600],{"class":535},[410,1359,549],{"class":535},[410,1361,1362],{"class":552},"Age",[410,1364,556],{"class":535},[410,1366,803],{"class":535},[410,1368,1369,1371,1373],{"class":524,"line":942},[410,1370,847],{"class":596},[410,1372,600],{"class":535},[410,1374,590],{"class":535},[410,1376,1377,1379,1381,1383,1386,1388],{"class":524,"line":953},[410,1378,857],{"class":596},[410,1380,600],{"class":535},[410,1382,549],{"class":535},[410,1384,1385],{"class":552},"$[label] must be a number",[410,1387,556],{"class":535},[410,1389,803],{"class":535},[410,1391,1392,1394,1396,1398,1401,1403],{"class":524,"line":962},[410,1393,976],{"class":596},[410,1395,600],{"class":535},[410,1397,549],{"class":535},[410,1399,1400],{"class":552},"$[label] must be at least $[val]",[410,1402,556],{"class":535},[410,1404,803],{"class":535},[410,1406,1407,1409,1411,1413,1416,1418],{"class":524,"line":973},[410,1408,1002],{"class":596},[410,1410,600],{"class":535},[410,1412,549],{"class":535},[410,1414,1415],{"class":552},"$[label] must be no more than $[val]",[410,1417,556],{"class":535},[410,1419,803],{"class":535},[410,1421,1422],{"class":524,"line":999},[410,1423,924],{"class":535},[410,1425,1426],{"class":524,"line":1025},[410,1427,930],{"class":535},[410,1429,1430,1432,1434],{"class":524,"line":1030},[410,1431,678],{"class":596},[410,1433,600],{"class":535},[410,1435,590],{"class":535},[410,1437,1438,1440,1442,1444,1446,1448],{"class":524,"line":1035},[410,1439,835],{"class":596},[410,1441,600],{"class":535},[410,1443,549],{"class":535},[410,1445,687],{"class":552},[410,1447,556],{"class":535},[410,1449,803],{"class":535},[410,1451,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1485,1487,1489,1492,1494],{"class":524,"line":1044},[410,1453,847],{"class":596},[410,1455,600],{"class":535},[410,1457,712],{"class":535},[410,1459,532],{"class":596},[410,1461,600],{"class":535},[410,1463,800],{"class":535},[410,1465,883],{"class":535},[410,1467,615],{"class":596},[410,1469,600],{"class":535},[410,1471,800],{"class":535},[410,1473,883],{"class":535},[410,1475,627],{"class":596},[410,1477,600],{"class":535},[410,1479,800],{"class":535},[410,1481,883],{"class":535},[410,1483,1484],{"class":596}," pattern",[410,1486,600],{"class":535},[410,1488,549],{"class":535},[410,1490,1491],{"class":552},"Enter a valid email address",[410,1493,556],{"class":535},[410,1495,821],{"class":535},[410,1497,1498],{"class":524,"line":1055},[410,1499,930],{"class":535},[410,1501,1502],{"class":524,"line":1064},[410,1503,1150],{"class":535},[422,1505,1507],{"icon":429,"title":283,"className":1506},[503],[405,1508,1510,1634,1772],{"className":1509},[507],[509,1511,1512],{},[512,1513,1514],{"className":514,"code":515,"filename":516,"language":517,"meta":518,"style":518},[520,1515,1516,1538,1542,1546,1556,1586,1616,1630],{"__ignoreMap":518},[410,1517,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536],{"class":524,"line":525},[410,1519,529],{"class":528},[410,1521,532],{"class":528},[410,1523,536],{"class":535},[410,1525,539],{"class":528},[410,1527,543],{"class":542},[410,1529,546],{"class":528},[410,1531,549],{"class":535},[410,1533,553],{"class":552},[410,1535,556],{"class":535},[410,1537,559],{"class":535},[410,1539,1540],{"class":524,"line":562},[410,1541,566],{"emptyLinePlaceholder":565},[410,1543,1544],{"class":524,"line":569},[410,1545,573],{"class":572},[410,1547,1548,1550,1552,1554],{"class":524,"line":576},[410,1549,579],{"class":528},[410,1551,583],{"class":582},[410,1553,587],{"class":586},[410,1555,590],{"class":535},[410,1557,1558,1560,1562,1564,1566,1568,1570,1572,1574,1576,1578,1580,1582,1584],{"class":524,"line":593},[410,1559,597],{"class":596},[410,1561,600],{"class":535},[410,1563,603],{"class":586},[410,1565,606],{"class":535},[410,1567,609],{"class":586},[410,1569,612],{"class":535},[410,1571,615],{"class":596},[410,1573,600],{"class":535},[410,1575,621],{"class":620},[410,1577,624],{"class":535},[410,1579,627],{"class":596},[410,1581,600],{"class":535},[410,1583,632],{"class":620},[410,1585,635],{"class":535},[410,1587,1588,1590,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614],{"class":524,"line":638},[410,1589,641],{"class":596},[410,1591,600],{"class":535},[410,1593,603],{"class":586},[410,1595,606],{"class":535},[410,1597,650],{"class":586},[410,1599,612],{"class":535},[410,1601,655],{"class":596},[410,1603,600],{"class":535},[410,1605,660],{"class":620},[410,1607,624],{"class":535},[410,1609,665],{"class":596},[410,1611,600],{"class":535},[410,1613,670],{"class":620},[410,1615,635],{"class":535},[410,1617,1618,1620,1622,1624,1626,1628],{"class":524,"line":675},[410,1619,678],{"class":596},[410,1621,600],{"class":535},[410,1623,603],{"class":586},[410,1625,606],{"class":535},[410,1627,687],{"class":586},[410,1629,559],{"class":535},[410,1631,1632],{"class":524,"line":692},[410,1633,695],{"class":535},[509,1635,1636],{},[512,1637,1639],{"className":514,"code":1638,"filename":701,"language":517,"meta":518,"style":518},"import type { MockData } from '@mionjs\u002Frun-types';\nimport type { User } from '.\u002Fuser';\n\n\u002F\u002F @todo: generated skeleton — fill in real data, then delete this line\nexport const mockUser: MockData\u003CUser> = {\n  name: { pool: [] },\n  age: { pool: [] },\n  email: { pool: [] },\n};\n",[520,1640,1641,1664,1686,1690,1694,1717,1736,1752,1768],{"__ignoreMap":518},[410,1642,1643,1645,1647,1649,1652,1654,1656,1658,1660,1662],{"class":524,"line":525},[410,1644,529],{"class":528},[410,1646,532],{"class":528},[410,1648,712],{"class":535},[410,1650,1651],{"class":542}," MockData",[410,1653,718],{"class":535},[410,1655,721],{"class":528},[410,1657,549],{"class":535},[410,1659,726],{"class":552},[410,1661,556],{"class":535},[410,1663,559],{"class":535},[410,1665,1666,1668,1670,1672,1674,1676,1678,1680,1682,1684],{"class":524,"line":562},[410,1667,529],{"class":528},[410,1669,532],{"class":528},[410,1671,712],{"class":535},[410,1673,587],{"class":542},[410,1675,718],{"class":535},[410,1677,721],{"class":528},[410,1679,549],{"class":535},[410,1681,749],{"class":552},[410,1683,556],{"class":535},[410,1685,559],{"class":535},[410,1687,1688],{"class":524,"line":569},[410,1689,566],{"emptyLinePlaceholder":565},[410,1691,1692],{"class":524,"line":576},[410,1693,762],{"class":572},[410,1695,1696,1698,1700,1703,1705,1707,1709,1711,1713,1715],{"class":524,"line":593},[410,1697,579],{"class":528},[410,1699,769],{"class":582},[410,1701,1702],{"class":542}," mockUser",[410,1704,600],{"class":535},[410,1706,1651],{"class":586},[410,1708,779],{"class":535},[410,1710,782],{"class":586},[410,1712,785],{"class":535},[410,1714,788],{"class":535},[410,1716,590],{"class":535},[410,1718,1719,1721,1723,1725,1728,1730,1733],{"class":524,"line":638},[410,1720,597],{"class":596},[410,1722,600],{"class":535},[410,1724,712],{"class":535},[410,1726,1727],{"class":596}," pool",[410,1729,600],{"class":535},[410,1731,1732],{"class":542}," [] ",[410,1734,1735],{"class":535},"},\n",[410,1737,1738,1740,1742,1744,1746,1748,1750],{"class":524,"line":675},[410,1739,641],{"class":596},[410,1741,600],{"class":535},[410,1743,712],{"class":535},[410,1745,1727],{"class":596},[410,1747,600],{"class":535},[410,1749,1732],{"class":542},[410,1751,1735],{"class":535},[410,1753,1754,1756,1758,1760,1762,1764,1766],{"class":524,"line":692},[410,1755,678],{"class":596},[410,1757,600],{"class":535},[410,1759,712],{"class":535},[410,1761,1727],{"class":596},[410,1763,600],{"class":535},[410,1765,1732],{"class":542},[410,1767,1735],{"class":535},[410,1769,1770],{"class":524,"line":832},[410,1771,1150],{"class":535},[509,1773,1774],{},[512,1775,1777],{"className":514,"code":1776,"filename":1156,"language":517,"meta":518,"style":518},"import type { MockData } from '@mionjs\u002Frun-types';\nimport type { User } from '.\u002Fuser';\n\nexport const mockUser: MockData\u003CUser> = {\n  name: { pool: ['Alice Martin', 'Liang Wei', 'Fatima Noor', \u002F* …50+ *\u002F] },\n  age: { pool: [], min: 18, max: 95 },\n  email: { pool: ['alice@example.com', 'liang@corp.io', \u002F* … *\u002F] },\n};\n",[520,1778,1779,1801,1823,1827,1849,1899,1934,1973],{"__ignoreMap":518},[410,1780,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799],{"class":524,"line":525},[410,1782,529],{"class":528},[410,1784,532],{"class":528},[410,1786,712],{"class":535},[410,1788,1651],{"class":542},[410,1790,718],{"class":535},[410,1792,721],{"class":528},[410,1794,549],{"class":535},[410,1796,726],{"class":552},[410,1798,556],{"class":535},[410,1800,559],{"class":535},[410,1802,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821],{"class":524,"line":562},[410,1804,529],{"class":528},[410,1806,532],{"class":528},[410,1808,712],{"class":535},[410,1810,587],{"class":542},[410,1812,718],{"class":535},[410,1814,721],{"class":528},[410,1816,549],{"class":535},[410,1818,749],{"class":552},[410,1820,556],{"class":535},[410,1822,559],{"class":535},[410,1824,1825],{"class":524,"line":569},[410,1826,566],{"emptyLinePlaceholder":565},[410,1828,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847],{"class":524,"line":576},[410,1830,579],{"class":528},[410,1832,769],{"class":582},[410,1834,1702],{"class":542},[410,1836,600],{"class":535},[410,1838,1651],{"class":586},[410,1840,779],{"class":535},[410,1842,782],{"class":586},[410,1844,785],{"class":535},[410,1846,788],{"class":535},[410,1848,590],{"class":535},[410,1850,1851,1853,1855,1857,1859,1861,1864,1866,1869,1871,1873,1875,1878,1880,1882,1884,1887,1889,1891,1894,1897],{"class":524,"line":593},[410,1852,597],{"class":596},[410,1854,600],{"class":535},[410,1856,712],{"class":535},[410,1858,1727],{"class":596},[410,1860,600],{"class":535},[410,1862,1863],{"class":542}," [",[410,1865,556],{"class":535},[410,1867,1868],{"class":552},"Alice Martin",[410,1870,556],{"class":535},[410,1872,883],{"class":535},[410,1874,549],{"class":535},[410,1876,1877],{"class":552},"Liang Wei",[410,1879,556],{"class":535},[410,1881,883],{"class":535},[410,1883,549],{"class":535},[410,1885,1886],{"class":552},"Fatima Noor",[410,1888,556],{"class":535},[410,1890,883],{"class":535},[410,1892,1893],{"class":572}," \u002F* …50+ *\u002F",[410,1895,1896],{"class":542},"] ",[410,1898,1735],{"class":535},[410,1900,1901,1903,1905,1907,1909,1911,1914,1916,1918,1920,1923,1925,1927,1929,1932],{"class":524,"line":638},[410,1902,641],{"class":596},[410,1904,600],{"class":535},[410,1906,712],{"class":535},[410,1908,1727],{"class":596},[410,1910,600],{"class":535},[410,1912,1913],{"class":542}," []",[410,1915,883],{"class":535},[410,1917,655],{"class":596},[410,1919,600],{"class":535},[410,1921,1922],{"class":620}," 18",[410,1924,883],{"class":535},[410,1926,665],{"class":596},[410,1928,600],{"class":535},[410,1930,1931],{"class":620}," 95",[410,1933,821],{"class":535},[410,1935,1936,1938,1940,1942,1944,1946,1948,1950,1953,1955,1957,1959,1962,1964,1966,1969,1971],{"class":524,"line":675},[410,1937,678],{"class":596},[410,1939,600],{"class":535},[410,1941,712],{"class":535},[410,1943,1727],{"class":596},[410,1945,600],{"class":535},[410,1947,1863],{"class":542},[410,1949,556],{"class":535},[410,1951,1952],{"class":552},"alice@example.com",[410,1954,556],{"class":535},[410,1956,883],{"class":535},[410,1958,549],{"class":535},[410,1960,1961],{"class":552},"liang@corp.io",[410,1963,556],{"class":535},[410,1965,883],{"class":535},[410,1967,1968],{"class":572}," \u002F* … *\u002F",[410,1970,1896],{"class":542},[410,1972,1735],{"class":535},[410,1974,1975],{"class":524,"line":692},[410,1976,1150],{"class":535},[1978,1979,1981],"h2",{"id":1980},"agent-skills-for-enrichment","Agent Skills for Enrichment",[442,1983,1984,1985,1989,1990,1993,1994,1993,1997,1993,2000,1993,2003,2006],{},"Ready-made ",[1986,1987,1988],"strong",{},"agent skills"," teach an AI agent the enrichment workflow, and the agent picks the right one on its own. The main skill covers the commands and the JSDoc tags they use (",[520,1991,1992],{},"@rtType",", ",[520,1995,1996],{},"@rtIds",[520,1998,1999],{},"@rtOrphan",[520,2001,2002],{},"@rtOrphanChild",[520,2004,2005],{},"@todo","); two more cover writing labels and error messages, and mock data.",[509,2008,2009,2028],{},[512,2010,2015],{"className":2011,"code":2012,"filename":2013,"language":2014,"meta":518,"style":518},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx mion-skills --claude\n","Claude","bash",[520,2016,2017],{"__ignoreMap":518},[410,2018,2019,2022,2025],{"class":524,"line":525},[410,2020,2021],{"class":586},"npx",[410,2023,2024],{"class":552}," mion-skills",[410,2026,2027],{"class":552}," --claude\n",[512,2029,2032],{"className":2011,"code":2030,"filename":2031,"language":2014,"meta":518,"style":518},"npx mion-skills --agent\n","Agent",[520,2033,2034],{"__ignoreMap":518},[410,2035,2036,2038,2040],{"class":524,"line":525},[410,2037,2021],{"class":586},[410,2039,2024],{"class":552},[410,2041,2042],{"class":552}," --agent\n",[442,2044,2045,2048,2049,1993,2052,2055,2056,1993,2059,2062],{},[520,2046,2047],{},"--claude"," writes into ",[520,2050,2051],{},".claude\u002Fskills\u002F",[520,2053,2054],{},"--agent"," into ",[520,2057,2058],{},".agent\u002Fskills\u002F",[520,2060,2061],{},"--dir \u003Cpath>"," into another folder.",[1978,2064,2066],{"id":2065},"generated-enrichment-files","Generated Enrichment Files",[442,2068,2069,2072,2073,606],{},[520,2070,2071],{},"enrich"," writes an ordinary TypeScript file that you commit and can safely edit. A new field gets a new blank, a changed field is flagged as stale, a removed field is kept as a comment until ",[520,2074,2075],{},"--prune",[442,2077,2078,2079,2082,2083,2087,2088,2091,2092,2095,2096,1993,2099,2102,2103,2106,2107,2110,2111,600],{},"The files live under ",[520,2080,2081],{},"\u003CgenDir>\u002Fenriched"," (see ",[2084,2085,2086],"a",{"href":182},"genDir","), by default ",[520,2089,2090],{},"src\u002F.mion\u002Fenriched",": friendly maps under ",[520,2093,2094],{},"friendly\u002F",", mock data under ",[520,2097,2098],{},"mock\u002F",[2084,2100,2101],{"href":288},"translations"," under ",[520,2104,2105],{},"i18n\u002F\u003Clocale>\u002F",". Each file follows your source file's path from the tsconfig folder, or from ",[520,2108,2109],{},"rootDir"," when set. For ",[520,2112,2113],{},"src\u002Fmodels\u002Fuser.ts",[512,2115,2120],{"className":2116,"code":2118,"language":2119},[2117],"language-text","src\u002F.mion\u002Fenriched\u002Ffriendly\u002Fsrc\u002Fmodels\u002Fuser.ts\nsrc\u002F.mion\u002Fenriched\u002Fmock\u002Fsrc\u002Fmodels\u002Fuser.ts\n","text",[520,2121,2118],{"__ignoreMap":518},[1978,2123,2125],{"id":2124},"enrichment-commands","Enrichment Commands",[442,2127,2128,2129,2131],{},"A small CLI drives the loop, for your agent or your CI. An opt-in bundler plugin option runs the same scaffold and sync in your dev server (see ",[2084,2130,181],{"href":182},").",[2133,2134,2135,2148],"table",{},[2136,2137,2138],"thead",{},[2139,2140,2141,2145],"tr",{},[2142,2143,2144],"th",{},"Command",[2142,2146,2147],{},"What it does",[2149,2150,2151,2162,2172,2182,2192,2209,2236],"tbody",{},[2139,2152,2153,2159],{},[2154,2155,2156],"td",{},[520,2157,2158],{},"enrich \u003Cfile> \u003CType>",[2154,2160,2161],{},"Scaffold the source file with the blanks the agent fills.",[2139,2163,2164,2169],{},[2154,2165,2166],{},[520,2167,2168],{},"enrich … --update",[2154,2170,2171],{},"Re-sync the file after a type change, keeping your filled-in values.",[2139,2173,2174,2179],{},[2154,2175,2176],{},[520,2177,2178],{},"enrich … --prune",[2154,2180,2181],{},"Clean up entries left behind by deleted types or fields.",[2139,2183,2184,2189],{},[2154,2185,2186],{},[520,2187,2188],{},"enrich [files] --no-emit",[2154,2190,2191],{},"Check, writing nothing. Fails on wrong or stale content, allows unfilled blanks. Good before a commit.",[2139,2193,2194,2199],{},[2154,2195,2196],{},[520,2197,2198],{},"enrich [files] --require-complete",[2154,2200,2201,2202,2205,2206,2208],{},"Everything ",[520,2203,2204],{},"--no-emit"," catches, plus anything unfinished: an unfilled ",[520,2207,2005],{},", a blank value, a missing or out of date translation. With the bundler plugin option on, a production build runs this check too. Good for CI and releases.",[2139,2210,2211,2216],{},[2154,2212,2213],{},[520,2214,2215],{},"enrich --i18n \u003Clocale>",[2154,2217,2218,2219,2222,2223,2226,2227,2230,2231,2233,2234,606],{},"Scaffold the ",[2084,2220,2221],{"href":288},"translation"," files for a locale, or ",[520,2224,2225],{},"all"," for every configured one. Takes ",[520,2228,2229],{},"--update"," and ",[520,2232,2075],{}," like plain ",[520,2235,2071],{},[2139,2237,2238,2243],{},[2154,2239,2240],{},[520,2241,2242],{},"enrich --i18n \u003Clocale> --no-emit",[2154,2244,2245,2246,2248,2249,2252,2253,2256],{},"Report a locale's translation status (or ",[520,2247,2225],{},"), writing nothing. Add ",[520,2250,2251],{},"--require-complete"," (or set ",[520,2254,2255],{},"i18n.strict",") to fail CI on anything untranslated or out of date.",[442,2258,2259,2260,2263,2264,2267,2268,2271,2272,2275],{},"Both checks list what is missing and take ",[520,2261,2262],{},"--json"," for scripts. The ",[2084,2265,2266],{"href":257},"lint rules"," report the same errors in your editor. Set ",[520,2269,2270],{},"mion\u002Fwarning"," to ",[520,2273,2274],{},"error"," to block unfinished files at commit time.",[442,2277,2278,2279,2282],{},"Every command takes ",[520,2280,2281],{},"--tsconfig \u003Cpath>",". Without it, the CLI searches upward from the current directory, like tsc. A config that fails to load stops the command with an error.",[442,2284,2285],{},"Any agent that can run shell commands (Claude Code, Cursor, your own) can drive them.",[2287,2288,2289,2290,2293,2294,2297,2298,2230,2301,2304,2305,2308],"note",{},"Shipped today: the ",[520,2291,2292],{},"FriendlyText\u003CT>"," \u002F ",[520,2295,2296],{},"MockData\u003CT>"," types (checked against your type by TypeScript), the ",[520,2299,2300],{},"createFriendlyText",[520,2302,2303],{},"createFriendlyTextI18n"," renderers, the ",[520,2306,2307],{},"createMockDataFn({ data })"," integration, and the CLI commands above. The always-on build diagnostics described here are in active development.",[2310,2311],"hr",{},[442,2313,2314,2315,1993,2318,2321,2322,2324],{},"Next: ",[2084,2316,2317],{"href":280},"human-readable labels & errors",[2084,2319,2320],{"href":284},"real-world mock data",", and ",[2084,2323,2101],{"href":288}," for the friendly text.",[2326,2327,2328],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}","How AI agents and the compiler work together to enrich your types.","md",null,{"toc":24},{"title":276,"description":2329},"nyv-ao6kof7saMgZbeUXlO_wvwIZuKHu_o4SfZKxzWs",1793324365810]