@softwareventures/array 3.9.0 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +70 -0
- package/index.js +224 -5
- package/index.js.map +1 -1
- package/package.json +6 -6
package/index.d.ts
CHANGED
|
@@ -4,11 +4,17 @@ export declare function copy<T>(array: ArrayLike<T>): T[];
|
|
|
4
4
|
export declare function isArray<T = unknown>(value: readonly T[] | unknown): value is readonly T[];
|
|
5
5
|
export declare function isArrayLike<T>(value: ArrayLike<T> | unknown): value is ArrayLike<T>;
|
|
6
6
|
export declare function coerce<T>(array: ArrayLike<T>): readonly T[];
|
|
7
|
+
export declare function first<T>(array: ArrayLike<T>): T | null;
|
|
8
|
+
/** @deprecated Use {@link first} instead. */
|
|
7
9
|
export declare function head<T>(array: ArrayLike<T>): T | null;
|
|
8
10
|
export declare function tail<T>(array: ArrayLike<T>): T[];
|
|
9
11
|
export declare function initial<T>(array: ArrayLike<T>): T[];
|
|
10
12
|
export declare function last<T>(array: ArrayLike<T>): T | null;
|
|
13
|
+
/** If the array contains exactly one element, returns that element.
|
|
14
|
+
* Otherwise, returns null. */
|
|
15
|
+
export declare function only<T>(array: ArrayLike<T>): T | null;
|
|
11
16
|
export declare function empty<T>(array: ArrayLike<T>): boolean;
|
|
17
|
+
export declare function notEmpty<T>(array: ArrayLike<T>): boolean;
|
|
12
18
|
export declare function reverse<T>(array: ArrayLike<T>): T[];
|
|
13
19
|
export declare function slice<T>(array: ArrayLike<T>, start?: number, end?: number): T[];
|
|
14
20
|
export declare function sliceFn<T>(start?: number, end?: number): (array: ArrayLike<T>) => T[];
|
|
@@ -20,15 +26,29 @@ export declare function takeWhile<T, U extends T>(array: ArrayLike<T>, predicate
|
|
|
20
26
|
export declare function takeWhile<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
|
|
21
27
|
export declare function takeWhileFn<T, U extends T>(predicate: (element: T, index: number) => element is U): (array: ArrayLike<T>) => U[];
|
|
22
28
|
export declare function takeWhileFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
|
|
29
|
+
export declare function takeUntil<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
|
|
30
|
+
export declare function takeUntilFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
|
|
23
31
|
export declare function dropWhile<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
|
|
24
32
|
export declare function dropWhileFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
|
|
33
|
+
export declare function dropUntil<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
|
|
34
|
+
export declare function dropUntilFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
|
|
35
|
+
export declare function equal<T>(a: ArrayLike<T>, b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): boolean;
|
|
36
|
+
export declare function equalFn<T>(b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): (a: ArrayLike<T>) => boolean;
|
|
37
|
+
export declare function notEqual<T>(a: ArrayLike<T>, b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): boolean;
|
|
38
|
+
export declare function notEqualFn<T>(b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): (a: ArrayLike<T>) => boolean;
|
|
39
|
+
export declare function prefixMatch<T>(a: ArrayLike<T>, b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): boolean;
|
|
40
|
+
export declare function prefixMatchFn<T>(b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): (a: ArrayLike<T>) => boolean;
|
|
25
41
|
export declare function map<T, U>(array: ArrayLike<T>, f: (element: T, index: number) => U): U[];
|
|
26
42
|
export declare function mapFn<T, U>(f: (element: T, index: number) => U): (array: ArrayLike<T>) => U[];
|
|
27
43
|
export declare function filter<T, U extends T>(array: ArrayLike<T>, predicate: (element: T, index: number) => element is U): U[];
|
|
28
44
|
export declare function filter<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
|
|
29
45
|
export declare function filterFn<T, U extends T>(predicate: (element: T, index: number) => element is U): (array: ArrayLike<T>) => U[];
|
|
30
46
|
export declare function filterFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
|
|
47
|
+
/** @deprecated This function is confusing, use {@link excludeFirst} instead,
|
|
48
|
+
* and invert the predicate. */
|
|
31
49
|
export declare function filterFirst<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
|
|
50
|
+
/** @deprecated This function is confusing, use {@link excludeFirstFn} instead,
|
|
51
|
+
* and invert the predicate. */
|
|
32
52
|
export declare function filterFirstFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
|
|
33
53
|
export declare function exclude<T, U>(array: ArrayLike<T | U>, predicate: (element: T | U) => element is T): U[];
|
|
34
54
|
export declare function exclude<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
|
|
@@ -57,27 +77,43 @@ export declare function contains<T>(array: ArrayLike<T>, value: T): boolean;
|
|
|
57
77
|
export declare function containsFn<T>(value: T): (array: ArrayLike<T>) => boolean;
|
|
58
78
|
export declare function indexOf<T>(array: ArrayLike<T>, value: T): number | null;
|
|
59
79
|
export declare function indexOfFn<T>(value: T): (array: ArrayLike<T>) => number | null;
|
|
80
|
+
export declare function lastIndexOf<T>(array: ArrayLike<T>, value: T): number | null;
|
|
81
|
+
export declare function lastIndexOfFn<T>(value: T): (array: ArrayLike<T>) => number | null;
|
|
60
82
|
export declare function findIndex<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): number | null;
|
|
61
83
|
export declare function findIndexFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => number | null;
|
|
84
|
+
export declare function findLastIndex<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): number | null;
|
|
85
|
+
export declare function findLastIndexFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => number | null;
|
|
62
86
|
export declare function find<T, U extends T>(array: ArrayLike<T>, predicate: (element: T) => element is U): U | null;
|
|
63
87
|
export declare function find<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T | null;
|
|
64
88
|
export declare function findFn<T, U extends T>(predicate: (element: T) => element is U): (array: ArrayLike<T>) => U | null;
|
|
65
89
|
export declare function findFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T | null;
|
|
90
|
+
export declare function findLast<T, U extends T>(array: ArrayLike<T>, predicate: (element: T) => element is U): U | null;
|
|
91
|
+
export declare function findLast<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T | null;
|
|
92
|
+
export declare function findLastFn<T, U extends T>(predicate: (element: T) => element is U): (array: ArrayLike<T>) => U | null;
|
|
93
|
+
export declare function findLastFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T | null;
|
|
66
94
|
export declare function maximum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;
|
|
67
95
|
export declare function maximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;
|
|
68
96
|
export declare function maximumFn<T extends string | number | boolean>(): (array: ArrayLike<T>) => T | null;
|
|
69
97
|
export declare function maximumFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T | null;
|
|
98
|
+
export declare function maximumBy<T>(array: ArrayLike<T>, select: (element: T) => number): T | null;
|
|
99
|
+
export declare function maximumByFn<T>(select: (element: T) => number): (array: ArrayLike<T>) => T | null;
|
|
70
100
|
export declare function minimum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;
|
|
71
101
|
export declare function minimum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;
|
|
72
102
|
export declare function minimumFn<T extends string | number | boolean>(): (array: ArrayLike<T>) => T | null;
|
|
73
103
|
export declare function minimumFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T | null;
|
|
104
|
+
export declare function minimumBy<T>(array: ArrayLike<T>, select: (element: T) => number): T | null;
|
|
105
|
+
export declare function minimumByFn<T>(select: (element: T) => number): (array: ArrayLike<T>) => T | null;
|
|
74
106
|
export declare function sum(array: ArrayLike<number>): number;
|
|
75
107
|
export declare function product(array: ArrayLike<number>): number;
|
|
108
|
+
export declare function average(array: ArrayLike<number>): number | null;
|
|
76
109
|
export declare function and(array: ArrayLike<boolean>): boolean;
|
|
77
110
|
export declare function or(array: ArrayLike<boolean>): boolean;
|
|
78
111
|
export declare function any<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): boolean;
|
|
79
112
|
export declare function anyFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => boolean;
|
|
113
|
+
export declare function all<T, U extends T>(array: readonly T[], predicate: (element: T, index: number) => element is U): array is readonly U[];
|
|
114
|
+
export declare function all<T, U extends T>(array: ArrayLike<T>, predicate: (element: T, index: number) => element is U): array is ArrayLike<U>;
|
|
80
115
|
export declare function all<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): boolean;
|
|
116
|
+
export declare function allFn<T, U extends T>(predicate: (element: T, index: number) => element is U): (array: ArrayLike<T>) => array is ArrayLike<U>;
|
|
81
117
|
export declare function allFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => boolean;
|
|
82
118
|
export declare function concat<T>(arrays: ArrayLike<ArrayLike<T>>): T[];
|
|
83
119
|
export declare function prepend<T>(a: ArrayLike<T>): (b: ArrayLike<T>) => T[];
|
|
@@ -93,6 +129,15 @@ export declare function scanRight<T, U>(array: ArrayLike<T>, f: (accumulator: U,
|
|
|
93
129
|
export declare function scanRightFn<T, U>(f: (accumulator: U, element: T, index: number) => U, initial: U): (array: ArrayLike<T>) => U[];
|
|
94
130
|
export declare function scanRight1<T>(array: ArrayLike<T>, f: (accumulator: T, element: T, index: number) => T): T[];
|
|
95
131
|
export declare function scanRight1Fn<T>(f: (accumulator: T, element: T, index: number) => T): (array: ArrayLike<T>) => T[];
|
|
132
|
+
/** Splits the array at the specified index.
|
|
133
|
+
*
|
|
134
|
+
* Returns a tuple where the first element is the first `index` elements of the
|
|
135
|
+
* array, and the second element is the remaining elements of the array. */
|
|
136
|
+
export declare function split<T>(array: readonly T[], index: number): [T[], T[]];
|
|
137
|
+
/** Returns a function that splits an array at the specified index.
|
|
138
|
+
*
|
|
139
|
+
* This is the curried form of {@link split}. */
|
|
140
|
+
export declare function splitFn<T>(index: number): (array: readonly T[]) => [T[], T[]];
|
|
96
141
|
export declare function partition<T, U extends T>(array: ArrayLike<T>, predicate: (element: T) => element is U): [U[], Array<Exclude<T, U>>];
|
|
97
142
|
export declare function partition<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): [T[], T[]];
|
|
98
143
|
export declare function partitionFn<T, U extends T>(predicate: (element: T) => element is U): (array: ArrayLike<T>) => [U[], Array<Exclude<T, U>>];
|
|
@@ -101,6 +146,21 @@ export declare function partitionWhile<T, U extends T>(array: ArrayLike<T>, pred
|
|
|
101
146
|
export declare function partitionWhile<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): [T[], T[]];
|
|
102
147
|
export declare function partitionWhileFn<T, U extends T>(predicate: (element: T) => element is U): (array: readonly T[]) => [U[], T[]];
|
|
103
148
|
export declare function partitionWhileFn<T>(predicate: (element: T) => boolean): (array: readonly T[]) => [T[], T[]];
|
|
149
|
+
export declare function partitionUntil<T>(array: ArrayLike<T>, predicate: (element: T) => boolean): [T[], T[]];
|
|
150
|
+
export declare function partitionUntilFn<T>(predicate: (element: T) => boolean): (array: ArrayLike<T>) => [T[], T[]];
|
|
151
|
+
/** Takes two arrays and returns an array of corresponding pairs.
|
|
152
|
+
*
|
|
153
|
+
* If one of the supplied arrays is shorter than the other, then the excess
|
|
154
|
+
* elements of the longer array will be discarded. */
|
|
155
|
+
export declare function zip<T, U>(a: readonly T[], b: readonly U[]): Array<[T, U]>;
|
|
156
|
+
/** Returns a function that combines the elements of `a` with the elements of
|
|
157
|
+
* `b` and returns an array of corresponding pairs.
|
|
158
|
+
*
|
|
159
|
+
* If one of the supplied arrays is shorter than the other, then the excess
|
|
160
|
+
* elements of the longer array will be discarded.
|
|
161
|
+
*
|
|
162
|
+
* This is the curried variant of {@link zip}. */
|
|
163
|
+
export declare function zipFn<T, U>(b: readonly U[]): (a: readonly T[]) => Array<[T, U]>;
|
|
104
164
|
export declare function keyBy<TElement, TKey extends Key>(array: ArrayLike<TElement>, f: (element: TElement, index: number) => TKey): Dictionary<TElement[], TKey>;
|
|
105
165
|
export declare function keyByFn<TElement, TKey extends Key>(f: (element: TElement, index: number) => TKey): (array: ArrayLike<TElement>) => Dictionary<TElement[], TKey>;
|
|
106
166
|
export declare function keyFirstBy<TElement, TKey extends Key>(array: ArrayLike<TElement>, f: (element: TElement, index: number) => TKey): Dictionary<TElement, TKey>;
|
|
@@ -175,5 +235,15 @@ export declare function uniqueAdjacentByOrderFn<T>(compare: Comparator<T>): (arr
|
|
|
175
235
|
export declare function uniqueAdjacentByHash<T>(array: ArrayLike<T>, hash: (element: T, index: number) => Key): T[];
|
|
176
236
|
export declare function uniqueAdjacentByHashFn<T>(hash: (element: T, index: number) => Key): (array: ArrayLike<T>) => T[];
|
|
177
237
|
export declare function shuffle<T>(array: ArrayLike<T>): T[];
|
|
238
|
+
export declare function sort(array: ArrayLike<boolean>): boolean[];
|
|
239
|
+
export declare function sort(array: ArrayLike<number>): number[];
|
|
240
|
+
export declare function sort(array: ArrayLike<string>): string[];
|
|
241
|
+
export declare function sort<T>(array: ArrayLike<T>, comparator: Comparator<T>): T[];
|
|
242
|
+
export declare function sortFn<T>(comparator: Comparator<T>): (array: ArrayLike<T>) => T[];
|
|
243
|
+
export declare function sortBy<T>(array: ArrayLike<T>, select: SortSelect<T>): T[];
|
|
244
|
+
export declare function sortByFn<T>(select: SortSelect<T>): (array: ArrayLike<T>) => T[];
|
|
245
|
+
export declare function sortByDescending<T>(array: ArrayLike<T>, select: SortSelect<T>): T[];
|
|
246
|
+
export declare function sortByDescendingFn<T>(select: SortSelect<T>): (array: ArrayLike<T>) => T[];
|
|
247
|
+
export declare type SortSelect<T> = ((element: T) => boolean) | ((element: T) => number) | ((element: T) => string);
|
|
178
248
|
export declare function forEach<T>(array: ArrayLike<T>, f: (element: T, index: number) => void): typeof array;
|
|
179
249
|
export declare function forEachFn<T>(f: (element: T, index: number) => void): (array: ArrayLike<T>) => typeof array;
|
package/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a, _b;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
6
|
-
exports.
|
|
4
|
+
exports.fold1 = exports.foldFn = exports.fold = exports.removeFirstFn = exports.removeFirst = exports.removeFn = exports.remove = exports.excludeFirstFn = exports.excludeFirst = exports.excludeNull = exports.excludeFn = exports.exclude = exports.filterFirstFn = exports.filterFirst = exports.filterFn = exports.filter = exports.mapFn = exports.map = exports.prefixMatchFn = exports.prefixMatch = exports.notEqualFn = exports.notEqual = exports.equalFn = exports.equal = exports.dropUntilFn = exports.dropUntil = exports.dropWhileFn = exports.dropWhile = exports.takeUntilFn = exports.takeUntil = exports.takeWhileFn = exports.takeWhile = exports.dropFn = exports.drop = exports.takeFn = exports.take = exports.sliceFn = exports.slice = exports.reverse = exports.notEmpty = exports.empty = exports.only = exports.last = exports.initial = exports.tail = exports.first = exports.coerce = exports.isArrayLike = exports.isArray = exports.copy = void 0;
|
|
5
|
+
exports.scan1Fn = exports.scan1 = exports.scanFn = exports.scan = exports.noneNull = exports.concatMapFn = exports.concatMap = exports.append = exports.prepend = exports.concat = exports.allFn = exports.all = exports.anyFn = exports.any = exports.or = exports.and = exports.average = exports.product = exports.sum = exports.minimumByFn = exports.minimumBy = exports.minimumFn = exports.minimum = exports.maximumByFn = exports.maximumBy = exports.maximumFn = exports.maximum = exports.findLastFn = exports.findLast = exports.findFn = exports.find = exports.findLastIndexFn = exports.findLastIndex = exports.findIndexFn = exports.findIndex = exports.lastIndexOfFn = exports.lastIndexOf = exports.indexOfFn = exports.indexOf = exports.containsFn = exports.contains = exports.foldMapRightFn = exports.foldMapRight = exports.foldMapFn = exports.foldMap = exports.foldRight1Fn = exports.foldRight1 = exports.foldRightFn = exports.foldRight = exports.fold1Fn = void 0;
|
|
6
|
+
exports.uniqueByEquality = exports.uniqueByIdentity = exports.uniqueFn = exports.unique = exports.groupAdjacentByHashFn = exports.groupAdjacentByHash = exports.groupAdjacentByOrderFn = exports.groupAdjacentByOrder = exports.groupAdjacentByEqualityFn = exports.groupAdjacentByEquality = exports.groupAdjacentByIdentityFn = exports.groupAdjacentByIdentity = exports.groupAdjacentFn = exports.groupAdjacent = exports.groupByOrderWithHashFn = exports.groupByOrderWithHash = exports.groupByEqualityWithHashFn = exports.groupByEqualityWithHash = exports.groupByIdentityWithHashFn = exports.groupByIdentityWithHash = exports.groupByHashFn = exports.groupByHash = exports.groupByOrderFn = exports.groupByOrder = exports.groupByEqualityFn = exports.groupByEquality = exports.groupByIdentityFn = exports.groupByIdentity = exports.groupFn = exports.group = exports.keyLastByFn = exports.keyLastBy = exports.keyFirstByFn = exports.keyFirstBy = exports.keyByFn = exports.keyBy = exports.zipFn = exports.zip = exports.partitionUntilFn = exports.partitionUntil = exports.partitionWhileFn = exports.partitionWhile = exports.partitionFn = exports.partition = exports.splitFn = exports.split = exports.scanRight1Fn = exports.scanRight1 = exports.scanRightFn = exports.scanRight = void 0;
|
|
7
|
+
exports.forEachFn = exports.forEach = exports.sortByDescendingFn = exports.sortByDescending = exports.sortByFn = exports.sortBy = exports.sortFn = exports.sort = exports.shuffle = exports.uniqueAdjacentByHashFn = exports.uniqueAdjacentByHash = exports.uniqueAdjacentByOrderFn = exports.uniqueAdjacentByOrder = exports.uniqueAdjacentByEqualityFn = exports.uniqueAdjacentByEquality = exports.uniqueAdjacentByIdentityFn = exports.uniqueAdjacentByIdentity = exports.uniqueAdjacentFn = exports.uniqueAdjacent = exports.uniqueByOrderWithHashFn = exports.uniqueByOrderWithHash = exports.uniqueByEqualityWithHashFn = exports.uniqueByEqualityWithHash = exports.uniqueByIdentityWithHashFn = exports.uniqueByIdentityWithHash = exports.uniqueByHashFn = exports.uniqueByHash = exports.uniqueByOrderFn = exports.uniqueByOrder = exports.uniqueByEqualityFn = void 0;
|
|
7
8
|
var dictionary_1 = require("@softwareventures/dictionary");
|
|
8
9
|
var nullable_1 = require("@softwareventures/nullable");
|
|
9
10
|
var ordered_1 = require("@softwareventures/ordered");
|
|
@@ -44,10 +45,14 @@ function coerce(array) {
|
|
|
44
45
|
return exports.isArray(array) ? array : exports.copy(array);
|
|
45
46
|
}
|
|
46
47
|
exports.coerce = coerce;
|
|
47
|
-
function
|
|
48
|
+
function first(array) {
|
|
48
49
|
return array.length === 0 ? null : array[0];
|
|
49
50
|
}
|
|
50
|
-
exports.
|
|
51
|
+
exports.first = first;
|
|
52
|
+
/** @internal This implementation is for internal use only, the exported declaration is above */
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
54
|
+
// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.
|
|
55
|
+
var head = first;
|
|
51
56
|
function tail(array) {
|
|
52
57
|
return nativeSlice.call(array, 1);
|
|
53
58
|
}
|
|
@@ -60,10 +65,20 @@ function last(array) {
|
|
|
60
65
|
return array.length === 0 ? null : array[array.length - 1];
|
|
61
66
|
}
|
|
62
67
|
exports.last = last;
|
|
68
|
+
/** If the array contains exactly one element, returns that element.
|
|
69
|
+
* Otherwise, returns null. */
|
|
70
|
+
function only(array) {
|
|
71
|
+
return array.length === 1 ? array[0] : null;
|
|
72
|
+
}
|
|
73
|
+
exports.only = only;
|
|
63
74
|
function empty(array) {
|
|
64
75
|
return array.length === 0;
|
|
65
76
|
}
|
|
66
77
|
exports.empty = empty;
|
|
78
|
+
function notEmpty(array) {
|
|
79
|
+
return array.length > 0;
|
|
80
|
+
}
|
|
81
|
+
exports.notEmpty = notEmpty;
|
|
67
82
|
function reverse(array) {
|
|
68
83
|
var result = exports.copy({ length: array.length });
|
|
69
84
|
for (var i = 0; i < array.length; ++i) {
|
|
@@ -108,6 +123,14 @@ function takeWhileFn(predicate) {
|
|
|
108
123
|
return function (array) { return takeWhile(array, predicate); };
|
|
109
124
|
}
|
|
110
125
|
exports.takeWhileFn = takeWhileFn;
|
|
126
|
+
function takeUntil(array, predicate) {
|
|
127
|
+
return takeWhile(array, function (element, index) { return !predicate(element, index); });
|
|
128
|
+
}
|
|
129
|
+
exports.takeUntil = takeUntil;
|
|
130
|
+
function takeUntilFn(predicate) {
|
|
131
|
+
return function (array) { return takeUntil(array, predicate); };
|
|
132
|
+
}
|
|
133
|
+
exports.takeUntilFn = takeUntilFn;
|
|
111
134
|
function dropWhile(array, predicate) {
|
|
112
135
|
var i = 0;
|
|
113
136
|
while (i < array.length && predicate(array[i], i)) {
|
|
@@ -120,6 +143,63 @@ function dropWhileFn(predicate) {
|
|
|
120
143
|
return function (array) { return dropWhile(array, predicate); };
|
|
121
144
|
}
|
|
122
145
|
exports.dropWhileFn = dropWhileFn;
|
|
146
|
+
function dropUntil(array, predicate) {
|
|
147
|
+
return dropWhile(array, function (element, index) { return !predicate(element, index); });
|
|
148
|
+
}
|
|
149
|
+
exports.dropUntil = dropUntil;
|
|
150
|
+
function dropUntilFn(predicate) {
|
|
151
|
+
return function (array) { return dropWhile(array, predicate); };
|
|
152
|
+
}
|
|
153
|
+
exports.dropUntilFn = dropUntilFn;
|
|
154
|
+
function equal(a, b, elementsEqual) {
|
|
155
|
+
if (elementsEqual === void 0) { elementsEqual = defaultEqual; }
|
|
156
|
+
if (a.length !== b.length) {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
for (var i = 0; i < a.length; ++i) {
|
|
160
|
+
if (!elementsEqual(a[i], b[i])) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
exports.equal = equal;
|
|
167
|
+
function equalFn(b, elementsEqual) {
|
|
168
|
+
if (elementsEqual === void 0) { elementsEqual = defaultEqual; }
|
|
169
|
+
return function (a) { return equal(a, b, elementsEqual); };
|
|
170
|
+
}
|
|
171
|
+
exports.equalFn = equalFn;
|
|
172
|
+
function notEqual(a, b, elementsEqual) {
|
|
173
|
+
if (elementsEqual === void 0) { elementsEqual = defaultEqual; }
|
|
174
|
+
return !equal(a, b, elementsEqual);
|
|
175
|
+
}
|
|
176
|
+
exports.notEqual = notEqual;
|
|
177
|
+
function notEqualFn(b, elementsEqual) {
|
|
178
|
+
if (elementsEqual === void 0) { elementsEqual = defaultEqual; }
|
|
179
|
+
return function (a) { return notEqual(a, b, elementsEqual); };
|
|
180
|
+
}
|
|
181
|
+
exports.notEqualFn = notEqualFn;
|
|
182
|
+
function prefixMatch(a, b, elementsEqual) {
|
|
183
|
+
if (elementsEqual === void 0) { elementsEqual = defaultEqual; }
|
|
184
|
+
if (a.length < b.length) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
for (var i = 0; i < b.length; ++i) {
|
|
188
|
+
if (a[i] !== b[i]) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
exports.prefixMatch = prefixMatch;
|
|
195
|
+
function prefixMatchFn(b, elementsEqual) {
|
|
196
|
+
if (elementsEqual === void 0) { elementsEqual = defaultEqual; }
|
|
197
|
+
return function (a) { return prefixMatch(a, b, elementsEqual); };
|
|
198
|
+
}
|
|
199
|
+
exports.prefixMatchFn = prefixMatchFn;
|
|
200
|
+
function defaultEqual(a, b) {
|
|
201
|
+
return a === b;
|
|
202
|
+
}
|
|
123
203
|
/** @internal This implementation is for internal use only, the exported declaration is above */
|
|
124
204
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
125
205
|
// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.
|
|
@@ -138,6 +218,8 @@ function filterFn(predicate) {
|
|
|
138
218
|
return function (array) { return filter(array, predicate); };
|
|
139
219
|
}
|
|
140
220
|
exports.filterFn = filterFn;
|
|
221
|
+
/** @deprecated This function is confusing, use {@link excludeFirst} instead,
|
|
222
|
+
* and invert the predicate. */
|
|
141
223
|
function filterFirst(array, predicate) {
|
|
142
224
|
var result = [];
|
|
143
225
|
var i = 0;
|
|
@@ -156,6 +238,8 @@ function filterFirst(array, predicate) {
|
|
|
156
238
|
return result;
|
|
157
239
|
}
|
|
158
240
|
exports.filterFirst = filterFirst;
|
|
241
|
+
/** @deprecated This function is confusing, use {@link excludeFirstFn} instead,
|
|
242
|
+
* and invert the predicate. */
|
|
159
243
|
function filterFirstFn(predicate) {
|
|
160
244
|
return function (array) { return filterFirst(array, predicate); };
|
|
161
245
|
}
|
|
@@ -270,6 +354,19 @@ function indexOfFn(value) {
|
|
|
270
354
|
return function (array) { return indexOf(array, value); };
|
|
271
355
|
}
|
|
272
356
|
exports.indexOfFn = indexOfFn;
|
|
357
|
+
function lastIndexOf(array, value) {
|
|
358
|
+
for (var i = array.length - 1; i >= 0; --i) {
|
|
359
|
+
if (array[i] === value) {
|
|
360
|
+
return i;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
exports.lastIndexOf = lastIndexOf;
|
|
366
|
+
function lastIndexOfFn(value) {
|
|
367
|
+
return function (array) { return lastIndexOf(array, value); };
|
|
368
|
+
}
|
|
369
|
+
exports.lastIndexOfFn = lastIndexOfFn;
|
|
273
370
|
/** @internal This implementation is for internal use only, the exported declaration is above */
|
|
274
371
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
275
372
|
// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.
|
|
@@ -290,6 +387,19 @@ function findIndexFn(predicate) {
|
|
|
290
387
|
return function (array) { return exports.findIndex(array, predicate); };
|
|
291
388
|
}
|
|
292
389
|
exports.findIndexFn = findIndexFn;
|
|
390
|
+
function findLastIndex(array, predicate) {
|
|
391
|
+
for (var i = array.length - 1; i >= 0; --i) {
|
|
392
|
+
if (predicate(array[i], i)) {
|
|
393
|
+
return i;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return null;
|
|
397
|
+
}
|
|
398
|
+
exports.findLastIndex = findLastIndex;
|
|
399
|
+
function findLastIndexFn(predicate) {
|
|
400
|
+
return function (array) { return findLastIndex(array, predicate); };
|
|
401
|
+
}
|
|
402
|
+
exports.findLastIndexFn = findLastIndexFn;
|
|
293
403
|
function find(array, predicate) {
|
|
294
404
|
var index = exports.findIndex(array, predicate);
|
|
295
405
|
return index == null ? null : array[index];
|
|
@@ -299,6 +409,20 @@ function findFn(predicate) {
|
|
|
299
409
|
return function (array) { return find(array, predicate); };
|
|
300
410
|
}
|
|
301
411
|
exports.findFn = findFn;
|
|
412
|
+
function findLast(array, predicate) {
|
|
413
|
+
for (var i = array.length - 1; i >= 0; --i) {
|
|
414
|
+
var element = array[i];
|
|
415
|
+
if (predicate(element, i)) {
|
|
416
|
+
return element;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
return null;
|
|
420
|
+
}
|
|
421
|
+
exports.findLast = findLast;
|
|
422
|
+
function findLastFn(predicate) {
|
|
423
|
+
return function (array) { return findLast(array, predicate); };
|
|
424
|
+
}
|
|
425
|
+
exports.findLastFn = findLastFn;
|
|
302
426
|
function maximum(array, compare) {
|
|
303
427
|
if (compare === void 0) { compare = ordered_1.compare; }
|
|
304
428
|
return internalMaximum(array, compare);
|
|
@@ -321,6 +445,14 @@ function internalMaximum(array, compare) {
|
|
|
321
445
|
}
|
|
322
446
|
return result;
|
|
323
447
|
}
|
|
448
|
+
function maximumBy(array, select) {
|
|
449
|
+
return maximum(array, function (a, b) { return ordered_1.compare(select(a), select(b)); });
|
|
450
|
+
}
|
|
451
|
+
exports.maximumBy = maximumBy;
|
|
452
|
+
function maximumByFn(select) {
|
|
453
|
+
return function (array) { return maximumBy(array, select); };
|
|
454
|
+
}
|
|
455
|
+
exports.maximumByFn = maximumByFn;
|
|
324
456
|
function minimum(array, compare) {
|
|
325
457
|
if (compare === void 0) { compare = ordered_1.compare; }
|
|
326
458
|
return internalMinimum(array, compare);
|
|
@@ -343,6 +475,14 @@ function internalMinimum(array, compare) {
|
|
|
343
475
|
}
|
|
344
476
|
return result;
|
|
345
477
|
}
|
|
478
|
+
function minimumBy(array, select) {
|
|
479
|
+
return minimum(array, function (a, b) { return ordered_1.compare(select(a), select(b)); });
|
|
480
|
+
}
|
|
481
|
+
exports.minimumBy = minimumBy;
|
|
482
|
+
function minimumByFn(select) {
|
|
483
|
+
return function (array) { return minimumBy(array, select); };
|
|
484
|
+
}
|
|
485
|
+
exports.minimumByFn = minimumByFn;
|
|
346
486
|
function sum(array) {
|
|
347
487
|
return fold(array, function (a, b) { return a + b; }, 0);
|
|
348
488
|
}
|
|
@@ -351,6 +491,15 @@ function product(array) {
|
|
|
351
491
|
return fold(array, function (a, b) { return a * b; }, 1);
|
|
352
492
|
}
|
|
353
493
|
exports.product = product;
|
|
494
|
+
function average(array) {
|
|
495
|
+
if (array.length === 0) {
|
|
496
|
+
return null;
|
|
497
|
+
}
|
|
498
|
+
else {
|
|
499
|
+
return sum(array) / array.length;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
exports.average = average;
|
|
354
503
|
function and(array) {
|
|
355
504
|
return exports.findIndex(array, function (element) { return !element; }) == null;
|
|
356
505
|
}
|
|
@@ -458,6 +607,21 @@ function scanRight1Fn(f) {
|
|
|
458
607
|
return function (array) { return scanRight1(array, f); };
|
|
459
608
|
}
|
|
460
609
|
exports.scanRight1Fn = scanRight1Fn;
|
|
610
|
+
/** Splits the array at the specified index.
|
|
611
|
+
*
|
|
612
|
+
* Returns a tuple where the first element is the first `index` elements of the
|
|
613
|
+
* array, and the second element is the remaining elements of the array. */
|
|
614
|
+
function split(array, index) {
|
|
615
|
+
return [take(array, index), drop(array, index)];
|
|
616
|
+
}
|
|
617
|
+
exports.split = split;
|
|
618
|
+
/** Returns a function that splits an array at the specified index.
|
|
619
|
+
*
|
|
620
|
+
* This is the curried form of {@link split}. */
|
|
621
|
+
function splitFn(index) {
|
|
622
|
+
return function (array) { return split(array, index); };
|
|
623
|
+
}
|
|
624
|
+
exports.splitFn = splitFn;
|
|
461
625
|
function partition(array, predicate) {
|
|
462
626
|
var a = [];
|
|
463
627
|
var b = [];
|
|
@@ -490,6 +654,37 @@ function partitionWhileFn(predicate) {
|
|
|
490
654
|
return function (array) { return partitionWhile(array, predicate); };
|
|
491
655
|
}
|
|
492
656
|
exports.partitionWhileFn = partitionWhileFn;
|
|
657
|
+
function partitionUntil(array, predicate) {
|
|
658
|
+
return partitionWhile(array, function (element) { return !predicate(element); });
|
|
659
|
+
}
|
|
660
|
+
exports.partitionUntil = partitionUntil;
|
|
661
|
+
function partitionUntilFn(predicate) {
|
|
662
|
+
return function (array) { return partitionUntil(array, predicate); };
|
|
663
|
+
}
|
|
664
|
+
exports.partitionUntilFn = partitionUntilFn;
|
|
665
|
+
/** Takes two arrays and returns an array of corresponding pairs.
|
|
666
|
+
*
|
|
667
|
+
* If one of the supplied arrays is shorter than the other, then the excess
|
|
668
|
+
* elements of the longer array will be discarded. */
|
|
669
|
+
function zip(a, b) {
|
|
670
|
+
var result = [];
|
|
671
|
+
for (var i = 0; i < a.length && i < b.length; ++i) {
|
|
672
|
+
result.push([a[i], b[i]]);
|
|
673
|
+
}
|
|
674
|
+
return result;
|
|
675
|
+
}
|
|
676
|
+
exports.zip = zip;
|
|
677
|
+
/** Returns a function that combines the elements of `a` with the elements of
|
|
678
|
+
* `b` and returns an array of corresponding pairs.
|
|
679
|
+
*
|
|
680
|
+
* If one of the supplied arrays is shorter than the other, then the excess
|
|
681
|
+
* elements of the longer array will be discarded.
|
|
682
|
+
*
|
|
683
|
+
* This is the curried variant of {@link zip}. */
|
|
684
|
+
function zipFn(b) {
|
|
685
|
+
return function (a) { return zip(a, b); };
|
|
686
|
+
}
|
|
687
|
+
exports.zipFn = zipFn;
|
|
493
688
|
function keyBy(array, f) {
|
|
494
689
|
var result = dictionary_1.dictionary();
|
|
495
690
|
for (var i = 0; i < array.length; ++i) {
|
|
@@ -1020,6 +1215,30 @@ function shuffle(array) {
|
|
|
1020
1215
|
return result;
|
|
1021
1216
|
}
|
|
1022
1217
|
exports.shuffle = shuffle;
|
|
1218
|
+
function sort(array, comparator) {
|
|
1219
|
+
return exports.copy(array).sort(comparator !== null && comparator !== void 0 ? comparator : ordered_1.compare);
|
|
1220
|
+
}
|
|
1221
|
+
exports.sort = sort;
|
|
1222
|
+
function sortFn(comparator) {
|
|
1223
|
+
return function (array) { return sort(array, comparator); };
|
|
1224
|
+
}
|
|
1225
|
+
exports.sortFn = sortFn;
|
|
1226
|
+
function sortBy(array, select) {
|
|
1227
|
+
return sort(array, function (a, b) { return ordered_1.compare(select(a), select(b)); });
|
|
1228
|
+
}
|
|
1229
|
+
exports.sortBy = sortBy;
|
|
1230
|
+
function sortByFn(select) {
|
|
1231
|
+
return function (array) { return sortBy(array, select); };
|
|
1232
|
+
}
|
|
1233
|
+
exports.sortByFn = sortByFn;
|
|
1234
|
+
function sortByDescending(array, select) {
|
|
1235
|
+
return sort(array, function (a, b) { return -ordered_1.compare(select(a), select(b)); });
|
|
1236
|
+
}
|
|
1237
|
+
exports.sortByDescending = sortByDescending;
|
|
1238
|
+
function sortByDescendingFn(select) {
|
|
1239
|
+
return function (array) { return sortByDescending(array, select); };
|
|
1240
|
+
}
|
|
1241
|
+
exports.sortByDescendingFn = sortByDescendingFn;
|
|
1023
1242
|
function forEach(array, f) {
|
|
1024
1243
|
for (var i = 0; i < array.length; ++i) {
|
|
1025
1244
|
f(array[i], i);
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import {dictionary} from \"@softwareventures/dictionary\";\nimport {isNotNull, isNull} from \"@softwareventures/nullable\";\nimport {Comparator, compare as defaultCompare, Comparison} from \"@softwareventures/ordered\";\nimport {Dictionary, Key} from \"dictionary-types\";\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeSlice = Array.prototype.slice;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeConcat = Array.prototype.concat;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeMap = Array.prototype.map;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeFilter = Array.prototype.filter;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeReduce = Array.prototype.reduce;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeReduceRight = Array.prototype.reduceRight;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeIndexOf = Array.prototype.indexOf;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeFindIndex = Array.prototype.findIndex;\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function copy<T>(array: ArrayLike<T>): T[];\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const copy: <T>(array: ArrayLike<T>) => T[] =\n Array.from ?? (array => nativeSlice.call(array));\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString as (this: object) => string;\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function isArray<T = unknown>(value: readonly T[] | unknown): value is readonly T[];\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const isArray: (value: any) => value is any[] =\n Array.isArray ?? (((value: any) => toString.call(value) === \"[object Array]\") as any);\n\nexport function isArrayLike<T>(value: ArrayLike<T> | unknown): value is ArrayLike<T> {\n return (\n typeof value === \"object\" &&\n value != null &&\n \"length\" in value &&\n typeof (value as {length: unknown}).length === \"number\"\n );\n}\n\nexport function coerce<T>(array: ArrayLike<T>): readonly T[] {\n return isArray(array) ? array : copy(array);\n}\n\nexport function head<T>(array: ArrayLike<T>): T | null {\n return array.length === 0 ? null : array[0];\n}\n\nexport function tail<T>(array: ArrayLike<T>): T[] {\n return nativeSlice.call(array, 1);\n}\n\nexport function initial<T>(array: ArrayLike<T>): T[] {\n return array.length === 0 ? [] : nativeSlice.call(array, 0, array.length - 1);\n}\n\nexport function last<T>(array: ArrayLike<T>): T | null {\n return array.length === 0 ? null : array[array.length - 1];\n}\n\nexport function empty<T>(array: ArrayLike<T>): boolean {\n return array.length === 0;\n}\n\nexport function reverse<T>(array: ArrayLike<T>): T[] {\n const result = copy<T>({length: array.length});\n for (let i = 0; i < array.length; ++i) {\n result[i] = array[array.length - i - 1];\n }\n return result;\n}\n\nexport function slice<T>(array: ArrayLike<T>, start?: number, end?: number): T[] {\n return nativeSlice.call(array, start, end);\n}\n\nexport function sliceFn<T>(start?: number, end?: number): (array: ArrayLike<T>) => T[] {\n return array => nativeSlice.call(array, start, end);\n}\n\nexport function take<T>(array: ArrayLike<T>, count: number): T[] {\n return nativeSlice.call(array, 0, count);\n}\n\nexport function takeFn<T>(count: number): (array: ArrayLike<T>) => T[] {\n return array => nativeSlice.call(array, 0, count);\n}\n\nexport function drop<T>(array: ArrayLike<T>, count: number): T[] {\n return nativeSlice.call(array, count);\n}\n\nexport function dropFn<T>(count: number): (array: ArrayLike<T>) => T[] {\n return array => nativeSlice.call(array, count);\n}\n\nexport function takeWhile<T, U extends T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => element is U\n): U[];\nexport function takeWhile<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[];\nexport function takeWhile<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n let i = 0;\n while (i < array.length && predicate(array[i], i)) {\n ++i;\n }\n return take(array, i);\n}\n\nexport function takeWhileFn<T, U extends T>(\n predicate: (element: T, index: number) => element is U\n): (array: ArrayLike<T>) => U[];\nexport function takeWhileFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[];\nexport function takeWhileFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => takeWhile(array, predicate);\n}\n\nexport function dropWhile<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n let i = 0;\n while (i < array.length && predicate(array[i], i)) {\n ++i;\n }\n return drop(array, i);\n}\n\nexport function dropWhileFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => dropWhile(array, predicate);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function map<T, U>(array: ArrayLike<T>, f: (element: T, index: number) => U): U[];\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const map: <T, U>(array: ArrayLike<T>, f: (element: T, index: number) => U) => U[] =\n Array.from != null\n ? (Array.from as any) // TypeScript 3.2 incorrectly requires this cast to any.\n : (array, f) => nativeMap.call(array, f);\n\nexport function mapFn<T, U>(f: (element: T, index: number) => U): (array: ArrayLike<T>) => U[] {\n return array => map(array, f);\n}\n\nexport function filter<T, U extends T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => element is U\n): U[];\nexport function filter<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[];\nexport function filter<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n return nativeFilter.call(array, predicate);\n}\n\nexport function filterFn<T, U extends T>(\n predicate: (element: T, index: number) => element is U\n): (array: ArrayLike<T>) => U[];\nexport function filterFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[];\nexport function filterFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => filter(array, predicate);\n}\n\nexport function filterFirst<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n const result = [];\n let i = 0;\n for (; i < array.length; ++i) {\n const element = array[i];\n if (predicate(element, i)) {\n result.push(element);\n } else {\n break;\n }\n }\n for (++i; i < array.length; ++i) {\n result.push(array[i]);\n }\n return result;\n}\n\nexport function filterFirstFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => filterFirst(array, predicate);\n}\n\nexport function exclude<T, U>(\n array: ArrayLike<T | U>,\n predicate: (element: T | U) => element is T\n): U[];\nexport function exclude<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[];\nexport function exclude<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n return filter(array, (element, index) => !predicate(element, index));\n}\n\nexport function excludeFn<T, U>(\n predicate: (element: T | U) => element is T\n): (array: ArrayLike<T | U>) => T[];\nexport function excludeFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[];\nexport function excludeFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => exclude(array, predicate);\n}\n\nexport function excludeNull<T>(array: ArrayLike<T | null | undefined>): T[] {\n return filter(array, isNotNull);\n}\n\nexport function excludeFirst<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n return filterFirst(array, (element, index) => !predicate(element, index));\n}\n\nexport function excludeFirstFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => excludeFirst(array, predicate);\n}\n\nexport function remove<T>(array: ArrayLike<T>, value: T): T[] {\n return exclude(array, element => element === value);\n}\n\nexport function removeFn<T>(value: T): (array: ArrayLike<T>) => T[] {\n return array => remove(array, value);\n}\n\nexport function removeFirst<T>(array: ArrayLike<T>, value: T): T[] {\n return excludeFirst(array, element => element === value);\n}\n\nexport function removeFirstFn<T>(value: T): (array: ArrayLike<T>) => T[] {\n return array => removeFirst(array, value);\n}\n\nexport function fold<T, U>(\n array: ArrayLike<T>,\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): U {\n return (nativeReduce as (...args: any[]) => any).call(array, f, initial);\n}\n\nexport function foldFn<T, U>(\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): (array: ArrayLike<T>) => U {\n return array => (nativeReduce as (...args: any[]) => any).call(array, f, initial);\n}\n\nexport function fold1<T>(\n array: ArrayLike<T>,\n f: (accumulator: T, element: T, index: number) => T\n): T {\n return (nativeReduce as (...args: any[]) => any).call(array, f);\n}\n\nexport function fold1Fn<T>(\n f: (accumulator: T, element: T, index: number) => T\n): (array: ArrayLike<T>) => T {\n return array => fold1(array, f);\n}\n\nexport function foldRight<T, U>(\n array: ArrayLike<T>,\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): U {\n return (nativeReduceRight as (...args: any[]) => any).call(array, f, initial);\n}\n\nexport function foldRightFn<T, U>(\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): (array: ArrayLike<T>) => U {\n return array => (nativeReduceRight as (...args: any[]) => any).call(array, f, initial);\n}\n\nexport function foldRight1<T>(\n array: ArrayLike<T>,\n f: (accumulator: T, element: T, index: number) => T\n): T {\n return (nativeReduceRight as (...args: any[]) => any).call(array, f);\n}\n\nexport function foldRight1Fn<T>(\n f: (accumulator: T, element: T, index: number) => T\n): (array: ArrayLike<T>) => T {\n return array => foldRight1(array, f);\n}\n\nexport function foldMap<T, U>(\n array: ArrayLike<T>,\n f: (accumulator: U, element: U, index: number) => U,\n m: (element: T, index: number) => U,\n initial: U\n): U {\n let accumulator = initial;\n for (let i = 0; i < array.length; ++i) {\n accumulator = f(accumulator, m(array[i], i), i);\n }\n\n return accumulator;\n}\n\nexport function foldMapFn<T, U>(\n f: (accumulator: U, element: U, index: number) => U,\n m: (element: T, index: number) => U,\n initial: U\n): (array: ArrayLike<T>) => U {\n return array => foldMap(array, f, m, initial);\n}\n\nexport function foldMapRight<T, U>(\n array: ArrayLike<T>,\n f: (accumulator: U, element: U, index: number) => U,\n m: (element: T, index: number) => U,\n initial: U\n): U {\n let accumulator = initial;\n const length = array.length;\n for (let i = 0; i < array.length; ++i) {\n accumulator = f(accumulator, m(array[length - i], i), i);\n }\n\n return accumulator;\n}\n\nexport function foldMapRightFn<T, U>(\n f: (accumulator: U, element: U, index: number) => U,\n m: (element: T, index: number) => U,\n initial: U\n): (array: ArrayLike<T>) => U {\n return array => foldMapRight(array, f, m, initial);\n}\n\nexport function contains<T>(array: ArrayLike<T>, value: T): boolean {\n return nativeIndexOf.call(array, value) !== -1;\n}\n\nexport function containsFn<T>(value: T): (array: ArrayLike<T>) => boolean {\n return array => nativeIndexOf.call(array, value) !== -1;\n}\n\nexport function indexOf<T>(array: ArrayLike<T>, value: T): number | null {\n const index = nativeIndexOf.call(array, value);\n return index === -1 ? null : index;\n}\n\nexport function indexOfFn<T>(value: T): (array: ArrayLike<T>) => number | null {\n return array => indexOf(array, value);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function findIndex<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): number | null;\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const findIndex: <T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n) => number | null =\n nativeFindIndex == null\n ? (array, predicate) => {\n for (let i = 0; i < array.length; ++i) {\n if (predicate(array[i], i)) {\n return i;\n }\n }\n return null;\n }\n : (array, predicate) => {\n const index = nativeFindIndex.call(array, predicate);\n return index === -1 ? null : index;\n };\n\nexport function findIndexFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => number | null {\n return array => findIndex(array, predicate);\n}\n\nexport function find<T, U extends T>(\n array: ArrayLike<T>,\n predicate: (element: T) => element is U\n): U | null;\nexport function find<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T | null;\nexport function find<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T | null {\n const index = findIndex(array, predicate);\n return index == null ? null : array[index];\n}\n\nexport function findFn<T, U extends T>(\n predicate: (element: T) => element is U\n): (array: ArrayLike<T>) => U | null;\nexport function findFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T | null;\nexport function findFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T | null {\n return array => find(array, predicate);\n}\n\nexport function maximum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;\nexport function maximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;\nexport function maximum<T>(\n array: ArrayLike<T>,\n compare: Comparator<any> = defaultCompare\n): T | null {\n return internalMaximum(array, compare);\n}\n\nexport function maximumFn<T extends string | number | boolean>(): (array: ArrayLike<T>) => T | null;\nexport function maximumFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T | null;\nexport function maximumFn<T>(\n compare: Comparator<any> = defaultCompare\n): (array: ArrayLike<T>) => T | null {\n return array => internalMaximum(array, compare);\n}\n\nfunction internalMaximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null {\n if (array.length === 0) {\n return null;\n }\n\n let result = array[0];\n\n for (let i = 1; i < array.length; ++i) {\n if (compare(array[i], result) > 0) {\n result = array[i];\n }\n }\n\n return result;\n}\n\nexport function minimum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;\nexport function minimum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;\nexport function minimum<T>(\n array: ArrayLike<T>,\n compare: Comparator<any> = defaultCompare\n): T | null {\n return internalMinimum(array, compare);\n}\n\nexport function minimumFn<T extends string | number | boolean>(): (array: ArrayLike<T>) => T | null;\nexport function minimumFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T | null;\nexport function minimumFn<T>(\n compare: Comparator<any> = defaultCompare\n): (array: ArrayLike<T>) => T | null {\n return array => internalMinimum(array, compare);\n}\n\nfunction internalMinimum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null {\n if (array.length === 0) {\n return null;\n }\n\n let result = array[0];\n\n for (let i = 1; i < array.length; ++i) {\n if (compare(array[i], result) < 0) {\n result = array[i];\n }\n }\n\n return result;\n}\n\nexport function sum(array: ArrayLike<number>): number {\n return fold(array, (a, b) => a + b, 0);\n}\n\nexport function product(array: ArrayLike<number>): number {\n return fold(array, (a, b) => a * b, 1);\n}\n\nexport function and(array: ArrayLike<boolean>): boolean {\n return findIndex(array, element => !element) == null;\n}\n\nexport function or(array: ArrayLike<boolean>): boolean {\n return findIndex(array, element => !!element) != null;\n}\n\nexport function any<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): boolean {\n return findIndex(array, predicate) != null;\n}\n\nexport function anyFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => boolean {\n return array => any(array, predicate);\n}\n\nexport function all<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): boolean {\n return !any(array, (element, index) => !predicate(element, index));\n}\n\nexport function allFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => boolean {\n return array => all(array, predicate);\n}\n\nexport function concat<T>(arrays: ArrayLike<ArrayLike<T>>): T[] {\n return nativeConcat.apply([], map(arrays, coerce));\n}\n\nexport function prepend<T>(a: ArrayLike<T>): (b: ArrayLike<T>) => T[] {\n return b => concat([a, b]);\n}\n\nexport function append<T>(b: ArrayLike<T>): (a: ArrayLike<T>) => T[] {\n return a => concat([a, b]);\n}\n\nexport function concatMap<T, U>(\n array: ArrayLike<T>,\n f: (element: T, index: number) => ArrayLike<U>\n): U[] {\n return concat(map(array, f));\n}\n\nexport function concatMapFn<T, U>(\n f: (element: T, index: number) => ArrayLike<U>\n): (array: ArrayLike<T>) => U[] {\n return array => concatMap(array, f);\n}\n\nexport function noneNull<T>(array: ArrayLike<T | null>): ArrayLike<T> | null {\n return any(array, isNull) ? null : (array as ArrayLike<T>);\n}\n\nexport function scan<T, U>(\n array: ArrayLike<T>,\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): U[] {\n const result: U[] = copy({length: array.length});\n let accumulator = initial;\n\n for (let i = 0; i < array.length; ++i) {\n result[i] = accumulator = f(accumulator, array[i], i);\n }\n\n return result;\n}\n\nexport function scanFn<T, U>(\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): (array: ArrayLike<T>) => U[] {\n return array => scan(array, f, initial);\n}\n\nexport function scan1<T>(\n array: ArrayLike<T>,\n f: (accumulator: T, element: T, index: number) => T\n): T[] {\n if (array.length === 0) {\n return [];\n }\n\n let accumulator = array[0];\n const result: T[] = copy({0: accumulator, length: array.length});\n\n for (let i = 1; i < array.length; ++i) {\n result[i] = accumulator = f(accumulator, array[i], i);\n }\n\n return result;\n}\n\nexport function scan1Fn<T>(\n f: (accumulator: T, element: T, index: number) => T\n): (array: ArrayLike<T>) => T[] {\n return array => scan1(array, f);\n}\n\nexport function scanRight<T, U>(\n array: ArrayLike<T>,\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): U[] {\n const result: U[] = copy({length: array.length});\n let accumulator = initial;\n\n for (let i = array.length - 1; i >= 0; --i) {\n result[i] = accumulator = f(accumulator, array[i], i);\n }\n\n return result;\n}\n\nexport function scanRightFn<T, U>(\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): (array: ArrayLike<T>) => U[] {\n return array => scanRight(array, f, initial);\n}\n\nexport function scanRight1<T>(\n array: ArrayLike<T>,\n f: (accumulator: T, element: T, index: number) => T\n): T[] {\n if (array.length === 0) {\n return [];\n }\n\n let accumulator = array[array.length - 1];\n const result: T[] = copy({[array.length - 1]: accumulator, length: array.length});\n\n for (let i = array.length - 2; i >= 0; --i) {\n result[i] = accumulator = f(accumulator, array[i], i);\n }\n\n return result;\n}\n\nexport function scanRight1Fn<T>(\n f: (accumulator: T, element: T, index: number) => T\n): (array: ArrayLike<T>) => T[] {\n return array => scanRight1(array, f);\n}\n\nexport function partition<T, U extends T>(\n array: ArrayLike<T>,\n predicate: (element: T) => element is U\n): [U[], Array<Exclude<T, U>>];\nexport function partition<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): [T[], T[]];\nexport function partition<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): [T[], T[]] {\n const a: T[] = [];\n const b: T[] = [];\n\n for (let i = 0; i < array.length; ++i) {\n if (predicate(array[i], i)) {\n a.push(array[i]);\n } else {\n b.push(array[i]);\n }\n }\n\n return [a, b];\n}\n\nexport function partitionFn<T, U extends T>(\n predicate: (element: T) => element is U\n): (array: ArrayLike<T>) => [U[], Array<Exclude<T, U>>];\nexport function partitionFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => [T[], T[]];\nexport function partitionFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => [T[], T[]] {\n return array => partition(array, predicate);\n}\n\nexport function partitionWhile<T, U extends T>(\n array: ArrayLike<T>,\n predicate: (element: T) => element is U\n): [U[], T[]];\nexport function partitionWhile<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): [T[], T[]];\nexport function partitionWhile<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): [T[], T[]] {\n let i;\n for (i = 0; i < array.length; ++i) {\n if (!predicate(array[i], i)) {\n break;\n }\n }\n\n return [take(array, i), drop(array, i)];\n}\n\nexport function partitionWhileFn<T, U extends T>(\n predicate: (element: T) => element is U\n): (array: readonly T[]) => [U[], T[]];\nexport function partitionWhileFn<T>(\n predicate: (element: T) => boolean\n): (array: readonly T[]) => [T[], T[]];\nexport function partitionWhileFn<T>(\n predicate: (element: T) => boolean\n): (array: readonly T[]) => [T[], T[]] {\n return array => partitionWhile(array, predicate);\n}\n\nexport function keyBy<TElement, TKey extends Key>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => TKey\n): Dictionary<TElement[], TKey> {\n const result = dictionary<TElement[], TKey>();\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const key = f(element, i);\n const group = result[key] || [];\n group.push(element);\n result[key] = group;\n }\n\n return result;\n}\n\nexport function keyByFn<TElement, TKey extends Key>(\n f: (element: TElement, index: number) => TKey\n): (array: ArrayLike<TElement>) => Dictionary<TElement[], TKey> {\n return array => keyBy(array, f);\n}\n\nexport function keyFirstBy<TElement, TKey extends Key>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => TKey\n): Dictionary<TElement, TKey> {\n const result = dictionary<TElement, TKey>();\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const key = f(element, i);\n if (!(key in result)) {\n result[key] = element;\n }\n }\n\n return result;\n}\n\nexport function keyFirstByFn<TElement, TKey extends Key>(\n f: (element: TElement, index: number) => TKey\n): (array: ArrayLike<TElement>) => Dictionary<TElement, TKey> {\n return array => keyFirstBy(array, f);\n}\n\nexport function keyLastBy<TElement, TKey extends Key>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => TKey\n): Dictionary<TElement, TKey> {\n const result = dictionary<TElement, TKey>();\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n result[f(element, i)] = element;\n }\n\n return result;\n}\n\nexport function keyLastByFn<TElement, TKey extends Key>(\n f: (element: TElement, index: number) => TKey\n): (array: ArrayLike<TElement>) => Dictionary<TElement, TKey> {\n return array => keyLastBy(array, f);\n}\n\nexport interface IdentityGrouping<T> {\n readonly identity: (element: T) => unknown;\n readonly hash?: (element: T) => Key;\n}\n\nexport interface EqualityGrouping<T> {\n readonly equal: (a: T, b: T) => boolean;\n readonly hash?: (element: T, index: number) => Key;\n}\n\nexport interface OrderedGrouping<T> {\n readonly compare: Comparator<T>;\n readonly hash?: (element: T, index: number) => Key;\n}\n\nexport interface HashGrouping<T> {\n readonly hash: (element: T, index: number) => Key;\n}\n\nexport type Grouping<T> =\n | IdentityGrouping<T>\n | EqualityGrouping<T>\n | OrderedGrouping<T>\n | HashGrouping<T>;\n\nexport function group<T>(array: ArrayLike<T>, grouping: Grouping<T>): T[][] {\n if (\"identity\" in grouping) {\n if (typeof grouping.hash === \"function\") {\n return groupByIdentityWithHash(array, grouping.identity, grouping.hash);\n } else {\n return groupByIdentity(array, grouping.identity);\n }\n } else if (\"compare\" in grouping) {\n if (typeof grouping.hash === \"function\") {\n return groupByOrderWithHash(array, grouping.compare, grouping.hash);\n } else {\n return groupByOrder(array, grouping.compare);\n }\n } else if (\"equal\" in grouping) {\n if (typeof grouping.hash === \"function\") {\n return groupByEqualityWithHash(array, grouping.equal, grouping.hash);\n } else {\n return groupByEquality(array, grouping.equal);\n }\n } else {\n return groupByHash(array, grouping.hash);\n }\n}\n\nexport function groupFn<T>(grouping: Grouping<T>): (array: ArrayLike<T>) => T[][] {\n return array => group(array, grouping);\n}\n\nexport function groupByIdentity<T>(array: ArrayLike<T>, identity?: (element: T) => unknown): T[][] {\n return groupByIdentityInternal(array, identity ?? (element => element));\n}\n\nconst groupByIdentityInternal =\n Map == null\n ? <T>(array: ArrayLike<T>, identity: (element: T) => unknown): T[][] =>\n groupByEquality(array, (a, b) => identity(a) === identity(b))\n : <T>(array: ArrayLike<T>, identity: (element: T) => unknown): T[][] => {\n const groups: T[][] = [];\n const map = new Map<unknown, T[]>();\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const key = identity(element);\n const group = map.get(key) ?? [];\n group.push(element);\n if (!map.has(key)) {\n groups.push(group);\n map.set(key, group);\n }\n }\n return groups;\n };\n\nexport function groupByIdentityFn<T>(\n identity: (element: T) => unknown\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByIdentityInternal(array, identity);\n}\n\nexport function groupByEquality<T>(array: ArrayLike<T>, equal: (a: T, b: T) => boolean): T[][] {\n const result: T[][] = [];\n\n outer: for (let i = 0; i < array.length; ++i) {\n for (let j = 0; j < result.length; ++j) {\n if (equal(result[j][0], array[i])) {\n result[j].push(array[i]);\n continue outer;\n }\n }\n\n result.push([array[i]]);\n }\n\n return result;\n}\n\nexport function groupByEqualityFn<T>(\n equal: (a: T, b: T) => boolean\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByEquality(array, equal);\n}\n\nexport function groupByOrder<T>(array: ArrayLike<T>, compare: Comparator<T>): T[][] {\n // TODO: This could use a binary tree to be way more efficient\n return groupByEquality(array, (a, b) => compare(a, b) === Comparison.equal);\n}\n\nexport function groupByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[][] {\n return array => groupByOrder(array, compare);\n}\n\nexport function groupByHash<T>(\n array: ArrayLike<T>,\n hash: (element: T, index: number) => Key\n): T[][] {\n const groups = dictionary<T[], Key>();\n const result: T[][] = [];\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const h = hash(element, i);\n\n if (h in groups) {\n groups[h as any].push(element); // Cast to any because TypeScript doesn't support symbol indexers yet\n } else {\n const group = [element];\n groups[h as any] = group; // Cast to any because TypeScript doesn't support symbol indexers yet\n result.push(group);\n }\n }\n\n return result;\n}\n\nexport function groupByHashFn<T>(\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByHash(array, hash);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function groupByIdentityWithHash<T>(\n array: ArrayLike<T>,\n identity: (element: T) => unknown,\n hash: (element: T, index: number) => Key\n): T[];\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const groupByIdentityWithHash =\n Map == null\n ? <T>(\n array: ArrayLike<T>,\n identity: (element: T) => unknown,\n hash: (element: T, index: number) => Key\n ): T[][] => groupByEqualityWithHash(array, (a, b) => identity(a) === identity(b), hash)\n : groupByIdentityInternal;\n\nexport function groupByIdentityWithHashFn<T>(\n identity: (element: T) => unknown,\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByIdentityWithHash(array, identity, hash);\n}\n\nexport function groupByEqualityWithHash<T>(\n array: ArrayLike<T>,\n equal: (a: T, b: T) => boolean,\n hash: (element: T, index: number) => Key\n): T[][] {\n const groups = dictionary<T[][], Key>();\n const result: T[][] = [];\n\n outer: for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const h = hash(element, i);\n\n if (h in groups) {\n const hashGroups = groups[h as any]; // Cast to any because TypeScript doesn't support symbol indexers yet\n for (let j = 0; j < hashGroups.length; ++j) {\n if (equal(hashGroups[j][0], element)) {\n hashGroups[j].push(element);\n continue outer;\n }\n }\n\n const group = [element];\n hashGroups.push(group);\n result.push(group);\n } else {\n const group = [element];\n groups[h as any] = [group]; // Cast to any because TypeScript doesn't support symbol indexers yet\n result.push(group);\n }\n }\n\n return result;\n}\n\nexport function groupByEqualityWithHashFn<T>(\n equal: (a: T, b: T) => boolean,\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByEqualityWithHash(array, equal, hash);\n}\n\nexport function groupByOrderWithHash<T>(\n array: ArrayLike<T>,\n compare: Comparator<T>,\n hash: (element: T, index: number) => Key\n): T[][] {\n return groupByEqualityWithHash(array, (a, b) => compare(a, b) === Comparison.equal, hash);\n}\n\nexport function groupByOrderWithHashFn<T>(\n compare: Comparator<T>,\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByOrderWithHash(array, compare, hash);\n}\n\nexport function groupAdjacent<T>(array: ArrayLike<T>, grouping: Grouping<T>): T[][] {\n if (\"identity\" in grouping) {\n return groupAdjacentByIdentity(array, grouping.identity);\n } else if (\"equal\" in grouping) {\n return groupAdjacentByEquality(array, grouping.equal);\n } else if (\"compare\" in grouping) {\n return groupAdjacentByOrder(array, grouping.compare);\n } else {\n return groupByHash(array, grouping.hash);\n }\n}\n\nexport function groupAdjacentFn<T>(grouping: Grouping<T>): (array: ArrayLike<T>) => T[][] {\n return array => groupAdjacent(array, grouping);\n}\n\nexport function groupAdjacentByIdentity<T>(\n array: ArrayLike<T>,\n identity?: (element: T) => unknown\n): T[][] {\n return identity == null\n ? groupAdjacentByEquality(array, (a, b) => a === b)\n : groupAdjacentByEquality(array, (a, b) => identity(a) === identity(b));\n}\n\nexport function groupAdjacentByIdentityFn<T>(\n identity: (element: T) => unknown\n): (array: ArrayLike<T>) => T[][] {\n return array => groupAdjacentByEquality(array, (a, b) => identity(a) === identity(b));\n}\n\nexport function groupAdjacentByEquality<T>(\n array: ArrayLike<T>,\n equal: (a: T, b: T) => boolean\n): T[][] {\n if (array.length === 0) {\n return [];\n }\n\n let element: T = array[0];\n let group: T[] = [element];\n const result: T[][] = [group];\n\n for (let i = 1; i < array.length; ++i) {\n const prev = element;\n element = array[i];\n if (equal(prev, element)) {\n group.push(element);\n } else {\n group = [element];\n result.push(group);\n }\n }\n\n return result;\n}\n\nexport function groupAdjacentByEqualityFn<T>(\n equal: (a: T, b: T) => boolean\n): (array: ArrayLike<T>) => T[][] {\n return array => groupAdjacentByEquality(array, equal);\n}\n\nexport function groupAdjacentByOrder<T>(array: ArrayLike<T>, compare: Comparator<T>): T[][] {\n return groupAdjacentByEquality(array, (a, b) => compare(a, b) === Comparison.equal);\n}\n\nexport function groupAdjacentByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[][] {\n return array => groupAdjacentByOrder(array, compare);\n}\n\nexport function groupAdjacentByHash<T>(\n array: ArrayLike<T>,\n hash: (element: T, index: number) => Key\n): T[][] {\n if (array.length === 0) {\n return [];\n }\n\n const element = array[0];\n let h = hash(element, 0);\n let group: T[] = [element];\n const result: T[][] = [group];\n\n for (let i = 1; i < array.length; ++i) {\n const element = array[i];\n const h1 = hash(element, i);\n if (h === h1) {\n group.push(element);\n } else {\n h = h1;\n group = [element];\n result.push(group);\n }\n }\n\n return result;\n}\n\nexport function groupAdjacentByHashFn<T>(\n hash: (element: T, index: number) => string\n): (array: ArrayLike<T>) => T[][] {\n return array => groupAdjacentByHash(array, hash);\n}\n\nexport function unique<T>(array: ArrayLike<T>, grouping: Grouping<T>): T[] {\n if (\"identity\" in grouping) {\n if (typeof grouping.hash === \"function\") {\n return uniqueByIdentityWithHash(array, grouping.identity, grouping.hash);\n } else {\n return uniqueByIdentityInternal(array, grouping.identity);\n }\n } else if (\"compare\" in grouping) {\n if (typeof grouping.hash === \"function\") {\n return uniqueByOrderWithHash(array, grouping.compare, grouping.hash);\n } else {\n return uniqueByOrder(array, grouping.compare);\n }\n } else if (\"equal\" in grouping) {\n if (typeof grouping.hash === \"function\") {\n return uniqueByEqualityWithHash(array, grouping.equal, grouping.hash);\n } else {\n return uniqueByEquality(array, grouping.equal);\n }\n } else {\n return uniqueByHash(array, grouping.hash);\n }\n}\n\nexport function uniqueFn<T>(grouping: Grouping<T>): (array: ArrayLike<T>) => T[] {\n return array => unique(array, grouping);\n}\n\nexport function uniqueByIdentity<T>(array: ArrayLike<T>, identity?: (element: T) => unknown): T[] {\n return uniqueByIdentityInternal(array, identity ?? (element => element));\n}\n\nconst uniqueByIdentityInternal =\n Set == null\n ? <T>(array: ArrayLike<T>, identity: (element: T) => unknown): T[] =>\n uniqueByEquality(array, (a, b) => identity(a) === identity(b))\n : <T>(array: ArrayLike<T>, identity: (element: T) => unknown): T[] => {\n const seen = new Set<T>();\n const result: T[] = [];\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n if (!seen.has(element)) {\n seen.add(element);\n result.push(element);\n }\n }\n return result;\n };\n\nexport function uniqueByEquality<T>(array: ArrayLike<T>, equal: (a: T, b: T) => boolean): T[] {\n const result: T[] = [];\n\n outer: for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n for (let j = 0; j < result.length; ++j) {\n if (equal(element, result[j])) {\n continue outer;\n }\n }\n result.push(element);\n }\n\n return result;\n}\n\nexport function uniqueByEqualityFn<T>(\n equal: (a: T, b: T) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueByEquality(array, equal);\n}\n\nexport function uniqueByOrder<T>(array: ArrayLike<T>, compare: Comparator<T>): T[] {\n return uniqueByEquality(array, (a, b) => compare(a, b) === Comparison.equal);\n}\n\nexport function uniqueByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[] {\n // TODO: This could use a binary tree to be more efficient\n return array => uniqueByOrder(array, compare);\n}\n\nexport function uniqueByHash<T>(\n array: ArrayLike<T>,\n hash: (element: T, index: number) => Key\n): T[] {\n const seen = dictionary<boolean, Key>();\n const result: T[] = [];\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const h = hash(element, i);\n if (seen[h as any] == null) {\n // Cast to any because TypeScript doesn't support symbol indexers yet\n seen[h as any] = true;\n result.push(element);\n }\n }\n\n return result;\n}\n\nexport function uniqueByHashFn<T>(\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueByHash(array, hash);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function uniqueByIdentityWithHash<T>(\n array: ArrayLike<T>,\n identity: (element: T) => unknown,\n hash: (element: T, index: number) => Key\n): T[];\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const uniqueByIdentityWithHash =\n Set == null\n ? <T>(\n array: ArrayLike<T>,\n identity: (element: T) => unknown,\n hash: (element: T, index: number) => Key\n ): T[] => uniqueByEqualityWithHash(array, (a, b) => identity(a) === identity(b), hash)\n : uniqueByIdentityInternal;\n\nexport function uniqueByIdentityWithHashFn<T>(\n identity: (element: T) => unknown,\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueByIdentityWithHash(array, identity, hash);\n}\n\nexport function uniqueByEqualityWithHash<T>(\n array: ArrayLike<T>,\n equal: (a: T, b: T) => boolean,\n hash: (element: T, index: number) => Key\n): T[] {\n const seenGroups = dictionary<T[], Key>();\n const result: T[] = [];\n\n outer: for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const h = hash(element, i);\n\n const seenGroup = seenGroups[h as any]; // Cast to any because TypeScript doesn't support symbol indexers yet\n if (seenGroup == null) {\n seenGroups[h as any] = [element];\n result.push(element);\n } else {\n for (let j = 0; j < seenGroup.length; ++j) {\n if (equal(seenGroup[j], element)) {\n continue outer;\n }\n }\n\n seenGroup.push(element);\n result.push(element);\n }\n }\n\n return result;\n}\n\nexport function uniqueByEqualityWithHashFn<T>(\n equal: (a: T, b: T) => boolean,\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueByEqualityWithHash(array, equal, hash);\n}\n\nexport function uniqueByOrderWithHash<T>(\n array: ArrayLike<T>,\n compare: Comparator<T>,\n hash: (element: T, index: number) => Key\n): T[] {\n return uniqueByEqualityWithHash(array, (a, b) => compare(a, b) === Comparison.equal, hash);\n}\n\nexport function uniqueByOrderWithHashFn<T>(\n compare: Comparator<T>,\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueByOrderWithHash(array, compare, hash);\n}\n\nexport function uniqueAdjacent<T>(array: ArrayLike<T>, grouping: Grouping<T>): T[] {\n if (\"identity\" in grouping) {\n return uniqueAdjacentByIdentity(array, grouping.identity);\n } else if (\"equal\" in grouping) {\n return uniqueAdjacentByEquality(array, grouping.equal);\n } else if (\"compare\" in grouping) {\n return uniqueAdjacentByOrder(array, grouping.compare);\n } else {\n return uniqueAdjacentByHash(array, grouping.hash);\n }\n}\n\nexport function uniqueAdjacentFn<T>(grouping: Grouping<T>): (array: ArrayLike<T>) => T[] {\n return array => uniqueAdjacent(array, grouping);\n}\n\nexport function uniqueAdjacentByIdentity<T>(\n array: ArrayLike<T>,\n identity?: (element: T) => unknown\n): T[] {\n return identity == null\n ? uniqueAdjacentByEquality(array, (a, b) => a === b)\n : uniqueAdjacentByEquality(array, (a, b) => identity(a) === identity(b));\n}\n\nexport function uniqueAdjacentByIdentityFn<T>(\n identity: (element: T) => unknown\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueAdjacentByIdentity(array, identity);\n}\n\nexport function uniqueAdjacentByEquality<T>(\n array: ArrayLike<T>,\n equal: (a: T, b: T) => boolean\n): T[] {\n if (array.length === 0) {\n return [];\n }\n\n let element: T = array[0];\n const result = [element];\n\n for (let i = 1; i < array.length; ++i) {\n const prev = element;\n element = array[i];\n if (!equal(prev, element)) {\n result.push(element);\n }\n }\n\n return result;\n}\n\nexport function uniqueAdjacentByEqualityFn<T>(\n equal: (a: T, b: T) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueAdjacentByEquality(array, equal);\n}\n\nexport function uniqueAdjacentByOrder<T>(array: ArrayLike<T>, compare: Comparator<T>): T[] {\n return uniqueAdjacentByEquality(array, (a, b) => compare(a, b) === Comparison.equal);\n}\n\nexport function uniqueAdjacentByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[] {\n return array => uniqueAdjacentByOrder(array, compare);\n}\n\nexport function uniqueAdjacentByHash<T>(\n array: ArrayLike<T>,\n hash: (element: T, index: number) => Key\n): T[] {\n if (array.length === 0) {\n return [];\n }\n\n const element = array[0];\n let h = hash(element, 0);\n const result = [element];\n\n for (let i = 1; i < array.length; ++i) {\n const element = array[i];\n const h1 = hash(element, i);\n if (h !== h1) {\n h = h1;\n result.push(element);\n }\n }\n\n return result;\n}\n\nexport function uniqueAdjacentByHashFn<T>(\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueAdjacentByHash(array, hash);\n}\n\nexport function shuffle<T>(array: ArrayLike<T>): T[] {\n const result = copy(array);\n for (let i = 0; i < array.length; ++i) {\n const j = i + Math.floor(Math.random() * (array.length - i));\n const replacement = result[j];\n result[j] = result[i];\n result[i] = replacement;\n }\n return result;\n}\n\nexport function forEach<T>(\n array: ArrayLike<T>,\n f: (element: T, index: number) => void\n): typeof array {\n for (let i = 0; i < array.length; ++i) {\n f(array[i], i);\n }\n return array;\n}\n\nexport function forEachFn<T>(\n f: (element: T, index: number) => void\n): (array: ArrayLike<T>) => typeof array {\n return array => forEach(array, f);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import {dictionary} from \"@softwareventures/dictionary\";\nimport {isNotNull, isNull} from \"@softwareventures/nullable\";\nimport {Comparator, compare as defaultCompare, Comparison} from \"@softwareventures/ordered\";\nimport {Dictionary, Key} from \"dictionary-types\";\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeSlice = Array.prototype.slice;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeConcat = Array.prototype.concat;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeMap = Array.prototype.map;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeFilter = Array.prototype.filter;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeReduce = Array.prototype.reduce;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeReduceRight = Array.prototype.reduceRight;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeIndexOf = Array.prototype.indexOf;\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst nativeFindIndex = Array.prototype.findIndex;\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function copy<T>(array: ArrayLike<T>): T[];\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const copy: <T>(array: ArrayLike<T>) => T[] =\n Array.from ?? (array => nativeSlice.call(array));\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString as (this: object) => string;\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function isArray<T = unknown>(value: readonly T[] | unknown): value is readonly T[];\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const isArray: (value: any) => value is any[] =\n Array.isArray ?? (((value: any) => toString.call(value) === \"[object Array]\") as any);\n\nexport function isArrayLike<T>(value: ArrayLike<T> | unknown): value is ArrayLike<T> {\n return (\n typeof value === \"object\" &&\n value != null &&\n \"length\" in value &&\n typeof (value as {length: unknown}).length === \"number\"\n );\n}\n\nexport function coerce<T>(array: ArrayLike<T>): readonly T[] {\n return isArray(array) ? array : copy(array);\n}\n\nexport function first<T>(array: ArrayLike<T>): T | null {\n return array.length === 0 ? null : array[0];\n}\n\n/** @deprecated Use {@link first} instead. */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function head<T>(array: ArrayLike<T>): T | null;\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nconst head = first;\n\nexport function tail<T>(array: ArrayLike<T>): T[] {\n return nativeSlice.call(array, 1);\n}\n\nexport function initial<T>(array: ArrayLike<T>): T[] {\n return array.length === 0 ? [] : nativeSlice.call(array, 0, array.length - 1);\n}\n\nexport function last<T>(array: ArrayLike<T>): T | null {\n return array.length === 0 ? null : array[array.length - 1];\n}\n\n/** If the array contains exactly one element, returns that element.\n * Otherwise, returns null. */\nexport function only<T>(array: ArrayLike<T>): T | null {\n return array.length === 1 ? array[0] : null;\n}\n\nexport function empty<T>(array: ArrayLike<T>): boolean {\n return array.length === 0;\n}\n\nexport function notEmpty<T>(array: ArrayLike<T>): boolean {\n return array.length > 0;\n}\n\nexport function reverse<T>(array: ArrayLike<T>): T[] {\n const result = copy<T>({length: array.length});\n for (let i = 0; i < array.length; ++i) {\n result[i] = array[array.length - i - 1];\n }\n return result;\n}\n\nexport function slice<T>(array: ArrayLike<T>, start?: number, end?: number): T[] {\n return nativeSlice.call(array, start, end);\n}\n\nexport function sliceFn<T>(start?: number, end?: number): (array: ArrayLike<T>) => T[] {\n return array => nativeSlice.call(array, start, end);\n}\n\nexport function take<T>(array: ArrayLike<T>, count: number): T[] {\n return nativeSlice.call(array, 0, count);\n}\n\nexport function takeFn<T>(count: number): (array: ArrayLike<T>) => T[] {\n return array => nativeSlice.call(array, 0, count);\n}\n\nexport function drop<T>(array: ArrayLike<T>, count: number): T[] {\n return nativeSlice.call(array, count);\n}\n\nexport function dropFn<T>(count: number): (array: ArrayLike<T>) => T[] {\n return array => nativeSlice.call(array, count);\n}\n\nexport function takeWhile<T, U extends T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => element is U\n): U[];\nexport function takeWhile<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[];\nexport function takeWhile<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n let i = 0;\n while (i < array.length && predicate(array[i], i)) {\n ++i;\n }\n return take(array, i);\n}\n\nexport function takeWhileFn<T, U extends T>(\n predicate: (element: T, index: number) => element is U\n): (array: ArrayLike<T>) => U[];\nexport function takeWhileFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[];\nexport function takeWhileFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => takeWhile(array, predicate);\n}\n\nexport function takeUntil<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n return takeWhile(array, (element, index) => !predicate(element, index));\n}\n\nexport function takeUntilFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => takeUntil(array, predicate);\n}\n\nexport function dropWhile<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n let i = 0;\n while (i < array.length && predicate(array[i], i)) {\n ++i;\n }\n return drop(array, i);\n}\n\nexport function dropWhileFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => dropWhile(array, predicate);\n}\n\nexport function dropUntil<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n return dropWhile(array, (element, index) => !predicate(element, index));\n}\n\nexport function dropUntilFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => dropWhile(array, predicate);\n}\n\nexport function equal<T>(\n a: ArrayLike<T>,\n b: ArrayLike<T>,\n elementsEqual: (a: T, b: T) => boolean = defaultEqual\n): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; ++i) {\n if (!elementsEqual(a[i], b[i])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function equalFn<T>(\n b: ArrayLike<T>,\n elementsEqual: (a: T, b: T) => boolean = defaultEqual\n): (a: ArrayLike<T>) => boolean {\n return a => equal(a, b, elementsEqual);\n}\n\nexport function notEqual<T>(\n a: ArrayLike<T>,\n b: ArrayLike<T>,\n elementsEqual: (a: T, b: T) => boolean = defaultEqual\n): boolean {\n return !equal(a, b, elementsEqual);\n}\n\nexport function notEqualFn<T>(\n b: ArrayLike<T>,\n elementsEqual: (a: T, b: T) => boolean = defaultEqual\n): (a: ArrayLike<T>) => boolean {\n return a => notEqual(a, b, elementsEqual);\n}\n\nexport function prefixMatch<T>(\n a: ArrayLike<T>,\n b: ArrayLike<T>,\n elementsEqual: (a: T, b: T) => boolean = defaultEqual\n): boolean {\n if (a.length < b.length) {\n return false;\n }\n\n for (let i = 0; i < b.length; ++i) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function prefixMatchFn<T>(\n b: ArrayLike<T>,\n elementsEqual: (a: T, b: T) => boolean = defaultEqual\n): (a: ArrayLike<T>) => boolean {\n return a => prefixMatch(a, b, elementsEqual);\n}\n\nfunction defaultEqual(a: unknown, b: unknown): boolean {\n return a === b;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function map<T, U>(array: ArrayLike<T>, f: (element: T, index: number) => U): U[];\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const map: <T, U>(array: ArrayLike<T>, f: (element: T, index: number) => U) => U[] =\n Array.from != null\n ? (Array.from as any) // TypeScript 3.2 incorrectly requires this cast to any.\n : (array, f) => nativeMap.call(array, f);\n\nexport function mapFn<T, U>(f: (element: T, index: number) => U): (array: ArrayLike<T>) => U[] {\n return array => map(array, f);\n}\n\nexport function filter<T, U extends T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => element is U\n): U[];\nexport function filter<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[];\nexport function filter<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n return nativeFilter.call(array, predicate);\n}\n\nexport function filterFn<T, U extends T>(\n predicate: (element: T, index: number) => element is U\n): (array: ArrayLike<T>) => U[];\nexport function filterFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[];\nexport function filterFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => filter(array, predicate);\n}\n\n/** @deprecated This function is confusing, use {@link excludeFirst} instead,\n * and invert the predicate. */\nexport function filterFirst<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n const result = [];\n let i = 0;\n for (; i < array.length; ++i) {\n const element = array[i];\n if (predicate(element, i)) {\n result.push(element);\n } else {\n break;\n }\n }\n for (++i; i < array.length; ++i) {\n result.push(array[i]);\n }\n return result;\n}\n\n/** @deprecated This function is confusing, use {@link excludeFirstFn} instead,\n * and invert the predicate. */\nexport function filterFirstFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => filterFirst(array, predicate);\n}\n\nexport function exclude<T, U>(\n array: ArrayLike<T | U>,\n predicate: (element: T | U) => element is T\n): U[];\nexport function exclude<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[];\nexport function exclude<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n return filter(array, (element, index) => !predicate(element, index));\n}\n\nexport function excludeFn<T, U>(\n predicate: (element: T | U) => element is T\n): (array: ArrayLike<T | U>) => T[];\nexport function excludeFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[];\nexport function excludeFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => exclude(array, predicate);\n}\n\nexport function excludeNull<T>(array: ArrayLike<T | null | undefined>): T[] {\n return filter(array, isNotNull);\n}\n\nexport function excludeFirst<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T[] {\n return filterFirst(array, (element, index) => !predicate(element, index));\n}\n\nexport function excludeFirstFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => excludeFirst(array, predicate);\n}\n\nexport function remove<T>(array: ArrayLike<T>, value: T): T[] {\n return exclude(array, element => element === value);\n}\n\nexport function removeFn<T>(value: T): (array: ArrayLike<T>) => T[] {\n return array => remove(array, value);\n}\n\nexport function removeFirst<T>(array: ArrayLike<T>, value: T): T[] {\n return excludeFirst(array, element => element === value);\n}\n\nexport function removeFirstFn<T>(value: T): (array: ArrayLike<T>) => T[] {\n return array => removeFirst(array, value);\n}\n\nexport function fold<T, U>(\n array: ArrayLike<T>,\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): U {\n return (nativeReduce as (...args: any[]) => any).call(array, f, initial);\n}\n\nexport function foldFn<T, U>(\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): (array: ArrayLike<T>) => U {\n return array => (nativeReduce as (...args: any[]) => any).call(array, f, initial);\n}\n\nexport function fold1<T>(\n array: ArrayLike<T>,\n f: (accumulator: T, element: T, index: number) => T\n): T {\n return (nativeReduce as (...args: any[]) => any).call(array, f);\n}\n\nexport function fold1Fn<T>(\n f: (accumulator: T, element: T, index: number) => T\n): (array: ArrayLike<T>) => T {\n return array => fold1(array, f);\n}\n\nexport function foldRight<T, U>(\n array: ArrayLike<T>,\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): U {\n return (nativeReduceRight as (...args: any[]) => any).call(array, f, initial);\n}\n\nexport function foldRightFn<T, U>(\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): (array: ArrayLike<T>) => U {\n return array => (nativeReduceRight as (...args: any[]) => any).call(array, f, initial);\n}\n\nexport function foldRight1<T>(\n array: ArrayLike<T>,\n f: (accumulator: T, element: T, index: number) => T\n): T {\n return (nativeReduceRight as (...args: any[]) => any).call(array, f);\n}\n\nexport function foldRight1Fn<T>(\n f: (accumulator: T, element: T, index: number) => T\n): (array: ArrayLike<T>) => T {\n return array => foldRight1(array, f);\n}\n\nexport function foldMap<T, U>(\n array: ArrayLike<T>,\n f: (accumulator: U, element: U, index: number) => U,\n m: (element: T, index: number) => U,\n initial: U\n): U {\n let accumulator = initial;\n for (let i = 0; i < array.length; ++i) {\n accumulator = f(accumulator, m(array[i], i), i);\n }\n\n return accumulator;\n}\n\nexport function foldMapFn<T, U>(\n f: (accumulator: U, element: U, index: number) => U,\n m: (element: T, index: number) => U,\n initial: U\n): (array: ArrayLike<T>) => U {\n return array => foldMap(array, f, m, initial);\n}\n\nexport function foldMapRight<T, U>(\n array: ArrayLike<T>,\n f: (accumulator: U, element: U, index: number) => U,\n m: (element: T, index: number) => U,\n initial: U\n): U {\n let accumulator = initial;\n const length = array.length;\n for (let i = 0; i < array.length; ++i) {\n accumulator = f(accumulator, m(array[length - i], i), i);\n }\n\n return accumulator;\n}\n\nexport function foldMapRightFn<T, U>(\n f: (accumulator: U, element: U, index: number) => U,\n m: (element: T, index: number) => U,\n initial: U\n): (array: ArrayLike<T>) => U {\n return array => foldMapRight(array, f, m, initial);\n}\n\nexport function contains<T>(array: ArrayLike<T>, value: T): boolean {\n return nativeIndexOf.call(array, value) !== -1;\n}\n\nexport function containsFn<T>(value: T): (array: ArrayLike<T>) => boolean {\n return array => nativeIndexOf.call(array, value) !== -1;\n}\n\nexport function indexOf<T>(array: ArrayLike<T>, value: T): number | null {\n const index = nativeIndexOf.call(array, value);\n return index === -1 ? null : index;\n}\n\nexport function indexOfFn<T>(value: T): (array: ArrayLike<T>) => number | null {\n return array => indexOf(array, value);\n}\n\nexport function lastIndexOf<T>(array: ArrayLike<T>, value: T): number | null {\n for (let i = array.length - 1; i >= 0; --i) {\n if (array[i] === value) {\n return i;\n }\n }\n return null;\n}\n\nexport function lastIndexOfFn<T>(value: T): (array: ArrayLike<T>) => number | null {\n return array => lastIndexOf(array, value);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function findIndex<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): number | null;\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const findIndex: <T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n) => number | null =\n nativeFindIndex == null\n ? (array, predicate) => {\n for (let i = 0; i < array.length; ++i) {\n if (predicate(array[i], i)) {\n return i;\n }\n }\n return null;\n }\n : (array, predicate) => {\n const index = nativeFindIndex.call(array, predicate);\n return index === -1 ? null : index;\n };\n\nexport function findIndexFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => number | null {\n return array => findIndex(array, predicate);\n}\n\nexport function findLastIndex<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): number | null {\n for (let i = array.length - 1; i >= 0; --i) {\n if (predicate(array[i], i)) {\n return i;\n }\n }\n return null;\n}\n\nexport function findLastIndexFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => number | null {\n return array => findLastIndex(array, predicate);\n}\n\nexport function find<T, U extends T>(\n array: ArrayLike<T>,\n predicate: (element: T) => element is U\n): U | null;\nexport function find<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T | null;\nexport function find<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T | null {\n const index = findIndex(array, predicate);\n return index == null ? null : array[index];\n}\n\nexport function findFn<T, U extends T>(\n predicate: (element: T) => element is U\n): (array: ArrayLike<T>) => U | null;\nexport function findFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T | null;\nexport function findFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T | null {\n return array => find(array, predicate);\n}\n\nexport function findLast<T, U extends T>(\n array: ArrayLike<T>,\n predicate: (element: T) => element is U\n): U | null;\nexport function findLast<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T | null;\nexport function findLast<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): T | null {\n for (let i = array.length - 1; i >= 0; --i) {\n const element = array[i];\n if (predicate(element, i)) {\n return element;\n }\n }\n return null;\n}\n\nexport function findLastFn<T, U extends T>(\n predicate: (element: T) => element is U\n): (array: ArrayLike<T>) => U | null;\nexport function findLastFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T | null;\nexport function findLastFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => T | null {\n return array => findLast(array, predicate);\n}\n\nexport function maximum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;\nexport function maximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;\nexport function maximum<T>(\n array: ArrayLike<T>,\n compare: Comparator<any> = defaultCompare\n): T | null {\n return internalMaximum(array, compare);\n}\n\nexport function maximumFn<T extends string | number | boolean>(): (array: ArrayLike<T>) => T | null;\nexport function maximumFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T | null;\nexport function maximumFn<T>(\n compare: Comparator<any> = defaultCompare\n): (array: ArrayLike<T>) => T | null {\n return array => internalMaximum(array, compare);\n}\n\nfunction internalMaximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null {\n if (array.length === 0) {\n return null;\n }\n\n let result = array[0];\n\n for (let i = 1; i < array.length; ++i) {\n if (compare(array[i], result) > 0) {\n result = array[i];\n }\n }\n\n return result;\n}\n\nexport function maximumBy<T>(array: ArrayLike<T>, select: (element: T) => number): T | null {\n return maximum(array, (a, b) => defaultCompare(select(a), select(b)));\n}\n\nexport function maximumByFn<T>(select: (element: T) => number): (array: ArrayLike<T>) => T | null {\n return array => maximumBy(array, select);\n}\n\nexport function minimum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;\nexport function minimum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;\nexport function minimum<T>(\n array: ArrayLike<T>,\n compare: Comparator<any> = defaultCompare\n): T | null {\n return internalMinimum(array, compare);\n}\n\nexport function minimumFn<T extends string | number | boolean>(): (array: ArrayLike<T>) => T | null;\nexport function minimumFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T | null;\nexport function minimumFn<T>(\n compare: Comparator<any> = defaultCompare\n): (array: ArrayLike<T>) => T | null {\n return array => internalMinimum(array, compare);\n}\n\nfunction internalMinimum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null {\n if (array.length === 0) {\n return null;\n }\n\n let result = array[0];\n\n for (let i = 1; i < array.length; ++i) {\n if (compare(array[i], result) < 0) {\n result = array[i];\n }\n }\n\n return result;\n}\n\nexport function minimumBy<T>(array: ArrayLike<T>, select: (element: T) => number): T | null {\n return minimum(array, (a, b) => defaultCompare(select(a), select(b)));\n}\n\nexport function minimumByFn<T>(select: (element: T) => number): (array: ArrayLike<T>) => T | null {\n return array => minimumBy(array, select);\n}\n\nexport function sum(array: ArrayLike<number>): number {\n return fold(array, (a, b) => a + b, 0);\n}\n\nexport function product(array: ArrayLike<number>): number {\n return fold(array, (a, b) => a * b, 1);\n}\n\nexport function average(array: ArrayLike<number>): number | null {\n if (array.length === 0) {\n return null;\n } else {\n return sum(array) / array.length;\n }\n}\n\nexport function and(array: ArrayLike<boolean>): boolean {\n return findIndex(array, element => !element) == null;\n}\n\nexport function or(array: ArrayLike<boolean>): boolean {\n return findIndex(array, element => !!element) != null;\n}\n\nexport function any<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): boolean {\n return findIndex(array, predicate) != null;\n}\n\nexport function anyFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => boolean {\n return array => any(array, predicate);\n}\n\nexport function all<T, U extends T>(\n array: readonly T[],\n predicate: (element: T, index: number) => element is U\n): array is readonly U[];\nexport function all<T, U extends T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => element is U\n): array is ArrayLike<U>;\nexport function all<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): boolean;\nexport function all<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): boolean {\n return !any(array, (element, index) => !predicate(element, index));\n}\n\nexport function allFn<T, U extends T>(\n predicate: (element: T, index: number) => element is U\n): (array: ArrayLike<T>) => array is ArrayLike<U>;\nexport function allFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => boolean;\nexport function allFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => boolean {\n return array => all(array, predicate);\n}\n\nexport function concat<T>(arrays: ArrayLike<ArrayLike<T>>): T[] {\n return nativeConcat.apply([], map(arrays, coerce));\n}\n\nexport function prepend<T>(a: ArrayLike<T>): (b: ArrayLike<T>) => T[] {\n return b => concat([a, b]);\n}\n\nexport function append<T>(b: ArrayLike<T>): (a: ArrayLike<T>) => T[] {\n return a => concat([a, b]);\n}\n\nexport function concatMap<T, U>(\n array: ArrayLike<T>,\n f: (element: T, index: number) => ArrayLike<U>\n): U[] {\n return concat(map(array, f));\n}\n\nexport function concatMapFn<T, U>(\n f: (element: T, index: number) => ArrayLike<U>\n): (array: ArrayLike<T>) => U[] {\n return array => concatMap(array, f);\n}\n\nexport function noneNull<T>(array: ArrayLike<T | null>): ArrayLike<T> | null {\n return any(array, isNull) ? null : (array as ArrayLike<T>);\n}\n\nexport function scan<T, U>(\n array: ArrayLike<T>,\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): U[] {\n const result: U[] = copy({length: array.length});\n let accumulator = initial;\n\n for (let i = 0; i < array.length; ++i) {\n result[i] = accumulator = f(accumulator, array[i], i);\n }\n\n return result;\n}\n\nexport function scanFn<T, U>(\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): (array: ArrayLike<T>) => U[] {\n return array => scan(array, f, initial);\n}\n\nexport function scan1<T>(\n array: ArrayLike<T>,\n f: (accumulator: T, element: T, index: number) => T\n): T[] {\n if (array.length === 0) {\n return [];\n }\n\n let accumulator = array[0];\n const result: T[] = copy({0: accumulator, length: array.length});\n\n for (let i = 1; i < array.length; ++i) {\n result[i] = accumulator = f(accumulator, array[i], i);\n }\n\n return result;\n}\n\nexport function scan1Fn<T>(\n f: (accumulator: T, element: T, index: number) => T\n): (array: ArrayLike<T>) => T[] {\n return array => scan1(array, f);\n}\n\nexport function scanRight<T, U>(\n array: ArrayLike<T>,\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): U[] {\n const result: U[] = copy({length: array.length});\n let accumulator = initial;\n\n for (let i = array.length - 1; i >= 0; --i) {\n result[i] = accumulator = f(accumulator, array[i], i);\n }\n\n return result;\n}\n\nexport function scanRightFn<T, U>(\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n): (array: ArrayLike<T>) => U[] {\n return array => scanRight(array, f, initial);\n}\n\nexport function scanRight1<T>(\n array: ArrayLike<T>,\n f: (accumulator: T, element: T, index: number) => T\n): T[] {\n if (array.length === 0) {\n return [];\n }\n\n let accumulator = array[array.length - 1];\n const result: T[] = copy({[array.length - 1]: accumulator, length: array.length});\n\n for (let i = array.length - 2; i >= 0; --i) {\n result[i] = accumulator = f(accumulator, array[i], i);\n }\n\n return result;\n}\n\nexport function scanRight1Fn<T>(\n f: (accumulator: T, element: T, index: number) => T\n): (array: ArrayLike<T>) => T[] {\n return array => scanRight1(array, f);\n}\n\n/** Splits the array at the specified index.\n *\n * Returns a tuple where the first element is the first `index` elements of the\n * array, and the second element is the remaining elements of the array. */\nexport function split<T>(array: readonly T[], index: number): [T[], T[]] {\n return [take(array, index), drop(array, index)];\n}\n\n/** Returns a function that splits an array at the specified index.\n *\n * This is the curried form of {@link split}. */\nexport function splitFn<T>(index: number): (array: readonly T[]) => [T[], T[]] {\n return array => split(array, index);\n}\n\nexport function partition<T, U extends T>(\n array: ArrayLike<T>,\n predicate: (element: T) => element is U\n): [U[], Array<Exclude<T, U>>];\nexport function partition<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): [T[], T[]];\nexport function partition<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): [T[], T[]] {\n const a: T[] = [];\n const b: T[] = [];\n\n for (let i = 0; i < array.length; ++i) {\n if (predicate(array[i], i)) {\n a.push(array[i]);\n } else {\n b.push(array[i]);\n }\n }\n\n return [a, b];\n}\n\nexport function partitionFn<T, U extends T>(\n predicate: (element: T) => element is U\n): (array: ArrayLike<T>) => [U[], Array<Exclude<T, U>>];\nexport function partitionFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => [T[], T[]];\nexport function partitionFn<T>(\n predicate: (element: T, index: number) => boolean\n): (array: ArrayLike<T>) => [T[], T[]] {\n return array => partition(array, predicate);\n}\n\nexport function partitionWhile<T, U extends T>(\n array: ArrayLike<T>,\n predicate: (element: T) => element is U\n): [U[], T[]];\nexport function partitionWhile<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): [T[], T[]];\nexport function partitionWhile<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): [T[], T[]] {\n let i;\n for (i = 0; i < array.length; ++i) {\n if (!predicate(array[i], i)) {\n break;\n }\n }\n\n return [take(array, i), drop(array, i)];\n}\n\nexport function partitionWhileFn<T, U extends T>(\n predicate: (element: T) => element is U\n): (array: readonly T[]) => [U[], T[]];\nexport function partitionWhileFn<T>(\n predicate: (element: T) => boolean\n): (array: readonly T[]) => [T[], T[]];\nexport function partitionWhileFn<T>(\n predicate: (element: T) => boolean\n): (array: readonly T[]) => [T[], T[]] {\n return array => partitionWhile(array, predicate);\n}\n\nexport function partitionUntil<T>(\n array: ArrayLike<T>,\n predicate: (element: T) => boolean\n): [T[], T[]] {\n return partitionWhile(array, element => !predicate(element));\n}\n\nexport function partitionUntilFn<T>(\n predicate: (element: T) => boolean\n): (array: ArrayLike<T>) => [T[], T[]] {\n return array => partitionUntil(array, predicate);\n}\n\n/** Takes two arrays and returns an array of corresponding pairs.\n *\n * If one of the supplied arrays is shorter than the other, then the excess\n * elements of the longer array will be discarded. */\nexport function zip<T, U>(a: readonly T[], b: readonly U[]): Array<[T, U]> {\n const result: Array<[T, U]> = [];\n for (let i = 0; i < a.length && i < b.length; ++i) {\n result.push([a[i], b[i]]);\n }\n return result;\n}\n\n/** Returns a function that combines the elements of `a` with the elements of\n * `b` and returns an array of corresponding pairs.\n *\n * If one of the supplied arrays is shorter than the other, then the excess\n * elements of the longer array will be discarded.\n *\n * This is the curried variant of {@link zip}. */\nexport function zipFn<T, U>(b: readonly U[]): (a: readonly T[]) => Array<[T, U]> {\n return a => zip(a, b);\n}\n\nexport function keyBy<TElement, TKey extends Key>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => TKey\n): Dictionary<TElement[], TKey> {\n const result = dictionary<TElement[], TKey>();\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const key = f(element, i);\n const group = result[key] || [];\n group.push(element);\n result[key] = group;\n }\n\n return result;\n}\n\nexport function keyByFn<TElement, TKey extends Key>(\n f: (element: TElement, index: number) => TKey\n): (array: ArrayLike<TElement>) => Dictionary<TElement[], TKey> {\n return array => keyBy(array, f);\n}\n\nexport function keyFirstBy<TElement, TKey extends Key>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => TKey\n): Dictionary<TElement, TKey> {\n const result = dictionary<TElement, TKey>();\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const key = f(element, i);\n if (!(key in result)) {\n result[key] = element;\n }\n }\n\n return result;\n}\n\nexport function keyFirstByFn<TElement, TKey extends Key>(\n f: (element: TElement, index: number) => TKey\n): (array: ArrayLike<TElement>) => Dictionary<TElement, TKey> {\n return array => keyFirstBy(array, f);\n}\n\nexport function keyLastBy<TElement, TKey extends Key>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => TKey\n): Dictionary<TElement, TKey> {\n const result = dictionary<TElement, TKey>();\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n result[f(element, i)] = element;\n }\n\n return result;\n}\n\nexport function keyLastByFn<TElement, TKey extends Key>(\n f: (element: TElement, index: number) => TKey\n): (array: ArrayLike<TElement>) => Dictionary<TElement, TKey> {\n return array => keyLastBy(array, f);\n}\n\nexport interface IdentityGrouping<T> {\n readonly identity: (element: T) => unknown;\n readonly hash?: (element: T) => Key;\n}\n\nexport interface EqualityGrouping<T> {\n readonly equal: (a: T, b: T) => boolean;\n readonly hash?: (element: T, index: number) => Key;\n}\n\nexport interface OrderedGrouping<T> {\n readonly compare: Comparator<T>;\n readonly hash?: (element: T, index: number) => Key;\n}\n\nexport interface HashGrouping<T> {\n readonly hash: (element: T, index: number) => Key;\n}\n\nexport type Grouping<T> =\n | IdentityGrouping<T>\n | EqualityGrouping<T>\n | OrderedGrouping<T>\n | HashGrouping<T>;\n\nexport function group<T>(array: ArrayLike<T>, grouping: Grouping<T>): T[][] {\n if (\"identity\" in grouping) {\n if (typeof grouping.hash === \"function\") {\n return groupByIdentityWithHash(array, grouping.identity, grouping.hash);\n } else {\n return groupByIdentity(array, grouping.identity);\n }\n } else if (\"compare\" in grouping) {\n if (typeof grouping.hash === \"function\") {\n return groupByOrderWithHash(array, grouping.compare, grouping.hash);\n } else {\n return groupByOrder(array, grouping.compare);\n }\n } else if (\"equal\" in grouping) {\n if (typeof grouping.hash === \"function\") {\n return groupByEqualityWithHash(array, grouping.equal, grouping.hash);\n } else {\n return groupByEquality(array, grouping.equal);\n }\n } else {\n return groupByHash(array, grouping.hash);\n }\n}\n\nexport function groupFn<T>(grouping: Grouping<T>): (array: ArrayLike<T>) => T[][] {\n return array => group(array, grouping);\n}\n\nexport function groupByIdentity<T>(array: ArrayLike<T>, identity?: (element: T) => unknown): T[][] {\n return groupByIdentityInternal(array, identity ?? (element => element));\n}\n\nconst groupByIdentityInternal =\n Map == null\n ? <T>(array: ArrayLike<T>, identity: (element: T) => unknown): T[][] =>\n groupByEquality(array, (a, b) => identity(a) === identity(b))\n : <T>(array: ArrayLike<T>, identity: (element: T) => unknown): T[][] => {\n const groups: T[][] = [];\n const map = new Map<unknown, T[]>();\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const key = identity(element);\n const group = map.get(key) ?? [];\n group.push(element);\n if (!map.has(key)) {\n groups.push(group);\n map.set(key, group);\n }\n }\n return groups;\n };\n\nexport function groupByIdentityFn<T>(\n identity: (element: T) => unknown\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByIdentityInternal(array, identity);\n}\n\nexport function groupByEquality<T>(array: ArrayLike<T>, equal: (a: T, b: T) => boolean): T[][] {\n const result: T[][] = [];\n\n outer: for (let i = 0; i < array.length; ++i) {\n for (let j = 0; j < result.length; ++j) {\n if (equal(result[j][0], array[i])) {\n result[j].push(array[i]);\n continue outer;\n }\n }\n\n result.push([array[i]]);\n }\n\n return result;\n}\n\nexport function groupByEqualityFn<T>(\n equal: (a: T, b: T) => boolean\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByEquality(array, equal);\n}\n\nexport function groupByOrder<T>(array: ArrayLike<T>, compare: Comparator<T>): T[][] {\n // TODO: This could use a binary tree to be way more efficient\n return groupByEquality(array, (a, b) => compare(a, b) === Comparison.equal);\n}\n\nexport function groupByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[][] {\n return array => groupByOrder(array, compare);\n}\n\nexport function groupByHash<T>(\n array: ArrayLike<T>,\n hash: (element: T, index: number) => Key\n): T[][] {\n const groups = dictionary<T[], Key>();\n const result: T[][] = [];\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const h = hash(element, i);\n\n if (h in groups) {\n groups[h as any].push(element); // Cast to any because TypeScript doesn't support symbol indexers yet\n } else {\n const group = [element];\n groups[h as any] = group; // Cast to any because TypeScript doesn't support symbol indexers yet\n result.push(group);\n }\n }\n\n return result;\n}\n\nexport function groupByHashFn<T>(\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByHash(array, hash);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function groupByIdentityWithHash<T>(\n array: ArrayLike<T>,\n identity: (element: T) => unknown,\n hash: (element: T, index: number) => Key\n): T[];\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const groupByIdentityWithHash =\n Map == null\n ? <T>(\n array: ArrayLike<T>,\n identity: (element: T) => unknown,\n hash: (element: T, index: number) => Key\n ): T[][] => groupByEqualityWithHash(array, (a, b) => identity(a) === identity(b), hash)\n : groupByIdentityInternal;\n\nexport function groupByIdentityWithHashFn<T>(\n identity: (element: T) => unknown,\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByIdentityWithHash(array, identity, hash);\n}\n\nexport function groupByEqualityWithHash<T>(\n array: ArrayLike<T>,\n equal: (a: T, b: T) => boolean,\n hash: (element: T, index: number) => Key\n): T[][] {\n const groups = dictionary<T[][], Key>();\n const result: T[][] = [];\n\n outer: for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const h = hash(element, i);\n\n if (h in groups) {\n const hashGroups = groups[h as any]; // Cast to any because TypeScript doesn't support symbol indexers yet\n for (let j = 0; j < hashGroups.length; ++j) {\n if (equal(hashGroups[j][0], element)) {\n hashGroups[j].push(element);\n continue outer;\n }\n }\n\n const group = [element];\n hashGroups.push(group);\n result.push(group);\n } else {\n const group = [element];\n groups[h as any] = [group]; // Cast to any because TypeScript doesn't support symbol indexers yet\n result.push(group);\n }\n }\n\n return result;\n}\n\nexport function groupByEqualityWithHashFn<T>(\n equal: (a: T, b: T) => boolean,\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByEqualityWithHash(array, equal, hash);\n}\n\nexport function groupByOrderWithHash<T>(\n array: ArrayLike<T>,\n compare: Comparator<T>,\n hash: (element: T, index: number) => Key\n): T[][] {\n return groupByEqualityWithHash(array, (a, b) => compare(a, b) === Comparison.equal, hash);\n}\n\nexport function groupByOrderWithHashFn<T>(\n compare: Comparator<T>,\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByOrderWithHash(array, compare, hash);\n}\n\nexport function groupAdjacent<T>(array: ArrayLike<T>, grouping: Grouping<T>): T[][] {\n if (\"identity\" in grouping) {\n return groupAdjacentByIdentity(array, grouping.identity);\n } else if (\"equal\" in grouping) {\n return groupAdjacentByEquality(array, grouping.equal);\n } else if (\"compare\" in grouping) {\n return groupAdjacentByOrder(array, grouping.compare);\n } else {\n return groupByHash(array, grouping.hash);\n }\n}\n\nexport function groupAdjacentFn<T>(grouping: Grouping<T>): (array: ArrayLike<T>) => T[][] {\n return array => groupAdjacent(array, grouping);\n}\n\nexport function groupAdjacentByIdentity<T>(\n array: ArrayLike<T>,\n identity?: (element: T) => unknown\n): T[][] {\n return identity == null\n ? groupAdjacentByEquality(array, (a, b) => a === b)\n : groupAdjacentByEquality(array, (a, b) => identity(a) === identity(b));\n}\n\nexport function groupAdjacentByIdentityFn<T>(\n identity: (element: T) => unknown\n): (array: ArrayLike<T>) => T[][] {\n return array => groupAdjacentByEquality(array, (a, b) => identity(a) === identity(b));\n}\n\nexport function groupAdjacentByEquality<T>(\n array: ArrayLike<T>,\n equal: (a: T, b: T) => boolean\n): T[][] {\n if (array.length === 0) {\n return [];\n }\n\n let element: T = array[0];\n let group: T[] = [element];\n const result: T[][] = [group];\n\n for (let i = 1; i < array.length; ++i) {\n const prev = element;\n element = array[i];\n if (equal(prev, element)) {\n group.push(element);\n } else {\n group = [element];\n result.push(group);\n }\n }\n\n return result;\n}\n\nexport function groupAdjacentByEqualityFn<T>(\n equal: (a: T, b: T) => boolean\n): (array: ArrayLike<T>) => T[][] {\n return array => groupAdjacentByEquality(array, equal);\n}\n\nexport function groupAdjacentByOrder<T>(array: ArrayLike<T>, compare: Comparator<T>): T[][] {\n return groupAdjacentByEquality(array, (a, b) => compare(a, b) === Comparison.equal);\n}\n\nexport function groupAdjacentByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[][] {\n return array => groupAdjacentByOrder(array, compare);\n}\n\nexport function groupAdjacentByHash<T>(\n array: ArrayLike<T>,\n hash: (element: T, index: number) => Key\n): T[][] {\n if (array.length === 0) {\n return [];\n }\n\n const element = array[0];\n let h = hash(element, 0);\n let group: T[] = [element];\n const result: T[][] = [group];\n\n for (let i = 1; i < array.length; ++i) {\n const element = array[i];\n const h1 = hash(element, i);\n if (h === h1) {\n group.push(element);\n } else {\n h = h1;\n group = [element];\n result.push(group);\n }\n }\n\n return result;\n}\n\nexport function groupAdjacentByHashFn<T>(\n hash: (element: T, index: number) => string\n): (array: ArrayLike<T>) => T[][] {\n return array => groupAdjacentByHash(array, hash);\n}\n\nexport function unique<T>(array: ArrayLike<T>, grouping: Grouping<T>): T[] {\n if (\"identity\" in grouping) {\n if (typeof grouping.hash === \"function\") {\n return uniqueByIdentityWithHash(array, grouping.identity, grouping.hash);\n } else {\n return uniqueByIdentityInternal(array, grouping.identity);\n }\n } else if (\"compare\" in grouping) {\n if (typeof grouping.hash === \"function\") {\n return uniqueByOrderWithHash(array, grouping.compare, grouping.hash);\n } else {\n return uniqueByOrder(array, grouping.compare);\n }\n } else if (\"equal\" in grouping) {\n if (typeof grouping.hash === \"function\") {\n return uniqueByEqualityWithHash(array, grouping.equal, grouping.hash);\n } else {\n return uniqueByEquality(array, grouping.equal);\n }\n } else {\n return uniqueByHash(array, grouping.hash);\n }\n}\n\nexport function uniqueFn<T>(grouping: Grouping<T>): (array: ArrayLike<T>) => T[] {\n return array => unique(array, grouping);\n}\n\nexport function uniqueByIdentity<T>(array: ArrayLike<T>, identity?: (element: T) => unknown): T[] {\n return uniqueByIdentityInternal(array, identity ?? (element => element));\n}\n\nconst uniqueByIdentityInternal =\n Set == null\n ? <T>(array: ArrayLike<T>, identity: (element: T) => unknown): T[] =>\n uniqueByEquality(array, (a, b) => identity(a) === identity(b))\n : <T>(array: ArrayLike<T>, identity: (element: T) => unknown): T[] => {\n const seen = new Set<T>();\n const result: T[] = [];\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n if (!seen.has(element)) {\n seen.add(element);\n result.push(element);\n }\n }\n return result;\n };\n\nexport function uniqueByEquality<T>(array: ArrayLike<T>, equal: (a: T, b: T) => boolean): T[] {\n const result: T[] = [];\n\n outer: for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n for (let j = 0; j < result.length; ++j) {\n if (equal(element, result[j])) {\n continue outer;\n }\n }\n result.push(element);\n }\n\n return result;\n}\n\nexport function uniqueByEqualityFn<T>(\n equal: (a: T, b: T) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueByEquality(array, equal);\n}\n\nexport function uniqueByOrder<T>(array: ArrayLike<T>, compare: Comparator<T>): T[] {\n return uniqueByEquality(array, (a, b) => compare(a, b) === Comparison.equal);\n}\n\nexport function uniqueByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[] {\n // TODO: This could use a binary tree to be more efficient\n return array => uniqueByOrder(array, compare);\n}\n\nexport function uniqueByHash<T>(\n array: ArrayLike<T>,\n hash: (element: T, index: number) => Key\n): T[] {\n const seen = dictionary<boolean, Key>();\n const result: T[] = [];\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const h = hash(element, i);\n if (seen[h as any] == null) {\n // Cast to any because TypeScript doesn't support symbol indexers yet\n seen[h as any] = true;\n result.push(element);\n }\n }\n\n return result;\n}\n\nexport function uniqueByHashFn<T>(\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueByHash(array, hash);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function uniqueByIdentityWithHash<T>(\n array: ArrayLike<T>,\n identity: (element: T) => unknown,\n hash: (element: T, index: number) => Key\n): T[];\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const uniqueByIdentityWithHash =\n Set == null\n ? <T>(\n array: ArrayLike<T>,\n identity: (element: T) => unknown,\n hash: (element: T, index: number) => Key\n ): T[] => uniqueByEqualityWithHash(array, (a, b) => identity(a) === identity(b), hash)\n : uniqueByIdentityInternal;\n\nexport function uniqueByIdentityWithHashFn<T>(\n identity: (element: T) => unknown,\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueByIdentityWithHash(array, identity, hash);\n}\n\nexport function uniqueByEqualityWithHash<T>(\n array: ArrayLike<T>,\n equal: (a: T, b: T) => boolean,\n hash: (element: T, index: number) => Key\n): T[] {\n const seenGroups = dictionary<T[], Key>();\n const result: T[] = [];\n\n outer: for (let i = 0; i < array.length; ++i) {\n const element = array[i];\n const h = hash(element, i);\n\n const seenGroup = seenGroups[h as any]; // Cast to any because TypeScript doesn't support symbol indexers yet\n if (seenGroup == null) {\n seenGroups[h as any] = [element];\n result.push(element);\n } else {\n for (let j = 0; j < seenGroup.length; ++j) {\n if (equal(seenGroup[j], element)) {\n continue outer;\n }\n }\n\n seenGroup.push(element);\n result.push(element);\n }\n }\n\n return result;\n}\n\nexport function uniqueByEqualityWithHashFn<T>(\n equal: (a: T, b: T) => boolean,\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueByEqualityWithHash(array, equal, hash);\n}\n\nexport function uniqueByOrderWithHash<T>(\n array: ArrayLike<T>,\n compare: Comparator<T>,\n hash: (element: T, index: number) => Key\n): T[] {\n return uniqueByEqualityWithHash(array, (a, b) => compare(a, b) === Comparison.equal, hash);\n}\n\nexport function uniqueByOrderWithHashFn<T>(\n compare: Comparator<T>,\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueByOrderWithHash(array, compare, hash);\n}\n\nexport function uniqueAdjacent<T>(array: ArrayLike<T>, grouping: Grouping<T>): T[] {\n if (\"identity\" in grouping) {\n return uniqueAdjacentByIdentity(array, grouping.identity);\n } else if (\"equal\" in grouping) {\n return uniqueAdjacentByEquality(array, grouping.equal);\n } else if (\"compare\" in grouping) {\n return uniqueAdjacentByOrder(array, grouping.compare);\n } else {\n return uniqueAdjacentByHash(array, grouping.hash);\n }\n}\n\nexport function uniqueAdjacentFn<T>(grouping: Grouping<T>): (array: ArrayLike<T>) => T[] {\n return array => uniqueAdjacent(array, grouping);\n}\n\nexport function uniqueAdjacentByIdentity<T>(\n array: ArrayLike<T>,\n identity?: (element: T) => unknown\n): T[] {\n return identity == null\n ? uniqueAdjacentByEquality(array, (a, b) => a === b)\n : uniqueAdjacentByEquality(array, (a, b) => identity(a) === identity(b));\n}\n\nexport function uniqueAdjacentByIdentityFn<T>(\n identity: (element: T) => unknown\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueAdjacentByIdentity(array, identity);\n}\n\nexport function uniqueAdjacentByEquality<T>(\n array: ArrayLike<T>,\n equal: (a: T, b: T) => boolean\n): T[] {\n if (array.length === 0) {\n return [];\n }\n\n let element: T = array[0];\n const result = [element];\n\n for (let i = 1; i < array.length; ++i) {\n const prev = element;\n element = array[i];\n if (!equal(prev, element)) {\n result.push(element);\n }\n }\n\n return result;\n}\n\nexport function uniqueAdjacentByEqualityFn<T>(\n equal: (a: T, b: T) => boolean\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueAdjacentByEquality(array, equal);\n}\n\nexport function uniqueAdjacentByOrder<T>(array: ArrayLike<T>, compare: Comparator<T>): T[] {\n return uniqueAdjacentByEquality(array, (a, b) => compare(a, b) === Comparison.equal);\n}\n\nexport function uniqueAdjacentByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[] {\n return array => uniqueAdjacentByOrder(array, compare);\n}\n\nexport function uniqueAdjacentByHash<T>(\n array: ArrayLike<T>,\n hash: (element: T, index: number) => Key\n): T[] {\n if (array.length === 0) {\n return [];\n }\n\n const element = array[0];\n let h = hash(element, 0);\n const result = [element];\n\n for (let i = 1; i < array.length; ++i) {\n const element = array[i];\n const h1 = hash(element, i);\n if (h !== h1) {\n h = h1;\n result.push(element);\n }\n }\n\n return result;\n}\n\nexport function uniqueAdjacentByHashFn<T>(\n hash: (element: T, index: number) => Key\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueAdjacentByHash(array, hash);\n}\n\nexport function shuffle<T>(array: ArrayLike<T>): T[] {\n const result = copy(array);\n for (let i = 0; i < array.length; ++i) {\n const j = i + Math.floor(Math.random() * (array.length - i));\n const replacement = result[j];\n result[j] = result[i];\n result[i] = replacement;\n }\n return result;\n}\n\nexport function sort(array: ArrayLike<boolean>): boolean[];\nexport function sort(array: ArrayLike<number>): number[];\nexport function sort(array: ArrayLike<string>): string[];\nexport function sort<T>(array: ArrayLike<T>, comparator: Comparator<T>): T[];\nexport function sort<T>(array: ArrayLike<T>, comparator?: Comparator<T>): T[] {\n return copy(array).sort(comparator ?? (defaultCompare as any));\n}\n\nexport function sortFn<T>(comparator: Comparator<T>): (array: ArrayLike<T>) => T[] {\n return array => sort(array, comparator);\n}\n\nexport function sortBy<T>(array: ArrayLike<T>, select: SortSelect<T>): T[] {\n return sort(array, (a, b) => defaultCompare(select(a) as any, select(b) as any));\n}\n\nexport function sortByFn<T>(select: SortSelect<T>): (array: ArrayLike<T>) => T[] {\n return array => sortBy(array, select);\n}\n\nexport function sortByDescending<T>(array: ArrayLike<T>, select: SortSelect<T>): T[] {\n return sort(array, (a, b) => -defaultCompare(select(a) as any, select(b) as any));\n}\n\nexport function sortByDescendingFn<T>(select: SortSelect<T>): (array: ArrayLike<T>) => T[] {\n return array => sortByDescending(array, select);\n}\n\nexport type SortSelect<T> =\n | ((element: T) => boolean)\n | ((element: T) => number)\n | ((element: T) => string);\n\nexport function forEach<T>(\n array: ArrayLike<T>,\n f: (element: T, index: number) => void\n): typeof array {\n for (let i = 0; i < array.length; ++i) {\n f(array[i], i);\n }\n return array;\n}\n\nexport function forEachFn<T>(\n f: (element: T, index: number) => void\n): (array: ArrayLike<T>) => typeof array {\n return array => forEach(array, f);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softwareventures/array",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.11.0",
|
|
4
4
|
"description": "Pure functional array manipulation and traversal",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"array",
|
|
@@ -22,21 +22,21 @@
|
|
|
22
22
|
},
|
|
23
23
|
"sideEffects": false,
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@softwareventures/eslint-config": "3.
|
|
25
|
+
"@softwareventures/eslint-config": "3.6.0",
|
|
26
26
|
"@softwareventures/prettier-config": "1.0.2",
|
|
27
27
|
"@softwareventures/semantic-release-config": "1.1.1",
|
|
28
28
|
"@softwareventures/tsconfig": "2.3.3",
|
|
29
29
|
"ava": "3.15.0",
|
|
30
30
|
"cz-conventional-changelog": "3.3.0",
|
|
31
|
-
"eslint": "7.
|
|
31
|
+
"eslint": "7.24.0",
|
|
32
32
|
"prettier": "2.2.1",
|
|
33
|
-
"semantic-release": "17.4.
|
|
33
|
+
"semantic-release": "17.4.2",
|
|
34
34
|
"ts-node": "9.1.1",
|
|
35
|
-
"typescript": "4.2.
|
|
35
|
+
"typescript": "4.2.4"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@softwareventures/dictionary": "^0.6.0 || ^0.7.0 || ^0.8.0",
|
|
39
|
-
"@softwareventures/nullable": "^1.0.0",
|
|
39
|
+
"@softwareventures/nullable": "^1.0.0 || ^1.2.1",
|
|
40
40
|
"@softwareventures/ordered": "^0.2.0",
|
|
41
41
|
"dictionary-types": "^1.2.0",
|
|
42
42
|
"tslib": "^1.9.3 || ^2.0.0"
|