@@ -19,32 +19,18 @@ export class TodoError extends ArrayResultError {
1919 }
2020}
2121export class ArrayResult < T > {
22- readonly array : ReadonlyArray < T > ;
23- readonly errors : ReadonlyArray < ArrayResultError > ;
24- constructor ( array ?: ReadonlyArray < T > | ArrayResultError ) ;
22+ constructor ( array ?: ReadonlyArray < T > ) ;
2523 constructor ( array : undefined , errors : ReadonlyArray < ArrayResultError > ) ;
2624 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+ ) { }
4528 static errors ( errors : ReadonlyArray < ArrayResultError > ) : ArrayResult < never > {
4629 return new ArrayResult ( undefined , errors ) ;
4730 }
31+ static empty ( ) : ArrayResult < never > {
32+ return ArrayResult . empty ( ) ;
33+ }
4834 isError ( ) : boolean {
4935 return this . array . length === 0 ;
5036 }
@@ -57,7 +43,7 @@ export class ArrayResult<T> {
5743 }
5844 filter ( mapper : ( value : T ) => boolean ) : ArrayResult < T > {
5945 return this . flatMap ( ( value ) =>
60- mapper ( value ) ? new ArrayResult ( [ value ] ) : new ArrayResult ( )
46+ mapper ( value ) ? new ArrayResult ( [ value ] ) : ArrayResult . empty ( )
6147 ) ;
6248 }
6349 map < U > ( mapper : ( value : T ) => U ) : ArrayResult < U > {
@@ -70,7 +56,7 @@ export class ArrayResult<T> {
7056 return this . array . reduce (
7157 ( rest , value ) =>
7258 ArrayResult . concat ( rest , ArrayResult . from ( ( ) => mapper ( value ) ) ) ,
73- new ArrayResult < U > ( ) ,
59+ ArrayResult . empty ( ) as ArrayResult < U > ,
7460 ) ;
7561 }
7662 }
@@ -91,7 +77,7 @@ export class ArrayResult<T> {
9177 }
9278 addErrorWhenNone ( error : ( ) => ArrayResultError ) : ArrayResult < T > {
9379 if ( this . isError ( ) && this . errors . length === 0 ) {
94- return new ArrayResult ( error ( ) ) ;
80+ return ArrayResult . errors ( [ error ( ) ] ) ;
9581 } else {
9682 return this ;
9783 }
@@ -104,7 +90,7 @@ export class ArrayResult<T> {
10490 left . isError ( ) && right . isError ( )
10591 ? ArrayResult . errors ( [ ...left . errors , ...right . errors ] )
10692 : new ArrayResult ( [ ...left . array , ...right . array ] ) ,
107- new ArrayResult < T > ( ) ,
93+ ArrayResult . empty ( ) ,
10894 ) ;
10995 }
11096 static combine < T extends ReadonlyArray < unknown > > (
0 commit comments