[{"data":1,"prerenderedAt":1034},["ShallowReactive",2],{"content-\u002Fdocs\u002Fschemas\u002Farrays-and-tuples":3},{"id":4,"title":5,"body":6,"description":1010,"extension":1011,"meta":1012,"metaRows":1013,"navigation":188,"path":1014,"seo":1015,"source":1013,"stem":1032,"__hash__":1033},"docs\u002Fdocs\u002Fschemas\u002Farrays-and-tuples.md","Arrays & tuples",{"type":7,"value":8,"toc":999},"minimark",[9,13,20,23,42,47,55,206,209,274,281,450,463,467,470,560,568,575,666,669,745,756,760,781,792,796,799,827,850,854,857,962,970,974,995],[10,11,5],"h1",{"id":12},"arrays-tuples",[14,15,16],"blockquote",{},[17,18,19],"p",{},"Two container shapes, one binding pattern. Numeric segments in the path point to elements, and the field-array helpers cover every mutation a list-shaped input needs.",[21,22],"docs-meta-table",{},[17,24,25,26,30,31,34,35,34,38,41],{},"The demo binds an array of objects (todo items) and a fixed-length tuple (a date range with exactly two endpoints). Both flow through the same ",[27,28,29],"code",{},"register('path.index.subpath')"," shape; the schema's array-ness is what unlocks ",[27,32,33],{},"append"," \u002F ",[27,36,37],{},"remove",[27,39,40],{},"swap",".",[43,44],"docs-demo",{"label":45,"slug":46},"Arrays & Tuples Demo","arrays-and-tuples",[48,49,51,54],"h2",{"id":50},"zarrayelem-variable-length",[27,52,53],{},"z.array(elem)",": variable length",[56,57,62],"pre",{"className":58,"code":59,"language":60,"meta":61,"style":61},"language-ts shiki shiki-themes github-light github-dark","const schema = z.object({\n  todos: z.array(\n    z.object({\n      title: z.string().min(1, 'Title is required'),\n      done: z.boolean().default(false),\n    })\n  ),\n})\n\nconst form = useForm({ schema, defaultValues: { todos: [] } })\n","ts","",[27,63,64,91,103,113,144,165,171,177,183,190],{"__ignoreMap":61},[65,66,69,73,77,80,84,88],"span",{"class":67,"line":68},"line",1,[65,70,72],{"class":71},"szBVR","const",[65,74,76],{"class":75},"sj4cs"," schema",[65,78,79],{"class":71}," =",[65,81,83],{"class":82},"sVt8B"," z.",[65,85,87],{"class":86},"sScJk","object",[65,89,90],{"class":82},"({\n",[65,92,94,97,100],{"class":67,"line":93},2,[65,95,96],{"class":82},"  todos: z.",[65,98,99],{"class":86},"array",[65,101,102],{"class":82},"(\n",[65,104,106,109,111],{"class":67,"line":105},3,[65,107,108],{"class":82},"    z.",[65,110,87],{"class":86},[65,112,90],{"class":82},[65,114,116,119,122,125,128,131,134,137,141],{"class":67,"line":115},4,[65,117,118],{"class":82},"      title: z.",[65,120,121],{"class":86},"string",[65,123,124],{"class":82},"().",[65,126,127],{"class":86},"min",[65,129,130],{"class":82},"(",[65,132,133],{"class":75},"1",[65,135,136],{"class":82},", ",[65,138,140],{"class":139},"sZZnC","'Title is required'",[65,142,143],{"class":82},"),\n",[65,145,147,150,153,155,158,160,163],{"class":67,"line":146},5,[65,148,149],{"class":82},"      done: z.",[65,151,152],{"class":86},"boolean",[65,154,124],{"class":82},[65,156,157],{"class":86},"default",[65,159,130],{"class":82},[65,161,162],{"class":75},"false",[65,164,143],{"class":82},[65,166,168],{"class":67,"line":167},6,[65,169,170],{"class":82},"    })\n",[65,172,174],{"class":67,"line":173},7,[65,175,176],{"class":82},"  ),\n",[65,178,180],{"class":67,"line":179},8,[65,181,182],{"class":82},"})\n",[65,184,186],{"class":67,"line":185},9,[65,187,189],{"emptyLinePlaceholder":188},true,"\n",[65,191,193,195,198,200,203],{"class":67,"line":192},10,[65,194,72],{"class":71},[65,196,197],{"class":75}," form",[65,199,79],{"class":71},[65,201,202],{"class":86}," useForm",[65,204,205],{"class":82},"({ schema, defaultValues: { todos: [] } })\n",[17,207,208],{},"Each element gets a numeric segment in its path:",[56,210,212],{"className":58,"code":211,"language":60,"meta":61,"style":61},"form.values.todos[0].title \u002F\u002F string\nform.values.todos[2].done \u002F\u002F boolean\nform.register('todos.3.title') \u002F\u002F path autocomplete works\nform.errors.todos[1]?.title \u002F\u002F ValidationError[] | undefined\n",[27,213,214,229,242,261],{"__ignoreMap":61},[65,215,216,219,222,225],{"class":67,"line":68},[65,217,218],{"class":82},"form.values.todos[",[65,220,221],{"class":75},"0",[65,223,224],{"class":82},"].title ",[65,226,228],{"class":227},"sJ8bj","\u002F\u002F string\n",[65,230,231,233,236,239],{"class":67,"line":93},[65,232,218],{"class":82},[65,234,235],{"class":75},"2",[65,237,238],{"class":82},"].done ",[65,240,241],{"class":227},"\u002F\u002F boolean\n",[65,243,244,247,250,252,255,258],{"class":67,"line":105},[65,245,246],{"class":82},"form.",[65,248,249],{"class":86},"register",[65,251,130],{"class":82},[65,253,254],{"class":139},"'todos.3.title'",[65,256,257],{"class":82},") ",[65,259,260],{"class":227},"\u002F\u002F path autocomplete works\n",[65,262,263,266,268,271],{"class":67,"line":115},[65,264,265],{"class":82},"form.errors.todos[",[65,267,133],{"class":75},[65,269,270],{"class":82},"]?.title ",[65,272,273],{"class":227},"\u002F\u002F ValidationError[] | undefined\n",[17,275,276,277,280],{},"Templates iterate with ",[27,278,279],{},"v-for",":",[56,282,286],{"className":283,"code":284,"language":285,"meta":61,"style":61},"language-vue shiki shiki-themes github-light github-dark","\u003Ctemplate>\n  \u003Cdiv v-for=\"(_, i) in form.values.todos\" :key=\"i\" class=\"row\">\n    \u003Cinput v-register=\"form.register(`todos.${i}.title`)\" \u002F>\n    \u003Cinput v-register=\"form.register(`todos.${i}.done`)\" type=\"checkbox\" \u002F>\n    \u003Cbutton type=\"button\" @click=\"form.remove('todos', i)\">−\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cbutton type=\"button\" @click=\"form.append('todos', { title: '', done: false })\">Add todo\u003C\u002Fbutton>\n\u003C\u002Ftemplate>\n","vue",[27,287,288,300,335,354,377,406,415,441],{"__ignoreMap":61},[65,289,290,293,297],{"class":67,"line":68},[65,291,292],{"class":82},"\u003C",[65,294,296],{"class":295},"s9eBZ","template",[65,298,299],{"class":82},">\n",[65,301,302,305,308,311,314,317,320,322,325,328,330,333],{"class":67,"line":93},[65,303,304],{"class":82},"  \u003C",[65,306,307],{"class":295},"div",[65,309,310],{"class":86}," v-for",[65,312,313],{"class":82},"=",[65,315,316],{"class":139},"\"(_, i) in form.values.todos\"",[65,318,319],{"class":86}," :key",[65,321,313],{"class":82},[65,323,324],{"class":139},"\"i\"",[65,326,327],{"class":86}," class",[65,329,313],{"class":82},[65,331,332],{"class":139},"\"row\"",[65,334,299],{"class":82},[65,336,337,340,343,346,348,351],{"class":67,"line":105},[65,338,339],{"class":82},"    \u003C",[65,341,342],{"class":295},"input",[65,344,345],{"class":86}," v-register",[65,347,313],{"class":82},[65,349,350],{"class":139},"\"form.register(`todos.${i}.title`)\"",[65,352,353],{"class":82}," \u002F>\n",[65,355,356,358,360,362,364,367,370,372,375],{"class":67,"line":115},[65,357,339],{"class":82},[65,359,342],{"class":295},[65,361,345],{"class":86},[65,363,313],{"class":82},[65,365,366],{"class":139},"\"form.register(`todos.${i}.done`)\"",[65,368,369],{"class":86}," type",[65,371,313],{"class":82},[65,373,374],{"class":139},"\"checkbox\"",[65,376,353],{"class":82},[65,378,379,381,384,386,388,391,394,396,399,402,404],{"class":67,"line":146},[65,380,339],{"class":82},[65,382,383],{"class":295},"button",[65,385,369],{"class":86},[65,387,313],{"class":82},[65,389,390],{"class":139},"\"button\"",[65,392,393],{"class":86}," @click",[65,395,313],{"class":82},[65,397,398],{"class":139},"\"form.remove('todos', i)\"",[65,400,401],{"class":82},">−\u003C\u002F",[65,403,383],{"class":295},[65,405,299],{"class":82},[65,407,408,411,413],{"class":67,"line":167},[65,409,410],{"class":82},"  \u003C\u002F",[65,412,307],{"class":295},[65,414,299],{"class":82},[65,416,417,419,421,423,425,427,429,431,434,437,439],{"class":67,"line":173},[65,418,304],{"class":82},[65,420,383],{"class":295},[65,422,369],{"class":86},[65,424,313],{"class":82},[65,426,390],{"class":139},[65,428,393],{"class":86},[65,430,313],{"class":82},[65,432,433],{"class":139},"\"form.append('todos', { title: '', done: false })\"",[65,435,436],{"class":82},">Add todo\u003C\u002F",[65,438,383],{"class":295},[65,440,299],{"class":82},[65,442,443,446,448],{"class":67,"line":179},[65,444,445],{"class":82},"\u003C\u002F",[65,447,296],{"class":295},[65,449,299],{"class":82},[17,451,452,453,456,457,462],{},"The ",[27,454,455],{},"i"," keyed loop pattern is fine for static lists. For lists where items can reorder, use a stable per-row identifier instead; see ",[458,459,461],"a",{"href":460},"\u002Fdocs\u002Fserver-and-ssr\u002Fperformance","Performance"," for the keying discussion.",[48,464,466],{"id":465},"field-array-helpers","Field-array helpers",[17,468,469],{},"Seven helpers cover the common mutations:",[471,472,473,486],"table",{},[474,475,476],"thead",{},[477,478,479,483],"tr",{},[480,481,482],"th",{},"Method",[480,484,485],{},"What it does",[487,488,489,500,510,520,530,540,550],"tbody",{},[477,490,491,497],{},[492,493,494],"td",{},[27,495,496],{},"form.append('path', element)",[492,498,499],{},"Push to the end.",[477,501,502,507],{},[492,503,504],{},[27,505,506],{},"form.prepend('path', element)",[492,508,509],{},"Unshift to the front.",[477,511,512,517],{},[492,513,514],{},[27,515,516],{},"form.insert('path', index, element)",[492,518,519],{},"Insert at a specific index.",[477,521,522,527],{},[492,523,524],{},[27,525,526],{},"form.remove('path', index)",[492,528,529],{},"Remove at an index.",[477,531,532,537],{},[492,533,534],{},[27,535,536],{},"form.swap('path', i, j)",[492,538,539],{},"Swap two positions.",[477,541,542,547],{},[492,543,544],{},[27,545,546],{},"form.move('path', from, to)",[492,548,549],{},"Move an element to a new index.",[477,551,552,557],{},[492,553,554],{},[27,555,556],{},"form.replace('path', elements[])",[492,558,559],{},"Replace the whole array.",[17,561,562,563,567],{},"All seven preserve sibling state where applicable (touched, focused, errors), reorder field-state to follow the items, and record one undo position per call; see ",[458,564,566],{"href":565},"\u002Fdocs\u002Fwriting-and-mutating\u002Ffield-arrays","Field-array mutations"," for the full reference.",[48,569,571,574],{"id":570},"ztuplea-b-c-fixed-length",[27,572,573],{},"z.tuple([a, b, c])",": fixed length",[56,576,578],{"className":58,"code":577,"language":60,"meta":61,"style":61},"const schema = z.object({\n  dateRange: z.tuple([z.date(), z.date()]),\n})\n\nconst form = useForm({\n  schema,\n  defaultValues: { dateRange: [new Date(), new Date()] },\n})\n",[27,579,580,594,616,620,624,636,641,662],{"__ignoreMap":61},[65,581,582,584,586,588,590,592],{"class":67,"line":68},[65,583,72],{"class":71},[65,585,76],{"class":75},[65,587,79],{"class":71},[65,589,83],{"class":82},[65,591,87],{"class":86},[65,593,90],{"class":82},[65,595,596,599,602,605,608,611,613],{"class":67,"line":93},[65,597,598],{"class":82},"  dateRange: z.",[65,600,601],{"class":86},"tuple",[65,603,604],{"class":82},"([z.",[65,606,607],{"class":86},"date",[65,609,610],{"class":82},"(), z.",[65,612,607],{"class":86},[65,614,615],{"class":82},"()]),\n",[65,617,618],{"class":67,"line":105},[65,619,182],{"class":82},[65,621,622],{"class":67,"line":115},[65,623,189],{"emptyLinePlaceholder":188},[65,625,626,628,630,632,634],{"class":67,"line":146},[65,627,72],{"class":71},[65,629,197],{"class":75},[65,631,79],{"class":71},[65,633,202],{"class":86},[65,635,90],{"class":82},[65,637,638],{"class":67,"line":167},[65,639,640],{"class":82},"  schema,\n",[65,642,643,646,649,652,655,657,659],{"class":67,"line":173},[65,644,645],{"class":82},"  defaultValues: { dateRange: [",[65,647,648],{"class":71},"new",[65,650,651],{"class":86}," Date",[65,653,654],{"class":82},"(), ",[65,656,648],{"class":71},[65,658,651],{"class":86},[65,660,661],{"class":82},"()] },\n",[65,663,664],{"class":67,"line":179},[65,665,182],{"class":82},[17,667,668],{},"Each position is its own slot with its own type:",[56,670,672],{"className":58,"code":671,"language":60,"meta":61,"style":61},"form.values.dateRange[0] \u002F\u002F Date\nform.values.dateRange[1] \u002F\u002F Date\nform.register('dateRange.0') \u002F\u002F path autocomplete narrows to position 0\nform.register('dateRange.1') \u002F\u002F position 1\nform.register('dateRange.2') \u002F\u002F type error (tuple has only 2 positions)\n",[27,673,674,687,697,713,729],{"__ignoreMap":61},[65,675,676,679,681,684],{"class":67,"line":68},[65,677,678],{"class":82},"form.values.dateRange[",[65,680,221],{"class":75},[65,682,683],{"class":82},"] ",[65,685,686],{"class":227},"\u002F\u002F Date\n",[65,688,689,691,693,695],{"class":67,"line":93},[65,690,678],{"class":82},[65,692,133],{"class":75},[65,694,683],{"class":82},[65,696,686],{"class":227},[65,698,699,701,703,705,708,710],{"class":67,"line":105},[65,700,246],{"class":82},[65,702,249],{"class":86},[65,704,130],{"class":82},[65,706,707],{"class":139},"'dateRange.0'",[65,709,257],{"class":82},[65,711,712],{"class":227},"\u002F\u002F path autocomplete narrows to position 0\n",[65,714,715,717,719,721,724,726],{"class":67,"line":115},[65,716,246],{"class":82},[65,718,249],{"class":86},[65,720,130],{"class":82},[65,722,723],{"class":139},"'dateRange.1'",[65,725,257],{"class":82},[65,727,728],{"class":227},"\u002F\u002F position 1\n",[65,730,731,733,735,737,740,742],{"class":67,"line":146},[65,732,246],{"class":82},[65,734,249],{"class":86},[65,736,130],{"class":82},[65,738,739],{"class":139},"'dateRange.2'",[65,741,257],{"class":82},[65,743,744],{"class":227},"\u002F\u002F type error (tuple has only 2 positions)\n",[17,746,747,748,751,752,755],{},"Tuples don't expose the field-array helpers; ",[27,749,750],{},"form.append('dateRange', new Date())"," is a type error because the tuple has a fixed shape. For mixed-shape sequences (a ",[27,753,754],{},"[string, number, boolean]","), tuples are how you say \"exactly this layout, in this order.\"",[48,757,759],{"id":758},"when-to-pick-which","When to pick which",[761,762,763,771],"ul",{},[764,765,766,770],"li",{},[767,768,769],"strong",{},"Array",": when the list grows and shrinks at runtime, and every element has the same shape. Todos, tags, line items, attachments.",[764,772,773,776,777,780],{},[767,774,775],{},"Tuple",": when the sequence has a fixed length and the positions may differ in type or meaning. Date ranges, coordinate pairs, RGB color triples, ",[65,778,779],{},"latitude, longitude"," tuples.",[17,782,783,784,787,788,791],{},"If you find yourself reaching for ",[27,785,786],{},"z.array(z.union([a, b]))"," to mean \"exactly one of A followed by exactly one of B,\" reach for a tuple instead; ",[27,789,790],{},"z.tuple([a, b])"," says the same thing, more precisely.",[48,793,795],{"id":794},"errors-land-where-the-schema-expects","Errors land where the schema expects",[17,797,798],{},"Errors per element:",[56,800,802],{"className":58,"code":801,"language":60,"meta":61,"style":61},"form.errors.todos[0]?.title \u002F\u002F ValidationError[] for todos[0].title\nform.errors.dateRange[1] \u002F\u002F ValidationError[] for dateRange[1]\n",[27,803,804,815],{"__ignoreMap":61},[65,805,806,808,810,812],{"class":67,"line":68},[65,807,265],{"class":82},[65,809,221],{"class":75},[65,811,270],{"class":82},[65,813,814],{"class":227},"\u002F\u002F ValidationError[] for todos[0].title\n",[65,816,817,820,822,824],{"class":67,"line":93},[65,818,819],{"class":82},"form.errors.dateRange[",[65,821,133],{"class":75},[65,823,683],{"class":82},[65,825,826],{"class":227},"\u002F\u002F ValidationError[] for dateRange[1]\n",[17,828,829,830,833,834,837,838,841,842,845,846,849],{},"The aggregate ",[27,831,832],{},"form.meta.errors"," flattens every leaf's errors into a single list. Cross-element refinements (a ",[27,835,836],{},".refine"," on the whole array) land on the array path itself rather than a specific element. ",[27,839,840],{},"form.errors.todos[0]"," (note the ",[27,843,844],{},"[0]"," index after the ",[27,847,848],{},".errors.todos"," access) reads the first error attached to the array, which is the cross-element one.",[48,851,853],{"id":852},"async-element-level-refinements","Async element-level refinements",[17,855,856],{},"Element-level async refinements work the way you'd expect. Each element validates independently:",[56,858,860],{"className":58,"code":859,"language":60,"meta":61,"style":61},"const schema = z.object({\n  skus: z.array(\n    z.string().refine(async (sku) => await api.checkSku(sku), {\n      message: 'Unknown SKU',\n    })\n  ),\n})\n\n\u002F\u002F form.errors.skus[2]: pending until the async refinement settles\n\u002F\u002F for that element\n",[27,861,862,876,885,925,936,940,944,948,952,957],{"__ignoreMap":61},[65,863,864,866,868,870,872,874],{"class":67,"line":68},[65,865,72],{"class":71},[65,867,76],{"class":75},[65,869,79],{"class":71},[65,871,83],{"class":82},[65,873,87],{"class":86},[65,875,90],{"class":82},[65,877,878,881,883],{"class":67,"line":93},[65,879,880],{"class":82},"  skus: z.",[65,882,99],{"class":86},[65,884,102],{"class":82},[65,886,887,889,891,893,896,898,901,904,908,910,913,916,919,922],{"class":67,"line":105},[65,888,108],{"class":82},[65,890,121],{"class":86},[65,892,124],{"class":82},[65,894,895],{"class":86},"refine",[65,897,130],{"class":82},[65,899,900],{"class":71},"async",[65,902,903],{"class":82}," (",[65,905,907],{"class":906},"s4XuR","sku",[65,909,257],{"class":82},[65,911,912],{"class":71},"=>",[65,914,915],{"class":71}," await",[65,917,918],{"class":82}," api.",[65,920,921],{"class":86},"checkSku",[65,923,924],{"class":82},"(sku), {\n",[65,926,927,930,933],{"class":67,"line":115},[65,928,929],{"class":82},"      message: ",[65,931,932],{"class":139},"'Unknown SKU'",[65,934,935],{"class":82},",\n",[65,937,938],{"class":67,"line":146},[65,939,170],{"class":82},[65,941,942],{"class":67,"line":167},[65,943,176],{"class":82},[65,945,946],{"class":67,"line":173},[65,947,182],{"class":82},[65,949,950],{"class":67,"line":179},[65,951,189],{"emptyLinePlaceholder":188},[65,953,954],{"class":67,"line":185},[65,955,956],{"class":227},"\u002F\u002F form.errors.skus[2]: pending until the async refinement settles\n",[65,958,959],{"class":67,"line":192},[65,960,961],{"class":227},"\u002F\u002F for that element\n",[17,963,964,965,969],{},"See ",[458,966,968],{"href":967},"\u002Fdocs\u002Fvalidation\u002Fasync-refinements","Async refinements"," for cancellation semantics and the \"pending\" state.",[48,971,973],{"id":972},"where-to-next","Where to next",[761,975,976,981,988],{},[764,977,978,980],{},[458,979,566],{"href":565},": the seven helpers in depth, with element keying patterns.",[764,982,983,987],{},[458,984,986],{"href":985},"\u002Fdocs\u002Fschemas\u002Frecords","Records & maps",": when the keys aren't numeric indices.",[764,989,990,994],{},[458,991,993],{"href":992},"\u002Fdocs\u002Fschemas\u002Fnested-objects","Nested objects",": fixed-shape composition vs. variable-length sequences.",[996,997,998],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":61,"searchDepth":93,"depth":93,"links":1000},[1001,1003,1004,1006,1007,1008,1009],{"id":50,"depth":93,"text":1002},"z.array(elem): variable length",{"id":465,"depth":93,"text":466},{"id":570,"depth":93,"text":1005},"z.tuple([a, b, c]): fixed length",{"id":758,"depth":93,"text":759},{"id":794,"depth":93,"text":795},{"id":852,"depth":93,"text":853},{"id":972,"depth":93,"text":973},"[object Object]","md",{},null,"\u002Fdocs\u002Fschemas\u002Farrays-and-tuples",{"title":5,"description":1016},{"z":1017,"metaRows":1021},{"array() is variable-length, z":1018},{"tuple() is fixed-length":1019},{" Both bind through numeric path segments":1020},"register('items.0.name'), errors.tags[2], fields.items[3].title.",[1022,1025,1027,1029],{"label":1023,"value":1024},"Category","Schema feature",{"label":1026,"value":53,"kind":27},"Variable length",{"label":1028,"value":573,"kind":27},"Fixed length",{"label":1030,"value":1031,"kind":27},"Path access","register('items.3.name')","docs\u002Fschemas\u002Farrays-and-tuples","lsSgAxXrgY8zGKje3uYDXwX4BKpEo-yEXYkHyawvSW4",1780949757821]