[{"data":1,"prerenderedAt":2768},["ShallowReactive",2],{"navigation_docs":3,"-runtypes-type-formats-string":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":235,"body":401,"description":2762,"extension":2763,"links":2764,"meta":2765,"navigation":763,"path":236,"seo":2766,"stem":237,"__hash__":2767},"docs\u002F02.runtypes\u002F03.type-formats\u002F02.string.md",{"type":402,"value":403},"minimark",[404,409,426,646,650,653,898,950,972,976,1010,1367,1371,1388,1561,1565,1597,1833,1848,1852,1861,2047,2054,2058,2071,2180,2184,2191,2314,2321,2325,2331,2403,2407,2410,2651,2715,2727,2731,2758],[405,406,408],"h2",{"id":407},"named-string-formats","Named String Formats",[410,411,412,413,417,418,421,422,425],"p",{},"Each format also has a builder, named in lowercase (",[414,415,416],"code",{},"TF.email()",", ",[414,419,420],{},"TF.uuidv4()","). Date strings are on the ",[423,424,247],"a",{"href":248}," page.",[427,428,429,442],"table",{},[430,431,432],"thead",{},[433,434,435,439],"tr",{},[436,437,438],"th",{},"Group",[436,440,441],{},"Formats",[443,444,445,471,493,509,531,556,581,612,636],"tbody",{},[433,446,447,451],{},[448,449,450],"td",{},"Text",[448,452,453,417,456,417,459,417,462,417,465,417,468],{},[414,454,455],{},"TF.Alpha",[414,457,458],{},"TF.AlphaNumeric",[414,460,461],{},"TF.Numeric",[414,463,464],{},"TF.Lowercase",[414,466,467],{},"TF.Uppercase",[414,469,470],{},"TF.Capitalize",[433,472,473,476],{},[448,474,475],{},"Encodings",[448,477,478,417,481,417,484,417,487,417,490],{},[414,479,480],{},"TF.Base64",[414,482,483],{},"TF.Base32",[414,485,486],{},"TF.Base16",[414,488,489],{},"TF.JsonContent",[414,491,492],{},"TF.JsonContentBase64",[433,494,495,498],{},[448,496,497],{},"Ids",[448,499,500,417,503,417,506],{},[414,501,502],{},"TF.UUID",[414,504,505],{},"TF.UUIDv4",[414,507,508],{},"TF.UUIDv7",[433,510,511,514],{},[448,512,513],{},"Email",[448,515,516,417,519,417,522,417,525,417,528],{},[414,517,518],{},"TF.Email",[414,520,521],{},"TF.EmailAddress",[414,523,524],{},"TF.IdnEmail",[414,526,527],{},"TF.EmailPunycode",[414,529,530],{},"TF.EmailParts",[433,532,533,536],{},[448,534,535],{},"Domains and hosts",[448,537,538,417,541,417,544,417,547,417,550,417,553],{},[414,539,540],{},"TF.Domain",[414,542,543],{},"TF.DomainUnicode",[414,545,546],{},"TF.DomainPunycode",[414,548,549],{},"TF.DomainParts",[414,551,552],{},"TF.Hostname",[414,554,555],{},"TF.IdnHostname",[433,557,558,561],{},[448,559,560],{},"IP addresses",[448,562,563,417,566,417,569,417,572,417,575,417,578],{},[414,564,565],{},"TF.IP",[414,567,568],{},"TF.IPv4",[414,570,571],{},"TF.IPv6",[414,573,574],{},"TF.IPWithPort",[414,576,577],{},"TF.IPv4WithPort",[414,579,580],{},"TF.IPv6WithPort",[433,582,583,586],{},[448,584,585],{},"URLs",[448,587,588,417,591,417,594,417,597,417,600,417,603,417,606,417,609],{},[414,589,590],{},"TF.StringUrl",[414,592,593],{},"TF.StringUrlHttp",[414,595,596],{},"TF.StringUrlFile",[414,598,599],{},"TF.Uri",[414,601,602],{},"TF.UriReference",[414,604,605],{},"TF.UriTemplate",[414,607,608],{},"TF.Iri",[414,610,611],{},"TF.IriReference",[433,613,614,617],{},[448,615,616],{},"JSON Schema keywords",[448,618,619,622,623,626,627,417,630,417,633],{},[414,620,621],{},"TF.StringDuration"," (",[414,624,625],{},"P4DT12H30M5S","), ",[414,628,629],{},"TF.JsonPointer",[414,631,632],{},"TF.RelativeJsonPointer",[414,634,635],{},"TF.RegexString",[433,637,638,641],{},[448,639,640],{},"Payment",[448,642,643],{},[414,644,645],{},"TF.CreditCard",[405,647,649],{"id":648},"email-formats","Email Formats",[410,651,652],{},"Pick the email format by how much of the address grammar you want to accept.",[654,655,660],"pre",{"className":656,"code":657,"language":658,"meta":659,"style":659},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const isEmail = createValidateFn\u003CTF.Email>();\nconst isEmailAddress = createValidateFn\u003CTF.EmailAddress>();\nconst isIdnEmail = createValidateFn\u003CTF.IdnEmail>();\n\nisEmail('ada@example.com'); \u002F\u002F true\nisEmail('\"ada lovelace\"@example.com'); \u002F\u002F false, quoted local part\nisEmailAddress('\"ada lovelace\"@example.com'); \u002F\u002F true\nisEmailAddress('ada@[127.0.0.1]'); \u002F\u002F true, address literal\nisIdnEmail('δοκιμή@example.com'); \u002F\u002F true, any script\nisEmail('ada@localhost'); \u002F\u002F false, the domain needs a dot\n","ts","",[414,661,662,704,731,758,765,793,814,834,855,877],{"__ignoreMap":659},[663,664,667,671,675,679,683,686,690,693,695,698,701],"span",{"class":665,"line":666},"line",1,[663,668,670],{"class":669},"spNyl","const",[663,672,674],{"class":673},"sTEyZ"," isEmail ",[663,676,678],{"class":677},"sMK4o","=",[663,680,682],{"class":681},"s2Zo4"," createValidateFn",[663,684,685],{"class":677},"\u003C",[663,687,689],{"class":688},"sBMFI","TF",[663,691,692],{"class":677},".",[663,694,513],{"class":688},[663,696,697],{"class":677},">",[663,699,700],{"class":673},"()",[663,702,703],{"class":677},";\n",[663,705,707,709,712,714,716,718,720,722,725,727,729],{"class":665,"line":706},2,[663,708,670],{"class":669},[663,710,711],{"class":673}," isEmailAddress ",[663,713,678],{"class":677},[663,715,682],{"class":681},[663,717,685],{"class":677},[663,719,689],{"class":688},[663,721,692],{"class":677},[663,723,724],{"class":688},"EmailAddress",[663,726,697],{"class":677},[663,728,700],{"class":673},[663,730,703],{"class":677},[663,732,734,736,739,741,743,745,747,749,752,754,756],{"class":665,"line":733},3,[663,735,670],{"class":669},[663,737,738],{"class":673}," isIdnEmail ",[663,740,678],{"class":677},[663,742,682],{"class":681},[663,744,685],{"class":677},[663,746,689],{"class":688},[663,748,692],{"class":677},[663,750,751],{"class":688},"IdnEmail",[663,753,697],{"class":677},[663,755,700],{"class":673},[663,757,703],{"class":677},[663,759,761],{"class":665,"line":760},4,[663,762,764],{"emptyLinePlaceholder":763},true,"\n",[663,766,768,771,774,777,781,783,786,789],{"class":665,"line":767},5,[663,769,770],{"class":681},"isEmail",[663,772,773],{"class":673},"(",[663,775,776],{"class":677},"'",[663,778,780],{"class":779},"sfazB","ada@example.com",[663,782,776],{"class":677},[663,784,785],{"class":673},")",[663,787,788],{"class":677},";",[663,790,792],{"class":791},"sHwdD"," \u002F\u002F true\n",[663,794,796,798,800,802,805,807,809,811],{"class":665,"line":795},6,[663,797,770],{"class":681},[663,799,773],{"class":673},[663,801,776],{"class":677},[663,803,804],{"class":779},"\"ada lovelace\"@example.com",[663,806,776],{"class":677},[663,808,785],{"class":673},[663,810,788],{"class":677},[663,812,813],{"class":791}," \u002F\u002F false, quoted local part\n",[663,815,817,820,822,824,826,828,830,832],{"class":665,"line":816},7,[663,818,819],{"class":681},"isEmailAddress",[663,821,773],{"class":673},[663,823,776],{"class":677},[663,825,804],{"class":779},[663,827,776],{"class":677},[663,829,785],{"class":673},[663,831,788],{"class":677},[663,833,792],{"class":791},[663,835,837,839,841,843,846,848,850,852],{"class":665,"line":836},8,[663,838,819],{"class":681},[663,840,773],{"class":673},[663,842,776],{"class":677},[663,844,845],{"class":779},"ada@[127.0.0.1]",[663,847,776],{"class":677},[663,849,785],{"class":673},[663,851,788],{"class":677},[663,853,854],{"class":791}," \u002F\u002F true, address literal\n",[663,856,858,861,863,865,868,870,872,874],{"class":665,"line":857},9,[663,859,860],{"class":681},"isIdnEmail",[663,862,773],{"class":673},[663,864,776],{"class":677},[663,866,867],{"class":779},"δοκιμή@example.com",[663,869,776],{"class":677},[663,871,785],{"class":673},[663,873,788],{"class":677},[663,875,876],{"class":791}," \u002F\u002F true, any script\n",[663,878,880,882,884,886,889,891,893,895],{"class":665,"line":879},10,[663,881,770],{"class":681},[663,883,773],{"class":673},[663,885,776],{"class":677},[663,887,888],{"class":779},"ada@localhost",[663,890,776],{"class":677},[663,892,785],{"class":673},[663,894,788],{"class":677},[663,896,897],{"class":791}," \u002F\u002F false, the domain needs a dot\n",[427,899,900,910],{},[430,901,902],{},[433,903,904,907],{},[436,905,906],{},"Format",[436,908,909],{},"Use it for",[443,911,912,925,938],{},[433,913,914,918],{},[448,915,916],{},[414,917,518],{},[448,919,920,921,924],{},"Form fields: the everyday ",[414,922,923],{},"name@example.com"," shape",[433,926,927,931],{},[448,928,929],{},[414,930,521],{},[448,932,933,934,937],{},"Any valid address, quoted local parts and ",[414,935,936],{},"[ip]"," domains included",[433,939,940,944],{},[448,941,942],{},[414,943,524],{},[448,945,946,947,949],{},"The same as ",[414,948,521],{},", in any script",[951,952,953,954,956,957,960,961,963,964,967,968,971],"tip",{},"All of them need a dotted domain. ",[414,955,527],{}," takes a domain in its ",[414,958,959],{},"xn--"," form. ",[414,962,530],{}," limits each half of the address with its ",[414,965,966],{},"localPart"," and ",[414,969,970],{},"domain"," options.",[405,973,975],{"id":974},"hostnames-and-domains","Hostnames and Domains",[410,977,978,980,981,983,984,987,988,990,991,994,995,997,998,417,1001,417,1004,967,1007,692],{},[414,979,540],{}," needs a dotted name, ",[414,982,552],{}," also takes a single label like ",[414,985,986],{},"localhost",", and ",[414,989,555],{}," takes names in any script.\nSet ",[414,992,993],{},"allowedValues"," to accept only some names.\n",[414,996,549],{}," limits each label or the number of parts with ",[414,999,1000],{},"names",[414,1002,1003],{},"tld",[414,1005,1006],{},"maxParts",[414,1008,1009],{},"minParts",[654,1011,1013],{"className":656,"code":1012,"language":658,"meta":659,"style":659},"const isDomain = createValidateFn\u003CTF.Domain>();\nconst isHostname = createValidateFn\u003CTF.Hostname>();\nconst isIdnHostname = createValidateFn\u003CTF.IdnHostname>();\n\nisDomain('example.com'); \u002F\u002F true\nisDomain('localhost'); \u002F\u002F false, needs a dot\nisHostname('localhost'); \u002F\u002F true\nisIdnHostname('실례.테스트'); \u002F\u002F true\n\nconst isOurSite =\n  createValidateFn\u003C\n    TF.Domain\u003C{allowedValues: {val: ['example.com', 'mion.io']}}>\n  >();\nconst isShortDomain = createValidateFn\u003CTF.DomainParts\u003C{maxParts: 3}>>();\n\nisOurSite('mion.io'); \u002F\u002F true\nisOurSite('other.org'); \u002F\u002F false, not in the list\nisShortDomain('aa.bb.example.com'); \u002F\u002F false, more than 3 parts\n",[414,1014,1015,1041,1067,1093,1097,1117,1136,1155,1175,1179,1189,1198,1251,1261,1299,1304,1324,1345],{"__ignoreMap":659},[663,1016,1017,1019,1022,1024,1026,1028,1030,1032,1035,1037,1039],{"class":665,"line":666},[663,1018,670],{"class":669},[663,1020,1021],{"class":673}," isDomain ",[663,1023,678],{"class":677},[663,1025,682],{"class":681},[663,1027,685],{"class":677},[663,1029,689],{"class":688},[663,1031,692],{"class":677},[663,1033,1034],{"class":688},"Domain",[663,1036,697],{"class":677},[663,1038,700],{"class":673},[663,1040,703],{"class":677},[663,1042,1043,1045,1048,1050,1052,1054,1056,1058,1061,1063,1065],{"class":665,"line":706},[663,1044,670],{"class":669},[663,1046,1047],{"class":673}," isHostname ",[663,1049,678],{"class":677},[663,1051,682],{"class":681},[663,1053,685],{"class":677},[663,1055,689],{"class":688},[663,1057,692],{"class":677},[663,1059,1060],{"class":688},"Hostname",[663,1062,697],{"class":677},[663,1064,700],{"class":673},[663,1066,703],{"class":677},[663,1068,1069,1071,1074,1076,1078,1080,1082,1084,1087,1089,1091],{"class":665,"line":733},[663,1070,670],{"class":669},[663,1072,1073],{"class":673}," isIdnHostname ",[663,1075,678],{"class":677},[663,1077,682],{"class":681},[663,1079,685],{"class":677},[663,1081,689],{"class":688},[663,1083,692],{"class":677},[663,1085,1086],{"class":688},"IdnHostname",[663,1088,697],{"class":677},[663,1090,700],{"class":673},[663,1092,703],{"class":677},[663,1094,1095],{"class":665,"line":760},[663,1096,764],{"emptyLinePlaceholder":763},[663,1098,1099,1102,1104,1106,1109,1111,1113,1115],{"class":665,"line":767},[663,1100,1101],{"class":681},"isDomain",[663,1103,773],{"class":673},[663,1105,776],{"class":677},[663,1107,1108],{"class":779},"example.com",[663,1110,776],{"class":677},[663,1112,785],{"class":673},[663,1114,788],{"class":677},[663,1116,792],{"class":791},[663,1118,1119,1121,1123,1125,1127,1129,1131,1133],{"class":665,"line":795},[663,1120,1101],{"class":681},[663,1122,773],{"class":673},[663,1124,776],{"class":677},[663,1126,986],{"class":779},[663,1128,776],{"class":677},[663,1130,785],{"class":673},[663,1132,788],{"class":677},[663,1134,1135],{"class":791}," \u002F\u002F false, needs a dot\n",[663,1137,1138,1141,1143,1145,1147,1149,1151,1153],{"class":665,"line":816},[663,1139,1140],{"class":681},"isHostname",[663,1142,773],{"class":673},[663,1144,776],{"class":677},[663,1146,986],{"class":779},[663,1148,776],{"class":677},[663,1150,785],{"class":673},[663,1152,788],{"class":677},[663,1154,792],{"class":791},[663,1156,1157,1160,1162,1164,1167,1169,1171,1173],{"class":665,"line":836},[663,1158,1159],{"class":681},"isIdnHostname",[663,1161,773],{"class":673},[663,1163,776],{"class":677},[663,1165,1166],{"class":779},"실례.테스트",[663,1168,776],{"class":677},[663,1170,785],{"class":673},[663,1172,788],{"class":677},[663,1174,792],{"class":791},[663,1176,1177],{"class":665,"line":857},[663,1178,764],{"emptyLinePlaceholder":763},[663,1180,1181,1183,1186],{"class":665,"line":879},[663,1182,670],{"class":669},[663,1184,1185],{"class":673}," isOurSite ",[663,1187,1188],{"class":677},"=\n",[663,1190,1192,1195],{"class":665,"line":1191},11,[663,1193,1194],{"class":673},"  createValidateFn",[663,1196,1197],{"class":677},"\u003C\n",[663,1199,1201,1204,1206,1208,1211,1213,1216,1219,1222,1224,1228,1230,1232,1234,1237,1240,1243,1245,1248],{"class":665,"line":1200},12,[663,1202,1203],{"class":673},"    TF",[663,1205,692],{"class":677},[663,1207,1034],{"class":673},[663,1209,1210],{"class":677},"\u003C{",[663,1212,993],{"class":688},[663,1214,1215],{"class":677},":",[663,1217,1218],{"class":677}," {",[663,1220,1221],{"class":688},"val",[663,1223,1215],{"class":677},[663,1225,1227],{"class":1226},"swJcz"," [",[663,1229,776],{"class":677},[663,1231,1108],{"class":779},[663,1233,776],{"class":677},[663,1235,1236],{"class":677},",",[663,1238,1239],{"class":677}," '",[663,1241,1242],{"class":779},"mion.io",[663,1244,776],{"class":677},[663,1246,1247],{"class":1226},"]",[663,1249,1250],{"class":677},"}}>\n",[663,1252,1254,1257,1259],{"class":665,"line":1253},13,[663,1255,1256],{"class":677},"  >",[663,1258,700],{"class":673},[663,1260,703],{"class":677},[663,1262,1264,1266,1269,1271,1273,1275,1277,1279,1282,1284,1286,1288,1292,1295,1297],{"class":665,"line":1263},14,[663,1265,670],{"class":669},[663,1267,1268],{"class":673}," isShortDomain ",[663,1270,678],{"class":677},[663,1272,682],{"class":681},[663,1274,685],{"class":677},[663,1276,689],{"class":688},[663,1278,692],{"class":677},[663,1280,1281],{"class":688},"DomainParts",[663,1283,1210],{"class":677},[663,1285,1006],{"class":1226},[663,1287,1215],{"class":677},[663,1289,1291],{"class":1290},"sbssI"," 3",[663,1293,1294],{"class":677},"}>>",[663,1296,700],{"class":673},[663,1298,703],{"class":677},[663,1300,1302],{"class":665,"line":1301},15,[663,1303,764],{"emptyLinePlaceholder":763},[663,1305,1307,1310,1312,1314,1316,1318,1320,1322],{"class":665,"line":1306},16,[663,1308,1309],{"class":681},"isOurSite",[663,1311,773],{"class":673},[663,1313,776],{"class":677},[663,1315,1242],{"class":779},[663,1317,776],{"class":677},[663,1319,785],{"class":673},[663,1321,788],{"class":677},[663,1323,792],{"class":791},[663,1325,1327,1329,1331,1333,1336,1338,1340,1342],{"class":665,"line":1326},17,[663,1328,1309],{"class":681},[663,1330,773],{"class":673},[663,1332,776],{"class":677},[663,1334,1335],{"class":779},"other.org",[663,1337,776],{"class":677},[663,1339,785],{"class":673},[663,1341,788],{"class":677},[663,1343,1344],{"class":791}," \u002F\u002F false, not in the list\n",[663,1346,1348,1351,1353,1355,1358,1360,1362,1364],{"class":665,"line":1347},18,[663,1349,1350],{"class":681},"isShortDomain",[663,1352,773],{"class":673},[663,1354,776],{"class":677},[663,1356,1357],{"class":779},"aa.bb.example.com",[663,1359,776],{"class":677},[663,1361,785],{"class":673},[663,1363,788],{"class":677},[663,1365,1366],{"class":791}," \u002F\u002F false, more than 3 parts\n",[405,1368,1370],{"id":1369},"ip-addresses","IP Addresses",[410,1372,1373,1374,1377,1378,1380,1381,1384,1385,692],{},"The IP formats take only an address. Set ",[414,1375,1376],{},"allowLocalHost"," to accept ",[414,1379,986],{}," too, or use a ",[414,1382,1383],{},"WithPort"," format for ",[414,1386,1387],{},"host:port",[654,1389,1391],{"className":656,"code":1390,"language":658,"meta":659,"style":659},"const isIPv4 = createValidateFn\u003CTF.IPv4>();\nconst isLocalIPv4 = createValidateFn\u003CTF.IPv4\u003C{allowLocalHost: true}>>();\nconst isHostPort = createValidateFn\u003CTF.IPv4WithPort>();\n\nisIPv4('127.0.0.1'); \u002F\u002F true\nisIPv4('localhost'); \u002F\u002F false\nisLocalIPv4('localhost'); \u002F\u002F true\nisHostPort('10.0.0.1:8080'); \u002F\u002F true\n",[414,1392,1393,1419,1453,1479,1483,1503,1522,1541],{"__ignoreMap":659},[663,1394,1395,1397,1400,1402,1404,1406,1408,1410,1413,1415,1417],{"class":665,"line":666},[663,1396,670],{"class":669},[663,1398,1399],{"class":673}," isIPv4 ",[663,1401,678],{"class":677},[663,1403,682],{"class":681},[663,1405,685],{"class":677},[663,1407,689],{"class":688},[663,1409,692],{"class":677},[663,1411,1412],{"class":688},"IPv4",[663,1414,697],{"class":677},[663,1416,700],{"class":673},[663,1418,703],{"class":677},[663,1420,1421,1423,1426,1428,1430,1432,1434,1436,1438,1440,1442,1444,1447,1449,1451],{"class":665,"line":706},[663,1422,670],{"class":669},[663,1424,1425],{"class":673}," isLocalIPv4 ",[663,1427,678],{"class":677},[663,1429,682],{"class":681},[663,1431,685],{"class":677},[663,1433,689],{"class":688},[663,1435,692],{"class":677},[663,1437,1412],{"class":688},[663,1439,1210],{"class":677},[663,1441,1376],{"class":1226},[663,1443,1215],{"class":677},[663,1445,1446],{"class":688}," true",[663,1448,1294],{"class":677},[663,1450,700],{"class":673},[663,1452,703],{"class":677},[663,1454,1455,1457,1460,1462,1464,1466,1468,1470,1473,1475,1477],{"class":665,"line":733},[663,1456,670],{"class":669},[663,1458,1459],{"class":673}," isHostPort ",[663,1461,678],{"class":677},[663,1463,682],{"class":681},[663,1465,685],{"class":677},[663,1467,689],{"class":688},[663,1469,692],{"class":677},[663,1471,1472],{"class":688},"IPv4WithPort",[663,1474,697],{"class":677},[663,1476,700],{"class":673},[663,1478,703],{"class":677},[663,1480,1481],{"class":665,"line":760},[663,1482,764],{"emptyLinePlaceholder":763},[663,1484,1485,1488,1490,1492,1495,1497,1499,1501],{"class":665,"line":767},[663,1486,1487],{"class":681},"isIPv4",[663,1489,773],{"class":673},[663,1491,776],{"class":677},[663,1493,1494],{"class":779},"127.0.0.1",[663,1496,776],{"class":677},[663,1498,785],{"class":673},[663,1500,788],{"class":677},[663,1502,792],{"class":791},[663,1504,1505,1507,1509,1511,1513,1515,1517,1519],{"class":665,"line":795},[663,1506,1487],{"class":681},[663,1508,773],{"class":673},[663,1510,776],{"class":677},[663,1512,986],{"class":779},[663,1514,776],{"class":677},[663,1516,785],{"class":673},[663,1518,788],{"class":677},[663,1520,1521],{"class":791}," \u002F\u002F false\n",[663,1523,1524,1527,1529,1531,1533,1535,1537,1539],{"class":665,"line":816},[663,1525,1526],{"class":681},"isLocalIPv4",[663,1528,773],{"class":673},[663,1530,776],{"class":677},[663,1532,986],{"class":779},[663,1534,776],{"class":677},[663,1536,785],{"class":673},[663,1538,788],{"class":677},[663,1540,792],{"class":791},[663,1542,1543,1546,1548,1550,1553,1555,1557,1559],{"class":665,"line":836},[663,1544,1545],{"class":681},"isHostPort",[663,1547,773],{"class":673},[663,1549,776],{"class":677},[663,1551,1552],{"class":779},"10.0.0.1:8080",[663,1554,776],{"class":677},[663,1556,785],{"class":673},[663,1558,788],{"class":677},[663,1560,792],{"class":791},[405,1562,1564],{"id":1563},"url-objects","URL Objects",[410,1566,1567,417,1570,967,1573,1576,1577,1580,1581,417,1584,967,1587,1590,1591,1593,1594,692],{},[414,1568,1569],{},"TF.Url",[414,1571,1572],{},"TF.UrlHttp",[414,1574,1575],{},"TF.UrlFile"," check a real ",[414,1578,1579],{},"URL"," object instead of a string. They take the ",[414,1582,1583],{},"maxLength",[414,1585,1586],{},"minLength",[414,1588,1589],{},"pattern"," options of ",[414,1592,590],{},", checked against the ",[414,1595,1596],{},"href",[654,1598,1600],{"className":656,"code":1599,"language":658,"meta":659,"style":659},"interface Bookmark {\n  page: URL; \u002F\u002F any URL object\n  api: TF.UrlHttp\u003C{maxLength: 200}>; \u002F\u002F http(s) only, href up to 200 chars\n  backup: TF.UrlFile; \u002F\u002F file:\u002F\u002F only\n}\n\nconst isBookmark = createValidateFn\u003CBookmark>();\nconst decodeBookmark = createJsonDecoderFn\u003CBookmark>();\n\nconst bookmark = decodeBookmark(\n  '{\"page\":\"mailto:ada@example.com\",\"api\":\"https:\u002F\u002Fexample.com\u002Fv1\",\"backup\":\"file:\u002F\u002F\u002Ftmp\u002Fb.json\"}'\n);\nbookmark.api.pathname; \u002F\u002F '\u002Fv1', a real URL object\nisBookmark(bookmark); \u002F\u002F true\nisBookmark({...bookmark, api: 'https:\u002F\u002Fexample.com\u002Fv1'}); \u002F\u002F false, a string is not a URL\n",[414,1601,1602,1613,1628,1658,1677,1682,1686,1708,1730,1734,1749,1760,1766,1786,1798],{"__ignoreMap":659},[663,1603,1604,1607,1610],{"class":665,"line":666},[663,1605,1606],{"class":669},"interface",[663,1608,1609],{"class":688}," Bookmark",[663,1611,1612],{"class":677}," {\n",[663,1614,1615,1618,1620,1623,1625],{"class":665,"line":706},[663,1616,1617],{"class":1226},"  page",[663,1619,1215],{"class":677},[663,1621,1622],{"class":688}," URL",[663,1624,788],{"class":677},[663,1626,1627],{"class":791}," \u002F\u002F any URL object\n",[663,1629,1630,1633,1635,1638,1640,1643,1645,1647,1649,1652,1655],{"class":665,"line":733},[663,1631,1632],{"class":1226},"  api",[663,1634,1215],{"class":677},[663,1636,1637],{"class":688}," TF",[663,1639,692],{"class":677},[663,1641,1642],{"class":688},"UrlHttp",[663,1644,1210],{"class":677},[663,1646,1583],{"class":1226},[663,1648,1215],{"class":677},[663,1650,1651],{"class":1290}," 200",[663,1653,1654],{"class":677},"}>;",[663,1656,1657],{"class":791}," \u002F\u002F http(s) only, href up to 200 chars\n",[663,1659,1660,1663,1665,1667,1669,1672,1674],{"class":665,"line":760},[663,1661,1662],{"class":1226},"  backup",[663,1664,1215],{"class":677},[663,1666,1637],{"class":688},[663,1668,692],{"class":677},[663,1670,1671],{"class":688},"UrlFile",[663,1673,788],{"class":677},[663,1675,1676],{"class":791}," \u002F\u002F file:\u002F\u002F only\n",[663,1678,1679],{"class":665,"line":767},[663,1680,1681],{"class":677},"}\n",[663,1683,1684],{"class":665,"line":795},[663,1685,764],{"emptyLinePlaceholder":763},[663,1687,1688,1690,1693,1695,1697,1699,1702,1704,1706],{"class":665,"line":816},[663,1689,670],{"class":669},[663,1691,1692],{"class":673}," isBookmark ",[663,1694,678],{"class":677},[663,1696,682],{"class":681},[663,1698,685],{"class":677},[663,1700,1701],{"class":688},"Bookmark",[663,1703,697],{"class":677},[663,1705,700],{"class":673},[663,1707,703],{"class":677},[663,1709,1710,1712,1715,1717,1720,1722,1724,1726,1728],{"class":665,"line":836},[663,1711,670],{"class":669},[663,1713,1714],{"class":673}," decodeBookmark ",[663,1716,678],{"class":677},[663,1718,1719],{"class":681}," createJsonDecoderFn",[663,1721,685],{"class":677},[663,1723,1701],{"class":688},[663,1725,697],{"class":677},[663,1727,700],{"class":673},[663,1729,703],{"class":677},[663,1731,1732],{"class":665,"line":857},[663,1733,764],{"emptyLinePlaceholder":763},[663,1735,1736,1738,1741,1743,1746],{"class":665,"line":879},[663,1737,670],{"class":669},[663,1739,1740],{"class":673}," bookmark ",[663,1742,678],{"class":677},[663,1744,1745],{"class":681}," decodeBookmark",[663,1747,1748],{"class":673},"(\n",[663,1750,1751,1754,1757],{"class":665,"line":1191},[663,1752,1753],{"class":677},"  '",[663,1755,1756],{"class":779},"{\"page\":\"mailto:ada@example.com\",\"api\":\"https:\u002F\u002Fexample.com\u002Fv1\",\"backup\":\"file:\u002F\u002F\u002Ftmp\u002Fb.json\"}",[663,1758,1759],{"class":677},"'\n",[663,1761,1762,1764],{"class":665,"line":1200},[663,1763,785],{"class":673},[663,1765,703],{"class":677},[663,1767,1768,1771,1773,1776,1778,1781,1783],{"class":665,"line":1253},[663,1769,1770],{"class":673},"bookmark",[663,1772,692],{"class":677},[663,1774,1775],{"class":673},"api",[663,1777,692],{"class":677},[663,1779,1780],{"class":673},"pathname",[663,1782,788],{"class":677},[663,1784,1785],{"class":791}," \u002F\u002F '\u002Fv1', a real URL object\n",[663,1787,1788,1791,1794,1796],{"class":665,"line":1263},[663,1789,1790],{"class":681},"isBookmark",[663,1792,1793],{"class":673},"(bookmark)",[663,1795,788],{"class":677},[663,1797,792],{"class":791},[663,1799,1800,1802,1804,1807,1809,1811,1814,1816,1818,1821,1823,1826,1828,1830],{"class":665,"line":1301},[663,1801,1790],{"class":681},[663,1803,773],{"class":673},[663,1805,1806],{"class":677},"{...",[663,1808,1770],{"class":673},[663,1810,1236],{"class":677},[663,1812,1813],{"class":1226}," api",[663,1815,1215],{"class":677},[663,1817,1239],{"class":677},[663,1819,1820],{"class":779},"https:\u002F\u002Fexample.com\u002Fv1",[663,1822,776],{"class":677},[663,1824,1825],{"class":677},"}",[663,1827,785],{"class":673},[663,1829,788],{"class":677},[663,1831,1832],{"class":791}," \u002F\u002F false, a string is not a URL\n",[951,1834,1835,1836,1838,1839,417,1842,967,1845,692],{},"On the wire a URL is its ",[414,1837,1596],{}," string. An invalid URL string makes the decoder throw. The builders are ",[414,1840,1841],{},"TF.url()",[414,1843,1844],{},"TF.urlHttp()",[414,1846,1847],{},"TF.urlFile()",[405,1849,1851],{"id":1850},"credit-card-numbers","Credit Card Numbers",[410,1853,1854,1856,1857,1860],{},[414,1855,645],{}," checks the number with the Luhn checksum. Set ",[414,1858,1859],{},"networks"," to accept only some card brands.",[654,1862,1864],{"className":656,"code":1863,"language":658,"meta":659,"style":659},"type Card = TF.CreditCard; \u002F\u002F 12 to 19 digits with a valid checksum\ntype Accepted = TF.CreditCard\u003C{networks: ['visa', 'mastercard']}>;\n\nconst isCard = createValidateFn\u003CCard>();\nconst isAccepted = createValidateFn\u003CAccepted>();\n\nisCard('4111 1111 1111 1111'); \u002F\u002F true, spaces and dashes allowed\nisCard('4111111111111112'); \u002F\u002F false, one digit off\nisAccepted('378282246310005'); \u002F\u002F false, a valid Amex card\n",[414,1865,1866,1889,1933,1937,1959,1981,1985,2006,2026],{"__ignoreMap":659},[663,1867,1868,1871,1874,1877,1879,1881,1884,1886],{"class":665,"line":666},[663,1869,1870],{"class":669},"type",[663,1872,1873],{"class":688}," Card",[663,1875,1876],{"class":677}," =",[663,1878,1637],{"class":688},[663,1880,692],{"class":677},[663,1882,1883],{"class":688},"CreditCard",[663,1885,788],{"class":677},[663,1887,1888],{"class":791}," \u002F\u002F 12 to 19 digits with a valid checksum\n",[663,1890,1891,1893,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1917,1919,1921,1923,1926,1928,1930],{"class":665,"line":706},[663,1892,1870],{"class":669},[663,1894,1895],{"class":688}," Accepted",[663,1897,1876],{"class":677},[663,1899,1637],{"class":688},[663,1901,692],{"class":677},[663,1903,1883],{"class":688},[663,1905,1210],{"class":677},[663,1907,1859],{"class":1226},[663,1909,1215],{"class":677},[663,1911,1227],{"class":673},[663,1913,776],{"class":677},[663,1915,1916],{"class":779},"visa",[663,1918,776],{"class":677},[663,1920,1236],{"class":677},[663,1922,1239],{"class":677},[663,1924,1925],{"class":779},"mastercard",[663,1927,776],{"class":677},[663,1929,1247],{"class":673},[663,1931,1932],{"class":677},"}>;\n",[663,1934,1935],{"class":665,"line":733},[663,1936,764],{"emptyLinePlaceholder":763},[663,1938,1939,1941,1944,1946,1948,1950,1953,1955,1957],{"class":665,"line":760},[663,1940,670],{"class":669},[663,1942,1943],{"class":673}," isCard ",[663,1945,678],{"class":677},[663,1947,682],{"class":681},[663,1949,685],{"class":677},[663,1951,1952],{"class":688},"Card",[663,1954,697],{"class":677},[663,1956,700],{"class":673},[663,1958,703],{"class":677},[663,1960,1961,1963,1966,1968,1970,1972,1975,1977,1979],{"class":665,"line":767},[663,1962,670],{"class":669},[663,1964,1965],{"class":673}," isAccepted ",[663,1967,678],{"class":677},[663,1969,682],{"class":681},[663,1971,685],{"class":677},[663,1973,1974],{"class":688},"Accepted",[663,1976,697],{"class":677},[663,1978,700],{"class":673},[663,1980,703],{"class":677},[663,1982,1983],{"class":665,"line":795},[663,1984,764],{"emptyLinePlaceholder":763},[663,1986,1987,1990,1992,1994,1997,1999,2001,2003],{"class":665,"line":816},[663,1988,1989],{"class":681},"isCard",[663,1991,773],{"class":673},[663,1993,776],{"class":677},[663,1995,1996],{"class":779},"4111 1111 1111 1111",[663,1998,776],{"class":677},[663,2000,785],{"class":673},[663,2002,788],{"class":677},[663,2004,2005],{"class":791}," \u002F\u002F true, spaces and dashes allowed\n",[663,2007,2008,2010,2012,2014,2017,2019,2021,2023],{"class":665,"line":836},[663,2009,1989],{"class":681},[663,2011,773],{"class":673},[663,2013,776],{"class":677},[663,2015,2016],{"class":779},"4111111111111112",[663,2018,776],{"class":677},[663,2020,785],{"class":673},[663,2022,788],{"class":677},[663,2024,2025],{"class":791}," \u002F\u002F false, one digit off\n",[663,2027,2028,2031,2033,2035,2038,2040,2042,2044],{"class":665,"line":857},[663,2029,2030],{"class":681},"isAccepted",[663,2032,773],{"class":673},[663,2034,776],{"class":677},[663,2036,2037],{"class":779},"378282246310005",[663,2039,776],{"class":677},[663,2041,785],{"class":673},[663,2043,788],{"class":677},[663,2045,2046],{"class":791}," \u002F\u002F false, a valid Amex card\n",[951,2048,2049,2050,2053],{},"Mocks build a valid number for each network. Set the ",[414,2051,2052],{},"testCreditCards"," mock option when the data goes to a payment sandbox.",[405,2055,2057],{"id":2056},"regex-patterns","Regex Patterns",[410,2059,2060,2061,2063,2064,2067,2068,692],{},"Write a ",[414,2062,1589],{}," as ",[414,2065,2066],{},"{source: '...'}",", not a regex literal. To reuse one across types, register it with ",[423,2069,2070],{"href":214},"registerFormatPattern",[654,2072,2074],{"className":656,"code":2073,"language":658,"meta":659,"style":659},"type Sku = TF.String\u003C{pattern: {source: '^[A-Z]{3}-[0-9]{4}$'}}>;\nconst isSku = createValidateFn\u003CSku>();\n\nisSku('ABC-1234'); \u002F\u002F true\nisSku('abc-1234'); \u002F\u002F false\n",[414,2075,2076,2115,2137,2141,2161],{"__ignoreMap":659},[663,2077,2078,2080,2083,2085,2087,2089,2092,2094,2096,2098,2100,2103,2105,2107,2110,2112],{"class":665,"line":666},[663,2079,1870],{"class":669},[663,2081,2082],{"class":688}," Sku",[663,2084,1876],{"class":677},[663,2086,1637],{"class":688},[663,2088,692],{"class":677},[663,2090,2091],{"class":688},"String",[663,2093,1210],{"class":677},[663,2095,1589],{"class":1226},[663,2097,1215],{"class":677},[663,2099,1218],{"class":677},[663,2101,2102],{"class":1226},"source",[663,2104,1215],{"class":677},[663,2106,1239],{"class":677},[663,2108,2109],{"class":779},"^[A-Z]{3}-[0-9]{4}$",[663,2111,776],{"class":677},[663,2113,2114],{"class":677},"}}>;\n",[663,2116,2117,2119,2122,2124,2126,2128,2131,2133,2135],{"class":665,"line":706},[663,2118,670],{"class":669},[663,2120,2121],{"class":673}," isSku ",[663,2123,678],{"class":677},[663,2125,682],{"class":681},[663,2127,685],{"class":677},[663,2129,2130],{"class":688},"Sku",[663,2132,697],{"class":677},[663,2134,700],{"class":673},[663,2136,703],{"class":677},[663,2138,2139],{"class":665,"line":733},[663,2140,764],{"emptyLinePlaceholder":763},[663,2142,2143,2146,2148,2150,2153,2155,2157,2159],{"class":665,"line":760},[663,2144,2145],{"class":681},"isSku",[663,2147,773],{"class":673},[663,2149,776],{"class":677},[663,2151,2152],{"class":779},"ABC-1234",[663,2154,776],{"class":677},[663,2156,785],{"class":673},[663,2158,788],{"class":677},[663,2160,792],{"class":791},[663,2162,2163,2165,2167,2169,2172,2174,2176,2178],{"class":665,"line":767},[663,2164,2145],{"class":681},[663,2166,773],{"class":673},[663,2168,776],{"class":677},[663,2170,2171],{"class":779},"abc-1234",[663,2173,776],{"class":677},[663,2175,785],{"class":673},[663,2177,788],{"class":677},[663,2179,1521],{"class":791},[405,2181,2183],{"id":2182},"mock-values-for-patterns","Mock Values for Patterns",[410,2185,2186,2187,2190],{},"Mocks for a pattern come from its ",[414,2188,2189],{},"mockSamples",", or from values the build generates from the regex when you give none.",[654,2192,2194],{"className":656,"code":2193,"language":658,"meta":659,"style":659},"\u002F\u002F no samples: generated from the regex\ntype Code = TF.String\u003C{pattern: {source: '^[A-Z]{2}[0-9]{3}$'}}>;\n\u002F\u002F your samples win\ntype Slug = TF.String\u003C{\n  pattern: {source: '^[a-z-]+$'; mockSamples: ['my-post', 'hello-world']};\n}>;\n",[414,2195,2196,2201,2237,2242,2260,2310],{"__ignoreMap":659},[663,2197,2198],{"class":665,"line":666},[663,2199,2200],{"class":791},"\u002F\u002F no samples: generated from the regex\n",[663,2202,2203,2205,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230,2233,2235],{"class":665,"line":706},[663,2204,1870],{"class":669},[663,2206,2207],{"class":688}," Code",[663,2209,1876],{"class":677},[663,2211,1637],{"class":688},[663,2213,692],{"class":677},[663,2215,2091],{"class":688},[663,2217,1210],{"class":677},[663,2219,1589],{"class":1226},[663,2221,1215],{"class":677},[663,2223,1218],{"class":677},[663,2225,2102],{"class":1226},[663,2227,1215],{"class":677},[663,2229,1239],{"class":677},[663,2231,2232],{"class":779},"^[A-Z]{2}[0-9]{3}$",[663,2234,776],{"class":677},[663,2236,2114],{"class":677},[663,2238,2239],{"class":665,"line":733},[663,2240,2241],{"class":791},"\u002F\u002F your samples win\n",[663,2243,2244,2246,2249,2251,2253,2255,2257],{"class":665,"line":760},[663,2245,1870],{"class":669},[663,2247,2248],{"class":688}," Slug",[663,2250,1876],{"class":677},[663,2252,1637],{"class":688},[663,2254,692],{"class":677},[663,2256,2091],{"class":688},[663,2258,2259],{"class":677},"\u003C{\n",[663,2261,2262,2265,2267,2269,2271,2273,2275,2278,2280,2282,2285,2287,2289,2291,2294,2296,2298,2300,2303,2305,2307],{"class":665,"line":767},[663,2263,2264],{"class":1226},"  pattern",[663,2266,1215],{"class":677},[663,2268,1218],{"class":677},[663,2270,2102],{"class":1226},[663,2272,1215],{"class":677},[663,2274,1239],{"class":677},[663,2276,2277],{"class":779},"^[a-z-]+$",[663,2279,776],{"class":677},[663,2281,788],{"class":677},[663,2283,2284],{"class":1226}," mockSamples",[663,2286,1215],{"class":677},[663,2288,1227],{"class":673},[663,2290,776],{"class":677},[663,2292,2293],{"class":779},"my-post",[663,2295,776],{"class":677},[663,2297,1236],{"class":677},[663,2299,1239],{"class":677},[663,2301,2302],{"class":779},"hello-world",[663,2304,776],{"class":677},[663,2306,1247],{"class":673},[663,2308,2309],{"class":677},"};\n",[663,2311,2312],{"class":665,"line":795},[663,2313,1932],{"class":677},[951,2315,2316,2317,2320],{},"Samples must match the pattern and its length bounds, or the build fails. Generated values change on every build unless you pass a literal seed (see ",[423,2318,2319],{"href":206},"Mocking",").",[405,2322,2324],{"id":2323},"unsafe-regex-patterns","Unsafe Regex Patterns",[410,2326,2327,2328,692],{},"The build rejects a pattern that can freeze the validator on a crafted input, such as a nested repeat. If you checked the pattern yourself, set ",[414,2329,2330],{},"unsafePattern: true",[654,2332,2334],{"className":656,"code":2333,"language":658,"meta":659,"style":659},"\u002F\u002F a nested repeat\ntype Words = TF.String\u003C{\n  pattern: {source: '^(\\\\w+\\\\s?)*$'; unsafePattern: true};\n}>;\n",[414,2335,2336,2341,2358,2399],{"__ignoreMap":659},[663,2337,2338],{"class":665,"line":666},[663,2339,2340],{"class":791},"\u002F\u002F a nested repeat\n",[663,2342,2343,2345,2348,2350,2352,2354,2356],{"class":665,"line":706},[663,2344,1870],{"class":669},[663,2346,2347],{"class":688}," Words",[663,2349,1876],{"class":677},[663,2351,1637],{"class":688},[663,2353,692],{"class":677},[663,2355,2091],{"class":688},[663,2357,2259],{"class":677},[663,2359,2360,2362,2364,2366,2368,2370,2372,2375,2378,2381,2383,2386,2388,2390,2393,2395,2397],{"class":665,"line":733},[663,2361,2264],{"class":1226},[663,2363,1215],{"class":677},[663,2365,1218],{"class":677},[663,2367,2102],{"class":1226},[663,2369,1215],{"class":677},[663,2371,1239],{"class":677},[663,2373,2374],{"class":779},"^(",[663,2376,2377],{"class":673},"\\\\",[663,2379,2380],{"class":779},"w+",[663,2382,2377],{"class":673},[663,2384,2385],{"class":779},"s?)*$",[663,2387,776],{"class":677},[663,2389,788],{"class":677},[663,2391,2392],{"class":1226}," unsafePattern",[663,2394,1215],{"class":677},[663,2396,1446],{"class":688},[663,2398,2309],{"class":677},[663,2400,2401],{"class":665,"line":760},[663,2402,1932],{"class":677},[405,2404,2406],{"id":2405},"string-transformations","String Transformations",[410,2408,2409],{},"A transformation rewrites a string, such as trimming spaces or lowercasing an email. You typically use it to sanitize user input before you store it.",[654,2411,2413],{"className":656,"code":2412,"language":658,"meta":659,"style":659},"type SignUp = {\n  email: TF.Email\u003C{transform: {trim: true; lowercase: true}}>;\n  name: TF.String\u003C{maxLength: 32; transform: {trim: true; capitalize: true}}>;\n  tags: TF.Transform\u003Cstring, {lowercase: true}>[]; \u002F\u002F the wrapper works on any string\n};\n\nconst sanitize = createFormatTransformFn\u003CSignUp>();\nsanitize({email: ' Ada@Example.COM ', name: ' ada ', tags: ['News']});\n\u002F\u002F {email: 'ada@example.com', name: 'Ada', tags: ['news']}\n",[414,2414,2415,2426,2466,2514,2555,2559,2563,2586,2646],{"__ignoreMap":659},[663,2416,2417,2419,2422,2424],{"class":665,"line":666},[663,2418,1870],{"class":669},[663,2420,2421],{"class":688}," SignUp",[663,2423,1876],{"class":677},[663,2425,1612],{"class":677},[663,2427,2428,2431,2433,2435,2437,2439,2441,2444,2446,2448,2451,2453,2455,2457,2460,2462,2464],{"class":665,"line":706},[663,2429,2430],{"class":1226},"  email",[663,2432,1215],{"class":677},[663,2434,1637],{"class":688},[663,2436,692],{"class":677},[663,2438,513],{"class":688},[663,2440,1210],{"class":677},[663,2442,2443],{"class":1226},"transform",[663,2445,1215],{"class":677},[663,2447,1218],{"class":677},[663,2449,2450],{"class":1226},"trim",[663,2452,1215],{"class":677},[663,2454,1446],{"class":688},[663,2456,788],{"class":677},[663,2458,2459],{"class":1226}," lowercase",[663,2461,1215],{"class":677},[663,2463,1446],{"class":688},[663,2465,2114],{"class":677},[663,2467,2468,2471,2473,2475,2477,2479,2481,2483,2485,2488,2490,2493,2495,2497,2499,2501,2503,2505,2508,2510,2512],{"class":665,"line":733},[663,2469,2470],{"class":1226},"  name",[663,2472,1215],{"class":677},[663,2474,1637],{"class":688},[663,2476,692],{"class":677},[663,2478,2091],{"class":688},[663,2480,1210],{"class":677},[663,2482,1583],{"class":1226},[663,2484,1215],{"class":677},[663,2486,2487],{"class":1290}," 32",[663,2489,788],{"class":677},[663,2491,2492],{"class":1226}," transform",[663,2494,1215],{"class":677},[663,2496,1218],{"class":677},[663,2498,2450],{"class":1226},[663,2500,1215],{"class":677},[663,2502,1446],{"class":688},[663,2504,788],{"class":677},[663,2506,2507],{"class":1226}," capitalize",[663,2509,1215],{"class":677},[663,2511,1446],{"class":688},[663,2513,2114],{"class":677},[663,2515,2516,2519,2521,2523,2525,2528,2530,2533,2535,2537,2540,2542,2544,2547,2550,2552],{"class":665,"line":760},[663,2517,2518],{"class":1226},"  tags",[663,2520,1215],{"class":677},[663,2522,1637],{"class":688},[663,2524,692],{"class":677},[663,2526,2527],{"class":688},"Transform",[663,2529,685],{"class":677},[663,2531,2532],{"class":688},"string",[663,2534,1236],{"class":677},[663,2536,1218],{"class":677},[663,2538,2539],{"class":1226},"lowercase",[663,2541,1215],{"class":677},[663,2543,1446],{"class":688},[663,2545,2546],{"class":677},"}>",[663,2548,2549],{"class":673},"[]",[663,2551,788],{"class":677},[663,2553,2554],{"class":791}," \u002F\u002F the wrapper works on any string\n",[663,2556,2557],{"class":665,"line":767},[663,2558,2309],{"class":677},[663,2560,2561],{"class":665,"line":795},[663,2562,764],{"emptyLinePlaceholder":763},[663,2564,2565,2567,2570,2572,2575,2577,2580,2582,2584],{"class":665,"line":816},[663,2566,670],{"class":669},[663,2568,2569],{"class":673}," sanitize ",[663,2571,678],{"class":677},[663,2573,2574],{"class":681}," createFormatTransformFn",[663,2576,685],{"class":677},[663,2578,2579],{"class":688},"SignUp",[663,2581,697],{"class":677},[663,2583,700],{"class":673},[663,2585,703],{"class":677},[663,2587,2588,2591,2593,2596,2599,2601,2603,2606,2608,2610,2613,2615,2617,2620,2622,2624,2627,2629,2631,2633,2636,2638,2640,2642,2644],{"class":665,"line":836},[663,2589,2590],{"class":681},"sanitize",[663,2592,773],{"class":673},[663,2594,2595],{"class":677},"{",[663,2597,2598],{"class":1226},"email",[663,2600,1215],{"class":677},[663,2602,1239],{"class":677},[663,2604,2605],{"class":779}," Ada@Example.COM ",[663,2607,776],{"class":677},[663,2609,1236],{"class":677},[663,2611,2612],{"class":1226}," name",[663,2614,1215],{"class":677},[663,2616,1239],{"class":677},[663,2618,2619],{"class":779}," ada ",[663,2621,776],{"class":677},[663,2623,1236],{"class":677},[663,2625,2626],{"class":1226}," tags",[663,2628,1215],{"class":677},[663,2630,1227],{"class":673},[663,2632,776],{"class":677},[663,2634,2635],{"class":779},"News",[663,2637,776],{"class":677},[663,2639,1247],{"class":673},[663,2641,1825],{"class":677},[663,2643,785],{"class":673},[663,2645,703],{"class":677},[663,2647,2648],{"class":665,"line":857},[663,2649,2650],{"class":791},"\u002F\u002F {email: 'ada@example.com', name: 'Ada', tags: ['news']}\n",[427,2652,2653,2663],{},[430,2654,2655],{},[433,2656,2657,2660],{},[436,2658,2659],{},"Transformation",[436,2661,2662],{},"Does",[443,2664,2665,2674,2689,2702],{},[433,2666,2667,2671],{},[448,2668,2669],{},[414,2670,2450],{},[448,2672,2673],{},"Removes spaces at both ends",[433,2675,2676,2686],{},[448,2677,2678,417,2680,417,2683],{},[414,2679,2539],{},[414,2681,2682],{},"uppercase",[414,2684,2685],{},"capitalize",[448,2687,2688],{},"Changes the case",[433,2690,2691,2699],{},[448,2692,2693,417,2696],{},[414,2694,2695],{},"replace",[414,2697,2698],{},"replaceAll",[448,2700,2701],{},"Replaces the first match, or every match",[433,2703,2704,2709],{},[448,2705,2706],{},[414,2707,2708],{},"stripSeparators",[448,2710,2711,2712,2714],{},"Removes spaces and dashes (",[414,2713,645],{}," only)",[951,2716,2717,2718,2721,2722,2726],{},"Validation never transforms a value. Only ",[414,2719,2720],{},"createFormatTransformFn"," does, and a mion route with ",[423,2723,2725],{"href":2724},"\u002Frpc\u002Fserver\u002Fvalidation#sanitizing-params","sanitizeParams"," runs it on the params before validation.",[405,2728,2730],{"id":2729},"transformation-rules","Transformation Rules",[2732,2733,2734,2738,2749],"ul",{},[2735,2736,2737],"li",{},"They run in a fixed order: replacements and the separator strip first, then trim, then the case change.",[2735,2739,2740,417,2742,417,2744,967,2746,2748],{},[414,2741,518],{},[414,2743,540],{},[414,2745,565],{},[414,2747,590],{}," never change case unless you ask, because parts of them are case-sensitive.",[2735,2750,2751,2752,2754,2755,2757],{},"A mion route sanitizes on both ends, so applying a transformation twice must give the same result. Prefer ",[414,2753,2698],{}," over ",[414,2756,2695],{},", and use one case change per field.",[2759,2760,2761],"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}","Emails, hosts, URLs, IPs, card numbers, regex patterns and string transformations.","md",null,{"toc":24},{"title":235,"description":2762},"MLiAnUPpZQlXMKslQWNa8C3bff14YCCzVbdmRZQnKrw",1793324364967]