| 11 | const queryStringSchema = z.preprocess(lastQueryValue, z.string().optional()) |
| 12 | |
| 13 | const adminPaginationValueSchema = (defaultValue: number, normalize: (value: number) => number) => |
| 14 | z.preprocess(lastQueryValue, z.union([z.string(), z.number()]).optional()).transform((value) => { |
| 15 | const parsed = |
| 16 | typeof value === 'number' |
| 17 | ? value |
| 18 | : typeof value === 'string' |
| 19 | ? Number.parseInt(value, 10) |
| 20 | : Number.NaN |
| 21 | |
| 22 | if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) { |
| 23 | return defaultValue |
| 24 | } |
| 25 | |
| 26 | return normalize(parsed) |
| 27 | }) |
| 28 | |
| 29 | export const adminPaginationQuerySchema = z.object({ |
| 30 | limit: adminPaginationValueSchema(DEFAULT_LIMIT, (limit) => |