@softwareventures/array 7.0.1 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2018-2025 Software Ventures Limited.
1
+ Copyright 2018-2026 Software Ventures Limited.
2
2
 
3
3
  Permission to use, copy, modify, and/or distribute this software for any purpose
4
4
  with or without fee is hereby granted, provided that the above copyright notice
package/index.d.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  import type { Comparator } from "@softwareventures/ordered";
2
2
  export declare function copy<T>(array: ArrayLike<T>): T[];
3
+ /** @internal This implementation is for internal use only, the exported declaration is above */
4
+ export declare const copy: <T>(array: ArrayLike<T>) => T[];
3
5
  export declare function isArray(value: unknown): value is readonly unknown[];
6
+ /** @internal This implementation is for internal use only, the exported declaration is above */
7
+ export declare const isArray: (value: unknown) => value is unknown[];
4
8
  export declare function isArrayLike(value: unknown): value is ArrayLike<unknown>;
5
9
  export declare function coerce<T>(array: ArrayLike<T>): readonly T[];
6
10
  export declare function first<T>(array: ArrayLike<T>): T | null;
@@ -40,6 +44,8 @@ export declare function notEqualFn<T>(b: ArrayLike<T>, elementsEqual?: (a: T, b:
40
44
  export declare function prefixMatch<T>(a: ArrayLike<T>, b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): boolean;
41
45
  export declare function prefixMatchFn<T>(b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): (a: ArrayLike<T>) => boolean;
42
46
  export declare function map<T, U>(array: ArrayLike<T>, f: (element: T, index: number) => U): U[];
47
+ /** @internal This implementation is for internal use only, the exported declaration is above */
48
+ export declare const map: <T, U>(array: ArrayLike<T>, f: (element: T, index: number) => U) => U[];
43
49
  export declare function mapFn<T, U>(f: (element: T, index: number) => U): (array: ArrayLike<T>) => U[];
44
50
  export declare function filter<T, U extends T>(array: ArrayLike<T>, predicate: (element: T, index: number) => element is U): U[];
45
51
  export declare function filter<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
package/index.js CHANGED
@@ -183,21 +183,13 @@ exports.forEach = forEach;
183
183
  exports.forEachFn = forEachFn;
184
184
  const nullable_1 = require("@softwareventures/nullable");
185
185
  const ordered_1 = require("@softwareventures/ordered");
186
- // eslint-disable-next-line @typescript-eslint/unbound-method
187
186
  const nativeSlice = Array.prototype.slice;
188
- // eslint-disable-next-line @typescript-eslint/unbound-method
189
187
  const nativeReverse = Array.prototype.reverse;
190
- // eslint-disable-next-line @typescript-eslint/unbound-method
191
188
  const nativeConcat = Array.prototype.concat;
192
- // eslint-disable-next-line @typescript-eslint/unbound-method
193
189
  const nativeFilter = Array.prototype.filter;
194
- // eslint-disable-next-line @typescript-eslint/unbound-method
195
190
  const nativeReduce = Array.prototype.reduce;
196
- // eslint-disable-next-line @typescript-eslint/unbound-method
197
191
  const nativeReduceRight = Array.prototype.reduceRight;
198
- // eslint-disable-next-line @typescript-eslint/unbound-method
199
192
  const nativeIndexOf = Array.prototype.indexOf;
200
- // eslint-disable-next-line @typescript-eslint/unbound-method
201
193
  const nativeFindIndex = Array.prototype.findIndex;
202
194
  /** @internal This implementation is for internal use only, the exported declaration is above */
203
195
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -207,7 +199,6 @@ exports.copy = Array.from;
207
199
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
208
200
  // @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.
209
201
  exports.isArray = Array.isArray;
210
- // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
211
202
  function isArrayLike(value) {
212
203
  return (typeof value === "object" &&
213
204
  value != null &&
@@ -500,10 +491,10 @@ function findLastFn(predicate) {
500
491
  return array => findLast(array, predicate);
501
492
  }
502
493
  function maximum(array, compare) {
503
- return internalMaximum(array, compare !== null && compare !== void 0 ? compare : ordered_1.compare);
494
+ return internalMaximum(array, compare ?? ordered_1.compare);
504
495
  }
505
496
  function maximumFn(compare) {
506
- return array => internalMaximum(array, compare !== null && compare !== void 0 ? compare : ordered_1.compare);
497
+ return array => internalMaximum(array, compare ?? ordered_1.compare);
507
498
  }
508
499
  function internalMaximum(array, compare) {
509
500
  if (array.length === 0) {
@@ -524,10 +515,10 @@ function maximumByFn(select) {
524
515
  return array => maximumBy(array, select);
525
516
  }
526
517
  function minimum(array, compare) {
527
- return internalMinimum(array, compare !== null && compare !== void 0 ? compare : ordered_1.compare);
518
+ return internalMinimum(array, compare ?? ordered_1.compare);
528
519
  }
529
520
  function minimumFn(compare) {
530
- return array => internalMinimum(array, compare !== null && compare !== void 0 ? compare : ordered_1.compare);
521
+ return array => internalMinimum(array, compare ?? ordered_1.compare);
531
522
  }
532
523
  function internalMinimum(array, compare) {
533
524
  if (array.length === 0) {
@@ -717,12 +708,11 @@ function zipFn(b) {
717
708
  return a => zip(a, b);
718
709
  }
719
710
  function keyBy(array, f) {
720
- var _a;
721
711
  const result = new Map();
722
712
  for (let i = 0; i < array.length; ++i) {
723
713
  const element = array[i];
724
714
  const key = f(element, i);
725
- const group = (_a = result.get(key)) !== null && _a !== void 0 ? _a : [];
715
+ const group = result.get(key) ?? [];
726
716
  if (!result.has(key)) {
727
717
  result.set(key, group);
728
718
  }
@@ -760,11 +750,10 @@ function keyLastByFn(f) {
760
750
  return array => keyLastBy(array, f);
761
751
  }
762
752
  function mapKeyBy(array, f) {
763
- var _a;
764
753
  const result = new Map();
765
754
  for (let i = 0; i < array.length; ++i) {
766
755
  const [key, element] = f(array[i], i);
767
- const group = (_a = result.get(key)) !== null && _a !== void 0 ? _a : [];
756
+ const group = result.get(key) ?? [];
768
757
  if (!result.has(key)) {
769
758
  result.set(key, group);
770
759
  }
@@ -827,13 +816,12 @@ function groupFn(grouping) {
827
816
  return array => group(array, grouping);
828
817
  }
829
818
  function groupByIdentity(array, identity = element => element) {
830
- var _a;
831
819
  const groups = [];
832
820
  const map = new Map();
833
821
  for (let i = 0; i < array.length; ++i) {
834
822
  const element = array[i];
835
823
  const key = identity(element);
836
- const group = (_a = map.get(key)) !== null && _a !== void 0 ? _a : [];
824
+ const group = map.get(key) ?? [];
837
825
  group.push(element);
838
826
  if (!map.has(key)) {
839
827
  groups.push(group);
@@ -870,13 +858,12 @@ function groupByOrderFn(compare) {
870
858
  return array => groupByOrder(array, compare);
871
859
  }
872
860
  function groupByHash(array, hash) {
873
- var _a;
874
861
  const groups = new Map();
875
862
  const result = [];
876
863
  for (let i = 0; i < array.length; ++i) {
877
864
  const element = array[i];
878
865
  const h = hash(element, i);
879
- const group = (_a = groups.get(h)) !== null && _a !== void 0 ? _a : [];
866
+ const group = groups.get(h) ?? [];
880
867
  if (!groups.has(h)) {
881
868
  result.push(group);
882
869
  groups.set(h, group);
@@ -889,13 +876,12 @@ function groupByHashFn(hash) {
889
876
  return array => groupByHash(array, hash);
890
877
  }
891
878
  function groupByEqualityWithHash(array, equal, hash) {
892
- var _a;
893
879
  const groups = new Map();
894
880
  const result = [];
895
881
  for (let i = 0; i < array.length; ++i) {
896
882
  const element = array[i];
897
883
  const h = hash(element, i);
898
- const hashGroup = (_a = groups.get(h)) !== null && _a !== void 0 ? _a : [];
884
+ const hashGroup = groups.get(h) ?? [];
899
885
  if (!groups.has(h)) {
900
886
  groups.set(h, hashGroup);
901
887
  }
@@ -1027,7 +1013,7 @@ function uniqueFn(grouping) {
1027
1013
  return array => unique(array, grouping);
1028
1014
  }
1029
1015
  function uniqueByIdentity(array, identity) {
1030
- return uniqueByIdentityInternal(array, identity !== null && identity !== void 0 ? identity : (element => element));
1016
+ return uniqueByIdentityInternal(array, identity ?? (element => element));
1031
1017
  }
1032
1018
  function uniqueByIdentityInternal(array, identity) {
1033
1019
  const set = new Set();
@@ -1081,13 +1067,12 @@ function uniqueByHashFn(hash) {
1081
1067
  return array => uniqueByHash(array, hash);
1082
1068
  }
1083
1069
  function uniqueByEqualityWithHash(array, equal, hash) {
1084
- var _a;
1085
1070
  const seenGroups = new Map();
1086
1071
  const result = [];
1087
1072
  for (let i = 0; i < array.length; ++i) {
1088
1073
  const element = array[i];
1089
1074
  const h = hash(element, i);
1090
- const seenGroup = (_a = seenGroups.get(h)) !== null && _a !== void 0 ? _a : [];
1075
+ const seenGroup = seenGroups.get(h) ?? [];
1091
1076
  if (!seenGroups.has(h)) {
1092
1077
  seenGroups.set(h, seenGroup);
1093
1078
  }
@@ -1177,7 +1162,7 @@ function uniqueAdjacentByHashFn(hash) {
1177
1162
  return array => uniqueAdjacentByHash(array, hash);
1178
1163
  }
1179
1164
  function sort(array, comparator) {
1180
- return (0, exports.copy)(array).sort(comparator !== null && comparator !== void 0 ? comparator : ordered_1.compare);
1165
+ return (0, exports.copy)(array).sort(comparator ?? ordered_1.compare);
1181
1166
  }
1182
1167
  function sortFn(comparator) {
1183
1168
  return array => sort(array, comparator);
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAoDA,kCAOC;AAED,wBAEC;AAED,sBAEC;AAED,oBAEC;AAED,oBAEC;AAED,wBAEC;AAED,0BAEC;AAED,8BAEC;AAED,0BAEC;AAED,oBAEC;AAID,oBAEC;AAED,sBAEC;AAED,4BAEC;AAED,0BAEC;AAED,sBAEC;AAED,0BAEC;AAED,oBAEC;AAED,wBAEC;AAED,oBAEC;AAED,wBAEC;AAUD,8BASC;AAQD,kCAIC;AAED,8BAKC;AAED,kCAIC;AAED,8BASC;AAED,kCAIC;AAED,8BAKC;AAED,kCAIC;AAED,sBAgBC;AAED,0BAKC;AAED,4BAMC;AAED,gCAKC;AAED,kCAgBC;AAED,sCAKC;AAYD,sBAEC;AAUD,wBAKC;AAQD,4BAIC;AAUD,0BAKC;AAQD,8BAIC;AAED,kCAEC;AAED,oCAkBC;AAED,wCAIC;AAED,wBAEC;AAED,4BAEC;AAED,kCAEC;AAED,sCAEC;AAED,oBAQC;AAED,wBAQC;AAED,sBAQC;AAED,0BAIC;AAED,8BAQC;AAED,kCAWC;AAED,gCAQC;AAED,oCAIC;AAED,0BAYC;AAED,8BAMC;AAED,oCAaC;AAED,wCAMC;AAED,4BAEC;AAED,gCAEC;AAED,0BAGC;AAED,8BAEC;AAED,kCAOC;AAED,sCAEC;AAED,8BAMC;AAED,kCAIC;AAED,sCAUC;AAED,0CAIC;AAUD,oBAMC;AAQD,wBAIC;AAUD,4BAWC;AAQD,gCAIC;AAID,0BAEC;AAID,8BAEC;AAkBD,8BAEC;AAED,kCAEC;AAID,0BAEC;AAID,8BAEC;AAkBD,8BAEC;AAED,kCAEC;AAED,kBAEC;AAED,0BAEC;AAED,0BAMC;AAED,kBAEC;AAED,gBAEC;AAED,kBAKC;AAED,sBAIC;AAcD,kBAKC;AAQD,sBAIC;AAED,wBAEC;AAED,0BAEC;AAED,wBAEC;AAED,8BAKC;AAED,kCAIC;AAID,4BAEC;AAED,oBAaC;AAED,wBAKC;AAED,sBAgBC;AAED,0BAIC;AAED,8BAaC;AAED,kCAKC;AAED,gCAgBC;AAED,oCAIC;AAMD,sBAEC;AAKD,0BAEC;AAUD,8BAgBC;AAQD,kCAIC;AAUD,wCAYC;AAQD,4CAIC;AAED,wCAKC;AAED,4CAIC;AAMD,kBAOC;AASD,sBAEC;AAED,sBAiBC;AAED,0BAIC;AAED,gCAeC;AAED,oCAIC;AAED,8BAaC;AAED,kCAIC;AAED,4BAgBC;AAED,gCAIC;AAED,sCAcC;AAED,0CAIC;AAED,oCAYC;AAED,wCAIC;AA0BD,sBAkBC;AAED,0BAEC;AAED,0CAiBC;AAED,8CAIC;AAED,0CAgBC;AAED,8CAIC;AAED,oCAGC;AAED,wCAEC;AAED,kCAoBC;AAED,sCAIC;AAED,0DA2BC;AAED,8DAKC;AAED,oDAMC;AAED,wDAKC;AAED,sCAUC;AAED,0CAEC;AAED,0DAOC;AAED,8DAIC;AAED,0DAwBC;AAED,8DAIC;AAED,oDAEC;AAED,wDAEC;AAED,kDA0BC;AAED,sDAIC;AAED,wBAkBC;AAED,4BAEC;AAED,4CAEC;AAeD,4CAcC;AAED,gDAIC;AAED,sCAEC;AAED,0CAGC;AAED,oCAiBC;AAED,wCAIC;AAED,4DAyBC;AAED,gEAKC;AAED,sDAMC;AAED,0DAKC;AAED,wCAUC;AAED,4CAEC;AAED,4DAOC;AAED,gEAIC;AAED,4DAoBC;AAED,gEAIC;AAED,sDAEC;AAED,0DAEC;AAED,oDAsBC;AAED,wDAIC;AAMD,oBAEC;AAED,wBAEC;AAED,wBAIC;AAED,4BAEC;AAED,4CAKC;AAED,gDAEC;AAOD,0BAQC;AAED,8BAIC;AA9sDD,yDAAsE;AAEtE,uDAImC;AAEnC,6DAA6D;AAC7D,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;AAE1C,6DAA6D;AAC7D,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;AAE9C,6DAA6D;AAC7D,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AAE5C,6DAA6D;AAC7D,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AAE5C,6DAA6D;AAC7D,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AAE5C,6DAA6D;AAC7D,MAAM,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC;AAEtD,6DAA6D;AAC7D,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;AAE9C,6DAA6D;AAC7D,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC;AAMlD,gGAAgG;AAChG,6DAA6D;AAC7D,yGAAyG;AAC5F,QAAA,IAAI,GAAoC,KAAK,CAAC,IAAI,CAAC;AAOhE,gGAAgG;AAChG,6DAA6D;AAC7D,yGAAyG;AAC5F,QAAA,OAAO,GAA2C,KAAK,CAAC,OAAO,CAAC;AAE7E,6EAA6E;AAC7E,SAAgB,WAAW,CAAC,KAAc;IACtC,OAAO,CACH,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,IAAI,IAAI;QACb,QAAQ,IAAI,KAAK;QACjB,OAAQ,KAA2B,CAAC,MAAM,KAAK,QAAQ,CAC1D,CAAC;AACN,CAAC;AAED,SAAgB,MAAM,CAAI,KAAmB;IACzC,OAAO,IAAA,eAAO,EAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAsB,CAAC,CAAC,CAAC,IAAA,YAAI,EAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,SAAgB,KAAK,CAAI,KAAmB;IACxC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,KAAK,CAAC,CAAC,CAAO,CAAC;AACvD,CAAC;AAED,SAAgB,IAAI,CAAI,KAAmB;IACvC,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAQ,CAAC;AAC7C,CAAC;AAED,SAAgB,IAAI,CAAI,KAAmB,EAAE,KAAQ;IACjD,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,MAAM,CAAI,KAAQ;IAC9B,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,OAAO,CAAI,KAAmB,EAAE,KAAQ;IACpD,OAAO,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,SAAS,CAAI,KAAQ;IACjC,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,OAAO,CAAI,KAAmB;IAC1C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC;AAC3F,CAAC;AAED,SAAgB,IAAI,CAAI,KAAmB;IACvC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAO,CAAC;AACtE,CAAC;AAED;8BAC8B;AAC9B,SAAgB,IAAI,CAAI,KAAmB;IACvC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,CAAC,CAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED,SAAgB,KAAK,CAAI,KAAmB;IACxC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,QAAQ,CAAI,KAAmB;IAC3C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAgB,OAAO,CAAI,KAAmB;IAC1C,OAAO,aAAa,CAAC,IAAI,CAAC,IAAA,YAAI,EAAC,KAAK,CAAC,CAAQ,CAAC;AAClD,CAAC;AAED,SAAgB,KAAK,CAAI,KAAmB,EAAE,KAAc,EAAE,GAAY;IACtE,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAQ,CAAC;AACtD,CAAC;AAED,SAAgB,OAAO,CAAI,KAAc,EAAE,GAAY;IACnD,OAAO,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAQ,CAAC;AAC/D,CAAC;AAED,SAAgB,IAAI,CAAI,KAAmB,EAAE,KAAa;IACtD,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAQ,CAAC;AACpD,CAAC;AAED,SAAgB,MAAM,CAAI,KAAa;IACnC,OAAO,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAQ,CAAC;AAC7D,CAAC;AAED,SAAgB,IAAI,CAAI,KAAmB,EAAE,KAAa;IACtD,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAQ,CAAC;AACjD,CAAC;AAED,SAAgB,MAAM,CAAI,KAAa;IACnC,OAAO,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAQ,CAAC;AAC1D,CAAC;AAUD,SAAgB,SAAS,CACrB,KAAmB,EACnB,SAAiD;IAEjD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,EAAE,CAAC;QACrD,EAAE,CAAC,CAAC;IACR,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1B,CAAC;AAQD,SAAgB,WAAW,CACvB,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,SAAS,CACrB,KAAmB,EACnB,SAAiD;IAEjD,OAAO,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAgB,WAAW,CACvB,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,SAAS,CACrB,KAAmB,EACnB,SAAiD;IAEjD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,EAAE,CAAC;QACrD,EAAE,CAAC,CAAC;IACR,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,WAAW,CACvB,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,SAAS,CACrB,KAAmB,EACnB,SAAiD;IAEjD,OAAO,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAgB,WAAW,CACvB,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,KAAK,CACjB,CAAe,EACf,CAAe,EACf,gBAAyC,eAAY;IAErD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC,CAAM,CAAC,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,OAAO,CACnB,CAAe,EACf,gBAAyC,eAAY;IAErD,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,QAAQ,CACpB,CAAe,EACf,CAAe,EACf,gBAAyC,eAAY;IAErD,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,UAAU,CACtB,CAAe,EACf,gBAAyC,eAAY;IAErD,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,WAAW,CACvB,CAAe,EACf,CAAe,EACf,gBAAyC,eAAY;IAErD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,aAAa,CACzB,CAAe,EACf,gBAAyC,eAAY;IAErD,OAAO,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AACjD,CAAC;AAMD,gGAAgG;AAChG,6DAA6D;AAC7D,yGAAyG;AAC5F,QAAA,GAAG,GACZ,KAAK,CAAC,IAAI,CAAC;AAEf,SAAgB,KAAK,CAAO,CAAmC;IAC3D,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAUD,SAAgB,MAAM,CAClB,KAAmB,EACnB,SAAiD;IAEjD,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAQ,CAAC;AACtD,CAAC;AAQD,SAAgB,QAAQ,CACpB,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAQ,CAAC;AAC/D,CAAC;AAUD,SAAgB,OAAO,CACnB,KAAmB,EACnB,SAAiD;IAEjD,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACzE,CAAC;AAQD,SAAgB,SAAS,CACrB,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,WAAW,CAAI,KAAsC;IACjE,OAAO,MAAM,CAAC,KAAK,EAAE,oBAAS,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,YAAY,CACxB,KAAmB,EACnB,SAAiD;IAEjD,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACJ,MAAM;QACV,CAAC;IACL,CAAC;IACD,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAM,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,cAAc,CAC1B,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,MAAM,CAAI,KAAmB,EAAE,KAAQ;IACnD,OAAO,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAgB,QAAQ,CAAI,KAAQ;IAChC,OAAO,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,WAAW,CAAI,KAAmB,EAAE,KAAQ;IACxD,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,SAAgB,aAAa,CAAI,KAAQ;IACrC,OAAO,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,IAAI,CAChB,KAAmB,EACnB,CAAmD,EACnD,OAAU;IAEV,OACI,YACH,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,MAAM,CAClB,CAAmD,EACnD,OAAU;IAEV,OAAO,KAAK,CAAC,EAAE,CAEP,YACH,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,KAAK,CACjB,KAAmB,EACnB,CAAmD;IAEnD,OAAQ,YAA2E,CAAC,IAAI,CACpF,KAAK,EACL,CAAC,CACJ,CAAC;AACN,CAAC;AAED,SAAgB,OAAO,CACnB,CAAmD;IAEnD,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,SAAS,CACrB,KAAmB,EACnB,CAAmD,EACnD,OAAU;IAEV,OACI,iBACH,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,WAAW,CACvB,CAAmD,EACnD,OAAU;IAEV,OAAO,KAAK,CAAC,EAAE,CAEP,iBAIH,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,UAAU,CACtB,KAAmB,EACnB,CAAmD;IAEnD,OAAQ,iBAAgF,CAAC,IAAI,CACzF,KAAK,EACL,CAAC,CACJ,CAAC;AACN,CAAC;AAED,SAAgB,YAAY,CACxB,CAAmD;IAEnD,OAAO,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,OAAO,CACnB,KAAmB,EACnB,CAAmD,EACnD,CAAmC,EACnC,OAAU;IAEV,IAAI,WAAW,GAAG,OAAO,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,WAAW,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC;AAED,SAAgB,SAAS,CACrB,CAAmD,EACnD,CAAmC,EACnC,OAAU;IAEV,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,YAAY,CACxB,KAAmB,EACnB,CAAmD,EACnD,CAAmC,EACnC,OAAU;IAEV,IAAI,WAAW,GAAG,OAAO,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,WAAW,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC;AAED,SAAgB,cAAc,CAC1B,CAAmD,EACnD,CAAmC,EACnC,OAAU;IAEV,OAAO,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,QAAQ,CAAI,KAAmB,EAAE,KAAQ;IACrD,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,UAAU,CAAI,KAAQ;IAClC,OAAO,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAgB,OAAO,CAAI,KAAmB,EAAE,KAAQ;IACpD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACvC,CAAC;AAED,SAAgB,SAAS,CAAI,KAAQ;IACjC,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,WAAW,CAAI,KAAmB,EAAE,KAAQ;IACxD,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACzC,IAAK,KAAK,CAAC,CAAC,CAAO,KAAK,KAAK,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC;QACb,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,aAAa,CAAI,KAAQ;IACrC,OAAO,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,SAAS,CACrB,KAAmB,EACnB,SAAiD;IAEjD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACrD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACvC,CAAC;AAED,SAAgB,WAAW,CACvB,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,aAAa,CACzB,KAAmB,EACnB,SAAiD;IAEjD,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACzC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,CAAC;QACb,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,eAAe,CAC3B,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC;AAUD,SAAgB,IAAI,CAChB,KAAmB,EACnB,SAAiD;IAEjD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1C,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,KAAK,CAAC,KAAK,CAAO,CAAC;AACtD,CAAC;AAQD,SAAgB,MAAM,CAClB,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC;AAUD,SAAgB,QAAQ,CACpB,KAAmB,EACnB,SAAiD;IAEjD,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC9B,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC;QACnB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAQD,SAAgB,UAAU,CACtB,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC;AAID,SAAgB,OAAO,CAAI,KAAmB,EAAE,OAAuB;IACnE,OAAO,eAAe,CAAC,KAAK,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAK,iBAA2C,CAAC,CAAC;AAC3F,CAAC;AAID,SAAgB,SAAS,CAAI,OAAuB;IAChD,OAAO,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAK,iBAA2C,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,eAAe,CAAI,KAAmB,EAAE,OAAsB;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,MAAM,CAAC,GAAG,oBAAU,CAAC,KAAK,EAAE,CAAC;YACpD,MAAM,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,SAAS,CAAI,KAAmB,EAAE,MAA8B;IAC5E,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAA,iBAAc,EAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,SAAgB,WAAW,CAAI,MAA8B;IACzD,OAAO,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAID,SAAgB,OAAO,CAAI,KAAmB,EAAE,OAAuB;IACnE,OAAO,eAAe,CAAC,KAAK,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAK,iBAA2C,CAAC,CAAC;AAC3F,CAAC;AAID,SAAgB,SAAS,CAAI,OAAuB;IAChD,OAAO,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAK,iBAA2C,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,eAAe,CAAI,KAAmB,EAAE,OAAsB;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,MAAM,CAAC,GAAG,oBAAU,CAAC,KAAK,EAAE,CAAC;YACpD,MAAM,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,SAAS,CAAI,KAAmB,EAAE,MAA8B;IAC5E,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAA,iBAAc,EAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,SAAgB,WAAW,CAAI,MAA8B;IACzD,OAAO,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,GAAG,CAAC,KAAwB;IACxC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,OAAO,CAAC,KAAwB;IAC5C,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,OAAO,CAAC,KAAwB;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;SAAM,CAAC;QACJ,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACrC,CAAC;AACL,CAAC;AAED,SAAgB,GAAG,CAAC,KAAyB;IACzC,OAAO,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AACzD,CAAC;AAED,SAAgB,EAAE,CAAC,KAAyB;IACxC,OAAO,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC;AACjE,CAAC;AAED,SAAgB,GAAG,CACf,KAAmB,EACnB,SAAiD;IAEjD,OAAO,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC;AAC/C,CAAC;AAED,SAAgB,KAAK,CACjB,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC;AAcD,SAAgB,GAAG,CACf,KAAmB,EACnB,SAAiD;IAEjD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACvE,CAAC;AAQD,SAAgB,KAAK,CACjB,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,MAAM,CAAI,MAA+B;IACrD,OAAO,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,IAAA,WAAG,EAAC,MAAM,EAAE,MAAM,CAAC,CAAQ,CAAC;AAC9D,CAAC;AAED,SAAgB,OAAO,CAAI,CAAe;IACtC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,SAAgB,MAAM,CAAI,CAAe;IACrC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,SAAgB,SAAS,CACrB,KAAmB,EACnB,CAA8C;IAE9C,OAAO,MAAM,CAAC,IAAA,WAAG,EAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAgB,WAAW,CACvB,CAA8C;IAE9C,OAAO,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC;AAID,SAAgB,QAAQ,CAA+B,KAAQ;IAC3D,OAAO,GAAG,CAAC,KAAK,EAAE,iBAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,KAAqB,CAAC;AAC9D,CAAC;AAED,SAAgB,IAAI,CAChB,KAAmB,EACnB,CAAmD,EACnD,OAAU;IAEV,MAAM,MAAM,GAAQ,IAAA,YAAI,EAAC,EAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC;IACjD,IAAI,WAAW,GAAG,OAAO,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,MAAM,CAClB,CAAmD,EACnD,OAAU;IAEV,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,KAAK,CACjB,KAAmB,EACnB,CAAmD;IAEnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;IAChC,MAAM,MAAM,GAAQ,IAAA,YAAI,EAAC,EAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC;IAEjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,OAAO,CACnB,CAAmD;IAEnD,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,SAAS,CACrB,KAAmB,EACnB,CAAmD,EACnD,OAAU;IAEV,MAAM,MAAM,GAAQ,IAAA,YAAI,EAAC,EAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC;IACjD,IAAI,WAAW,GAAG,OAAO,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,WAAW,CACvB,CAAmD,EACnD,OAAU;IAEV,OAAO,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,UAAU,CACtB,KAAmB,EACnB,CAAmD;IAEnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAM,CAAC;IAC/C,MAAM,MAAM,GAAQ,IAAA,YAAI,EAAC,EAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC;IAElF,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,YAAY,CACxB,CAAmD;IAEnD,OAAO,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;2EAG2E;AAC3E,SAAgB,KAAK,CAAI,KAAmB,EAAE,KAAa;IACvD,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;gDAEgD;AAChD,SAAgB,OAAO,CAAI,KAAa;IACpC,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AAUD,SAAgB,SAAS,CACrB,KAAmB,EACnB,SAAiD;IAEjD,MAAM,CAAC,GAAQ,EAAE,CAAC;IAClB,MAAM,CAAC,GAAQ,EAAE,CAAC;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAM,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACJ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAM,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC;AAQD,SAAgB,WAAW,CACvB,SAAiD;IAEjD,OAAO,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAUD,SAAgB,cAAc,CAC1B,KAAmB,EACnB,SAAiD;IAEjD,IAAI,CAAC,CAAC;IACN,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,EAAE,CAAC;YAC/B,MAAM;QACV,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAQD,SAAgB,gBAAgB,CAC5B,SAAkC;IAElC,OAAO,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,cAAc,CAC1B,KAAmB,EACnB,SAAkC;IAElC,OAAO,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAgB,gBAAgB,CAC5B,SAAkC;IAElC,OAAO,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC;AAED;;;qDAGqD;AACrD,SAAgB,GAAG,CAAO,CAAe,EAAE,CAAe;IACtD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,MAAM,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC,CAAM,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;iDAMiD;AACjD,SAAgB,KAAK,CAAO,CAAe;IACvC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,KAAK,CACjB,KAA0B,EAC1B,CAA6C;;IAE7C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAa,CAAC;QACrC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,OAAO,CACnB,CAA6C;IAE7C,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,UAAU,CACtB,KAA0B,EAC1B,CAA6C;IAE7C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAa,CAAC;QACrC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,YAAY,CACxB,CAA6C;IAE7C,OAAO,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,SAAS,CACrB,KAA0B,EAC1B,CAA6C;IAE7C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAa,CAAC;QACrC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,WAAW,CACvB,CAA6C;IAE7C,OAAO,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,QAAQ,CACpB,KAA0B,EAC1B,CAAqE;;IAErE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAa,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,UAAU,CACtB,CAAqE;IAErE,OAAO,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,aAAa,CACzB,KAA0B,EAC1B,CAAqE;IAErE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAa,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,eAAe,CAC3B,CAAqE;IAErE,OAAO,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,YAAY,CACxB,KAA0B,EAC1B,CAAqE;IAErE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAa,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,cAAc,CAC1B,CAAqE;IAErE,OAAO,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AA0BD,SAAgB,KAAK,CAAI,KAAmB,EAAE,QAAqB;IAC/D,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QACzB,OAAO,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACtC,OAAO,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACJ,OAAO,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;SAAM,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACtC,OAAO,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACJ,OAAO,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;AACL,CAAC;AAED,SAAgB,OAAO,CAAI,QAAqB;IAC5C,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,eAAe,CAC3B,KAAmB,EACnB,WAAoC,OAAO,CAAC,EAAE,CAAC,OAAO;;IAEtD,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAgB,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,iBAAiB,CAC7B,QAAiC;IAEjC,OAAO,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,eAAe,CAAI,KAAmB,EAAE,KAA8B;IAClF,MAAM,MAAM,GAAU,EAAE,CAAC;IAEzB,KAAK,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAA,kBAAO,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,KAAK,CAAC,CAAC,CAAM,CAAC,EAAE,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAM,CAAC,CAAC;gBAC1B,SAAS,KAAK,CAAC;YACnB,CAAC;QACL,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAM,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,iBAAiB,CAC7B,KAA8B;IAE9B,OAAO,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,YAAY,CAAI,KAAmB,EAAE,OAAsB;IACvE,8DAA8D;IAC9D,OAAO,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,oBAAU,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,SAAgB,cAAc,CAAI,OAAsB;IACpD,OAAO,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,WAAW,CACvB,KAAmB,EACnB,IAA4C;;IAE5C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;IACvC,MAAM,MAAM,GAAU,EAAE,CAAC;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE3B,MAAM,KAAK,GAAG,MAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,aAAa,CACzB,IAA4C;IAE5C,OAAO,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,uBAAuB,CACnC,KAAmB,EACnB,KAA8B,EAC9B,IAA4C;;IAE5C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,MAAM,GAAU,EAAE,CAAC;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE3B,MAAM,SAAS,GAAG,MAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACtE,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACJ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,yBAAyB,CACrC,KAA8B,EAC9B,IAA4C;IAE5C,OAAO,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,oBAAoB,CAChC,KAAmB,EACnB,OAAsB,EACtB,IAA4C;IAE5C,OAAO,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,oBAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9F,CAAC;AAED,SAAgB,sBAAsB,CAClC,OAAsB,EACtB,IAA4C;IAE5C,OAAO,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,SAAgB,aAAa,CAAI,KAAmB,EAAE,QAAqB;IACvE,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QACzB,OAAO,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;SAAM,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACJ,OAAO,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;AACL,CAAC;AAED,SAAgB,eAAe,CAAI,QAAqB;IACpD,OAAO,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,uBAAuB,CACnC,KAAmB,EACnB,QAAkC;IAElC,OAAO,QAAQ,IAAI,IAAI;QACnB,CAAC,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAgB,yBAAyB,CACrC,QAAiC;IAEjC,OAAO,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,SAAgB,uBAAuB,CACnC,KAAmB,EACnB,KAA8B;IAE9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;IAC5B,IAAI,KAAK,GAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAU,CAAC,KAAK,CAAC,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC;QACrB,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QACxB,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACJ,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,yBAAyB,CACrC,KAA8B;IAE9B,OAAO,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,oBAAoB,CAAI,KAAmB,EAAE,OAAsB;IAC/E,OAAO,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,oBAAU,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC;AAED,SAAgB,sBAAsB,CAAI,OAAsB;IAC5D,OAAO,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,mBAAmB,CAC/B,KAAmB,EACnB,IAA4C;IAE5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;IAC9B,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzB,IAAI,KAAK,GAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAU,CAAC,KAAK,CAAC,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACX,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACJ,CAAC,GAAG,EAAE,CAAC;YACP,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,qBAAqB,CACjC,IAA4C;IAE5C,OAAO,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,MAAM,CAAI,KAAmB,EAAE,QAAqB;IAChE,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QACzB,OAAO,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACtC,OAAO,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACJ,OAAO,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;SAAM,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACtC,OAAO,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACJ,OAAO,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;AACL,CAAC;AAED,SAAgB,QAAQ,CAAI,QAAqB;IAC7C,OAAO,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,gBAAgB,CAAI,KAAmB,EAAE,QAAkC;IACvF,OAAO,wBAAwB,CAAC,KAAK,EAAE,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,wBAAwB,CAAI,KAAmB,EAAE,QAAiC;IACvF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAW,CAAC;IAC/B,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,gBAAgB,CAAI,KAAmB,EAAE,KAA8B;IACnF,MAAM,MAAM,GAAQ,EAAE,CAAC;IAEvB,KAAK,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAM,CAAC,EAAE,CAAC;gBACjC,SAAS,KAAK,CAAC;YACnB,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,kBAAkB,CAC9B,KAA8B;IAE9B,OAAO,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,aAAa,CAAI,KAAmB,EAAE,OAAsB;IACxE,OAAO,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,oBAAU,CAAC,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,SAAgB,eAAe,CAAI,OAAsB;IACrD,0DAA0D;IAC1D,OAAO,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,YAAY,CACxB,KAAmB,EACnB,IAA4C;IAE5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAChC,MAAM,MAAM,GAAQ,EAAE,CAAC;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,cAAc,CAC1B,IAA4C;IAE5C,OAAO,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,wBAAwB,CACpC,KAAmB,EACnB,KAA8B,EAC9B,IAA4C;;IAE5C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAgB,CAAC;IAC3C,MAAM,MAAM,GAAQ,EAAE,CAAC;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE3B,MAAM,SAAS,GAAG,MAAA,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC;QAE1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;YAC9D,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,0BAA0B,CACtC,KAA8B,EAC9B,IAA4C;IAE5C,OAAO,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,SAAgB,qBAAqB,CACjC,KAAmB,EACnB,OAAsB,EACtB,IAA4C;IAE5C,OAAO,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,oBAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/F,CAAC;AAED,SAAgB,uBAAuB,CACnC,OAAsB,EACtB,IAA4C;IAE5C,OAAO,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,cAAc,CAAI,KAAmB,EAAE,QAAqB;IACxE,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QACzB,OAAO,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;SAAM,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACJ,OAAO,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;AACL,CAAC;AAED,SAAgB,gBAAgB,CAAI,QAAqB;IACrD,OAAO,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,wBAAwB,CACpC,KAAmB,EACnB,QAAkC;IAElC,OAAO,QAAQ,IAAI,IAAI;QACnB,CAAC,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAgB,0BAA0B,CACtC,QAAiC;IAEjC,OAAO,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,wBAAwB,CACpC,KAAmB,EACnB,KAA8B;IAE9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;IAC5B,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC;QACrB,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,0BAA0B,CACtC,KAA8B;IAE9B,OAAO,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,qBAAqB,CAAI,KAAmB,EAAE,OAAsB;IAChF,OAAO,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,oBAAU,CAAC,KAAK,CAAC,CAAC;AACzF,CAAC;AAED,SAAgB,uBAAuB,CAAI,OAAsB;IAC7D,OAAO,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,oBAAoB,CAChC,KAAmB,EACnB,IAA4C;IAE5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;IAC9B,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACX,CAAC,GAAG,EAAE,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,sBAAsB,CAClC,IAA4C;IAE5C,OAAO,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AAMD,SAAgB,IAAI,CAAI,KAAmB,EAAE,UAA0B;IACnE,OAAO,IAAA,YAAI,EAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,aAAV,UAAU,cAAV,UAAU,GAAK,iBAA2C,CAAC,CAAC;AACxF,CAAC;AAED,SAAgB,MAAM,CAAI,UAAyB;IAC/C,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,MAAM,CAAI,KAAmB,EAAE,MAAqB;IAChE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACvB,iBAAwD,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAClF,CAAC;AACN,CAAC;AAED,SAAgB,QAAQ,CAAI,MAAqB;IAC7C,OAAO,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,gBAAgB,CAAI,KAAmB,EAAE,MAAqB;IAC1E,OAAO,IAAI,CACP,KAAK,EACL,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAE,iBAAwD,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAC7F,CAAC;AACN,CAAC;AAED,SAAgB,kBAAkB,CAAI,MAAqB;IACvD,OAAO,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAOD,SAAgB,OAAO,CACnB,KAAmB,EACnB,CAAsC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAgB,SAAS,CACrB,CAAsC;IAEtC,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC","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"]}
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\nconst nativeSlice = Array.prototype.slice;\n\nconst nativeReverse = Array.prototype.reverse;\n\nconst nativeConcat = Array.prototype.concat;\n\nconst nativeFilter = Array.prototype.filter;\n\nconst nativeReduce = Array.prototype.reduce;\n\nconst nativeReduceRight = Array.prototype.reduceRight;\n\nconst nativeIndexOf = Array.prototype.indexOf;\n\nconst nativeFindIndex = Array.prototype.findIndex;\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function copy<T>(array: ArrayLike<T>): T[];\n\n/** @internal This implementation is for internal use only, the exported declaration is above */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the actual implementation, the exported declaration is above.\nexport const copy: <T>(array: ArrayLike<T>) => T[] = Array.from;\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore duplicate identifier: This is the exported declaration, the implementation is below.\nexport function isArray(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\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"]}
@@ -0,0 +1 @@
1
+ export {};
package/index.test.js ADDED
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const ava_1 = tslib_1.__importDefault(require("ava"));
5
+ const index_1 = require("./index");
6
+ (0, ava_1.default)("isArray", t => {
7
+ t.true((0, index_1.isArray)([1, 2, 3]));
8
+ t.false((0, index_1.isArray)({ length: 3 }));
9
+ });
10
+ (0, ava_1.default)("isArrayLike", t => {
11
+ t.true((0, index_1.isArrayLike)([1, 2, 3]));
12
+ t.true((0, index_1.isArrayLike)({ length: 3 }));
13
+ t.false((0, index_1.isArrayLike)({}));
14
+ t.false((0, index_1.isArrayLike)(3));
15
+ });
16
+ (0, ava_1.default)("first", t => {
17
+ t.is((0, index_1.first)([1, 2, 3]), 1);
18
+ t.is((0, index_1.first)([]), null);
19
+ });
20
+ (0, ava_1.default)("tail", t => {
21
+ t.deepEqual((0, index_1.tail)([1, 2, 3, 4]), [2, 3, 4]);
22
+ t.deepEqual((0, index_1.tail)([]), []);
23
+ });
24
+ (0, ava_1.default)("initial", t => {
25
+ t.deepEqual((0, index_1.initial)([1, 2, 3, 4]), [1, 2, 3]);
26
+ t.deepEqual((0, index_1.initial)([]), []);
27
+ });
28
+ (0, ava_1.default)("last", t => {
29
+ t.is((0, index_1.last)([]), null);
30
+ t.is((0, index_1.last)([1, 2, 3]), 3);
31
+ });
32
+ (0, ava_1.default)("only", t => {
33
+ t.is((0, index_1.only)([]), null);
34
+ t.is((0, index_1.only)([4]), 4);
35
+ t.is((0, index_1.only)([3, 4, 5]), null);
36
+ });
37
+ (0, ava_1.default)("empty", t => {
38
+ t.true((0, index_1.empty)([]));
39
+ t.false((0, index_1.empty)([1, 2, 3]));
40
+ });
41
+ (0, ava_1.default)("reverse", t => {
42
+ const a = [1, 2, 4, 3];
43
+ t.deepEqual((0, index_1.reverse)(a), [3, 4, 2, 1]);
44
+ t.deepEqual(a, [1, 2, 4, 3]); // Ensure original array is untouched.
45
+ });
46
+ (0, ava_1.default)("slice", t => {
47
+ t.deepEqual((0, index_1.slice)([1, 2, 3, 4], 1), [2, 3, 4]);
48
+ t.deepEqual((0, index_1.slice)([1, 2, 3, 4, 5], 1, 4), [2, 3, 4]);
49
+ t.deepEqual((0, index_1.slice)([1, 2, 3], 2), [3]);
50
+ t.deepEqual((0, index_1.slice)([1, 2, 3], 0, 2), [1, 2]);
51
+ t.deepEqual((0, index_1.slice)([], 3, 5), []);
52
+ });
53
+ (0, ava_1.default)("takeWhile", t => {
54
+ t.deepEqual((0, index_1.takeWhile)([1, 2, 3, 4, 3, 2, 1], e => e < 4), [1, 2, 3]);
55
+ t.deepEqual((0, index_1.takeWhile)([1, 2, 3], (_, i) => i < 2), [1, 2]);
56
+ });
57
+ (0, ava_1.default)("dropWhile", t => {
58
+ t.deepEqual((0, index_1.dropWhile)([1, 2, 3, 4, 3, 2, 1], e => e < 4), [4, 3, 2, 1]);
59
+ t.deepEqual((0, index_1.dropWhile)([1, 2, 3], (_, i) => i < 2), [3]);
60
+ });
61
+ (0, ava_1.default)("equal", t => {
62
+ t.true((0, index_1.equal)([1, 2, 3], [1, 2, 3]));
63
+ t.false((0, index_1.equal)([1, 2, 3], [1, 2, 3, 4]));
64
+ t.false((0, index_1.equal)([1, 2, 3, 4], [1, 2, 3]));
65
+ t.false((0, index_1.equal)([1, 3, 3], [1, 2, 3]));
66
+ t.true((0, index_1.equal)([
67
+ [1, 2],
68
+ [3, 4]
69
+ ], [
70
+ [1, 2],
71
+ [3, 4]
72
+ ], index_1.equal));
73
+ t.false((0, index_1.equal)([
74
+ [1, 2],
75
+ [3, 4]
76
+ ], [
77
+ [1, 2],
78
+ [3, 4]
79
+ ]));
80
+ });
81
+ (0, ava_1.default)("prefixMatch", t => {
82
+ t.true((0, index_1.prefixMatch)([], []));
83
+ t.true((0, index_1.prefixMatch)([1, 2, 3], []));
84
+ t.true((0, index_1.prefixMatch)([1, 2, 3, 4], [1, 2]));
85
+ t.false((0, index_1.prefixMatch)([1, 3, 4], [1, 2]));
86
+ t.false((0, index_1.prefixMatch)([], [1]));
87
+ });
88
+ (0, ava_1.default)("map", t => {
89
+ t.deepEqual((0, index_1.map)([1, 2, 3], e => e + 1), [2, 3, 4]);
90
+ t.deepEqual((0, index_1.map)([1, 2, 3], (e, i) => (i === 1 ? e * 10 : e)), [1, 20, 3]);
91
+ });
92
+ (0, ava_1.default)("filter", t => {
93
+ t.deepEqual((0, index_1.filter)([1, 2, 3], e => e % 2 === 1), [1, 3]);
94
+ t.deepEqual((0, index_1.filter)([1, 3, 2, 4, 5], (_, i) => i % 2 === 0), [1, 2, 5]);
95
+ });
96
+ (0, ava_1.default)("exclude", t => {
97
+ t.deepEqual((0, index_1.exclude)([1, 2, 3, 4, 3, 2, 1], n => n < 3), [3, 4, 3]);
98
+ });
99
+ (0, ava_1.default)("excludeNull", t => {
100
+ t.deepEqual((0, index_1.excludeNull)(["a", null, "b"]), ["a", "b"]);
101
+ });
102
+ (0, ava_1.default)("excludeFirst", t => {
103
+ t.deepEqual((0, index_1.excludeFirst)([1, 2, 3, 4, 3, 2, 1], n => n > 2), [1, 2, 4, 3, 2, 1]);
104
+ });
105
+ (0, ava_1.default)("remove", t => {
106
+ t.deepEqual((0, index_1.remove)([1, 2, 3, 4, 3, 2, 1], 3), [1, 2, 4, 2, 1]);
107
+ });
108
+ (0, ava_1.default)("removeFirst", t => {
109
+ t.deepEqual((0, index_1.removeFirst)([1, 2, 3, 4, 3, 2, 1], 3), [1, 2, 4, 3, 2, 1]);
110
+ });
111
+ (0, ava_1.default)("fold", t => {
112
+ t.is((0, index_1.fold)([1, 2, 3], (a, e, i) => a + e * i, 0), 8);
113
+ });
114
+ (0, ava_1.default)("fold1", t => {
115
+ t.is((0, index_1.fold1)([1, 2, 3], (a, e, i) => a + e * i), 9);
116
+ });
117
+ (0, ava_1.default)("foldMap", t => {
118
+ t.is((0, index_1.foldMap)(["2", "3", "4"], (a, b) => a + b, parseFloat, 2), 11);
119
+ t.is((0, index_1.foldMap)([true, false, false], (a, b) => a.substr(0, a.length - 1) + b.substr(1), String, "jam"), "jarualsalse");
120
+ t.is((0, index_1.foldMap)(["2"], (a, b) => a + b, parseFloat, 0), 2);
121
+ });
122
+ (0, ava_1.default)("contains", t => {
123
+ t.true((0, index_1.contains)([1, 2, 3], 1));
124
+ t.false((0, index_1.contains)([1, 2, 3], 0));
125
+ });
126
+ (0, ava_1.default)("lastIndexOf", t => {
127
+ t.is((0, index_1.lastIndexOf)([1, 2, 3, 4, 3, 2, 1], 3), 4);
128
+ });
129
+ (0, ava_1.default)("findIndex", t => {
130
+ t.is((0, index_1.findIndex)([1, 2, 3, 4, 3, 2, 1], n => n >= 3), 2);
131
+ });
132
+ (0, ava_1.default)("findLastIndex", t => {
133
+ t.is((0, index_1.findLastIndex)([1, 2, 3, 4, 3, 2, 1], n => n >= 3), 4);
134
+ });
135
+ (0, ava_1.default)("find", t => {
136
+ t.is((0, index_1.find)([1, 2, 3, 4, 3, 2, 1], n => n >= 3), 3);
137
+ });
138
+ (0, ava_1.default)("findLast", t => {
139
+ t.is((0, index_1.findLast)([1, 2, 3, 4, 5, 2, 1], n => n >= 3), 5);
140
+ });
141
+ (0, ava_1.default)("maximum", t => {
142
+ t.is((0, index_1.maximum)([1, 2, 3]), 3);
143
+ t.is((0, index_1.maximum)([1, 2, 3, 4, 3, 2, 1]), 4);
144
+ t.is((0, index_1.maximum)([]), null);
145
+ });
146
+ (0, ava_1.default)("minimum", t => {
147
+ t.is((0, index_1.minimum)([1, 2, 3]), 1);
148
+ t.is((0, index_1.minimum)([2, 3, 4, 1, 2, 3]), 1);
149
+ t.is((0, index_1.minimum)([]), null);
150
+ });
151
+ (0, ava_1.default)("sum", t => {
152
+ t.is((0, index_1.sum)([1, 2, 3]), 6);
153
+ t.is((0, index_1.sum)([]), 0);
154
+ });
155
+ (0, ava_1.default)("product", t => {
156
+ t.is((0, index_1.product)([1, 2, 3]), 6);
157
+ t.is((0, index_1.product)([]), 1);
158
+ });
159
+ (0, ava_1.default)("and", t => {
160
+ t.true((0, index_1.and)([true, true, true]));
161
+ t.false((0, index_1.and)([true, false, true]));
162
+ t.true((0, index_1.and)([]));
163
+ });
164
+ (0, ava_1.default)("or", t => {
165
+ t.true((0, index_1.or)([true, false, true]));
166
+ t.false((0, index_1.or)([false, false, false]));
167
+ t.false((0, index_1.or)([]));
168
+ });
169
+ (0, ava_1.default)("any", t => {
170
+ t.true((0, index_1.any)([1, 2, 3], e => e > 2));
171
+ t.false((0, index_1.any)([1, 2, 3], e => e > 4));
172
+ });
173
+ (0, ava_1.default)("all", t => {
174
+ t.true((0, index_1.all)([1, 2, 3], e => e < 4));
175
+ t.false((0, index_1.all)([1, 2, 3], e => e > 2));
176
+ const mixed1 = [1, 2, "hello", 3, "goodbye"];
177
+ const mixed2 = [1, 2, 3];
178
+ const acceptNumbers = (array) => true;
179
+ const isNumber = (v) => typeof v === "number";
180
+ t.false((0, index_1.all)(mixed1, isNumber));
181
+ t.true((0, index_1.all)(mixed2, isNumber));
182
+ t.false((0, index_1.all)(mixed1, isNumber) ? acceptNumbers(mixed1) : false);
183
+ t.true((0, index_1.all)(mixed2, isNumber) ? acceptNumbers(mixed2) : false);
184
+ });
185
+ (0, ava_1.default)("concat", t => {
186
+ t.deepEqual((0, index_1.concat)([[1, 2], [], [3], [4, 5]]), [1, 2, 3, 4, 5]);
187
+ t.deepEqual((0, index_1.concat)([[], []]), []);
188
+ });
189
+ (0, ava_1.default)("prepend", t => {
190
+ t.deepEqual((0, index_1.prepend)([1, 2, 3])([4, 5, 6]), [1, 2, 3, 4, 5, 6]);
191
+ t.deepEqual((0, index_1.prepend)([])([4, 5, 6]), [4, 5, 6]);
192
+ t.deepEqual((0, index_1.prepend)([1, 2, 3])([]), [1, 2, 3]);
193
+ });
194
+ (0, ava_1.default)("append", t => {
195
+ t.deepEqual((0, index_1.append)([4, 5, 6])([1, 2, 3]), [1, 2, 3, 4, 5, 6]);
196
+ t.deepEqual((0, index_1.append)([])([1, 2, 3]), [1, 2, 3]);
197
+ t.deepEqual((0, index_1.append)([4, 5, 6])([]), [4, 5, 6]);
198
+ });
199
+ (0, ava_1.default)("concatMap", t => {
200
+ t.deepEqual((0, index_1.concatMap)(["1,2,3", "4,5,6"], s => s.split(",")), ["1", "2", "3", "4", "5", "6"]);
201
+ });
202
+ (0, ava_1.default)("scan", t => {
203
+ t.deepEqual((0, index_1.scan)([1, 2, 3], (a, e, i) => a + e * i, 0), [0, 2, 8]);
204
+ t.deepEqual((0, index_1.scan)(["a", "b", "c"], (a, e, i) => `${a} ${i} ${e}`, "_"), ["_ 0 a", "_ 0 a 1 b", "_ 0 a 1 b 2 c"]);
205
+ });
206
+ (0, ava_1.default)("scan1", t => {
207
+ t.deepEqual((0, index_1.scan1)([1, 2, 3], (a, e, i) => a + e * i), [1, 3, 9]);
208
+ });
209
+ (0, ava_1.default)("scanRight", t => {
210
+ t.deepEqual((0, index_1.scanRight)(["a", "b", "c"], (a, e, i) => `${a} ${i} ${e}`, "_"), ["_ 2 c 1 b 0 a", "_ 2 c 1 b", "_ 2 c"]);
211
+ });
212
+ (0, ava_1.default)("scanRight1", t => {
213
+ t.deepEqual((0, index_1.scanRight1)(["a", "b", "c"], (a, e, i) => `${a} ${i} ${e}`), ["c 1 b 0 a", "c 1 b", "c"]);
214
+ });
215
+ (0, ava_1.default)("split", t => {
216
+ t.deepEqual((0, index_1.split)([2, 1, 3, 4, 5, 6], 2), [
217
+ [2, 1],
218
+ [3, 4, 5, 6]
219
+ ]);
220
+ t.deepEqual((0, index_1.split)([2, 1, 3, 4, 5, 6], 0), [[], [2, 1, 3, 4, 5, 6]]);
221
+ t.deepEqual((0, index_1.split)([2, 1, 3, 4, 5, 6], 10), [[2, 1, 3, 4, 5, 6], []]);
222
+ });
223
+ function isSuccess(result) {
224
+ return result.type === "success";
225
+ }
226
+ (0, ava_1.default)("partition", t => {
227
+ t.deepEqual((0, index_1.partition)([2, 1, 3, 4, 5, 6], e => e % 2 === 1), [
228
+ [1, 3, 5],
229
+ [2, 4, 6]
230
+ ]);
231
+ t.deepEqual((0, index_1.partition)(["abc", "def", "ghi"], (_, i) => i % 2 === 0), [["abc", "ghi"], ["def"]]);
232
+ const results = [
233
+ { type: "success", value: "hello" },
234
+ { type: "error" },
235
+ { type: "success", value: "goodbye" }
236
+ ];
237
+ const partitionedResults = (0, index_1.partition)(results, isSuccess);
238
+ t.deepEqual(partitionedResults, [
239
+ [
240
+ { type: "success", value: "hello" },
241
+ { type: "success", value: "goodbye" }
242
+ ],
243
+ [{ type: "error" }]
244
+ ]);
245
+ });
246
+ (0, ava_1.default)("partitionWhile", t => {
247
+ t.deepEqual((0, index_1.partitionWhile)([1, 3, 2, 4, 5, 6], e => e % 2 === 1), [
248
+ [1, 3],
249
+ [2, 4, 5, 6]
250
+ ]);
251
+ t.deepEqual((0, index_1.partitionWhile)(["abc", "def", "ghi"], (_, i) => i % 2 === 0), [["abc"], ["def", "ghi"]]);
252
+ const results = [
253
+ { type: "success", value: "hello" },
254
+ { type: "error" },
255
+ { type: "success", value: "goodbye" }
256
+ ];
257
+ const partitionedResults = (0, index_1.partitionWhile)(results, isSuccess);
258
+ t.deepEqual(partitionedResults, [
259
+ [{ type: "success", value: "hello" }],
260
+ [{ type: "error" }, { type: "success", value: "goodbye" }]
261
+ ]);
262
+ });
263
+ (0, ava_1.default)("zip", t => {
264
+ t.deepEqual((0, index_1.zip)([1, 2, 3], [6, 5, 4, 3, 2, 1]), [
265
+ [1, 6],
266
+ [2, 5],
267
+ [3, 4]
268
+ ]);
269
+ });
270
+ (0, ava_1.default)("keyBy", t => {
271
+ const map = (0, index_1.keyBy)([1, 3, 4, 2, 5, 6], e => (e % 2 === 0 ? "even" : "odd"));
272
+ t.deepEqual(map.get("even"), [4, 2, 6]);
273
+ t.deepEqual(map.get("odd"), [1, 3, 5]);
274
+ t.deepEqual(Array.from(map.keys()), ["odd", "even"]);
275
+ });
276
+ (0, ava_1.default)("keyFirstBy", t => {
277
+ const map = (0, index_1.keyFirstBy)([1, 3, 4, 2, 5, 6], e => (e % 2 === 0 ? "even" : "odd"));
278
+ t.is(map.get("even"), 4);
279
+ t.is(map.get("odd"), 1);
280
+ t.deepEqual(Array.from(map.keys()), ["odd", "even"]);
281
+ });
282
+ (0, ava_1.default)("keyLastBy", t => {
283
+ const map = (0, index_1.keyLastBy)([1, 3, 4, 2, 5, 6], e => (e % 2 === 0 ? "even" : "odd"));
284
+ t.is(map.get("even"), 6);
285
+ t.is(map.get("odd"), 5);
286
+ t.deepEqual(Array.from(map.keys()), ["odd", "even"]);
287
+ });
288
+ (0, ava_1.default)("mapKeyBy", t => {
289
+ const map = (0, index_1.mapKeyBy)([1, 3, 4, 2, 5, 6], e => [e % 2 === 0 ? "even" : "odd", String(e)]);
290
+ t.deepEqual(map.get("even"), ["4", "2", "6"]);
291
+ t.deepEqual(map.get("odd"), ["1", "3", "5"]);
292
+ t.deepEqual(Array.from(map.keys()), ["odd", "even"]);
293
+ });
294
+ (0, ava_1.default)("mapKeyFirstBy", t => {
295
+ const map = (0, index_1.mapKeyFirstBy)([1, 3, 4, 2, 5, 6], e => [e % 2 === 0 ? "even" : "odd", String(e)]);
296
+ t.is(map.get("even"), "4");
297
+ t.is(map.get("odd"), "1");
298
+ t.deepEqual(Array.from(map.keys()), ["odd", "even"]);
299
+ });
300
+ (0, ava_1.default)("mapKeyLastBy", t => {
301
+ const map = (0, index_1.mapKeyLastBy)([1, 3, 4, 2, 5, 6], e => [e % 2 === 0 ? "even" : "odd", String(e)]);
302
+ t.deepEqual(Array.from(map.entries()), [
303
+ ["odd", "5"],
304
+ ["even", "6"]
305
+ ]);
306
+ });
307
+ (0, ava_1.default)("groupByIdentity", t => {
308
+ t.deepEqual((0, index_1.groupByIdentity)(["abc", "adef", "bghi"], a => a.substr(0, 1)), [["abc", "adef"], ["bghi"]]);
309
+ });
310
+ (0, ava_1.default)("sort", t => {
311
+ t.deepEqual((0, index_1.sort)([2, 4, 3, 1]), [1, 2, 3, 4]);
312
+ t.deepEqual((0, index_1.sort)(["hello", "goodbye"]), ["goodbye", "hello"]);
313
+ t.deepEqual((0, index_1.sort)([-2, 4, -3, 1], (a, b) => Math.abs(a) - Math.abs(b)), [1, -2, -3, 4]);
314
+ });
315
+ (0, ava_1.default)("sortBy", t => {
316
+ t.deepEqual((0, index_1.sortBy)([
317
+ { x: "a", y: 2 },
318
+ { x: "b", y: 4 },
319
+ { x: "c", y: 3 },
320
+ { x: "d", y: 1 }
321
+ ], ({ y }) => y), [
322
+ { x: "d", y: 1 },
323
+ { x: "a", y: 2 },
324
+ { x: "c", y: 3 },
325
+ { x: "b", y: 4 }
326
+ ]);
327
+ t.deepEqual((0, index_1.sortBy)([-2, 4, -3, 1], e => Math.abs(e)), [1, -2, -3, 4]);
328
+ });
329
+ (0, ava_1.default)("forEach", t => {
330
+ const a = ["a", "b", "c"];
331
+ let s = "";
332
+ const b = (0, index_1.forEach)(a, c => (s += c));
333
+ t.is(b, a);
334
+ t.is(s, "abc");
335
+ });
336
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["index.test.ts"],"names":[],"mappings":"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","sourcesContent":["import test from \"ava\";\nimport {\n all,\n and,\n any,\n append,\n concat,\n concatMap,\n contains,\n dropWhile,\n empty,\n equal,\n exclude,\n excludeFirst,\n excludeNull,\n filter,\n find,\n findIndex,\n findLast,\n findLastIndex,\n first,\n fold,\n fold1,\n foldMap,\n forEach,\n groupByIdentity,\n initial,\n isArray,\n isArrayLike,\n keyBy,\n keyFirstBy,\n keyLastBy,\n last,\n lastIndexOf,\n map,\n mapKeyBy,\n mapKeyFirstBy,\n mapKeyLastBy,\n maximum,\n minimum,\n only,\n or,\n partition,\n partitionWhile,\n prefixMatch,\n prepend,\n product,\n remove,\n removeFirst,\n reverse,\n scan,\n scan1,\n scanRight,\n scanRight1,\n slice,\n sort,\n sortBy,\n split,\n sum,\n tail,\n takeWhile,\n zip\n} from \"./index\";\n\ntest(\"isArray\", t => {\n t.true(isArray([1, 2, 3]));\n t.false(isArray({length: 3}));\n});\n\ntest(\"isArrayLike\", t => {\n t.true(isArrayLike([1, 2, 3]));\n t.true(isArrayLike({length: 3}));\n t.false(isArrayLike({}));\n t.false(isArrayLike(3));\n});\n\ntest(\"first\", t => {\n t.is(first([1, 2, 3]), 1);\n t.is(first([]), null);\n});\n\ntest(\"tail\", t => {\n t.deepEqual(tail([1, 2, 3, 4]), [2, 3, 4]);\n t.deepEqual(tail([]), []);\n});\n\ntest(\"initial\", t => {\n t.deepEqual(initial([1, 2, 3, 4]), [1, 2, 3]);\n t.deepEqual(initial([]), []);\n});\n\ntest(\"last\", t => {\n t.is(last([]), null);\n t.is(last([1, 2, 3]), 3);\n});\n\ntest(\"only\", t => {\n t.is(only([]), null);\n t.is(only([4]), 4);\n t.is(only([3, 4, 5]), null);\n});\n\ntest(\"empty\", t => {\n t.true(empty([]));\n t.false(empty([1, 2, 3]));\n});\n\ntest(\"reverse\", t => {\n const a = [1, 2, 4, 3];\n t.deepEqual(reverse(a), [3, 4, 2, 1]);\n t.deepEqual(a, [1, 2, 4, 3]); // Ensure original array is untouched.\n});\n\ntest(\"slice\", t => {\n t.deepEqual(slice([1, 2, 3, 4], 1), [2, 3, 4]);\n t.deepEqual(slice([1, 2, 3, 4, 5], 1, 4), [2, 3, 4]);\n t.deepEqual(slice([1, 2, 3], 2), [3]);\n t.deepEqual(slice([1, 2, 3], 0, 2), [1, 2]);\n t.deepEqual(slice([], 3, 5), []);\n});\n\ntest(\"takeWhile\", t => {\n t.deepEqual(\n takeWhile([1, 2, 3, 4, 3, 2, 1], e => e < 4),\n [1, 2, 3]\n );\n t.deepEqual(\n takeWhile([1, 2, 3], (_, i) => i < 2),\n [1, 2]\n );\n});\n\ntest(\"dropWhile\", t => {\n t.deepEqual(\n dropWhile([1, 2, 3, 4, 3, 2, 1], e => e < 4),\n [4, 3, 2, 1]\n );\n t.deepEqual(\n dropWhile([1, 2, 3], (_, i) => i < 2),\n [3]\n );\n});\n\ntest(\"equal\", t => {\n t.true(equal([1, 2, 3], [1, 2, 3]));\n t.false(equal([1, 2, 3], [1, 2, 3, 4]));\n t.false(equal([1, 2, 3, 4], [1, 2, 3]));\n t.false(equal([1, 3, 3], [1, 2, 3]));\n t.true(\n equal(\n [\n [1, 2],\n [3, 4]\n ],\n [\n [1, 2],\n [3, 4]\n ],\n equal\n )\n );\n t.false(\n equal(\n [\n [1, 2],\n [3, 4]\n ],\n [\n [1, 2],\n [3, 4]\n ]\n )\n );\n});\n\ntest(\"prefixMatch\", t => {\n t.true(prefixMatch([], []));\n t.true(prefixMatch([1, 2, 3], []));\n t.true(prefixMatch([1, 2, 3, 4], [1, 2]));\n t.false(prefixMatch([1, 3, 4], [1, 2]));\n t.false(prefixMatch([], [1]));\n});\n\ntest(\"map\", t => {\n t.deepEqual(\n map([1, 2, 3], e => e + 1),\n [2, 3, 4]\n );\n t.deepEqual(\n map([1, 2, 3], (e, i) => (i === 1 ? e * 10 : e)),\n [1, 20, 3]\n );\n});\n\ntest(\"filter\", t => {\n t.deepEqual(\n filter([1, 2, 3], e => e % 2 === 1),\n [1, 3]\n );\n t.deepEqual(\n filter([1, 3, 2, 4, 5], (_, i) => i % 2 === 0),\n [1, 2, 5]\n );\n});\n\ntest(\"exclude\", t => {\n t.deepEqual(\n exclude([1, 2, 3, 4, 3, 2, 1], n => n < 3),\n [3, 4, 3]\n );\n});\n\ntest(\"excludeNull\", t => {\n t.deepEqual(excludeNull([\"a\", null, \"b\"]), [\"a\", \"b\"]);\n});\n\ntest(\"excludeFirst\", t => {\n t.deepEqual(\n excludeFirst([1, 2, 3, 4, 3, 2, 1], n => n > 2),\n [1, 2, 4, 3, 2, 1]\n );\n});\n\ntest(\"remove\", t => {\n t.deepEqual(remove([1, 2, 3, 4, 3, 2, 1], 3), [1, 2, 4, 2, 1]);\n});\n\ntest(\"removeFirst\", t => {\n t.deepEqual(removeFirst([1, 2, 3, 4, 3, 2, 1], 3), [1, 2, 4, 3, 2, 1]);\n});\n\ntest(\"fold\", t => {\n t.is(\n fold([1, 2, 3], (a, e, i) => a + e * i, 0),\n 8\n );\n});\n\ntest(\"fold1\", t => {\n t.is(\n fold1([1, 2, 3], (a, e, i) => a + e * i),\n 9\n );\n});\n\ntest(\"foldMap\", t => {\n t.is(\n foldMap([\"2\", \"3\", \"4\"], (a, b) => a + b, parseFloat, 2),\n 11\n );\n t.is(\n foldMap(\n [true, false, false],\n (a, b) => a.substr(0, a.length - 1) + b.substr(1),\n String,\n \"jam\"\n ),\n \"jarualsalse\"\n );\n t.is(\n foldMap([\"2\"], (a, b) => a + b, parseFloat, 0),\n 2\n );\n});\n\ntest(\"contains\", t => {\n t.true(contains([1, 2, 3], 1));\n t.false(contains([1, 2, 3], 0));\n});\n\ntest(\"lastIndexOf\", t => {\n t.is(lastIndexOf([1, 2, 3, 4, 3, 2, 1], 3), 4);\n});\n\ntest(\"findIndex\", t => {\n t.is(\n findIndex([1, 2, 3, 4, 3, 2, 1], n => n >= 3),\n 2\n );\n});\n\ntest(\"findLastIndex\", t => {\n t.is(\n findLastIndex([1, 2, 3, 4, 3, 2, 1], n => n >= 3),\n 4\n );\n});\n\ntest(\"find\", t => {\n t.is(\n find([1, 2, 3, 4, 3, 2, 1], n => n >= 3),\n 3\n );\n});\n\ntest(\"findLast\", t => {\n t.is(\n findLast([1, 2, 3, 4, 5, 2, 1], n => n >= 3),\n 5\n );\n});\n\ntest(\"maximum\", t => {\n t.is(maximum([1, 2, 3]), 3);\n t.is(maximum([1, 2, 3, 4, 3, 2, 1]), 4);\n t.is(maximum([]), null);\n});\n\ntest(\"minimum\", t => {\n t.is(minimum([1, 2, 3]), 1);\n t.is(minimum([2, 3, 4, 1, 2, 3]), 1);\n t.is(minimum([]), null);\n});\n\ntest(\"sum\", t => {\n t.is(sum([1, 2, 3]), 6);\n t.is(sum([]), 0);\n});\n\ntest(\"product\", t => {\n t.is(product([1, 2, 3]), 6);\n t.is(product([]), 1);\n});\n\ntest(\"and\", t => {\n t.true(and([true, true, true]));\n t.false(and([true, false, true]));\n t.true(and([]));\n});\n\ntest(\"or\", t => {\n t.true(or([true, false, true]));\n t.false(or([false, false, false]));\n t.false(or([]));\n});\n\ntest(\"any\", t => {\n t.true(any([1, 2, 3], e => e > 2));\n t.false(any([1, 2, 3], e => e > 4));\n});\n\ntest(\"all\", t => {\n t.true(all([1, 2, 3], e => e < 4));\n t.false(all([1, 2, 3], e => e > 2));\n\n const mixed1: Array<string | number> = [1, 2, \"hello\", 3, \"goodbye\"];\n const mixed2: Array<string | number> = [1, 2, 3];\n\n const acceptNumbers = (array: readonly number[]): boolean => true;\n const isNumber = (v: unknown): v is number => typeof v === \"number\";\n\n t.false(all(mixed1, isNumber));\n t.true(all(mixed2, isNumber));\n\n t.false(all(mixed1, isNumber) ? acceptNumbers(mixed1) : false);\n t.true(all(mixed2, isNumber) ? acceptNumbers(mixed2) : false);\n});\n\ntest(\"concat\", t => {\n t.deepEqual(concat([[1, 2], [], [3], [4, 5]]), [1, 2, 3, 4, 5]);\n t.deepEqual(concat([[], []]), []);\n});\n\ntest(\"prepend\", t => {\n t.deepEqual(prepend([1, 2, 3])([4, 5, 6]), [1, 2, 3, 4, 5, 6]);\n t.deepEqual(prepend<number>([])([4, 5, 6]), [4, 5, 6]);\n t.deepEqual(prepend([1, 2, 3])([]), [1, 2, 3]);\n});\n\ntest(\"append\", t => {\n t.deepEqual(append([4, 5, 6])([1, 2, 3]), [1, 2, 3, 4, 5, 6]);\n t.deepEqual(append<number>([])([1, 2, 3]), [1, 2, 3]);\n t.deepEqual(append([4, 5, 6])([]), [4, 5, 6]);\n});\n\ntest(\"concatMap\", t => {\n t.deepEqual(\n concatMap([\"1,2,3\", \"4,5,6\"], s => s.split(\",\")),\n [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"]\n );\n});\n\ntest(\"scan\", t => {\n t.deepEqual(\n scan([1, 2, 3], (a, e, i) => a + e * i, 0),\n [0, 2, 8]\n );\n t.deepEqual(\n scan([\"a\", \"b\", \"c\"], (a, e, i) => `${a} ${i} ${e}`, \"_\"),\n [\"_ 0 a\", \"_ 0 a 1 b\", \"_ 0 a 1 b 2 c\"]\n );\n});\n\ntest(\"scan1\", t => {\n t.deepEqual(\n scan1([1, 2, 3], (a, e, i) => a + e * i),\n [1, 3, 9]\n );\n});\n\ntest(\"scanRight\", t => {\n t.deepEqual(\n scanRight([\"a\", \"b\", \"c\"], (a, e, i) => `${a} ${i} ${e}`, \"_\"),\n [\"_ 2 c 1 b 0 a\", \"_ 2 c 1 b\", \"_ 2 c\"]\n );\n});\n\ntest(\"scanRight1\", t => {\n t.deepEqual(\n scanRight1([\"a\", \"b\", \"c\"], (a, e, i) => `${a} ${i} ${e}`),\n [\"c 1 b 0 a\", \"c 1 b\", \"c\"]\n );\n});\n\ntest(\"split\", t => {\n t.deepEqual(split([2, 1, 3, 4, 5, 6], 2), [\n [2, 1],\n [3, 4, 5, 6]\n ]);\n t.deepEqual(split([2, 1, 3, 4, 5, 6], 0), [[], [2, 1, 3, 4, 5, 6]]);\n t.deepEqual(split([2, 1, 3, 4, 5, 6], 10), [[2, 1, 3, 4, 5, 6], []]);\n});\n\ntype Result<T> = Success<T> | Error;\n\ninterface Success<T> {\n type: \"success\";\n value: T;\n}\n\ninterface Error {\n type: \"error\";\n}\n\nfunction isSuccess<T>(result: Result<T>): result is Success<T> {\n return result.type === \"success\";\n}\n\ntest(\"partition\", t => {\n t.deepEqual(\n partition([2, 1, 3, 4, 5, 6], e => e % 2 === 1),\n [\n [1, 3, 5],\n [2, 4, 6]\n ]\n );\n\n t.deepEqual(\n partition([\"abc\", \"def\", \"ghi\"], (_: string, i: number) => i % 2 === 0),\n [[\"abc\", \"ghi\"], [\"def\"]]\n );\n\n const results: Array<Result<string>> = [\n {type: \"success\", value: \"hello\"},\n {type: \"error\"},\n {type: \"success\", value: \"goodbye\"}\n ];\n\n const partitionedResults: [Array<Success<string>>, Error[]] = partition(results, isSuccess);\n\n t.deepEqual(partitionedResults, [\n [\n {type: \"success\", value: \"hello\"},\n {type: \"success\", value: \"goodbye\"}\n ],\n [{type: \"error\"}]\n ]);\n});\n\ntest(\"partitionWhile\", t => {\n t.deepEqual(\n partitionWhile([1, 3, 2, 4, 5, 6], e => e % 2 === 1),\n [\n [1, 3],\n [2, 4, 5, 6]\n ]\n );\n\n t.deepEqual(\n partitionWhile([\"abc\", \"def\", \"ghi\"], (_: string, i: number) => i % 2 === 0),\n [[\"abc\"], [\"def\", \"ghi\"]]\n );\n\n const results: Array<Result<string>> = [\n {type: \"success\", value: \"hello\"},\n {type: \"error\"},\n {type: \"success\", value: \"goodbye\"}\n ];\n\n const partitionedResults: [Array<Success<string>>, Array<Result<string>>] = partitionWhile(\n results,\n isSuccess\n );\n\n t.deepEqual(partitionedResults, [\n [{type: \"success\", value: \"hello\"}],\n [{type: \"error\"}, {type: \"success\", value: \"goodbye\"}]\n ]);\n});\n\ntest(\"zip\", t => {\n t.deepEqual(zip([1, 2, 3], [6, 5, 4, 3, 2, 1]), [\n [1, 6],\n [2, 5],\n [3, 4]\n ]);\n});\n\ntest(\"keyBy\", t => {\n const map = keyBy([1, 3, 4, 2, 5, 6], e => (e % 2 === 0 ? \"even\" : \"odd\"));\n t.deepEqual(map.get(\"even\"), [4, 2, 6]);\n t.deepEqual(map.get(\"odd\"), [1, 3, 5]);\n t.deepEqual(Array.from(map.keys()), [\"odd\", \"even\"]);\n});\n\ntest(\"keyFirstBy\", t => {\n const map = keyFirstBy([1, 3, 4, 2, 5, 6], e => (e % 2 === 0 ? \"even\" : \"odd\"));\n t.is(map.get(\"even\"), 4);\n t.is(map.get(\"odd\"), 1);\n t.deepEqual(Array.from(map.keys()), [\"odd\", \"even\"]);\n});\n\ntest(\"keyLastBy\", t => {\n const map = keyLastBy([1, 3, 4, 2, 5, 6], e => (e % 2 === 0 ? \"even\" : \"odd\"));\n t.is(map.get(\"even\"), 6);\n t.is(map.get(\"odd\"), 5);\n t.deepEqual(Array.from(map.keys()), [\"odd\", \"even\"]);\n});\n\ntest(\"mapKeyBy\", t => {\n const map = mapKeyBy([1, 3, 4, 2, 5, 6], e => [e % 2 === 0 ? \"even\" : \"odd\", String(e)]);\n t.deepEqual(map.get(\"even\"), [\"4\", \"2\", \"6\"]);\n t.deepEqual(map.get(\"odd\"), [\"1\", \"3\", \"5\"]);\n t.deepEqual(Array.from(map.keys()), [\"odd\", \"even\"]);\n});\n\ntest(\"mapKeyFirstBy\", t => {\n const map = mapKeyFirstBy([1, 3, 4, 2, 5, 6], e => [e % 2 === 0 ? \"even\" : \"odd\", String(e)]);\n t.is(map.get(\"even\"), \"4\");\n t.is(map.get(\"odd\"), \"1\");\n t.deepEqual(Array.from(map.keys()), [\"odd\", \"even\"]);\n});\n\ntest(\"mapKeyLastBy\", t => {\n const map = mapKeyLastBy([1, 3, 4, 2, 5, 6], e => [e % 2 === 0 ? \"even\" : \"odd\", String(e)]);\n t.deepEqual(Array.from(map.entries()), [\n [\"odd\", \"5\"],\n [\"even\", \"6\"]\n ]);\n});\n\ntest(\"groupByIdentity\", t => {\n t.deepEqual(\n groupByIdentity([\"abc\", \"adef\", \"bghi\"], a => a.substr(0, 1)),\n [[\"abc\", \"adef\"], [\"bghi\"]]\n );\n});\n\ntest(\"sort\", t => {\n t.deepEqual(sort([2, 4, 3, 1]), [1, 2, 3, 4]);\n t.deepEqual(sort([\"hello\", \"goodbye\"]), [\"goodbye\", \"hello\"]);\n t.deepEqual(\n sort([-2, 4, -3, 1], (a, b) => Math.abs(a) - Math.abs(b)),\n [1, -2, -3, 4]\n );\n});\n\ntest(\"sortBy\", t => {\n t.deepEqual(\n sortBy(\n [\n {x: \"a\", y: 2},\n {x: \"b\", y: 4},\n {x: \"c\", y: 3},\n {x: \"d\", y: 1}\n ],\n ({y}) => y\n ),\n [\n {x: \"d\", y: 1},\n {x: \"a\", y: 2},\n {x: \"c\", y: 3},\n {x: \"b\", y: 4}\n ]\n );\n t.deepEqual(\n sortBy([-2, 4, -3, 1], e => Math.abs(e)),\n [1, -2, -3, 4]\n );\n});\n\ntest(\"forEach\", t => {\n const a = [\"a\", \"b\", \"c\"];\n let s = \"\";\n const b = forEach(a, c => (s += c));\n t.is(b, a);\n t.is(s, \"abc\");\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softwareventures/array",
3
- "version": "7.0.1",
3
+ "version": "8.0.0",
4
4
  "description": "Pure functional array manipulation and traversal",
5
5
  "keywords": [
6
6
  "array",
@@ -14,15 +14,16 @@
14
14
  "repository": "github:softwareventures/array",
15
15
  "license": "ISC",
16
16
  "scripts": {
17
+ "commit": "cz",
17
18
  "fix": "tsc --noEmit && eslint . --fix && prettier --write .",
19
+ "_postinstall": "husky",
18
20
  "lint": "tsc --noEmit && eslint . && prettier --check .",
19
- "prepare": "husky && tsc",
20
- "semantic-release": "semantic-release",
21
+ "prepack": "tsc",
21
22
  "test": "ava"
22
23
  },
23
24
  "sideEffects": false,
24
25
  "engines": {
25
- "node": "^18 || >=20"
26
+ "node": "^20 || ^22 || ^24 || >=25"
26
27
  },
27
28
  "dependencies": {
28
29
  "@softwareventures/nullable": "^1.0.0 || ^2.0.0 || ^3.0.0",
@@ -30,36 +31,35 @@
30
31
  "tslib": "^2.0.0"
31
32
  },
32
33
  "devDependencies": {
33
- "@softwareventures/eslint-config": "9.2.0",
34
- "@softwareventures/precise-commits": "4.0.19",
34
+ "@commitlint/cli": "19.8.1",
35
+ "@commitlint/config-conventional": "19.8.1",
36
+ "@commitlint/cz-commitlint": "19.8.1",
37
+ "@eslint/js": "9.39.4",
38
+ "@softwareventures/eslint-config": "10.0.0-alpha.2",
39
+ "@softwareventures/precise-commits": "4.0.23",
35
40
  "@softwareventures/prettier-config": "4.0.0",
36
- "@softwareventures/semantic-release-config": "4.1.0",
37
- "@softwareventures/tsconfig": "7.3.0",
38
- "@typescript-eslint/eslint-plugin": "8.35.0",
39
- "@typescript-eslint/parser": "8.35.0",
41
+ "@softwareventures/tsconfig": "8.1.1",
42
+ "@types/node": "18.19.130",
43
+ "@typescript-eslint/eslint-plugin": "8.56.1",
44
+ "@typescript-eslint/parser": "8.56.1",
40
45
  "ava": "6.4.0",
41
- "conventional-changelog-conventionalcommits": "7.0.2",
42
- "cz-conventional-changelog": "3.3.0",
43
- "eslint": "8.57.1",
44
- "eslint-config-prettier": "10.1.5",
45
- "eslint-plugin-import": "2.31.0",
46
- "eslint-plugin-jsdoc": "48.11.0",
46
+ "commitizen": "4.3.1",
47
+ "eslint": "9.39.4",
48
+ "eslint-config-prettier": "10.1.8",
49
+ "eslint-plugin-import": "2.32.0",
50
+ "eslint-plugin-jsdoc": "62.7.1",
47
51
  "eslint-plugin-prefer-arrow": "1.2.3",
48
- "eslint-plugin-sonarjs": "3.0.3",
52
+ "eslint-plugin-sonarjs": "4.0.1",
49
53
  "husky": "9.1.7",
50
- "prettier": "3.6.0",
51
- "semantic-release": "22.0.12",
54
+ "inquirer": "9.3.8",
55
+ "prettier": "3.8.1",
52
56
  "ts-node": "10.9.2",
53
- "typescript": "5.8.3"
54
- },
55
- "eslintConfig": {
56
- "root": true,
57
- "extends": "@softwareventures"
57
+ "typescript": "5.9.3"
58
58
  },
59
59
  "prettier": "@softwareventures/prettier-config",
60
60
  "config": {
61
61
  "commitizen": {
62
- "path": "./node_modules/cz-conventional-changelog"
62
+ "path": "@commitlint/cz-commitlint"
63
63
  }
64
64
  },
65
65
  "ava": {
@@ -73,5 +73,5 @@
73
73
  "release": {
74
74
  "extends": "@softwareventures/semantic-release-config"
75
75
  },
76
- "packageManager": "yarn@1.22.22"
76
+ "packageManager": "yarn@4.12.0"
77
77
  }
package/.husky/common.sh DELETED
@@ -1,8 +0,0 @@
1
- command_exists () {
2
- command -v "$1" >/dev/null 2>&1
3
- }
4
-
5
- # Workaround for Windows 10, Git Bash and Yarn, https://typicode.github.io/husky/#/?id=yarn-on-windows
6
- if command_exists winpty && test -t 1; then
7
- exec < /dev/tty
8
- fi
package/.husky/pre-commit DELETED
@@ -1,3 +0,0 @@
1
- . "$(dirname "$0")/common.sh"
2
-
3
- yarn precise-commits
package/.prettierignore DELETED
@@ -1,6 +0,0 @@
1
- .idea
2
- node_modules
3
- *.js
4
- *.d.ts
5
- *.js.map
6
- !/types/*.d.ts