Skip to content

Commit 86e638b

Browse files
committed
fix(typescript-effect-schema): validate date and time formats
1 parent d328bcc commit 86e638b

2 files changed

Lines changed: 5 additions & 3 deletions

File tree

‎packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,11 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer {
195195
? 'S.transform(S.Literal("true", "false"), S.Boolean, { strict: true, decode: (value) => value === "true", encode: (value) => value ? "true" : "false" })'
196196
: 'S.Literal("true", "false")';
197197
if (_transformedStringType.kind === "date")
198-
return "S.String.pipe(S.pattern(/^\\d{4}-\\d{2}-\\d{2}$/))";
198+
return 'S.String.pipe(S.pattern(/^\\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\\d|3[01])$/), S.filter(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value))';
199199
if (_transformedStringType.kind === "time")
200-
return "S.String.pipe(S.pattern(/^\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/))";
200+
return "S.String.pipe(S.pattern(/^(?:[01]\\d|2[0-3]):[0-5]\\d:(?:[0-5]\\d|60)(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$/i))";
201201
if (_transformedStringType.kind === "date-time")
202-
return "S.String.pipe(S.pattern(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/))";
202+
return 'S.String.pipe(S.pattern(/^\\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\\d|3[01])T(?:[01]\\d|2[0-3]):[0-5]\\d:(?:[0-5]\\d|60)(?:\\.\\d+)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$/i), S.filter(value => (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)))';
203203
if (_transformedStringType.kind === "integer-string")
204204
return coerceStrings
205205
? "S.NumberFromString.pipe(S.int())"

‎test/languages.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1781,6 +1781,8 @@ export const TypeScriptEffectSchemaLanguage: Language = {
17811781
"minmaxlength",
17821782
"bool-string",
17831783
"date-time",
1784+
"date",
1785+
"time",
17841786
"integer-string",
17851787
"pattern",
17861788
"minmax",

0 commit comments

Comments
 (0)