[{"data":1,"prerenderedAt":1520},["ShallowReactive",2],{"page:\u002Fextensions\u002Fkubb-labs\u002Fplugin-zod\u002Fguides\u002Fcustomization":3},{"id":4,"frontmatter":5,"title":6,"heading":6,"body":7,"path":1519,"source":4},"extensions\u002Fkubb-labs\u002Fplugin-zod\u002Fguides\u002Fcustomization.md",{},"Customize generated schemas",{"type":8,"value":9,"toc":1507},"minimark",[10,14,28,33,44,196,207,211,225,320,337,341,353,357,363,503,528,535,703,719,733,737,751,928,946,950,956,1454,1458,1476,1490],[11,12,13],"p",{},"Prefix inferred types, change Zod validators, and encode custom request types.",[11,15,16,17,22,23,27],{},"Start with the ",[18,19,21],"a",{"href":20},"https:\u002F\u002Fkubb.dev\u002Fextensions\u002Fkubb-labs\u002Fplugin-zod#example","Zod plugin configuration",". Apply these changes to ",[24,25,26],"code",{},"pluginZod()"," in that configuration.",[29,30,32],"h2",{"id":31},"prefix-inferred-types","Prefix inferred types",[11,34,35,36,39,40,43],{},"Enable ",[24,37,38],{},"inferred"," and override ",[24,41,42],{},"resolver.schema.typeName",".",[45,46,51],"pre",{"language":47,"filename":48,"code":49,"class":50},"typescript","kubb.config.ts","import { pluginZod } from '@kubb\u002Fplugin-zod'\n\npluginZod({\n  inferred: true,\n  resolver: {\n    schema: {\n      typeName(name) {\n        return 'Api' + name\n      },\n    },\n  },\n})","highlights",[24,52,54,81,82,81,84,81,93,81,109,81,121,81,133,81,150,81,166,81,175,81,183,81,191],{"class":53},"language-typescript",[55,56,59,63,67,71,74,77],"span",{"class":57,"style":58},"line","display: inline",[55,60,62],{"style":61},"color:#d73a49;--hls-dark:#f97583","import ",[55,64,66],{"style":65},"color:#005cc5;--hls-dark:#79b8ff","{ ",[55,68,70],{"style":69},"color:#24292e;--hls-dark:#e1e4e8","pluginZod ",[55,72,73],{"style":65},"} ",[55,75,76],{"style":61},"from ",[55,78,80],{"style":79},"color:#032f62;--hls-dark:#9ecbff","'@kubb\u002Fplugin-zod'","\n",[55,83],{"class":57,"style":58},[55,85,86,90],{"class":57,"style":58},[55,87,89],{"style":88},"color:#6f42c1;--hls-dark:#b392f0","pluginZod",[55,91,92],{"style":65},"({",[55,94,95,98,100,103,106],{"class":57,"style":58},[55,96,97],{"style":65},"  ",[55,99,38],{"style":65},[55,101,102],{"style":61},": ",[55,104,105],{"style":65},"true",[55,107,108],{"style":61},",",[55,110,111,113,116,118],{"class":57,"style":58},[55,112,97],{"style":61},[55,114,115],{"style":65},"resolver",[55,117,102],{"style":61},[55,119,120],{"style":65},"{",[55,122,123,126,129,131],{"class":57,"style":58},[55,124,125],{"style":65},"    ",[55,127,128],{"style":65},"schema",[55,130,102],{"style":61},[55,132,120],{"style":65},[55,134,135,138,141,144,147],{"class":57,"style":58},[55,136,137],{"style":65},"      ",[55,139,140],{"style":88},"typeName",[55,142,143],{"style":65},"(",[55,145,146],{"style":69},"name",[55,148,149],{"style":65},") {",[55,151,152,155,158,161,164],{"class":57,"style":58},[55,153,154],{"style":65},"        ",[55,156,157],{"style":61},"return ",[55,159,160],{"style":79},"'Api' ",[55,162,163],{"style":61},"+ ",[55,165,146],{"style":69},[55,167,168,170,173],{"class":57,"style":58},[55,169,137],{"style":69},[55,171,172],{"style":65},"}",[55,174,108],{"style":61},[55,176,177,179,181],{"class":57,"style":58},[55,178,125],{"style":61},[55,180,172],{"style":65},[55,182,108],{"style":61},[55,184,185,187,189],{"class":57,"style":58},[55,186,97],{"style":61},[55,188,172],{"style":65},[55,190,108],{"style":61},[55,192,193],{"class":57,"style":58},[55,194,195],{"style":65},"})",[11,197,198,199,202,203,206],{},"The type becomes ",[24,200,201],{},"ApiPet",". The schema constant stays ",[24,204,205],{},"petSchema",". The callback receives the cased type name, so no additional casing helper is needed.",[29,208,210],{"id":209},"use-numbers-for-int64-fields","Use numbers for int64 fields",[11,212,213,214,217,218,221,222,43],{},"Replace the ",[24,215,216],{},"bigint"," printer handler to validate ",[24,219,220],{},"int64"," fields with ",[24,223,224],{},"z.int()",[45,226,228],{"language":47,"filename":48,"code":227,"class":50},"import { pluginZod } from '@kubb\u002Fplugin-zod'\n\npluginZod({\n  printer: {\n    nodes: {\n      bigint() {\n        return 'z.int()'\n      },\n    },\n  },\n})",[24,229,230,81,244,81,246,81,252,81,263,81,274,81,283,81,292,81,300,81,308,81,316],{"class":53},[55,231,232,234,236,238,240,242],{"class":57,"style":58},[55,233,62],{"style":61},[55,235,66],{"style":65},[55,237,70],{"style":69},[55,239,73],{"style":65},[55,241,76],{"style":61},[55,243,80],{"style":79},[55,245],{"class":57,"style":58},[55,247,248,250],{"class":57,"style":58},[55,249,89],{"style":88},[55,251,92],{"style":65},[55,253,254,256,259,261],{"class":57,"style":58},[55,255,97],{"style":65},[55,257,258],{"style":65},"printer",[55,260,102],{"style":61},[55,262,120],{"style":65},[55,264,265,267,270,272],{"class":57,"style":58},[55,266,125],{"style":65},[55,268,269],{"style":65},"nodes",[55,271,102],{"style":61},[55,273,120],{"style":65},[55,275,276,278,280],{"class":57,"style":58},[55,277,137],{"style":65},[55,279,216],{"style":88},[55,281,282],{"style":65},"() {",[55,284,285,287,289],{"class":57,"style":58},[55,286,154],{"style":65},[55,288,157],{"style":61},[55,290,291],{"style":79},"'z.int()'",[55,293,294,296,298],{"class":57,"style":58},[55,295,137],{"style":79},[55,297,172],{"style":65},[55,299,108],{"style":61},[55,301,302,304,306],{"class":57,"style":58},[55,303,125],{"style":61},[55,305,172],{"style":65},[55,307,108],{"style":61},[55,309,310,312,314],{"class":57,"style":58},[55,311,97],{"style":61},[55,313,172],{"style":65},[55,315,108],{"style":61},[55,317,318],{"class":57,"style":58},[55,319,195],{"style":65},[11,321,322,323,326,327,330,331,43],{},"The ",[24,324,325],{},"integer"," handler controls ",[24,328,329],{},"int32"," fields separately. To change integer representation across all plugins, use the adapter's ",[18,332,334],{"href":333},"https:\u002F\u002Fkubb.dev\u002Fextensions\u002Fkubb-labs\u002Fadapter-oas\u002Foptions#integertype",[24,335,336],{},"integerType",[29,338,340],{"id":339},"remove-descriptions","Remove descriptions",[11,342,343,344,348,349,352],{},"Use the ",[18,345,347],{"href":346},"https:\u002F\u002Fkubb.dev\u002Fextensions\u002Fkubb-labs\u002Fplugin-ts\u002Fguides\u002Fcustomization#remove-descriptions","description-removal macro"," with ",[24,350,351],{},"pluginZod({ macros: [dropDescriptions] })",". Generated schemas omit description metadata.",[29,354,356],{"id":355},"encode-custom-types","Encode custom types",[11,358,359,360,43],{},"A direction-aware printer decodes response values and encodes request values. This example converts ISO time strings to ",[24,361,362],{},"Temporal.PlainTime",[45,364,366],{"language":47,"filename":48,"code":365,"class":50},"import { pluginZod, type PrinterZodNodes } from '@kubb\u002Fplugin-zod'\n\nconst nodes: PrinterZodNodes = {\n  time() {\n    return this.options.direction === 'encode'\n      ? 'z.instanceof(Temporal.PlainTime).transform((value) => value.toString())'\n      : 'z.iso.time().transform((value) => Temporal.PlainTime.from(value))'\n  },\n}\n\npluginZod({ inferred: true, printer: { nodes } })",[24,367,368,81,391,81,393,81,409,81,418,81,443,81,453,81,462,81,470,81,474,81,476],{"class":53},[55,369,370,372,374,376,379,382,385,387,389],{"class":57,"style":58},[55,371,62],{"style":61},[55,373,66],{"style":65},[55,375,89],{"style":69},[55,377,378],{"style":61},", ",[55,380,381],{"style":61},"type ",[55,383,384],{"style":88},"PrinterZodNodes ",[55,386,73],{"style":65},[55,388,76],{"style":61},[55,390,80],{"style":79},[55,392],{"class":57,"style":58},[55,394,395,398,400,402,404,407],{"class":57,"style":58},[55,396,397],{"style":61},"const ",[55,399,269],{"style":69},[55,401,102],{"style":69},[55,403,384],{"style":88},[55,405,406],{"style":61},"= ",[55,408,120],{"style":65},[55,410,411,413,416],{"class":57,"style":58},[55,412,97],{"style":65},[55,414,415],{"style":88},"time",[55,417,282],{"style":65},[55,419,420,422,424,427,429,432,434,437,440],{"class":57,"style":58},[55,421,125],{"style":65},[55,423,157],{"style":61},[55,425,426],{"style":69},"this",[55,428,43],{"style":61},[55,430,431],{"style":65},"options",[55,433,43],{"style":61},[55,435,436],{"style":65},"direction ",[55,438,439],{"style":61},"=== ",[55,441,442],{"style":79},"'encode'",[55,444,445,447,450],{"class":57,"style":58},[55,446,137],{"style":79},[55,448,449],{"style":61},"? ",[55,451,452],{"style":79},"'z.instanceof(Temporal.PlainTime).transform((value) => value.toString())'",[55,454,455,457,459],{"class":57,"style":58},[55,456,137],{"style":79},[55,458,102],{"style":61},[55,460,461],{"style":79},"'z.iso.time().transform((value) => Temporal.PlainTime.from(value))'",[55,463,464,466,468],{"class":57,"style":58},[55,465,97],{"style":79},[55,467,172],{"style":65},[55,469,108],{"style":61},[55,471,472],{"class":57,"style":58},[55,473,172],{"style":65},[55,475],{"class":57,"style":58},[55,477,478,480,483,485,487,489,491,493,495,497,500],{"class":57,"style":58},[55,479,89],{"style":88},[55,481,482],{"style":65},"({ ",[55,484,38],{"style":65},[55,486,102],{"style":61},[55,488,105],{"style":65},[55,490,378],{"style":61},[55,492,258],{"style":65},[55,494,102],{"style":61},[55,496,66],{"style":65},[55,498,499],{"style":69},"nodes ",[55,501,502],{"style":65},"} })",[11,504,505,506,509,510,378,512,515,516,519,520,378,522,515,524,527],{},"Use a runtime that provides ",[24,507,508],{},"Temporal",", or add its polyfill through a generated import or banner. Match the OpenAPI format: ",[24,511,415],{},[24,513,514],{},"date",", and ",[24,517,518],{},"date-time"," use ",[24,521,415],{},[24,523,514],{},[24,525,526],{},"datetime"," handlers.",[11,529,530,531,534],{},"The generator emits separate response and input schemas, including through ",[24,532,533],{},"$ref",":",[45,536,539],{"language":47,"filename":537,"code":538,"class":50},"src\u002Fgen\u002Fzod\u002FslotSchema.ts","export const slotSchema = z.object({\n  startsAt: z.iso.time().transform((value) => Temporal.PlainTime.from(value)),\n})\n\nexport const slotInputSchema = z.object({\n  startsAt: z.instanceof(Temporal.PlainTime).transform((value) => value.toString()),\n})",[24,540,541,81,563,81,624,81,628,81,630,81,649,81,699],{"class":53},[55,542,543,546,548,551,553,556,558,561],{"class":57,"style":58},[55,544,545],{"style":61},"export ",[55,547,397],{"style":61},[55,549,550],{"style":69},"slotSchema ",[55,552,406],{"style":61},[55,554,555],{"style":69},"z",[55,557,43],{"style":61},[55,559,560],{"style":88},"object",[55,562,92],{"style":65},[55,564,565,567,570,572,574,576,579,581,583,586,588,591,594,597,600,603,605,607,610,612,615,617,619,622],{"class":57,"style":58},[55,566,97],{"style":65},[55,568,569],{"style":65},"startsAt",[55,571,102],{"style":61},[55,573,555],{"style":69},[55,575,43],{"style":61},[55,577,578],{"style":65},"iso",[55,580,43],{"style":61},[55,582,415],{"style":88},[55,584,585],{"style":65},"()",[55,587,43],{"style":61},[55,589,590],{"style":88},"transform",[55,592,593],{"style":65},"((",[55,595,596],{"style":69},"value",[55,598,599],{"style":65},") ",[55,601,602],{"style":61},"=> ",[55,604,508],{"style":88},[55,606,43],{"style":61},[55,608,609],{"style":65},"PlainTime",[55,611,43],{"style":61},[55,613,614],{"style":88},"from",[55,616,143],{"style":65},[55,618,596],{"style":69},[55,620,621],{"style":65},"))",[55,623,108],{"style":61},[55,625,626],{"class":57,"style":58},[55,627,195],{"style":65},[55,629],{"class":57,"style":58},[55,631,632,634,636,639,641,643,645,647],{"class":57,"style":58},[55,633,545],{"style":61},[55,635,397],{"style":61},[55,637,638],{"style":69},"slotInputSchema ",[55,640,406],{"style":61},[55,642,555],{"style":69},[55,644,43],{"style":61},[55,646,560],{"style":88},[55,648,92],{"style":65},[55,650,651,653,655,657,659,661,664,666,668,670,672,675,677,679,681,683,685,687,689,691,694,697],{"class":57,"style":58},[55,652,97],{"style":65},[55,654,569],{"style":65},[55,656,102],{"style":61},[55,658,555],{"style":69},[55,660,43],{"style":61},[55,662,663],{"style":88},"instanceof",[55,665,143],{"style":65},[55,667,508],{"style":88},[55,669,43],{"style":61},[55,671,609],{"style":65},[55,673,674],{"style":65},")",[55,676,43],{"style":61},[55,678,590],{"style":88},[55,680,593],{"style":65},[55,682,596],{"style":69},[55,684,599],{"style":65},[55,686,602],{"style":61},[55,688,596],{"style":69},[55,690,43],{"style":61},[55,692,693],{"style":88},"toString",[55,695,696],{"style":65},"())",[55,698,108],{"style":61},[55,700,701],{"class":57,"style":58},[55,702,195],{"style":65},[704,705,707,708,711,712,715,716,718],"blockquote",{"as":706},"important","Use ",[24,709,710],{},"inferred: true"," without ",[24,713,714],{},"pluginTs"," so the client types follow these conversions. Types from ",[24,717,714],{}," describe the wire format.",[11,720,721,722,725,726,729,730,43],{},"For built-in date conversion, set ",[24,723,724],{},"dateType: 'date'"," on the adapter. Generated response schemas convert ISO datetimes to ",[24,727,728],{},"Date",". Request schemas convert them back with ",[24,731,732],{},"toISOString()",[29,734,736],{"id":735},"import-a-custom-codec","Import a custom codec",[11,738,739,740,743,744,747,748,750],{},"Override a printer node and register the package import with ",[24,741,742],{},"this.import",". For example, use your package's ",[24,745,746],{},"myCodec.uint64()"," for ",[24,749,220],{}," fields:",[45,752,754],{"language":47,"filename":48,"code":753,"class":50},"import { ast } from 'kubb\u002Fkit'\nimport { pluginZod } from '@kubb\u002Fplugin-zod'\n\npluginZod({\n  printer: {\n    nodes: {\n      bigint() {\n        this.import(ast.factory.createImport({\n          name: ['myCodec'],\n          path: 'my-codec\u002Fzod',\n        }))\n        return 'myCodec.uint64()'\n      },\n    },\n  },\n})",[24,755,756,81,772,81,786,81,788,81,794,81,804,81,814,81,822,81,850,81,870,81,884,81,891,81,900,81,908,81,916,81,924],{"class":53},[55,757,758,760,762,765,767,769],{"class":57,"style":58},[55,759,62],{"style":61},[55,761,66],{"style":65},[55,763,764],{"style":69},"ast ",[55,766,73],{"style":65},[55,768,76],{"style":61},[55,770,771],{"style":79},"'kubb\u002Fkit'",[55,773,774,776,778,780,782,784],{"class":57,"style":58},[55,775,62],{"style":61},[55,777,66],{"style":65},[55,779,70],{"style":69},[55,781,73],{"style":65},[55,783,76],{"style":61},[55,785,80],{"style":79},[55,787],{"class":57,"style":58},[55,789,790,792],{"class":57,"style":58},[55,791,89],{"style":88},[55,793,92],{"style":65},[55,795,796,798,800,802],{"class":57,"style":58},[55,797,97],{"style":65},[55,799,258],{"style":65},[55,801,102],{"style":61},[55,803,120],{"style":65},[55,805,806,808,810,812],{"class":57,"style":58},[55,807,125],{"style":65},[55,809,269],{"style":65},[55,811,102],{"style":61},[55,813,120],{"style":65},[55,815,816,818,820],{"class":57,"style":58},[55,817,137],{"style":65},[55,819,216],{"style":88},[55,821,282],{"style":65},[55,823,824,826,828,830,833,835,838,840,843,845,848],{"class":57,"style":58},[55,825,154],{"style":65},[55,827,426],{"style":69},[55,829,43],{"style":61},[55,831,832],{"style":88},"import",[55,834,143],{"style":65},[55,836,837],{"style":69},"ast",[55,839,43],{"style":61},[55,841,842],{"style":65},"factory",[55,844,43],{"style":61},[55,846,847],{"style":88},"createImport",[55,849,92],{"style":65},[55,851,852,855,857,859,862,865,868],{"class":57,"style":58},[55,853,854],{"style":65},"          ",[55,856,146],{"style":65},[55,858,102],{"style":61},[55,860,861],{"style":65},"[",[55,863,864],{"style":79},"'myCodec'",[55,866,867],{"style":65},"]",[55,869,108],{"style":61},[55,871,872,874,877,879,882],{"class":57,"style":58},[55,873,854],{"style":61},[55,875,876],{"style":65},"path",[55,878,102],{"style":61},[55,880,881],{"style":79},"'my-codec\u002Fzod'",[55,883,108],{"style":61},[55,885,886,888],{"class":57,"style":58},[55,887,154],{"style":61},[55,889,890],{"style":65},"}))",[55,892,893,895,897],{"class":57,"style":58},[55,894,154],{"style":65},[55,896,157],{"style":61},[55,898,899],{"style":79},"'myCodec.uint64()'",[55,901,902,904,906],{"class":57,"style":58},[55,903,137],{"style":79},[55,905,172],{"style":65},[55,907,108],{"style":61},[55,909,910,912,914],{"class":57,"style":58},[55,911,125],{"style":61},[55,913,172],{"style":65},[55,915,108],{"style":61},[55,917,918,920,922],{"class":57,"style":58},[55,919,97],{"style":61},[55,921,172],{"style":65},[55,923,108],{"style":61},[55,925,926],{"class":57,"style":58},[55,927,195],{"style":65},[11,929,930,931,934,935,938,939,942,943,945],{},"Generated files import ",[24,932,933],{},"myCodec"," from ",[24,936,937],{},"my-codec\u002Fzod",". Leave ",[24,940,941],{},"root"," unset on this import to preserve the package specifier. Setting ",[24,944,941],{}," rewrites it as a relative file path.",[29,947,949],{"id":948},"format-and-type-mappings","Format and type mappings",[11,951,952,955],{},[24,953,954],{},"@kubb\u002Fplugin-zod"," maps OpenAPI types and formats to Zod v4:",[957,958,959,979],"table",{},[960,961,962],"thead",{},[963,964,965,970,973,976],"tr",{},[966,967,969],"th",{"style":968},"text-align:left","OpenAPI type and format",[966,971,972],{"style":968},"Zod",[966,974,975],{"style":968},"Zod Mini",[966,977,978],{"style":968},"Notes",[980,981,982,1008,1029,1050,1071,1097,1118,1139,1160,1181,1202,1232,1253,1277,1306,1327,1349,1370,1391,1412,1433],"tbody",{},[963,983,984,989,993,997],{},[985,986,987],"td",{"style":968},[24,988,325],{},[985,990,991],{"style":968},[24,992,224],{},[985,994,995],{"style":968},[24,996,224],{},[985,998,999,1000,1003,1004,1007],{"style":968},"Coerces to ",[24,1001,1002],{},"z.coerce.number().int()"," when ",[24,1005,1006],{},"coercion.numbers"," is enabled",[963,1009,1010,1017,1022,1026],{},[985,1011,1012,378,1014],{"style":968},[24,1013,325],{},[24,1015,1016],{},"format: int32",[985,1018,1019],{"style":968},[24,1020,1021],{},"z.int32()",[985,1023,1024],{"style":968},[24,1025,1021],{},[985,1027,1028],{"style":968},"32-bit signed integer",[963,1030,1031,1038,1043,1047],{},[985,1032,1033,378,1035],{"style":968},[24,1034,325],{},[24,1036,1037],{},"format: uint32",[985,1039,1040],{"style":968},[24,1041,1042],{},"z.uint32()",[985,1044,1045],{"style":968},[24,1046,1042],{},[985,1048,1049],{"style":968},"32-bit unsigned integer",[963,1051,1052,1059,1064,1068],{},[985,1053,1054,378,1056],{"style":968},[24,1055,325],{},[24,1057,1058],{},"format: int64",[985,1060,1061],{"style":968},[24,1062,1063],{},"z.bigint()",[985,1065,1066],{"style":968},[24,1067,1063],{},[985,1069,1070],{"style":968},"64-bit integer",[963,1072,1073,1085,1090,1094],{},[985,1074,1075,378,1078,1081,1082],{"style":968},[24,1076,1077],{},"string",[24,1079,1080],{},"format: byte"," \u002F ",[24,1083,1084],{},"base64",[985,1086,1087],{"style":968},[24,1088,1089],{},"z.base64()",[985,1091,1092],{"style":968},[24,1093,1089],{},[985,1095,1096],{"style":968},"Base64 string validation",[963,1098,1099,1106,1111,1115],{},[985,1100,1101,378,1103],{"style":968},[24,1102,1077],{},[24,1104,1105],{},"format: base64url",[985,1107,1108],{"style":968},[24,1109,1110],{},"z.base64url()",[985,1112,1113],{"style":968},[24,1114,1110],{},[985,1116,1117],{"style":968},"URL-safe base64 string validation",[963,1119,1120,1127,1132,1136],{},[985,1121,1122,378,1124],{"style":968},[24,1123,1077],{},[24,1125,1126],{},"format: jwt",[985,1128,1129],{"style":968},[24,1130,1131],{},"z.jwt()",[985,1133,1134],{"style":968},[24,1135,1131],{},[985,1137,1138],{"style":968},"JSON Web Token format",[963,1140,1141,1148,1153,1157],{},[985,1142,1143,378,1145],{"style":968},[24,1144,1077],{},[24,1146,1147],{},"format: ulid",[985,1149,1150],{"style":968},[24,1151,1152],{},"z.ulid()",[985,1154,1155],{"style":968},[24,1156,1152],{},[985,1158,1159],{"style":968},"ULID format",[963,1161,1162,1169,1174,1178],{},[985,1163,1164,378,1166],{"style":968},[24,1165,1077],{},[24,1167,1168],{},"format: iban",[985,1170,1171],{"style":968},[24,1172,1173],{},"z.iban()",[985,1175,1176],{"style":968},[24,1177,1173],{},[985,1179,1180],{"style":968},"International Bank Account Number",[963,1182,1183,1190,1195,1199],{},[985,1184,1185,378,1187],{"style":968},[24,1186,1077],{},[24,1188,1189],{},"format: duration",[985,1191,1192],{"style":968},[24,1193,1194],{},"z.iso.duration()",[985,1196,1197],{"style":968},[24,1198,1194],{},[985,1200,1201],{"style":968},"ISO 8601 duration format",[963,1203,1204,1211,1220,1226],{},[985,1205,1206,378,1208],{"style":968},[24,1207,1077],{},[24,1209,1210],{},"format: uuid",[985,1212,1213,1216,1217,674],{"style":968},[24,1214,1215],{},"z.uuid()"," (or ",[24,1218,1219],{},"z.guid()",[985,1221,1222,1216,1224,674],{"style":968},[24,1223,1215],{},[24,1225,1219],{},[985,1227,1228,1229],{"style":968},"Configured via ",[24,1230,1231],{},"guidType",[963,1233,1234,1241,1246,1250],{},[985,1235,1236,378,1238],{"style":968},[24,1237,1077],{},[24,1239,1240],{},"format: email",[985,1242,1243],{"style":968},[24,1244,1245],{},"z.email()",[985,1247,1248],{"style":968},[24,1249,1245],{},[985,1251,1252],{"style":968},"Email format",[963,1254,1255,1265,1270,1274],{},[985,1256,1257,378,1259,1081,1262],{"style":968},[24,1258,1077],{},[24,1260,1261],{},"format: uri",[24,1263,1264],{},"url",[985,1266,1267],{"style":968},[24,1268,1269],{},"z.url()",[985,1271,1272],{"style":968},[24,1273,1269],{},[985,1275,1276],{"style":968},"URL format",[963,1278,1279,1289,1297,1303],{},[985,1280,1281,378,1283,1081,1286],{"style":968},[24,1282,1077],{},[24,1284,1285],{},"format: ipv4",[24,1287,1288],{},"ipv6",[985,1290,1291,1081,1294],{"style":968},[24,1292,1293],{},"z.ipv4()",[24,1295,1296],{},"z.ipv6()",[985,1298,1299,1081,1301],{"style":968},[24,1300,1293],{},[24,1302,1296],{},[985,1304,1305],{"style":968},"IP address format",[963,1307,1308,1315,1320,1324],{},[985,1309,1310,378,1312],{"style":968},[24,1311,1077],{},[24,1313,1314],{},"format: date",[985,1316,1317],{"style":968},[24,1318,1319],{},"z.iso.date()",[985,1321,1322],{"style":968},[24,1323,1319],{},[985,1325,1326],{"style":968},"ISO 8601 date",[963,1328,1329,1336,1341,1346],{},[985,1330,1331,378,1333],{"style":968},[24,1332,1077],{},[24,1334,1335],{},"format: date-time",[985,1337,1338],{"style":968},[24,1339,1340],{},"z.iso.datetime()",[985,1342,1343],{"style":968},[24,1344,1345],{},"z.string()",[985,1347,1348],{"style":968},"ISO 8601 date-time",[963,1350,1351,1358,1363,1367],{},[985,1352,1353,378,1355],{"style":968},[24,1354,1077],{},[24,1356,1357],{},"format: time",[985,1359,1360],{"style":968},[24,1361,1362],{},"z.iso.time()",[985,1364,1365],{"style":968},[24,1366,1362],{},[985,1368,1369],{"style":968},"ISO 8601 time",[963,1371,1372,1379,1384,1388],{},[985,1373,1374,378,1376],{"style":968},[24,1375,560],{},[24,1377,1378],{},"additionalProperties: \u003Cschema>",[985,1380,1381],{"style":968},[24,1382,1383],{},"z.record(z.string(), schema)",[985,1385,1386],{"style":968},[24,1387,1383],{},[985,1389,1390],{"style":968},"Dictionary with no fixed properties",[963,1392,1393,1400,1405,1409],{},[985,1394,1395,378,1397],{"style":968},[24,1396,560],{},[24,1398,1399],{},"additionalProperties: true",[985,1401,1402],{"style":968},[24,1403,1404],{},"z.looseObject(shape)",[985,1406,1407],{"style":968},[24,1408,1404],{},[985,1410,1411],{"style":968},"Open\u002Fpassthrough object allowing extra keys",[963,1413,1414,1421,1426,1430],{},[985,1415,1416,378,1418],{"style":968},[24,1417,560],{},[24,1419,1420],{},"propertyNames: \u003Cschema>",[985,1422,1423],{"style":968},[24,1424,1425],{},"z.record(keySchema, schema)",[985,1427,1428],{"style":968},[24,1429,1425],{},[985,1431,1432],{"style":968},"Dynamic map with validated key schema (e.g. pattern, format)",[963,1434,1435,1442,1447,1451],{},[985,1436,1437,378,1439],{"style":968},[24,1438,560],{},[24,1440,1441],{},"propertyNames: \u003Cenum>",[985,1443,1444],{"style":968},[24,1445,1446],{},"z.partialRecord(enumSchema, schema)",[985,1448,1449],{"style":968},[24,1450,1446],{},[985,1452,1453],{"style":968},"Enum keys may be missing",[29,1455,1457],{"id":1456},"dictionaries-open-objects-and-key-schemas","Dictionaries, open objects, and key schemas",[11,1459,1460,1461,1464,1465,1468,1469,1472,1473,43],{},"OpenAPI 3.1 ",[24,1462,1463],{},"propertyNames"," validates dictionary keys. Open key schemas use ",[24,1466,1467],{},"z.record(keySchema, valueSchema)",", including regex, UUID, and length constraints. Closed keys, such as enums, literals, or unions of enums, use ",[24,1470,1471],{},"z.partialRecord"," so only present keys are validated. Keys may be missing, as in OpenAPI, and the inferred type is ",[24,1474,1475],{},"Partial\u003CRecord\u003CKeys, Value>>",[11,1477,1478,1481,1482,1485,1486,1489],{},[24,1479,1480],{},"patternProperties"," combines key regex patterns into an alternation and emits ",[24,1483,1484],{},"z.record(z.string().regex(...), valueSchema)",". Zod Mini uses ",[24,1487,1488],{},"z.string().check(z.regex(...))"," for the key schema.",[11,1491,1492,1493,1496,1497,1500,1501,1503,1504,1506],{},"An ",[24,1494,1495],{},"additionalProperties"," schema without fixed properties produces a dictionary. With fixed properties, it produces ",[24,1498,1499],{},".catchall(valueSchema)"," to preserve that declared shape. ",[24,1502,1399],{}," emits ",[24,1505,1404],{}," to allow undeclared keys.",{"title":1508,"searchDepth":1509,"depth":1509,"links":1510},"",5,[1511,1513,1514,1515,1516,1517,1518],{"id":31,"depth":1512,"text":32},2,{"id":209,"depth":1512,"text":210},{"id":339,"depth":1512,"text":340},{"id":355,"depth":1512,"text":356},{"id":735,"depth":1512,"text":736},{"id":948,"depth":1512,"text":949},{"id":1456,"depth":1512,"text":1457},"\u002Fextensions\u002Fkubb-labs\u002Fplugin-zod\u002Fguides\u002Fcustomization",1793639048462]