Skip to content

Commit

Permalink
fix: format in array
Browse files Browse the repository at this point in the history
  • Loading branch information
QuentinJanuel authored and astahmer committed Jul 31, 2024
1 parent 6828abd commit 74efcf9
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
10 changes: 9 additions & 1 deletion lib/src/openApiToZod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,15 @@ export function getZodSchema({ schema: $schema, ctx, meta: inheritedMeta, option
if (schemaType === "array") {
if (schema.items) {
return code.assign(
`z.array(${getZodSchema({ schema: schema.items, ctx, meta, options }).toString()})${readonly}`
`z.array(${
getZodSchema({ schema: schema.items, ctx, meta, options }).toString()
}${
getZodChain({
schema: schema.items as SchemaObject,
meta: { ...meta, isRequired: true },
options,
})
})${readonly}`
);
}

Expand Down
3 changes: 2 additions & 1 deletion lib/tests/validations.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ test("validations", () => {
array: { type: "array", items: { type: "string" } },
arrayWithMin: { type: "array", items: { type: "string" }, minItems: 3 },
arrayWithMax: { type: "array", items: { type: "string" }, maxItems: 3 },
arrayWithFormat: { type: "array", items: { type: "string", format: "uuid" } },
// TODO ?
// arrayWithUnique: { type: "array", items: { type: "string" }, uniqueItems: true },
//
Expand All @@ -61,6 +62,6 @@ test("validations", () => {
},
})
).toMatchInlineSnapshot(
'"z.object({ str: z.string(), strWithLength: z.string().min(3).max(3), strWithMin: z.string().min(3), strWithMax: z.string().max(3), strWithPattern: z.string().regex(/^[a-z]+$/), strWithPatternWithSlash: z.string().regex(/abc\\/def\\/ghi/), email: z.string().email(), hostname: z.string().url(), url: z.string().url(), uuid: z.string().uuid(), number: z.number(), int: z.number().int(), intWithMin: z.number().int().gte(3), intWithMax: z.number().int().lte(3), intWithMinAndMax: z.number().int().gte(3).lte(3), intWithExclusiveMinTrue: z.number().int().gt(3), intWithExclusiveMinFalse: z.number().int().gte(3), intWithExclusiveMin: z.number().int().gt(3), intWithExclusiveMaxTrue: z.number().int().lt(3), intWithExclusiveMaxFalse: z.number().int().lte(3), intWithExclusiveMax: z.number().int().lt(3), intWithMultipleOf: z.number().int().multipleOf(3), bool: z.boolean(), array: z.array(z.string()), arrayWithMin: z.array(z.string()).min(3), arrayWithMax: z.array(z.string()).max(3), object: z.object({ str: z.string() }).passthrough(), objectWithRequired: z.object({ str: z.string() }).passthrough(), oneOf: z.union([z.string(), z.number()]), anyOf: z.union([z.string(), z.number()]), allOf: z.string().and(z.number()), nested: z.record(z.number()), nestedNullable: z.record(z.number().nullable()) }).passthrough()"'
'"z.object({ str: z.string(), strWithLength: z.string().min(3).max(3), strWithMin: z.string().min(3), strWithMax: z.string().max(3), strWithPattern: z.string().regex(/^[a-z]+$/), strWithPatternWithSlash: z.string().regex(/abc\\/def\\/ghi/), email: z.string().email(), hostname: z.string().url(), url: z.string().url(), uuid: z.string().uuid(), number: z.number(), int: z.number().int(), intWithMin: z.number().int().gte(3), intWithMax: z.number().int().lte(3), intWithMinAndMax: z.number().int().gte(3).lte(3), intWithExclusiveMinTrue: z.number().int().gt(3), intWithExclusiveMinFalse: z.number().int().gte(3), intWithExclusiveMin: z.number().int().gt(3), intWithExclusiveMaxTrue: z.number().int().lt(3), intWithExclusiveMaxFalse: z.number().int().lte(3), intWithExclusiveMax: z.number().int().lt(3), intWithMultipleOf: z.number().int().multipleOf(3), bool: z.boolean(), array: z.array(z.string()), arrayWithMin: z.array(z.string()).min(3), arrayWithMax: z.array(z.string()).max(3), arrayWithFormat: z.array(z.string().uuid()), object: z.object({ str: z.string() }).passthrough(), objectWithRequired: z.object({ str: z.string() }).passthrough(), oneOf: z.union([z.string(), z.number()]), anyOf: z.union([z.string(), z.number()]), allOf: z.string().and(z.number()), nested: z.record(z.number()), nestedNullable: z.record(z.number().nullable()) }).passthrough()"'
);
});

0 comments on commit 74efcf9

Please sign in to comment.