@@ -19,32 +19,18 @@ export class TodoError extends ArrayResultError {
19
19
}
20
20
}
21
21
export class ArrayResult < T > {
22
- readonly array : ReadonlyArray < T > ;
23
- readonly errors : ReadonlyArray < ArrayResultError > ;
24
- constructor ( array ?: ReadonlyArray < T > | ArrayResultError ) ;
22
+ constructor ( array ?: ReadonlyArray < T > ) ;
25
23
constructor ( array : undefined , errors : ReadonlyArray < ArrayResultError > ) ;
26
24
constructor (
27
- array : ReadonlyArray < T > | ArrayResultError = [ ] ,
28
- errors : ReadonlyArray < ArrayResultError > = [ ] ,
29
- ) {
30
- if ( Array . isArray ( array ) ) {
31
- this . array = array ;
32
- } else {
33
- this . array = [ ] ;
34
- }
35
- if ( this . array . length === 0 ) {
36
- if ( array instanceof ArrayResultError ) {
37
- this . errors = [ array ] ;
38
- } else {
39
- this . errors = errors ;
40
- }
41
- } else {
42
- this . errors = [ ] ;
43
- }
44
- }
25
+ public readonly array : ReadonlyArray < T > = [ ] ,
26
+ public readonly errors : ReadonlyArray < ArrayResultError > = [ ] ,
27
+ ) { }
45
28
static errors ( errors : ReadonlyArray < ArrayResultError > ) : ArrayResult < never > {
46
29
return new ArrayResult ( undefined , errors ) ;
47
30
}
31
+ static empty ( ) : ArrayResult < never > {
32
+ return ArrayResult . empty ( ) ;
33
+ }
48
34
isError ( ) : boolean {
49
35
return this . array . length === 0 ;
50
36
}
@@ -57,7 +43,7 @@ export class ArrayResult<T> {
57
43
}
58
44
filter ( mapper : ( value : T ) => boolean ) : ArrayResult < T > {
59
45
return this . flatMap ( ( value ) =>
60
- mapper ( value ) ? new ArrayResult ( [ value ] ) : new ArrayResult ( )
46
+ mapper ( value ) ? new ArrayResult ( [ value ] ) : ArrayResult . empty ( )
61
47
) ;
62
48
}
63
49
map < U > ( mapper : ( value : T ) => U ) : ArrayResult < U > {
@@ -70,7 +56,7 @@ export class ArrayResult<T> {
70
56
return this . array . reduce (
71
57
( rest , value ) =>
72
58
ArrayResult . concat ( rest , ArrayResult . from ( ( ) => mapper ( value ) ) ) ,
73
- new ArrayResult < U > ( ) ,
59
+ ArrayResult . empty ( ) as ArrayResult < U > ,
74
60
) ;
75
61
}
76
62
}
@@ -91,7 +77,7 @@ export class ArrayResult<T> {
91
77
}
92
78
addErrorWhenNone ( error : ( ) => ArrayResultError ) : ArrayResult < T > {
93
79
if ( this . isError ( ) && this . errors . length === 0 ) {
94
- return new ArrayResult ( error ( ) ) ;
80
+ return ArrayResult . errors ( [ error ( ) ] ) ;
95
81
} else {
96
82
return this ;
97
83
}
@@ -104,7 +90,7 @@ export class ArrayResult<T> {
104
90
left . isError ( ) && right . isError ( )
105
91
? ArrayResult . errors ( [ ...left . errors , ...right . errors ] )
106
92
: new ArrayResult ( [ ...left . array , ...right . array ] ) ,
107
- new ArrayResult < T > ( ) ,
93
+ ArrayResult . empty ( ) ,
108
94
) ;
109
95
}
110
96
static combine < T extends ReadonlyArray < unknown > > (
0 commit comments