[{"data":1,"prerenderedAt":3072},["ShallowReactive",2],{"navigation_docs":3,"-runtypes-guide-compiler-markers":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":217,"body":401,"description":3066,"extension":3067,"links":3068,"meta":3069,"navigation":722,"path":218,"seo":3070,"stem":219,"__hash__":3071},"docs\u002F02.runtypes\u002F02.guide\u002F10.compiler-markers.md",{"type":402,"value":403},"minimark",[404,413,418,658,662,676,964,983,987,994,1232,1239,1243,1246,1544,1548,1551,1820,1824,1831,2302,2306,2315,2756,2760,2767,3062],[405,406,407,408,412],"p",{},"A marker is a type you add to a function parameter, almost always the last one. You write the type, the build fills in the value, then the marker is erased. Every ",[409,410,411],"code",{},"createX"," factory uses one, and you can use the same markers in your own helpers.",[414,415,417],"h2",{"id":416},"list-of-compiler-markers","List of Compiler Markers",[419,420,424,474,503,536,566,599,627,655],"card-group",{"className":421},[422,423],"sm:grid-cols-2","rt-markers",[425,426,428,468],"card",{"title":427},"Factory injection",[429,430,435],"pre",{"className":431,"code":432,"language":433,"meta":434,"style":434},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","id?: InjectTypeFnArgs\u003CT, Fn>\n","ts","",[409,436,437],{"__ignoreMap":434},[438,439,442,446,450,453,456,459,462,465],"span",{"class":440,"line":441},"line",1,[438,443,445],{"class":444},"sTEyZ","id",[438,447,449],{"class":448},"sMK4o","?:",[438,451,452],{"class":444}," InjectTypeFnArgs",[438,454,455],{"class":448},"\u003C",[438,457,458],{"class":444},"T",[438,460,461],{"class":448},",",[438,463,464],{"class":444}," Fn",[438,466,467],{"class":448},">\n",[405,469,470,471,473],{},"Validates the call site's compile-time arguments, then injects the generated functions you asked for. Every ",[409,472,411],{}," declares it, and so can your own wrappers.",[425,475,477,497],{"title":476},"Reflection id",[429,478,480],{"className":431,"code":479,"language":433,"meta":434,"style":434},"id?: InjectRunTypeId\u003CT>\n",[409,481,482],{"__ignoreMap":434},[438,483,484,486,488,491,493,495],{"class":440,"line":441},[438,485,445],{"class":444},[438,487,449],{"class":448},[438,489,490],{"class":444}," InjectRunTypeId",[438,492,455],{"class":448},[438,494,458],{"class":444},[438,496,467],{"class":448},[405,498,499,500,502],{},"Injects a short, stable id for ",[409,501,458],{}," at each call site. The marker you are most likely to type, for wrapping your own helpers.",[425,504,506,529],{"title":505},"Compile-time literals",[429,507,509],{"className":431,"code":508,"language":433,"meta":434,"style":434},"options: CompTimeArgs\u003CT>\n",[409,510,511],{"__ignoreMap":434},[438,512,513,517,520,523,525,527],{"class":440,"line":441},[438,514,516],{"class":515},"sBMFI","options",[438,518,519],{"class":448},":",[438,521,522],{"class":444}," CompTimeArgs",[438,524,455],{"class":448},[438,526,458],{"class":444},[438,528,467],{"class":448},[405,530,531,532,535],{},"Brands a parameter as \"must be a literal at the call site\" (or a ",[409,533,534],{},"const"," of literals). Static check only.",[425,537,539,559],{"title":538},"Variant selection",[429,540,542],{"className":431,"code":541,"language":433,"meta":434,"style":434},"options: CompTimeFnArgs\u003CT>\n",[409,543,544],{"__ignoreMap":434},[438,545,546,548,550,553,555,557],{"class":440,"line":441},[438,547,516],{"class":515},[438,549,519],{"class":448},[438,551,552],{"class":444}," CompTimeFnArgs",[438,554,455],{"class":448},[438,556,458],{"class":444},[438,558,467],{"class":448},[405,560,561,562,565],{},"Like ",[409,563,564],{},"CompTimeArgs",", but the literal also selects which variant of a factory you get, such as the JSON encoder strategy. Static check only.",[425,567,569,591],{"title":568},"Pure functions",[429,570,572],{"className":431,"code":571,"language":433,"meta":434,"style":434},"fn: PureFunction\u003CF>\n",[409,573,574],{"__ignoreMap":434},[438,575,576,579,581,584,586,589],{"class":440,"line":441},[438,577,578],{"class":515},"fn",[438,580,519],{"class":448},[438,582,583],{"class":444}," PureFunction",[438,585,455],{"class":448},[438,587,588],{"class":444},"F",[438,590,467],{"class":448},[405,592,593,594,598],{},"Brands a pure function argument that passes the purity rules. The direct form: the argument is the helper itself. See ",[595,596,597],"a",{"href":214},"pure functions",".",[425,600,602,622],{"title":601},"Pure function factories",[429,603,605],{"className":431,"code":604,"language":433,"meta":434,"style":434},"fn: PureFunctionFactory\u003CF>\n",[409,606,607],{"__ignoreMap":434},[438,608,609,611,613,616,618,620],{"class":440,"line":441},[438,610,578],{"class":515},[438,612,519],{"class":448},[438,614,615],{"class":444}," PureFunctionFactory",[438,617,455],{"class":448},[438,619,588],{"class":444},[438,621,467],{"class":448},[405,623,624,625,598],{},"The factory form of the above, for a helper that needs one-time setup or composes another pure fn. See ",[595,626,597],{"href":214},[425,628,630,650],{"title":629},"Pure function id",[429,631,633],{"className":431,"code":632,"language":433,"meta":434,"style":434},"id?: InjectPureFnId\u003CF>\n",[409,634,635],{"__ignoreMap":434},[438,636,637,639,641,644,646,648],{"class":440,"line":441},[438,638,445],{"class":444},[438,640,449],{"class":448},[438,642,643],{"class":444}," InjectPureFnId",[438,645,455],{"class":448},[438,647,588],{"class":444},[438,649,467],{"class":448},[405,651,652,653,598],{},"Injects a pure helper's id (its package plus a hash of its body), so a library can wrap the registrar. See ",[595,654,597],{"href":214},[425,656,657],{},"Seven markers in total. The factories and registrars already declare them, so you type one only in a helper that wraps them.",[414,659,661],{"id":660},"compile-time-factory-arguments","Compile-Time Factory Arguments",[405,663,664,665,668,669,672,673,675],{},"Some factory arguments are read by the build, such as the ",[409,666,667],{},"ValidateOptions"," bag and the JSON encoder ",[409,670,671],{},"strategy",". Write each one as a literal at the call site, or as a ",[409,674,534],{}," of literals, which may live in another module.",[429,677,679],{"className":431,"code":678,"language":433,"meta":434,"style":434},"import {createValidateFn, createJsonEncoderFn} from '@mionjs\u002Frun-types';\n\ntype Flag = {kind: 'on' | 'off'};\n\n\u002F\u002F the build picks the generated function from these literals\nconst isFlag = createValidateFn\u003CFlag>(undefined, {checkUnknowns: true});\nconst encode = createJsonEncoderFn\u003CFlag>(undefined, {strategy: 'compact'});\n\n\u002F\u002F a computed value is not a literal, so the build fails with a marker-comptime-arg-* error\nconst strictAtNight = new Date().getHours() \u003C 6;\ncreateValidateFn\u003CFlag>(undefined, {checkUnknowns: strictAtNight});\n\nexport {isFlag, encode};\n",[409,680,681,717,724,765,770,777,824,865,870,876,911,941,946],{"__ignoreMap":434},[438,682,683,687,690,693,695,698,701,704,707,711,714],{"class":440,"line":441},[438,684,686],{"class":685},"s7zQu","import",[438,688,689],{"class":448}," {",[438,691,692],{"class":444},"createValidateFn",[438,694,461],{"class":448},[438,696,697],{"class":444}," createJsonEncoderFn",[438,699,700],{"class":448},"}",[438,702,703],{"class":685}," from",[438,705,706],{"class":448}," '",[438,708,710],{"class":709},"sfazB","@mionjs\u002Frun-types",[438,712,713],{"class":448},"'",[438,715,716],{"class":448},";\n",[438,718,720],{"class":440,"line":719},2,[438,721,723],{"emptyLinePlaceholder":722},true,"\n",[438,725,727,731,734,737,739,743,745,747,750,752,755,757,760,762],{"class":440,"line":726},3,[438,728,730],{"class":729},"spNyl","type",[438,732,733],{"class":515}," Flag",[438,735,736],{"class":448}," =",[438,738,689],{"class":448},[438,740,742],{"class":741},"swJcz","kind",[438,744,519],{"class":448},[438,746,706],{"class":448},[438,748,749],{"class":709},"on",[438,751,713],{"class":448},[438,753,754],{"class":448}," |",[438,756,706],{"class":448},[438,758,759],{"class":709},"off",[438,761,713],{"class":448},[438,763,764],{"class":448},"};\n",[438,766,768],{"class":440,"line":767},4,[438,769,723],{"emptyLinePlaceholder":722},[438,771,773],{"class":440,"line":772},5,[438,774,776],{"class":775},"sHwdD","\u002F\u002F the build picks the generated function from these literals\n",[438,778,780,782,785,788,792,794,797,800,803,806,808,811,813,817,819,822],{"class":440,"line":779},6,[438,781,534],{"class":729},[438,783,784],{"class":444}," isFlag ",[438,786,787],{"class":448},"=",[438,789,791],{"class":790},"s2Zo4"," createValidateFn",[438,793,455],{"class":448},[438,795,796],{"class":515},"Flag",[438,798,799],{"class":448},">",[438,801,802],{"class":444},"(",[438,804,805],{"class":448},"undefined,",[438,807,689],{"class":448},[438,809,810],{"class":741},"checkUnknowns",[438,812,519],{"class":448},[438,814,816],{"class":815},"sfNiH"," true",[438,818,700],{"class":448},[438,820,821],{"class":444},")",[438,823,716],{"class":448},[438,825,827,829,832,834,836,838,840,842,844,846,848,850,852,854,857,859,861,863],{"class":440,"line":826},7,[438,828,534],{"class":729},[438,830,831],{"class":444}," encode ",[438,833,787],{"class":448},[438,835,697],{"class":790},[438,837,455],{"class":448},[438,839,796],{"class":515},[438,841,799],{"class":448},[438,843,802],{"class":444},[438,845,805],{"class":448},[438,847,689],{"class":448},[438,849,671],{"class":741},[438,851,519],{"class":448},[438,853,706],{"class":448},[438,855,856],{"class":709},"compact",[438,858,713],{"class":448},[438,860,700],{"class":448},[438,862,821],{"class":444},[438,864,716],{"class":448},[438,866,868],{"class":440,"line":867},8,[438,869,723],{"emptyLinePlaceholder":722},[438,871,873],{"class":440,"line":872},9,[438,874,875],{"class":775},"\u002F\u002F a computed value is not a literal, so the build fails with a marker-comptime-arg-* error\n",[438,877,879,881,884,886,889,892,895,897,900,903,905,909],{"class":440,"line":878},10,[438,880,534],{"class":729},[438,882,883],{"class":444}," strictAtNight ",[438,885,787],{"class":448},[438,887,888],{"class":448}," new",[438,890,891],{"class":790}," Date",[438,893,894],{"class":444},"()",[438,896,598],{"class":448},[438,898,899],{"class":790},"getHours",[438,901,902],{"class":444},"() ",[438,904,455],{"class":448},[438,906,908],{"class":907},"sbssI"," 6",[438,910,716],{"class":448},[438,912,914,916,918,920,922,924,926,928,930,932,935,937,939],{"class":440,"line":913},11,[438,915,692],{"class":790},[438,917,455],{"class":448},[438,919,796],{"class":515},[438,921,799],{"class":448},[438,923,802],{"class":444},[438,925,805],{"class":448},[438,927,689],{"class":448},[438,929,810],{"class":741},[438,931,519],{"class":448},[438,933,934],{"class":444}," strictAtNight",[438,936,700],{"class":448},[438,938,821],{"class":444},[438,940,716],{"class":448},[438,942,944],{"class":440,"line":943},12,[438,945,723],{"emptyLinePlaceholder":722},[438,947,949,952,954,957,959,962],{"class":440,"line":948},13,[438,950,951],{"class":685},"export",[438,953,689],{"class":448},[438,955,956],{"class":444},"isFlag",[438,958,461],{"class":448},[438,960,961],{"class":444}," encode",[438,963,764],{"class":448},[965,966,967,968,970,971,974,975,978,979,982],"tip",{},"Declare a shared options ",[409,969,534],{}," with ",[409,972,973],{},"as const",". Without it TypeScript widens ",[409,976,977],{},"{strategy: 'mutate'}"," to ",[409,980,981],{},"{strategy: string}",", and the build rejects the widened value.",[414,984,986],{"id":985},"injecting-a-type-id-into-a-helper","Injecting a Type Id into a Helper",[405,988,989,990,993],{},"Add a trailing ",[409,991,992],{},"id?: InjectRunTypeId\u003CT>"," to a generic function and the build injects the type's id at every call site, so you never pass it by hand.",[429,995,997],{"className":431,"code":996,"language":433,"meta":434,"style":434},"import {type InjectRunTypeId} from '@mionjs\u002Frun-types';\nimport {getRunType} from '@mionjs\u002Frun-types';\n\nfunction describe\u003CT>(id?: InjectRunTypeId\u003CT>): string {\n  \u002F\u002F id is an opaque handle: forward it as the last argument to resolve T\n  const runType = getRunType\u003CT>(undefined, id);\n  return `type #${runType.id} (kind ${runType.kind})`;\n}\n\ndescribe\u003C{id: number; name: string}>();\ndescribe\u003Cstring[]>();\n\nexport {describe};\n",[409,998,999,1021,1042,1046,1081,1086,1116,1159,1164,1168,1200,1218,1222],{"__ignoreMap":434},[438,1000,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019],{"class":440,"line":441},[438,1002,686],{"class":685},[438,1004,689],{"class":448},[438,1006,730],{"class":685},[438,1008,490],{"class":444},[438,1010,700],{"class":448},[438,1012,703],{"class":685},[438,1014,706],{"class":448},[438,1016,710],{"class":709},[438,1018,713],{"class":448},[438,1020,716],{"class":448},[438,1022,1023,1025,1027,1030,1032,1034,1036,1038,1040],{"class":440,"line":719},[438,1024,686],{"class":685},[438,1026,689],{"class":448},[438,1028,1029],{"class":444},"getRunType",[438,1031,700],{"class":448},[438,1033,703],{"class":685},[438,1035,706],{"class":448},[438,1037,710],{"class":709},[438,1039,713],{"class":448},[438,1041,716],{"class":448},[438,1043,1044],{"class":440,"line":726},[438,1045,723],{"emptyLinePlaceholder":722},[438,1047,1048,1051,1054,1056,1058,1061,1064,1066,1068,1070,1072,1075,1078],{"class":440,"line":767},[438,1049,1050],{"class":729},"function",[438,1052,1053],{"class":790}," describe",[438,1055,455],{"class":448},[438,1057,458],{"class":515},[438,1059,1060],{"class":448},">(",[438,1062,445],{"class":1063},"sHdIc",[438,1065,449],{"class":448},[438,1067,490],{"class":515},[438,1069,455],{"class":448},[438,1071,458],{"class":515},[438,1073,1074],{"class":448},">):",[438,1076,1077],{"class":515}," string",[438,1079,1080],{"class":448}," {\n",[438,1082,1083],{"class":440,"line":772},[438,1084,1085],{"class":775},"  \u002F\u002F id is an opaque handle: forward it as the last argument to resolve T\n",[438,1087,1088,1091,1094,1096,1099,1101,1103,1105,1107,1109,1112,1114],{"class":440,"line":779},[438,1089,1090],{"class":729},"  const",[438,1092,1093],{"class":444}," runType",[438,1095,736],{"class":448},[438,1097,1098],{"class":790}," getRunType",[438,1100,455],{"class":448},[438,1102,458],{"class":515},[438,1104,799],{"class":448},[438,1106,802],{"class":741},[438,1108,805],{"class":448},[438,1110,1111],{"class":444}," id",[438,1113,821],{"class":741},[438,1115,716],{"class":448},[438,1117,1118,1121,1124,1127,1130,1133,1135,1137,1139,1142,1144,1146,1148,1150,1152,1154,1157],{"class":440,"line":826},[438,1119,1120],{"class":685},"  return",[438,1122,1123],{"class":448}," `",[438,1125,1126],{"class":709},"type #",[438,1128,1129],{"class":448},"${",[438,1131,1132],{"class":444},"runType",[438,1134,598],{"class":448},[438,1136,445],{"class":444},[438,1138,700],{"class":448},[438,1140,1141],{"class":709}," (kind ",[438,1143,1129],{"class":448},[438,1145,1132],{"class":444},[438,1147,598],{"class":448},[438,1149,742],{"class":444},[438,1151,700],{"class":448},[438,1153,821],{"class":709},[438,1155,1156],{"class":448},"`",[438,1158,716],{"class":448},[438,1160,1161],{"class":440,"line":867},[438,1162,1163],{"class":448},"}\n",[438,1165,1166],{"class":440,"line":872},[438,1167,723],{"emptyLinePlaceholder":722},[438,1169,1170,1173,1176,1178,1180,1183,1186,1189,1191,1193,1196,1198],{"class":440,"line":878},[438,1171,1172],{"class":790},"describe",[438,1174,1175],{"class":448},"\u003C{",[438,1177,445],{"class":741},[438,1179,519],{"class":448},[438,1181,1182],{"class":515}," number",[438,1184,1185],{"class":448},";",[438,1187,1188],{"class":741}," name",[438,1190,519],{"class":448},[438,1192,1077],{"class":515},[438,1194,1195],{"class":448},"}>",[438,1197,894],{"class":444},[438,1199,716],{"class":448},[438,1201,1202,1204,1206,1209,1212,1214,1216],{"class":440,"line":913},[438,1203,1172],{"class":790},[438,1205,455],{"class":448},[438,1207,1208],{"class":515},"string",[438,1210,1211],{"class":444},"[]",[438,1213,799],{"class":448},[438,1215,894],{"class":444},[438,1217,716],{"class":448},[438,1219,1220],{"class":440,"line":943},[438,1221,723],{"emptyLinePlaceholder":722},[438,1223,1224,1226,1228,1230],{"class":440,"line":948},[438,1225,951],{"class":685},[438,1227,689],{"class":448},[438,1229,1172],{"class":444},[438,1231,764],{"class":448},[1233,1234,1235,1236,1238],"note",{},"The marker only works where ",[409,1237,458],{}," is concrete: at a real call site, not inside a generic body.",[414,1240,1242],{"id":1241},"injecting-a-type-id-into-a-class","Injecting a Type Id into a Class",[405,1244,1245],{},"A class constructor takes the same trailing marker.",[429,1247,1249],{"className":431,"code":1248,"language":433,"meta":434,"style":434},"import {type InjectRunTypeId} from '@mionjs\u002Frun-types';\nimport {getRunType} from '@mionjs\u002Frun-types';\n\nclass Described\u003CT> {\n  readonly text: string;\n  constructor(value?: T, id?: InjectRunTypeId\u003CT>) {\n    const runType = getRunType\u003CT>(undefined, id);\n    this.text = `type #${runType.id} (kind ${runType.kind})`;\n  }\n}\n\nnew Described\u003C{id: number; name: string}>(); \u002F\u002F explicit T\nconst tags: string[] = ['a', 'b'];\nnew Described(tags); \u002F\u002F inferred T, still gets the id\n\nexport {Described};\n",[409,1250,1251,1273,1293,1297,1313,1327,1359,1386,1428,1433,1437,1441,1473,1512,1527,1532],{"__ignoreMap":434},[438,1252,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271],{"class":440,"line":441},[438,1254,686],{"class":685},[438,1256,689],{"class":448},[438,1258,730],{"class":685},[438,1260,490],{"class":444},[438,1262,700],{"class":448},[438,1264,703],{"class":685},[438,1266,706],{"class":448},[438,1268,710],{"class":709},[438,1270,713],{"class":448},[438,1272,716],{"class":448},[438,1274,1275,1277,1279,1281,1283,1285,1287,1289,1291],{"class":440,"line":719},[438,1276,686],{"class":685},[438,1278,689],{"class":448},[438,1280,1029],{"class":444},[438,1282,700],{"class":448},[438,1284,703],{"class":685},[438,1286,706],{"class":448},[438,1288,710],{"class":709},[438,1290,713],{"class":448},[438,1292,716],{"class":448},[438,1294,1295],{"class":440,"line":726},[438,1296,723],{"emptyLinePlaceholder":722},[438,1298,1299,1302,1305,1307,1309,1311],{"class":440,"line":767},[438,1300,1301],{"class":729},"class",[438,1303,1304],{"class":515}," Described",[438,1306,455],{"class":448},[438,1308,458],{"class":515},[438,1310,799],{"class":448},[438,1312,1080],{"class":448},[438,1314,1315,1318,1321,1323,1325],{"class":440,"line":772},[438,1316,1317],{"class":729},"  readonly",[438,1319,1320],{"class":741}," text",[438,1322,519],{"class":448},[438,1324,1077],{"class":515},[438,1326,716],{"class":448},[438,1328,1329,1332,1334,1337,1339,1342,1344,1346,1348,1350,1352,1354,1357],{"class":440,"line":779},[438,1330,1331],{"class":729},"  constructor",[438,1333,802],{"class":448},[438,1335,1336],{"class":1063},"value",[438,1338,449],{"class":448},[438,1340,1341],{"class":515}," T",[438,1343,461],{"class":448},[438,1345,1111],{"class":1063},[438,1347,449],{"class":448},[438,1349,490],{"class":515},[438,1351,455],{"class":448},[438,1353,458],{"class":515},[438,1355,1356],{"class":448},">)",[438,1358,1080],{"class":448},[438,1360,1361,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384],{"class":440,"line":826},[438,1362,1363],{"class":729},"    const",[438,1365,1093],{"class":444},[438,1367,736],{"class":448},[438,1369,1098],{"class":790},[438,1371,455],{"class":448},[438,1373,458],{"class":515},[438,1375,799],{"class":448},[438,1377,802],{"class":741},[438,1379,805],{"class":448},[438,1381,1111],{"class":444},[438,1383,821],{"class":741},[438,1385,716],{"class":448},[438,1387,1388,1391,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426],{"class":440,"line":867},[438,1389,1390],{"class":448},"    this.",[438,1392,1393],{"class":444},"text",[438,1395,736],{"class":448},[438,1397,1123],{"class":448},[438,1399,1126],{"class":709},[438,1401,1129],{"class":448},[438,1403,1132],{"class":444},[438,1405,598],{"class":448},[438,1407,445],{"class":444},[438,1409,700],{"class":448},[438,1411,1141],{"class":709},[438,1413,1129],{"class":448},[438,1415,1132],{"class":444},[438,1417,598],{"class":448},[438,1419,742],{"class":444},[438,1421,700],{"class":448},[438,1423,821],{"class":709},[438,1425,1156],{"class":448},[438,1427,716],{"class":448},[438,1429,1430],{"class":440,"line":872},[438,1431,1432],{"class":448},"  }\n",[438,1434,1435],{"class":440,"line":878},[438,1436,1163],{"class":448},[438,1438,1439],{"class":440,"line":913},[438,1440,723],{"emptyLinePlaceholder":722},[438,1442,1443,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470],{"class":440,"line":943},[438,1444,1445],{"class":448},"new",[438,1447,1304],{"class":790},[438,1449,1175],{"class":448},[438,1451,445],{"class":741},[438,1453,519],{"class":448},[438,1455,1182],{"class":515},[438,1457,1185],{"class":448},[438,1459,1188],{"class":741},[438,1461,519],{"class":448},[438,1463,1077],{"class":515},[438,1465,1195],{"class":448},[438,1467,894],{"class":444},[438,1469,1185],{"class":448},[438,1471,1472],{"class":775}," \u002F\u002F explicit T\n",[438,1474,1475,1477,1480,1482,1484,1487,1489,1492,1494,1496,1498,1500,1502,1505,1507,1510],{"class":440,"line":948},[438,1476,534],{"class":729},[438,1478,1479],{"class":444}," tags",[438,1481,519],{"class":448},[438,1483,1077],{"class":515},[438,1485,1486],{"class":444},"[] ",[438,1488,787],{"class":448},[438,1490,1491],{"class":444}," [",[438,1493,713],{"class":448},[438,1495,595],{"class":709},[438,1497,713],{"class":448},[438,1499,461],{"class":448},[438,1501,706],{"class":448},[438,1503,1504],{"class":709},"b",[438,1506,713],{"class":448},[438,1508,1509],{"class":444},"]",[438,1511,716],{"class":448},[438,1513,1515,1517,1519,1522,1524],{"class":440,"line":1514},14,[438,1516,1445],{"class":448},[438,1518,1304],{"class":790},[438,1520,1521],{"class":444},"(tags)",[438,1523,1185],{"class":448},[438,1525,1526],{"class":775}," \u002F\u002F inferred T, still gets the id\n",[438,1528,1530],{"class":440,"line":1529},15,[438,1531,723],{"emptyLinePlaceholder":722},[438,1533,1535,1537,1539,1542],{"class":440,"line":1534},16,[438,1536,951],{"class":685},[438,1538,689],{"class":448},[438,1540,1541],{"class":444},"Described",[438,1543,764],{"class":448},[414,1545,1547],{"id":1546},"wrapping-generated-functions","Wrapping Generated Functions",[405,1549,1550],{},"Compose the generated functions into your own helpers, such as one call that parses JSON and validates it against your type.",[429,1552,1554],{"className":431,"code":1553,"language":433,"meta":434,"style":434},"import {createValidateFn, type ValidateFn} from '@mionjs\u002Frun-types';\n\n\u002F\u002F take the validator as an argument: createValidateFn\u003CT>() in this generic body is marker-in-generic-function\nfunction parseChecked\u003CT>(raw: string, isValid: ValidateFn\u003CT>): T {\n  const data: unknown = JSON.parse(raw);\n  if (!isValid(data))\n    throw new Error('payload does not match the expected type');\n  return data as T;\n}\n\ntype User = {id: number; name: string};\n\n\u002F\u002F User is concrete here, so the build can inject\nconst user = parseChecked('{\"id\":1,\"name\":\"Ada\"}', createValidateFn\u003CUser>());\n\nexport {parseChecked, user};\n",[409,1555,1556,1584,1588,1593,1632,1662,1684,1707,1720,1724,1728,1755,1759,1764,1800,1804],{"__ignoreMap":434},[438,1557,1558,1560,1562,1564,1566,1569,1572,1574,1576,1578,1580,1582],{"class":440,"line":441},[438,1559,686],{"class":685},[438,1561,689],{"class":448},[438,1563,692],{"class":444},[438,1565,461],{"class":448},[438,1567,1568],{"class":685}," type",[438,1570,1571],{"class":444}," ValidateFn",[438,1573,700],{"class":448},[438,1575,703],{"class":685},[438,1577,706],{"class":448},[438,1579,710],{"class":709},[438,1581,713],{"class":448},[438,1583,716],{"class":448},[438,1585,1586],{"class":440,"line":719},[438,1587,723],{"emptyLinePlaceholder":722},[438,1589,1590],{"class":440,"line":726},[438,1591,1592],{"class":775},"\u002F\u002F take the validator as an argument: createValidateFn\u003CT>() in this generic body is marker-in-generic-function\n",[438,1594,1595,1597,1600,1602,1604,1606,1609,1611,1613,1615,1618,1620,1622,1624,1626,1628,1630],{"class":440,"line":767},[438,1596,1050],{"class":729},[438,1598,1599],{"class":790}," parseChecked",[438,1601,455],{"class":448},[438,1603,458],{"class":515},[438,1605,1060],{"class":448},[438,1607,1608],{"class":1063},"raw",[438,1610,519],{"class":448},[438,1612,1077],{"class":515},[438,1614,461],{"class":448},[438,1616,1617],{"class":1063}," isValid",[438,1619,519],{"class":448},[438,1621,1571],{"class":515},[438,1623,455],{"class":448},[438,1625,458],{"class":515},[438,1627,1074],{"class":448},[438,1629,1341],{"class":515},[438,1631,1080],{"class":448},[438,1633,1634,1636,1639,1641,1644,1646,1649,1651,1654,1656,1658,1660],{"class":440,"line":772},[438,1635,1090],{"class":729},[438,1637,1638],{"class":444}," data",[438,1640,519],{"class":448},[438,1642,1643],{"class":515}," unknown",[438,1645,736],{"class":448},[438,1647,1648],{"class":444}," JSON",[438,1650,598],{"class":448},[438,1652,1653],{"class":790},"parse",[438,1655,802],{"class":741},[438,1657,1608],{"class":444},[438,1659,821],{"class":741},[438,1661,716],{"class":448},[438,1663,1664,1667,1670,1673,1676,1678,1681],{"class":440,"line":779},[438,1665,1666],{"class":685},"  if",[438,1668,1669],{"class":741}," (",[438,1671,1672],{"class":448},"!",[438,1674,1675],{"class":790},"isValid",[438,1677,802],{"class":741},[438,1679,1680],{"class":444},"data",[438,1682,1683],{"class":741},"))\n",[438,1685,1686,1689,1691,1694,1696,1698,1701,1703,1705],{"class":440,"line":826},[438,1687,1688],{"class":685},"    throw",[438,1690,888],{"class":448},[438,1692,1693],{"class":790}," Error",[438,1695,802],{"class":741},[438,1697,713],{"class":448},[438,1699,1700],{"class":709},"payload does not match the expected type",[438,1702,713],{"class":448},[438,1704,821],{"class":741},[438,1706,716],{"class":448},[438,1708,1709,1711,1713,1716,1718],{"class":440,"line":867},[438,1710,1120],{"class":685},[438,1712,1638],{"class":444},[438,1714,1715],{"class":685}," as",[438,1717,1341],{"class":515},[438,1719,716],{"class":448},[438,1721,1722],{"class":440,"line":872},[438,1723,1163],{"class":448},[438,1725,1726],{"class":440,"line":878},[438,1727,723],{"emptyLinePlaceholder":722},[438,1729,1730,1732,1735,1737,1739,1741,1743,1745,1747,1749,1751,1753],{"class":440,"line":913},[438,1731,730],{"class":729},[438,1733,1734],{"class":515}," User",[438,1736,736],{"class":448},[438,1738,689],{"class":448},[438,1740,445],{"class":741},[438,1742,519],{"class":448},[438,1744,1182],{"class":515},[438,1746,1185],{"class":448},[438,1748,1188],{"class":741},[438,1750,519],{"class":448},[438,1752,1077],{"class":515},[438,1754,764],{"class":448},[438,1756,1757],{"class":440,"line":943},[438,1758,723],{"emptyLinePlaceholder":722},[438,1760,1761],{"class":440,"line":948},[438,1762,1763],{"class":775},"\u002F\u002F User is concrete here, so the build can inject\n",[438,1765,1766,1768,1771,1773,1775,1777,1779,1782,1784,1786,1788,1790,1793,1795,1798],{"class":440,"line":1514},[438,1767,534],{"class":729},[438,1769,1770],{"class":444}," user ",[438,1772,787],{"class":448},[438,1774,1599],{"class":790},[438,1776,802],{"class":444},[438,1778,713],{"class":448},[438,1780,1781],{"class":709},"{\"id\":1,\"name\":\"Ada\"}",[438,1783,713],{"class":448},[438,1785,461],{"class":448},[438,1787,791],{"class":790},[438,1789,455],{"class":448},[438,1791,1792],{"class":515},"User",[438,1794,799],{"class":448},[438,1796,1797],{"class":444},"())",[438,1799,716],{"class":448},[438,1801,1802],{"class":440,"line":1529},[438,1803,723],{"emptyLinePlaceholder":722},[438,1805,1806,1808,1810,1813,1815,1818],{"class":440,"line":1534},[438,1807,951],{"class":685},[438,1809,689],{"class":448},[438,1811,1812],{"class":444},"parseChecked",[438,1814,461],{"class":448},[438,1816,1817],{"class":444}," user",[438,1819,764],{"class":448},[414,1821,1823],{"id":1822},"requesting-several-functions-in-one-marker","Requesting Several Functions in One Marker",[405,1825,1826,1827,1830],{},"One ",[409,1828,1829],{},"InjectTypeFnArgs"," marker can name several function families. A duplicate name is marker-duplicate-function-family. A name that matches no family is marker-unknown-function-family, and the error suggests the closest real name when there is one.",[429,1832,1834],{"className":431,"code":1833,"language":433,"meta":434,"style":434},"import {\n  createGetValidationErrorsFn,\n  createJsonDecoderFn,\n  createJsonEncoderFn,\n  type InjectTypeFnArgs,\n} from '@mionjs\u002Frun-types';\n\ntype Handler = (...args: any[]) => unknown;\n\nfunction route\u003CH extends Handler>(\n  handler: H,\n  \u002F\u002F the build injects one handle per family, in this order\n  fns?: InjectTypeFnArgs\u003C\n    Parameters\u003CH>,\n    'validationErrors',\n    'jsonDecoder',\n    'jsonEncoder'\n  >\n) {\n  const getErrors = createGetValidationErrorsFn(\n    undefined,\n    undefined,\n    fns?.[0] as never\n  );\n  const decodeParams = createJsonDecoderFn(\n    undefined,\n    undefined,\n    fns?.[1] as never\n  );\n  const encodeParams = createJsonEncoderFn(\n    undefined,\n    undefined,\n    fns?.[2] as never\n  );\n  return {handler, getErrors, decodeParams, encodeParams};\n}\n\n\u002F\u002F the build injects the three handles for this handler's parameters here\nconst greet = route((name: string, times: number) => name.repeat(times));\n\nexport {route, greet};\n",[409,1835,1836,1842,1850,1857,1864,1873,1887,1891,1922,1926,1946,1958,1963,1975,1987,1999,2010,2021,2027,2034,2050,2056,2061,2085,2093,2108,2113,2118,2136,2143,2157,2162,2167,2185,2192,2216,2221,2226,2232,2280,2285],{"__ignoreMap":434},[438,1837,1838,1840],{"class":440,"line":441},[438,1839,686],{"class":685},[438,1841,1080],{"class":448},[438,1843,1844,1847],{"class":440,"line":719},[438,1845,1846],{"class":444},"  createGetValidationErrorsFn",[438,1848,1849],{"class":448},",\n",[438,1851,1852,1855],{"class":440,"line":726},[438,1853,1854],{"class":444},"  createJsonDecoderFn",[438,1856,1849],{"class":448},[438,1858,1859,1862],{"class":440,"line":767},[438,1860,1861],{"class":444},"  createJsonEncoderFn",[438,1863,1849],{"class":448},[438,1865,1866,1869,1871],{"class":440,"line":772},[438,1867,1868],{"class":685},"  type",[438,1870,452],{"class":444},[438,1872,1849],{"class":448},[438,1874,1875,1877,1879,1881,1883,1885],{"class":440,"line":779},[438,1876,700],{"class":448},[438,1878,703],{"class":685},[438,1880,706],{"class":448},[438,1882,710],{"class":709},[438,1884,713],{"class":448},[438,1886,716],{"class":448},[438,1888,1889],{"class":440,"line":826},[438,1890,723],{"emptyLinePlaceholder":722},[438,1892,1893,1895,1898,1900,1903,1906,1908,1911,1913,1915,1918,1920],{"class":440,"line":867},[438,1894,730],{"class":729},[438,1896,1897],{"class":515}," Handler",[438,1899,736],{"class":448},[438,1901,1902],{"class":448}," (...",[438,1904,1905],{"class":1063},"args",[438,1907,519],{"class":448},[438,1909,1910],{"class":515}," any",[438,1912,1211],{"class":444},[438,1914,821],{"class":448},[438,1916,1917],{"class":729}," =>",[438,1919,1643],{"class":515},[438,1921,716],{"class":448},[438,1923,1924],{"class":440,"line":872},[438,1925,723],{"emptyLinePlaceholder":722},[438,1927,1928,1930,1933,1935,1938,1941,1943],{"class":440,"line":878},[438,1929,1050],{"class":729},[438,1931,1932],{"class":790}," route",[438,1934,455],{"class":448},[438,1936,1937],{"class":515},"H",[438,1939,1940],{"class":729}," extends",[438,1942,1897],{"class":515},[438,1944,1945],{"class":448},">(\n",[438,1947,1948,1951,1953,1956],{"class":440,"line":913},[438,1949,1950],{"class":1063},"  handler",[438,1952,519],{"class":448},[438,1954,1955],{"class":515}," H",[438,1957,1849],{"class":448},[438,1959,1960],{"class":440,"line":943},[438,1961,1962],{"class":775},"  \u002F\u002F the build injects one handle per family, in this order\n",[438,1964,1965,1968,1970,1972],{"class":440,"line":948},[438,1966,1967],{"class":1063},"  fns",[438,1969,449],{"class":448},[438,1971,452],{"class":515},[438,1973,1974],{"class":448},"\u003C\n",[438,1976,1977,1980,1982,1984],{"class":440,"line":1514},[438,1978,1979],{"class":515},"    Parameters",[438,1981,455],{"class":448},[438,1983,1937],{"class":515},[438,1985,1986],{"class":448},">,\n",[438,1988,1989,1992,1995,1997],{"class":440,"line":1529},[438,1990,1991],{"class":448},"    '",[438,1993,1994],{"class":709},"validationErrors",[438,1996,713],{"class":448},[438,1998,1849],{"class":448},[438,2000,2001,2003,2006,2008],{"class":440,"line":1534},[438,2002,1991],{"class":448},[438,2004,2005],{"class":709},"jsonDecoder",[438,2007,713],{"class":448},[438,2009,1849],{"class":448},[438,2011,2013,2015,2018],{"class":440,"line":2012},17,[438,2014,1991],{"class":448},[438,2016,2017],{"class":709},"jsonEncoder",[438,2019,2020],{"class":448},"'\n",[438,2022,2024],{"class":440,"line":2023},18,[438,2025,2026],{"class":448},"  >\n",[438,2028,2030,2032],{"class":440,"line":2029},19,[438,2031,821],{"class":448},[438,2033,1080],{"class":448},[438,2035,2037,2039,2042,2044,2047],{"class":440,"line":2036},20,[438,2038,1090],{"class":729},[438,2040,2041],{"class":444}," getErrors",[438,2043,736],{"class":448},[438,2045,2046],{"class":790}," createGetValidationErrorsFn",[438,2048,2049],{"class":741},"(\n",[438,2051,2053],{"class":440,"line":2052},21,[438,2054,2055],{"class":448},"    undefined,\n",[438,2057,2059],{"class":440,"line":2058},22,[438,2060,2055],{"class":448},[438,2062,2064,2067,2070,2073,2076,2079,2082],{"class":440,"line":2063},23,[438,2065,2066],{"class":444},"    fns",[438,2068,2069],{"class":448},"?.",[438,2071,2072],{"class":741},"[",[438,2074,2075],{"class":907},"0",[438,2077,2078],{"class":741},"] ",[438,2080,2081],{"class":685},"as",[438,2083,2084],{"class":515}," never\n",[438,2086,2088,2091],{"class":440,"line":2087},24,[438,2089,2090],{"class":741},"  )",[438,2092,716],{"class":448},[438,2094,2096,2098,2101,2103,2106],{"class":440,"line":2095},25,[438,2097,1090],{"class":729},[438,2099,2100],{"class":444}," decodeParams",[438,2102,736],{"class":448},[438,2104,2105],{"class":790}," createJsonDecoderFn",[438,2107,2049],{"class":741},[438,2109,2111],{"class":440,"line":2110},26,[438,2112,2055],{"class":448},[438,2114,2116],{"class":440,"line":2115},27,[438,2117,2055],{"class":448},[438,2119,2121,2123,2125,2127,2130,2132,2134],{"class":440,"line":2120},28,[438,2122,2066],{"class":444},[438,2124,2069],{"class":448},[438,2126,2072],{"class":741},[438,2128,2129],{"class":907},"1",[438,2131,2078],{"class":741},[438,2133,2081],{"class":685},[438,2135,2084],{"class":515},[438,2137,2139,2141],{"class":440,"line":2138},29,[438,2140,2090],{"class":741},[438,2142,716],{"class":448},[438,2144,2146,2148,2151,2153,2155],{"class":440,"line":2145},30,[438,2147,1090],{"class":729},[438,2149,2150],{"class":444}," encodeParams",[438,2152,736],{"class":448},[438,2154,697],{"class":790},[438,2156,2049],{"class":741},[438,2158,2160],{"class":440,"line":2159},31,[438,2161,2055],{"class":448},[438,2163,2165],{"class":440,"line":2164},32,[438,2166,2055],{"class":448},[438,2168,2170,2172,2174,2176,2179,2181,2183],{"class":440,"line":2169},33,[438,2171,2066],{"class":444},[438,2173,2069],{"class":448},[438,2175,2072],{"class":741},[438,2177,2178],{"class":907},"2",[438,2180,2078],{"class":741},[438,2182,2081],{"class":685},[438,2184,2084],{"class":515},[438,2186,2188,2190],{"class":440,"line":2187},34,[438,2189,2090],{"class":741},[438,2191,716],{"class":448},[438,2193,2195,2197,2199,2202,2204,2206,2208,2210,2212,2214],{"class":440,"line":2194},35,[438,2196,1120],{"class":685},[438,2198,689],{"class":448},[438,2200,2201],{"class":444},"handler",[438,2203,461],{"class":448},[438,2205,2041],{"class":444},[438,2207,461],{"class":448},[438,2209,2100],{"class":444},[438,2211,461],{"class":448},[438,2213,2150],{"class":444},[438,2215,764],{"class":448},[438,2217,2219],{"class":440,"line":2218},36,[438,2220,1163],{"class":448},[438,2222,2224],{"class":440,"line":2223},37,[438,2225,723],{"emptyLinePlaceholder":722},[438,2227,2229],{"class":440,"line":2228},38,[438,2230,2231],{"class":775},"\u002F\u002F the build injects the three handles for this handler's parameters here\n",[438,2233,2235,2237,2240,2242,2244,2246,2248,2251,2253,2255,2257,2260,2262,2264,2266,2268,2270,2272,2275,2278],{"class":440,"line":2234},39,[438,2236,534],{"class":729},[438,2238,2239],{"class":444}," greet ",[438,2241,787],{"class":448},[438,2243,1932],{"class":790},[438,2245,802],{"class":444},[438,2247,802],{"class":448},[438,2249,2250],{"class":1063},"name",[438,2252,519],{"class":448},[438,2254,1077],{"class":515},[438,2256,461],{"class":448},[438,2258,2259],{"class":1063}," times",[438,2261,519],{"class":448},[438,2263,1182],{"class":515},[438,2265,821],{"class":448},[438,2267,1917],{"class":729},[438,2269,1188],{"class":444},[438,2271,598],{"class":448},[438,2273,2274],{"class":790},"repeat",[438,2276,2277],{"class":444},"(times))",[438,2279,716],{"class":448},[438,2281,2283],{"class":440,"line":2282},40,[438,2284,723],{"emptyLinePlaceholder":722},[438,2286,2288,2290,2292,2295,2297,2300],{"class":440,"line":2287},41,[438,2289,951],{"class":685},[438,2291,689],{"class":448},[438,2293,2294],{"class":444},"route",[438,2296,461],{"class":448},[438,2298,2299],{"class":444}," greet",[438,2301,764],{"class":448},[414,2303,2305],{"id":2304},"turning-a-handle-into-a-function","Turning a Handle into a Function",[405,2307,2308,2311,2312,2314],{},[409,2309,2310],{},"getRTFunction"," turns an injected handle into the callable function, with no factory. Pass it the same name you put in the marker. Every function can be named this way, and ",[595,2313,221],{"href":222}," lists the names.",[429,2316,2318],{"className":431,"code":2317,"language":433,"meta":434,"style":434},"import {type InjectTypeFnArgs} from '@mionjs\u002Frun-types';\nimport {getRTFunction} from '@mionjs\u002Frun-types\u002Fruntime';\n\nfunction jsonValueCodec\u003CT>(\n  fns?: InjectTypeFnArgs\u003CT, 'prepareForJsonClone', 'restoreFromJsonClone'>\n) {\n  \u002F\u002F the name repeated here is what gives getRTFunction the function's type\n  const prepare = getRTFunction\u003C'prepareForJsonClone'>(fns?.[0]);\n  const restore = getRTFunction\u003C'restoreFromJsonClone'>(fns?.[1]);\n  return {prepare, restore};\n}\n\ntype Message = {id: bigint; sentAt: Date; body: string};\n\n\u002F\u002F the build injects both handles for Message at this call site\nconst messageCodec = jsonValueCodec\u003CMessage>();\n\nconst message: Message = {\n  id: 42n,\n  sentAt: new Date('2020-01-02T03:04:05.000Z'),\n  body: 'hi',\n};\n\n\u002F\u002F your code owns the JSON.stringify and JSON.parse, so many values share one envelope\nconst wire = JSON.stringify(messageCodec.prepare(message));\nconst restored = messageCodec.restore(JSON.parse(wire));\n\nexport {jsonValueCodec, messageCodec, restored};\n",[409,2319,2320,2342,2363,2367,2380,2412,2418,2423,2461,2496,2511,2515,2519,2557,2561,2566,2588,2592,2607,2622,2646,2662,2666,2670,2675,2703,2732,2736],{"__ignoreMap":434},[438,2321,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340],{"class":440,"line":441},[438,2323,686],{"class":685},[438,2325,689],{"class":448},[438,2327,730],{"class":685},[438,2329,452],{"class":444},[438,2331,700],{"class":448},[438,2333,703],{"class":685},[438,2335,706],{"class":448},[438,2337,710],{"class":709},[438,2339,713],{"class":448},[438,2341,716],{"class":448},[438,2343,2344,2346,2348,2350,2352,2354,2356,2359,2361],{"class":440,"line":719},[438,2345,686],{"class":685},[438,2347,689],{"class":448},[438,2349,2310],{"class":444},[438,2351,700],{"class":448},[438,2353,703],{"class":685},[438,2355,706],{"class":448},[438,2357,2358],{"class":709},"@mionjs\u002Frun-types\u002Fruntime",[438,2360,713],{"class":448},[438,2362,716],{"class":448},[438,2364,2365],{"class":440,"line":726},[438,2366,723],{"emptyLinePlaceholder":722},[438,2368,2369,2371,2374,2376,2378],{"class":440,"line":767},[438,2370,1050],{"class":729},[438,2372,2373],{"class":790}," jsonValueCodec",[438,2375,455],{"class":448},[438,2377,458],{"class":515},[438,2379,1945],{"class":448},[438,2381,2382,2384,2386,2388,2390,2392,2394,2396,2399,2401,2403,2405,2408,2410],{"class":440,"line":772},[438,2383,1967],{"class":1063},[438,2385,449],{"class":448},[438,2387,452],{"class":515},[438,2389,455],{"class":448},[438,2391,458],{"class":515},[438,2393,461],{"class":448},[438,2395,706],{"class":448},[438,2397,2398],{"class":709},"prepareForJsonClone",[438,2400,713],{"class":448},[438,2402,461],{"class":448},[438,2404,706],{"class":448},[438,2406,2407],{"class":709},"restoreFromJsonClone",[438,2409,713],{"class":448},[438,2411,467],{"class":448},[438,2413,2414,2416],{"class":440,"line":779},[438,2415,821],{"class":448},[438,2417,1080],{"class":448},[438,2419,2420],{"class":440,"line":826},[438,2421,2422],{"class":775},"  \u002F\u002F the name repeated here is what gives getRTFunction the function's type\n",[438,2424,2425,2427,2430,2432,2435,2437,2439,2441,2443,2445,2447,2450,2452,2454,2456,2459],{"class":440,"line":867},[438,2426,1090],{"class":729},[438,2428,2429],{"class":444}," prepare",[438,2431,736],{"class":448},[438,2433,2434],{"class":790}," getRTFunction",[438,2436,455],{"class":448},[438,2438,713],{"class":448},[438,2440,2398],{"class":709},[438,2442,713],{"class":448},[438,2444,799],{"class":448},[438,2446,802],{"class":741},[438,2448,2449],{"class":444},"fns",[438,2451,2069],{"class":448},[438,2453,2072],{"class":741},[438,2455,2075],{"class":907},[438,2457,2458],{"class":741},"])",[438,2460,716],{"class":448},[438,2462,2463,2465,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486,2488,2490,2492,2494],{"class":440,"line":872},[438,2464,1090],{"class":729},[438,2466,2467],{"class":444}," restore",[438,2469,736],{"class":448},[438,2471,2434],{"class":790},[438,2473,455],{"class":448},[438,2475,713],{"class":448},[438,2477,2407],{"class":709},[438,2479,713],{"class":448},[438,2481,799],{"class":448},[438,2483,802],{"class":741},[438,2485,2449],{"class":444},[438,2487,2069],{"class":448},[438,2489,2072],{"class":741},[438,2491,2129],{"class":907},[438,2493,2458],{"class":741},[438,2495,716],{"class":448},[438,2497,2498,2500,2502,2505,2507,2509],{"class":440,"line":878},[438,2499,1120],{"class":685},[438,2501,689],{"class":448},[438,2503,2504],{"class":444},"prepare",[438,2506,461],{"class":448},[438,2508,2467],{"class":444},[438,2510,764],{"class":448},[438,2512,2513],{"class":440,"line":913},[438,2514,1163],{"class":448},[438,2516,2517],{"class":440,"line":943},[438,2518,723],{"emptyLinePlaceholder":722},[438,2520,2521,2523,2526,2528,2530,2532,2534,2537,2539,2542,2544,2546,2548,2551,2553,2555],{"class":440,"line":948},[438,2522,730],{"class":729},[438,2524,2525],{"class":515}," Message",[438,2527,736],{"class":448},[438,2529,689],{"class":448},[438,2531,445],{"class":741},[438,2533,519],{"class":448},[438,2535,2536],{"class":515}," bigint",[438,2538,1185],{"class":448},[438,2540,2541],{"class":741}," sentAt",[438,2543,519],{"class":448},[438,2545,891],{"class":515},[438,2547,1185],{"class":448},[438,2549,2550],{"class":741}," body",[438,2552,519],{"class":448},[438,2554,1077],{"class":515},[438,2556,764],{"class":448},[438,2558,2559],{"class":440,"line":1514},[438,2560,723],{"emptyLinePlaceholder":722},[438,2562,2563],{"class":440,"line":1529},[438,2564,2565],{"class":775},"\u002F\u002F the build injects both handles for Message at this call site\n",[438,2567,2568,2570,2573,2575,2577,2579,2582,2584,2586],{"class":440,"line":1534},[438,2569,534],{"class":729},[438,2571,2572],{"class":444}," messageCodec ",[438,2574,787],{"class":448},[438,2576,2373],{"class":790},[438,2578,455],{"class":448},[438,2580,2581],{"class":515},"Message",[438,2583,799],{"class":448},[438,2585,894],{"class":444},[438,2587,716],{"class":448},[438,2589,2590],{"class":440,"line":2012},[438,2591,723],{"emptyLinePlaceholder":722},[438,2593,2594,2596,2599,2601,2603,2605],{"class":440,"line":2023},[438,2595,534],{"class":729},[438,2597,2598],{"class":444}," message",[438,2600,519],{"class":448},[438,2602,2525],{"class":515},[438,2604,736],{"class":448},[438,2606,1080],{"class":448},[438,2608,2609,2612,2614,2617,2620],{"class":440,"line":2029},[438,2610,2611],{"class":741},"  id",[438,2613,519],{"class":448},[438,2615,2616],{"class":907}," 42",[438,2618,2619],{"class":729},"n",[438,2621,1849],{"class":448},[438,2623,2624,2627,2629,2631,2633,2635,2637,2640,2642,2644],{"class":440,"line":2036},[438,2625,2626],{"class":741},"  sentAt",[438,2628,519],{"class":448},[438,2630,888],{"class":448},[438,2632,891],{"class":790},[438,2634,802],{"class":444},[438,2636,713],{"class":448},[438,2638,2639],{"class":709},"2020-01-02T03:04:05.000Z",[438,2641,713],{"class":448},[438,2643,821],{"class":444},[438,2645,1849],{"class":448},[438,2647,2648,2651,2653,2655,2658,2660],{"class":440,"line":2052},[438,2649,2650],{"class":741},"  body",[438,2652,519],{"class":448},[438,2654,706],{"class":448},[438,2656,2657],{"class":709},"hi",[438,2659,713],{"class":448},[438,2661,1849],{"class":448},[438,2663,2664],{"class":440,"line":2058},[438,2665,764],{"class":448},[438,2667,2668],{"class":440,"line":2063},[438,2669,723],{"emptyLinePlaceholder":722},[438,2671,2672],{"class":440,"line":2087},[438,2673,2674],{"class":775},"\u002F\u002F your code owns the JSON.stringify and JSON.parse, so many values share one envelope\n",[438,2676,2677,2679,2682,2684,2686,2688,2691,2694,2696,2698,2701],{"class":440,"line":2095},[438,2678,534],{"class":729},[438,2680,2681],{"class":444}," wire ",[438,2683,787],{"class":448},[438,2685,1648],{"class":444},[438,2687,598],{"class":448},[438,2689,2690],{"class":790},"stringify",[438,2692,2693],{"class":444},"(messageCodec",[438,2695,598],{"class":448},[438,2697,2504],{"class":790},[438,2699,2700],{"class":444},"(message))",[438,2702,716],{"class":448},[438,2704,2705,2707,2710,2712,2715,2717,2720,2723,2725,2727,2730],{"class":440,"line":2110},[438,2706,534],{"class":729},[438,2708,2709],{"class":444}," restored ",[438,2711,787],{"class":448},[438,2713,2714],{"class":444}," messageCodec",[438,2716,598],{"class":448},[438,2718,2719],{"class":790},"restore",[438,2721,2722],{"class":444},"(JSON",[438,2724,598],{"class":448},[438,2726,1653],{"class":790},[438,2728,2729],{"class":444},"(wire))",[438,2731,716],{"class":448},[438,2733,2734],{"class":440,"line":2115},[438,2735,723],{"emptyLinePlaceholder":722},[438,2737,2738,2740,2742,2745,2747,2749,2751,2754],{"class":440,"line":2120},[438,2739,951],{"class":685},[438,2741,689],{"class":448},[438,2743,2744],{"class":444},"jsonValueCodec",[438,2746,461],{"class":448},[438,2748,2714],{"class":444},[438,2750,461],{"class":448},[438,2752,2753],{"class":444}," restored",[438,2755,764],{"class":448},[414,2757,2759],{"id":2758},"function-hashes-as-storage-keys","Function Hashes as Storage Keys",[405,2761,2762,2763,2766],{},"A framework that already holds a type's id can build the storage key for one of that type's functions itself. ",[409,2764,2765],{},"getFnHash"," returns the function half of that key, and you join it with the type id.",[429,2768,2770],{"className":431,"code":2769,"language":433,"meta":434,"style":434},"import {getRunTypeId} from '@mionjs\u002Frun-types';\nimport {getFnHash} from '@mionjs\u002Frun-types\u002Fruntime';\n\n\u002F\u002F the default validator's function id; every getFnHash id is stable across releases\nconst validateId = getFnHash('validate');\n\n\u002F\u002F options that change the generated function change its id too\nconst typeofValidateId = getFnHash('validate', {numberMode: 'typeof'});\n\n\u002F\u002F each JSON encoder strategy is its own function\nconst encodeMutateId = getFnHash('jsonEncoder', {strategy: 'mutate'});\n\n\u002F\u002F the type id is the value getRunTypeId returns\ntype User = {id: number; name: string};\nconst userTypeId = getRunTypeId\u003CUser>();\nconst userValidatorKey = `${validateId}_${userTypeId}`;\n\nexport {validateId, typeofValidateId, encodeMutateId, userValidatorKey};\n",[409,2771,2772,2793,2813,2817,2822,2847,2851,2856,2897,2901,2906,2946,2950,2955,2981,3003,3033,3037],{"__ignoreMap":434},[438,2773,2774,2776,2778,2781,2783,2785,2787,2789,2791],{"class":440,"line":441},[438,2775,686],{"class":685},[438,2777,689],{"class":448},[438,2779,2780],{"class":444},"getRunTypeId",[438,2782,700],{"class":448},[438,2784,703],{"class":685},[438,2786,706],{"class":448},[438,2788,710],{"class":709},[438,2790,713],{"class":448},[438,2792,716],{"class":448},[438,2794,2795,2797,2799,2801,2803,2805,2807,2809,2811],{"class":440,"line":719},[438,2796,686],{"class":685},[438,2798,689],{"class":448},[438,2800,2765],{"class":444},[438,2802,700],{"class":448},[438,2804,703],{"class":685},[438,2806,706],{"class":448},[438,2808,2358],{"class":709},[438,2810,713],{"class":448},[438,2812,716],{"class":448},[438,2814,2815],{"class":440,"line":726},[438,2816,723],{"emptyLinePlaceholder":722},[438,2818,2819],{"class":440,"line":767},[438,2820,2821],{"class":775},"\u002F\u002F the default validator's function id; every getFnHash id is stable across releases\n",[438,2823,2824,2826,2829,2831,2834,2836,2838,2841,2843,2845],{"class":440,"line":772},[438,2825,534],{"class":729},[438,2827,2828],{"class":444}," validateId ",[438,2830,787],{"class":448},[438,2832,2833],{"class":790}," getFnHash",[438,2835,802],{"class":444},[438,2837,713],{"class":448},[438,2839,2840],{"class":709},"validate",[438,2842,713],{"class":448},[438,2844,821],{"class":444},[438,2846,716],{"class":448},[438,2848,2849],{"class":440,"line":779},[438,2850,723],{"emptyLinePlaceholder":722},[438,2852,2853],{"class":440,"line":826},[438,2854,2855],{"class":775},"\u002F\u002F options that change the generated function change its id too\n",[438,2857,2858,2860,2863,2865,2867,2869,2871,2873,2875,2877,2879,2882,2884,2886,2889,2891,2893,2895],{"class":440,"line":867},[438,2859,534],{"class":729},[438,2861,2862],{"class":444}," typeofValidateId ",[438,2864,787],{"class":448},[438,2866,2833],{"class":790},[438,2868,802],{"class":444},[438,2870,713],{"class":448},[438,2872,2840],{"class":709},[438,2874,713],{"class":448},[438,2876,461],{"class":448},[438,2878,689],{"class":448},[438,2880,2881],{"class":741},"numberMode",[438,2883,519],{"class":448},[438,2885,706],{"class":448},[438,2887,2888],{"class":709},"typeof",[438,2890,713],{"class":448},[438,2892,700],{"class":448},[438,2894,821],{"class":444},[438,2896,716],{"class":448},[438,2898,2899],{"class":440,"line":872},[438,2900,723],{"emptyLinePlaceholder":722},[438,2902,2903],{"class":440,"line":878},[438,2904,2905],{"class":775},"\u002F\u002F each JSON encoder strategy is its own function\n",[438,2907,2908,2910,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2938,2940,2942,2944],{"class":440,"line":913},[438,2909,534],{"class":729},[438,2911,2912],{"class":444}," encodeMutateId ",[438,2914,787],{"class":448},[438,2916,2833],{"class":790},[438,2918,802],{"class":444},[438,2920,713],{"class":448},[438,2922,2017],{"class":709},[438,2924,713],{"class":448},[438,2926,461],{"class":448},[438,2928,689],{"class":448},[438,2930,671],{"class":741},[438,2932,519],{"class":448},[438,2934,706],{"class":448},[438,2936,2937],{"class":709},"mutate",[438,2939,713],{"class":448},[438,2941,700],{"class":448},[438,2943,821],{"class":444},[438,2945,716],{"class":448},[438,2947,2948],{"class":440,"line":943},[438,2949,723],{"emptyLinePlaceholder":722},[438,2951,2952],{"class":440,"line":948},[438,2953,2954],{"class":775},"\u002F\u002F the type id is the value getRunTypeId returns\n",[438,2956,2957,2959,2961,2963,2965,2967,2969,2971,2973,2975,2977,2979],{"class":440,"line":1514},[438,2958,730],{"class":729},[438,2960,1734],{"class":515},[438,2962,736],{"class":448},[438,2964,689],{"class":448},[438,2966,445],{"class":741},[438,2968,519],{"class":448},[438,2970,1182],{"class":515},[438,2972,1185],{"class":448},[438,2974,1188],{"class":741},[438,2976,519],{"class":448},[438,2978,1077],{"class":515},[438,2980,764],{"class":448},[438,2982,2983,2985,2988,2990,2993,2995,2997,2999,3001],{"class":440,"line":1529},[438,2984,534],{"class":729},[438,2986,2987],{"class":444}," userTypeId ",[438,2989,787],{"class":448},[438,2991,2992],{"class":790}," getRunTypeId",[438,2994,455],{"class":448},[438,2996,1792],{"class":515},[438,2998,799],{"class":448},[438,3000,894],{"class":444},[438,3002,716],{"class":448},[438,3004,3005,3007,3010,3012,3015,3018,3020,3023,3025,3028,3031],{"class":440,"line":1534},[438,3006,534],{"class":729},[438,3008,3009],{"class":444}," userValidatorKey ",[438,3011,787],{"class":448},[438,3013,3014],{"class":448}," `${",[438,3016,3017],{"class":444},"validateId",[438,3019,700],{"class":448},[438,3021,3022],{"class":709},"_",[438,3024,1129],{"class":448},[438,3026,3027],{"class":444},"userTypeId",[438,3029,3030],{"class":448},"}`",[438,3032,716],{"class":448},[438,3034,3035],{"class":440,"line":2012},[438,3036,723],{"emptyLinePlaceholder":722},[438,3038,3039,3041,3043,3045,3047,3050,3052,3055,3057,3060],{"class":440,"line":2023},[438,3040,951],{"class":685},[438,3042,689],{"class":448},[438,3044,3017],{"class":444},[438,3046,461],{"class":448},[438,3048,3049],{"class":444}," typeofValidateId",[438,3051,461],{"class":448},[438,3053,3054],{"class":444}," encodeMutateId",[438,3056,461],{"class":448},[438,3058,3059],{"class":444}," userValidatorKey",[438,3061,764],{"class":448},[3063,3064,3065],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}","The compile-time markers that tell RunTypes what to generate and inject.","md",null,{"toc":24},{"title":217,"description":3066},"LsW110CuOV_qAEYxVB94wE8oxCDyqvPhv9qBzfeuSjA",1793324363741]