@softwareventures/array 6.1.0 → 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/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<T = unknown>(value: readonly T[] | unknown): value is readonly T[];
4
- export declare function isArrayLike<T>(value: ArrayLike<T> | unknown): value is ArrayLike<T>;
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[];
@@ -241,8 +233,6 @@ export declare function uniqueAdjacentByOrder<T>(array: ArrayLike<T>, compare: C
241
233
  export declare function uniqueAdjacentByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[];
242
234
  export declare function uniqueAdjacentByHash<T>(array: ArrayLike<T>, hash: (element: T, index: number) => unknown): T[];
243
235
  export declare function uniqueAdjacentByHashFn<T>(hash: (element: T, index: number) => unknown): (array: ArrayLike<T>) => T[];
244
- /** @deprecated Use [array-shuffle](https://npmjs.com/array-shuffle) instead. */
245
- export declare function shuffle<T>(array: ArrayLike<T>): T[];
246
236
  export declare function sort(array: ArrayLike<boolean>): boolean[];
247
237
  export declare function sort(array: ArrayLike<number>): number[];
248
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.removeFn = exports.remove = exports.excludeFirstFn = exports.excludeFirst = exports.excludeNull = exports.excludeFn = exports.exclude = exports.filterFirstFn = exports.filterFirst = exports.filterFn = exports.filter = exports.mapFn = exports.map = exports.prefixMatchFn = exports.prefixMatch = exports.notEqualFn = exports.notEqual = exports.equalFn = exports.equal = exports.dropUntilFn = exports.dropUntil = exports.dropWhileFn = exports.dropWhile = exports.takeUntilFn = exports.takeUntil = exports.takeWhileFn = exports.takeWhile = exports.dropFn = exports.drop = exports.takeFn = exports.take = exports.sliceFn = exports.slice = exports.reverse = exports.notEmpty = exports.empty = exports.only = exports.last = exports.initial = exports.unshiftFn = exports.unshift = exports.pushFn = exports.push = exports.tail = exports.head = exports.first = exports.coerce = exports.isArrayLike = exports.isArray = exports.copy = void 0;
4
- 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 = exports.fold = exports.removeFirstFn = exports.removeFirst = void 0;
5
- 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 = exports.scanFn = exports.scan = exports.noneNull = void 0;
6
- exports.forEachFn = exports.forEach = exports.sortByDescendingFn = exports.sortByDescending = exports.sortByFn = exports.sortBy = exports.sortFn = exports.sort = exports.shuffle = exports.uniqueAdjacentByHashFn = exports.uniqueAdjacentByHash = exports.uniqueAdjacentByOrderFn = exports.uniqueAdjacentByOrder = exports.uniqueAdjacentByEqualityFn = exports.uniqueAdjacentByEquality = exports.uniqueAdjacentByIdentityFn = exports.uniqueAdjacentByIdentity = exports.uniqueAdjacentFn = exports.uniqueAdjacent = exports.uniqueByOrderWithHashFn = exports.uniqueByOrderWithHash = exports.uniqueByEqualityWithHashFn = exports.uniqueByEqualityWithHash = exports.uniqueByHashFn = exports.uniqueByHash = exports.uniqueByOrderFn = exports.uniqueByOrder = exports.uniqueByEqualityFn = exports.uniqueByEquality = exports.uniqueByIdentity = exports.uniqueFn = exports.unique = exports.groupAdjacentByHashFn = exports.groupAdjacentByHash = exports.groupAdjacentByOrderFn = exports.groupAdjacentByOrder = exports.groupAdjacentByEqualityFn = void 0;
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
@@ -46,10 +46,6 @@ function first(array) {
46
46
  return array.length === 0 ? null : array[0];
47
47
  }
48
48
  exports.first = first;
49
- /** @internal This implementation is for internal use only, the exported declaration is above */
50
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
51
- // @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.
52
- exports.head = first;
53
49
  function tail(array) {
54
50
  return nativeSlice.call(array, 1);
55
51
  }
@@ -216,14 +212,24 @@ function filterFn(predicate) {
216
212
  return array => nativeFilter.call(array, predicate);
217
213
  }
218
214
  exports.filterFn = filterFn;
219
- /** @deprecated This function is confusing, use {@link excludeFirst} instead,
220
- * and invert the predicate. */
221
- function filterFirst(array, predicate) {
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) {
222
228
  const result = [];
223
229
  let i = 0;
224
230
  for (; i < array.length; ++i) {
225
231
  const element = array[i];
226
- if (predicate(element, i)) {
232
+ if (!predicate(element, i)) {
227
233
  result.push(element);
228
234
  }
229
235
  else {
@@ -235,28 +241,6 @@ function filterFirst(array, predicate) {
235
241
  }
236
242
  return result;
237
243
  }
238
- exports.filterFirst = filterFirst;
239
- /** @deprecated This function is confusing, use {@link excludeFirstFn} instead,
240
- * and invert the predicate. */
241
- function filterFirstFn(predicate) {
242
- return array => filterFirst(array, predicate);
243
- }
244
- exports.filterFirstFn = filterFirstFn;
245
- function exclude(array, predicate) {
246
- return filter(array, (element, index) => !predicate(element, index));
247
- }
248
- exports.exclude = exclude;
249
- function excludeFn(predicate) {
250
- return array => exclude(array, predicate);
251
- }
252
- exports.excludeFn = excludeFn;
253
- function excludeNull(array) {
254
- return filter(array, nullable_1.isNotNull);
255
- }
256
- exports.excludeNull = excludeNull;
257
- function excludeFirst(array, predicate) {
258
- return filterFirst(array, (element, index) => !predicate(element, index));
259
- }
260
244
  exports.excludeFirst = excludeFirst;
261
245
  function excludeFirstFn(predicate) {
262
246
  return array => excludeFirst(array, predicate);
@@ -1187,18 +1171,6 @@ function uniqueAdjacentByHashFn(hash) {
1187
1171
  return array => uniqueAdjacentByHash(array, hash);
1188
1172
  }
1189
1173
  exports.uniqueAdjacentByHashFn = uniqueAdjacentByHashFn;
1190
- /** @deprecated Use [array-shuffle](https://npmjs.com/array-shuffle) instead. */
1191
- function shuffle(array) {
1192
- const result = (0, exports.copy)(array);
1193
- for (let i = 0; i < array.length; ++i) {
1194
- const j = i + Math.floor(Math.random() * (array.length - i));
1195
- const replacement = result[j];
1196
- result[j] = result[i];
1197
- result[i] = replacement;
1198
- }
1199
- return result;
1200
- }
1201
- exports.shuffle = shuffle;
1202
1174
  function sort(array, comparator) {
1203
1175
  return (0, exports.copy)(array).sort(comparator !== null && comparator !== void 0 ? comparator : ordered_1.compare);
1204
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.\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\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\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\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 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\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": "6.1.0",
3
+ "version": "7.0.0-alpha.1",
4
4
  "description": "Pure functional array manipulation and traversal",
5
5
  "keywords": [
6
6
  "array",