1
1
import type { IntegerValidatorType , ValidationNames } from '../types'
2
- import isInt from '../lib/isInt'
3
2
import { NumberValidator } from './numbers'
4
3
5
4
export class IntegerValidator extends NumberValidator implements IntegerValidatorType {
@@ -8,17 +7,63 @@ export class IntegerValidator extends NumberValidator implements IntegerValidato
8
7
constructor ( ) {
9
8
super ( )
10
9
// Override the base number validation to ensure it's an integer
10
+ // Remove the existing number rule and add our own
11
+ this . rules = this . rules . filter ( rule => rule . name !== 'number' )
11
12
this . addRule ( {
12
- name : 'integer ' ,
13
+ name : 'number ' ,
13
14
test : ( value : unknown ) : value is number => {
14
- if ( typeof value !== 'number' || Number . isNaN ( value ) ) {
15
+ // First check if it's a number
16
+ if ( typeof value !== 'number' || Number . isNaN ( value ) || ! Number . isFinite ( value ) ) {
15
17
return false
16
18
}
17
- return isInt ( String ( value ) , { } )
19
+ // Then check if it's an integer
20
+ return Number . isInteger ( value )
18
21
} ,
19
22
message : 'Must be a valid integer' ,
20
23
} )
21
24
}
25
+
26
+ min ( min : number ) : this {
27
+ return this . addRule ( {
28
+ name : 'min' ,
29
+ test : ( value : number ) => value >= min ,
30
+ message : 'Must be at least {min}' ,
31
+ params : { min } ,
32
+ } )
33
+ }
34
+
35
+ max ( max : number ) : this {
36
+ return this . addRule ( {
37
+ name : 'max' ,
38
+ test : ( value : number ) => value <= max ,
39
+ message : 'Must be at most {max}' ,
40
+ params : { max } ,
41
+ } )
42
+ }
43
+
44
+ positive ( ) : this {
45
+ return this . addRule ( {
46
+ name : 'positive' ,
47
+ test : ( value : number ) => value > 0 ,
48
+ message : 'Must be a positive integer' ,
49
+ } )
50
+ }
51
+
52
+ negative ( ) : this {
53
+ return this . addRule ( {
54
+ name : 'negative' ,
55
+ test : ( value : number ) => value < 0 ,
56
+ message : 'Must be a negative integer' ,
57
+ } )
58
+ }
59
+
60
+ custom ( fn : ( value : number ) => boolean , message : string ) : this {
61
+ return this . addRule ( {
62
+ name : 'custom' ,
63
+ test : fn ,
64
+ message,
65
+ } )
66
+ }
22
67
}
23
68
24
69
// Export a function to create integer validators
0 commit comments