@softwareventures/array 6.0.3 → 7.0.0-alpha.1
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/LICENSE.md +1 -1
- package/index.d.ts +10 -12
- package/index.js +61 -48
- package/index.js.map +1 -1
- package/package.json +19 -18
package/LICENSE.md
CHANGED
package/index.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import type { Comparator } from "@softwareventures/ordered";
|
|
2
2
|
export declare function copy<T>(array: ArrayLike<T>): T[];
|
|
3
|
-
export declare function isArray
|
|
4
|
-
export declare function isArrayLike
|
|
3
|
+
export declare function isArray(value: unknown): value is readonly unknown[];
|
|
4
|
+
export declare function isArrayLike(value: unknown): value is ArrayLike<unknown>;
|
|
5
5
|
export declare function coerce<T>(array: ArrayLike<T>): readonly T[];
|
|
6
6
|
export declare function first<T>(array: ArrayLike<T>): T | null;
|
|
7
|
-
/** @deprecated Use {@link first} instead. */
|
|
8
|
-
export declare function head<T>(array: ArrayLike<T>): T | null;
|
|
9
7
|
export declare function tail<T>(array: ArrayLike<T>): T[];
|
|
10
8
|
export declare function push<T>(array: ArrayLike<T>, value: T): T[];
|
|
11
9
|
export declare function pushFn<T>(value: T): (array: ArrayLike<T>) => T[];
|
|
@@ -47,12 +45,6 @@ export declare function filter<T, U extends T>(array: ArrayLike<T>, predicate: (
|
|
|
47
45
|
export declare function filter<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
|
|
48
46
|
export declare function filterFn<T, U extends T>(predicate: (element: T, index: number) => element is U): (array: ArrayLike<T>) => U[];
|
|
49
47
|
export declare function filterFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
|
|
50
|
-
/** @deprecated This function is confusing, use {@link excludeFirst} instead,
|
|
51
|
-
* and invert the predicate. */
|
|
52
|
-
export declare function filterFirst<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
|
|
53
|
-
/** @deprecated This function is confusing, use {@link excludeFirstFn} instead,
|
|
54
|
-
* and invert the predicate. */
|
|
55
|
-
export declare function filterFirstFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
|
|
56
48
|
export declare function exclude<T, U>(array: ArrayLike<T | U>, predicate: (element: T | U) => element is T): U[];
|
|
57
49
|
export declare function exclude<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
|
|
58
50
|
export declare function excludeFn<T, U>(predicate: (element: T | U) => element is T): (array: ArrayLike<T | U>) => T[];
|
|
@@ -80,12 +72,20 @@ export declare function contains<T>(array: ArrayLike<T>, value: T): boolean;
|
|
|
80
72
|
export declare function containsFn<T>(value: T): (array: ArrayLike<T>) => boolean;
|
|
81
73
|
export declare function indexOf<T>(array: ArrayLike<T>, value: T): number | null;
|
|
82
74
|
export declare function indexOfFn<T>(value: T): (array: ArrayLike<T>) => number | null;
|
|
75
|
+
export declare function lastIndexOf<T>(array: ArrayLike<T>, value: T): number | null;
|
|
76
|
+
export declare function lastIndexOfFn<T>(value: T): (array: ArrayLike<T>) => number | null;
|
|
83
77
|
export declare function findIndex<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): number | null;
|
|
84
78
|
export declare function findIndexFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => number | null;
|
|
79
|
+
export declare function findLastIndex<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): number | null;
|
|
80
|
+
export declare function findLastIndexFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => number | null;
|
|
85
81
|
export declare function find<T, U extends T>(array: ArrayLike<T>, predicate: (element: T) => element is U): U | null;
|
|
86
82
|
export declare function find<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T | null;
|
|
87
83
|
export declare function findFn<T, U extends T>(predicate: (element: T) => element is U): (array: ArrayLike<T>) => U | null;
|
|
88
84
|
export declare function findFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T | null;
|
|
85
|
+
export declare function findLast<T, U extends T>(array: ArrayLike<T>, predicate: (element: T) => element is U): U | null;
|
|
86
|
+
export declare function findLast<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T | null;
|
|
87
|
+
export declare function findLastFn<T, U extends T>(predicate: (element: T) => element is U): (array: ArrayLike<T>) => U | null;
|
|
88
|
+
export declare function findLastFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T | null;
|
|
89
89
|
export declare function maximum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;
|
|
90
90
|
export declare function maximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;
|
|
91
91
|
export declare function maximumFn<T extends string | number | boolean>(): (array: ArrayLike<T>) => T | null;
|
|
@@ -233,8 +233,6 @@ export declare function uniqueAdjacentByOrder<T>(array: ArrayLike<T>, compare: C
|
|
|
233
233
|
export declare function uniqueAdjacentByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[];
|
|
234
234
|
export declare function uniqueAdjacentByHash<T>(array: ArrayLike<T>, hash: (element: T, index: number) => unknown): T[];
|
|
235
235
|
export declare function uniqueAdjacentByHashFn<T>(hash: (element: T, index: number) => unknown): (array: ArrayLike<T>) => T[];
|
|
236
|
-
/** @deprecated Use [array-shuffle](https://npmjs.com/array-shuffle) instead. */
|
|
237
|
-
export declare function shuffle<T>(array: ArrayLike<T>): T[];
|
|
238
236
|
export declare function sort(array: ArrayLike<boolean>): boolean[];
|
|
239
237
|
export declare function sort(array: ArrayLike<number>): number[];
|
|
240
238
|
export declare function sort(array: ArrayLike<string>): string[];
|
package/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
6
|
-
exports.forEachFn = exports.forEach = exports.sortByDescendingFn = exports.sortByDescending = exports.sortByFn = exports.sortBy = exports.sortFn = exports.sort = exports.
|
|
3
|
+
exports.fold = exports.removeFirstFn = exports.removeFirst = exports.removeFn = exports.remove = exports.excludeFirstFn = exports.excludeFirst = exports.excludeNull = exports.excludeFn = exports.exclude = 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.unshiftFn = exports.unshift = exports.pushFn = exports.push = exports.tail = exports.first = exports.coerce = exports.isArrayLike = exports.isArray = exports.copy = void 0;
|
|
4
|
+
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 = exports.fold1 = exports.foldFn = void 0;
|
|
5
|
+
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.groupByHashFn = exports.groupByHash = exports.groupByOrderFn = exports.groupByOrder = exports.groupByEqualityFn = exports.groupByEquality = exports.groupByIdentityFn = exports.groupByIdentity = exports.groupFn = exports.group = exports.mapKeyLastByFn = exports.mapKeyLastBy = exports.mapKeyFirstByFn = exports.mapKeyFirstBy = exports.mapKeyByFn = exports.mapKeyBy = 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 = exports.scan1Fn = exports.scan1 = void 0;
|
|
6
|
+
exports.forEachFn = exports.forEach = exports.sortByDescendingFn = exports.sortByDescending = exports.sortByFn = exports.sortBy = exports.sortFn = exports.sort = 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.uniqueByHashFn = exports.uniqueByHash = exports.uniqueByOrderFn = exports.uniqueByOrder = exports.uniqueByEqualityFn = exports.uniqueByEquality = exports.uniqueByIdentity = exports.uniqueFn = exports.unique = exports.groupAdjacentByHashFn = exports.groupAdjacentByHash = void 0;
|
|
7
7
|
const nullable_1 = require("@softwareventures/nullable");
|
|
8
8
|
const ordered_1 = require("@softwareventures/ordered");
|
|
9
9
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
@@ -30,6 +30,7 @@ exports.copy = Array.from;
|
|
|
30
30
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
31
31
|
// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.
|
|
32
32
|
exports.isArray = Array.isArray;
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
|
|
33
34
|
function isArrayLike(value) {
|
|
34
35
|
return (typeof value === "object" &&
|
|
35
36
|
value != null &&
|
|
@@ -45,10 +46,6 @@ function first(array) {
|
|
|
45
46
|
return array.length === 0 ? null : array[0];
|
|
46
47
|
}
|
|
47
48
|
exports.first = first;
|
|
48
|
-
/** @internal This implementation is for internal use only, the exported declaration is above */
|
|
49
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
50
|
-
// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.
|
|
51
|
-
exports.head = first;
|
|
52
49
|
function tail(array) {
|
|
53
50
|
return nativeSlice.call(array, 1);
|
|
54
51
|
}
|
|
@@ -215,14 +212,24 @@ function filterFn(predicate) {
|
|
|
215
212
|
return array => nativeFilter.call(array, predicate);
|
|
216
213
|
}
|
|
217
214
|
exports.filterFn = filterFn;
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
215
|
+
function exclude(array, predicate) {
|
|
216
|
+
return filter(array, (element, index) => !predicate(element, index));
|
|
217
|
+
}
|
|
218
|
+
exports.exclude = exclude;
|
|
219
|
+
function excludeFn(predicate) {
|
|
220
|
+
return array => exclude(array, predicate);
|
|
221
|
+
}
|
|
222
|
+
exports.excludeFn = excludeFn;
|
|
223
|
+
function excludeNull(array) {
|
|
224
|
+
return filter(array, nullable_1.isNotNull);
|
|
225
|
+
}
|
|
226
|
+
exports.excludeNull = excludeNull;
|
|
227
|
+
function excludeFirst(array, predicate) {
|
|
221
228
|
const result = [];
|
|
222
229
|
let i = 0;
|
|
223
230
|
for (; i < array.length; ++i) {
|
|
224
231
|
const element = array[i];
|
|
225
|
-
if (predicate(element, i)) {
|
|
232
|
+
if (!predicate(element, i)) {
|
|
226
233
|
result.push(element);
|
|
227
234
|
}
|
|
228
235
|
else {
|
|
@@ -234,28 +241,6 @@ function filterFirst(array, predicate) {
|
|
|
234
241
|
}
|
|
235
242
|
return result;
|
|
236
243
|
}
|
|
237
|
-
exports.filterFirst = filterFirst;
|
|
238
|
-
/** @deprecated This function is confusing, use {@link excludeFirstFn} instead,
|
|
239
|
-
* and invert the predicate. */
|
|
240
|
-
function filterFirstFn(predicate) {
|
|
241
|
-
return array => filterFirst(array, predicate);
|
|
242
|
-
}
|
|
243
|
-
exports.filterFirstFn = filterFirstFn;
|
|
244
|
-
function exclude(array, predicate) {
|
|
245
|
-
return filter(array, (element, index) => !predicate(element, index));
|
|
246
|
-
}
|
|
247
|
-
exports.exclude = exclude;
|
|
248
|
-
function excludeFn(predicate) {
|
|
249
|
-
return array => exclude(array, predicate);
|
|
250
|
-
}
|
|
251
|
-
exports.excludeFn = excludeFn;
|
|
252
|
-
function excludeNull(array) {
|
|
253
|
-
return filter(array, nullable_1.isNotNull);
|
|
254
|
-
}
|
|
255
|
-
exports.excludeNull = excludeNull;
|
|
256
|
-
function excludeFirst(array, predicate) {
|
|
257
|
-
return filterFirst(array, (element, index) => !predicate(element, index));
|
|
258
|
-
}
|
|
259
244
|
exports.excludeFirst = excludeFirst;
|
|
260
245
|
function excludeFirstFn(predicate) {
|
|
261
246
|
return array => excludeFirst(array, predicate);
|
|
@@ -351,6 +336,19 @@ function indexOfFn(value) {
|
|
|
351
336
|
return array => indexOf(array, value);
|
|
352
337
|
}
|
|
353
338
|
exports.indexOfFn = indexOfFn;
|
|
339
|
+
function lastIndexOf(array, value) {
|
|
340
|
+
for (let i = array.length - 1; i >= 0; --i) {
|
|
341
|
+
if (array[i] === value) {
|
|
342
|
+
return i;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
exports.lastIndexOf = lastIndexOf;
|
|
348
|
+
function lastIndexOfFn(value) {
|
|
349
|
+
return array => lastIndexOf(array, value);
|
|
350
|
+
}
|
|
351
|
+
exports.lastIndexOfFn = lastIndexOfFn;
|
|
354
352
|
function findIndex(array, predicate) {
|
|
355
353
|
const index = nativeFindIndex.call(array, predicate);
|
|
356
354
|
return index === -1 ? null : index;
|
|
@@ -360,6 +358,19 @@ function findIndexFn(predicate) {
|
|
|
360
358
|
return array => findIndex(array, predicate);
|
|
361
359
|
}
|
|
362
360
|
exports.findIndexFn = findIndexFn;
|
|
361
|
+
function findLastIndex(array, predicate) {
|
|
362
|
+
for (let i = array.length - 1; i >= 0; --i) {
|
|
363
|
+
if (predicate(array[i], i)) {
|
|
364
|
+
return i;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
exports.findLastIndex = findLastIndex;
|
|
370
|
+
function findLastIndexFn(predicate) {
|
|
371
|
+
return array => findLastIndex(array, predicate);
|
|
372
|
+
}
|
|
373
|
+
exports.findLastIndexFn = findLastIndexFn;
|
|
363
374
|
function find(array, predicate) {
|
|
364
375
|
const index = findIndex(array, predicate);
|
|
365
376
|
return index == null ? null : array[index];
|
|
@@ -369,6 +380,20 @@ function findFn(predicate) {
|
|
|
369
380
|
return array => find(array, predicate);
|
|
370
381
|
}
|
|
371
382
|
exports.findFn = findFn;
|
|
383
|
+
function findLast(array, predicate) {
|
|
384
|
+
for (let i = array.length - 1; i >= 0; --i) {
|
|
385
|
+
const element = array[i];
|
|
386
|
+
if (predicate(element, i)) {
|
|
387
|
+
return element;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
return null;
|
|
391
|
+
}
|
|
392
|
+
exports.findLast = findLast;
|
|
393
|
+
function findLastFn(predicate) {
|
|
394
|
+
return array => findLast(array, predicate);
|
|
395
|
+
}
|
|
396
|
+
exports.findLastFn = findLastFn;
|
|
372
397
|
function maximum(array, compare) {
|
|
373
398
|
return internalMaximum(array, compare !== null && compare !== void 0 ? compare : ordered_1.compare);
|
|
374
399
|
}
|
|
@@ -383,7 +408,7 @@ function internalMaximum(array, compare) {
|
|
|
383
408
|
}
|
|
384
409
|
let result = array[0];
|
|
385
410
|
for (let i = 1; i < array.length; ++i) {
|
|
386
|
-
if (compare(array[i], result) >
|
|
411
|
+
if (compare(array[i], result) > ordered_1.Comparison.equal) {
|
|
387
412
|
result = array[i];
|
|
388
413
|
}
|
|
389
414
|
}
|
|
@@ -411,7 +436,7 @@ function internalMinimum(array, compare) {
|
|
|
411
436
|
}
|
|
412
437
|
let result = array[0];
|
|
413
438
|
for (let i = 1; i < array.length; ++i) {
|
|
414
|
-
if (compare(array[i], result) <
|
|
439
|
+
if (compare(array[i], result) < ordered_1.Comparison.equal) {
|
|
415
440
|
result = array[i];
|
|
416
441
|
}
|
|
417
442
|
}
|
|
@@ -1146,18 +1171,6 @@ function uniqueAdjacentByHashFn(hash) {
|
|
|
1146
1171
|
return array => uniqueAdjacentByHash(array, hash);
|
|
1147
1172
|
}
|
|
1148
1173
|
exports.uniqueAdjacentByHashFn = uniqueAdjacentByHashFn;
|
|
1149
|
-
/** @deprecated Use [array-shuffle](https://npmjs.com/array-shuffle) instead. */
|
|
1150
|
-
function shuffle(array) {
|
|
1151
|
-
const result = (0, exports.copy)(array);
|
|
1152
|
-
for (let i = 0; i < array.length; ++i) {
|
|
1153
|
-
const j = i + Math.floor(Math.random() * (array.length - i));
|
|
1154
|
-
const replacement = result[j];
|
|
1155
|
-
result[j] = result[i];
|
|
1156
|
-
result[i] = replacement;
|
|
1157
|
-
}
|
|
1158
|
-
return result;
|
|
1159
|
-
}
|
|
1160
|
-
exports.shuffle = shuffle;
|
|
1161
1174
|
function sort(array, comparator) {
|
|
1162
1175
|
return (0, exports.copy)(array).sort(comparator !== null && comparator !== void 0 ? comparator : ordered_1.compare);
|
|
1163
1176
|
}
|
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 {isNotNull, isNull, notNull} from \"@softwareventures/nullable\";\nimport type {Comparator} from \"@softwareventures/ordered\";\nimport {\n compare as defaultCompare,\n Comparison,\n equal as defaultEqual\n} from \"@softwareventures/ordered\";\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 nativeReverse = Array.prototype.reverse;\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 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[] = Array.from;\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: unknown) => value is unknown[] = Array.isArray;\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 as readonly T[]) : copy(array);\n}\n\nexport function first<T>(array: ArrayLike<T>): T | null {\n return array.length === 0 ? null : (array[0] as T);\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.\nexport const head = first;\n\nexport function tail<T>(array: ArrayLike<T>): T[] {\n return nativeSlice.call(array, 1) as T[];\n}\n\nexport function push<T>(array: ArrayLike<T>, value: T): T[] {\n return [...coerce(array), value];\n}\n\nexport function pushFn<T>(value: T): (array: ArrayLike<T>) => T[] {\n return array => push(array, value);\n}\n\nexport function unshift<T>(array: ArrayLike<T>, value: T): T[] {\n return [value, ...coerce(array)];\n}\n\nexport function unshiftFn<T>(value: T): (array: ArrayLike<T>) => T[] {\n return array => unshift(array, value);\n}\n\nexport function initial<T>(array: ArrayLike<T>): T[] {\n return array.length === 0 ? [] : (nativeSlice.call(array, 0, array.length - 1) as T[]);\n}\n\nexport function last<T>(array: ArrayLike<T>): T | null {\n return array.length === 0 ? null : (array[array.length - 1] as T);\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] as T) : 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 return nativeReverse.call(copy(array)) as T[];\n}\n\nexport function slice<T>(array: ArrayLike<T>, start?: number, end?: number): T[] {\n return nativeSlice.call(array, start, end) as T[];\n}\n\nexport function sliceFn<T>(start?: number, end?: number): (array: ArrayLike<T>) => T[] {\n return array => nativeSlice.call(array, start, end) as T[];\n}\n\nexport function take<T>(array: ArrayLike<T>, count: number): T[] {\n return nativeSlice.call(array, 0, count) as T[];\n}\n\nexport function takeFn<T>(count: number): (array: ArrayLike<T>) => T[] {\n return array => nativeSlice.call(array, 0, count) as T[];\n}\n\nexport function drop<T>(array: ArrayLike<T>, count: number): T[] {\n return nativeSlice.call(array, count) as T[];\n}\n\nexport function dropFn<T>(count: number): (array: ArrayLike<T>) => T[] {\n return array => nativeSlice.call(array, count) as T[];\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] as T, 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] as T, 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] as T, b[i] as T)) {\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\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;\n\nexport function mapFn<T, U>(f: (element: T, index: number) => U): (array: ArrayLike<T>) => U[] {\n return array => Array.from(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) as T[];\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 => nativeFilter.call(array, predicate) as T[];\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: T[] = [];\n let i = 0;\n for (; i < array.length; ++i) {\n const element = array[i] as T;\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] as T);\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 (\n nativeReduce as (f: (accumulator: U, element: T, index: number) => U, initial: U) => U\n ).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 =>\n (\n nativeReduce as (f: (accumulator: U, element: T, index: number) => U, initial: U) => U\n ).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 (f: (accumulator: T, element: T, index: number) => T) => T).call(\n array,\n f\n );\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 (\n nativeReduceRight as (f: (accumulator: U, element: T, index: number) => U, initial: U) => U\n ).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 =>\n (\n nativeReduceRight as (\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n ) => U\n ).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 (f: (accumulator: T, element: T, index: number) => T) => T).call(\n array,\n f\n );\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] as T, 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] as T, 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 findIndex<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): number | null {\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] as T);\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>(array: ArrayLike<T>, compare?: Comparator<T>): T | null {\n return internalMaximum(array, compare ?? (defaultCompare as unknown as Comparator<T>));\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>(compare?: Comparator<T>): (array: ArrayLike<T>) => T | null {\n return array => internalMaximum(array, compare ?? (defaultCompare as unknown as Comparator<T>));\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] as T;\n\n for (let i = 1; i < array.length; ++i) {\n if (compare(array[i] as T, result) > 0) {\n result = array[i] as T;\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>(array: ArrayLike<T>, compare?: Comparator<T>): T | null {\n return internalMinimum(array, compare ?? (defaultCompare as unknown as Comparator<T>));\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>(compare?: Comparator<T>): (array: ArrayLike<T>) => T | null {\n return array => internalMinimum(array, compare ?? (defaultCompare as unknown as Comparator<T>));\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] as T;\n\n for (let i = 1; i < array.length; ++i) {\n if (compare(array[i] as T, result) < 0) {\n result = array[i] as T;\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 => Boolean(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)) as T[];\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 type NoneNull<T extends ArrayLike<unknown>> = {[K in keyof T]: NonNullable<T[K]>};\n\nexport function noneNull<T extends ArrayLike<unknown>>(array: T): NoneNull<T> | null {\n return any(array, isNull) ? null : (array as NoneNull<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] as T, 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] as T;\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] as T, 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] as T, 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] as T;\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] as T, 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] as T, i)) {\n a.push(array[i] as T);\n } else {\n b.push(array[i] as T);\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] as T, 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 length = Math.min(a.length, b.length);\n const result = new Array<[T, U]>(length);\n for (let i = 0; i < length; ++i) {\n result[i] = [a[i] as T, b[i] as U];\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<TKey, TElement>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => TKey\n): Map<TKey, TElement[]> {\n const result = new Map<TKey, TElement[]>();\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as TElement;\n const key = f(element, i);\n const group = result.get(key) ?? [];\n if (!result.has(key)) {\n result.set(key, group);\n }\n group.push(element);\n }\n\n return result;\n}\n\nexport function keyByFn<TKey, TElement>(\n f: (element: TElement, index: number) => TKey\n): (array: ArrayLike<TElement>) => Map<TKey, TElement[]> {\n return array => keyBy(array, f);\n}\n\nexport function keyFirstBy<TKey, TElement>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => TKey\n): Map<TKey, TElement> {\n const result = new Map<TKey, TElement>();\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as TElement;\n const key = f(element, i);\n if (!result.has(key)) {\n result.set(key, element);\n }\n }\n\n return result;\n}\n\nexport function keyFirstByFn<TKey, TElement>(\n f: (element: TElement, index: number) => TKey\n): (array: ArrayLike<TElement>) => Map<TKey, TElement> {\n return array => keyFirstBy(array, f);\n}\n\nexport function keyLastBy<TKey, TElement>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => TKey\n): Map<TKey, TElement> {\n const result = new Map<TKey, TElement>();\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as TElement;\n const key = f(element, i);\n result.set(key, element);\n }\n\n return result;\n}\n\nexport function keyLastByFn<TKey, TElement>(\n f: (element: TElement, index: number) => TKey\n): (array: ArrayLike<TElement>) => Map<TKey, TElement> {\n return array => keyLastBy(array, f);\n}\n\nexport function mapKeyBy<TKey, TElement, TNewElement>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => readonly [TKey, TNewElement]\n): Map<TKey, TNewElement[]> {\n const result = new Map<TKey, TNewElement[]>();\n\n for (let i = 0; i < array.length; ++i) {\n const [key, element] = f(array[i] as TElement, i);\n const group = result.get(key) ?? [];\n if (!result.has(key)) {\n result.set(key, group);\n }\n group.push(element);\n }\n\n return result;\n}\n\nexport function mapKeyByFn<TKey, TElement, TNewElement>(\n f: (element: TElement, index: number) => readonly [TKey, TNewElement]\n): (array: ArrayLike<TElement>) => Map<TKey, TNewElement[]> {\n return array => mapKeyBy(array, f);\n}\n\nexport function mapKeyFirstBy<TKey, TElement, TNewElement>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => readonly [TKey, TNewElement]\n): Map<TKey, TNewElement> {\n const result = new Map<TKey, TNewElement>();\n\n for (let i = 0; i < array.length; ++i) {\n const [key, element] = f(array[i] as TElement, i);\n if (!result.has(key)) {\n result.set(key, element);\n }\n }\n\n return result;\n}\n\nexport function mapKeyFirstByFn<TKey, TElement, TNewElement>(\n f: (element: TElement, index: number) => readonly [TKey, TNewElement]\n): (array: ArrayLike<TElement>) => Map<TKey, TNewElement> {\n return array => mapKeyFirstBy(array, f);\n}\n\nexport function mapKeyLastBy<TKey, TElement, TNewElement>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => readonly [TKey, TNewElement]\n): Map<TKey, TNewElement> {\n const result = new Map<TKey, TNewElement>();\n\n for (let i = 0; i < array.length; ++i) {\n const [key, element] = f(array[i] as TElement, i);\n result.set(key, element);\n }\n\n return result;\n}\n\nexport function mapKeyLastByFn<TKey, TElement, TNewElement>(\n f: (element: TElement, index: number) => readonly [TKey, TNewElement]\n): (array: ArrayLike<TElement>) => Map<TKey, TNewElement> {\n return array => mapKeyLastBy(array, f);\n}\n\nexport interface IdentityGrouping<T> {\n readonly identity: (element: T) => unknown;\n}\n\nexport interface EqualityGrouping<T> {\n readonly equal: (a: T, b: T) => boolean;\n readonly hash?: (element: T, index: number) => unknown;\n}\n\nexport interface OrderedGrouping<T> {\n readonly compare: Comparator<T>;\n readonly hash?: (element: T, index: number) => unknown;\n}\n\nexport interface HashGrouping<T> {\n readonly hash: (element: T, index: number) => unknown;\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 return groupByIdentity(array, grouping.identity);\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>(\n array: ArrayLike<T>,\n identity: (element: T) => unknown = element => element\n): 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] as T;\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 => groupByIdentity(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 const group = notNull(result[j]);\n if (equal(group[0] as T, array[i] as T)) {\n group.push(array[i] as T);\n continue outer;\n }\n }\n\n result.push([array[i] as T]);\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) => unknown\n): T[][] {\n const groups = new Map<unknown, T[]>();\n const result: T[][] = [];\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as T;\n const h = hash(element, i);\n\n const group = groups.get(h) ?? [];\n if (!groups.has(h)) {\n result.push(group);\n groups.set(h, group);\n }\n group.push(element);\n }\n\n return result;\n}\n\nexport function groupByHashFn<T>(\n hash: (element: T, index: number) => unknown\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByHash(array, hash);\n}\n\nexport function groupByEqualityWithHash<T>(\n array: ArrayLike<T>,\n equal: (a: T, b: T) => boolean,\n hash: (element: T, index: number) => unknown\n): T[][] {\n const groups = new Map<unknown, T[][]>();\n const result: T[][] = [];\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as T;\n const h = hash(element, i);\n\n const hashGroup = groups.get(h) ?? [];\n if (!groups.has(h)) {\n groups.set(h, hashGroup);\n }\n const group = find(hashGroup, group => equal(group[0] as T, element));\n if (group == null) {\n const newGroup = [element];\n hashGroup.push(newGroup);\n result.push(newGroup);\n } else {\n group.push(element);\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) => unknown\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) => unknown\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) => unknown\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 = array[0] as T;\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] as T;\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) => unknown\n): T[][] {\n if (array.length === 0) {\n return [];\n }\n\n const element = array[0] as T;\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] as T;\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) => unknown\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 return uniqueByIdentityInternal(array, grouping.identity);\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\nfunction uniqueByIdentityInternal<T>(array: ArrayLike<T>, identity: (element: T) => unknown): T[] {\n const set = new Set<unknown>();\n const result: T[] = [];\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as T;\n if (!set.has(identity(element))) {\n set.add(identity(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] as T;\n for (let j = 0; j < result.length; ++j) {\n if (equal(element, result[j] as T)) {\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) => unknown\n): T[] {\n const seen = new Set<unknown>();\n const result: T[] = [];\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as T;\n const h = hash(element, i);\n if (!seen.has(h)) {\n seen.add(h);\n result.push(element);\n }\n }\n\n return result;\n}\n\nexport function uniqueByHashFn<T>(\n hash: (element: T, index: number) => unknown\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueByHash(array, hash);\n}\n\nexport function uniqueByEqualityWithHash<T>(\n array: ArrayLike<T>,\n equal: (a: T, b: T) => boolean,\n hash: (element: T, index: number) => unknown\n): T[] {\n const seenGroups = new Map<unknown, T[]>();\n const result: T[] = [];\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as T;\n const h = hash(element, i);\n\n const seenGroup = seenGroups.get(h) ?? [];\n\n if (!seenGroups.has(h)) {\n seenGroups.set(h, seenGroup);\n }\n\n if (all(seenGroup, seenElement => !equal(seenElement, element))) {\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) => unknown\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) => unknown\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) => unknown\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 = array[0] as T;\n const result = [element];\n\n for (let i = 1; i < array.length; ++i) {\n const prev = element;\n element = array[i] as T;\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) => unknown\n): T[] {\n if (array.length === 0) {\n return [];\n }\n\n const element = array[0] as T;\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] as T;\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) => unknown\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueAdjacentByHash(array, hash);\n}\n\n/** @deprecated Use [array-shuffle](https://npmjs.com/array-shuffle) instead. */\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] as T;\n result[j] = result[i] as T;\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 unknown as Comparator<T>));\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) =>\n (defaultCompare as Comparator<string | number | boolean>)(select(a), select(b))\n );\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(\n array,\n (a, b) => -(defaultCompare as Comparator<string | number | boolean>)(select(a), select(b))\n );\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] as T, 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 {isNotNull, isNull, notNull} from \"@softwareventures/nullable\";\nimport type {Comparator} from \"@softwareventures/ordered\";\nimport {\n compare as defaultCompare,\n Comparison,\n equal as defaultEqual\n} from \"@softwareventures/ordered\";\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 nativeReverse = Array.prototype.reverse;\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 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[] = Array.from;\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.\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport function isArray(value: unknown): value is readonly unknown[];\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: unknown) => value is unknown[] = Array.isArray;\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport function isArrayLike(value: unknown): value is ArrayLike<unknown> {\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 as readonly T[]) : copy(array);\n}\n\nexport function first<T>(array: ArrayLike<T>): T | null {\n return array.length === 0 ? null : (array[0] as T);\n}\n\nexport function tail<T>(array: ArrayLike<T>): T[] {\n return nativeSlice.call(array, 1) as T[];\n}\n\nexport function push<T>(array: ArrayLike<T>, value: T): T[] {\n return [...coerce(array), value];\n}\n\nexport function pushFn<T>(value: T): (array: ArrayLike<T>) => T[] {\n return array => push(array, value);\n}\n\nexport function unshift<T>(array: ArrayLike<T>, value: T): T[] {\n return [value, ...coerce(array)];\n}\n\nexport function unshiftFn<T>(value: T): (array: ArrayLike<T>) => T[] {\n return array => unshift(array, value);\n}\n\nexport function initial<T>(array: ArrayLike<T>): T[] {\n return array.length === 0 ? [] : (nativeSlice.call(array, 0, array.length - 1) as T[]);\n}\n\nexport function last<T>(array: ArrayLike<T>): T | null {\n return array.length === 0 ? null : (array[array.length - 1] as T);\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] as T) : 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 return nativeReverse.call(copy(array)) as T[];\n}\n\nexport function slice<T>(array: ArrayLike<T>, start?: number, end?: number): T[] {\n return nativeSlice.call(array, start, end) as T[];\n}\n\nexport function sliceFn<T>(start?: number, end?: number): (array: ArrayLike<T>) => T[] {\n return array => nativeSlice.call(array, start, end) as T[];\n}\n\nexport function take<T>(array: ArrayLike<T>, count: number): T[] {\n return nativeSlice.call(array, 0, count) as T[];\n}\n\nexport function takeFn<T>(count: number): (array: ArrayLike<T>) => T[] {\n return array => nativeSlice.call(array, 0, count) as T[];\n}\n\nexport function drop<T>(array: ArrayLike<T>, count: number): T[] {\n return nativeSlice.call(array, count) as T[];\n}\n\nexport function dropFn<T>(count: number): (array: ArrayLike<T>) => T[] {\n return array => nativeSlice.call(array, count) as T[];\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] as T, 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] as T, 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] as T, b[i] as T)) {\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\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;\n\nexport function mapFn<T, U>(f: (element: T, index: number) => U): (array: ArrayLike<T>) => U[] {\n return array => Array.from(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) as T[];\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 => nativeFilter.call(array, predicate) as T[];\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 const result: T[] = [];\n let i = 0;\n for (; i < array.length; ++i) {\n const element = array[i] as T;\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] as T);\n }\n return result;\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 (\n nativeReduce as (f: (accumulator: U, element: T, index: number) => U, initial: U) => U\n ).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 =>\n (\n nativeReduce as (f: (accumulator: U, element: T, index: number) => U, initial: U) => U\n ).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 (f: (accumulator: T, element: T, index: number) => T) => T).call(\n array,\n f\n );\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 (\n nativeReduceRight as (f: (accumulator: U, element: T, index: number) => U, initial: U) => U\n ).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 =>\n (\n nativeReduceRight as (\n f: (accumulator: U, element: T, index: number) => U,\n initial: U\n ) => U\n ).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 (f: (accumulator: T, element: T, index: number) => T) => T).call(\n array,\n f\n );\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] as T, 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] as T, 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] as T) === 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\nexport function findIndex<T>(\n array: ArrayLike<T>,\n predicate: (element: T, index: number) => boolean\n): number | null {\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] as T, 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] as T);\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] as T;\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>(array: ArrayLike<T>, compare?: Comparator<T>): T | null {\n return internalMaximum(array, compare ?? (defaultCompare as unknown as Comparator<T>));\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>(compare?: Comparator<T>): (array: ArrayLike<T>) => T | null {\n return array => internalMaximum(array, compare ?? (defaultCompare as unknown as Comparator<T>));\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] as T;\n\n for (let i = 1; i < array.length; ++i) {\n if (compare(array[i] as T, result) > Comparison.equal) {\n result = array[i] as T;\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>(array: ArrayLike<T>, compare?: Comparator<T>): T | null {\n return internalMinimum(array, compare ?? (defaultCompare as unknown as Comparator<T>));\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>(compare?: Comparator<T>): (array: ArrayLike<T>) => T | null {\n return array => internalMinimum(array, compare ?? (defaultCompare as unknown as Comparator<T>));\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] as T;\n\n for (let i = 1; i < array.length; ++i) {\n if (compare(array[i] as T, result) < Comparison.equal) {\n result = array[i] as T;\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 => Boolean(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)) as T[];\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 type NoneNull<T extends ArrayLike<unknown>> = {[K in keyof T]: NonNullable<T[K]>};\n\nexport function noneNull<T extends ArrayLike<unknown>>(array: T): NoneNull<T> | null {\n return any(array, isNull) ? null : (array as NoneNull<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] as T, 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] as T;\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] as T, 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] as T, 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] as T;\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] as T, 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] as T, i)) {\n a.push(array[i] as T);\n } else {\n b.push(array[i] as T);\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] as T, 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 length = Math.min(a.length, b.length);\n const result = new Array<[T, U]>(length);\n for (let i = 0; i < length; ++i) {\n result[i] = [a[i] as T, b[i] as U];\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<TKey, TElement>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => TKey\n): Map<TKey, TElement[]> {\n const result = new Map<TKey, TElement[]>();\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as TElement;\n const key = f(element, i);\n const group = result.get(key) ?? [];\n if (!result.has(key)) {\n result.set(key, group);\n }\n group.push(element);\n }\n\n return result;\n}\n\nexport function keyByFn<TKey, TElement>(\n f: (element: TElement, index: number) => TKey\n): (array: ArrayLike<TElement>) => Map<TKey, TElement[]> {\n return array => keyBy(array, f);\n}\n\nexport function keyFirstBy<TKey, TElement>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => TKey\n): Map<TKey, TElement> {\n const result = new Map<TKey, TElement>();\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as TElement;\n const key = f(element, i);\n if (!result.has(key)) {\n result.set(key, element);\n }\n }\n\n return result;\n}\n\nexport function keyFirstByFn<TKey, TElement>(\n f: (element: TElement, index: number) => TKey\n): (array: ArrayLike<TElement>) => Map<TKey, TElement> {\n return array => keyFirstBy(array, f);\n}\n\nexport function keyLastBy<TKey, TElement>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => TKey\n): Map<TKey, TElement> {\n const result = new Map<TKey, TElement>();\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as TElement;\n const key = f(element, i);\n result.set(key, element);\n }\n\n return result;\n}\n\nexport function keyLastByFn<TKey, TElement>(\n f: (element: TElement, index: number) => TKey\n): (array: ArrayLike<TElement>) => Map<TKey, TElement> {\n return array => keyLastBy(array, f);\n}\n\nexport function mapKeyBy<TKey, TElement, TNewElement>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => readonly [TKey, TNewElement]\n): Map<TKey, TNewElement[]> {\n const result = new Map<TKey, TNewElement[]>();\n\n for (let i = 0; i < array.length; ++i) {\n const [key, element] = f(array[i] as TElement, i);\n const group = result.get(key) ?? [];\n if (!result.has(key)) {\n result.set(key, group);\n }\n group.push(element);\n }\n\n return result;\n}\n\nexport function mapKeyByFn<TKey, TElement, TNewElement>(\n f: (element: TElement, index: number) => readonly [TKey, TNewElement]\n): (array: ArrayLike<TElement>) => Map<TKey, TNewElement[]> {\n return array => mapKeyBy(array, f);\n}\n\nexport function mapKeyFirstBy<TKey, TElement, TNewElement>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => readonly [TKey, TNewElement]\n): Map<TKey, TNewElement> {\n const result = new Map<TKey, TNewElement>();\n\n for (let i = 0; i < array.length; ++i) {\n const [key, element] = f(array[i] as TElement, i);\n if (!result.has(key)) {\n result.set(key, element);\n }\n }\n\n return result;\n}\n\nexport function mapKeyFirstByFn<TKey, TElement, TNewElement>(\n f: (element: TElement, index: number) => readonly [TKey, TNewElement]\n): (array: ArrayLike<TElement>) => Map<TKey, TNewElement> {\n return array => mapKeyFirstBy(array, f);\n}\n\nexport function mapKeyLastBy<TKey, TElement, TNewElement>(\n array: ArrayLike<TElement>,\n f: (element: TElement, index: number) => readonly [TKey, TNewElement]\n): Map<TKey, TNewElement> {\n const result = new Map<TKey, TNewElement>();\n\n for (let i = 0; i < array.length; ++i) {\n const [key, element] = f(array[i] as TElement, i);\n result.set(key, element);\n }\n\n return result;\n}\n\nexport function mapKeyLastByFn<TKey, TElement, TNewElement>(\n f: (element: TElement, index: number) => readonly [TKey, TNewElement]\n): (array: ArrayLike<TElement>) => Map<TKey, TNewElement> {\n return array => mapKeyLastBy(array, f);\n}\n\nexport interface IdentityGrouping<T> {\n readonly identity: (element: T) => unknown;\n}\n\nexport interface EqualityGrouping<T> {\n readonly equal: (a: T, b: T) => boolean;\n readonly hash?: (element: T, index: number) => unknown;\n}\n\nexport interface OrderedGrouping<T> {\n readonly compare: Comparator<T>;\n readonly hash?: (element: T, index: number) => unknown;\n}\n\nexport interface HashGrouping<T> {\n readonly hash: (element: T, index: number) => unknown;\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 return groupByIdentity(array, grouping.identity);\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>(\n array: ArrayLike<T>,\n identity: (element: T) => unknown = element => element\n): 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] as T;\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 => groupByIdentity(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 const group = notNull(result[j]);\n if (equal(group[0] as T, array[i] as T)) {\n group.push(array[i] as T);\n continue outer;\n }\n }\n\n result.push([array[i] as T]);\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) => unknown\n): T[][] {\n const groups = new Map<unknown, T[]>();\n const result: T[][] = [];\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as T;\n const h = hash(element, i);\n\n const group = groups.get(h) ?? [];\n if (!groups.has(h)) {\n result.push(group);\n groups.set(h, group);\n }\n group.push(element);\n }\n\n return result;\n}\n\nexport function groupByHashFn<T>(\n hash: (element: T, index: number) => unknown\n): (array: ArrayLike<T>) => T[][] {\n return array => groupByHash(array, hash);\n}\n\nexport function groupByEqualityWithHash<T>(\n array: ArrayLike<T>,\n equal: (a: T, b: T) => boolean,\n hash: (element: T, index: number) => unknown\n): T[][] {\n const groups = new Map<unknown, T[][]>();\n const result: T[][] = [];\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as T;\n const h = hash(element, i);\n\n const hashGroup = groups.get(h) ?? [];\n if (!groups.has(h)) {\n groups.set(h, hashGroup);\n }\n const group = find(hashGroup, group => equal(group[0] as T, element));\n if (group == null) {\n const newGroup = [element];\n hashGroup.push(newGroup);\n result.push(newGroup);\n } else {\n group.push(element);\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) => unknown\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) => unknown\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) => unknown\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 = array[0] as T;\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] as T;\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) => unknown\n): T[][] {\n if (array.length === 0) {\n return [];\n }\n\n const element = array[0] as T;\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] as T;\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) => unknown\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 return uniqueByIdentityInternal(array, grouping.identity);\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\nfunction uniqueByIdentityInternal<T>(array: ArrayLike<T>, identity: (element: T) => unknown): T[] {\n const set = new Set<unknown>();\n const result: T[] = [];\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as T;\n if (!set.has(identity(element))) {\n set.add(identity(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] as T;\n for (let j = 0; j < result.length; ++j) {\n if (equal(element, result[j] as T)) {\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) => unknown\n): T[] {\n const seen = new Set<unknown>();\n const result: T[] = [];\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as T;\n const h = hash(element, i);\n if (!seen.has(h)) {\n seen.add(h);\n result.push(element);\n }\n }\n\n return result;\n}\n\nexport function uniqueByHashFn<T>(\n hash: (element: T, index: number) => unknown\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueByHash(array, hash);\n}\n\nexport function uniqueByEqualityWithHash<T>(\n array: ArrayLike<T>,\n equal: (a: T, b: T) => boolean,\n hash: (element: T, index: number) => unknown\n): T[] {\n const seenGroups = new Map<unknown, T[]>();\n const result: T[] = [];\n\n for (let i = 0; i < array.length; ++i) {\n const element = array[i] as T;\n const h = hash(element, i);\n\n const seenGroup = seenGroups.get(h) ?? [];\n\n if (!seenGroups.has(h)) {\n seenGroups.set(h, seenGroup);\n }\n\n if (all(seenGroup, seenElement => !equal(seenElement, element))) {\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) => unknown\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) => unknown\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) => unknown\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 = array[0] as T;\n const result = [element];\n\n for (let i = 1; i < array.length; ++i) {\n const prev = element;\n element = array[i] as T;\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) => unknown\n): T[] {\n if (array.length === 0) {\n return [];\n }\n\n const element = array[0] as T;\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] as T;\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) => unknown\n): (array: ArrayLike<T>) => T[] {\n return array => uniqueAdjacentByHash(array, hash);\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 unknown as Comparator<T>));\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) =>\n (defaultCompare as Comparator<string | number | boolean>)(select(a), select(b))\n );\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(\n array,\n (a, b) => -(defaultCompare as Comparator<string | number | boolean>)(select(a), select(b))\n );\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] as T, 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
|
+
"version": "7.0.0-alpha.1",
|
|
4
4
|
"description": "Pure functional array manipulation and traversal",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"array",
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"repository": "github:softwareventures/array",
|
|
15
15
|
"license": "ISC",
|
|
16
16
|
"scripts": {
|
|
17
|
-
"pre-commit": "precise-commits",
|
|
18
17
|
"fix": "tsc --noEmit && eslint . --fix && prettier --write .",
|
|
19
18
|
"lint": "tsc --noEmit && eslint . && prettier --check .",
|
|
19
|
+
"pre-commit": "precise-commits",
|
|
20
20
|
"prepare": "husky install && tsc",
|
|
21
21
|
"semantic-release": "semantic-release",
|
|
22
22
|
"test": "ava"
|
|
@@ -31,26 +31,27 @@
|
|
|
31
31
|
"tslib": "^2.0.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@softwareventures/eslint-config": "7.
|
|
35
|
-
"@softwareventures/precise-commits": "3.0.
|
|
34
|
+
"@softwareventures/eslint-config": "7.1.4",
|
|
35
|
+
"@softwareventures/precise-commits": "3.0.30",
|
|
36
36
|
"@softwareventures/prettier-config": "4.0.0",
|
|
37
|
-
"@softwareventures/semantic-release-config": "
|
|
38
|
-
"@softwareventures/tsconfig": "7.
|
|
39
|
-
"@typescript-eslint/eslint-plugin": "
|
|
40
|
-
"@typescript-eslint/parser": "
|
|
41
|
-
"ava": "5.1
|
|
37
|
+
"@softwareventures/semantic-release-config": "4.0.0",
|
|
38
|
+
"@softwareventures/tsconfig": "7.1.0",
|
|
39
|
+
"@typescript-eslint/eslint-plugin": "6.13.2",
|
|
40
|
+
"@typescript-eslint/parser": "6.13.2",
|
|
41
|
+
"ava": "5.3.1",
|
|
42
|
+
"conventional-changelog-conventionalcommits": "7.0.2",
|
|
42
43
|
"cz-conventional-changelog": "3.3.0",
|
|
43
|
-
"eslint": "8.
|
|
44
|
-
"eslint-config-prettier": "
|
|
45
|
-
"eslint-plugin-import": "2.
|
|
46
|
-
"eslint-plugin-jsdoc": "
|
|
44
|
+
"eslint": "8.55.0",
|
|
45
|
+
"eslint-config-prettier": "9.1.0",
|
|
46
|
+
"eslint-plugin-import": "2.29.0",
|
|
47
|
+
"eslint-plugin-jsdoc": "46.9.0",
|
|
47
48
|
"eslint-plugin-prefer-arrow": "1.2.3",
|
|
48
|
-
"eslint-plugin-sonarjs": "0.
|
|
49
|
-
"husky": "8.0.
|
|
50
|
-
"prettier": "2.
|
|
51
|
-
"semantic-release": "
|
|
49
|
+
"eslint-plugin-sonarjs": "0.23.0",
|
|
50
|
+
"husky": "8.0.3",
|
|
51
|
+
"prettier": "2.8.8",
|
|
52
|
+
"semantic-release": "22.0.9",
|
|
52
53
|
"ts-node": "10.9.1",
|
|
53
|
-
"typescript": "
|
|
54
|
+
"typescript": "5.2.2"
|
|
54
55
|
},
|
|
55
56
|
"eslintConfig": {
|
|
56
57
|
"root": true,
|