From f7de2b92af4b6ec4976a3ba4a118038ab80019f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Augustin=20=C5=A0ulc?= Date: Fri, 20 May 2022 11:20:31 +0200 Subject: [PATCH] Added support for date and date-time --- packages/cli/src/core/ApiBase.ts | 18 +++++++++++++++--- packages/cli/src/core/ApiDescriptorBuilder.ts | 3 ++- packages/cli/src/core/types/ApiDescriptor.ts | 1 + 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/core/ApiBase.ts b/packages/cli/src/core/ApiBase.ts index efd0ee8..7a29c9c 100644 --- a/packages/cli/src/core/ApiBase.ts +++ b/packages/cli/src/core/ApiBase.ts @@ -342,9 +342,21 @@ export class ApiBase { this.appendTemp('z.number().int()'); break; case SchemaType.STRING: - this.appendTemp('z.string()'); - if (schema.maxLength !== undefined) { - this.appendTemp(`.max(${schema.maxLength})`); + switch (schema.format) + { + case 'date': + case 'date-time': + // TODO reference a shared type? + this.appendTemp( + 'z.preprocess(arg => (typeof arg == "string" || arg instanceof Date ? new Date(arg) : undefined), z.date())'); + break; + default: + this.appendTemp('z.string()'); + if (schema.maxLength !== undefined) { + this.appendTemp(`.max(${schema.maxLength})`); + } + + break; } break; diff --git a/packages/cli/src/core/ApiDescriptorBuilder.ts b/packages/cli/src/core/ApiDescriptorBuilder.ts index f6916b6..6e00b83 100644 --- a/packages/cli/src/core/ApiDescriptorBuilder.ts +++ b/packages/cli/src/core/ApiDescriptorBuilder.ts @@ -353,7 +353,8 @@ class ApiDescriptorBuilder { }; case 'string': return { - type: SchemaType.STRING + type: SchemaType.STRING, + format: schema.format }; case 'boolean': return { diff --git a/packages/cli/src/core/types/ApiDescriptor.ts b/packages/cli/src/core/types/ApiDescriptor.ts index 20ec003..11e57fc 100644 --- a/packages/cli/src/core/types/ApiDescriptor.ts +++ b/packages/cli/src/core/types/ApiDescriptor.ts @@ -108,6 +108,7 @@ export interface SchemaInteger extends SchemaBase { export interface SchemaString extends SchemaBase { type: SchemaType.STRING; + format?: string; maxLength?: number; }