@softwareventures/array 7.0.1 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +1 -1
- package/index.js +12 -27
- package/index.js.map +1 -1
- package/index.test.d.ts +1 -0
- package/index.test.js +336 -0
- package/index.test.js.map +1 -0
- package/package.json +26 -26
- package/.husky/common.sh +0 -8
- package/.husky/pre-commit +0 -3
- package/.prettierignore +0 -6
package/LICENSE.md
CHANGED
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
|
|
494
|
+
return internalMaximum(array, compare ?? ordered_1.compare);
|
|
504
495
|
}
|
|
505
496
|
function maximumFn(compare) {
|
|
506
|
-
return array => internalMaximum(array, 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
|
|
518
|
+
return internalMinimum(array, compare ?? ordered_1.compare);
|
|
528
519
|
}
|
|
529
520
|
function minimumFn(compare) {
|
|
530
|
-
return array => internalMinimum(array, 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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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"]}
|
package/index.test.d.ts
ADDED
|
@@ -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": "
|
|
3
|
+
"version": "8.0.1",
|
|
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
|
-
"
|
|
20
|
-
"semantic-release": "semantic-release",
|
|
21
|
+
"prepack": "tsc",
|
|
21
22
|
"test": "ava"
|
|
22
23
|
},
|
|
23
24
|
"sideEffects": false,
|
|
24
25
|
"engines": {
|
|
25
|
-
"node": "^
|
|
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
|
-
"@
|
|
34
|
-
"@
|
|
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/
|
|
37
|
-
"@
|
|
38
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
39
|
-
"@typescript-eslint/parser": "8.
|
|
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
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"eslint": "
|
|
44
|
-
"eslint-
|
|
45
|
-
"eslint-plugin-
|
|
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": "
|
|
52
|
+
"eslint-plugin-sonarjs": "4.0.1",
|
|
49
53
|
"husky": "9.1.7",
|
|
50
|
-
"
|
|
51
|
-
"
|
|
54
|
+
"inquirer": "9.3.8",
|
|
55
|
+
"prettier": "3.8.1",
|
|
52
56
|
"ts-node": "10.9.2",
|
|
53
|
-
"typescript": "5.
|
|
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": "
|
|
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@
|
|
76
|
+
"packageManager": "yarn@4.12.0"
|
|
77
77
|
}
|
package/.husky/common.sh
DELETED
package/.husky/pre-commit
DELETED