[{"data":1,"prerenderedAt":1311},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fcontributing":335,"\u002Fguides\u002Fcontributing-surround":1306},[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":324,"body":337,"description":1299,"extension":1300,"links":1301,"meta":1302,"navigation":1303,"path":325,"seo":1304,"stem":326,"__hash__":1305},"docs\u002F7.guides\u002F4.contributing.md",{"type":338,"value":339,"toc":1289},"minimark",[340,345,455,463,467,473,510,548,745,785,803,841,871,875,882,918,929,960,964,980,1009,1013,1029,1108,1111,1115,1171,1190,1194,1200,1249,1265,1272,1275,1285],[341,342,344],"h2",{"id":343},"layout","Layout",[346,347,348,361],"table",{},[349,350,351],"thead",{},[352,353,354,358],"tr",{},[355,356,357],"th",{},"Path",[355,359,360],{},"Contents",[362,363,364,388,408,421,431,441],"tbody",{},[352,365,366,373],{},[367,368,369],"td",{},[370,371,372],"code",{},"crates\u002Fvld",[367,374,375,376,379,380,383,384,387],{},"the core crate: ",[370,377,378],{},"src\u002F",", ",[370,381,382],{},"tests\u002Fall\u002F"," (one test binary), ",[370,385,386],{},"benches\u002F"," (Criterion)",[352,389,390,395],{},[367,391,392],{},[370,393,394],{},"crates\u002Fvld-*",[367,396,397,398,379,400,403,404,407],{},"integration crates (each with ",[370,399,378],{},[370,401,402],{},"tests\u002F",", usually ",[370,405,406],{},"examples\u002F",")",[352,409,410,415],{},[367,411,412],{},[370,413,414],{},"fuzz\u002F",[367,416,417,420],{},[370,418,419],{},"cargo-fuzz"," targets (not in the workspace)",[352,422,423,428],{},[367,424,425],{},[370,426,427],{},"examples\u002Fplayground",[367,429,430],{},"a small app that uses many crates together",[352,432,433,438],{},[367,434,435],{},[370,436,437],{},"docs\u002F",[367,439,440],{},"this site (Nuxt + Nuxt Content)",[352,442,443,448],{},[367,444,445],{},[370,446,447],{},"justfile",[367,449,450,451,454],{},"CI, checks and the release hook (",[370,452,453],{},"just"," lists them)",[456,457,458,459,462],"p",{},"All crates share one version and are released together; see ",[370,460,461],{},"PUBLISHING.md",".",[341,464,466],{"id":465},"running-ci-locally","Running CI locally",[456,468,469,470,472],{},"CI runs ",[370,471,453],{}," recipes, so the same commands work locally. Install the tools once:",[474,475,480],"pre",{"className":476,"code":477,"language":478,"meta":479,"style":479},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cargo install just cargo-hack cargo-deny cargo-shear cargo-semver-checks\n","bash","",[370,481,482],{"__ignoreMap":479},[483,484,487,491,495,498,501,504,507],"span",{"class":485,"line":486},"line",1,[483,488,490],{"class":489},"sBMFI","cargo",[483,492,494],{"class":493},"sfazB"," install",[483,496,497],{"class":493}," just",[483,499,500],{"class":493}," cargo-hack",[483,502,503],{"class":493}," cargo-deny",[483,505,506],{"class":493}," cargo-shear",[483,508,509],{"class":493}," cargo-semver-checks\n",[474,511,513],{"className":476,"code":512,"language":478,"meta":479,"style":479},"just            # list recipes\njust ci         # what CI runs on every push\njust lint test  # only these\n",[370,514,515,523,534],{"__ignoreMap":479},[483,516,517,519],{"class":485,"line":486},[483,518,453],{"class":489},[483,520,522],{"class":521},"sHwdD","            # list recipes\n",[483,524,526,528,531],{"class":485,"line":525},2,[483,527,453],{"class":489},[483,529,530],{"class":493}," ci",[483,532,533],{"class":521},"         # what CI runs on every push\n",[483,535,537,539,542,545],{"class":485,"line":536},3,[483,538,453],{"class":489},[483,540,541],{"class":493}," lint",[483,543,544],{"class":493}," test",[483,546,547],{"class":521},"  # only these\n",[346,549,550,560],{},[349,551,552],{},[352,553,554,557],{},[355,555,556],{},"Recipe",[355,558,559],{},"What it does",[362,561,562,574,595,607,622,635,648,658,668,678,691,708,718,731],{},[352,563,564,569],{},[367,565,566],{},[370,567,568],{},"fmt",[367,570,571],{},[370,572,573],{},"cargo fmt --check",[352,575,576,581],{},[367,577,578],{},[370,579,580],{},"lint",[367,582,583,586,587,590,591,594],{},[370,584,585],{},"cargo shear"," (unused \u002F misplaced dependencies), then clippy ",[370,588,589],{},"-D warnings",": workspace, each ",[370,592,593],{},"vld"," feature alone and all together, feature pairs of integration crates",[352,596,597,602],{},[367,598,599],{},[370,600,601],{},"test",[367,603,604,605],{},"tests and doctests with the same feature sets as ",[370,606,580],{},[352,608,609,614],{},[367,610,611],{},[370,612,613],{},"docs",[367,615,616,619,620],{},[370,617,618],{},"cargo doc"," with ",[370,621,589],{},[352,623,624,629],{},[367,625,626],{},[370,627,628],{},"deny",[367,630,631,634],{},[370,632,633],{},"cargo deny"," (advisories, licenses, duplicates)",[352,636,637,642],{},[367,638,639],{},[370,640,641],{},"package",[367,643,644,647],{},[370,645,646],{},"cargo package"," dry run",[352,649,650,655],{},[367,651,652],{},[370,653,654],{},"fuzz",[367,656,657],{},"builds the fuzz targets",[352,659,660,665],{},[367,661,662],{},[370,663,664],{},"playground",[367,666,667],{},"runs the playground example",[352,669,670,675],{},[367,671,672],{},[370,673,674],{},"wasm",[367,676,677],{},"wasm32 builds of the UI integrations",[352,679,680,685],{},[367,681,682],{},[370,683,684],{},"powerset",[367,686,687,688,690],{},"every pair of ",[370,689,593],{}," features compiles (slow)",[352,692,693,698],{},[367,694,695],{},[370,696,697],{},"msrv",[367,699,700,701,704,705,407],{},"every crate on its ",[370,702,703],{},"rust-version"," (see ",[706,707,23],"a",{"href":24},[352,709,710,715],{},[367,711,712],{},[370,713,714],{},"minimal",[367,716,717],{},"lowest allowed dependency versions (nightly)",[352,719,720,725],{},[367,721,722],{},[370,723,724],{},"semver",[367,726,727,730],{},[370,728,729],{},"cargo semver-checks",": API changes vs the latest crates.io release fit the version bump",[352,732,733,738],{},[367,734,735],{},[370,736,737],{},"clean",[367,739,740,741,744],{},"removes ",[370,742,743],{},"target\u002Fci"," and the MSRV \u002F minimal build dirs",[456,746,747,748,754,755,758,759,379,762,758,765,768,769,772,773,775,776,379,778,379,780,379,782,784],{},"Feature combinations come from ",[706,749,753],{"href":750,"rel":751},"https:\u002F\u002Fgithub.com\u002Ftaiki-e\u002Fcargo-hack",[752],"nofollow","cargo-hack",". Crates with one feature per supported major of a dependency (",[370,756,757],{},"redis-0"," \u002F ",[370,760,761],{},"redis-1",[370,763,764],{},"sqlx-0_8",[370,766,767],{},"sqlx-0_9",", …) are listed in ",[370,770,771],{},"feature_crates"," at the top of the ",[370,774,447],{},"; cargo-hack runs every major alone and with each other feature, never two majors together. ",[370,777,674],{},[370,779,684],{},[370,781,697],{},[370,783,714],{}," and the Windows \u002F macOS tests run only before a release, by hand (Actions → CI → Run workflow).",[456,786,787,788,791,792,795,796,799,800,462],{},"Lints shared by every crate live in ",[370,789,790],{},"[workspace.lints]"," in the root ",[370,793,794],{},"Cargo.toml"," (each crate has ",[370,797,798],{},"[lints] workspace = true","); external dependencies used by several crates are declared once in ",[370,801,802],{},"[workspace.dependencies]",[456,804,805,806,809,810,813,814,817,818,820,821,758,824,827,828,758,831,809,834,379,837,840],{},"Builds use the committed ",[370,807,808],{},"Cargo.lock"," (",[370,811,812],{},"--locked",") and the ",[370,815,816],{},"ci"," profile (no debuginfo, output in ",[370,819,743],{},"). diesel's ",[370,822,823],{},"postgres",[370,825,826],{},"mysql"," features need ",[370,829,830],{},"libpq",[370,832,833],{},"libmysqlclient",[370,835,836],{},"brew install libpq mysql-client",[370,838,839],{},"apt install libpq-dev libmysqlclient-dev",").",[842,843,844],"warning",{},[456,845,846,847,850,851,758,854,379,857,758,860,379,863,758,865,867,868,462],{},"Never use ",[370,848,849],{},"--all-features"," on crates with dual-major features (",[370,852,853],{},"ntex-3",[370,855,856],{},"ntex-4",[370,858,859],{},"utoipa-5",[370,861,862],{},"utoipa-6",[370,864,764],{},[370,866,767],{},", …): the majors are mutually exclusive and fail with ",[370,869,870],{},"compile_error!",[341,872,874],{"id":873},"keeping-target-small","Keeping target\u002F small",[456,876,877,878,881],{},"With ~30 integration crates a debug ",[370,879,880],{},"target\u002F"," grows fast. The workspace already helps:",[883,884,885,896,906],"ul",{},[886,887,888,891,892,895],"li",{},[370,889,890],{},"[profile.dev]"," uses ",[370,893,894],{},"debug = \"line-tables-only\""," for workspace crates and no debuginfo for dependencies;",[886,897,898,901,902,905],{},[370,899,900],{},"split-debuginfo = \"off\""," stops macOS from leaving stale object files in ",[370,903,904],{},"target\u002F*\u002Fdeps"," on every rebuild;",[886,907,908,910,911,913,914,917],{},[370,909,453],{}," recipes build into ",[370,912,743],{},"; ",[370,915,916],{},"just clean"," removes it without touching the dev build.",[456,919,920,921,928],{},"If it still grows, remove old artifacts with ",[706,922,925],{"href":923,"rel":924},"https:\u002F\u002Fgithub.com\u002Fholmgr\u002Fcargo-sweep",[752],[370,926,927],{},"cargo sweep",":",[474,930,932],{"className":476,"code":931,"language":478,"meta":479,"style":479},"cargo install cargo-sweep\ncargo sweep --time 7     # delete artifacts not used for 7 days\n",[370,933,934,943],{"__ignoreMap":479},[483,935,936,938,940],{"class":485,"line":486},[483,937,490],{"class":489},[483,939,494],{"class":493},[483,941,942],{"class":493}," cargo-sweep\n",[483,944,945,947,950,953,957],{"class":485,"line":525},[483,946,490],{"class":489},[483,948,949],{"class":493}," sweep",[483,951,952],{"class":493}," --time",[483,954,956],{"class":955},"sbssI"," 7",[483,958,959],{"class":521},"     # delete artifacts not used for 7 days\n",[341,961,963],{"id":962},"snapshot-tests","Snapshot tests",[456,965,966,379,968,970,971,973,974,979],{},[370,967,198],{},[370,969,206],{}," and ",[370,972,216],{}," use ",[706,975,978],{"href":976,"rel":977},"https:\u002F\u002Finsta.rs",[752],"insta"," snapshots. After an intended output change:",[474,981,983],{"className":476,"code":982,"language":478,"meta":479,"style":479},"cargo insta test -p vld-ts\ncargo insta review\n",[370,984,985,1000],{"__ignoreMap":479},[483,986,987,989,992,994,997],{"class":485,"line":486},[483,988,490],{"class":489},[483,990,991],{"class":493}," insta",[483,993,544],{"class":493},[483,995,996],{"class":493}," -p",[483,998,999],{"class":493}," vld-ts\n",[483,1001,1002,1004,1006],{"class":485,"line":525},[483,1003,490],{"class":489},[483,1005,991],{"class":493},[483,1007,1008],{"class":493}," review\n",[341,1010,1012],{"id":1011},"vld-ts-cross-check-against-node","vld-ts cross-check against Node",[456,1014,1015,1017,1018,1021,1022,970,1025,1028],{},[370,1016,216],{}," can compare its generated Zod \u002F Valibot schemas against real Node runs. Point ",[370,1019,1020],{},"VLD_TS_NODE_DIR"," at a directory with ",[370,1023,1024],{},"zod@3",[370,1026,1027],{},"valibot@1"," installed:",[474,1030,1032],{"className":476,"code":1031,"language":478,"meta":479,"style":479},"mkdir -p .ts-check && echo '{\"private\":true}' > .ts-check\u002Fpackage.json && npm --prefix .ts-check install zod@3 valibot@1\nVLD_TS_NODE_DIR=$PWD\u002F.ts-check cargo test -p vld-ts\n",[370,1033,1034,1085],{"__ignoreMap":479},[483,1035,1036,1039,1041,1044,1048,1052,1055,1058,1061,1064,1067,1069,1072,1075,1077,1079,1082],{"class":485,"line":486},[483,1037,1038],{"class":489},"mkdir",[483,1040,996],{"class":493},[483,1042,1043],{"class":493}," .ts-check",[483,1045,1047],{"class":1046},"sMK4o"," &&",[483,1049,1051],{"class":1050},"s2Zo4"," echo",[483,1053,1054],{"class":1046}," '",[483,1056,1057],{"class":493},"{\"private\":true}",[483,1059,1060],{"class":1046},"'",[483,1062,1063],{"class":1046}," >",[483,1065,1066],{"class":493}," .ts-check\u002Fpackage.json",[483,1068,1047],{"class":1046},[483,1070,1071],{"class":489}," npm",[483,1073,1074],{"class":493}," --prefix",[483,1076,1043],{"class":493},[483,1078,494],{"class":493},[483,1080,1081],{"class":493}," zod@3",[483,1083,1084],{"class":493}," valibot@1\n",[483,1086,1087,1090,1093,1096,1099,1102,1104,1106],{"class":485,"line":525},[483,1088,1020],{"class":1089},"sTEyZ",[483,1091,1092],{"class":1046},"=",[483,1094,1095],{"class":1089},"$PWD",[483,1097,1098],{"class":493},"\u002F.ts-check",[483,1100,1101],{"class":489}," cargo",[483,1103,544],{"class":493},[483,1105,996],{"class":493},[483,1107,999],{"class":493},[456,1109,1110],{},"Without the variable the cross-check is skipped.",[341,1112,1114],{"id":1113},"fuzzing","Fuzzing",[474,1116,1118],{"className":476,"code":1117,"language":478,"meta":479,"style":479},"cargo install cargo-fuzz\ncd fuzz\ncargo +nightly fuzz list\ncargo +nightly fuzz run iso_formats -- -max_total_time=60\n",[370,1119,1120,1129,1137,1150],{"__ignoreMap":479},[483,1121,1122,1124,1126],{"class":485,"line":486},[483,1123,490],{"class":489},[483,1125,494],{"class":493},[483,1127,1128],{"class":493}," cargo-fuzz\n",[483,1130,1131,1134],{"class":485,"line":525},[483,1132,1133],{"class":1050},"cd",[483,1135,1136],{"class":493}," fuzz\n",[483,1138,1139,1141,1144,1147],{"class":485,"line":536},[483,1140,490],{"class":489},[483,1142,1143],{"class":493}," +nightly",[483,1145,1146],{"class":493}," fuzz",[483,1148,1149],{"class":493}," list\n",[483,1151,1153,1155,1157,1159,1162,1165,1168],{"class":485,"line":1152},4,[483,1154,490],{"class":489},[483,1156,1143],{"class":493},[483,1158,1146],{"class":493},[483,1160,1161],{"class":493}," run",[483,1163,1164],{"class":493}," iso_formats",[483,1166,1167],{"class":493}," --",[483,1169,1170],{"class":493}," -max_total_time=60\n",[456,1172,1173,1174,379,1177,379,1180,379,1183,1186,1187,462],{},"Targets: ",[370,1175,1176],{},"iso_formats",[370,1178,1179],{},"string_formats",[370,1181,1182],{},"url_decode",[370,1184,1185],{},"error_truncation",". Crashes are saved to ",[370,1188,1189],{},"fuzz\u002Fartifacts\u002F\u003Ctarget>\u002F",[341,1191,1193],{"id":1192},"documentation","Documentation",[456,1195,1196,1197,1199],{},"This site lives in ",[370,1198,437],{}," and is built with Nuxt Content:",[474,1201,1203],{"className":476,"code":1202,"language":478,"meta":479,"style":479},"cd docs\npnpm install\npnpm dev                                   # http:\u002F\u002Flocalhost:3000\nNUXT_APP_BASE_URL=\u002Fvld\u002F pnpm generate      # static build in .output\u002Fpublic\n",[370,1204,1205,1212,1220,1230],{"__ignoreMap":479},[483,1206,1207,1209],{"class":485,"line":486},[483,1208,1133],{"class":1050},[483,1210,1211],{"class":493}," docs\n",[483,1213,1214,1217],{"class":485,"line":525},[483,1215,1216],{"class":489},"pnpm",[483,1218,1219],{"class":493}," install\n",[483,1221,1222,1224,1227],{"class":485,"line":536},[483,1223,1216],{"class":489},[483,1225,1226],{"class":493}," dev",[483,1228,1229],{"class":521},"                                   # http:\u002F\u002Flocalhost:3000\n",[483,1231,1232,1235,1237,1240,1243,1246],{"class":485,"line":1152},[483,1233,1234],{"class":1089},"NUXT_APP_BASE_URL",[483,1236,1092],{"class":1046},[483,1238,1239],{"class":493},"\u002Fvld\u002F",[483,1241,1242],{"class":489}," pnpm",[483,1244,1245],{"class":493}," generate",[483,1247,1248],{"class":521},"      # static build in .output\u002Fpublic\n",[456,1250,1251,970,1254,1257,1258,1261,1262,462],{},[370,1252,1253],{},"CHANGELOG.md",[370,1255,1256],{},"MSRV.md"," are copied into the site by ",[370,1259,1260],{},"docs\u002Fscripts\u002Fsync.mjs","; edit the originals. The site is deployed to GitHub Pages by ",[370,1263,1264],{},".github\u002Fworkflows\u002Fdocs.yml",[456,1266,1267,1268,1271],{},"Rust API docs: ",[370,1269,1270],{},"RUSTDOCFLAGS=\"-D warnings\" cargo doc --workspace --no-deps"," must stay clean.",[341,1273,332],{"id":1274},"changelog",[456,1276,1277,1278,1281,1282,1284],{},"Add entries under ",[370,1279,1280],{},"## [Unreleased]"," at the top of ",[370,1283,1253],{}," (create the heading if it is not there), and a line in \"Migration\" for anything breaking.",[1286,1287,1288],"style",{},"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 .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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":479,"searchDepth":525,"depth":536,"links":1290},[1291,1292,1293,1294,1295,1296,1297,1298],{"id":343,"depth":525,"text":344},{"id":465,"depth":525,"text":466},{"id":873,"depth":525,"text":874},{"id":962,"depth":525,"text":963},{"id":1011,"depth":525,"text":1012},{"id":1113,"depth":525,"text":1114},{"id":1192,"depth":525,"text":1193},{"id":1274,"depth":525,"text":332},"Repository layout, running CI locally, keeping target\u002F small, snapshots and fuzzing.","md",null,{},true,{"title":324,"description":1299},"Yf4zNvb-xqSEH47yqrbqM9_TCsjfnh43dFMDyXarU1w",[1307,1309],{"title":320,"path":321,"stem":322,"description":1308,"children":-1},"How vld avoids repeated work, and how to keep your schemas fast.",{"title":328,"path":329,"stem":330,"description":1310,"children":-1},"Short answers to common questions.",1794036360572]