11import { isNotNull , isNull } from "@softwareventures/nullable" ;
2- import { Comparator , compare as defaultCompare , Comparison } from "@softwareventures/ordered" ;
2+ import type { Comparator } from "@softwareventures/ordered" ;
3+ import { compare as defaultCompare , Comparison } from "@softwareventures/ordered" ;
34
45// eslint-disable-next-line @typescript-eslint/unbound-method
56const nativeSlice = Array . prototype . slice ;
@@ -41,7 +42,7 @@ export function isArray<T = unknown>(value: readonly T[] | unknown): value is re
4142/** @internal This implementation is for internal use only, the exported declaration is above */
4243// eslint-disable-next-line @typescript-eslint/ban-ts-comment
4344// @ts -ignore duplicate identifier: This is the actual implementation, the exported declaration is above.
44- export const isArray : ( value : any ) => value is any [ ] = Array . isArray ;
45+ export const isArray : ( value : unknown ) => value is unknown [ ] = Array . isArray ;
4546
4647export function isArrayLike < T > ( value : ArrayLike < T > | unknown ) : value is ArrayLike < T > {
4748 return (
@@ -53,7 +54,7 @@ export function isArrayLike<T>(value: ArrayLike<T> | unknown): value is ArrayLik
5354}
5455
5556export function coerce < T > ( array : ArrayLike < T > ) : readonly T [ ] {
56- return isArray ( array ) ? array : copy ( array ) ;
57+ return isArray ( array ) ? ( array as readonly T [ ] ) : copy ( array ) ;
5758}
5859
5960export function first < T > ( array : ArrayLike < T > ) : T | null {
@@ -71,7 +72,7 @@ export function head<T>(array: ArrayLike<T>): T | null;
7172export const head = first ;
7273
7374export function tail < T > ( array : ArrayLike < T > ) : T [ ] {
74- return nativeSlice . call ( array , 1 ) ;
75+ return nativeSlice . call ( array , 1 ) as T [ ] ;
7576}
7677
7778export function push < T > ( array : ArrayLike < T > , value : T ) : T [ ] {
@@ -91,7 +92,7 @@ export function unshiftFn<T>(value: T): (array: ArrayLike<T>) => T[] {
9192}
9293
9394export function initial < T > ( array : ArrayLike < T > ) : T [ ] {
94- return array . length === 0 ? [ ] : nativeSlice . call ( array , 0 , array . length - 1 ) ;
95+ return array . length === 0 ? [ ] : ( nativeSlice . call ( array , 0 , array . length - 1 ) as T [ ] ) ;
9596}
9697
9798export function last < T > ( array : ArrayLike < T > ) : T | null {
@@ -113,31 +114,31 @@ export function notEmpty<T>(array: ArrayLike<T>): boolean {
113114}
114115
115116export function reverse < T > ( array : ArrayLike < T > ) : T [ ] {
116- return nativeReverse . call ( copy ( array ) ) ;
117+ return nativeReverse . call ( copy ( array ) ) as T [ ] ;
117118}
118119
119120export function slice < T > ( array : ArrayLike < T > , start ?: number , end ?: number ) : T [ ] {
120- return nativeSlice . call ( array , start , end ) ;
121+ return nativeSlice . call ( array , start , end ) as T [ ] ;
121122}
122123
123124export function sliceFn < T > ( start ?: number , end ?: number ) : ( array : ArrayLike < T > ) => T [ ] {
124- return array => nativeSlice . call ( array , start , end ) ;
125+ return array => nativeSlice . call ( array , start , end ) as T [ ] ;
125126}
126127
127128export function take < T > ( array : ArrayLike < T > , count : number ) : T [ ] {
128- return nativeSlice . call ( array , 0 , count ) ;
129+ return nativeSlice . call ( array , 0 , count ) as T [ ] ;
129130}
130131
131132export function takeFn < T > ( count : number ) : ( array : ArrayLike < T > ) => T [ ] {
132- return array => nativeSlice . call ( array , 0 , count ) ;
133+ return array => nativeSlice . call ( array , 0 , count ) as T [ ] ;
133134}
134135
135136export function drop < T > ( array : ArrayLike < T > , count : number ) : T [ ] {
136- return nativeSlice . call ( array , count ) ;
137+ return nativeSlice . call ( array , count ) as T [ ] ;
137138}
138139
139140export function dropFn < T > ( count : number ) : ( array : ArrayLike < T > ) => T [ ] {
140- return array => nativeSlice . call ( array , count ) ;
141+ return array => nativeSlice . call ( array , count ) as T [ ] ;
141142}
142143
143144export function takeWhile < T , U extends T > (
@@ -309,7 +310,7 @@ export function filter<T>(
309310 array : ArrayLike < T > ,
310311 predicate : ( element : T , index : number ) => boolean
311312) : T [ ] {
312- return nativeFilter . call ( array , predicate ) ;
313+ return nativeFilter . call ( array , predicate ) as T [ ] ;
313314}
314315
315316export function filterFn < T , U extends T > (
@@ -321,7 +322,7 @@ export function filterFn<T>(
321322export function filterFn < T > (
322323 predicate : ( element : T , index : number ) => boolean
323324) : ( array : ArrayLike < T > ) => T [ ] {
324- return array => nativeFilter . call ( array , predicate ) ;
325+ return array => nativeFilter . call ( array , predicate ) as T [ ] ;
325326}
326327
327328export function filterFirst < T > (
@@ -415,21 +416,29 @@ export function fold<T, U>(
415416 f : ( accumulator : U , element : T , index : number ) => U ,
416417 initial : U
417418) : U {
418- return ( nativeReduce as ( ...args : any [ ] ) => any ) . call ( array , f , initial ) ;
419+ return (
420+ nativeReduce as ( f : ( accumulator : U , element : T , index : number ) => U , initial : U ) => U
421+ ) . call ( array , f , initial ) ;
419422}
420423
421424export function foldFn < T , U > (
422425 f : ( accumulator : U , element : T , index : number ) => U ,
423426 initial : U
424427) : ( array : ArrayLike < T > ) => U {
425- return array => ( nativeReduce as ( ...args : any [ ] ) => any ) . call ( array , f , initial ) ;
428+ return array =>
429+ (
430+ nativeReduce as ( f : ( accumulator : U , element : T , index : number ) => U , initial : U ) => U
431+ ) . call ( array , f , initial ) ;
426432}
427433
428434export function fold1 < T > (
429435 array : ArrayLike < T > ,
430436 f : ( accumulator : T , element : T , index : number ) => T
431437) : T {
432- return ( nativeReduce as ( ...args : any [ ] ) => any ) . call ( array , f ) ;
438+ return ( nativeReduce as ( f : ( accumulator : T , element : T , index : number ) => T ) => T ) . call (
439+ array ,
440+ f
441+ ) ;
433442}
434443
435444export function fold1Fn < T > (
@@ -443,21 +452,32 @@ export function foldRight<T, U>(
443452 f : ( accumulator : U , element : T , index : number ) => U ,
444453 initial : U
445454) : U {
446- return ( nativeReduceRight as ( ...args : any [ ] ) => any ) . call ( array , f , initial ) ;
455+ return (
456+ nativeReduceRight as ( f : ( accumulator : U , element : T , index : number ) => U , initial : U ) => U
457+ ) . call ( array , f , initial ) ;
447458}
448459
449460export function foldRightFn < T , U > (
450461 f : ( accumulator : U , element : T , index : number ) => U ,
451462 initial : U
452463) : ( array : ArrayLike < T > ) => U {
453- return array => ( nativeReduceRight as ( ...args : any [ ] ) => any ) . call ( array , f , initial ) ;
464+ return array =>
465+ (
466+ nativeReduceRight as (
467+ f : ( accumulator : U , element : T , index : number ) => U ,
468+ initial : U
469+ ) => U
470+ ) . call ( array , f , initial ) ;
454471}
455472
456473export function foldRight1 < T > (
457474 array : ArrayLike < T > ,
458475 f : ( accumulator : T , element : T , index : number ) => T
459476) : T {
460- return ( nativeReduceRight as ( ...args : any [ ] ) => any ) . call ( array , f ) ;
477+ return ( nativeReduceRight as ( f : ( accumulator : T , element : T , index : number ) => T ) => T ) . call (
478+ array ,
479+ f
480+ ) ;
461481}
462482
463483export function foldRight1Fn < T > (
@@ -572,19 +592,14 @@ export function findFn<T>(
572592
573593export function maximum < T extends string | number | boolean > ( array : ArrayLike < T > ) : T | null ;
574594export function maximum < T > ( array : ArrayLike < T > , compare : Comparator < T > ) : T | null ;
575- export function maximum < T > (
576- array : ArrayLike < T > ,
577- compare : Comparator < any > = defaultCompare
578- ) : T | null {
579- return internalMaximum ( array , compare ) ;
595+ export function maximum < T > ( array : ArrayLike < T > , compare ?: Comparator < T > ) : T | null {
596+ return internalMaximum ( array , compare ?? ( defaultCompare as unknown as Comparator < T > ) ) ;
580597}
581598
582599export function maximumFn < T extends string | number | boolean > ( ) : ( array : ArrayLike < T > ) => T | null ;
583600export function maximumFn < T > ( compare : Comparator < T > ) : ( array : ArrayLike < T > ) => T | null ;
584- export function maximumFn < T > (
585- compare : Comparator < any > = defaultCompare
586- ) : ( array : ArrayLike < T > ) => T | null {
587- return array => internalMaximum ( array , compare ) ;
601+ export function maximumFn < T > ( compare ?: Comparator < T > ) : ( array : ArrayLike < T > ) => T | null {
602+ return array => internalMaximum ( array , compare ?? ( defaultCompare as unknown as Comparator < T > ) ) ;
588603}
589604
590605function internalMaximum < T > ( array : ArrayLike < T > , compare : Comparator < T > ) : T | null {
@@ -605,19 +620,14 @@ function internalMaximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | nu
605620
606621export function minimum < T extends string | number | boolean > ( array : ArrayLike < T > ) : T | null ;
607622export function minimum < T > ( array : ArrayLike < T > , compare : Comparator < T > ) : T | null ;
608- export function minimum < T > (
609- array : ArrayLike < T > ,
610- compare : Comparator < any > = defaultCompare
611- ) : T | null {
612- return internalMinimum ( array , compare ) ;
623+ export function minimum < T > ( array : ArrayLike < T > , compare ?: Comparator < T > ) : T | null {
624+ return internalMinimum ( array , compare ?? ( defaultCompare as unknown as Comparator < T > ) ) ;
613625}
614626
615627export function minimumFn < T extends string | number | boolean > ( ) : ( array : ArrayLike < T > ) => T | null ;
616628export function minimumFn < T > ( compare : Comparator < T > ) : ( array : ArrayLike < T > ) => T | null ;
617- export function minimumFn < T > (
618- compare : Comparator < any > = defaultCompare
619- ) : ( array : ArrayLike < T > ) => T | null {
620- return array => internalMinimum ( array , compare ) ;
629+ export function minimumFn < T > ( compare ?: Comparator < T > ) : ( array : ArrayLike < T > ) => T | null {
630+ return array => internalMinimum ( array , compare ?? ( defaultCompare as unknown as Comparator < T > ) ) ;
621631}
622632
623633function internalMinimum < T > ( array : ArrayLike < T > , compare : Comparator < T > ) : T | null {
@@ -649,7 +659,7 @@ export function and(array: ArrayLike<boolean>): boolean {
649659}
650660
651661export function or ( array : ArrayLike < boolean > ) : boolean {
652- return findIndex ( array , element => ! ! element ) != null ;
662+ return findIndex ( array , element => Boolean ( element ) ) != null ;
653663}
654664
655665export function any < T > (
@@ -679,7 +689,7 @@ export function allFn<T>(
679689}
680690
681691export function concat < T > ( arrays : ArrayLike < ArrayLike < T > > ) : T [ ] {
682- return nativeConcat . apply ( [ ] , map ( arrays , coerce ) ) ;
692+ return nativeConcat . apply ( [ ] , map ( arrays , coerce ) ) as T [ ] ;
683693}
684694
685695export function prepend < T > ( a : ArrayLike < T > ) : ( b : ArrayLike < T > ) => T [ ] {
@@ -1583,23 +1593,28 @@ export function sort(array: ArrayLike<number>): number[];
15831593export function sort ( array : ArrayLike < string > ) : string [ ] ;
15841594export function sort < T > ( array : ArrayLike < T > , comparator : Comparator < T > ) : T [ ] ;
15851595export function sort < T > ( array : ArrayLike < T > , comparator ?: Comparator < T > ) : T [ ] {
1586- return copy ( array ) . sort ( comparator ?? ( defaultCompare as any ) ) ;
1596+ return copy ( array ) . sort ( comparator ?? ( defaultCompare as unknown as Comparator < T > ) ) ;
15871597}
15881598
15891599export function sortFn < T > ( comparator : Comparator < T > ) : ( array : ArrayLike < T > ) => T [ ] {
15901600 return array => sort ( array , comparator ) ;
15911601}
15921602
15931603export function sortBy < T > ( array : ArrayLike < T > , select : SortSelect < T > ) : T [ ] {
1594- return sort ( array , ( a , b ) => defaultCompare ( select ( a ) as any , select ( b ) as any ) ) ;
1604+ return sort ( array , ( a , b ) =>
1605+ ( defaultCompare as Comparator < string | number | boolean > ) ( select ( a ) , select ( b ) )
1606+ ) ;
15951607}
15961608
15971609export function sortByFn < T > ( select : SortSelect < T > ) : ( array : ArrayLike < T > ) => T [ ] {
15981610 return array => sortBy ( array , select ) ;
15991611}
16001612
16011613export function sortByDescending < T > ( array : ArrayLike < T > , select : SortSelect < T > ) : T [ ] {
1602- return sort ( array , ( a , b ) => - defaultCompare ( select ( a ) as any , select ( b ) as any ) ) ;
1614+ return sort (
1615+ array ,
1616+ ( a , b ) => - ( defaultCompare as Comparator < string | number | boolean > ) ( select ( a ) , select ( b ) )
1617+ ) ;
16031618}
16041619
16051620export function sortByDescendingFn < T > ( select : SortSelect < T > ) : ( array : ArrayLike < T > ) => T [ ] {
0 commit comments