@softwareventures/array 3.10.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 CHANGED
@@ -4,10 +4,15 @@ 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;
12
17
  export declare function notEmpty<T>(array: ArrayLike<T>): boolean;
13
18
  export declare function reverse<T>(array: ArrayLike<T>): T[];
@@ -21,15 +26,29 @@ export declare function takeWhile<T, U extends T>(array: ArrayLike<T>, predicate
21
26
  export declare function takeWhile<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
22
27
  export declare function takeWhileFn<T, U extends T>(predicate: (element: T, index: number) => element is U): (array: ArrayLike<T>) => U[];
23
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[];
24
31
  export declare function dropWhile<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
25
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;
26
41
  export declare function map<T, U>(array: ArrayLike<T>, f: (element: T, index: number) => U): U[];
27
42
  export declare function mapFn<T, U>(f: (element: T, index: number) => U): (array: ArrayLike<T>) => U[];
28
43
  export declare function filter<T, U extends T>(array: ArrayLike<T>, predicate: (element: T, index: number) => element is U): U[];
29
44
  export declare function filter<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
30
45
  export declare function filterFn<T, U extends T>(predicate: (element: T, index: number) => element is U): (array: ArrayLike<T>) => U[];
31
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. */
32
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. */
33
52
  export declare function filterFirstFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
34
53
  export declare function exclude<T, U>(array: ArrayLike<T | U>, predicate: (element: T | U) => element is T): U[];
35
54
  export declare function exclude<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
@@ -58,27 +77,43 @@ export declare function contains<T>(array: ArrayLike<T>, value: T): boolean;
58
77
  export declare function containsFn<T>(value: T): (array: ArrayLike<T>) => boolean;
59
78
  export declare function indexOf<T>(array: ArrayLike<T>, value: T): number | null;
60
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;
61
82
  export declare function findIndex<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): number | null;
62
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;
63
86
  export declare function find<T, U extends T>(array: ArrayLike<T>, predicate: (element: T) => element is U): U | null;
64
87
  export declare function find<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T | null;
65
88
  export declare function findFn<T, U extends T>(predicate: (element: T) => element is U): (array: ArrayLike<T>) => U | null;
66
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;
67
94
  export declare function maximum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;
68
95
  export declare function maximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;
69
96
  export declare function maximumFn<T extends string | number | boolean>(): (array: ArrayLike<T>) => T | null;
70
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;
71
100
  export declare function minimum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;
72
101
  export declare function minimum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;
73
102
  export declare function minimumFn<T extends string | number | boolean>(): (array: ArrayLike<T>) => T | null;
74
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;
75
106
  export declare function sum(array: ArrayLike<number>): number;
76
107
  export declare function product(array: ArrayLike<number>): number;
108
+ export declare function average(array: ArrayLike<number>): number | null;
77
109
  export declare function and(array: ArrayLike<boolean>): boolean;
78
110
  export declare function or(array: ArrayLike<boolean>): boolean;
79
111
  export declare function any<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): boolean;
80
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>;
81
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>;
82
117
  export declare function allFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => boolean;
83
118
  export declare function concat<T>(arrays: ArrayLike<ArrayLike<T>>): T[];
84
119
  export declare function prepend<T>(a: ArrayLike<T>): (b: ArrayLike<T>) => T[];
@@ -94,6 +129,15 @@ export declare function scanRight<T, U>(array: ArrayLike<T>, f: (accumulator: U,
94
129
  export declare function scanRightFn<T, U>(f: (accumulator: U, element: T, index: number) => U, initial: U): (array: ArrayLike<T>) => U[];
95
130
  export declare function scanRight1<T>(array: ArrayLike<T>, f: (accumulator: T, element: T, index: number) => T): T[];
96
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[]];
97
141
  export declare function partition<T, U extends T>(array: ArrayLike<T>, predicate: (element: T) => element is U): [U[], Array<Exclude<T, U>>];
98
142
  export declare function partition<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): [T[], T[]];
99
143
  export declare function partitionFn<T, U extends T>(predicate: (element: T) => element is U): (array: ArrayLike<T>) => [U[], Array<Exclude<T, U>>];
@@ -102,6 +146,21 @@ export declare function partitionWhile<T, U extends T>(array: ArrayLike<T>, pred
102
146
  export declare function partitionWhile<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): [T[], T[]];
103
147
  export declare function partitionWhileFn<T, U extends T>(predicate: (element: T) => element is U): (array: readonly T[]) => [U[], T[]];
104
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]>;
105
164
  export declare function keyBy<TElement, TKey extends Key>(array: ArrayLike<TElement>, f: (element: TElement, index: number) => TKey): Dictionary<TElement[], TKey>;
106
165
  export declare function keyByFn<TElement, TKey extends Key>(f: (element: TElement, index: number) => TKey): (array: ArrayLike<TElement>) => Dictionary<TElement[], TKey>;
107
166
  export declare function keyFirstBy<TElement, TKey extends Key>(array: ArrayLike<TElement>, f: (element: TElement, index: number) => TKey): Dictionary<TElement, TKey>;
@@ -176,5 +235,15 @@ export declare function uniqueAdjacentByOrderFn<T>(compare: Comparator<T>): (arr
176
235
  export declare function uniqueAdjacentByHash<T>(array: ArrayLike<T>, hash: (element: T, index: number) => Key): T[];
177
236
  export declare function uniqueAdjacentByHashFn<T>(hash: (element: T, index: number) => Key): (array: ArrayLike<T>) => T[];
178
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);
179
248
  export declare function forEach<T>(array: ArrayLike<T>, f: (element: T, index: number) => void): typeof array;
180
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.containsFn = exports.contains = exports.foldMapRightFn = exports.foldMapRight = exports.foldMapFn = exports.foldMap = exports.foldRight1Fn = exports.foldRight1 = exports.foldRightFn = exports.foldRight = exports.fold1Fn = 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.dropWhileFn = exports.dropWhile = exports.takeWhileFn = exports.takeWhile = exports.dropFn = exports.drop = exports.takeFn = exports.take = exports.sliceFn = exports.slice = exports.reverse = exports.notEmpty = exports.empty = exports.last = exports.initial = exports.tail = exports.head = exports.coerce = exports.isArrayLike = exports.isArray = exports.copy = void 0;
5
- 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.partitionWhileFn = exports.partitionWhile = exports.partitionFn = exports.partition = exports.scanRight1Fn = exports.scanRight1 = exports.scanRightFn = exports.scanRight = 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.product = exports.sum = exports.minimumFn = exports.minimum = exports.maximumFn = exports.maximum = exports.findFn = exports.find = exports.findIndexFn = exports.findIndex = exports.indexOfFn = exports.indexOf = void 0;
6
- exports.forEachFn = exports.forEach = 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 = 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 = void 0;
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 head(array) {
48
+ function first(array) {
48
49
  return array.length === 0 ? null : array[0];
49
50
  }
50
- exports.head = head;
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,6 +65,12 @@ 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
  }
@@ -112,6 +123,14 @@ function takeWhileFn(predicate) {
112
123
  return function (array) { return takeWhile(array, predicate); };
113
124
  }
114
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;
115
134
  function dropWhile(array, predicate) {
116
135
  var i = 0;
117
136
  while (i < array.length && predicate(array[i], i)) {
@@ -124,6 +143,63 @@ function dropWhileFn(predicate) {
124
143
  return function (array) { return dropWhile(array, predicate); };
125
144
  }
126
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
+ }
127
203
  /** @internal This implementation is for internal use only, the exported declaration is above */
128
204
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
129
205
  // @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.
@@ -142,6 +218,8 @@ function filterFn(predicate) {
142
218
  return function (array) { return filter(array, predicate); };
143
219
  }
144
220
  exports.filterFn = filterFn;
221
+ /** @deprecated This function is confusing, use {@link excludeFirst} instead,
222
+ * and invert the predicate. */
145
223
  function filterFirst(array, predicate) {
146
224
  var result = [];
147
225
  var i = 0;
@@ -160,6 +238,8 @@ function filterFirst(array, predicate) {
160
238
  return result;
161
239
  }
162
240
  exports.filterFirst = filterFirst;
241
+ /** @deprecated This function is confusing, use {@link excludeFirstFn} instead,
242
+ * and invert the predicate. */
163
243
  function filterFirstFn(predicate) {
164
244
  return function (array) { return filterFirst(array, predicate); };
165
245
  }
@@ -274,6 +354,19 @@ function indexOfFn(value) {
274
354
  return function (array) { return indexOf(array, value); };
275
355
  }
276
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;
277
370
  /** @internal This implementation is for internal use only, the exported declaration is above */
278
371
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
279
372
  // @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.
@@ -294,6 +387,19 @@ function findIndexFn(predicate) {
294
387
  return function (array) { return exports.findIndex(array, predicate); };
295
388
  }
296
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;
297
403
  function find(array, predicate) {
298
404
  var index = exports.findIndex(array, predicate);
299
405
  return index == null ? null : array[index];
@@ -303,6 +409,20 @@ function findFn(predicate) {
303
409
  return function (array) { return find(array, predicate); };
304
410
  }
305
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;
306
426
  function maximum(array, compare) {
307
427
  if (compare === void 0) { compare = ordered_1.compare; }
308
428
  return internalMaximum(array, compare);
@@ -325,6 +445,14 @@ function internalMaximum(array, compare) {
325
445
  }
326
446
  return result;
327
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;
328
456
  function minimum(array, compare) {
329
457
  if (compare === void 0) { compare = ordered_1.compare; }
330
458
  return internalMinimum(array, compare);
@@ -347,6 +475,14 @@ function internalMinimum(array, compare) {
347
475
  }
348
476
  return result;
349
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;
350
486
  function sum(array) {
351
487
  return fold(array, function (a, b) { return a + b; }, 0);
352
488
  }
@@ -355,6 +491,15 @@ function product(array) {
355
491
  return fold(array, function (a, b) { return a * b; }, 1);
356
492
  }
357
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;
358
503
  function and(array) {
359
504
  return exports.findIndex(array, function (element) { return !element; }) == null;
360
505
  }
@@ -462,6 +607,21 @@ function scanRight1Fn(f) {
462
607
  return function (array) { return scanRight1(array, f); };
463
608
  }
464
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;
465
625
  function partition(array, predicate) {
466
626
  var a = [];
467
627
  var b = [];
@@ -494,6 +654,37 @@ function partitionWhileFn(predicate) {
494
654
  return function (array) { return partitionWhile(array, predicate); };
495
655
  }
496
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;
497
688
  function keyBy(array, f) {
498
689
  var result = dictionary_1.dictionary();
499
690
  for (var i = 0; i < array.length; ++i) {
@@ -1024,6 +1215,30 @@ function shuffle(array) {
1024
1215
  return result;
1025
1216
  }
1026
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;
1027
1242
  function forEach(array, f) {
1028
1243
  for (var i = 0; i < array.length; ++i) {
1029
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 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 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.10.0",
3
+ "version": "3.11.0",
4
4
  "description": "Pure functional array manipulation and traversal",
5
5
  "keywords": [
6
6
  "array",