Skip to content

Commit c4e7944

Browse files
committed
feat: allow integers
1 parent a8d3181 commit c4e7944

File tree

1 file changed

+37
-1
lines changed

1 file changed

+37
-1
lines changed

src/type-system.ts

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import {
66
TArray,
77
TDate,
88
TUnsafe,
9-
TypeRegistry
9+
TypeRegistry,
10+
TInteger
1011
} from '@sinclair/typebox'
1112
import { TypeSystem } from '@sinclair/typebox/system'
1213
import {
@@ -261,6 +262,12 @@ const Files: ElysiaFiles =
261262
if (!FormatRegistry.Has('numeric'))
262263
FormatRegistry.Set('numeric', (value) => !!value && !isNaN(+value))
263264

265+
if (!FormatRegistry.Has('integer'))
266+
FormatRegistry.Set(
267+
'integer',
268+
(value) => !!value && !isNaN(+value) && Number.isInteger(+value)
269+
)
270+
264271
if (!FormatRegistry.Has('boolean'))
265272
FormatRegistry.Set(
266273
'boolean',
@@ -354,6 +361,33 @@ export const ElysiaType = {
354361
})
355362
.Encode((value) => value) as any as TNumber
356363
},
364+
Integer: (property?: NumberOptions): TInteger => {
365+
const schema = Type.Integer(property)
366+
367+
return t
368+
.Transform(
369+
t.Union(
370+
[
371+
t.String({
372+
format: 'integer',
373+
default: 0
374+
}),
375+
t.Number(property)
376+
],
377+
property
378+
)
379+
)
380+
.Decode((value) => {
381+
const number = +value
382+
if (isNaN(number)) return value
383+
384+
if (!Value.Check(schema, number))
385+
throw new ValidationError('property', schema, number)
386+
387+
return number
388+
})
389+
.Encode((value) => value) as any as TInteger
390+
},
357391
Date: (property?: DateOptions) => {
358392
const schema = Type.Date(property)
359393

@@ -637,6 +671,7 @@ declare module '@sinclair/typebox' {
637671
ObjectString: typeof ElysiaType.ObjectString
638672
ArrayString: typeof ElysiaType.ArrayString
639673
Numeric: typeof ElysiaType.Numeric
674+
Integer: typeof ElysiaType.Integer
640675
File: typeof ElysiaType.File
641676
Files: typeof ElysiaType.Files
642677
Nullable: typeof ElysiaType.Nullable
@@ -675,6 +710,7 @@ t.ArrayString = ElysiaType.ArrayString
675710
* Will be parse to Number
676711
*/
677712
t.Numeric = ElysiaType.Numeric
713+
t.Integer = ElysiaType.Integer
678714

679715
t.File = (arg = {}) =>
680716
ElysiaType.File({

0 commit comments

Comments
 (0)