feat: add sizesSchema

This commit is contained in:
P. Reis 2024-11-01 23:07:51 -03:00
parent 03d93ff810
commit c6ff4a9d25
2 changed files with 14 additions and 1 deletions

View file

@ -1,6 +1,6 @@
import { assertEquals } from '@std/assert';
import { percentageSchema } from '@/schema.ts';
import { percentageSchema, sizesSchema } from '@/schema.ts';
Deno.test('Value is any percentage from 1 to 100', () => {
assertEquals(percentageSchema.safeParse('latvia' as unknown).success, false);
@ -20,3 +20,12 @@ Deno.test('Value is any percentage from 1 to 100', () => {
assertEquals(percentageSchema.safeParse('1e1').success, true);
});
Deno.test('Size or sizes has correct format', () => {
assertEquals(sizesSchema.safeParse('orphan' as unknown).success, false);
assertEquals(sizesSchema.safeParse('0000x 20x20' as unknown).success, false);
assertEquals(sizesSchema.safeParse('0000x10 20X20 1x22' as unknown).success, false);
assertEquals(sizesSchema.safeParse('1000x10 20X20 1x22' as unknown).success, true);
assertEquals(sizesSchema.safeParse('3333X6666 1x22 f' as unknown).success, false);
assertEquals(sizesSchema.safeParse('11xxxxxxx0 20X20 1x22' as unknown).success, false);
});

View file

@ -65,6 +65,9 @@ const localeSchema = z.string().transform<Intl.Locale>((val, ctx) => {
}
});
/** White-space separated list of sizes, each in the format <number with up to 4 digits>x<number with up to 4 digits> or with "X" in upper case. */
const sizesSchema = z.string().regex(/^(?:[1-9]\d{0,3}[xX][1-9]\d{0,3})(?:\s+[1-9]\d{0,3}[xX][1-9]\d{0,3})*$/);
export {
booleanParamSchema,
decode64Schema,
@ -75,4 +78,5 @@ export {
localeSchema,
percentageSchema,
safeUrlSchema,
sizesSchema,
};