[{"data":1,"prerenderedAt":1898},["ShallowReactive",2],{"navigation":3,"\u002Fintegrations\u002Fcodegen\u002Fts":335,"\u002Fintegrations\u002Fcodegen\u002Fts-surround":1893},[4,27,73,95,121,135,305,331],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":26},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18,22],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":23,"path":24,"stem":25},"MSRV","\u002Fgetting-started\u002Fmsrv","1.getting-started\u002F9.msrv",false,{"title":28,"icon":29,"path":30,"stem":31,"children":32,"page":26},"Schemas","i-lucide-shapes","\u002Fschemas","2.schemas",[33,37,41,45,49,53,57,61,65,69],{"title":34,"path":35,"stem":36},"Strings","\u002Fschemas\u002Fstrings","2.schemas\u002F1.strings",{"title":38,"path":39,"stem":40},"Custom rules","\u002Fschemas\u002Frules","2.schemas\u002F10.rules",{"title":42,"path":43,"stem":44},"Numbers","\u002Fschemas\u002Fnumbers","2.schemas\u002F2.numbers",{"title":46,"path":47,"stem":48},"Booleans, literals and enums","\u002Fschemas\u002Fprimitives","2.schemas\u002F3.primitives",{"title":50,"path":51,"stem":52},"Dates and times","\u002Fschemas\u002Fdates","2.schemas\u002F4.dates",{"title":54,"path":55,"stem":56},"Collections","\u002Fschemas\u002Fcollections","2.schemas\u002F5.collections",{"title":58,"path":59,"stem":60},"Dynamic objects","\u002Fschemas\u002Fobjects","2.schemas\u002F6.objects",{"title":62,"path":63,"stem":64},"Modifiers","\u002Fschemas\u002Fmodifiers","2.schemas\u002F7.modifiers",{"title":66,"path":67,"stem":68},"Combinators","\u002Fschemas\u002Fcombinators","2.schemas\u002F8.combinators",{"title":70,"path":71,"stem":72},"Other types","\u002Fschemas\u002Fspecial-types","2.schemas\u002F9.special-types",{"title":74,"icon":75,"path":76,"stem":77,"children":78,"page":26},"Structs","i-lucide-braces","\u002Fstructs","3.structs",[79,83,87,91],{"title":80,"path":81,"stem":82},"schema! macro","\u002Fstructs\u002Fschema-macro","3.structs\u002F1.schema-macro",{"title":84,"path":85,"stem":86},"#[derive(Validate)]","\u002Fstructs\u002Fderive","3.structs\u002F2.derive",{"title":88,"path":89,"stem":90},"Parse vs validate","\u002Fstructs\u002Fparse-vs-validate","3.structs\u002F3.parse-vs-validate",{"title":92,"path":93,"stem":94},"Lenient parsing","\u002Fstructs\u002Flenient","3.structs\u002F4.lenient",{"title":96,"icon":97,"path":98,"stem":99,"children":100,"page":26},"Errors","i-lucide-triangle-alert","\u002Ferrors","4.errors",[101,105,109,113,117],{"title":102,"path":103,"stem":104},"Error model","\u002Ferrors\u002Foverview","4.errors\u002F1.overview",{"title":106,"path":107,"stem":108},"Issue codes","\u002Ferrors\u002Fissue-codes","4.errors\u002F2.issue-codes",{"title":110,"path":111,"stem":112},"Formatting","\u002Ferrors\u002Fformatting","4.errors\u002F3.formatting",{"title":114,"path":115,"stem":116},"Custom messages","\u002Ferrors\u002Fcustom-messages","4.errors\u002F4.custom-messages",{"title":118,"path":119,"stem":120},"Translations","\u002Ferrors\u002Fi18n","4.errors\u002F5.i18n",{"title":122,"icon":123,"path":124,"stem":125,"children":126,"page":26},"OpenAPI","i-lucide-file-json","\u002Fopenapi","5.openapi",[127,131],{"title":128,"path":129,"stem":130},"JSON Schema and OpenAPI","\u002Fopenapi\u002Fjson-schema","5.openapi\u002F1.json-schema",{"title":132,"path":133,"stem":134},"Schema diff","\u002Fopenapi\u002Fdiff","5.openapi\u002F2.diff",{"title":136,"icon":137,"path":138,"stem":139,"children":140,"page":26},"Integrations","i-lucide-plug","\u002Fintegrations","6.integrations",[141,191,209,223,245,259,273,291],{"title":142,"icon":143,"path":144,"stem":145,"children":146,"page":26},"Web frameworks","i-lucide-globe","\u002Fintegrations\u002Fweb","6.integrations\u002F1.web",[147,151,155,159,163,167,171,175,179,183,187],{"title":148,"path":149,"stem":150},"Web adapters overview","\u002Fintegrations\u002Fweb\u002Foverview","6.integrations\u002F1.web\u002F01.overview",{"title":152,"path":153,"stem":154},"vld-axum","\u002Fintegrations\u002Fweb\u002Faxum","6.integrations\u002F1.web\u002F02.axum",{"title":156,"path":157,"stem":158},"vld-actix","\u002Fintegrations\u002Fweb\u002Factix","6.integrations\u002F1.web\u002F03.actix",{"title":160,"path":161,"stem":162},"vld-ntex","\u002Fintegrations\u002Fweb\u002Fntex","6.integrations\u002F1.web\u002F04.ntex",{"title":164,"path":165,"stem":166},"vld-poem","\u002Fintegrations\u002Fweb\u002Fpoem","6.integrations\u002F1.web\u002F05.poem",{"title":168,"path":169,"stem":170},"vld-rama","\u002Fintegrations\u002Fweb\u002Frama","6.integrations\u002F1.web\u002F06.rama",{"title":172,"path":173,"stem":174},"vld-rocket","\u002Fintegrations\u002Fweb\u002Frocket","6.integrations\u002F1.web\u002F07.rocket",{"title":176,"path":177,"stem":178},"vld-salvo","\u002Fintegrations\u002Fweb\u002Fsalvo","6.integrations\u002F1.web\u002F08.salvo",{"title":180,"path":181,"stem":182},"vld-tower","\u002Fintegrations\u002Fweb\u002Ftower","6.integrations\u002F1.web\u002F09.tower",{"title":184,"path":185,"stem":186},"vld-warp","\u002Fintegrations\u002Fweb\u002Fwarp","6.integrations\u002F1.web\u002F10.warp",{"title":188,"path":189,"stem":190},"vld-tonic","\u002Fintegrations\u002Fweb\u002Ftonic","6.integrations\u002F1.web\u002F11.tonic",{"title":192,"icon":193,"path":194,"stem":195,"children":196,"page":26},"OpenAPI and JSON Schema","i-lucide-file-code","\u002Fintegrations\u002Fopenapi","6.integrations\u002F2.openapi",[197,201,205],{"title":198,"path":199,"stem":200},"vld-utoipa","\u002Fintegrations\u002Fopenapi\u002Futoipa","6.integrations\u002F2.openapi\u002F1.utoipa",{"title":202,"path":203,"stem":204},"vld-schemars","\u002Fintegrations\u002Fopenapi\u002Fschemars","6.integrations\u002F2.openapi\u002F2.schemars",{"title":206,"path":207,"stem":208},"vld-aide","\u002Fintegrations\u002Fopenapi\u002Faide","6.integrations\u002F2.openapi\u002F3.aide",{"title":210,"icon":211,"path":212,"stem":213,"children":214,"page":26},"Codegen and test data","i-lucide-wand","\u002Fintegrations\u002Fcodegen","6.integrations\u002F3.codegen",[215,219],{"title":216,"path":217,"stem":218},"vld-ts","\u002Fintegrations\u002Fcodegen\u002Fts","6.integrations\u002F3.codegen\u002F1.ts",{"title":220,"path":221,"stem":222},"vld-fake","\u002Fintegrations\u002Fcodegen\u002Ffake","6.integrations\u002F3.codegen\u002F2.fake",{"title":224,"icon":225,"path":226,"stem":227,"children":228,"page":26},"Databases","i-lucide-database","\u002Fintegrations\u002Fdatabase","6.integrations\u002F4.database",[229,233,237,241],{"title":230,"path":231,"stem":232},"vld-sqlx","\u002Fintegrations\u002Fdatabase\u002Fsqlx","6.integrations\u002F4.database\u002F1.sqlx",{"title":234,"path":235,"stem":236},"vld-diesel","\u002Fintegrations\u002Fdatabase\u002Fdiesel","6.integrations\u002F4.database\u002F2.diesel",{"title":238,"path":239,"stem":240},"vld-sea","\u002Fintegrations\u002Fdatabase\u002Fsea-orm","6.integrations\u002F4.database\u002F3.sea-orm",{"title":242,"path":243,"stem":244},"vld-surrealdb","\u002Fintegrations\u002Fdatabase\u002Fsurrealdb","6.integrations\u002F4.database\u002F4.surrealdb",{"title":246,"icon":247,"path":248,"stem":249,"children":250,"page":26},"Messaging","i-lucide-mail","\u002Fintegrations\u002Fmessaging","6.integrations\u002F5.messaging",[251,255],{"title":252,"path":253,"stem":254},"vld-redis","\u002Fintegrations\u002Fmessaging\u002Fredis","6.integrations\u002F5.messaging\u002F1.redis",{"title":256,"path":257,"stem":258},"vld-lapin","\u002Fintegrations\u002Fmessaging\u002Flapin","6.integrations\u002F5.messaging\u002F2.lapin",{"title":260,"icon":261,"path":262,"stem":263,"children":264,"page":26},"Config and CLI","i-lucide-terminal","\u002Fintegrations\u002Fconfig-cli","6.integrations\u002F6.config-cli",[265,269],{"title":266,"path":267,"stem":268},"vld-config","\u002Fintegrations\u002Fconfig-cli\u002Fconfig","6.integrations\u002F6.config-cli\u002F1.config",{"title":270,"path":271,"stem":272},"vld-clap","\u002Fintegrations\u002Fconfig-cli\u002Fclap","6.integrations\u002F6.config-cli\u002F2.clap",{"title":274,"icon":275,"path":276,"stem":277,"children":278,"page":26},"UI frameworks","i-lucide-monitor","\u002Fintegrations\u002Fui","6.integrations\u002F7.ui",[279,283,287],{"title":280,"path":281,"stem":282},"vld-dioxus","\u002Fintegrations\u002Fui\u002Fdioxus","6.integrations\u002F7.ui\u002F1.dioxus",{"title":284,"path":285,"stem":286},"vld-leptos","\u002Fintegrations\u002Fui\u002Fleptos","6.integrations\u002F7.ui\u002F2.leptos",{"title":288,"path":289,"stem":290},"vld-tauri","\u002Fintegrations\u002Fui\u002Ftauri","6.integrations\u002F7.ui\u002F3.tauri",{"title":292,"icon":293,"path":294,"stem":295,"children":296,"page":26},"Shared crates","i-lucide-package","\u002Fintegrations\u002Fshared","6.integrations\u002F8.shared",[297,301],{"title":298,"path":299,"stem":300},"vld-http-common","\u002Fintegrations\u002Fshared\u002Fhttp-common","6.integrations\u002F8.shared\u002F1.http-common",{"title":302,"path":303,"stem":304},"vld-integration-common","\u002Fintegrations\u002Fshared\u002Fintegration-common","6.integrations\u002F8.shared\u002F2.integration-common",{"title":306,"icon":307,"path":308,"stem":309,"children":310,"page":26},"Guides","i-lucide-book-open","\u002Fguides","7.guides",[311,315,319,323,327],{"title":312,"path":313,"stem":314},"Migration","\u002Fguides\u002Fmigration","7.guides\u002F1.migration",{"title":316,"path":317,"stem":318},"Security notes","\u002Fguides\u002Fsecurity","7.guides\u002F2.security",{"title":320,"path":321,"stem":322},"Performance","\u002Fguides\u002Fperformance","7.guides\u002F3.performance",{"title":324,"path":325,"stem":326},"Contributing","\u002Fguides\u002Fcontributing","7.guides\u002F4.contributing",{"title":328,"path":329,"stem":330},"FAQ","\u002Fguides\u002Ffaq","7.guides\u002F5.faq",{"title":332,"path":333,"stem":334},"Changelog","\u002Fchangelog","9.changelog",{"id":336,"title":216,"body":337,"description":1879,"extension":1880,"links":1881,"meta":1890,"navigation":533,"path":217,"seo":1891,"stem":218,"__hash__":1892},"docs\u002F6.integrations\u002F3.codegen\u002F1.ts.md",{"type":338,"value":339,"toc":1872},"minimark",[340,377,382,474,480,484,1000,1006,1251,1261,1265,1427,1431,1722,1739,1743,1868],[341,342,343,346,347,350,351,358,359,364,365,368,369,372,373,376],"p",{},[344,345,216],"code",{}," reads the JSON Schema of a vld schema (or a ",[344,348,349],{},"vld::schema!"," type) and prints a ",[352,353,357],"a",{"href":354,"rel":355},"https:\u002F\u002Fzod.dev\u002F",[356],"nofollow","Zod"," 3 or ",[352,360,363],{"href":361,"rel":362},"https:\u002F\u002Fvalibot.dev\u002F",[356],"Valibot"," 1 expression that accepts the same values. It has no runtime dependency besides ",[344,366,367],{},"vld"," (with ",[344,370,371],{},"openapi",") and ",[344,374,375],{},"serde_json","; run it from a build script, a test or a small binary and write the output to your frontend.",[378,379,381],"h2",{"id":380},"install","Install",[383,384,390],"pre",{"className":385,"code":386,"filename":387,"language":388,"meta":389,"style":389},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[dependencies]\nvld = { version = \"0.5\", features = [\"openapi\"] }\nvld-ts = \"0.5\"\n","Cargo.toml","toml","",[344,391,392,408,459],{"__ignoreMap":389},[393,394,397,401,405],"span",{"class":395,"line":396},"line",1,[393,398,400],{"class":399},"sMK4o","[",[393,402,404],{"class":403},"sBMFI","dependencies",[393,406,407],{"class":399},"]\n",[393,409,411,415,418,421,424,426,429,433,436,439,442,444,447,449,451,453,456],{"class":395,"line":410},2,[393,412,414],{"class":413},"sTEyZ","vld ",[393,416,417],{"class":399},"=",[393,419,420],{"class":399}," {",[393,422,423],{"class":413}," version ",[393,425,417],{"class":399},[393,427,428],{"class":399}," \"",[393,430,432],{"class":431},"sfazB","0.5",[393,434,435],{"class":399},"\"",[393,437,438],{"class":399},",",[393,440,441],{"class":413}," features ",[393,443,417],{"class":399},[393,445,446],{"class":399}," [",[393,448,435],{"class":399},[393,450,371],{"class":431},[393,452,435],{"class":399},[393,454,455],{"class":399},"]",[393,457,458],{"class":399}," }\n",[393,460,462,465,467,469,471],{"class":395,"line":461},3,[393,463,464],{"class":413},"vld-ts ",[393,466,417],{"class":399},[393,468,428],{"class":399},[393,470,432],{"class":431},[393,472,473],{"class":399},"\"\n",[341,475,476,477,479],{},"No optional features. MSRV: 1.85 (see ",[352,478,23],{"href":24},").",[378,481,483],{"id":482},"example","Example",[383,485,489],{"className":486,"code":487,"language":488,"meta":389,"style":389},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use vld_ts::{impl_to_valibot, impl_to_zod, to_zod, ToValibot, ToZod};\n\nvld::schema! {\n    pub struct Address {\n        pub city: String => vld::string().min(1),\n    }\n}\n\nvld::schema! {\n    pub struct User {\n        pub name: String => vld::string().min(2).max(50),\n        pub address: Address => vld::nested!(Address),\n    }\n}\n\nimpl_to_zod!(Address);\nimpl_to_zod!(User, \"UserBody\"); \u002F\u002F custom export name\nimpl_to_valibot!(User);\n\n\u002F\u002F A single schema value\nassert_eq!(to_zod(&vld::string().email()), \"z.string().email()\");\n\n\u002F\u002F A module with named exports; the import line is yours.\nlet module = format!(\n    \"import {{ z }} from \\\"zod\\\";\\n\\n{}\\n{}\",\n    Address::to_zod_export(),\n    User::to_zod_export(),\n);\nstd::fs::write(\"frontend\u002Fsrc\u002Fschemas.ts\", module).unwrap();\n\nlet valibot = User::to_valibot(); \u002F\u002F \"v.object({...})\"\n","rust",[344,490,491,529,535,549,564,605,611,617,622,633,645,686,714,719,724,729,742,768,780,785,791,828,833,839,856,903,917,929,934,972,977],{"__ignoreMap":389},[393,492,493,497,500,503,506,508,511,513,516,518,521,523,526],{"class":395,"line":396},[393,494,496],{"class":495},"sbssI","use",[393,498,499],{"class":403}," vld_ts",[393,501,502],{"class":399},"::{",[393,504,505],{"class":403},"impl_to_valibot",[393,507,438],{"class":399},[393,509,510],{"class":403}," impl_to_zod",[393,512,438],{"class":399},[393,514,515],{"class":403}," to_zod",[393,517,438],{"class":399},[393,519,520],{"class":403}," ToValibot",[393,522,438],{"class":399},[393,524,525],{"class":403}," ToZod",[393,527,528],{"class":399},"};\n",[393,530,531],{"class":395,"line":410},[393,532,534],{"emptyLinePlaceholder":533},true,"\n",[393,536,537,539,542,546],{"class":395,"line":461},[393,538,367],{"class":403},[393,540,541],{"class":399},"::",[393,543,545],{"class":544},"s2Zo4","schema!",[393,547,548],{"class":399}," {\n",[393,550,552,556,559,562],{"class":395,"line":551},4,[393,553,555],{"class":554},"spNyl","    pub",[393,557,558],{"class":554}," struct",[393,560,561],{"class":403}," Address",[393,563,548],{"class":399},[393,565,567,570,573,576,579,582,585,587,590,593,596,599,602],{"class":395,"line":566},5,[393,568,569],{"class":554},"        pub",[393,571,572],{"class":413}," city",[393,574,575],{"class":399},":",[393,577,578],{"class":403}," String",[393,580,581],{"class":399}," =>",[393,583,584],{"class":403}," vld",[393,586,541],{"class":399},[393,588,589],{"class":544},"string",[393,591,592],{"class":399},"().",[393,594,595],{"class":544},"min",[393,597,598],{"class":399},"(",[393,600,601],{"class":495},"1",[393,603,604],{"class":399},"),\n",[393,606,608],{"class":395,"line":607},6,[393,609,610],{"class":399},"    }\n",[393,612,614],{"class":395,"line":613},7,[393,615,616],{"class":399},"}\n",[393,618,620],{"class":395,"line":619},8,[393,621,534],{"emptyLinePlaceholder":533},[393,623,625,627,629,631],{"class":395,"line":624},9,[393,626,367],{"class":403},[393,628,541],{"class":399},[393,630,545],{"class":544},[393,632,548],{"class":399},[393,634,636,638,640,643],{"class":395,"line":635},10,[393,637,555],{"class":554},[393,639,558],{"class":554},[393,641,642],{"class":403}," User",[393,644,548],{"class":399},[393,646,648,650,653,655,657,659,661,663,665,667,669,671,674,676,679,681,684],{"class":395,"line":647},11,[393,649,569],{"class":554},[393,651,652],{"class":413}," name",[393,654,575],{"class":399},[393,656,578],{"class":403},[393,658,581],{"class":399},[393,660,584],{"class":403},[393,662,541],{"class":399},[393,664,589],{"class":544},[393,666,592],{"class":399},[393,668,595],{"class":544},[393,670,598],{"class":399},[393,672,673],{"class":495},"2",[393,675,479],{"class":399},[393,677,678],{"class":544},"max",[393,680,598],{"class":399},[393,682,683],{"class":495},"50",[393,685,604],{"class":399},[393,687,689,691,694,696,698,700,702,704,707,709,712],{"class":395,"line":688},12,[393,690,569],{"class":554},[393,692,693],{"class":413}," address",[393,695,575],{"class":399},[393,697,561],{"class":403},[393,699,581],{"class":399},[393,701,584],{"class":403},[393,703,541],{"class":399},[393,705,706],{"class":544},"nested!",[393,708,598],{"class":399},[393,710,711],{"class":403},"Address",[393,713,604],{"class":399},[393,715,717],{"class":395,"line":716},13,[393,718,610],{"class":399},[393,720,722],{"class":395,"line":721},14,[393,723,616],{"class":399},[393,725,727],{"class":395,"line":726},15,[393,728,534],{"emptyLinePlaceholder":533},[393,730,732,735,737,739],{"class":395,"line":731},16,[393,733,734],{"class":544},"impl_to_zod!",[393,736,598],{"class":399},[393,738,711],{"class":403},[393,740,741],{"class":399},");\n",[393,743,745,747,749,752,754,756,759,761,764],{"class":395,"line":744},17,[393,746,734],{"class":544},[393,748,598],{"class":399},[393,750,751],{"class":403},"User",[393,753,438],{"class":399},[393,755,428],{"class":399},[393,757,758],{"class":431},"UserBody",[393,760,435],{"class":399},[393,762,763],{"class":399},");",[393,765,767],{"class":766},"sHwdD"," \u002F\u002F custom export name\n",[393,769,771,774,776,778],{"class":395,"line":770},18,[393,772,773],{"class":544},"impl_to_valibot!",[393,775,598],{"class":399},[393,777,751],{"class":403},[393,779,741],{"class":399},[393,781,783],{"class":395,"line":782},19,[393,784,534],{"emptyLinePlaceholder":533},[393,786,788],{"class":395,"line":787},20,[393,789,790],{"class":766},"\u002F\u002F A single schema value\n",[393,792,794,797,799,802,805,807,809,811,813,816,819,821,824,826],{"class":395,"line":793},21,[393,795,796],{"class":544},"assert_eq!",[393,798,598],{"class":399},[393,800,801],{"class":544},"to_zod",[393,803,804],{"class":399},"(&",[393,806,367],{"class":403},[393,808,541],{"class":399},[393,810,589],{"class":544},[393,812,592],{"class":399},[393,814,815],{"class":544},"email",[393,817,818],{"class":399},"()),",[393,820,428],{"class":399},[393,822,823],{"class":431},"z.string().email()",[393,825,435],{"class":399},[393,827,741],{"class":399},[393,829,831],{"class":395,"line":830},22,[393,832,534],{"emptyLinePlaceholder":533},[393,834,836],{"class":395,"line":835},23,[393,837,838],{"class":766},"\u002F\u002F A module with named exports; the import line is yours.\n",[393,840,842,845,848,850,853],{"class":395,"line":841},24,[393,843,844],{"class":554},"let",[393,846,847],{"class":413}," module ",[393,849,417],{"class":399},[393,851,852],{"class":544}," format!",[393,854,855],{"class":399},"(\n",[393,857,859,862,865,868,871,874,877,880,883,885,888,891,894,897,900],{"class":395,"line":858},25,[393,860,861],{"class":399},"    \"",[393,863,864],{"class":431},"import {",[393,866,867],{"class":399},"{",[393,869,870],{"class":431}," z ",[393,872,873],{"class":399},"}",[393,875,876],{"class":431},"} from ",[393,878,879],{"class":413},"\\\"",[393,881,882],{"class":431},"zod",[393,884,879],{"class":413},[393,886,887],{"class":431},";",[393,889,890],{"class":413},"\\n\\n",[393,892,893],{"class":399},"{}",[393,895,896],{"class":413},"\\n",[393,898,899],{"class":399},"{}\"",[393,901,902],{"class":399},",\n",[393,904,906,909,911,914],{"class":395,"line":905},26,[393,907,908],{"class":403},"    Address",[393,910,541],{"class":399},[393,912,913],{"class":544},"to_zod_export",[393,915,916],{"class":399},"(),\n",[393,918,920,923,925,927],{"class":395,"line":919},27,[393,921,922],{"class":403},"    User",[393,924,541],{"class":399},[393,926,913],{"class":544},[393,928,916],{"class":399},[393,930,932],{"class":395,"line":931},28,[393,933,741],{"class":399},[393,935,937,940,942,945,947,950,952,954,957,959,961,964,966,969],{"class":395,"line":936},29,[393,938,939],{"class":403},"std",[393,941,541],{"class":399},[393,943,944],{"class":403},"fs",[393,946,541],{"class":399},[393,948,949],{"class":544},"write",[393,951,598],{"class":399},[393,953,435],{"class":399},[393,955,956],{"class":431},"frontend\u002Fsrc\u002Fschemas.ts",[393,958,435],{"class":399},[393,960,438],{"class":399},[393,962,963],{"class":413}," module",[393,965,479],{"class":399},[393,967,968],{"class":544},"unwrap",[393,970,971],{"class":399},"();\n",[393,973,975],{"class":395,"line":974},30,[393,976,534],{"emptyLinePlaceholder":533},[393,978,980,982,985,987,989,991,994,997],{"class":395,"line":979},31,[393,981,844],{"class":554},[393,983,984],{"class":413}," valibot ",[393,986,417],{"class":399},[393,988,642],{"class":403},[393,990,541],{"class":399},[393,992,993],{"class":544},"to_valibot",[393,995,996],{"class":399},"();",[393,998,999],{"class":766}," \u002F\u002F \"v.object({...})\"\n",[341,1001,1002,1003,575],{},"Generated ",[344,1004,1005],{},"schemas.ts",[383,1007,1011],{"className":1008,"code":1009,"filename":1005,"language":1010,"meta":389,"style":389},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { z } from \"zod\";\n\nexport const AddressSchema = z.object({\n  city: z.string().min(1)\n});\nexport type Address = z.infer\u003Ctypeof AddressSchema>;\n\nexport const UserBodySchema = z.object({\n  name: z.string().min(2).max(50),\n  address: z.lazy(() => AddressSchema)\n});\nexport type UserBody = z.infer\u003Ctypeof UserBodySchema>;\n","ts",[344,1012,1013,1039,1043,1069,1097,1106,1134,1138,1159,1196,1219,1227],{"__ignoreMap":389},[393,1014,1015,1019,1021,1024,1027,1030,1032,1034,1036],{"class":395,"line":396},[393,1016,1018],{"class":1017},"s7zQu","import",[393,1020,420],{"class":399},[393,1022,1023],{"class":413}," z",[393,1025,1026],{"class":399}," }",[393,1028,1029],{"class":1017}," from",[393,1031,428],{"class":399},[393,1033,882],{"class":431},[393,1035,435],{"class":399},[393,1037,1038],{"class":399},";\n",[393,1040,1041],{"class":395,"line":410},[393,1042,534],{"emptyLinePlaceholder":533},[393,1044,1045,1048,1051,1054,1056,1058,1061,1064,1066],{"class":395,"line":461},[393,1046,1047],{"class":1017},"export",[393,1049,1050],{"class":554}," const",[393,1052,1053],{"class":413}," AddressSchema ",[393,1055,417],{"class":399},[393,1057,1023],{"class":413},[393,1059,1060],{"class":399},".",[393,1062,1063],{"class":544},"object",[393,1065,598],{"class":413},[393,1067,1068],{"class":399},"{\n",[393,1070,1071,1075,1077,1079,1081,1083,1086,1088,1090,1092,1094],{"class":395,"line":551},[393,1072,1074],{"class":1073},"swJcz","  city",[393,1076,575],{"class":399},[393,1078,1023],{"class":413},[393,1080,1060],{"class":399},[393,1082,589],{"class":544},[393,1084,1085],{"class":413},"()",[393,1087,1060],{"class":399},[393,1089,595],{"class":544},[393,1091,598],{"class":413},[393,1093,601],{"class":495},[393,1095,1096],{"class":413},")\n",[393,1098,1099,1101,1104],{"class":395,"line":566},[393,1100,873],{"class":399},[393,1102,1103],{"class":413},")",[393,1105,1038],{"class":399},[393,1107,1108,1110,1113,1115,1118,1120,1122,1125,1128,1131],{"class":395,"line":607},[393,1109,1047],{"class":1017},[393,1111,1112],{"class":554}," type",[393,1114,561],{"class":403},[393,1116,1117],{"class":399}," =",[393,1119,1023],{"class":403},[393,1121,1060],{"class":399},[393,1123,1124],{"class":403},"infer",[393,1126,1127],{"class":399},"\u003Ctypeof",[393,1129,1130],{"class":413}," AddressSchema",[393,1132,1133],{"class":399},">;\n",[393,1135,1136],{"class":395,"line":613},[393,1137,534],{"emptyLinePlaceholder":533},[393,1139,1140,1142,1144,1147,1149,1151,1153,1155,1157],{"class":395,"line":619},[393,1141,1047],{"class":1017},[393,1143,1050],{"class":554},[393,1145,1146],{"class":413}," UserBodySchema ",[393,1148,417],{"class":399},[393,1150,1023],{"class":413},[393,1152,1060],{"class":399},[393,1154,1063],{"class":544},[393,1156,598],{"class":413},[393,1158,1068],{"class":399},[393,1160,1161,1164,1166,1168,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194],{"class":395,"line":624},[393,1162,1163],{"class":1073},"  name",[393,1165,575],{"class":399},[393,1167,1023],{"class":413},[393,1169,1060],{"class":399},[393,1171,589],{"class":544},[393,1173,1085],{"class":413},[393,1175,1060],{"class":399},[393,1177,595],{"class":544},[393,1179,598],{"class":413},[393,1181,673],{"class":495},[393,1183,1103],{"class":413},[393,1185,1060],{"class":399},[393,1187,678],{"class":544},[393,1189,598],{"class":413},[393,1191,683],{"class":495},[393,1193,1103],{"class":413},[393,1195,902],{"class":399},[393,1197,1198,1201,1203,1205,1207,1210,1212,1214,1216],{"class":395,"line":635},[393,1199,1200],{"class":1073},"  address",[393,1202,575],{"class":399},[393,1204,1023],{"class":413},[393,1206,1060],{"class":399},[393,1208,1209],{"class":544},"lazy",[393,1211,598],{"class":413},[393,1213,1085],{"class":399},[393,1215,581],{"class":554},[393,1217,1218],{"class":413}," AddressSchema)\n",[393,1220,1221,1223,1225],{"class":395,"line":647},[393,1222,873],{"class":399},[393,1224,1103],{"class":413},[393,1226,1038],{"class":399},[393,1228,1229,1231,1233,1236,1238,1240,1242,1244,1246,1249],{"class":395,"line":688},[393,1230,1047],{"class":1017},[393,1232,1112],{"class":554},[393,1234,1235],{"class":403}," UserBody",[393,1237,1117],{"class":399},[393,1239,1023],{"class":403},[393,1241,1060],{"class":399},[393,1243,1124],{"class":403},[393,1245,1127],{"class":399},[393,1247,1248],{"class":413}," UserBodySchema",[393,1250,1133],{"class":399},[341,1252,1253,1254,1257,1258,479],{},"Valibot exports use ",[344,1255,1256],{},"v.InferOutput\u003Ctypeof …>"," and pipes (",[344,1259,1260],{},"v.pipe(v.string(), v.minLength(2), v.maxLength(50))",[378,1262,1264],{"id":1263},"api","API",[1266,1267,1268,1281],"table",{},[1269,1270,1271],"thead",{},[1272,1273,1274,1278],"tr",{},[1275,1276,1277],"th",{},"Item",[1275,1279,1280],{},"Description",[1282,1283,1284,1303,1316,1330,1349,1365,1387,1404,1414],"tbody",{},[1272,1285,1286,1296],{},[1287,1288,1289,1292,1293],"td",{},[344,1290,1291],{},"to_zod(&schema)"," \u002F ",[344,1294,1295],{},"to_valibot(&schema)",[1287,1297,1298,1299,1302],{},"Expression for any ",[344,1300,1301],{},"vld::openapi::JsonSchema"," value",[1272,1304,1305,1310],{},[1287,1306,1307],{},[344,1308,1309],{},"to_openapi(&schema)",[1287,1311,1312,1313,1103],{},"The plain JSON Schema (",[344,1314,1315],{},"schema.json_schema()",[1272,1317,1318,1323],{},[1287,1319,1320],{},[344,1321,1322],{},"openapi_refs(&Value)",[1287,1324,1325,1326,1329],{},"All ",[344,1327,1328],{},"$ref"," paths in a schema",[1272,1331,1332,1340],{},[1287,1333,1334,1292,1337],{},[344,1335,1336],{},"impl_to_zod!(T)",[344,1338,1339],{},"impl_to_zod!(T, \"Name\")",[1287,1341,1342,1345,1346,1348],{},[344,1343,1344],{},"ToZod"," for a ",[344,1347,545],{}," \u002F derive type",[1272,1350,1351,1359],{},[1287,1352,1353,1292,1356],{},[344,1354,1355],{},"impl_to_valibot!(T)",[344,1357,1358],{},"impl_to_valibot!(T, \"Name\")",[1287,1360,1361,1364],{},[344,1362,1363],{},"ToValibot"," for a type",[1272,1366,1367,1372],{},[1287,1368,1369],{},[344,1370,1371],{},"impl_to_openapi!(T)",[1287,1373,1374,1377,1378,372,1381,1377,1384,1103],{},[344,1375,1376],{},"ToOpenApi"," (",[344,1379,1380],{},"T::to_openapi()",[344,1382,1383],{},"ToRefs",[344,1385,1386],{},"T::to_refs()",[1272,1388,1389,1394],{},[1287,1390,1391],{},[344,1392,1393],{},"ToZod::{to_zod, zod_name, to_zod_export}",[1287,1395,1396,1397,1400,1401],{},"Expression, export name, ",[344,1398,1399],{},"export const …Schema"," + ",[344,1402,1403],{},"export type",[1272,1405,1406,1411],{},[1287,1407,1408],{},[344,1409,1410],{},"ToValibot::{to_valibot, valibot_name, to_valibot_export}",[1287,1412,1413],{},"Same for Valibot",[1272,1415,1416,1424],{},[1287,1417,1418,1292,1421],{},[344,1419,1420],{},"zod_export(name, expr)",[344,1422,1423],{},"valibot_export(name, expr)",[1287,1425,1426],{},"Render a named export from any expression",[378,1428,1430],{"id":1429},"what-is-generated","What is generated",[1266,1432,1433,1444],{},[1269,1434,1435],{},[1272,1436,1437,1440,1442],{},[1275,1438,1439],{},"JSON Schema",[1275,1441,357],{},[1275,1443,363],{},[1282,1445,1446,1485,1509,1538,1559,1576,1597,1618,1643,1660,1677,1693],{},[1272,1447,1448,1464,1477],{},[1287,1449,1450,1292,1452,1292,1455,1292,1458,1292,1461],{},[344,1451,589],{},[344,1453,1454],{},"number",[344,1456,1457],{},"integer",[344,1459,1460],{},"boolean",[344,1462,1463],{},"null",[1287,1465,1466,1469,1470,1469,1473,1476],{},[344,1467,1468],{},"z.string()",", ",[344,1471,1472],{},"z.number()",[344,1474,1475],{},"z.number().int()",", …",[1287,1478,1479,1469,1482,1476],{},[344,1480,1481],{},"v.string()",[344,1483,1484],{},"v.pipe(v.number(), v.integer())",[1272,1486,1487,1493,1501],{},[1287,1488,1489,1490],{},"object (fields in schema order), ",[344,1491,1492],{},"additionalProperties: false",[1287,1494,1495,1469,1498],{},[344,1496,1497],{},"z.object({…})",[344,1499,1500],{},".strict()",[1287,1502,1503,1469,1506],{},[344,1504,1505],{},"v.object",[344,1507,1508],{},"v.strictObject",[1272,1510,1511,1522,1530],{},[1287,1512,1513,1292,1516,368,1519,1521],{},[344,1514,1515],{},"anyOf",[344,1517,1518],{},"oneOf",[344,1520,1463],{}," → nullable)",[1287,1523,1524,1469,1527],{},[344,1525,1526],{},"z.union([…])",[344,1528,1529],{},".nullable()",[1287,1531,1532,1469,1535],{},[344,1533,1534],{},"v.union",[344,1536,1537],{},"v.nullable",[1272,1539,1540,1549,1554],{},[1287,1541,1542,1543,1469,1546,1548],{},"tagged union: every option an object with a distinct string literal in a required tag (",[344,1544,1545],{},"discriminated_union",[344,1547,84],{}," on a tagged enum)",[1287,1550,1551],{},[344,1552,1553],{},"z.discriminatedUnion(\"tag\", […])",[1287,1555,1556],{},[344,1557,1558],{},"v.variant(\"tag\", […])",[1272,1560,1561,1566,1571],{},[1287,1562,1563],{},[344,1564,1565],{},"allOf",[1287,1567,1568],{},[344,1569,1570],{},"z.intersection(…)",[1287,1572,1573],{},[344,1574,1575],{},"v.intersect([…])",[1272,1577,1578,1587,1592],{},[1287,1579,1580,1581,1469,1584,1103],{},"fixed-length array (",[344,1582,1583],{},"minItems == maxItems",[344,1585,1586],{},".len(n)",[1287,1588,1589],{},[344,1590,1591],{},"z.array(x).length(n)",[1287,1593,1594],{},[344,1595,1596],{},"v.pipe(v.array(x), v.length(n))",[1272,1598,1599,1605,1610],{},[1287,1600,1601,1602,1103],{},"tuples (",[344,1603,1604],{},"prefixItems",[1287,1606,1607],{},[344,1608,1609],{},"z.tuple([…])",[1287,1611,1612,1292,1615],{},[344,1613,1614],{},"v.strictTuple",[344,1616,1617],{},"v.tupleWithRest",[1272,1619,1620,1628,1636],{},[1287,1621,1622,1292,1625],{},[344,1623,1624],{},"enum",[344,1626,1627],{},"const",[1287,1629,1630,1292,1633],{},[344,1631,1632],{},"z.literal",[344,1634,1635],{},"z.union",[1287,1637,1638,1292,1641],{},[344,1639,1640],{},"v.literal",[344,1642,1534],{},[1272,1644,1645,1650,1655],{},[1287,1646,1647],{},[344,1648,1649],{},"default",[1287,1651,1652],{},[344,1653,1654],{},".nullish().transform((v) => v ?? d)",[1287,1656,1657],{},[344,1658,1659],{},"v.nullish(x, d)",[1272,1661,1662,1667,1672],{},[1287,1663,1664],{},[344,1665,1666],{},"description",[1287,1668,1669],{},[344,1670,1671],{},".describe(\"…\")",[1287,1673,1674],{},[344,1675,1676],{},"v.description(\"…\")",[1272,1678,1679,1683,1688],{},[1287,1680,1681],{},[344,1682,1328],{},[1287,1684,1685],{},[344,1686,1687],{},"z.lazy(() => NameSchema)",[1287,1689,1690],{},[344,1691,1692],{},"v.lazy(() => NameSchema)",[1272,1694,1695,1708,1714],{},[1287,1696,1697,1698,1469,1701,1469,1704,1707],{},"formats Zod\u002FValibot lack (",[344,1699,1700],{},"slug",[344,1702,1703],{},"ulid",[344,1705,1706],{},"cron",", credit card, …)",[1287,1709,1710,1711],{},"regex or ",[344,1712,1713],{},".refine(…)",[1287,1715,1716,1292,1719],{},[344,1717,1718],{},"v.regex",[344,1720,1721],{},"v.check",[341,1723,1724,1725,1469,1728,1469,1731,1734,1735,1738],{},"Dates (",[344,1726,1727],{},"date",[344,1729,1730],{},"date-time",[344,1732,1733],{},"time",") use vld's exact ISO grammar as regexes rather than ",[344,1736,1737],{},".datetime()",", so both sides accept the same strings.",[378,1740,1742],{"id":1741},"gotchas","Gotchas",[1744,1745,1746,1767,1778,1790,1802,1826,1837,1847],"ul",{},[1747,1748,1749,1753,1754,1757,1758,1292,1761,1763,1764,1766],"li",{},[1750,1751,1752],"strong",{},"0.5 change",": ",[344,1755,1756],{},"with_default"," now emits ",[344,1759,1760],{},"x.nullish().transform((v) => v ?? d)",[344,1762,1659],{},", because vld accepts ",[344,1765,1463],{}," for a defaulted field. Regenerate client schemas after upgrading.",[1747,1768,1769,1770,1773,1774,1777],{},"Field order: required fields come out in declaration order (taken from ",[344,1771,1772],{},"required","). Optional fields keep their place in the JSON map, which serde_json sorts unless its ",[344,1775,1776],{},"preserve_order"," feature is on, so turn it on to get the full declared order.",[1747,1779,1780,1781,1784,1785,1469,1787,479],{},"Zod output targets the ",[1750,1782,1783],{},"Zod 3"," API (",[344,1786,823],{},[344,1788,1789],{},".ip({ version })",[1747,1791,1792,1794,1795,1798,1799,1801],{},[344,1793,1328],{},"s point at ",[344,1796,1797],{},"\u003CTypeName>Schema",", so export every nested type too, under its type name. Rename (",[344,1800,1339],{},") only top-level types.",[1747,1803,1804,1806,1807,1292,1810,1813,1814,1817,1818,1821,1822,1825],{},[344,1805,815],{}," uses ",[344,1808,1809],{},".email()",[344,1811,1812],{},"v.email()",", which require a dot in the domain (vld accepts ",[344,1815,1816],{},"a@b","). ",[344,1819,1820],{},"url_strict","'s public-host check and ",[344,1823,1824],{},"phone_e164_strict","'s numbering-plan check are shape-only on the client.",[1747,1827,1828,1829,1832,1833,1836],{},"Rust regex features JS cannot express (",[344,1830,1831],{},"\\p{…}",", scoped flags, class set operations, …) are not checked: the output contains a ",[344,1834,1835],{},"\u002F* pattern not portable to JS, not checked *\u002F"," note instead of a wrong regex.",[1747,1838,1839,1840,1843,1844,479],{},"Refinements are attached last (a Zod refinement returns ",[344,1841,1842],{},"ZodEffects",", which has no ",[344,1845,1846],{},".min()",[1747,1848,1849,1850,1853,1854,1857,1858,1861,1862,1865,1866,479],{},"The crate's tests can run the generated code under node: set ",[344,1851,1852],{},"VLD_TS_NODE_DIR"," to a directory whose ",[344,1855,1856],{},"node_modules"," has ",[344,1859,1860],{},"zod@3"," and ",[344,1863,1864],{},"valibot@1"," (see ",[352,1867,324],{"href":325},[1869,1870,1871],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":389,"searchDepth":410,"depth":461,"links":1873},[1874,1875,1876,1877,1878],{"id":380,"depth":410,"text":381},{"id":482,"depth":410,"text":483},{"id":1263,"depth":410,"text":1264},{"id":1429,"depth":410,"text":1430},{"id":1741,"depth":410,"text":1742},"Generate TypeScript Zod or Valibot schemas from vld schemas, so the frontend validates exactly what the server does.","md",[1882,1887],{"label":1883,"icon":1884,"to":1885,"target":1886},"crates.io","i-simple-icons-rust","https:\u002F\u002Fcrates.io\u002Fcrates\u002Fvld-ts","_blank",{"label":1888,"icon":307,"to":1889,"target":1886},"docs.rs","https:\u002F\u002Fdocs.rs\u002Fvld-ts",{},{"title":216,"description":1879},"Tbi_LDsOf9s2KdmWdRLOK7WWNH_59kmwFwAQ6EB0-Kk",[1894,1896],{"title":206,"path":207,"stem":208,"description":1895,"children":-1},"Use vld types in aide OpenAPI routers - a thin alias of vld-schemars with no aide dependency of its own.",{"title":220,"path":221,"stem":222,"description":1897,"children":-1},"Generate random test data that passes your vld schemas, typed or as raw JSON, with optional seeds.",1794036362089]