[{"data":1,"prerenderedAt":2972},["ShallowReactive",2],{"navigation_docs":3,"-runtypes-guide-json-schemas":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":209,"body":401,"description":2966,"extension":2967,"links":2968,"meta":2969,"navigation":478,"path":210,"seo":2970,"stem":211,"__hash__":2971},"docs\u002F02.runtypes\u002F02.guide\u002F08.json-schemas.md",{"type":402,"value":403},"minimark",[404,408,411,416,427,551,571,587,591,598,649,652,656,663,757,764,768,789,939,955,959,978,997,1001,1012,1015,1018,1086,1100,1105,1119,1287,1290,1294,1299,1594,1610,1635,1651,1655,1664,1776,1785,1894,1897,1901,1906,1911,2054,2061,2065,2212,2222,2226,2354,2371,2375,2548,2560,2564,2736,2742,2746,2922,2928,2932,2943,2954,2962],[405,406,407],"p",{},"Every type you can validate also has a JSON Schema document (draft 2020-12). It is generated at build time, so reading it at runtime is a plain function call.",[405,409,410],{},"Use it to publish an OpenAPI description of your request bodies, to give a tool-calling AI the shape of a function's arguments, or to let any schema-aware tool read your types.",[412,413,415],"h2",{"id":414},"generating-a-json-schema","Generating a JSON Schema",[405,417,418,422,423,426],{},[419,420,421],"code",{},"createJsonSchemaFn\u003CT>()"," returns a function that produces the document for ",[419,424,425],{},"T",". It accepts the same three call forms as every other factory (type-first, value-first, run-type).",[428,429,434],"pre",{"className":430,"code":431,"language":432,"meta":433,"style":433},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const orderSchemaDoc = createJsonSchemaFn\u003COrder>();\n\norderSchemaDoc();\n\u002F\u002F {\n\u002F\u002F   type: 'object',\n\u002F\u002F   properties: {\n\u002F\u002F     id: {type: 'string'},\n\u002F\u002F     total: {type: 'string', pattern: '^-?[0-9]+$', jsType: 'bigint'},\n\u002F\u002F     placed: {type: 'string', format: 'date-time', jsType: 'Date'},\n\u002F\u002F     note: {type: 'string'},\n\u002F\u002F   },\n\u002F\u002F   required: ['id', 'total', 'placed'],\n\u002F\u002F }\n","ts","",[419,435,436,473,480,490,497,503,509,515,521,527,533,539,545],{"__ignoreMap":433},[437,438,441,445,449,453,457,460,464,467,470],"span",{"class":439,"line":440},"line",1,[437,442,444],{"class":443},"spNyl","const",[437,446,448],{"class":447},"sTEyZ"," orderSchemaDoc ",[437,450,452],{"class":451},"sMK4o","=",[437,454,456],{"class":455},"s2Zo4"," createJsonSchemaFn",[437,458,459],{"class":451},"\u003C",[437,461,463],{"class":462},"sBMFI","Order",[437,465,466],{"class":451},">",[437,468,469],{"class":447},"()",[437,471,472],{"class":451},";\n",[437,474,476],{"class":439,"line":475},2,[437,477,479],{"emptyLinePlaceholder":478},true,"\n",[437,481,483,486,488],{"class":439,"line":482},3,[437,484,485],{"class":455},"orderSchemaDoc",[437,487,469],{"class":447},[437,489,472],{"class":451},[437,491,493],{"class":439,"line":492},4,[437,494,496],{"class":495},"sHwdD","\u002F\u002F {\n",[437,498,500],{"class":439,"line":499},5,[437,501,502],{"class":495},"\u002F\u002F   type: 'object',\n",[437,504,506],{"class":439,"line":505},6,[437,507,508],{"class":495},"\u002F\u002F   properties: {\n",[437,510,512],{"class":439,"line":511},7,[437,513,514],{"class":495},"\u002F\u002F     id: {type: 'string'},\n",[437,516,518],{"class":439,"line":517},8,[437,519,520],{"class":495},"\u002F\u002F     total: {type: 'string', pattern: '^-?[0-9]+$', jsType: 'bigint'},\n",[437,522,524],{"class":439,"line":523},9,[437,525,526],{"class":495},"\u002F\u002F     placed: {type: 'string', format: 'date-time', jsType: 'Date'},\n",[437,528,530],{"class":439,"line":529},10,[437,531,532],{"class":495},"\u002F\u002F     note: {type: 'string'},\n",[437,534,536],{"class":439,"line":535},11,[437,537,538],{"class":495},"\u002F\u002F   },\n",[437,540,542],{"class":439,"line":541},12,[437,543,544],{"class":495},"\u002F\u002F   required: ['id', 'total', 'placed'],\n",[437,546,548],{"class":439,"line":547},13,[437,549,550],{"class":495},"\u002F\u002F }\n",[405,552,553,554,557,558,557,561,564,565,570],{},"Where a value is JavaScript-only (a ",[419,555,556],{},"Date",", a ",[419,559,560],{},"bigint",[419,562,563],{},"Map","), an extra keyword says what the JSON becomes after decoding. These keywords are the ",[566,567,569],"a",{"href":568},"#describing-javascript-features-in-a-json-schema","JSON Schema JS"," extension.",[572,573,574,575,578,579,582,583,586],"note",{},"A type that contains itself emits ",[419,576,577],{},"{$ref: '#'}"," at the cycle, and shared inner cycles go under ",[419,580,581],{},"$defs",". What a document cannot express (a function member, a class identity) is left out or widened to ",[419,584,585],{},"{}",", so a document may say less than the type, but never something wrong.",[412,588,590],{"id":589},"standard-only-json-schema","Standard-Only JSON Schema",[405,592,593,594,597],{},"Pass ",[419,595,596],{},"portable"," to strip every extension keyword.",[428,599,601],{"className":430,"code":600,"language":432,"meta":433,"style":433},"orderSchemaDoc({libraryOptions: {portable: true}});\n\u002F\u002F placed is now {type: 'string', format: 'date-time'} and total is\n\u002F\u002F {type: 'string', pattern: '^-?[0-9]+$'}\n",[419,602,603,639,644],{"__ignoreMap":433},[437,604,605,607,610,613,617,620,623,625,627,631,634,637],{"class":439,"line":440},[437,606,485],{"class":455},[437,608,609],{"class":447},"(",[437,611,612],{"class":451},"{",[437,614,616],{"class":615},"swJcz","libraryOptions",[437,618,619],{"class":451},":",[437,621,622],{"class":451}," {",[437,624,596],{"class":615},[437,626,619],{"class":451},[437,628,630],{"class":629},"sfNiH"," true",[437,632,633],{"class":451},"}}",[437,635,636],{"class":447},")",[437,638,472],{"class":451},[437,640,641],{"class":439,"line":475},[437,642,643],{"class":495},"\u002F\u002F placed is now {type: 'string', format: 'date-time'} and total is\n",[437,645,646],{"class":439,"line":482},[437,647,648],{"class":495},"\u002F\u002F {type: 'string', pattern: '^-?[0-9]+$'}\n",[405,650,651],{},"The document still accepts the same values.",[412,653,655],{"id":654},"extra-keys-in-the-document","Extra Keys in the Document",[405,657,658,659,662],{},"By default the document does not restrict extra keys, just as validation ignores them. Pass the ",[566,660,661],{"href":202},"JSON encoder strategy"," you encode with and the document matches it.",[428,664,666],{"className":430,"code":665,"language":432,"meta":433,"style":433},"\u002F\u002F clone and direct send no extra keys, so every object with declared properties is closed\norderSchemaDoc({libraryOptions: {encoderStrategy: 'clone'}});\n\u002F\u002F {type: 'object', properties: {...}, required: [...], additionalProperties: false}\n\n\u002F\u002F mutate keeps extra keys, so it stays open; records keep the index schema in additionalProperties\norderSchemaDoc({libraryOptions: {encoderStrategy: 'mutate'}}); \u002F\u002F unchanged\n",[419,667,668,673,708,713,717,722],{"__ignoreMap":433},[437,669,670],{"class":439,"line":440},[437,671,672],{"class":495},"\u002F\u002F clone and direct send no extra keys, so every object with declared properties is closed\n",[437,674,675,677,679,681,683,685,687,690,692,695,699,702,704,706],{"class":439,"line":475},[437,676,485],{"class":455},[437,678,609],{"class":447},[437,680,612],{"class":451},[437,682,616],{"class":615},[437,684,619],{"class":451},[437,686,622],{"class":451},[437,688,689],{"class":615},"encoderStrategy",[437,691,619],{"class":451},[437,693,694],{"class":451}," '",[437,696,698],{"class":697},"sfazB","clone",[437,700,701],{"class":451},"'",[437,703,633],{"class":451},[437,705,636],{"class":447},[437,707,472],{"class":451},[437,709,710],{"class":439,"line":482},[437,711,712],{"class":495},"\u002F\u002F {type: 'object', properties: {...}, required: [...], additionalProperties: false}\n",[437,714,715],{"class":439,"line":492},[437,716,479],{"emptyLinePlaceholder":478},[437,718,719],{"class":439,"line":499},[437,720,721],{"class":495},"\u002F\u002F mutate keeps extra keys, so it stays open; records keep the index schema in additionalProperties\n",[437,723,724,726,728,730,732,734,736,738,740,742,745,747,749,751,754],{"class":439,"line":505},[437,725,485],{"class":455},[437,727,609],{"class":447},[437,729,612],{"class":451},[437,731,616],{"class":615},[437,733,619],{"class":451},[437,735,622],{"class":451},[437,737,689],{"class":615},[437,739,619],{"class":451},[437,741,694],{"class":451},[437,743,744],{"class":697},"mutate",[437,746,701],{"class":451},[437,748,633],{"class":451},[437,750,636],{"class":447},[437,752,753],{"class":451},";",[437,755,756],{"class":495}," \u002F\u002F unchanged\n",[405,758,759,760,763],{},"No option sets ",[419,761,762],{},"additionalProperties"," by hand. The compact strategy throws: a keyed document cannot describe its positional arrays.",[412,765,767],{"id":766},"standard-schema-interface","Standard Schema Interface",[405,769,770,773,774,780,781,784,785,788],{},[419,771,772],{},"createStandardSchema\u003CT>()"," returns one object with both ",[566,775,779],{"href":776,"rel":777},"https:\u002F\u002Fgithub.com\u002Fstandard-schema\u002Fstandard-schema",[778],"nofollow","Standard Schema"," interfaces: validation (",[419,782,783],{},"~standard.validate",") and JSON Schema (",[419,786,787],{},"~standard.jsonSchema","). Any framework that understands either one can use it.",[428,790,792],{"className":430,"code":791,"language":432,"meta":433,"style":433},"const orderSchema = createStandardSchema\u003COrder>();\n\norderSchema['~standard'].validate({id: 'o1'}); \u002F\u002F {issues: [...]}\norderSchema['~standard'].jsonSchema.input(); \u002F\u002F the same document as above\norderSchema['~standard'].jsonSchema.output({target: 'draft-2020-12'});\n",[419,793,794,816,820,867,896],{"__ignoreMap":433},[437,795,796,798,801,803,806,808,810,812,814],{"class":439,"line":440},[437,797,444],{"class":443},[437,799,800],{"class":447}," orderSchema ",[437,802,452],{"class":451},[437,804,805],{"class":455}," createStandardSchema",[437,807,459],{"class":451},[437,809,463],{"class":462},[437,811,466],{"class":451},[437,813,469],{"class":447},[437,815,472],{"class":451},[437,817,818],{"class":439,"line":475},[437,819,479],{"emptyLinePlaceholder":478},[437,821,822,825,827,830,832,835,838,841,843,845,848,850,852,855,857,860,862,864],{"class":439,"line":482},[437,823,824],{"class":447},"orderSchema[",[437,826,701],{"class":451},[437,828,829],{"class":697},"~standard",[437,831,701],{"class":451},[437,833,834],{"class":447},"]",[437,836,837],{"class":451},".",[437,839,840],{"class":455},"validate",[437,842,609],{"class":447},[437,844,612],{"class":451},[437,846,847],{"class":615},"id",[437,849,619],{"class":451},[437,851,694],{"class":451},[437,853,854],{"class":697},"o1",[437,856,701],{"class":451},[437,858,859],{"class":451},"}",[437,861,636],{"class":447},[437,863,753],{"class":451},[437,865,866],{"class":495}," \u002F\u002F {issues: [...]}\n",[437,868,869,871,873,875,877,879,881,884,886,889,891,893],{"class":439,"line":492},[437,870,824],{"class":447},[437,872,701],{"class":451},[437,874,829],{"class":697},[437,876,701],{"class":451},[437,878,834],{"class":447},[437,880,837],{"class":451},[437,882,883],{"class":447},"jsonSchema",[437,885,837],{"class":451},[437,887,888],{"class":455},"input",[437,890,469],{"class":447},[437,892,753],{"class":451},[437,894,895],{"class":495}," \u002F\u002F the same document as above\n",[437,897,898,900,902,904,906,908,910,912,914,917,919,921,924,926,928,931,933,935,937],{"class":439,"line":499},[437,899,824],{"class":447},[437,901,701],{"class":451},[437,903,829],{"class":697},[437,905,701],{"class":451},[437,907,834],{"class":447},[437,909,837],{"class":451},[437,911,883],{"class":447},[437,913,837],{"class":451},[437,915,916],{"class":455},"output",[437,918,609],{"class":447},[437,920,612],{"class":451},[437,922,923],{"class":615},"target",[437,925,619],{"class":451},[437,927,694],{"class":451},[437,929,930],{"class":697},"draft-2020-12",[437,932,701],{"class":451},[437,934,859],{"class":451},[437,936,636],{"class":447},[437,938,472],{"class":451},[405,940,941,944,945,948,949,951,952,954],{},[419,942,943],{},"input()"," and ",[419,946,947],{},"output()"," return the same document, because validation does not transform values. The optional ",[419,950,923],{}," names the dialect: only ",[419,953,930],{}," is supported, any other value throws.",[412,956,958],{"id":957},"unions-in-the-generated-schema","Unions in the Generated Schema",[405,960,961,962,965,966,969,970,973,974,977],{},"A union whose members are all plain JSON (",[419,963,964],{},"'a' | 'b'",", ",[419,967,968],{},"string | null",") travels as the bare value and gets the ordinary ",[419,971,972],{},"enum"," or ",[419,975,976],{},"anyOf"," document.",[405,979,980,981,984,985,988,989,992,993,996],{},"A union with JavaScript-only or object members travels as a two slot array, ",[419,982,983],{},"[index, value]",", because the JSON alone cannot say which member a value came from. The document spells out those pairs, merges object members into one arm under index ",[419,986,987],{},"-1",", and marks the node with ",[419,990,991],{},"jsType: 'union'",". A value the document accepts is a value the ",[566,994,995],{"href":202},"JSON decoder"," can decode.",[412,998,1000],{"id":999},"describing-javascript-features-in-a-json-schema","Describing JavaScript Features in a JSON Schema",[405,1002,1003,1004,557,1006,1008,1009,1011],{},"A ",[419,1005,556],{},[419,1007,560],{}," or a ",[419,1010,563],{}," travels as JSON (an ISO string, a string of digits, an array of pairs), but a standard schema can only describe that string or array. This extension adds keywords next to the standard ones that say what the JSON becomes in JavaScript after decoding.",[572,1013,1014],{},"The extension stores full JavaScript and TypeScript type information inside a JSON Schema. The generator writes these keywords into every document it emits.",[405,1016,1017],{},"A document that uses the extension is still valid JSON Schema (draft 2020-12). The standard tells validators to ignore unknown keywords, so every validator checks the same values.",[428,1019,1023],{"className":1020,"code":1021,"language":1022,"meta":433,"style":433},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\"type\": \"string\", \"format\": \"date-time\", \"jsType\": \"Date\"}\n","json",[419,1024,1025],{"__ignoreMap":433},[437,1026,1027,1029,1032,1035,1037,1039,1042,1045,1047,1050,1052,1055,1057,1059,1061,1064,1066,1068,1070,1073,1075,1077,1079,1081,1083],{"class":439,"line":440},[437,1028,612],{"class":451},[437,1030,1031],{"class":451},"\"",[437,1033,1034],{"class":443},"type",[437,1036,1031],{"class":451},[437,1038,619],{"class":451},[437,1040,1041],{"class":451}," \"",[437,1043,1044],{"class":697},"string",[437,1046,1031],{"class":451},[437,1048,1049],{"class":451},",",[437,1051,1041],{"class":451},[437,1053,1054],{"class":443},"format",[437,1056,1031],{"class":451},[437,1058,619],{"class":451},[437,1060,1041],{"class":451},[437,1062,1063],{"class":697},"date-time",[437,1065,1031],{"class":451},[437,1067,1049],{"class":451},[437,1069,1041],{"class":451},[437,1071,1072],{"class":443},"jsType",[437,1074,1031],{"class":451},[437,1076,619],{"class":451},[437,1078,1041],{"class":451},[437,1080,556],{"class":697},[437,1082,1031],{"class":451},[437,1084,1085],{"class":451},"}\n",[405,1087,1088,1089,1092,1093,1096,1097,1099],{},"Every validator accepts ",[419,1090,1091],{},"\"2026-08-10T09:00:00Z\""," and rejects ",[419,1094,1095],{},"42",". A reader that knows the extension also learns the decoded value is a ",[419,1098,556],{},", not a string.",[1101,1102,1104],"h3",{"id":1103},"keywords","Keywords",[405,1106,1107,1108,1111,1112,1115,1116,1118],{},"Each keyword starts with a prefix that says where the described thing comes from: ",[419,1109,1110],{},"js"," is a JavaScript value, ",[419,1113,1114],{},"rt"," is a RunTypes type format, and ",[419,1117,432],{}," is a TypeScript-only fact no JSON value can show.",[1120,1121,1122,1138],"table",{},[1123,1124,1125],"thead",{},[1126,1127,1128,1132,1135],"tr",{},[1129,1130,1131],"th",{},"Keyword",[1129,1133,1134],{},"Sits beside",[1129,1136,1137],{},"Says",[1139,1140,1141,1155,1170,1184,1197,1212,1227,1246,1261,1274],"tbody",{},[1126,1142,1143,1148,1152],{},[1144,1145,1146],"td",{},[419,1147,1072],{},[1144,1149,1150],{},[419,1151,1034],{},[1144,1153,1154],{},"which JavaScript value the JSON decodes to",[1126,1156,1157,1162,1167],{},[1144,1158,1159],{},[419,1160,1161],{},"jsResolved",[1144,1163,1164],{},[419,1165,1166],{},"jsType: 'Promise'",[1144,1168,1169],{},"the schema of the resolved value",[1126,1171,1172,1177,1181],{},[1144,1173,1174],{},[419,1175,1176],{},"rtFormat",[1144,1178,1179],{},[419,1180,1054],{},[1144,1182,1183],{},"which type format the value belongs to",[1126,1185,1186,1191,1194],{},[1144,1187,1188],{},[419,1189,1190],{},"rtFormatParams",[1144,1192,1193],{},"the constraint keywords",[1144,1195,1196],{},"the format parameters, exactly as written",[1126,1198,1199,1204,1209],{},[1144,1200,1201],{},[419,1202,1203],{},"tsLabels",[1144,1205,1206],{},[419,1207,1208],{},"prefixItems",[1144,1210,1211],{},"the tuple slot names",[1126,1213,1214,1219,1224],{},[1144,1215,1216],{},[419,1217,1218],{},"tsReadonly",[1144,1220,1221],{},[419,1222,1223],{},"required",[1144,1225,1226],{},"which members are readonly",[1126,1228,1229,1234,1243],{},[1144,1230,1231],{},[419,1232,1233],{},"tsIndexes",[1144,1235,1236,1239,1240],{},[419,1237,1238],{},"propertyNames"," \u002F ",[419,1241,1242],{},"patternProperties",[1144,1244,1245],{},"index signatures whose key is not a plain string",[1126,1247,1248,1253,1258],{},[1144,1249,1250],{},[419,1251,1252],{},"tsTemplate",[1144,1254,1255],{},[419,1256,1257],{},"pattern",[1144,1259,1260],{},"the parts of a template literal type",[1126,1262,1263,1268,1271],{},[1144,1264,1265],{},[419,1266,1267],{},"tsFunction",[1144,1269,1270],{},"nothing (functions have no JSON form)",[1144,1272,1273],{},"a function signature",[1126,1275,1276,1281,1284],{},[1144,1277,1278],{},[419,1279,1280],{},"tsMeta",[1144,1282,1283],{},"nothing (metadata has no JSON form)",[1144,1285,1286],{},"a branded or metadata intersection type",[405,1288,1289],{},"Every keyword is optional. A schema that uses none of them is ordinary JSON Schema.",[1101,1291,1293],{"id":1292},"what-the-json-decodes-to","What the JSON Decodes To",[405,1295,1296,1298],{},[419,1297,1072],{}," always sits next to the standard keywords that describe the JSON.",[1120,1300,1301,1314],{},[1123,1302,1303],{},[1126,1304,1305,1308,1311],{},[1129,1306,1307],{},"TypeScript type",[1129,1309,1310],{},"Schema",[1129,1312,1313],{},"Travels as",[1139,1315,1316,1330,1349,1363,1379,1394,1409,1424,1451,1466,1481,1498,1515,1531,1549,1564,1579],{},[1126,1317,1318,1322,1327],{},[1144,1319,1320],{},[419,1321,556],{},[1144,1323,1324],{},[419,1325,1326],{},"{type: 'string', format: 'date-time', jsType: 'Date'}",[1144,1328,1329],{},"an ISO date-time string",[1126,1331,1332,1337,1342],{},[1144,1333,1334],{},[419,1335,1336],{},"URL",[1144,1338,1339],{},[419,1340,1341],{},"{type: 'string', format: 'uri', jsType: 'URL'}",[1144,1343,1344,1345,1348],{},"its ",[419,1346,1347],{},"href"," string",[1126,1350,1351,1355,1360],{},[1144,1352,1353],{},[419,1354,560],{},[1144,1356,1357],{},[419,1358,1359],{},"{type: 'string', pattern: '^-?[0-9]+$', jsType: 'bigint'}",[1144,1361,1362],{},"a string of digits",[1126,1364,1365,1371,1376],{},[1144,1366,1367,1370],{},[419,1368,1369],{},"123n"," (a bigint literal)",[1144,1372,1373],{},[419,1374,1375],{},"{type: 'string', const: '123', jsType: 'bigint'}",[1144,1377,1378],{},"that exact digit string",[1126,1380,1381,1386,1391],{},[1144,1382,1383],{},[419,1384,1385],{},"Temporal.Instant",[1144,1387,1388],{},[419,1389,1390],{},"{type: 'string', format: 'date-time', jsType: 'Temporal.Instant'}",[1144,1392,1393],{},"a date-time string",[1126,1395,1396,1401,1406],{},[1144,1397,1398],{},[419,1399,1400],{},"Temporal.PlainDate",[1144,1402,1403],{},[419,1404,1405],{},"{type: 'string', format: 'date', jsType: 'Temporal.PlainDate'}",[1144,1407,1408],{},"a date string",[1126,1410,1411,1416,1421],{},[1144,1412,1413],{},[419,1414,1415],{},"Temporal.Duration",[1144,1417,1418],{},[419,1419,1420],{},"{type: 'string', format: 'duration', jsType: 'Temporal.Duration'}",[1144,1422,1423],{},"a duration string",[1126,1425,1426,1443,1448],{},[1144,1427,1428,965,1431,965,1434,965,1437,965,1440],{},[419,1429,1430],{},"Temporal.ZonedDateTime",[419,1432,1433],{},"Temporal.PlainTime",[419,1435,1436],{},"Temporal.PlainDateTime",[419,1438,1439],{},"Temporal.PlainYearMonth",[419,1441,1442],{},"Temporal.PlainMonthDay",[1144,1444,1445],{},[419,1446,1447],{},"{type: 'string', pattern: '...', jsType: '...'}",[1144,1449,1450],{},"the string the type's own toJSON produces",[1126,1452,1453,1458,1463],{},[1144,1454,1455],{},[419,1456,1457],{},"Map\u003CK, V>",[1144,1459,1460],{},[419,1461,1462],{},"{type: 'array', items: {type: 'array', prefixItems: [K, V], items: false, minItems: 2}, jsType: 'Map'}",[1144,1464,1465],{},"an array of key and value pairs",[1126,1467,1468,1473,1478],{},[1144,1469,1470],{},[419,1471,1472],{},"Set\u003CV>",[1144,1474,1475],{},[419,1476,1477],{},"{type: 'array', items: V, uniqueItems: true, jsType: 'Set'}",[1144,1479,1480],{},"an array of unique items",[1126,1482,1483,1486,1495],{},[1144,1484,1485],{},"a union with JavaScript-only or object members",[1144,1487,1488,1491,1492,1494],{},[419,1489,1490],{},"{anyOf: [...], jsType: 'union'}",", each arm an ",[419,1493,983],{}," pair schema",[1144,1496,1497],{},"a two slot array: the member index, then the member's own wire value",[1126,1499,1500,1505,1510],{},[1144,1501,1502],{},[419,1503,1504],{},"undefined",[1144,1506,1507],{},[419,1508,1509],{},"{type: 'null', jsType: 'undefined'}",[1144,1511,1512],{},[419,1513,1514],{},"null",[1126,1516,1517,1522,1527],{},[1144,1518,1519],{},[419,1520,1521],{},"void",[1144,1523,1524],{},[419,1525,1526],{},"{type: 'null', jsType: 'void'}",[1144,1528,1529],{},[419,1530,1514],{},[1126,1532,1533,1538,1543],{},[1144,1534,1535],{},[419,1536,1537],{},"Promise\u003CT>",[1144,1539,1540],{},[419,1541,1542],{},"{jsType: 'Promise', jsResolved: T}",[1144,1544,1545,1546,1548],{},"whatever ",[419,1547,425],{}," travels as",[1126,1550,1551,1556,1561],{},[1144,1552,1553],{},[419,1554,1555],{},"symbol",[1144,1557,1558],{},[419,1559,1560],{},"{jsType: 'symbol'}",[1144,1562,1563],{},"nothing, a symbol can not be encoded",[1126,1565,1566,1571,1576],{},[1144,1567,1568],{},[419,1569,1570],{},"any",[1144,1572,1573],{},[419,1574,1575],{},"{jsType: 'any'}",[1144,1577,1578],{},"any JSON value",[1126,1580,1581,1586,1591],{},[1144,1582,1583],{},[419,1584,1585],{},"object",[1144,1587,1588],{},[419,1589,1590],{},"{type: ['object', 'array'], jsType: 'object'}",[1144,1592,1593],{},"any object or array",[405,1595,1596,1597,1600,1601,1603,1604,1606,1607,1609],{},"The ",[419,1598,1599],{},"ZonedDateTime"," row uses ",[419,1602,1257],{},", not ",[419,1605,1054],{},", because those strings are not registered JSON Schema formats. A ZonedDateTime string holds a time zone name in brackets, which ",[419,1608,1063],{}," does not allow, so that format would fail good data on other validators.",[405,1611,1003,1612,973,1615,1618,1619,1239,1622,965,1625,944,1628,1631,1632,1634],{},[419,1613,1614],{},"FormattedSet",[419,1616,1617],{},"FormattedMap"," puts its constraints on the outer array, under the standard names ",[419,1620,1621],{},"minItems",[419,1623,1624],{},"maxItems",[419,1626,1627],{},"uniqueItems",[419,1629,1630],{},"contains",". A Map's entry is its pair, so its ",[419,1633,1630],{}," prints as a two slot array schema.",[405,1636,1637,944,1639,1641,1642,1644,1645,1647,1648,1650],{},[419,1638,1504],{},[419,1640,1521],{}," both travel as ",[419,1643,1514],{},", so only ",[419,1646,1072],{}," says which one comes back. A Promise is awaited before encoding. The ",[419,1649,1585],{}," type accepts arrays too, so its schema lists both.",[1101,1652,1654],{"id":1653},"named-type-formats","Named Type Formats",[405,1656,1657,1659,1660,1663],{},[419,1658,1176],{}," holds the name of a ",[566,1661,1662],{"href":227},"type format",", like an email whose local part has a maximum length. Every parameter a standard validator can check also goes on a standard keyword, so other validators still enforce it:",[1120,1665,1666,1676],{},[1123,1667,1668],{},[1126,1669,1670,1673],{},[1129,1671,1672],{},"Format parameter",[1129,1674,1675],{},"Standard keyword",[1139,1677,1678,1694,1704,1722,1740,1751,1764],{},[1126,1679,1680,1688],{},[1144,1681,1682,1239,1685],{},[419,1683,1684],{},"minLength",[419,1686,1687],{},"maxLength",[1144,1689,1690,1239,1692],{},[419,1691,1684],{},[419,1693,1687],{},[1126,1695,1696,1700],{},[1144,1697,1698],{},[419,1699,1257],{},[1144,1701,1702],{},[419,1703,1257],{},[1126,1705,1706,1714],{},[1144,1707,1708,1239,1711],{},[419,1709,1710],{},"min",[419,1712,1713],{},"max",[1144,1715,1716,1239,1719],{},[419,1717,1718],{},"minimum",[419,1720,1721],{},"maximum",[1126,1723,1724,1732],{},[1144,1725,1726,1239,1729],{},[419,1727,1728],{},"gt",[419,1730,1731],{},"lt",[1144,1733,1734,1239,1737],{},[419,1735,1736],{},"exclusiveMinimum",[419,1738,1739],{},"exclusiveMaximum",[1126,1741,1742,1747],{},[1144,1743,1744],{},[419,1745,1746],{},"multipleOf",[1144,1748,1749],{},[419,1750,1746],{},[1126,1752,1753,1761],{},[1144,1754,1755,1239,1757,1239,1759],{},[419,1756,1621],{},[419,1758,1624],{},[419,1760,1627],{},[1144,1762,1763],{},"the same names",[1126,1765,1766,1774],{},[1144,1767,1768,1239,1771],{},[419,1769,1770],{},"minProperties",[419,1772,1773],{},"maxProperties",[1144,1775,1763],{},[405,1777,1778,1780,1781,1784],{},[419,1779,1190],{}," holds the full parameter set exactly as written, so the format type can be rebuilt without loss. That matters for parameters the standard has no keyword for: bigint bounds travel as digit strings, and parameters like mock samples or ",[419,1782,1783],{},"trim"," describe no validation at all.",[428,1786,1788],{"className":1020,"code":1787,"language":1022,"meta":433,"style":433},"{\n  \"type\": \"string\",\n  \"format\": \"email\",\n  \"rtFormat\": \"email\",\n  \"rtFormatParams\": {\"localPart\": {\"maxLength\": 64}}\n}\n",[419,1789,1790,1795,1815,1834,1852,1890],{"__ignoreMap":433},[437,1791,1792],{"class":439,"line":440},[437,1793,1794],{"class":451},"{\n",[437,1796,1797,1800,1802,1804,1806,1808,1810,1812],{"class":439,"line":475},[437,1798,1799],{"class":451},"  \"",[437,1801,1034],{"class":443},[437,1803,1031],{"class":451},[437,1805,619],{"class":451},[437,1807,1041],{"class":451},[437,1809,1044],{"class":697},[437,1811,1031],{"class":451},[437,1813,1814],{"class":451},",\n",[437,1816,1817,1819,1821,1823,1825,1827,1830,1832],{"class":439,"line":482},[437,1818,1799],{"class":451},[437,1820,1054],{"class":443},[437,1822,1031],{"class":451},[437,1824,619],{"class":451},[437,1826,1041],{"class":451},[437,1828,1829],{"class":697},"email",[437,1831,1031],{"class":451},[437,1833,1814],{"class":451},[437,1835,1836,1838,1840,1842,1844,1846,1848,1850],{"class":439,"line":492},[437,1837,1799],{"class":451},[437,1839,1176],{"class":443},[437,1841,1031],{"class":451},[437,1843,619],{"class":451},[437,1845,1041],{"class":451},[437,1847,1829],{"class":697},[437,1849,1031],{"class":451},[437,1851,1814],{"class":451},[437,1853,1854,1856,1858,1860,1862,1864,1866,1869,1871,1873,1875,1877,1880,1882,1884,1887],{"class":439,"line":499},[437,1855,1799],{"class":451},[437,1857,1190],{"class":443},[437,1859,1031],{"class":451},[437,1861,619],{"class":451},[437,1863,622],{"class":451},[437,1865,1031],{"class":451},[437,1867,1868],{"class":462},"localPart",[437,1870,1031],{"class":451},[437,1872,619],{"class":451},[437,1874,622],{"class":451},[437,1876,1031],{"class":451},[437,1878,1687],{"class":1879},"sbssI",[437,1881,1031],{"class":451},[437,1883,619],{"class":451},[437,1885,1886],{"class":1879}," 64",[437,1888,1889],{"class":451},"}}\n",[437,1891,1892],{"class":439,"line":505},[437,1893,1085],{"class":451},[405,1895,1896],{},"A standard validator checks the email format. A RunTypes reader also recovers the exact format type, bounded local part included.",[1101,1898,1900],{"id":1899},"typescript-only-facts","TypeScript-Only Facts",[405,1902,1596,1903,1905],{},[419,1904,432],{}," keywords record what leaves no trace in JSON, like a readonly modifier, a tuple slot name or a function signature. They check nothing: without them, every validator accepts and rejects the same values.",[1907,1908,1910],"h4",{"id":1909},"tuple-slot-names","Tuple Slot Names",[428,1912,1914],{"className":1020,"code":1913,"language":1022,"meta":433,"style":433},"{\n  \"type\": \"array\",\n  \"prefixItems\": [{\"type\": \"number\"}, {\"type\": \"number\"}],\n  \"minItems\": 2,\n  \"items\": false,\n  \"tsLabels\": [\"x\", \"y\"]\n}\n",[419,1915,1916,1920,1939,1989,2004,2018,2050],{"__ignoreMap":433},[437,1917,1918],{"class":439,"line":440},[437,1919,1794],{"class":451},[437,1921,1922,1924,1926,1928,1930,1932,1935,1937],{"class":439,"line":475},[437,1923,1799],{"class":451},[437,1925,1034],{"class":443},[437,1927,1031],{"class":451},[437,1929,619],{"class":451},[437,1931,1041],{"class":451},[437,1933,1934],{"class":697},"array",[437,1936,1031],{"class":451},[437,1938,1814],{"class":451},[437,1940,1941,1943,1945,1947,1949,1952,1954,1956,1958,1960,1962,1965,1967,1970,1972,1974,1976,1978,1980,1982,1984,1986],{"class":439,"line":482},[437,1942,1799],{"class":451},[437,1944,1208],{"class":443},[437,1946,1031],{"class":451},[437,1948,619],{"class":451},[437,1950,1951],{"class":451}," [{",[437,1953,1031],{"class":451},[437,1955,1034],{"class":462},[437,1957,1031],{"class":451},[437,1959,619],{"class":451},[437,1961,1041],{"class":451},[437,1963,1964],{"class":697},"number",[437,1966,1031],{"class":451},[437,1968,1969],{"class":451},"},",[437,1971,622],{"class":451},[437,1973,1031],{"class":451},[437,1975,1034],{"class":462},[437,1977,1031],{"class":451},[437,1979,619],{"class":451},[437,1981,1041],{"class":451},[437,1983,1964],{"class":697},[437,1985,1031],{"class":451},[437,1987,1988],{"class":451},"}],\n",[437,1990,1991,1993,1995,1997,1999,2002],{"class":439,"line":492},[437,1992,1799],{"class":451},[437,1994,1621],{"class":443},[437,1996,1031],{"class":451},[437,1998,619],{"class":451},[437,2000,2001],{"class":1879}," 2",[437,2003,1814],{"class":451},[437,2005,2006,2008,2011,2013,2015],{"class":439,"line":499},[437,2007,1799],{"class":451},[437,2009,2010],{"class":443},"items",[437,2012,1031],{"class":451},[437,2014,619],{"class":451},[437,2016,2017],{"class":451}," false,\n",[437,2019,2020,2022,2024,2026,2028,2031,2033,2036,2038,2040,2042,2045,2047],{"class":439,"line":505},[437,2021,1799],{"class":451},[437,2023,1203],{"class":443},[437,2025,1031],{"class":451},[437,2027,619],{"class":451},[437,2029,2030],{"class":451}," [",[437,2032,1031],{"class":451},[437,2034,2035],{"class":697},"x",[437,2037,1031],{"class":451},[437,2039,1049],{"class":451},[437,2041,1041],{"class":451},[437,2043,2044],{"class":697},"y",[437,2046,1031],{"class":451},[437,2048,2049],{"class":451},"]\n",[437,2051,2052],{"class":439,"line":511},[437,2053,1085],{"class":451},[405,2055,2056,2057,2060],{},"Decodes to ",[419,2058,2059],{},"[x: number, y: number]",". The list names every slot in order, the rest slot included. A list that does not cover every slot is ignored whole.",[1907,2062,2064],{"id":2063},"readonly-members","Readonly Members",[428,2066,2068],{"className":1020,"code":2067,"language":1022,"meta":433,"style":433},"{\n  \"type\": \"object\",\n  \"properties\": {\"id\": {\"type\": \"string\"}, \"hits\": {\"type\": \"number\"}},\n  \"required\": [\"id\", \"hits\"],\n  \"tsReadonly\": [\"id\"]\n}\n",[419,2069,2070,2074,2092,2159,2188,2208],{"__ignoreMap":433},[437,2071,2072],{"class":439,"line":440},[437,2073,1794],{"class":451},[437,2075,2076,2078,2080,2082,2084,2086,2088,2090],{"class":439,"line":475},[437,2077,1799],{"class":451},[437,2079,1034],{"class":443},[437,2081,1031],{"class":451},[437,2083,619],{"class":451},[437,2085,1041],{"class":451},[437,2087,1585],{"class":697},[437,2089,1031],{"class":451},[437,2091,1814],{"class":451},[437,2093,2094,2096,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2136,2138,2140,2142,2144,2146,2148,2150,2152,2154,2156],{"class":439,"line":482},[437,2095,1799],{"class":451},[437,2097,2098],{"class":443},"properties",[437,2100,1031],{"class":451},[437,2102,619],{"class":451},[437,2104,622],{"class":451},[437,2106,1031],{"class":451},[437,2108,847],{"class":462},[437,2110,1031],{"class":451},[437,2112,619],{"class":451},[437,2114,622],{"class":451},[437,2116,1031],{"class":451},[437,2118,1034],{"class":1879},[437,2120,1031],{"class":451},[437,2122,619],{"class":451},[437,2124,1041],{"class":451},[437,2126,1044],{"class":697},[437,2128,1031],{"class":451},[437,2130,1969],{"class":451},[437,2132,1041],{"class":451},[437,2134,2135],{"class":462},"hits",[437,2137,1031],{"class":451},[437,2139,619],{"class":451},[437,2141,622],{"class":451},[437,2143,1031],{"class":451},[437,2145,1034],{"class":1879},[437,2147,1031],{"class":451},[437,2149,619],{"class":451},[437,2151,1041],{"class":451},[437,2153,1964],{"class":697},[437,2155,1031],{"class":451},[437,2157,2158],{"class":451},"}},\n",[437,2160,2161,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183,2185],{"class":439,"line":492},[437,2162,1799],{"class":451},[437,2164,1223],{"class":443},[437,2166,1031],{"class":451},[437,2168,619],{"class":451},[437,2170,2030],{"class":451},[437,2172,1031],{"class":451},[437,2174,847],{"class":697},[437,2176,1031],{"class":451},[437,2178,1049],{"class":451},[437,2180,1041],{"class":451},[437,2182,2135],{"class":697},[437,2184,1031],{"class":451},[437,2186,2187],{"class":451},"],\n",[437,2189,2190,2192,2194,2196,2198,2200,2202,2204,2206],{"class":439,"line":499},[437,2191,1799],{"class":451},[437,2193,1218],{"class":443},[437,2195,1031],{"class":451},[437,2197,619],{"class":451},[437,2199,2030],{"class":451},[437,2201,1031],{"class":451},[437,2203,847],{"class":697},[437,2205,1031],{"class":451},[437,2207,2049],{"class":451},[437,2209,2210],{"class":439,"line":505},[437,2211,1085],{"class":451},[405,2213,2056,2214,2217,2218,2221],{},[419,2215,2216],{},"{readonly id: string; hits: number}",". This is not the standard ",[419,2219,2220],{},"readOnly"," keyword, which describes write access to a resource. The two can appear together and mean different things.",[1907,2223,2225],{"id":2224},"index-signatures-beyond-string-keys","Index Signatures Beyond String Keys",[428,2227,2229],{"className":1020,"code":2228,"language":1022,"meta":433,"style":433},"{\n  \"type\": \"object\",\n  \"propertyNames\": {\"pattern\": \"^(?:0|[1-9][0-9]*)$\"},\n  \"tsIndexes\": [{\"key\": {\"type\": \"number\"}, \"value\": {\"type\": \"string\"}}]\n}\n",[419,2230,2231,2235,2253,2283,2350],{"__ignoreMap":433},[437,2232,2233],{"class":439,"line":440},[437,2234,1794],{"class":451},[437,2236,2237,2239,2241,2243,2245,2247,2249,2251],{"class":439,"line":475},[437,2238,1799],{"class":451},[437,2240,1034],{"class":443},[437,2242,1031],{"class":451},[437,2244,619],{"class":451},[437,2246,1041],{"class":451},[437,2248,1585],{"class":697},[437,2250,1031],{"class":451},[437,2252,1814],{"class":451},[437,2254,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275,2278,2280],{"class":439,"line":482},[437,2256,1799],{"class":451},[437,2258,1238],{"class":443},[437,2260,1031],{"class":451},[437,2262,619],{"class":451},[437,2264,622],{"class":451},[437,2266,1031],{"class":451},[437,2268,1257],{"class":462},[437,2270,1031],{"class":451},[437,2272,619],{"class":451},[437,2274,1041],{"class":451},[437,2276,2277],{"class":697},"^(?:0|[1-9][0-9]*)$",[437,2279,1031],{"class":451},[437,2281,2282],{"class":451},"},\n",[437,2284,2285,2287,2289,2291,2293,2295,2297,2300,2302,2304,2306,2308,2310,2312,2314,2316,2318,2320,2322,2324,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347],{"class":439,"line":492},[437,2286,1799],{"class":451},[437,2288,1233],{"class":443},[437,2290,1031],{"class":451},[437,2292,619],{"class":451},[437,2294,1951],{"class":451},[437,2296,1031],{"class":451},[437,2298,2299],{"class":462},"key",[437,2301,1031],{"class":451},[437,2303,619],{"class":451},[437,2305,622],{"class":451},[437,2307,1031],{"class":451},[437,2309,1034],{"class":1879},[437,2311,1031],{"class":451},[437,2313,619],{"class":451},[437,2315,1041],{"class":451},[437,2317,1964],{"class":697},[437,2319,1031],{"class":451},[437,2321,1969],{"class":451},[437,2323,1041],{"class":451},[437,2325,2326],{"class":462},"value",[437,2328,1031],{"class":451},[437,2330,619],{"class":451},[437,2332,622],{"class":451},[437,2334,1031],{"class":451},[437,2336,1034],{"class":1879},[437,2338,1031],{"class":451},[437,2340,619],{"class":451},[437,2342,1041],{"class":451},[437,2344,1044],{"class":697},[437,2346,1031],{"class":451},[437,2348,2349],{"class":451},"}}]\n",[437,2351,2352],{"class":439,"line":499},[437,2353,1085],{"class":451},[405,2355,2056,2356,2359,2360,2362,2363,2365,2366,973,2368,2370],{},[419,2357,2358],{},"{[key: number]: string}",". ",[419,2361,762],{}," covers a plain string-key signature. ",[419,2364,1233],{}," covers the rest: numeric keys, template literal keys, and shapes with more than one signature. The key constraint still goes on ",[419,2367,1238],{},[419,2369,1242],{},", so other validators check the keys too.",[1907,2372,2374],{"id":2373},"template-literal-types","Template Literal Types",[428,2376,2378],{"className":1020,"code":2377,"language":1022,"meta":433,"style":433},"{\n  \"type\": \"string\",\n  \"pattern\": \"^api\u002F[\\\\s\\\\S]*\u002Fv[\\\\s\\\\S]*$\",\n  \"tsTemplate\": {\n    \"texts\": [\"api\u002F\", \"\u002Fv\", \"\"],\n    \"placeholders\": [{\"type\": \"string\"}, {\"type\": \"number\"}]\n  }\n}\n",[419,2379,2380,2384,2402,2441,2454,2491,2539,2544],{"__ignoreMap":433},[437,2381,2382],{"class":439,"line":440},[437,2383,1794],{"class":451},[437,2385,2386,2388,2390,2392,2394,2396,2398,2400],{"class":439,"line":475},[437,2387,1799],{"class":451},[437,2389,1034],{"class":443},[437,2391,1031],{"class":451},[437,2393,619],{"class":451},[437,2395,1041],{"class":451},[437,2397,1044],{"class":697},[437,2399,1031],{"class":451},[437,2401,1814],{"class":451},[437,2403,2404,2406,2408,2410,2412,2414,2417,2420,2423,2425,2428,2430,2432,2434,2437,2439],{"class":439,"line":482},[437,2405,1799],{"class":451},[437,2407,1257],{"class":443},[437,2409,1031],{"class":451},[437,2411,619],{"class":451},[437,2413,1041],{"class":451},[437,2415,2416],{"class":697},"^api\u002F[",[437,2418,2419],{"class":447},"\\\\",[437,2421,2422],{"class":697},"s",[437,2424,2419],{"class":447},[437,2426,2427],{"class":697},"S]*\u002Fv[",[437,2429,2419],{"class":447},[437,2431,2422],{"class":697},[437,2433,2419],{"class":447},[437,2435,2436],{"class":697},"S]*$",[437,2438,1031],{"class":451},[437,2440,1814],{"class":451},[437,2442,2443,2445,2447,2449,2451],{"class":439,"line":492},[437,2444,1799],{"class":451},[437,2446,1252],{"class":443},[437,2448,1031],{"class":451},[437,2450,619],{"class":451},[437,2452,2453],{"class":451}," {\n",[437,2455,2456,2459,2462,2464,2466,2468,2470,2473,2475,2477,2479,2482,2484,2486,2489],{"class":439,"line":499},[437,2457,2458],{"class":451},"    \"",[437,2460,2461],{"class":462},"texts",[437,2463,1031],{"class":451},[437,2465,619],{"class":451},[437,2467,2030],{"class":451},[437,2469,1031],{"class":451},[437,2471,2472],{"class":697},"api\u002F",[437,2474,1031],{"class":451},[437,2476,1049],{"class":451},[437,2478,1041],{"class":451},[437,2480,2481],{"class":697},"\u002Fv",[437,2483,1031],{"class":451},[437,2485,1049],{"class":451},[437,2487,2488],{"class":451}," \"\"",[437,2490,2187],{"class":451},[437,2492,2493,2495,2498,2500,2502,2504,2506,2508,2510,2512,2514,2516,2518,2520,2522,2524,2526,2528,2530,2532,2534,2536],{"class":439,"line":505},[437,2494,2458],{"class":451},[437,2496,2497],{"class":462},"placeholders",[437,2499,1031],{"class":451},[437,2501,619],{"class":451},[437,2503,1951],{"class":451},[437,2505,1031],{"class":451},[437,2507,1034],{"class":1879},[437,2509,1031],{"class":451},[437,2511,619],{"class":451},[437,2513,1041],{"class":451},[437,2515,1044],{"class":697},[437,2517,1031],{"class":451},[437,2519,1969],{"class":451},[437,2521,622],{"class":451},[437,2523,1031],{"class":451},[437,2525,1034],{"class":1879},[437,2527,1031],{"class":451},[437,2529,619],{"class":451},[437,2531,1041],{"class":451},[437,2533,1964],{"class":697},[437,2535,1031],{"class":451},[437,2537,2538],{"class":451},"}]\n",[437,2540,2541],{"class":439,"line":511},[437,2542,2543],{"class":451},"  }\n",[437,2545,2546],{"class":439,"line":517},[437,2547,1085],{"class":451},[405,2549,2056,2550,2553,2554,2556,2557,2559],{},[419,2551,2552],{},"`api\u002F${string}\u002Fv${number}`",". The ",[419,2555,1257],{}," beside it lets any validator check the fixed parts of the string. The parts under ",[419,2558,1252],{}," let a RunTypes reader rebuild the exact type.",[1907,2561,2563],{"id":2562},"function-signatures","Function Signatures",[428,2565,2567],{"className":1020,"code":2566,"language":1022,"meta":433,"style":433},"{\n  \"tsFunction\": {\n    \"params\": {\n      \"type\": \"array\",\n      \"prefixItems\": [{\"type\": \"string\"}],\n      \"minItems\": 1,\n      \"items\": false,\n      \"tsLabels\": [\"message\"]\n    },\n    \"return\": {\"type\": \"boolean\"}\n  }\n}\n",[419,2568,2569,2573,2585,2598,2617,2645,2660,2672,2693,2698,2728,2732],{"__ignoreMap":433},[437,2570,2571],{"class":439,"line":440},[437,2572,1794],{"class":451},[437,2574,2575,2577,2579,2581,2583],{"class":439,"line":475},[437,2576,1799],{"class":451},[437,2578,1267],{"class":443},[437,2580,1031],{"class":451},[437,2582,619],{"class":451},[437,2584,2453],{"class":451},[437,2586,2587,2589,2592,2594,2596],{"class":439,"line":482},[437,2588,2458],{"class":451},[437,2590,2591],{"class":462},"params",[437,2593,1031],{"class":451},[437,2595,619],{"class":451},[437,2597,2453],{"class":451},[437,2599,2600,2603,2605,2607,2609,2611,2613,2615],{"class":439,"line":492},[437,2601,2602],{"class":451},"      \"",[437,2604,1034],{"class":1879},[437,2606,1031],{"class":451},[437,2608,619],{"class":451},[437,2610,1041],{"class":451},[437,2612,1934],{"class":697},[437,2614,1031],{"class":451},[437,2616,1814],{"class":451},[437,2618,2619,2621,2623,2625,2627,2629,2631,2633,2635,2637,2639,2641,2643],{"class":439,"line":499},[437,2620,2602],{"class":451},[437,2622,1208],{"class":1879},[437,2624,1031],{"class":451},[437,2626,619],{"class":451},[437,2628,1951],{"class":451},[437,2630,1031],{"class":451},[437,2632,1034],{"class":615},[437,2634,1031],{"class":451},[437,2636,619],{"class":451},[437,2638,1041],{"class":451},[437,2640,1044],{"class":697},[437,2642,1031],{"class":451},[437,2644,1988],{"class":451},[437,2646,2647,2649,2651,2653,2655,2658],{"class":439,"line":505},[437,2648,2602],{"class":451},[437,2650,1621],{"class":1879},[437,2652,1031],{"class":451},[437,2654,619],{"class":451},[437,2656,2657],{"class":1879}," 1",[437,2659,1814],{"class":451},[437,2661,2662,2664,2666,2668,2670],{"class":439,"line":511},[437,2663,2602],{"class":451},[437,2665,2010],{"class":1879},[437,2667,1031],{"class":451},[437,2669,619],{"class":451},[437,2671,2017],{"class":451},[437,2673,2674,2676,2678,2680,2682,2684,2686,2689,2691],{"class":439,"line":517},[437,2675,2602],{"class":451},[437,2677,1203],{"class":1879},[437,2679,1031],{"class":451},[437,2681,619],{"class":451},[437,2683,2030],{"class":451},[437,2685,1031],{"class":451},[437,2687,2688],{"class":697},"message",[437,2690,1031],{"class":451},[437,2692,2049],{"class":451},[437,2694,2695],{"class":439,"line":523},[437,2696,2697],{"class":451},"    },\n",[437,2699,2700,2702,2705,2707,2709,2711,2713,2715,2717,2719,2721,2724,2726],{"class":439,"line":529},[437,2701,2458],{"class":451},[437,2703,2704],{"class":462},"return",[437,2706,1031],{"class":451},[437,2708,619],{"class":451},[437,2710,622],{"class":451},[437,2712,1031],{"class":451},[437,2714,1034],{"class":1879},[437,2716,1031],{"class":451},[437,2718,619],{"class":451},[437,2720,1041],{"class":451},[437,2722,2723],{"class":697},"boolean",[437,2725,1031],{"class":451},[437,2727,1085],{"class":451},[437,2729,2730],{"class":439,"line":535},[437,2731,2543],{"class":451},[437,2733,2734],{"class":439,"line":541},[437,2735,1085],{"class":451},[405,2737,2056,2738,2741],{},[419,2739,2740],{},"(message: string) => boolean",". The parameters are an ordinary tuple schema, so optional parameters, rest parameters and parameter names all work.",[1907,2743,2745],{"id":2744},"branded-and-metadata-types","Branded and Metadata Types",[428,2747,2749],{"className":1020,"code":2748,"language":1022,"meta":433,"style":433},"{\n  \"tsMeta\": {\n    \"base\": {\"type\": \"string\"},\n    \"meta\": [{\n      \"type\": \"object\",\n      \"properties\": {\"__brand\": {\"const\": \"UserId\"}},\n      \"required\": [\"__brand\"],\n      \"tsReadonly\": [\"__brand\"]\n    }]\n  }\n}\n",[419,2750,2751,2755,2767,2796,2810,2828,2869,2889,2909,2914,2918],{"__ignoreMap":433},[437,2752,2753],{"class":439,"line":440},[437,2754,1794],{"class":451},[437,2756,2757,2759,2761,2763,2765],{"class":439,"line":475},[437,2758,1799],{"class":451},[437,2760,1280],{"class":443},[437,2762,1031],{"class":451},[437,2764,619],{"class":451},[437,2766,2453],{"class":451},[437,2768,2769,2771,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794],{"class":439,"line":482},[437,2770,2458],{"class":451},[437,2772,2773],{"class":462},"base",[437,2775,1031],{"class":451},[437,2777,619],{"class":451},[437,2779,622],{"class":451},[437,2781,1031],{"class":451},[437,2783,1034],{"class":1879},[437,2785,1031],{"class":451},[437,2787,619],{"class":451},[437,2789,1041],{"class":451},[437,2791,1044],{"class":697},[437,2793,1031],{"class":451},[437,2795,2282],{"class":451},[437,2797,2798,2800,2803,2805,2807],{"class":439,"line":492},[437,2799,2458],{"class":451},[437,2801,2802],{"class":462},"meta",[437,2804,1031],{"class":451},[437,2806,619],{"class":451},[437,2808,2809],{"class":451}," [{\n",[437,2811,2812,2814,2816,2818,2820,2822,2824,2826],{"class":439,"line":499},[437,2813,2602],{"class":451},[437,2815,1034],{"class":1879},[437,2817,1031],{"class":451},[437,2819,619],{"class":451},[437,2821,1041],{"class":451},[437,2823,1585],{"class":697},[437,2825,1031],{"class":451},[437,2827,1814],{"class":451},[437,2829,2830,2832,2834,2836,2838,2840,2842,2845,2847,2849,2851,2853,2856,2858,2860,2862,2865,2867],{"class":439,"line":505},[437,2831,2602],{"class":451},[437,2833,2098],{"class":1879},[437,2835,1031],{"class":451},[437,2837,619],{"class":451},[437,2839,622],{"class":451},[437,2841,1031],{"class":451},[437,2843,2844],{"class":615},"__brand",[437,2846,1031],{"class":451},[437,2848,619],{"class":451},[437,2850,622],{"class":451},[437,2852,1031],{"class":451},[437,2854,444],{"class":2855},"su27w",[437,2857,1031],{"class":451},[437,2859,619],{"class":451},[437,2861,1041],{"class":451},[437,2863,2864],{"class":697},"UserId",[437,2866,1031],{"class":451},[437,2868,2158],{"class":451},[437,2870,2871,2873,2875,2877,2879,2881,2883,2885,2887],{"class":439,"line":511},[437,2872,2602],{"class":451},[437,2874,1223],{"class":1879},[437,2876,1031],{"class":451},[437,2878,619],{"class":451},[437,2880,2030],{"class":451},[437,2882,1031],{"class":451},[437,2884,2844],{"class":697},[437,2886,1031],{"class":451},[437,2888,2187],{"class":451},[437,2890,2891,2893,2895,2897,2899,2901,2903,2905,2907],{"class":439,"line":517},[437,2892,2602],{"class":451},[437,2894,1218],{"class":1879},[437,2896,1031],{"class":451},[437,2898,619],{"class":451},[437,2900,2030],{"class":451},[437,2902,1031],{"class":451},[437,2904,2844],{"class":697},[437,2906,1031],{"class":451},[437,2908,2049],{"class":451},[437,2910,2911],{"class":439,"line":523},[437,2912,2913],{"class":451},"    }]\n",[437,2915,2916],{"class":439,"line":529},[437,2917,2543],{"class":451},[437,2919,2920],{"class":439,"line":535},[437,2921,1085],{"class":451},[405,2923,2056,2924,2927],{},[419,2925,2926],{},"string & {readonly __brand: 'UserId'}",". Only the base describes JSON. The metadata exists in the type, never in the data.",[1101,2929,2931],{"id":2930},"combining-keywords","Combining Keywords",[405,2933,2934,2935,2938,2939,2942],{},"A schema node can hold several of these keywords next to the standard ones. The standard keywords always describe the JSON, and the extension keywords the type that comes back: ",[419,2936,2937],{},"format: 'date-time'"," describes the string, ",[419,2940,2941],{},"jsType: 'Date'"," makes the decoded value a Date.",[405,2944,2945,2946,2949,2950,2953],{},"A schema may declare the dialect with ",[419,2947,2948],{},"$schema"," set to ",[419,2951,2952],{},"https:\u002F\u002Fmion.io\u002Fruntypes\u002Fschema\u002F2020-12-javascript",", but it does not have to. It is only a hint for tooling.",[405,2955,2956,2957,837],{},"The formal version of the extension, one precise rule per keyword, is in the repository at ",[566,2958,2961],{"href":2959,"rel":2960},"https:\u002F\u002Fgithub.com\u002FMionKit\u002Fmion\u002Fblob\u002Fmain\u002Fdocs\u002Fjson-schema-2020-12-javascript.md",[778],"json-schema-2020-12-javascript.md",[2963,2964,2965],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .su27w, html code.shiki .su27w{--shiki-light:#916B53;--shiki-default:#916B53;--shiki-dark:#916B53}","JSON Schema documents generated from your types at build time.","md",null,{"toc":24},{"title":209,"description":2966},"EQX0jWcpMzJydsxIFEbKlu3TWFh0ctqH2GEKJB4Bst0",1793324363741]